From 70dc928f1b421d47f536b50a9fb15b7896953cb6 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Wed, 6 Nov 2024 19:55:10 +0000 Subject: [PATCH 01/10] admin channels --- proto/autogenerated/client.md | 58 ++++++-- proto/autogenerated/go/http_client.go | 59 +++++++- proto/autogenerated/go/types.go | 28 +++- proto/autogenerated/ts/express_server.ts | 60 ++++++-- proto/autogenerated/ts/http_client.ts | 31 +++- proto/autogenerated/ts/nostr_client.ts | 31 +++- proto/autogenerated/ts/nostr_transport.ts | 46 ++++-- proto/autogenerated/ts/types.ts | 167 ++++++++++++++++++---- proto/service/methods.proto | 28 +++- proto/service/structs.proto | 46 ++++-- src/services/lnd/lnd.ts | 58 +++++++- src/services/lnd/openChannelReq.ts | 4 +- src/services/main/adminManager.ts | 28 ++++ src/services/main/paymentManager.ts | 2 - src/services/serverMethods/index.ts | 35 +++-- src/tests/adminChannels.spec.ts | 20 +++ 16 files changed, 591 insertions(+), 110 deletions(-) create mode 100644 src/tests/adminChannels.spec.ts diff --git a/proto/autogenerated/client.md b/proto/autogenerated/client.md index ac9aa9b11..2e8afe675 100644 --- a/proto/autogenerated/client.md +++ b/proto/autogenerated/client.md @@ -18,6 +18,11 @@ The nostr server will send back a message response, and inside the body there wi - input: [AddAppRequest](#AddAppRequest) - output: [AuthApp](#AuthApp) +- AddPeer + - auth type: __Admin__ + - input: [AddPeerRequest](#AddPeerRequest) + - This methods has an __empty__ __response__ body + - AddProduct - auth type: __User__ - input: [AddProductRequest](#AddProductRequest) @@ -48,6 +53,11 @@ The nostr server will send back a message response, and inside the body there wi - This methods has an __empty__ __request__ body - This methods has an __empty__ __response__ body +- CloseChannel + - auth type: __Admin__ + - input: [CloseChannelRequest](#CloseChannelRequest) + - output: [CloseChannelResponse](#CloseChannelResponse) + - CreateOneTimeInviteLink - auth type: __Admin__ - input: [CreateOneTimeInviteLinkRequest](#CreateOneTimeInviteLinkRequest) @@ -181,7 +191,7 @@ The nostr server will send back a message response, and inside the body there wi - output: [NewInvoiceResponse](#NewInvoiceResponse) - OpenChannel - - auth type: __User__ + - auth type: __Admin__ - input: [OpenChannelRequest](#OpenChannelRequest) - output: [OpenChannelResponse](#OpenChannelResponse) @@ -282,6 +292,13 @@ The nostr server will send back a message response, and inside the body there wi - input: [AddAppUserInvoiceRequest](#AddAppUserInvoiceRequest) - output: [NewInvoiceResponse](#NewInvoiceResponse) +- AddPeer + - auth type: __Admin__ + - http method: __post__ + - http route: __/api/admin/peer__ + - input: [AddPeerRequest](#AddPeerRequest) + - This methods has an __empty__ __response__ body + - AddProduct - auth type: __User__ - http method: __post__ @@ -324,6 +341,13 @@ The nostr server will send back a message response, and inside the body there wi - This methods has an __empty__ __request__ body - This methods has an __empty__ __response__ body +- CloseChannel + - auth type: __Admin__ + - http method: __post__ + - http route: __/api/admin/channel/close__ + - input: [CloseChannelRequest](#CloseChannelRequest) + - output: [CloseChannelResponse](#CloseChannelResponse) + - CreateOneTimeInviteLink - auth type: __Admin__ - http method: __post__ @@ -600,9 +624,9 @@ The nostr server will send back a message response, and inside the body there wi - output: [NewInvoiceResponse](#NewInvoiceResponse) - OpenChannel - - auth type: __User__ + - auth type: __Admin__ - http method: __post__ - - http route: __/api/user/open/channel__ + - http route: __/api/admin/channel/open__ - input: [OpenChannelRequest](#OpenChannelRequest) - output: [OpenChannelResponse](#OpenChannelResponse) @@ -736,6 +760,11 @@ The nostr server will send back a message response, and inside the body there wi - __fail_if_exists__: _boolean_ - __identifier__: _string_ +### AddPeerRequest + - __host__: _string_ + - __port__: _number_ + - __pubkey__: _string_ + ### AddProductRequest - __name__: _string_ - __price_sats__: _number_ @@ -794,6 +823,15 @@ The nostr server will send back a message response, and inside the body there wi ### CallbackUrl - __url__: _string_ +### CloseChannelRequest + - __force__: _boolean_ + - __funding_txid__: _string_ + - __output_index__: _number_ + - __sat_per_v_byte__: _number_ + +### CloseChannelResponse + - __closing_txid__: _string_ + ### ClosedChannel - __capacity__: _number_ - __channel_id__: _string_ @@ -863,6 +901,9 @@ The nostr server will send back a message response, and inside the body there wi ### GetAppUserRequest - __user_identifier__: _string_ +### GetChannelPolicyRequest + - __channel_id__: _string_ + ### GetInviteTokenStateRequest - __invite_token__: _string_ @@ -1004,13 +1045,14 @@ The nostr server will send back a message response, and inside the body there wi - __remote_balance__: _number_ ### OpenChannelRequest - - __closeAddress__: _string_ - - __destination__: _string_ - - __fundingAmount__: _number_ - - __pushAmount__: _number_ + - __close_address__: _string_ *this field is optional + - __local_funding_amount__: _number_ + - __node_pubkey__: _string_ + - __push_sat__: _number_ *this field is optional + - __sat_per_v_byte__: _number_ ### OpenChannelResponse - - __channelId__: _string_ + - __channel_id__: _string_ ### PayAddressRequest - __address__: _string_ diff --git a/proto/autogenerated/go/http_client.go b/proto/autogenerated/go/http_client.go index 67935d5bc..6c64e3ff6 100644 --- a/proto/autogenerated/go/http_client.go +++ b/proto/autogenerated/go/http_client.go @@ -58,12 +58,14 @@ type Client struct { AddAppInvoice func(req AddAppInvoiceRequest) (*NewInvoiceResponse, error) AddAppUser func(req AddAppUserRequest) (*AppUser, error) AddAppUserInvoice func(req AddAppUserInvoiceRequest) (*NewInvoiceResponse, error) + AddPeer func(req AddPeerRequest) error AddProduct func(req AddProductRequest) (*Product, error) AuthApp func(req AuthAppRequest) (*AuthApp, error) AuthorizeDebit func(req DebitAuthorizationRequest) (*DebitAuthorization, error) BanDebit func(req DebitOperation) error BanUser func(req BanUserRequest) (*BanUserResponse, error) // batching method: BatchUser not implemented + CloseChannel func(req CloseChannelRequest) (*CloseChannelResponse, error) CreateOneTimeInviteLink func(req CreateOneTimeInviteLinkRequest) (*CreateOneTimeInviteLinkResponse, error) DecodeInvoice func(req DecodeInvoiceRequest) (*DecodeInvoiceResponse, error) EditDebit func(req DebitAuthorizationRequest) error @@ -237,6 +239,30 @@ func NewClient(params ClientParams) *Client { } return &res, nil }, + AddPeer: func(req AddPeerRequest) error { + auth, err := params.RetrieveAdminAuth() + if err != nil { + return err + } + finalRoute := "/api/admin/peer" + body, err := json.Marshal(req) + if err != nil { + return err + } + resBody, err := doPostRequest(params.BaseURL+finalRoute, body, auth) + if err != nil { + return err + } + result := ResultError{} + err = json.Unmarshal(resBody, &result) + if err != nil { + return err + } + if result.Status == "ERROR" { + return fmt.Errorf(result.Reason) + } + return nil + }, AddProduct: func(req AddProductRequest) (*Product, error) { auth, err := params.RetrieveUserAuth() if err != nil { @@ -378,6 +404,35 @@ func NewClient(params ClientParams) *Client { return &res, nil }, // batching method: BatchUser not implemented + CloseChannel: func(req CloseChannelRequest) (*CloseChannelResponse, error) { + auth, err := params.RetrieveAdminAuth() + if err != nil { + return nil, err + } + finalRoute := "/api/admin/channel/close" + body, err := json.Marshal(req) + if err != nil { + return nil, err + } + resBody, err := doPostRequest(params.BaseURL+finalRoute, body, auth) + if err != nil { + return nil, err + } + result := ResultError{} + err = json.Unmarshal(resBody, &result) + if err != nil { + return nil, err + } + if result.Status == "ERROR" { + return nil, fmt.Errorf(result.Reason) + } + res := CloseChannelResponse{} + err = json.Unmarshal(resBody, &res) + if err != nil { + return nil, err + } + return &res, nil + }, CreateOneTimeInviteLink: func(req CreateOneTimeInviteLinkRequest) (*CreateOneTimeInviteLinkResponse, error) { auth, err := params.RetrieveAdminAuth() if err != nil { @@ -1267,11 +1322,11 @@ func NewClient(params ClientParams) *Client { return &res, nil }, OpenChannel: func(req OpenChannelRequest) (*OpenChannelResponse, error) { - auth, err := params.RetrieveUserAuth() + auth, err := params.RetrieveAdminAuth() if err != nil { return nil, err } - finalRoute := "/api/user/open/channel" + finalRoute := "/api/admin/channel/open" body, err := json.Marshal(req) if err != nil { return nil, err diff --git a/proto/autogenerated/go/types.go b/proto/autogenerated/go/types.go index 3cfb405a2..e3a550fa6 100644 --- a/proto/autogenerated/go/types.go +++ b/proto/autogenerated/go/types.go @@ -95,6 +95,11 @@ type AddAppUserRequest struct { Fail_if_exists bool `json:"fail_if_exists"` Identifier string `json:"identifier"` } +type AddPeerRequest struct { + Host string `json:"host"` + Port int64 `json:"port"` + Pubkey string `json:"pubkey"` +} type AddProductRequest struct { Name string `json:"name"` Price_sats int64 `json:"price_sats"` @@ -153,6 +158,15 @@ type BannedAppUser struct { type CallbackUrl struct { Url string `json:"url"` } +type CloseChannelRequest struct { + Force bool `json:"force"` + Funding_txid string `json:"funding_txid"` + Output_index int64 `json:"output_index"` + Sat_per_v_byte int64 `json:"sat_per_v_byte"` +} +type CloseChannelResponse struct { + Closing_txid string `json:"closing_txid"` +} type ClosedChannel struct { Capacity int64 `json:"capacity"` Channel_id string `json:"channel_id"` @@ -222,6 +236,9 @@ type GetAppUserLNURLInfoRequest struct { type GetAppUserRequest struct { User_identifier string `json:"user_identifier"` } +type GetChannelPolicyRequest struct { + Channel_id string `json:"channel_id"` +} type GetInviteTokenStateRequest struct { Invite_token string `json:"invite_token"` } @@ -363,13 +380,14 @@ type OpenChannel struct { Remote_balance int64 `json:"remote_balance"` } type OpenChannelRequest struct { - Closeaddress string `json:"closeAddress"` - Destination string `json:"destination"` - Fundingamount int64 `json:"fundingAmount"` - Pushamount int64 `json:"pushAmount"` + Close_address string `json:"close_address"` + Local_funding_amount int64 `json:"local_funding_amount"` + Node_pubkey string `json:"node_pubkey"` + Push_sat int64 `json:"push_sat"` + Sat_per_v_byte int64 `json:"sat_per_v_byte"` } type OpenChannelResponse struct { - Channelid string `json:"channelId"` + Channel_id string `json:"channel_id"` } type PayAddressRequest struct { Address string `json:"address"` diff --git a/proto/autogenerated/ts/express_server.ts b/proto/autogenerated/ts/express_server.ts index a103e9fdd..14e598ce7 100644 --- a/proto/autogenerated/ts/express_server.ts +++ b/proto/autogenerated/ts/express_server.ts @@ -122,6 +122,28 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { opts.metricsCallback([{ ...info, ...stats, ...authContext }]) } catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } }) + if (!opts.allowNotImplementedMethods && !methods.AddPeer) throw new Error('method: AddPeer is not implemented') + app.post('/api/admin/peer', async (req, res) => { + const info: Types.RequestInfo = { rpcName: 'AddPeer', batch: false, nostr: false, batchSize: 0} + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + let authCtx: Types.AuthContext = {} + try { + if (!methods.AddPeer) throw new Error('method: AddPeer is not implemented') + const authContext = await opts.AdminAuthGuard(req.headers['authorization']) + authCtx = authContext + stats.guard = process.hrtime.bigint() + const request = req.body + const error = Types.AddPeerRequestValidate(request) + stats.validate = process.hrtime.bigint() + if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger, { ...info, ...stats, ...authContext }, opts.metricsCallback) + const query = req.query + const params = req.params + await methods.AddPeer({rpcName:'AddPeer', ctx:authContext , req: request}) + stats.handle = process.hrtime.bigint() + res.json({status: 'OK'}) + opts.metricsCallback([{ ...info, ...stats, ...authContext }]) + } catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } + }) if (!opts.allowNotImplementedMethods && !methods.AddProduct) throw new Error('method: AddProduct is not implemented') app.post('/api/user/product/add', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'AddProduct', batch: false, nostr: false, batchSize: 0} @@ -433,18 +455,6 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { callsMetrics.push({ ...opInfo, ...opStats, ...ctx }) } break - case 'OpenChannel': - if (!methods.OpenChannel) { - throw new Error('method OpenChannel not found' ) - } else { - const error = Types.OpenChannelRequestValidate(operation.req) - opStats.validate = process.hrtime.bigint() - if (error !== null) throw error - const res = await methods.OpenChannel({...operation, ctx}); responses.push({ status: 'OK', ...res }) - opStats.handle = process.hrtime.bigint() - callsMetrics.push({ ...opInfo, ...opStats, ...ctx }) - } - break case 'PayAddress': if (!methods.PayAddress) { throw new Error('method PayAddress not found' ) @@ -525,6 +535,28 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { opts.metricsCallback([{ ...info, ...stats, ...ctx }, ...callsMetrics]) } catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } }) + if (!opts.allowNotImplementedMethods && !methods.CloseChannel) throw new Error('method: CloseChannel is not implemented') + app.post('/api/admin/channel/close', async (req, res) => { + const info: Types.RequestInfo = { rpcName: 'CloseChannel', batch: false, nostr: false, batchSize: 0} + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + let authCtx: Types.AuthContext = {} + try { + if (!methods.CloseChannel) throw new Error('method: CloseChannel is not implemented') + const authContext = await opts.AdminAuthGuard(req.headers['authorization']) + authCtx = authContext + stats.guard = process.hrtime.bigint() + const request = req.body + const error = Types.CloseChannelRequestValidate(request) + stats.validate = process.hrtime.bigint() + if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger, { ...info, ...stats, ...authContext }, opts.metricsCallback) + const query = req.query + const params = req.params + const response = await methods.CloseChannel({rpcName:'CloseChannel', ctx:authContext , req: request}) + stats.handle = process.hrtime.bigint() + res.json({status: 'OK', ...response}) + opts.metricsCallback([{ ...info, ...stats, ...authContext }]) + } catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } + }) if (!opts.allowNotImplementedMethods && !methods.CreateOneTimeInviteLink) throw new Error('method: CreateOneTimeInviteLink is not implemented') app.post('/api/admin/app/invite/create', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'CreateOneTimeInviteLink', batch: false, nostr: false, batchSize: 0} @@ -1204,13 +1236,13 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { } catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } }) if (!opts.allowNotImplementedMethods && !methods.OpenChannel) throw new Error('method: OpenChannel is not implemented') - app.post('/api/user/open/channel', async (req, res) => { + app.post('/api/admin/channel/open', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'OpenChannel', batch: false, nostr: false, batchSize: 0} const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.OpenChannel) throw new Error('method: OpenChannel is not implemented') - const authContext = await opts.UserAuthGuard(req.headers['authorization']) + const authContext = await opts.AdminAuthGuard(req.headers['authorization']) authCtx = authContext stats.guard = process.hrtime.bigint() const request = req.body diff --git a/proto/autogenerated/ts/http_client.ts b/proto/autogenerated/ts/http_client.ts index 5fc32cbb0..8da21cfb1 100644 --- a/proto/autogenerated/ts/http_client.ts +++ b/proto/autogenerated/ts/http_client.ts @@ -73,6 +73,17 @@ export default (params: ClientParams) => ({ } return { status: 'ERROR', reason: 'invalid response' } }, + AddPeer: async (request: Types.AddPeerRequest): Promise => { + const auth = await params.retrieveAdminAuth() + if (auth === null) throw new Error('retrieveAdminAuth() returned null') + let finalRoute = '/api/admin/peer' + 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') { + return data + } + return { status: 'ERROR', reason: 'invalid response' } + }, AddProduct: async (request: Types.AddProductRequest): Promise => { const auth = await params.retrieveUserAuth() if (auth === null) throw new Error('retrieveUserAuth() returned null') @@ -151,6 +162,20 @@ export default (params: ClientParams) => ({ } return { status: 'ERROR', reason: 'invalid response' } }, + CloseChannel: async (request: Types.CloseChannelRequest): Promise => { + const auth = await params.retrieveAdminAuth() + if (auth === null) throw new Error('retrieveAdminAuth() returned null') + let finalRoute = '/api/admin/channel/close' + 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.CloseChannelResponseValidate(result) + if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } + } + return { status: 'ERROR', reason: 'invalid response' } + }, CreateOneTimeInviteLink: async (request: Types.CreateOneTimeInviteLinkRequest): Promise => { const auth = await params.retrieveAdminAuth() if (auth === null) throw new Error('retrieveAdminAuth() returned null') @@ -611,9 +636,9 @@ export default (params: ClientParams) => ({ return { status: 'ERROR', reason: 'invalid response' } }, OpenChannel: async (request: Types.OpenChannelRequest): Promise => { - const auth = await params.retrieveUserAuth() - if (auth === null) throw new Error('retrieveUserAuth() returned null') - let finalRoute = '/api/user/open/channel' + const auth = await params.retrieveAdminAuth() + if (auth === null) throw new Error('retrieveAdminAuth() returned null') + let finalRoute = '/api/admin/channel/open' 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') { diff --git a/proto/autogenerated/ts/nostr_client.ts b/proto/autogenerated/ts/nostr_client.ts index 10a7141fc..a67e87a76 100644 --- a/proto/autogenerated/ts/nostr_client.ts +++ b/proto/autogenerated/ts/nostr_client.ts @@ -27,6 +27,18 @@ export default (params: NostrClientParams, send: (to:string, message: NostrRequ } return { status: 'ERROR', reason: 'invalid response' } }, + AddPeer: async (request: Types.AddPeerRequest): Promise => { + const auth = await params.retrieveNostrAdminAuth() + if (auth === null) throw new Error('retrieveNostrAdminAuth() returned null') + const nostrRequest: NostrRequest = {} + nostrRequest.body = request + const data = await send(params.pubDestination, {rpcName:'AddPeer',authIdentifier:auth, ...nostrRequest }) + if (data.status === 'ERROR' && typeof data.reason === 'string') return data + if (data.status === 'OK') { + return data + } + return { status: 'ERROR', reason: 'invalid response' } + }, AddProduct: async (request: Types.AddProductRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') @@ -110,6 +122,21 @@ export default (params: NostrClientParams, send: (to:string, message: NostrRequ } return { status: 'ERROR', reason: 'invalid response' } }, + CloseChannel: async (request: Types.CloseChannelRequest): Promise => { + const auth = await params.retrieveNostrAdminAuth() + if (auth === null) throw new Error('retrieveNostrAdminAuth() returned null') + const nostrRequest: NostrRequest = {} + nostrRequest.body = request + const data = await send(params.pubDestination, {rpcName:'CloseChannel',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.CloseChannelResponseValidate(result) + if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } + } + return { status: 'ERROR', reason: 'invalid response' } + }, CreateOneTimeInviteLink: async (request: Types.CreateOneTimeInviteLinkRequest): Promise => { const auth = await params.retrieveNostrAdminAuth() if (auth === null) throw new Error('retrieveNostrAdminAuth() returned null') @@ -484,8 +511,8 @@ export default (params: NostrClientParams, send: (to:string, message: NostrRequ return { status: 'ERROR', reason: 'invalid response' } }, OpenChannel: async (request: Types.OpenChannelRequest): Promise => { - const auth = await params.retrieveNostrUserAuth() - if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') + const auth = await params.retrieveNostrAdminAuth() + if (auth === null) throw new Error('retrieveNostrAdminAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request const data = await send(params.pubDestination, {rpcName:'OpenChannel',authIdentifier:auth, ...nostrRequest }) diff --git a/proto/autogenerated/ts/nostr_transport.ts b/proto/autogenerated/ts/nostr_transport.ts index 4b38912ad..29f478291 100644 --- a/proto/autogenerated/ts/nostr_transport.ts +++ b/proto/autogenerated/ts/nostr_transport.ts @@ -48,6 +48,22 @@ export default (methods: Types.ServerMethods, opts: NostrOptions) => { opts.metricsCallback([{ ...info, ...stats, ...authContext }]) }catch(ex){ const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } break + case 'AddPeer': + try { + if (!methods.AddPeer) throw new Error('method: AddPeer is not implemented') + const authContext = await opts.NostrAdminAuthGuard(req.appId, req.authIdentifier) + stats.guard = process.hrtime.bigint() + authCtx = authContext + const request = req.body + const error = Types.AddPeerRequestValidate(request) + stats.validate = process.hrtime.bigint() + if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback) + await methods.AddPeer({rpcName:'AddPeer', ctx:authContext , req: request}) + stats.handle = process.hrtime.bigint() + res({status: 'OK'}) + opts.metricsCallback([{ ...info, ...stats, ...authContext }]) + }catch(ex){ const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } + break case 'AddProduct': try { if (!methods.AddProduct) throw new Error('method: AddProduct is not implemented') @@ -327,18 +343,6 @@ export default (methods: Types.ServerMethods, opts: NostrOptions) => { callsMetrics.push({ ...opInfo, ...opStats, ...ctx }) } break - case 'OpenChannel': - if (!methods.OpenChannel) { - throw new Error('method not defined: OpenChannel') - } else { - const error = Types.OpenChannelRequestValidate(operation.req) - opStats.validate = process.hrtime.bigint() - if (error !== null) throw error - const res = await methods.OpenChannel({...operation, ctx}); responses.push({ status: 'OK', ...res }) - opStats.handle = process.hrtime.bigint() - callsMetrics.push({ ...opInfo, ...opStats, ...ctx }) - } - break case 'PayAddress': if (!methods.PayAddress) { throw new Error('method not defined: PayAddress') @@ -419,6 +423,22 @@ export default (methods: Types.ServerMethods, opts: NostrOptions) => { opts.metricsCallback([{ ...info, ...stats, ...ctx }, ...callsMetrics]) }catch(ex){ const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } break + case 'CloseChannel': + try { + if (!methods.CloseChannel) throw new Error('method: CloseChannel is not implemented') + const authContext = await opts.NostrAdminAuthGuard(req.appId, req.authIdentifier) + stats.guard = process.hrtime.bigint() + authCtx = authContext + const request = req.body + const error = Types.CloseChannelRequestValidate(request) + stats.validate = process.hrtime.bigint() + if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback) + const response = await methods.CloseChannel({rpcName:'CloseChannel', ctx:authContext , req: request}) + stats.handle = process.hrtime.bigint() + res({status: 'OK', ...response}) + opts.metricsCallback([{ ...info, ...stats, ...authContext }]) + }catch(ex){ const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } + break case 'CreateOneTimeInviteLink': try { if (!methods.CreateOneTimeInviteLink) throw new Error('method: CreateOneTimeInviteLink is not implemented') @@ -799,7 +819,7 @@ export default (methods: Types.ServerMethods, opts: NostrOptions) => { case 'OpenChannel': try { if (!methods.OpenChannel) throw new Error('method: OpenChannel is not implemented') - const authContext = await opts.NostrUserAuthGuard(req.appId, req.authIdentifier) + const authContext = await opts.NostrAdminAuthGuard(req.appId, req.authIdentifier) stats.guard = process.hrtime.bigint() authCtx = authContext const request = req.body diff --git a/proto/autogenerated/ts/types.ts b/proto/autogenerated/ts/types.ts index 1c6a52e44..bece0ac0e 100644 --- a/proto/autogenerated/ts/types.ts +++ b/proto/autogenerated/ts/types.ts @@ -7,8 +7,8 @@ export type RequestMetric = AuthContext & RequestInfo & RequestStats & { error?: export type AdminContext = { admin_id: string } -export type AdminMethodInputs = AddApp_Input | AuthApp_Input | BanUser_Input | CreateOneTimeInviteLink_Input | GetInviteLinkState_Input | GetSeed_Input | ListChannels_Input | LndGetInfo_Input -export type AdminMethodOutputs = AddApp_Output | AuthApp_Output | BanUser_Output | CreateOneTimeInviteLink_Output | GetInviteLinkState_Output | GetSeed_Output | ListChannels_Output | LndGetInfo_Output +export type AdminMethodInputs = AddApp_Input | AddPeer_Input | AuthApp_Input | BanUser_Input | CloseChannel_Input | CreateOneTimeInviteLink_Input | GetInviteLinkState_Input | GetSeed_Input | ListChannels_Input | LndGetInfo_Input | OpenChannel_Input +export type AdminMethodOutputs = AddApp_Output | AddPeer_Output | AuthApp_Output | BanUser_Output | CloseChannel_Output | CreateOneTimeInviteLink_Output | GetInviteLinkState_Output | GetSeed_Output | ListChannels_Output | LndGetInfo_Output | OpenChannel_Output export type AppContext = { app_id: string } @@ -34,8 +34,8 @@ export type UserContext = { app_user_id: string user_id: string } -export type UserMethodInputs = AddProduct_Input | AuthorizeDebit_Input | BanDebit_Input | DecodeInvoice_Input | EditDebit_Input | EnrollAdminToken_Input | GetDebitAuthorizations_Input | GetLNURLChannelLink_Input | GetLnurlPayLink_Input | GetLnurlWithdrawLink_Input | GetPaymentState_Input | GetUserInfo_Input | GetUserOperations_Input | NewAddress_Input | NewInvoice_Input | NewProductInvoice_Input | OpenChannel_Input | PayAddress_Input | PayInvoice_Input | ResetDebit_Input | RespondToDebit_Input | UpdateCallbackUrl_Input | UserHealth_Input -export type UserMethodOutputs = AddProduct_Output | AuthorizeDebit_Output | BanDebit_Output | DecodeInvoice_Output | EditDebit_Output | EnrollAdminToken_Output | GetDebitAuthorizations_Output | GetLNURLChannelLink_Output | GetLnurlPayLink_Output | GetLnurlWithdrawLink_Output | GetPaymentState_Output | GetUserInfo_Output | GetUserOperations_Output | NewAddress_Output | NewInvoice_Output | NewProductInvoice_Output | OpenChannel_Output | PayAddress_Output | PayInvoice_Output | ResetDebit_Output | RespondToDebit_Output | UpdateCallbackUrl_Output | UserHealth_Output +export type UserMethodInputs = AddProduct_Input | AuthorizeDebit_Input | BanDebit_Input | DecodeInvoice_Input | EditDebit_Input | EnrollAdminToken_Input | GetDebitAuthorizations_Input | GetLNURLChannelLink_Input | GetLnurlPayLink_Input | GetLnurlWithdrawLink_Input | GetPaymentState_Input | GetUserInfo_Input | GetUserOperations_Input | NewAddress_Input | NewInvoice_Input | NewProductInvoice_Input | PayAddress_Input | PayInvoice_Input | ResetDebit_Input | RespondToDebit_Input | UpdateCallbackUrl_Input | UserHealth_Input +export type UserMethodOutputs = AddProduct_Output | AuthorizeDebit_Output | BanDebit_Output | DecodeInvoice_Output | EditDebit_Output | EnrollAdminToken_Output | GetDebitAuthorizations_Output | GetLNURLChannelLink_Output | GetLnurlPayLink_Output | GetLnurlWithdrawLink_Output | GetPaymentState_Output | GetUserInfo_Output | GetUserOperations_Output | NewAddress_Output | NewInvoice_Output | NewProductInvoice_Output | PayAddress_Output | PayInvoice_Output | ResetDebit_Output | RespondToDebit_Output | UpdateCallbackUrl_Output | UserHealth_Output export type AuthContext = AdminContext | AppContext | GuestContext | GuestWithPubContext | MetricsContext | UserContext export type AddApp_Input = {rpcName:'AddApp', req: AddAppRequest} @@ -50,6 +50,9 @@ export type AddAppUser_Output = ResultError | ({ status: 'OK' } & AppUser) export type AddAppUserInvoice_Input = {rpcName:'AddAppUserInvoice', req: AddAppUserInvoiceRequest} export type AddAppUserInvoice_Output = ResultError | ({ status: 'OK' } & NewInvoiceResponse) +export type AddPeer_Input = {rpcName:'AddPeer', req: AddPeerRequest} +export type AddPeer_Output = ResultError | { status: 'OK' } + export type AddProduct_Input = {rpcName:'AddProduct', req: AddProductRequest} export type AddProduct_Output = ResultError | ({ status: 'OK' } & Product) @@ -68,6 +71,9 @@ export type BanUser_Output = ResultError | ({ status: 'OK' } & BanUserResponse) export type BatchUser_Input = UserMethodInputs export type BatchUser_Output = UserMethodOutputs +export type CloseChannel_Input = {rpcName:'CloseChannel', req: CloseChannelRequest} +export type CloseChannel_Output = ResultError | ({ status: 'OK' } & CloseChannelResponse) + export type CreateOneTimeInviteLink_Input = {rpcName:'CreateOneTimeInviteLink', req: CreateOneTimeInviteLinkRequest} export type CreateOneTimeInviteLink_Output = ResultError | ({ status: 'OK' } & CreateOneTimeInviteLinkResponse) @@ -254,11 +260,13 @@ export type ServerMethods = { AddAppInvoice?: (req: AddAppInvoice_Input & {ctx: AppContext }) => Promise AddAppUser?: (req: AddAppUser_Input & {ctx: AppContext }) => Promise AddAppUserInvoice?: (req: AddAppUserInvoice_Input & {ctx: AppContext }) => Promise + AddPeer?: (req: AddPeer_Input & {ctx: AdminContext }) => Promise AddProduct?: (req: AddProduct_Input & {ctx: UserContext }) => Promise AuthApp?: (req: AuthApp_Input & {ctx: AdminContext }) => Promise AuthorizeDebit?: (req: AuthorizeDebit_Input & {ctx: UserContext }) => Promise BanDebit?: (req: BanDebit_Input & {ctx: UserContext }) => Promise BanUser?: (req: BanUser_Input & {ctx: AdminContext }) => Promise + CloseChannel?: (req: CloseChannel_Input & {ctx: AdminContext }) => Promise CreateOneTimeInviteLink?: (req: CreateOneTimeInviteLink_Input & {ctx: AdminContext }) => Promise DecodeInvoice?: (req: DecodeInvoice_Input & {ctx: UserContext }) => Promise EditDebit?: (req: EditDebit_Input & {ctx: UserContext }) => Promise @@ -296,7 +304,7 @@ export type ServerMethods = { NewAddress?: (req: NewAddress_Input & {ctx: UserContext }) => Promise NewInvoice?: (req: NewInvoice_Input & {ctx: UserContext }) => Promise NewProductInvoice?: (req: NewProductInvoice_Input & {ctx: UserContext }) => Promise - OpenChannel?: (req: OpenChannel_Input & {ctx: UserContext }) => Promise + OpenChannel?: (req: OpenChannel_Input & {ctx: AdminContext }) => Promise PayAddress?: (req: PayAddress_Input & {ctx: UserContext }) => Promise PayAppUserInvoice?: (req: PayAppUserInvoice_Input & {ctx: AppContext }) => Promise PayInvoice?: (req: PayInvoice_Input & {ctx: UserContext }) => Promise @@ -463,6 +471,34 @@ export const AddAppUserRequestValidate = (o?: AddAppUserRequest, opts: AddAppUse return null } +export type AddPeerRequest = { + host: string + port: number + pubkey: string +} +export const AddPeerRequestOptionalFields: [] = [] +export type AddPeerRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + host_CustomCheck?: (v: string) => boolean + port_CustomCheck?: (v: number) => boolean + pubkey_CustomCheck?: (v: string) => boolean +} +export const AddPeerRequestValidate = (o?: AddPeerRequest, opts: AddPeerRequestOptions = {}, path: string = 'AddPeerRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.host !== 'string') return new Error(`${path}.host: is not a string`) + if (opts.host_CustomCheck && !opts.host_CustomCheck(o.host)) return new Error(`${path}.host: custom check failed`) + + if (typeof o.port !== 'number') return new Error(`${path}.port: is not a number`) + if (opts.port_CustomCheck && !opts.port_CustomCheck(o.port)) return new Error(`${path}.port: custom check failed`) + + if (typeof o.pubkey !== 'string') return new Error(`${path}.pubkey: is not a string`) + if (opts.pubkey_CustomCheck && !opts.pubkey_CustomCheck(o.pubkey)) return new Error(`${path}.pubkey: custom check failed`) + + return null +} + export type AddProductRequest = { name: string price_sats: number @@ -810,6 +846,57 @@ export const CallbackUrlValidate = (o?: CallbackUrl, opts: CallbackUrlOptions = return null } +export type CloseChannelRequest = { + force: boolean + funding_txid: string + output_index: number + sat_per_v_byte: number +} +export const CloseChannelRequestOptionalFields: [] = [] +export type CloseChannelRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + force_CustomCheck?: (v: boolean) => boolean + funding_txid_CustomCheck?: (v: string) => boolean + output_index_CustomCheck?: (v: number) => boolean + sat_per_v_byte_CustomCheck?: (v: number) => boolean +} +export const CloseChannelRequestValidate = (o?: CloseChannelRequest, opts: CloseChannelRequestOptions = {}, path: string = 'CloseChannelRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.force !== 'boolean') return new Error(`${path}.force: is not a boolean`) + if (opts.force_CustomCheck && !opts.force_CustomCheck(o.force)) return new Error(`${path}.force: custom check failed`) + + if (typeof o.funding_txid !== 'string') return new Error(`${path}.funding_txid: is not a string`) + if (opts.funding_txid_CustomCheck && !opts.funding_txid_CustomCheck(o.funding_txid)) return new Error(`${path}.funding_txid: custom check failed`) + + if (typeof o.output_index !== 'number') return new Error(`${path}.output_index: is not a number`) + if (opts.output_index_CustomCheck && !opts.output_index_CustomCheck(o.output_index)) return new Error(`${path}.output_index: custom check failed`) + + if (typeof o.sat_per_v_byte !== 'number') return new Error(`${path}.sat_per_v_byte: is not a number`) + if (opts.sat_per_v_byte_CustomCheck && !opts.sat_per_v_byte_CustomCheck(o.sat_per_v_byte)) return new Error(`${path}.sat_per_v_byte: custom check failed`) + + return null +} + +export type CloseChannelResponse = { + closing_txid: string +} +export const CloseChannelResponseOptionalFields: [] = [] +export type CloseChannelResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + closing_txid_CustomCheck?: (v: string) => boolean +} +export const CloseChannelResponseValidate = (o?: CloseChannelResponse, opts: CloseChannelResponseOptions = {}, path: string = 'CloseChannelResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.closing_txid !== 'string') return new Error(`${path}.closing_txid: is not a string`) + if (opts.closing_txid_CustomCheck && !opts.closing_txid_CustomCheck(o.closing_txid)) return new Error(`${path}.closing_txid: custom check failed`) + + return null +} + export type ClosedChannel = { capacity: number channel_id: string @@ -1231,6 +1318,24 @@ export const GetAppUserRequestValidate = (o?: GetAppUserRequest, opts: GetAppUse return null } +export type GetChannelPolicyRequest = { + channel_id: string +} +export const GetChannelPolicyRequestOptionalFields: [] = [] +export type GetChannelPolicyRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + channel_id_CustomCheck?: (v: string) => boolean +} +export const GetChannelPolicyRequestValidate = (o?: GetChannelPolicyRequest, opts: GetChannelPolicyRequestOptions = {}, path: string = 'GetChannelPolicyRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.channel_id !== 'string') return new Error(`${path}.channel_id: is not a string`) + if (opts.channel_id_CustomCheck && !opts.channel_id_CustomCheck(o.channel_id)) return new Error(`${path}.channel_id: custom check failed`) + + return null +} + export type GetInviteTokenStateRequest = { invite_token: string } @@ -2083,52 +2188,58 @@ export const OpenChannelValidate = (o?: OpenChannel, opts: OpenChannelOptions = } export type OpenChannelRequest = { - closeAddress: string - destination: string - fundingAmount: number - pushAmount: number -} -export const OpenChannelRequestOptionalFields: [] = [] + close_address?: string + local_funding_amount: number + node_pubkey: string + push_sat?: number + sat_per_v_byte: number +} +export type OpenChannelRequestOptionalField = 'close_address' | 'push_sat' +export const OpenChannelRequestOptionalFields: OpenChannelRequestOptionalField[] = ['close_address', 'push_sat'] export type OpenChannelRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - closeAddress_CustomCheck?: (v: string) => boolean - destination_CustomCheck?: (v: string) => boolean - fundingAmount_CustomCheck?: (v: number) => boolean - pushAmount_CustomCheck?: (v: number) => boolean + checkOptionalsAreSet?: OpenChannelRequestOptionalField[] + close_address_CustomCheck?: (v?: string) => boolean + local_funding_amount_CustomCheck?: (v: number) => boolean + node_pubkey_CustomCheck?: (v: string) => boolean + push_sat_CustomCheck?: (v?: number) => boolean + sat_per_v_byte_CustomCheck?: (v: number) => boolean } export const OpenChannelRequestValidate = (o?: OpenChannelRequest, opts: OpenChannelRequestOptions = {}, path: string = 'OpenChannelRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.closeAddress !== 'string') return new Error(`${path}.closeAddress: is not a string`) - if (opts.closeAddress_CustomCheck && !opts.closeAddress_CustomCheck(o.closeAddress)) return new Error(`${path}.closeAddress: custom check failed`) + if ((o.close_address || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('close_address')) && typeof o.close_address !== 'string') return new Error(`${path}.close_address: is not a string`) + if (opts.close_address_CustomCheck && !opts.close_address_CustomCheck(o.close_address)) return new Error(`${path}.close_address: custom check failed`) - if (typeof o.destination !== 'string') return new Error(`${path}.destination: is not a string`) - if (opts.destination_CustomCheck && !opts.destination_CustomCheck(o.destination)) return new Error(`${path}.destination: custom check failed`) + if (typeof o.local_funding_amount !== 'number') return new Error(`${path}.local_funding_amount: is not a number`) + if (opts.local_funding_amount_CustomCheck && !opts.local_funding_amount_CustomCheck(o.local_funding_amount)) return new Error(`${path}.local_funding_amount: custom check failed`) - if (typeof o.fundingAmount !== 'number') return new Error(`${path}.fundingAmount: is not a number`) - if (opts.fundingAmount_CustomCheck && !opts.fundingAmount_CustomCheck(o.fundingAmount)) return new Error(`${path}.fundingAmount: custom check failed`) + if (typeof o.node_pubkey !== 'string') return new Error(`${path}.node_pubkey: is not a string`) + if (opts.node_pubkey_CustomCheck && !opts.node_pubkey_CustomCheck(o.node_pubkey)) return new Error(`${path}.node_pubkey: custom check failed`) - if (typeof o.pushAmount !== 'number') return new Error(`${path}.pushAmount: is not a number`) - if (opts.pushAmount_CustomCheck && !opts.pushAmount_CustomCheck(o.pushAmount)) return new Error(`${path}.pushAmount: custom check failed`) + if ((o.push_sat || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('push_sat')) && typeof o.push_sat !== 'number') return new Error(`${path}.push_sat: is not a number`) + if (opts.push_sat_CustomCheck && !opts.push_sat_CustomCheck(o.push_sat)) return new Error(`${path}.push_sat: custom check failed`) + + if (typeof o.sat_per_v_byte !== 'number') return new Error(`${path}.sat_per_v_byte: is not a number`) + if (opts.sat_per_v_byte_CustomCheck && !opts.sat_per_v_byte_CustomCheck(o.sat_per_v_byte)) return new Error(`${path}.sat_per_v_byte: custom check failed`) return null } export type OpenChannelResponse = { - channelId: string + channel_id: string } export const OpenChannelResponseOptionalFields: [] = [] export type OpenChannelResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - channelId_CustomCheck?: (v: string) => boolean + channel_id_CustomCheck?: (v: string) => boolean } export const OpenChannelResponseValidate = (o?: OpenChannelResponse, opts: OpenChannelResponseOptions = {}, path: string = 'OpenChannelResponse::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.channelId !== 'string') return new Error(`${path}.channelId: is not a string`) - if (opts.channelId_CustomCheck && !opts.channelId_CustomCheck(o.channelId)) return new Error(`${path}.channelId: custom check failed`) + if (typeof o.channel_id !== 'string') return new Error(`${path}.channel_id: is not a string`) + if (opts.channel_id_CustomCheck && !opts.channel_id_CustomCheck(o.channel_id)) return new Error(`${path}.channel_id: custom check failed`) return null } diff --git a/proto/service/methods.proto b/proto/service/methods.proto index 87f502c5f..e13bbc911 100644 --- a/proto/service/methods.proto +++ b/proto/service/methods.proto @@ -144,6 +144,27 @@ service LightningPub { option (nostr) = true; } + rpc AddPeer(structs.AddPeerRequest) returns (structs.Empty) { + option (auth_type) = "Admin"; + option (http_method) = "post"; + option (http_route) = "/api/admin/peer"; + option (nostr) = true; + } + + rpc OpenChannel(structs.OpenChannelRequest) returns (structs.OpenChannelResponse) { + option (auth_type) = "Admin"; + option (http_method) = "post"; + option (http_route) = "/api/admin/channel/open"; + option (nostr) = true; + } + + rpc CloseChannel(structs.CloseChannelRequest) returns (structs.CloseChannelResponse) { + option (auth_type) = "Admin"; + option (http_method) = "post"; + option (http_route) = "/api/admin/channel/close"; + option (nostr) = true; + } + rpc GetUsageMetrics(structs.Empty) returns (structs.UsageMetrics) { option (auth_type) = "Metrics"; option (http_method) = "post"; @@ -419,13 +440,6 @@ service LightningPub { option (nostr) = true; } - rpc OpenChannel(structs.OpenChannelRequest) returns (structs.OpenChannelResponse){ - option (auth_type) = "User"; - option (http_method) = "post"; - option (http_route) = "/api/user/open/channel"; - option (nostr) = true; - } - rpc GetLnurlWithdrawLink(structs.Empty) returns (structs.LnurlLinkResponse){ option (auth_type) = "User"; option (http_method) = "get"; diff --git a/proto/service/structs.proto b/proto/service/structs.proto index d8a6e1888..39e977436 100644 --- a/proto/service/structs.proto +++ b/proto/service/structs.proto @@ -131,6 +131,41 @@ message LndChannels { repeated OpenChannel open_channels = 1; } +message GetChannelPolicyRequest { + string channel_id = 1; +} + + + +message OpenChannelRequest{ + string node_pubkey = 1; + int64 local_funding_amount = 2; + int64 sat_per_v_byte = 3; + optional int64 push_sat = 5; + optional string close_address = 6; +} + +message OpenChannelResponse{ + string channel_id = 1; +} + +message CloseChannelRequest{ + bool force = 2; + int64 sat_per_v_byte = 3; + string funding_txid = 4; + int64 output_index = 5; +} + +message CloseChannelResponse{ + string closing_txid = 1; +} + +message AddPeerRequest { + string pubkey = 1; + string host = 2; + int64 port = 3; +} + message LndGetInfoRequest { int64 nodeId = 1; } @@ -308,17 +343,6 @@ message PaymentState{ int64 network_fee = 4; } -message OpenChannelRequest{ - string destination = 1; - int64 fundingAmount = 2; - int64 pushAmount = 3; - string closeAddress = 4; -} - -message OpenChannelResponse{ - string channelId = 1; -} - message LnurlLinkResponse{ string lnurl = 1; string k1 = 2; diff --git a/src/services/lnd/lnd.ts b/src/services/lnd/lnd.ts index ed4f7c623..f362f26d9 100644 --- a/src/services/lnd/lnd.ts +++ b/src/services/lnd/lnd.ts @@ -8,7 +8,7 @@ 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 { ChainNotifierClient } from '../../../proto/lnd/chainnotifier.client.js' -import { GetInfoResponse, AddressType, NewAddressResponse, AddInvoiceResponse, Invoice_InvoiceState, PayReq, Payment_PaymentStatus, Payment, PaymentFailureReason, SendCoinsResponse, EstimateFeeResponse, ChannelBalanceResponse, TransactionDetails, ListChannelsResponse, ClosedChannelsResponse, PendingChannelsResponse, ForwardingHistoryResponse, CoinSelectionStrategy } from '../../../proto/lnd/lightning.js' +import { GetInfoResponse, AddressType, NewAddressResponse, AddInvoiceResponse, Invoice_InvoiceState, PayReq, Payment_PaymentStatus, Payment, PaymentFailureReason, SendCoinsResponse, EstimateFeeResponse, ChannelBalanceResponse, TransactionDetails, ListChannelsResponse, ClosedChannelsResponse, PendingChannelsResponse, ForwardingHistoryResponse, CoinSelectionStrategy, OpenStatusUpdate, CloseStatusUpdate, PendingUpdate } from '../../../proto/lnd/lightning.js' import { OpenChannelReq } from './openChannelReq.js'; import { AddInvoiceReq } from './addInvoiceReq.js'; import { PayInvoiceReq } from './payInvoiceReq.js'; @@ -380,6 +380,11 @@ export default class { return res.response } + async GetChannelInfo(chanId: string) { + const res = await this.lightning.getChanInfo({ chanId, chanPoint: "" }, DeadLineMetadata()) + return res.response + } + async GetChannelBalance() { const res = await this.lightning.channelBalance({}, DeadLineMetadata()) return res.response @@ -485,21 +490,66 @@ export default class { } + async AddPeer(pub: string, host: string, port: number) { + const res = await this.lightning.connectPeer({ + addr: { + pubkey: pub, + host: host + ":" + port, + }, + perm: true, + timeout: 0n + }) + return res.response + } + async ListPeers() { const res = await this.lightning.listPeers({ latestError: true }, DeadLineMetadata()) return res.response } - async OpenChannel(destination: string, closeAddress: string, fundingAmount: number, pushSats: number) { + async OpenChannel(destination: string, closeAddress: string, fundingAmount: number, pushSats: number, satsPerVByte: number): Promise { const abortController = new AbortController() - const req = OpenChannelReq(destination, closeAddress, fundingAmount, pushSats) + const req = OpenChannelReq(destination, closeAddress, fundingAmount, pushSats, satsPerVByte) const stream = this.lightning.openChannel(req, { abort: abortController.signal }) return new Promise((res, rej) => { stream.responses.onMessage(message => { console.log("message", message) switch (message.update.oneofKind) { case 'chanPending': - res(Buffer.from(message.pendingChanId).toString('base64')) + res(message) + break + } + }) + stream.responses.onError(error => { + console.log("error", error) + rej(error) + }) + }) + } + + async CloseChannel(fundingTx: string, outputIndex: number, force: boolean, satPerVByte: number): Promise { + const stream = this.lightning.closeChannel({ + deliveryAddress: "", + force: force, + satPerByte: 0n, + satPerVbyte: BigInt(satPerVByte), + noWait: false, + maxFeePerVbyte: 0n, + targetConf: 0, + channelPoint: { + fundingTxid: { + fundingTxidStr: fundingTx, + oneofKind: "fundingTxidStr" + }, + outputIndex: outputIndex + }, + }, DeadLineMetadata()) + return new Promise((res, rej) => { + stream.responses.onMessage(message => { + console.log("message", message) + switch (message.update.oneofKind) { + case 'closePending': + res(message.update.closePending) break } }) diff --git a/src/services/lnd/openChannelReq.ts b/src/services/lnd/openChannelReq.ts index ecd3cbc1a..ec0d32f8c 100644 --- a/src/services/lnd/openChannelReq.ts +++ b/src/services/lnd/openChannelReq.ts @@ -1,12 +1,12 @@ import { CommitmentType, OpenChannelRequest } from "../../../proto/lnd/lightning.js"; -export const OpenChannelReq = (destination: string, closeAddress: string, fundingAmount: number, pushSats: number): OpenChannelRequest => ({ +export const OpenChannelReq = (destination: string, closeAddress: string, fundingAmount: number, pushSats: number, satsPerVByte: number): OpenChannelRequest => ({ nodePubkey: Buffer.from(destination, 'hex'), closeAddress: closeAddress, localFundingAmount: BigInt(fundingAmount), pushSat: BigInt(pushSats), - satPerVbyte: 0n, // TBD + satPerVbyte: BigInt(satsPerVByte), // TBD private: false, minConfs: 0, // TBD baseFee: 1n, // TBD diff --git a/src/services/main/adminManager.ts b/src/services/main/adminManager.ts index aa3b0f462..5c1fcf060 100644 --- a/src/services/main/adminManager.ts +++ b/src/services/main/adminManager.ts @@ -7,6 +7,9 @@ import * as Types from '../../../proto/autogenerated/ts/types.js' import LND from "../lnd/lnd.js"; export class AdminManager { + + + storage: Storage log = getLogger({ component: "adminManager" }) adminNpub = "" @@ -144,6 +147,7 @@ export class AdminManager { ListChannels = async (): Promise => { const channels = await this.lnd.ListChannels(true) + return { open_channels: channels.channels.map(c => ({ active: c.active, @@ -156,4 +160,28 @@ export class AdminManager { })) } } + + + async AddPeer(req: Types.AddPeerRequest) { + await this.lnd.AddPeer(req.pubkey, req.host, req.port) + } + + async OpenChannel(req: Types.OpenChannelRequest): Promise { + let closeAddr = req.close_address + if (!closeAddr) { + const addr = await this.lnd.NewAddress(Types.AddressType.WITNESS_PUBKEY_HASH, { useProvider: false, from: 'system' }) + closeAddr = addr.address + } + const res = await this.lnd.OpenChannel(req.node_pubkey, closeAddr, req.local_funding_amount, req.push_sat || 0, req.sat_per_v_byte) + return { + channel_id: Buffer.from(res.pendingChanId).toString('hex') + } + } + + async CloseChannel(req: Types.CloseChannelRequest): Promise { + const res = await this.lnd.CloseChannel(req.funding_txid, req.output_index, req.force, req.sat_per_v_byte) + return { + closing_txid: Buffer.from(res.txid).toString('hex') + } + } } \ No newline at end of file diff --git a/src/services/main/paymentManager.ts b/src/services/main/paymentManager.ts index 51c7fec1a..4c120f185 100644 --- a/src/services/main/paymentManager.ts +++ b/src/services/main/paymentManager.ts @@ -626,8 +626,6 @@ export default class { return this.GetLnurlPayInfoFromUser(linkedUser.user.user_id, linkedUser.application, { metadata: defaultLnAddressMetadata(this.settings.lnurlMetaText, addressName) }) } - async OpenChannel(userId: string, req: Types.OpenChannelRequest): Promise { throw new Error("WIP") } - mapOperations(operations: UserOperationInfo[], type: Types.UserOperationType, inbound: boolean): Types.UserOperations { if (operations.length === 0) { return { diff --git a/src/services/serverMethods/index.ts b/src/services/serverMethods/index.ts index 0e2465aaa..6fec8c16a 100644 --- a/src/services/serverMethods/index.ts +++ b/src/services/serverMethods/index.ts @@ -16,6 +16,32 @@ export default (mainHandler: Main): Types.ServerMethods => { ListChannels: async ({ ctx }) => { return mainHandler.adminManager.ListChannels() }, + AddPeer: async ({ ctx, req }) => { + const err = Types.AddPeerRequestValidate(req, { + pubkey_CustomCheck: pubkey => pubkey !== '', + host_CustomCheck: host => host !== '', + port_CustomCheck: port => port > 0 + }) + if (err != null) throw new Error(err.message) + return mainHandler.adminManager.AddPeer(req) + }, + OpenChannel: async ({ ctx, req }) => { + const err = Types.OpenChannelRequestValidate(req, { + node_pubkey_CustomCheck: pubkey => pubkey !== '', + local_funding_amount_CustomCheck: amt => amt > 0, + sat_per_v_byte_CustomCheck: spv => spv > 0, + }) + if (err != null) throw new Error(err.message) + return mainHandler.adminManager.OpenChannel(req) + }, + CloseChannel: async ({ ctx, req }) => { + const err = Types.CloseChannelRequestValidate(req, { + funding_txid_CustomCheck: chanId => chanId !== '', + sat_per_v_byte_CustomCheck: spv => spv > 0 + }) + if (err != null) throw new Error(err.message) + return mainHandler.adminManager.CloseChannel(req) + }, EncryptionExchange: async () => { }, Health: async () => { await mainHandler.lnd.Health() }, LndGetInfo: async ({ ctx }) => { @@ -54,15 +80,6 @@ export default (mainHandler: Main): Types.ServerMethods => { if (err != null) throw new Error(err.message) return mainHandler.paymentManager.GetPaymentState(ctx.user_id, req) }, - OpenChannel: async ({ ctx, req }) => { - const err = Types.OpenChannelRequestValidate(req, { - fundingAmount_CustomCheck: amt => amt > 0, - pushAmount_CustomCheck: amt => amt > 0, - destination_CustomCheck: dest => dest !== "" - }) - if (err != null) throw new Error(err.message) - return mainHandler.paymentManager.OpenChannel(ctx.user_id, req) - }, NewAddress: ({ ctx, req }) => mainHandler.paymentManager.NewAddress(ctx, req), PayAddress: async ({ ctx, req }) => { const err = Types.PayAddressRequestValidate(req, { diff --git a/src/tests/adminChannels.spec.ts b/src/tests/adminChannels.spec.ts new file mode 100644 index 000000000..5faf1bb93 --- /dev/null +++ b/src/tests/adminChannels.spec.ts @@ -0,0 +1,20 @@ +import { defaultInvoiceExpiry } from '../services/storage/paymentStorage.js' +import { runSanityCheck, safelySetUserBalance, TestBase } from './testBase.js' +export const ignore = false +export const dev = false + +export default async (T: TestBase) => { + await safelySetUserBalance(T, T.user1, 2000) + await openAdminChannel(T) + await runSanityCheck(T) +} + +const openAdminChannel = async (T: TestBase) => { + T.d("starting openAdminChannel") + const otherPub = (await T.externalAccessToOtherLnd.GetInfo()).identityPubkey + const openChannel = await T.main.adminManager.OpenChannel({ + node_pubkey: otherPub, local_funding_amount: 100000, sat_per_v_byte: 1 + }) + console.log(openChannel) + T.d("opened admin channel") +} \ No newline at end of file From 5417c49245410e2dd38401059868466f0ee81d4e Mon Sep 17 00:00:00 2001 From: boufni95 Date: Thu, 7 Nov 2024 16:25:29 +0000 Subject: [PATCH 02/10] deb --- src/tests/adminChannels.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tests/adminChannels.spec.ts b/src/tests/adminChannels.spec.ts index 5faf1bb93..b8b48f8b1 100644 --- a/src/tests/adminChannels.spec.ts +++ b/src/tests/adminChannels.spec.ts @@ -11,7 +11,9 @@ export default async (T: TestBase) => { const openAdminChannel = async (T: TestBase) => { T.d("starting openAdminChannel") - const otherPub = (await T.externalAccessToOtherLnd.GetInfo()).identityPubkey + const info = await T.externalAccessToThirdLnd.GetInfo() + console.log(info) + const otherPub = info.identityPubkey const openChannel = await T.main.adminManager.OpenChannel({ node_pubkey: otherPub, local_funding_amount: 100000, sat_per_v_byte: 1 }) From 79bd82b802b6250d2676d988e128976ffff66c8b Mon Sep 17 00:00:00 2001 From: boufni95 Date: Mon, 18 Nov 2024 16:29:55 +0000 Subject: [PATCH 03/10] policy update --- package-lock.json | 11660 ++++++++++---------- proto/autogenerated/client.md | 28 +- proto/autogenerated/go/http_client.go | 25 + proto/autogenerated/go/types.go | 42 +- proto/autogenerated/ts/express_server.ts | 22 + proto/autogenerated/ts/http_client.ts | 11 + proto/autogenerated/ts/nostr_client.ts | 12 + proto/autogenerated/ts/nostr_transport.ts | 16 + proto/autogenerated/ts/types.ts | 143 +- proto/service/methods.proto | 7 + proto/service/structs.proto | 22 +- src/services/lnd/lnd.ts | 17 + src/services/main/adminManager.ts | 39 +- src/services/serverMethods/index.ts | 9 + 14 files changed, 6177 insertions(+), 5876 deletions(-) diff --git a/package-lock.json b/package-lock.json index dfbb6d174..6501617da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5830 +1,5830 @@ -{ - "name": "lnpub", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "lnpub", - "version": "1.0.0", - "license": "Affero GPLv3", - "dependencies": { - "@grpc/grpc-js": "^1.11.2", - "@protobuf-ts/grpc-transport": "^2.9.4", - "@protobuf-ts/plugin": "^2.5.0", - "@protobuf-ts/runtime": "^2.5.0", - "@stablelib/xchacha20": "^1.0.1", - "@types/express": "^4.17.21", - "@types/node": "^17.0.31", - "@types/secp256k1": "^4.0.3", - "axios": "^1.7.7", - "bech32": "^2.0.0", - "bitcoin-core": "^4.2.0", - "chai": "^4.3.7", - "chai-string": "^1.5.0", - "copyfiles": "^2.4.1", - "cors": "^2.8.5", - "csv": "^6.3.8", - "dotenv": "^16.4.5", - "eccrypto": "^1.1.6", - "express": "^4.21.1", - "globby": "^13.1.2", - "grpc-tools": "^1.12.4", - "jsonwebtoken": "^9.0.2", - "lodash": "^4.17.21", - "nostr-tools": "github:shocknet/nostr-tools#da188cd4bd195f44cc690074a3898f354ae85100", - "pg": "^8.4.0", - "reflect-metadata": "^0.2.2", - "rimraf": "^3.0.2", - "rxjs": "^7.5.5", - "secp256k1": "^4.0.3", - "sqlite3": "^5.1.7", - "ts-node": "^10.7.0", - "ts-proto": "^1.131.2", - "typeorm": "0.3.15", - "typescript": "^5.5.4", - "uuid": "^8.3.2", - "websocket": "^1.0.34", - "websocket-polyfill": "^0.0.3", - "why-is-node-running": "^3.2.0", - "ws": "^8.18.0" - }, - "devDependencies": { - "@types/chai": "^4.3.4", - "@types/chai-string": "^1.4.5", - "@types/cors": "^2.8.17", - "@types/eccrypto": "^1.1.6", - "@types/jsonwebtoken": "^9.0.6", - "@types/lodash": "^4.14.182", - "@types/node": "^16.11.10", - "@types/node-fetch": "^2.6.3", - "@types/uuid": "^8.3.4", - "@types/websocket": "^1.0.6", - "@types/ws": "^8.5.12", - "nodemon": "^2.0.20", - "ts-node": "10.7.0", - "typescript": "5.5.4" - } - }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "devOptional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "devOptional": true, - "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "optional": true - }, - "node_modules/@grpc/grpc-js": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.2.tgz", - "integrity": "sha512-DWp92gDD7/Qkj7r8kus6/HCINeo3yPZWZ3paKgDgsbKbSpoxKg1yvN8xe2Q8uE3zOsPe3bX8FQX2+XValq2yTw==", - "dependencies": { - "@grpc/proto-loader": "^0.7.13", - "@js-sdsl/ordered-map": "^4.4.2" - }, - "engines": { - "node": ">=12.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@grpc/proto-loader/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@grpc/proto-loader/node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/@grpc/proto-loader/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@noble/ciphers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", - "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "optional": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "optional": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@protobuf-ts/grpc-transport": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@protobuf-ts/grpc-transport/-/grpc-transport-2.9.4.tgz", - "integrity": "sha512-CgjTR3utmkMkkThpfgtOz9tNR9ZARbNoQYL7TCKqFU2sgAX0LgzAkwOx+sfgtUsZn9J08+yvn307nNJdYocLRA==", - "dependencies": { - "@protobuf-ts/runtime": "^2.9.4", - "@protobuf-ts/runtime-rpc": "^2.9.4" - }, - "peerDependencies": { - "@grpc/grpc-js": "^1.6.0" - } - }, - "node_modules/@protobuf-ts/plugin": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin/-/plugin-2.8.1.tgz", - "integrity": "sha512-lacRdXJ9TkTbI28U0KApsnVqnxeq1aZftOdq6LNPQJaIzBrVRxrMkqnnGWGQFYe0Tr93OKeW4A2lLjTkn32CuA==", - "dependencies": { - "@protobuf-ts/plugin-framework": "^2.8.1", - "@protobuf-ts/protoc": "^2.8.1", - "@protobuf-ts/runtime": "^2.8.1", - "@protobuf-ts/runtime-rpc": "^2.8.1", - "typescript": "^3.9" - }, - "bin": { - "protoc-gen-dump": "bin/protoc-gen-dump", - "protoc-gen-ts": "bin/protoc-gen-ts" - } - }, - "node_modules/@protobuf-ts/plugin-framework": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin-framework/-/plugin-framework-2.8.1.tgz", - "integrity": "sha512-hfLoYIyxCI6Ro6LY1BltNBDcXWL+36SwnWR/hcF4ttPHLE3rMIpYbz4IwQsfeU2SKbBeGFhZv9rcnDJB22cXog==", - "dependencies": { - "@protobuf-ts/runtime": "^2.8.1", - "typescript": "^3.9" - } - }, - "node_modules/@protobuf-ts/plugin-framework/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@protobuf-ts/plugin/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@protobuf-ts/protoc": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@protobuf-ts/protoc/-/protoc-2.8.1.tgz", - "integrity": "sha512-6fehuL9bS22zCgPBBlESZjnoA4fxAUkOjMcaFMJSlVpN6CDN2O+c/Mo1pCXaNDO7FAidMPj5yhz48Kws4kOXEA==", - "bin": { - "protoc": "protoc.js" - } - }, - "node_modules/@protobuf-ts/runtime": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.9.4.tgz", - "integrity": "sha512-vHRFWtJJB/SiogWDF0ypoKfRIZ41Kq+G9cEFj6Qm1eQaAhJ1LDFvgZ7Ja4tb3iLOQhz0PaoPnnOijF1qmEqTxg==" - }, - "node_modules/@protobuf-ts/runtime-rpc": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.9.4.tgz", - "integrity": "sha512-y9L9JgnZxXFqH5vD4d7j9duWvIJ7AShyBRoNKJGhu9Q27qIbchfzli66H9RvrQNIFk5ER7z1Twe059WZGqERcA==", - "dependencies": { - "@protobuf-ts/runtime": "^2.9.4" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/@scure/bip32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", - "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.1.0", - "@noble/hashes": "~1.3.1", - "@scure/base": "~1.1.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.1" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", - "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sqltools/formatter": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", - "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" - }, - "node_modules/@stablelib/binary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", - "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", - "dependencies": { - "@stablelib/int": "^1.0.1" - } - }, - "node_modules/@stablelib/chacha": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", - "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@stablelib/int": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" - }, - "node_modules/@stablelib/wipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" - }, - "node_modules/@stablelib/xchacha20": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/xchacha20/-/xchacha20-1.0.1.tgz", - "integrity": "sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/chacha": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "optional": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "devOptional": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "devOptional": true - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", - "dev": true - }, - "node_modules/@types/chai-string": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@types/chai-string/-/chai-string-1.4.5.tgz", - "integrity": "sha512-IecXRMSnpUvRnTztdpSdjcmcW7EdNme65bfDCQMi7XrSEPGmyDYYTEfc5fcactWDA6ioSm8o7NUqg9QxjBCCEw==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eccrypto": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@types/eccrypto/-/eccrypto-1.1.6.tgz", - "integrity": "sha512-rsmcX5LdDZ3xN2W3al6+YR+XNmiQWlXSwVhsU184QOwNQNJ83YpwvAt8a7cT7y3RpVWkKWmXoIFdanI/z38rNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/expect": "^1.20.4", - "@types/node": "*" - } - }, - "node_modules/@types/expect": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", - "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz", - "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.189", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", - "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", - "dev": true - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "node_modules/@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==" - }, - "node_modules/@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/node-fetch/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/object-hash": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/object-hash/-/object-hash-1.3.4.tgz", - "integrity": "sha512-xFdpkAkikBgqBdG9vIlsqffDV8GpvnPEzs0IUtr1v3BEB97ijsFQ4RXVbUZwjFThhB4MDSTUfvmxUD5PGx0wXA==" - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/send/node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "node_modules/@types/websocket": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.6.tgz", - "integrity": "sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@uphold/request-logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@uphold/request-logger/-/request-logger-2.0.0.tgz", - "integrity": "sha512-UvGS+v87C7VTtQDcFHDLfvfl1zaZaLSwSmAnV35Ne7CzAVvotmZqt9lAIoNpMpaoRpdjVIcnUDwPSeIeA//EoQ==", - "dependencies": { - "uuid": "^3.0.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "request": ">=2.27.0" - } - }, - "node_modules/@uphold/request-logger/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "devOptional": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "optional": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/agentkeepalive/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "optional": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agentkeepalive/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/agentkeepalive/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "engines": { - "node": "*" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" - }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bech32": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" - }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bitcoin-core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/bitcoin-core/-/bitcoin-core-4.2.0.tgz", - "integrity": "sha512-QFmer//rZhyuYm0mBOVAmMhIG/EFmXDahC3a1LvNTwM8/KszxUGEAjvAT4tzm1FaDj4c7pQWMG/vOWtoKjeR3Q==", - "dependencies": { - "@uphold/request-logger": "^2.0.0", - "debugnyan": "^1.0.0", - "json-bigint": "^1.0.0", - "lodash": "^4.0.0", - "request": "^2.53.0", - "semver": "^5.1.0", - "standard-error": "^1.1.0" - }, - "engines": { - "node": ">=7" - } - }, - "node_modules/bitcoin-core/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "optional": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "optional": true - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "optional": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz", - "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==", - "peerDependencies": { - "chai": "^4.1.2" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "optional": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dependencies": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - }, - "bin": { - "copyfiles": "copyfiles", - "copyup": "copyfiles" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "optional": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "optional": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true - }, - "node_modules/csv": { - "version": "6.3.8", - "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.8.tgz", - "integrity": "sha512-gRh3yiT9bHBA5ka2yOpyFqAVu/ZpwWzajMUR/es0ljevAE88WyHBuMUy7jzd2o5j6LYQesEO/AyhbQ9BhbDXUA==", - "dependencies": { - "csv-generate": "^4.4.0", - "csv-parse": "^5.5.5", - "csv-stringify": "^6.4.6", - "stream-transform": "^3.3.1" - }, - "engines": { - "node": ">= 0.1.90" - } - }, - "node_modules/csv-generate": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.4.0.tgz", - "integrity": "sha512-geM01acNPZ0wr4/9sKev5fCzFG/tsc/NbuFWrhLc47M1zQyUdEJH65+cxTLIVafEwhBjIYwQ7fdOL9roBqVltQ==" - }, - "node_modules/csv-parse": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.5.tgz", - "integrity": "sha512-erCk7tyU3yLWAhk6wvKxnyPtftuy/6Ak622gOO7BCJ05+TYffnPCJF905wmOQm+BpkX54OdAl8pveJwUdpnCXQ==" - }, - "node_modules/csv-stringify": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.4.6.tgz", - "integrity": "sha512-h2V2XZ3uOTLilF5dPIptgUfN/o2ia/80Ie0Lly18LAnw5s8Eb7kt8rfxSUy24AztJZas9f6DPZpVlzDUtFt/ag==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dataloader": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", - "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/debugnyan": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/debugnyan/-/debugnyan-1.0.0.tgz", - "integrity": "sha512-dTvKxcLZCammDLFYi31NRVr5g6vjJ33uf1wcdbIPPxPxxnJ9/xj00Mh/YQkhFMw/VGavaG5KpjSC+4o9r/JjRg==", - "dependencies": { - "bunyan": "^1.8.1", - "debug": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", - "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dprint-node": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/dprint-node/-/dprint-node-1.0.7.tgz", - "integrity": "sha512-NTZOW9A7ipb0n7z7nC3wftvsbceircwVHSgzobJsEQa+7RnOMbhrfX5IflA6CtC4GA63DSAiHYXa4JKEy9F7cA==", - "dependencies": { - "detect-libc": "^1.0.3" - } - }, - "node_modules/dprint-node/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==", - "optional": true, - "dependencies": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/eccrypto": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.6.tgz", - "integrity": "sha512-d78ivVEzu7Tn0ZphUUaL43+jVPKTMPFGtmgtz1D0LrFn7cY3K8CdrvibuLz2AAkHBLKZtR8DMbB2ukRYFk987A==", - "hasInstallScript": true, - "dependencies": { - "acorn": "7.1.1", - "elliptic": "6.5.4", - "es6-promise": "4.2.8", - "nan": "2.14.0" - }, - "optionalDependencies": { - "secp256k1": "3.7.1" - } - }, - "node_modules/eccrypto/node_modules/secp256k1": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", - "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.4.1", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esniff/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "optional": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "optional": true - }, - "node_modules/grpc-tools": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.12.4.tgz", - "integrity": "sha512-5+mLAJJma3BjnW/KQp6JBjUMgvu7Mu3dBvBPd1dcbNIb+qiR0817zDpgPjS7gRb+l/8EVNIa3cB02xI9JLToKg==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5" - }, - "bin": { - "grpc_tools_node_protoc": "bin/protoc.js", - "grpc_tools_node_protoc_plugin": "bin/protoc_plugin.js" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "optional": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "engines": { - "node": "*" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "optional": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "optional": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "optional": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "optional": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "optional": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", - "optional": true - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "optional": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "optional": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "optional": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "optional": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "optional": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-abi": { - "version": "3.67.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz", - "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "optional": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "optional": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/node-gyp/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "optional": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nostr-tools": { - "version": "2.8.0", - "resolved": "git+ssh://git@github.com/shocknet/nostr-tools.git#da188cd4bd195f44cc690074a3898f354ae85100", - "integrity": "sha512-kc41K75rXEnLhqIwlQmjaGsZ9yYTbyP8VW7B2Q+0U/pqaMyt25Nt0QCWiIYS04m0sanvD77OhmddvI1s2ntKog==", - "license": "Unlicense", - "dependencies": { - "@noble/ciphers": "^0.5.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.1", - "@scure/base": "1.1.1", - "@scure/bip32": "1.3.1", - "@scure/bip39": "1.2.1" - }, - "optionalDependencies": { - "nostr-wasm": "v0.1.0" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/nostr-wasm": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/nostr-wasm/-/nostr-wasm-0.1.0.tgz", - "integrity": "sha512-78BTryCLcLYv96ONU8Ws3Q1JzjlAt+43pWQhIl86xZmWeegYCNLPml7yQ+gG3vR6V5h4XGj+TxO+SS5dsThQIA==", - "license": "MIT", - "optional": true - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "engines": { - "node": "*" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/pg": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz", - "integrity": "sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==", - "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.5.0", - "pg-pool": "^3.5.2", - "pg-protocol": "^1.5.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", - "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dependencies": { - "split2": "^4.1.0" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "optional": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "optional": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/protobufjs": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", - "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs/node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "optional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "optional": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "optional": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "optional": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "optional": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socks-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - }, - "node_modules/split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sqlite3": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", - "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^7.0.0", - "prebuild-install": "^7.1.1", - "tar": "^6.1.11" - }, - "optionalDependencies": { - "node-gyp": "8.x" - }, - "peerDependencies": { - "node-gyp": "8.x" - }, - "peerDependenciesMeta": { - "node-gyp": { - "optional": true - } - } - }, - "node_modules/sqlite3/node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "optional": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/standard-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/standard-error/-/standard-error-1.1.0.tgz", - "integrity": "sha512-4v7qzU7oLJfMI5EltUSHCaaOd65J6S4BqKRWgzMi4EYaE5fvNabPxmAPGdxpGXqrcWjhDGI/H09CIdEuUOUeXg==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-transform": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.3.1.tgz", - "integrity": "sha512-BL8pv9QL8Ikd11oZwlRDp1qYMhGR0i50zI9ltoijKGc4ubQWal/Rc4p6SYJp1TBOGpE0uAGchwbxOZ1ycwTuqQ==" - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/touch/node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", - "devOptional": true, - "dependencies": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "devOptional": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-poet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ts-poet/-/ts-poet-6.1.0.tgz", - "integrity": "sha512-PFwbNJjGrb44wzHUGQicG2/nhjR+3+k7zYLDTa8D61NVUitl7K/JgIc9/P+8oMNenntKzLc8tjLDOkPrxIhm6A==", - "dependencies": { - "dprint-node": "^1.0.7" - } - }, - "node_modules/ts-proto": { - "version": "1.131.2", - "resolved": "https://registry.npmjs.org/ts-proto/-/ts-proto-1.131.2.tgz", - "integrity": "sha512-SFQMXoNrZ/Ybcc2wwS/s0Lser/aVRr6HMN1LLHIvsbx3aK1eM02CLmWbic+DblGyoua8ZzuonbnCWBhcjwPTFA==", - "dependencies": { - "@types/object-hash": "^1.3.0", - "dataloader": "^1.4.0", - "object-hash": "^1.3.1", - "protobufjs": "^6.11.3", - "ts-poet": "^6.1.0", - "ts-proto-descriptors": "1.7.1" - }, - "bin": { - "protoc-gen-ts_proto": "protoc-gen-ts_proto" - } - }, - "node_modules/ts-proto-descriptors": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ts-proto-descriptors/-/ts-proto-descriptors-1.7.1.tgz", - "integrity": "sha512-oIKUh3K4Xts4v29USGLfUG+2mEk32MsqpgZAOUyUlkrcIdv34yE+k2oZ2Nzngm6cV/JgFdOxRCqeyvmWHuYAyw==", - "dependencies": { - "long": "^4.0.0", - "protobufjs": "^6.8.8" - } - }, - "node_modules/ts-proto-descriptors/node_modules/protobufjs": { - "version": "6.11.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", - "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/ts-proto/node_modules/protobufjs": { - "version": "6.11.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", - "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/tstl": { - "version": "2.5.13", - "resolved": "https://registry.npmjs.org/tstl/-/tstl-2.5.13.tgz", - "integrity": "sha512-h9wayHHFI5+yqt8iau0vqH96cTNhezhZ/Fk/hrIdpfkiMu3lg9nzyvMfs5bIdX51IVzZO6DudLqhkL/rVXpT6g==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typeorm": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.15.tgz", - "integrity": "sha512-R4JSw8QjDP1W+ypeRz/XrCXIqubrLSnNAzJAp9EQSQIPHTv+YmUHZis8g08lOwFpuhqL9m8jkPSz8GWEKlU/ow==", - "dependencies": { - "@sqltools/formatter": "^1.2.5", - "app-root-path": "^3.1.0", - "buffer": "^6.0.3", - "chalk": "^4.1.2", - "cli-highlight": "^2.1.11", - "debug": "^4.3.4", - "dotenv": "^16.0.3", - "glob": "^8.1.0", - "mkdirp": "^2.1.3", - "reflect-metadata": "^0.1.13", - "sha.js": "^2.4.11", - "tslib": "^2.5.0", - "uuid": "^9.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "typeorm": "cli.js", - "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", - "typeorm-ts-node-esm": "cli-ts-node-esm.js" - }, - "engines": { - "node": ">= 12.9.0" - }, - "funding": { - "url": "https://opencollective.com/typeorm" - }, - "peerDependencies": { - "@google-cloud/spanner": "^5.18.0", - "@sap/hana-client": "^2.12.25", - "better-sqlite3": "^7.1.2 || ^8.0.0", - "hdb-pool": "^0.1.6", - "ioredis": "^5.0.4", - "mongodb": "^5.2.0", - "mssql": "^9.1.1", - "mysql2": "^2.2.5 || ^3.0.1", - "oracledb": "^5.1.0", - "pg": "^8.5.1", - "pg-native": "^3.0.0", - "pg-query-stream": "^4.0.0", - "redis": "^3.1.1 || ^4.0.0", - "sql.js": "^1.4.0", - "sqlite3": "^5.0.3", - "ts-node": "^10.7.0", - "typeorm-aurora-data-api-driver": "^2.0.0" - }, - "peerDependenciesMeta": { - "@google-cloud/spanner": { - "optional": true - }, - "@sap/hana-client": { - "optional": true - }, - "better-sqlite3": { - "optional": true - }, - "hdb-pool": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "mongodb": { - "optional": true - }, - "mssql": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "oracledb": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-native": { - "optional": true - }, - "pg-query-stream": { - "optional": true - }, - "redis": { - "optional": true - }, - "sql.js": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "ts-node": { - "optional": true - }, - "typeorm-aurora-data-api-driver": { - "optional": true - } - } - }, - "node_modules/typeorm/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typeorm/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/typeorm/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/typeorm/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typeorm/node_modules/mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/typeorm/node_modules/reflect-metadata": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", - "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==" - }, - "node_modules/typeorm/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/typeorm/node_modules/yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/typeorm/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "optional": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "optional": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket-polyfill": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/websocket-polyfill/-/websocket-polyfill-0.0.3.tgz", - "integrity": "sha512-pF3kR8Uaoau78MpUmFfzbIRxXj9PeQrCuPepGE6JIsfsJ/o/iXr07Q2iQNzKSSblQJ0FiGWlS64N4pVSm+O3Dg==", - "dependencies": { - "tstl": "^2.0.7", - "websocket": "^1.0.28" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/why-is-node-running": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.0.tgz", - "integrity": "sha512-euOPfZRxdZBcD/vL0sH+NtuC/nDpdsZ/aeoq9w5sOcQtfkmhztf/JS76IiD0CJEULlSAPSMy/ZLejex5MsFCcw==", - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=20.11" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, - "engines": { - "node": ">=6" - } - } - } -} +{ + "name": "lnpub", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "lnpub", + "version": "1.0.0", + "license": "Affero GPLv3", + "dependencies": { + "@grpc/grpc-js": "^1.11.2", + "@protobuf-ts/grpc-transport": "^2.9.4", + "@protobuf-ts/plugin": "^2.5.0", + "@protobuf-ts/runtime": "^2.5.0", + "@stablelib/xchacha20": "^1.0.1", + "@types/express": "^4.17.21", + "@types/node": "^17.0.31", + "@types/secp256k1": "^4.0.3", + "axios": "^1.7.7", + "bech32": "^2.0.0", + "bitcoin-core": "^4.2.0", + "chai": "^4.3.7", + "chai-string": "^1.5.0", + "copyfiles": "^2.4.1", + "cors": "^2.8.5", + "csv": "^6.3.8", + "dotenv": "^16.4.5", + "eccrypto": "^1.1.6", + "express": "^4.21.1", + "globby": "^13.1.2", + "grpc-tools": "^1.12.4", + "jsonwebtoken": "^9.0.2", + "lodash": "^4.17.21", + "nostr-tools": "github:shocknet/nostr-tools#da188cd4bd195f44cc690074a3898f354ae85100", + "pg": "^8.4.0", + "reflect-metadata": "^0.2.2", + "rimraf": "^3.0.2", + "rxjs": "^7.5.5", + "secp256k1": "^4.0.3", + "sqlite3": "^5.1.7", + "ts-node": "^10.7.0", + "ts-proto": "^1.131.2", + "typeorm": "0.3.15", + "typescript": "^5.5.4", + "uuid": "^8.3.2", + "websocket": "^1.0.34", + "websocket-polyfill": "^0.0.3", + "why-is-node-running": "^3.2.0", + "ws": "^8.18.0" + }, + "devDependencies": { + "@types/chai": "^4.3.4", + "@types/chai-string": "^1.4.5", + "@types/cors": "^2.8.17", + "@types/eccrypto": "^1.1.6", + "@types/jsonwebtoken": "^9.0.6", + "@types/lodash": "^4.14.182", + "@types/node": "^16.11.10", + "@types/node-fetch": "^2.6.3", + "@types/uuid": "^8.3.4", + "@types/websocket": "^1.0.6", + "@types/ws": "^8.5.12", + "nodemon": "^2.0.20", + "ts-node": "10.7.0", + "typescript": "5.5.4" + } + }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "devOptional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "devOptional": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, + "node_modules/@grpc/grpc-js": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.2.tgz", + "integrity": "sha512-DWp92gDD7/Qkj7r8kus6/HCINeo3yPZWZ3paKgDgsbKbSpoxKg1yvN8xe2Q8uE3zOsPe3bX8FQX2+XValq2yTw==", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/@grpc/proto-loader/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@noble/ciphers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", + "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@protobuf-ts/grpc-transport": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@protobuf-ts/grpc-transport/-/grpc-transport-2.9.4.tgz", + "integrity": "sha512-CgjTR3utmkMkkThpfgtOz9tNR9ZARbNoQYL7TCKqFU2sgAX0LgzAkwOx+sfgtUsZn9J08+yvn307nNJdYocLRA==", + "dependencies": { + "@protobuf-ts/runtime": "^2.9.4", + "@protobuf-ts/runtime-rpc": "^2.9.4" + }, + "peerDependencies": { + "@grpc/grpc-js": "^1.6.0" + } + }, + "node_modules/@protobuf-ts/plugin": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin/-/plugin-2.8.1.tgz", + "integrity": "sha512-lacRdXJ9TkTbI28U0KApsnVqnxeq1aZftOdq6LNPQJaIzBrVRxrMkqnnGWGQFYe0Tr93OKeW4A2lLjTkn32CuA==", + "dependencies": { + "@protobuf-ts/plugin-framework": "^2.8.1", + "@protobuf-ts/protoc": "^2.8.1", + "@protobuf-ts/runtime": "^2.8.1", + "@protobuf-ts/runtime-rpc": "^2.8.1", + "typescript": "^3.9" + }, + "bin": { + "protoc-gen-dump": "bin/protoc-gen-dump", + "protoc-gen-ts": "bin/protoc-gen-ts" + } + }, + "node_modules/@protobuf-ts/plugin-framework": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin-framework/-/plugin-framework-2.8.1.tgz", + "integrity": "sha512-hfLoYIyxCI6Ro6LY1BltNBDcXWL+36SwnWR/hcF4ttPHLE3rMIpYbz4IwQsfeU2SKbBeGFhZv9rcnDJB22cXog==", + "dependencies": { + "@protobuf-ts/runtime": "^2.8.1", + "typescript": "^3.9" + } + }, + "node_modules/@protobuf-ts/plugin-framework/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@protobuf-ts/plugin/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@protobuf-ts/protoc": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/@protobuf-ts/protoc/-/protoc-2.8.1.tgz", + "integrity": "sha512-6fehuL9bS22zCgPBBlESZjnoA4fxAUkOjMcaFMJSlVpN6CDN2O+c/Mo1pCXaNDO7FAidMPj5yhz48Kws4kOXEA==", + "bin": { + "protoc": "protoc.js" + } + }, + "node_modules/@protobuf-ts/runtime": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.9.4.tgz", + "integrity": "sha512-vHRFWtJJB/SiogWDF0ypoKfRIZ41Kq+G9cEFj6Qm1eQaAhJ1LDFvgZ7Ja4tb3iLOQhz0PaoPnnOijF1qmEqTxg==" + }, + "node_modules/@protobuf-ts/runtime-rpc": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.9.4.tgz", + "integrity": "sha512-y9L9JgnZxXFqH5vD4d7j9duWvIJ7AShyBRoNKJGhu9Q27qIbchfzli66H9RvrQNIFk5ER7z1Twe059WZGqERcA==", + "dependencies": { + "@protobuf-ts/runtime": "^2.9.4" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/chacha": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", + "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + }, + "node_modules/@stablelib/xchacha20": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/xchacha20/-/xchacha20-1.0.1.tgz", + "integrity": "sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "devOptional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "devOptional": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "dev": true + }, + "node_modules/@types/chai-string": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@types/chai-string/-/chai-string-1.4.5.tgz", + "integrity": "sha512-IecXRMSnpUvRnTztdpSdjcmcW7EdNme65bfDCQMi7XrSEPGmyDYYTEfc5fcactWDA6ioSm8o7NUqg9QxjBCCEw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eccrypto": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/eccrypto/-/eccrypto-1.1.6.tgz", + "integrity": "sha512-rsmcX5LdDZ3xN2W3al6+YR+XNmiQWlXSwVhsU184QOwNQNJ83YpwvAt8a7cT7y3RpVWkKWmXoIFdanI/z38rNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/expect": "^1.20.4", + "@types/node": "*" + } + }, + "node_modules/@types/expect": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz", + "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.189", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", + "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", + "dev": true + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "node_modules/@types/node": { + "version": "16.18.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", + "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", + "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/object-hash": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/object-hash/-/object-hash-1.3.4.tgz", + "integrity": "sha512-xFdpkAkikBgqBdG9vIlsqffDV8GpvnPEzs0IUtr1v3BEB97ijsFQ4RXVbUZwjFThhB4MDSTUfvmxUD5PGx0wXA==" + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/send/node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "node_modules/@types/websocket": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.6.tgz", + "integrity": "sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@uphold/request-logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@uphold/request-logger/-/request-logger-2.0.0.tgz", + "integrity": "sha512-UvGS+v87C7VTtQDcFHDLfvfl1zaZaLSwSmAnV35Ne7CzAVvotmZqt9lAIoNpMpaoRpdjVIcnUDwPSeIeA//EoQ==", + "dependencies": { + "uuid": "^3.0.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "request": ">=2.27.0" + } + }, + "node_modules/@uphold/request-logger/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "devOptional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "optional": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agentkeepalive/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bitcoin-core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/bitcoin-core/-/bitcoin-core-4.2.0.tgz", + "integrity": "sha512-QFmer//rZhyuYm0mBOVAmMhIG/EFmXDahC3a1LvNTwM8/KszxUGEAjvAT4tzm1FaDj4c7pQWMG/vOWtoKjeR3Q==", + "dependencies": { + "@uphold/request-logger": "^2.0.0", + "debugnyan": "^1.0.0", + "json-bigint": "^1.0.0", + "lodash": "^4.0.0", + "request": "^2.53.0", + "semver": "^5.1.0", + "standard-error": "^1.1.0" + }, + "engines": { + "node": ">=7" + } + }, + "node_modules/bitcoin-core/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "optional": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "optional": true + }, + "node_modules/bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "engines": [ + "node >=0.10.0" + ], + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz", + "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==", + "peerDependencies": { + "chai": "^4.1.2" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "optional": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copyfiles": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", + "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", + "dependencies": { + "glob": "^7.0.5", + "minimatch": "^3.0.3", + "mkdirp": "^1.0.4", + "noms": "0.0.0", + "through2": "^2.0.1", + "untildify": "^4.0.0", + "yargs": "^16.1.0" + }, + "bin": { + "copyfiles": "copyfiles", + "copyup": "copyfiles" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "optional": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "optional": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true + }, + "node_modules/csv": { + "version": "6.3.8", + "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.8.tgz", + "integrity": "sha512-gRh3yiT9bHBA5ka2yOpyFqAVu/ZpwWzajMUR/es0ljevAE88WyHBuMUy7jzd2o5j6LYQesEO/AyhbQ9BhbDXUA==", + "dependencies": { + "csv-generate": "^4.4.0", + "csv-parse": "^5.5.5", + "csv-stringify": "^6.4.6", + "stream-transform": "^3.3.1" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.4.0.tgz", + "integrity": "sha512-geM01acNPZ0wr4/9sKev5fCzFG/tsc/NbuFWrhLc47M1zQyUdEJH65+cxTLIVafEwhBjIYwQ7fdOL9roBqVltQ==" + }, + "node_modules/csv-parse": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.5.tgz", + "integrity": "sha512-erCk7tyU3yLWAhk6wvKxnyPtftuy/6Ak622gOO7BCJ05+TYffnPCJF905wmOQm+BpkX54OdAl8pveJwUdpnCXQ==" + }, + "node_modules/csv-stringify": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.4.6.tgz", + "integrity": "sha512-h2V2XZ3uOTLilF5dPIptgUfN/o2ia/80Ie0Lly18LAnw5s8Eb7kt8rfxSUy24AztJZas9f6DPZpVlzDUtFt/ag==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dataloader": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", + "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/debugnyan": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/debugnyan/-/debugnyan-1.0.0.tgz", + "integrity": "sha512-dTvKxcLZCammDLFYi31NRVr5g6vjJ33uf1wcdbIPPxPxxnJ9/xj00Mh/YQkhFMw/VGavaG5KpjSC+4o9r/JjRg==", + "dependencies": { + "bunyan": "^1.8.1", + "debug": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dprint-node": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/dprint-node/-/dprint-node-1.0.7.tgz", + "integrity": "sha512-NTZOW9A7ipb0n7z7nC3wftvsbceircwVHSgzobJsEQa+7RnOMbhrfX5IflA6CtC4GA63DSAiHYXa4JKEy9F7cA==", + "dependencies": { + "detect-libc": "^1.0.3" + } + }, + "node_modules/dprint-node/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==", + "optional": true, + "dependencies": { + "browserify-aes": "^1.0.6", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "nan": "^2.14.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/eccrypto": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.6.tgz", + "integrity": "sha512-d78ivVEzu7Tn0ZphUUaL43+jVPKTMPFGtmgtz1D0LrFn7cY3K8CdrvibuLz2AAkHBLKZtR8DMbB2ukRYFk987A==", + "hasInstallScript": true, + "dependencies": { + "acorn": "7.1.1", + "elliptic": "6.5.4", + "es6-promise": "4.2.8", + "nan": "2.14.0" + }, + "optionalDependencies": { + "secp256k1": "3.7.1" + } + }, + "node_modules/eccrypto/node_modules/secp256k1": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", + "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "bip66": "^1.1.5", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "drbg.js": "^1.0.1", + "elliptic": "^6.4.1", + "nan": "^2.14.0", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esniff/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "optional": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "optional": true + }, + "node_modules/grpc-tools": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.12.4.tgz", + "integrity": "sha512-5+mLAJJma3BjnW/KQp6JBjUMgvu7Mu3dBvBPd1dcbNIb+qiR0817zDpgPjS7gRb+l/8EVNIa3cB02xI9JLToKg==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.5" + }, + "bin": { + "grpc_tools_node_protoc": "bin/protoc.js", + "grpc_tools_node_protoc_plugin": "bin/protoc_plugin.js" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "optional": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "optional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", + "optional": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "optional": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "optional": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "optional": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-abi": { + "version": "3.67.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz", + "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-gyp/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/nodemon": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/noms": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", + "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "~1.0.31" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nostr-tools": { + "version": "2.8.0", + "resolved": "git+ssh://git@github.com/shocknet/nostr-tools.git#da188cd4bd195f44cc690074a3898f354ae85100", + "integrity": "sha512-kc41K75rXEnLhqIwlQmjaGsZ9yYTbyP8VW7B2Q+0U/pqaMyt25Nt0QCWiIYS04m0sanvD77OhmddvI1s2ntKog==", + "license": "Unlicense", + "dependencies": { + "@noble/ciphers": "^0.5.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.1", + "@scure/base": "1.1.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + }, + "optionalDependencies": { + "nostr-wasm": "v0.1.0" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/nostr-wasm": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/nostr-wasm/-/nostr-wasm-0.1.0.tgz", + "integrity": "sha512-78BTryCLcLYv96ONU8Ws3Q1JzjlAt+43pWQhIl86xZmWeegYCNLPml7yQ+gG3vR6V5h4XGj+TxO+SS5dsThQIA==", + "license": "MIT", + "optional": true + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/pg": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz", + "integrity": "sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.5.0", + "pg-pool": "^3.5.2", + "pg-protocol": "^1.5.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", + "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/protobufjs": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "optional": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "optional": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/sqlite3/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/standard-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/standard-error/-/standard-error-1.1.0.tgz", + "integrity": "sha512-4v7qzU7oLJfMI5EltUSHCaaOd65J6S4BqKRWgzMi4EYaE5fvNabPxmAPGdxpGXqrcWjhDGI/H09CIdEuUOUeXg==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-transform": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.3.1.tgz", + "integrity": "sha512-BL8pv9QL8Ikd11oZwlRDp1qYMhGR0i50zI9ltoijKGc4ubQWal/Rc4p6SYJp1TBOGpE0uAGchwbxOZ1ycwTuqQ==" + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-node": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "devOptional": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-poet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ts-poet/-/ts-poet-6.1.0.tgz", + "integrity": "sha512-PFwbNJjGrb44wzHUGQicG2/nhjR+3+k7zYLDTa8D61NVUitl7K/JgIc9/P+8oMNenntKzLc8tjLDOkPrxIhm6A==", + "dependencies": { + "dprint-node": "^1.0.7" + } + }, + "node_modules/ts-proto": { + "version": "1.131.2", + "resolved": "https://registry.npmjs.org/ts-proto/-/ts-proto-1.131.2.tgz", + "integrity": "sha512-SFQMXoNrZ/Ybcc2wwS/s0Lser/aVRr6HMN1LLHIvsbx3aK1eM02CLmWbic+DblGyoua8ZzuonbnCWBhcjwPTFA==", + "dependencies": { + "@types/object-hash": "^1.3.0", + "dataloader": "^1.4.0", + "object-hash": "^1.3.1", + "protobufjs": "^6.11.3", + "ts-poet": "^6.1.0", + "ts-proto-descriptors": "1.7.1" + }, + "bin": { + "protoc-gen-ts_proto": "protoc-gen-ts_proto" + } + }, + "node_modules/ts-proto-descriptors": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ts-proto-descriptors/-/ts-proto-descriptors-1.7.1.tgz", + "integrity": "sha512-oIKUh3K4Xts4v29USGLfUG+2mEk32MsqpgZAOUyUlkrcIdv34yE+k2oZ2Nzngm6cV/JgFdOxRCqeyvmWHuYAyw==", + "dependencies": { + "long": "^4.0.0", + "protobufjs": "^6.8.8" + } + }, + "node_modules/ts-proto-descriptors/node_modules/protobufjs": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/ts-proto/node_modules/protobufjs": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/tstl": { + "version": "2.5.13", + "resolved": "https://registry.npmjs.org/tstl/-/tstl-2.5.13.tgz", + "integrity": "sha512-h9wayHHFI5+yqt8iau0vqH96cTNhezhZ/Fk/hrIdpfkiMu3lg9nzyvMfs5bIdX51IVzZO6DudLqhkL/rVXpT6g==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typeorm": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.15.tgz", + "integrity": "sha512-R4JSw8QjDP1W+ypeRz/XrCXIqubrLSnNAzJAp9EQSQIPHTv+YmUHZis8g08lOwFpuhqL9m8jkPSz8GWEKlU/ow==", + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "app-root-path": "^3.1.0", + "buffer": "^6.0.3", + "chalk": "^4.1.2", + "cli-highlight": "^2.1.11", + "debug": "^4.3.4", + "dotenv": "^16.0.3", + "glob": "^8.1.0", + "mkdirp": "^2.1.3", + "reflect-metadata": "^0.1.13", + "sha.js": "^2.4.11", + "tslib": "^2.5.0", + "uuid": "^9.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">= 12.9.0" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@google-cloud/spanner": "^5.18.0", + "@sap/hana-client": "^2.12.25", + "better-sqlite3": "^7.1.2 || ^8.0.0", + "hdb-pool": "^0.1.6", + "ioredis": "^5.0.4", + "mongodb": "^5.2.0", + "mssql": "^9.1.1", + "mysql2": "^2.2.5 || ^3.0.1", + "oracledb": "^5.1.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.3", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0" + }, + "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "hdb-pool": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, + "node_modules/typeorm/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typeorm/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/typeorm/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/typeorm/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typeorm/node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/typeorm/node_modules/reflect-metadata": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==" + }, + "node_modules/typeorm/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/typeorm/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/typeorm/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket-polyfill": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/websocket-polyfill/-/websocket-polyfill-0.0.3.tgz", + "integrity": "sha512-pF3kR8Uaoau78MpUmFfzbIRxXj9PeQrCuPepGE6JIsfsJ/o/iXr07Q2iQNzKSSblQJ0FiGWlS64N4pVSm+O3Dg==", + "dependencies": { + "tstl": "^2.0.7", + "websocket": "^1.0.28" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.0.tgz", + "integrity": "sha512-euOPfZRxdZBcD/vL0sH+NtuC/nDpdsZ/aeoq9w5sOcQtfkmhztf/JS76IiD0CJEULlSAPSMy/ZLejex5MsFCcw==", + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=20.11" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, + "engines": { + "node": ">=6" + } + } + } +} diff --git a/proto/autogenerated/client.md b/proto/autogenerated/client.md index 2e8afe675..510841e22 100644 --- a/proto/autogenerated/client.md +++ b/proto/autogenerated/client.md @@ -220,6 +220,11 @@ The nostr server will send back a message response, and inside the body there wi - input: [CallbackUrl](#CallbackUrl) - output: [CallbackUrl](#CallbackUrl) +- UpdateChannelPolicy + - auth type: __Admin__ + - input: [UpdateChannelPolicyRequest](#UpdateChannelPolicyRequest) + - This methods has an __empty__ __response__ body + - UseInviteLink - auth type: __GuestWithPub__ - input: [UseInviteLinkRequest](#UseInviteLinkRequest) @@ -721,6 +726,13 @@ The nostr server will send back a message response, and inside the body there wi - input: [CallbackUrl](#CallbackUrl) - output: [CallbackUrl](#CallbackUrl) +- UpdateChannelPolicy + - auth type: __Admin__ + - http method: __post__ + - http route: __/api/admin/channel/policy/update__ + - input: [UpdateChannelPolicyRequest](#UpdateChannelPolicyRequest) + - This methods has an __empty__ __response__ body + - UseInviteLink - auth type: __GuestWithPub__ - http method: __post__ @@ -823,6 +835,13 @@ The nostr server will send back a message response, and inside the body there wi ### CallbackUrl - __url__: _string_ +### ChannelPolicy + - __base_fee_msat__: _number_ + - __fee_rate_ppm__: _number_ + - __max_htlc_msat__: _number_ + - __min_htlc_msat__: _number_ + - __timelock_delta__: _number_ + ### CloseChannelRequest - __force__: _boolean_ - __funding_txid__: _string_ @@ -901,9 +920,6 @@ The nostr server will send back a message response, and inside the body there wi ### GetAppUserRequest - __user_identifier__: _string_ -### GetChannelPolicyRequest - - __channel_id__: _string_ - ### GetInviteTokenStateRequest - __invite_token__: _string_ @@ -1039,9 +1055,11 @@ The nostr server will send back a message response, and inside the body there wi - __active__: _boolean_ - __capacity__: _number_ - __channel_id__: _string_ + - __channel_point__: _string_ - __label__: _string_ - __lifetime__: _number_ - __local_balance__: _number_ + - __policy__: _[ChannelPolicy](#ChannelPolicy)_ *this field is optional - __remote_balance__: _number_ ### OpenChannelRequest @@ -1138,6 +1156,10 @@ The nostr server will send back a message response, and inside the body there wi - __amount__: _number_ - __invoice__: _string_ +### UpdateChannelPolicyRequest + - __policy__: _[ChannelPolicy](#ChannelPolicy)_ + - __update__: _[UpdateChannelPolicyRequest_update](#UpdateChannelPolicyRequest_update)_ + ### UsageMetric - __auth_in_nano__: _number_ - __batch__: _boolean_ diff --git a/proto/autogenerated/go/http_client.go b/proto/autogenerated/go/http_client.go index 6c64e3ff6..06a87ff78 100644 --- a/proto/autogenerated/go/http_client.go +++ b/proto/autogenerated/go/http_client.go @@ -117,6 +117,7 @@ type Client struct { SetMockAppUserBalance func(req SetMockAppUserBalanceRequest) error SetMockInvoiceAsPaid func(req SetMockInvoiceAsPaidRequest) error UpdateCallbackUrl func(req CallbackUrl) (*CallbackUrl, error) + UpdateChannelPolicy func(req UpdateChannelPolicyRequest) error UseInviteLink func(req UseInviteLinkRequest) error UserHealth func() error } @@ -1692,6 +1693,30 @@ func NewClient(params ClientParams) *Client { } return &res, nil }, + UpdateChannelPolicy: func(req UpdateChannelPolicyRequest) error { + auth, err := params.RetrieveAdminAuth() + if err != nil { + return err + } + finalRoute := "/api/admin/channel/policy/update" + body, err := json.Marshal(req) + if err != nil { + return err + } + resBody, err := doPostRequest(params.BaseURL+finalRoute, body, auth) + if err != nil { + return err + } + result := ResultError{} + err = json.Unmarshal(resBody, &result) + if err != nil { + return err + } + if result.Status == "ERROR" { + return fmt.Errorf(result.Reason) + } + return nil + }, UseInviteLink: func(req UseInviteLinkRequest) error { auth, err := params.RetrieveGuestWithPubAuth() if err != nil { diff --git a/proto/autogenerated/go/types.go b/proto/autogenerated/go/types.go index e3a550fa6..5a5061d18 100644 --- a/proto/autogenerated/go/types.go +++ b/proto/autogenerated/go/types.go @@ -158,6 +158,13 @@ type BannedAppUser struct { type CallbackUrl struct { Url string `json:"url"` } +type ChannelPolicy struct { + Base_fee_msat int64 `json:"base_fee_msat"` + Fee_rate_ppm int64 `json:"fee_rate_ppm"` + Max_htlc_msat int64 `json:"max_htlc_msat"` + Min_htlc_msat int64 `json:"min_htlc_msat"` + Timelock_delta int64 `json:"timelock_delta"` +} type CloseChannelRequest struct { Force bool `json:"force"` Funding_txid string `json:"funding_txid"` @@ -236,9 +243,6 @@ type GetAppUserLNURLInfoRequest struct { type GetAppUserRequest struct { User_identifier string `json:"user_identifier"` } -type GetChannelPolicyRequest struct { - Channel_id string `json:"channel_id"` -} type GetInviteTokenStateRequest struct { Invite_token string `json:"invite_token"` } @@ -371,13 +375,15 @@ type NewInvoiceResponse struct { Invoice string `json:"invoice"` } type OpenChannel struct { - Active bool `json:"active"` - Capacity int64 `json:"capacity"` - Channel_id string `json:"channel_id"` - Label string `json:"label"` - Lifetime int64 `json:"lifetime"` - Local_balance int64 `json:"local_balance"` - Remote_balance int64 `json:"remote_balance"` + Active bool `json:"active"` + Capacity int64 `json:"capacity"` + Channel_id string `json:"channel_id"` + Channel_point string `json:"channel_point"` + Label string `json:"label"` + Lifetime int64 `json:"lifetime"` + Local_balance int64 `json:"local_balance"` + Policy *ChannelPolicy `json:"policy"` + Remote_balance int64 `json:"remote_balance"` } type OpenChannelRequest struct { Close_address string `json:"close_address"` @@ -473,6 +479,10 @@ type SetMockInvoiceAsPaidRequest struct { Amount int64 `json:"amount"` Invoice string `json:"invoice"` } +type UpdateChannelPolicyRequest struct { + Policy *ChannelPolicy `json:"policy"` + Update *UpdateChannelPolicyRequest_update `json:"update"` +} type UsageMetric struct { Auth_in_nano int64 `json:"auth_in_nano"` Batch bool `json:"batch"` @@ -581,3 +591,15 @@ type NPubLinking_state struct { Linking_token *string `json:"linking_token"` Unlinked *Empty `json:"unlinked"` } +type UpdateChannelPolicyRequest_update_type string + +const ( + ALL UpdateChannelPolicyRequest_update_type = "all" + CHANNEL_POINT UpdateChannelPolicyRequest_update_type = "channel_point" +) + +type UpdateChannelPolicyRequest_update struct { + Type UpdateChannelPolicyRequest_update_type `json:"type"` + All *Empty `json:"all"` + Channel_point *string `json:"channel_point"` +} diff --git a/proto/autogenerated/ts/express_server.ts b/proto/autogenerated/ts/express_server.ts index 14e598ce7..cedcfc7dc 100644 --- a/proto/autogenerated/ts/express_server.ts +++ b/proto/autogenerated/ts/express_server.ts @@ -1543,6 +1543,28 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { opts.metricsCallback([{ ...info, ...stats, ...authContext }]) } catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } }) + if (!opts.allowNotImplementedMethods && !methods.UpdateChannelPolicy) throw new Error('method: UpdateChannelPolicy is not implemented') + app.post('/api/admin/channel/policy/update', async (req, res) => { + const info: Types.RequestInfo = { rpcName: 'UpdateChannelPolicy', batch: false, nostr: false, batchSize: 0} + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + let authCtx: Types.AuthContext = {} + try { + if (!methods.UpdateChannelPolicy) throw new Error('method: UpdateChannelPolicy is not implemented') + const authContext = await opts.AdminAuthGuard(req.headers['authorization']) + authCtx = authContext + stats.guard = process.hrtime.bigint() + const request = req.body + const error = Types.UpdateChannelPolicyRequestValidate(request) + stats.validate = process.hrtime.bigint() + if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger, { ...info, ...stats, ...authContext }, opts.metricsCallback) + const query = req.query + const params = req.params + await methods.UpdateChannelPolicy({rpcName:'UpdateChannelPolicy', ctx:authContext , req: request}) + stats.handle = process.hrtime.bigint() + res.json({status: 'OK'}) + opts.metricsCallback([{ ...info, ...stats, ...authContext }]) + } catch (ex) { const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } + }) if (!opts.allowNotImplementedMethods && !methods.UseInviteLink) throw new Error('method: UseInviteLink is not implemented') app.post('/api/guest/invite', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'UseInviteLink', batch: false, nostr: false, batchSize: 0} diff --git a/proto/autogenerated/ts/http_client.ts b/proto/autogenerated/ts/http_client.ts index 8da21cfb1..1bc428a1a 100644 --- a/proto/autogenerated/ts/http_client.ts +++ b/proto/autogenerated/ts/http_client.ts @@ -810,6 +810,17 @@ export default (params: ClientParams) => ({ } return { status: 'ERROR', reason: 'invalid response' } }, + UpdateChannelPolicy: async (request: Types.UpdateChannelPolicyRequest): Promise => { + const auth = await params.retrieveAdminAuth() + if (auth === null) throw new Error('retrieveAdminAuth() returned null') + let finalRoute = '/api/admin/channel/policy/update' + 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') { + return data + } + return { status: 'ERROR', reason: 'invalid response' } + }, UseInviteLink: async (request: Types.UseInviteLinkRequest): Promise => { const auth = await params.retrieveGuestWithPubAuth() if (auth === null) throw new Error('retrieveGuestWithPubAuth() returned null') diff --git a/proto/autogenerated/ts/nostr_client.ts b/proto/autogenerated/ts/nostr_client.ts index a67e87a76..6a2c8d5d4 100644 --- a/proto/autogenerated/ts/nostr_client.ts +++ b/proto/autogenerated/ts/nostr_client.ts @@ -594,6 +594,18 @@ export default (params: NostrClientParams, send: (to:string, message: NostrRequ } return { status: 'ERROR', reason: 'invalid response' } }, + UpdateChannelPolicy: async (request: Types.UpdateChannelPolicyRequest): Promise => { + const auth = await params.retrieveNostrAdminAuth() + if (auth === null) throw new Error('retrieveNostrAdminAuth() returned null') + const nostrRequest: NostrRequest = {} + nostrRequest.body = request + const data = await send(params.pubDestination, {rpcName:'UpdateChannelPolicy',authIdentifier:auth, ...nostrRequest }) + if (data.status === 'ERROR' && typeof data.reason === 'string') return data + if (data.status === 'OK') { + return data + } + return { status: 'ERROR', reason: 'invalid response' } + }, UseInviteLink: async (request: Types.UseInviteLinkRequest): Promise => { const auth = await params.retrieveNostrGuestWithPubAuth() if (auth === null) throw new Error('retrieveNostrGuestWithPubAuth() returned null') diff --git a/proto/autogenerated/ts/nostr_transport.ts b/proto/autogenerated/ts/nostr_transport.ts index 29f478291..48f824a78 100644 --- a/proto/autogenerated/ts/nostr_transport.ts +++ b/proto/autogenerated/ts/nostr_transport.ts @@ -912,6 +912,22 @@ export default (methods: Types.ServerMethods, opts: NostrOptions) => { opts.metricsCallback([{ ...info, ...stats, ...authContext }]) }catch(ex){ const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } break + case 'UpdateChannelPolicy': + try { + if (!methods.UpdateChannelPolicy) throw new Error('method: UpdateChannelPolicy is not implemented') + const authContext = await opts.NostrAdminAuthGuard(req.appId, req.authIdentifier) + stats.guard = process.hrtime.bigint() + authCtx = authContext + const request = req.body + const error = Types.UpdateChannelPolicyRequestValidate(request) + stats.validate = process.hrtime.bigint() + if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback) + await methods.UpdateChannelPolicy({rpcName:'UpdateChannelPolicy', ctx:authContext , req: request}) + stats.handle = process.hrtime.bigint() + res({status: 'OK'}) + opts.metricsCallback([{ ...info, ...stats, ...authContext }]) + }catch(ex){ const e = ex as any; logErrorAndReturnResponse(e, e.message || e, res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback); if (opts.throwErrors) throw e } + break case 'UseInviteLink': try { if (!methods.UseInviteLink) throw new Error('method: UseInviteLink is not implemented') diff --git a/proto/autogenerated/ts/types.ts b/proto/autogenerated/ts/types.ts index bece0ac0e..077ff3da9 100644 --- a/proto/autogenerated/ts/types.ts +++ b/proto/autogenerated/ts/types.ts @@ -7,8 +7,8 @@ export type RequestMetric = AuthContext & RequestInfo & RequestStats & { error?: export type AdminContext = { admin_id: string } -export type AdminMethodInputs = AddApp_Input | AddPeer_Input | AuthApp_Input | BanUser_Input | CloseChannel_Input | CreateOneTimeInviteLink_Input | GetInviteLinkState_Input | GetSeed_Input | ListChannels_Input | LndGetInfo_Input | OpenChannel_Input -export type AdminMethodOutputs = AddApp_Output | AddPeer_Output | AuthApp_Output | BanUser_Output | CloseChannel_Output | CreateOneTimeInviteLink_Output | GetInviteLinkState_Output | GetSeed_Output | ListChannels_Output | LndGetInfo_Output | OpenChannel_Output +export type AdminMethodInputs = AddApp_Input | AddPeer_Input | AuthApp_Input | BanUser_Input | CloseChannel_Input | CreateOneTimeInviteLink_Input | GetInviteLinkState_Input | GetSeed_Input | ListChannels_Input | LndGetInfo_Input | OpenChannel_Input | UpdateChannelPolicy_Input +export type AdminMethodOutputs = AddApp_Output | AddPeer_Output | AuthApp_Output | BanUser_Output | CloseChannel_Output | CreateOneTimeInviteLink_Output | GetInviteLinkState_Output | GetSeed_Output | ListChannels_Output | LndGetInfo_Output | OpenChannel_Output | UpdateChannelPolicy_Output export type AppContext = { app_id: string } @@ -249,6 +249,9 @@ export type SetMockInvoiceAsPaid_Output = ResultError | { status: 'OK' } export type UpdateCallbackUrl_Input = {rpcName:'UpdateCallbackUrl', req: CallbackUrl} export type UpdateCallbackUrl_Output = ResultError | ({ status: 'OK' } & CallbackUrl) +export type UpdateChannelPolicy_Input = {rpcName:'UpdateChannelPolicy', req: UpdateChannelPolicyRequest} +export type UpdateChannelPolicy_Output = ResultError | { status: 'OK' } + export type UseInviteLink_Input = {rpcName:'UseInviteLink', req: UseInviteLinkRequest} export type UseInviteLink_Output = ResultError | { status: 'OK' } @@ -318,6 +321,7 @@ export type ServerMethods = { SetMockAppUserBalance?: (req: SetMockAppUserBalance_Input & {ctx: AppContext }) => Promise SetMockInvoiceAsPaid?: (req: SetMockInvoiceAsPaid_Input & {ctx: GuestContext }) => Promise UpdateCallbackUrl?: (req: UpdateCallbackUrl_Input & {ctx: UserContext }) => Promise + UpdateChannelPolicy?: (req: UpdateChannelPolicy_Input & {ctx: AdminContext }) => Promise UseInviteLink?: (req: UseInviteLink_Input & {ctx: GuestWithPubContext }) => Promise UserHealth?: (req: UserHealth_Input & {ctx: UserContext }) => Promise } @@ -846,6 +850,44 @@ export const CallbackUrlValidate = (o?: CallbackUrl, opts: CallbackUrlOptions = return null } +export type ChannelPolicy = { + base_fee_msat: number + fee_rate_ppm: number + max_htlc_msat: number + min_htlc_msat: number + timelock_delta: number +} +export const ChannelPolicyOptionalFields: [] = [] +export type ChannelPolicyOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + base_fee_msat_CustomCheck?: (v: number) => boolean + fee_rate_ppm_CustomCheck?: (v: number) => boolean + max_htlc_msat_CustomCheck?: (v: number) => boolean + min_htlc_msat_CustomCheck?: (v: number) => boolean + timelock_delta_CustomCheck?: (v: number) => boolean +} +export const ChannelPolicyValidate = (o?: ChannelPolicy, opts: ChannelPolicyOptions = {}, path: string = 'ChannelPolicy::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.base_fee_msat !== 'number') return new Error(`${path}.base_fee_msat: is not a number`) + if (opts.base_fee_msat_CustomCheck && !opts.base_fee_msat_CustomCheck(o.base_fee_msat)) return new Error(`${path}.base_fee_msat: custom check failed`) + + if (typeof o.fee_rate_ppm !== 'number') return new Error(`${path}.fee_rate_ppm: is not a number`) + if (opts.fee_rate_ppm_CustomCheck && !opts.fee_rate_ppm_CustomCheck(o.fee_rate_ppm)) return new Error(`${path}.fee_rate_ppm: custom check failed`) + + if (typeof o.max_htlc_msat !== 'number') return new Error(`${path}.max_htlc_msat: is not a number`) + if (opts.max_htlc_msat_CustomCheck && !opts.max_htlc_msat_CustomCheck(o.max_htlc_msat)) return new Error(`${path}.max_htlc_msat: custom check failed`) + + if (typeof o.min_htlc_msat !== 'number') return new Error(`${path}.min_htlc_msat: is not a number`) + if (opts.min_htlc_msat_CustomCheck && !opts.min_htlc_msat_CustomCheck(o.min_htlc_msat)) return new Error(`${path}.min_htlc_msat: custom check failed`) + + if (typeof o.timelock_delta !== 'number') return new Error(`${path}.timelock_delta: is not a number`) + if (opts.timelock_delta_CustomCheck && !opts.timelock_delta_CustomCheck(o.timelock_delta)) return new Error(`${path}.timelock_delta: custom check failed`) + + return null +} + export type CloseChannelRequest = { force: boolean funding_txid: string @@ -1318,24 +1360,6 @@ export const GetAppUserRequestValidate = (o?: GetAppUserRequest, opts: GetAppUse return null } -export type GetChannelPolicyRequest = { - channel_id: string -} -export const GetChannelPolicyRequestOptionalFields: [] = [] -export type GetChannelPolicyRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - channel_id_CustomCheck?: (v: string) => boolean -} -export const GetChannelPolicyRequestValidate = (o?: GetChannelPolicyRequest, opts: GetChannelPolicyRequestOptions = {}, path: string = 'GetChannelPolicyRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.channel_id !== 'string') return new Error(`${path}.channel_id: is not a string`) - if (opts.channel_id_CustomCheck && !opts.channel_id_CustomCheck(o.channel_id)) return new Error(`${path}.channel_id: custom check failed`) - - return null -} - export type GetInviteTokenStateRequest = { invite_token: string } @@ -2143,20 +2167,25 @@ export type OpenChannel = { active: boolean capacity: number channel_id: string + channel_point: string label: string lifetime: number local_balance: number + policy?: ChannelPolicy remote_balance: number } -export const OpenChannelOptionalFields: [] = [] +export type OpenChannelOptionalField = 'policy' +export const OpenChannelOptionalFields: OpenChannelOptionalField[] = ['policy'] export type OpenChannelOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] + checkOptionalsAreSet?: OpenChannelOptionalField[] active_CustomCheck?: (v: boolean) => boolean capacity_CustomCheck?: (v: number) => boolean channel_id_CustomCheck?: (v: string) => boolean + channel_point_CustomCheck?: (v: string) => boolean label_CustomCheck?: (v: string) => boolean lifetime_CustomCheck?: (v: number) => boolean local_balance_CustomCheck?: (v: number) => boolean + policy_Options?: ChannelPolicyOptions remote_balance_CustomCheck?: (v: number) => boolean } export const OpenChannelValidate = (o?: OpenChannel, opts: OpenChannelOptions = {}, path: string = 'OpenChannel::root.'): Error | null => { @@ -2172,6 +2201,9 @@ export const OpenChannelValidate = (o?: OpenChannel, opts: OpenChannelOptions = if (typeof o.channel_id !== 'string') return new Error(`${path}.channel_id: is not a string`) if (opts.channel_id_CustomCheck && !opts.channel_id_CustomCheck(o.channel_id)) return new Error(`${path}.channel_id: custom check failed`) + if (typeof o.channel_point !== 'string') return new Error(`${path}.channel_point: is not a string`) + if (opts.channel_point_CustomCheck && !opts.channel_point_CustomCheck(o.channel_point)) return new Error(`${path}.channel_point: custom check failed`) + if (typeof o.label !== 'string') return new Error(`${path}.label: is not a string`) if (opts.label_CustomCheck && !opts.label_CustomCheck(o.label)) return new Error(`${path}.label: custom check failed`) @@ -2181,6 +2213,12 @@ export const OpenChannelValidate = (o?: OpenChannel, opts: OpenChannelOptions = if (typeof o.local_balance !== 'number') return new Error(`${path}.local_balance: is not a number`) if (opts.local_balance_CustomCheck && !opts.local_balance_CustomCheck(o.local_balance)) return new Error(`${path}.local_balance: custom check failed`) + if (typeof o.policy === 'object' || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('policy')) { + const policyErr = ChannelPolicyValidate(o.policy, opts.policy_Options, `${path}.policy`) + if (policyErr !== null) return policyErr + } + + if (typeof o.remote_balance !== 'number') return new Error(`${path}.remote_balance: is not a number`) if (opts.remote_balance_CustomCheck && !opts.remote_balance_CustomCheck(o.remote_balance)) return new Error(`${path}.remote_balance: custom check failed`) @@ -2717,6 +2755,31 @@ export const SetMockInvoiceAsPaidRequestValidate = (o?: SetMockInvoiceAsPaidRequ return null } +export type UpdateChannelPolicyRequest = { + policy: ChannelPolicy + update: UpdateChannelPolicyRequest_update +} +export const UpdateChannelPolicyRequestOptionalFields: [] = [] +export type UpdateChannelPolicyRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + policy_Options?: ChannelPolicyOptions + update_Options?: UpdateChannelPolicyRequest_updateOptions +} +export const UpdateChannelPolicyRequestValidate = (o?: UpdateChannelPolicyRequest, opts: UpdateChannelPolicyRequestOptions = {}, path: string = 'UpdateChannelPolicyRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + const policyErr = ChannelPolicyValidate(o.policy, opts.policy_Options, `${path}.policy`) + if (policyErr !== null) return policyErr + + + const updateErr = UpdateChannelPolicyRequest_updateValidate(o.update, opts.update_Options, `${path}.update`) + if (updateErr !== null) return updateErr + + + return null +} + export type UsageMetric = { auth_in_nano: number batch: boolean @@ -3184,6 +3247,42 @@ export const NPubLinking_stateValidate = (o?: NPubLinking_state, opts:NPubLinkin if (unlinkedErr !== null) return unlinkedErr + break + default: + return new Error(path + ': unknown type '+ stringType) + } + return null +} +export enum UpdateChannelPolicyRequest_update_type { + ALL = 'all', + CHANNEL_POINT = 'channel_point', +} +export const enumCheckUpdateChannelPolicyRequest_update_type = (e?: UpdateChannelPolicyRequest_update_type): boolean => { + for (const v in UpdateChannelPolicyRequest_update_type) if (e === v) return true + return false +} +export type UpdateChannelPolicyRequest_update = + {type:UpdateChannelPolicyRequest_update_type.ALL, all:Empty}| + {type:UpdateChannelPolicyRequest_update_type.CHANNEL_POINT, channel_point:string} + +export type UpdateChannelPolicyRequest_updateOptions = { + all_Options?: EmptyOptions + channel_point_CustomCheck?: (v: string) => boolean +} +export const UpdateChannelPolicyRequest_updateValidate = (o?: UpdateChannelPolicyRequest_update, opts:UpdateChannelPolicyRequest_updateOptions = {}, path: string = 'UpdateChannelPolicyRequest_update::root.'): Error | null => { + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + const stringType: string = o.type + switch (o.type) { + case UpdateChannelPolicyRequest_update_type.ALL: + const allErr = EmptyValidate(o.all, opts.all_Options, `${path}.all`) + if (allErr !== null) return allErr + + + break + case UpdateChannelPolicyRequest_update_type.CHANNEL_POINT: + if (typeof o.channel_point !== 'string') return new Error(`${path}.channel_point: is not a string`) + if (opts.channel_point_CustomCheck && !opts.channel_point_CustomCheck(o.channel_point)) return new Error(`${path}.channel_point: custom check failed`) + break default: return new Error(path + ': unknown type '+ stringType) diff --git a/proto/service/methods.proto b/proto/service/methods.proto index e13bbc911..36f9089eb 100644 --- a/proto/service/methods.proto +++ b/proto/service/methods.proto @@ -151,6 +151,13 @@ service LightningPub { option (nostr) = true; } + rpc UpdateChannelPolicy (structs.UpdateChannelPolicyRequest) returns (structs.Empty) { + option (auth_type) = "Admin"; + option (http_method) = "post"; + option (http_route) = "/api/admin/channel/policy/update"; + option (nostr) = true; + } + rpc OpenChannel(structs.OpenChannelRequest) returns (structs.OpenChannelResponse) { option (auth_type) = "Admin"; option (http_method) = "post"; diff --git a/proto/service/structs.proto b/proto/service/structs.proto index 39e977436..351ec4f47 100644 --- a/proto/service/structs.proto +++ b/proto/service/structs.proto @@ -88,6 +88,22 @@ message RoutingEvent { bool forward_fail_event = 12; } +message ChannelPolicy { + int64 base_fee_msat= 1; + int64 fee_rate_ppm = 2; + int64 max_htlc_msat = 3; + int64 min_htlc_msat = 4; + int64 timelock_delta = 5; +} + +message UpdateChannelPolicyRequest { + oneof update { + string channel_point = 1; + Empty all = 2; + } + ChannelPolicy policy = 3; +} + message OpenChannel { string channel_id = 1; int64 capacity = 2; @@ -96,6 +112,8 @@ message OpenChannel { int64 local_balance=5; int64 remote_balance = 6; string label = 7; + string channel_point = 8; + optional ChannelPolicy policy = 9; } message ClosedChannel { string channel_id = 1; @@ -131,10 +149,6 @@ message LndChannels { repeated OpenChannel open_channels = 1; } -message GetChannelPolicyRequest { - string channel_id = 1; -} - message OpenChannelRequest{ diff --git a/src/services/lnd/lnd.ts b/src/services/lnd/lnd.ts index f362f26d9..05aa2aeda 100644 --- a/src/services/lnd/lnd.ts +++ b/src/services/lnd/lnd.ts @@ -385,6 +385,23 @@ export default class { return res.response } + async UpdateChannelPolicy(chanPoint: string, policy: Types.ChannelPolicy) { + const split = chanPoint.split(':') + + const res = await this.lightning.updateChannelPolicy({ + scope: policy ? { oneofKind: 'chanPoint', chanPoint: { fundingTxid: { oneofKind: 'fundingTxidStr', fundingTxidStr: split[0] }, outputIndex: Number(split[1]) } } : { oneofKind: 'global', global: true }, + baseFeeMsat: BigInt(policy.base_fee_msat), + feeRate: 0, + maxHtlcMsat: BigInt(policy.max_htlc_msat), + minHtlcMsat: BigInt(policy.min_htlc_msat), + timeLockDelta: policy.timelock_delta, + inboundFee: undefined, + feeRatePpm: policy.fee_rate_ppm, + minHtlcMsatSpecified: policy.min_htlc_msat > 0, + }, DeadLineMetadata()) + return res.response + } + async GetChannelBalance() { const res = await this.lightning.channelBalance({}, DeadLineMetadata()) return res.response diff --git a/src/services/main/adminManager.ts b/src/services/main/adminManager.ts index 5c1fcf060..dc0d3f22a 100644 --- a/src/services/main/adminManager.ts +++ b/src/services/main/adminManager.ts @@ -1,6 +1,6 @@ import fs, { watchFile } from "fs"; import crypto from 'crypto' -import { getLogger } from "../helpers/logger.js"; +import { ERROR, getLogger } from "../helpers/logger.js"; import { MainSettings, getDataPath } from "./settings.js"; import Storage from "../storage/index.js"; import * as Types from '../../../proto/autogenerated/ts/types.js' @@ -146,18 +146,43 @@ export class AdminManager { } ListChannels = async (): Promise => { - const channels = await this.lnd.ListChannels(true) - - return { - open_channels: channels.channels.map(c => ({ + const { channels } = await this.lnd.ListChannels(true) + const { identityPubkey } = await this.lnd.GetInfo() + const openChannels = await Promise.all(channels.map(async c => { + const info = await this.lnd.GetChannelInfo(c.chanId) + const policies = [{ pub: info.node1Pub, policy: info.node1Policy }, { pub: info.node2Pub, policy: info.node2Policy }] + const myPolicy = policies.find(p => p.pub === identityPubkey)?.policy + const policy: Types.ChannelPolicy | undefined = myPolicy ? { + base_fee_msat: Number(myPolicy.feeBaseMsat), + fee_rate_ppm: Number(myPolicy.feeRateMilliMsat), + timelock_delta: Number(myPolicy.timeLockDelta), + max_htlc_msat: Number(myPolicy.maxHtlcMsat), + min_htlc_msat: Number(myPolicy.minHtlc), + + } : undefined + return { + channel_point: c.channelPoint, active: c.active, capacity: Number(c.capacity), local_balance: Number(c.localBalance), remote_balance: Number(c.remoteBalance), channel_id: c.chanId, label: c.peerAlias || c.remotePubkey, - lifetime: Number(c.lifetime) - })) + lifetime: Number(c.lifetime), + policy, + } + })) + return { + open_channels: openChannels + } + } + + async UpdateChannelPolicy(req: Types.UpdateChannelPolicyRequest): Promise { + const chanPoint = req.update.type === Types.UpdateChannelPolicyRequest_update_type.CHANNEL_POINT ? req.update.channel_point : "" + const res = await this.lnd.UpdateChannelPolicy(chanPoint, req.policy) + if (res.failedUpdates) { + this.log(ERROR, "failed to update policy", res.failedUpdates) + throw new Error("failed to update policy") } } diff --git a/src/services/serverMethods/index.ts b/src/services/serverMethods/index.ts index 6fec8c16a..e1a2adafe 100644 --- a/src/services/serverMethods/index.ts +++ b/src/services/serverMethods/index.ts @@ -25,6 +25,15 @@ export default (mainHandler: Main): Types.ServerMethods => { if (err != null) throw new Error(err.message) return mainHandler.adminManager.AddPeer(req) }, + UpdateChannelPolicy: async ({ ctx, req }) => { + const err = Types.UpdateChannelPolicyRequestValidate(req, { + update_Options: { + channel_point_CustomCheck: cp => cp !== '', + } + }) + if (err != null) throw new Error(err.message) + return mainHandler.adminManager.UpdateChannelPolicy(req) + }, OpenChannel: async ({ ctx, req }) => { const err = Types.OpenChannelRequestValidate(req, { node_pubkey_CustomCheck: pubkey => pubkey !== '', From 00cf5ab8f8eb802b9d487e94a4ea0a3b981a4fe2 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Mon, 18 Nov 2024 16:32:15 +0000 Subject: [PATCH 04/10] fix --- src/services/metrics/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/metrics/index.ts b/src/services/metrics/index.ts index 85297229d..79c89cf3c 100644 --- a/src/services/metrics/index.ts +++ b/src/services/metrics/index.ts @@ -254,7 +254,7 @@ export default class Handler { offline_channels: totalInactive, online_channels: totalActive, closed_channels: closedChannels.map(c => ({ capacity: Number(c.capacity), channel_id: c.chanId, closed_height: c.closeHeight })), - open_channels: openChannels.map(c => ({ active: c.active, capacity: Number(c.capacity), channel_id: c.chanId, lifetime: Number(c.lifetime), local_balance: Number(c.localBalance), remote_balance: Number(c.remoteBalance), label: c.peerAlias })), + open_channels: openChannels.map(c => ({ channel_point: c.channelPoint, active: c.active, capacity: Number(c.capacity), channel_id: c.chanId, lifetime: Number(c.lifetime), local_balance: Number(c.localBalance), remote_balance: Number(c.remoteBalance), label: c.peerAlias })), forwarding_events: totalEvents, forwarding_fees: totalFees }], From bdee3426ae5f42a3d79bb7d2934e2df80088e276 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Tue, 19 Nov 2024 19:34:27 +0000 Subject: [PATCH 05/10] check failures lengh --- src/services/main/adminManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/main/adminManager.ts b/src/services/main/adminManager.ts index dc0d3f22a..9cd47f269 100644 --- a/src/services/main/adminManager.ts +++ b/src/services/main/adminManager.ts @@ -180,7 +180,7 @@ export class AdminManager { async UpdateChannelPolicy(req: Types.UpdateChannelPolicyRequest): Promise { const chanPoint = req.update.type === Types.UpdateChannelPolicyRequest_update_type.CHANNEL_POINT ? req.update.channel_point : "" const res = await this.lnd.UpdateChannelPolicy(chanPoint, req.policy) - if (res.failedUpdates) { + if (res.failedUpdates.length > 0) { this.log(ERROR, "failed to update policy", res.failedUpdates) throw new Error("failed to update policy") } From de91573f2e0659181e33f84727d444eafd55a628 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Thu, 21 Nov 2024 18:20:01 +0000 Subject: [PATCH 06/10] metrics fixes --- proto/autogenerated/client.md | 3 +++ proto/autogenerated/go/types.go | 5 +++- proto/autogenerated/ts/types.ts | 15 +++++++++++ proto/service/structs.proto | 3 +++ src/e2e.ts | 42 +++++++++++++++++++++++++++++ src/services/main/adminManager.ts | 16 +++++++++-- src/services/metrics/index.ts | 1 + src/services/serverMethods/index.ts | 3 +-- 8 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 src/e2e.ts diff --git a/proto/autogenerated/client.md b/proto/autogenerated/client.md index 510841e22..9ee8079a1 100644 --- a/proto/autogenerated/client.md +++ b/proto/autogenerated/client.md @@ -983,6 +983,9 @@ The nostr server will send back a message response, and inside the body there wi ### LndGetInfoResponse - __alias__: _string_ + - __synced_to_chain__: _boolean_ + - __synced_to_graph__: _boolean_ + - __watchdog_barking__: _boolean_ ### LndMetrics - __nodes__: ARRAY of: _[LndNodeMetrics](#LndNodeMetrics)_ diff --git a/proto/autogenerated/go/types.go b/proto/autogenerated/go/types.go index 5a5061d18..69da589be 100644 --- a/proto/autogenerated/go/types.go +++ b/proto/autogenerated/go/types.go @@ -305,7 +305,10 @@ type LndGetInfoRequest struct { Nodeid int64 `json:"nodeId"` } type LndGetInfoResponse struct { - Alias string `json:"alias"` + Alias string `json:"alias"` + Synced_to_chain bool `json:"synced_to_chain"` + Synced_to_graph bool `json:"synced_to_graph"` + Watchdog_barking bool `json:"watchdog_barking"` } type LndMetrics struct { Nodes []LndNodeMetrics `json:"nodes"` diff --git a/proto/autogenerated/ts/types.ts b/proto/autogenerated/ts/types.ts index 077ff3da9..6851dbb5a 100644 --- a/proto/autogenerated/ts/types.ts +++ b/proto/autogenerated/ts/types.ts @@ -1730,11 +1730,17 @@ export const LndGetInfoRequestValidate = (o?: LndGetInfoRequest, opts: LndGetInf export type LndGetInfoResponse = { alias: string + synced_to_chain: boolean + synced_to_graph: boolean + watchdog_barking: boolean } export const LndGetInfoResponseOptionalFields: [] = [] export type LndGetInfoResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] alias_CustomCheck?: (v: string) => boolean + synced_to_chain_CustomCheck?: (v: boolean) => boolean + synced_to_graph_CustomCheck?: (v: boolean) => boolean + watchdog_barking_CustomCheck?: (v: boolean) => boolean } export const LndGetInfoResponseValidate = (o?: LndGetInfoResponse, opts: LndGetInfoResponseOptions = {}, path: string = 'LndGetInfoResponse::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') @@ -1743,6 +1749,15 @@ export const LndGetInfoResponseValidate = (o?: LndGetInfoResponse, opts: LndGetI if (typeof o.alias !== 'string') return new Error(`${path}.alias: is not a string`) if (opts.alias_CustomCheck && !opts.alias_CustomCheck(o.alias)) return new Error(`${path}.alias: custom check failed`) + if (typeof o.synced_to_chain !== 'boolean') return new Error(`${path}.synced_to_chain: is not a boolean`) + if (opts.synced_to_chain_CustomCheck && !opts.synced_to_chain_CustomCheck(o.synced_to_chain)) return new Error(`${path}.synced_to_chain: custom check failed`) + + if (typeof o.synced_to_graph !== 'boolean') return new Error(`${path}.synced_to_graph: is not a boolean`) + if (opts.synced_to_graph_CustomCheck && !opts.synced_to_graph_CustomCheck(o.synced_to_graph)) return new Error(`${path}.synced_to_graph: custom check failed`) + + if (typeof o.watchdog_barking !== 'boolean') return new Error(`${path}.watchdog_barking: is not a boolean`) + if (opts.watchdog_barking_CustomCheck && !opts.watchdog_barking_CustomCheck(o.watchdog_barking)) return new Error(`${path}.watchdog_barking: custom check failed`) + return null } diff --git a/proto/service/structs.proto b/proto/service/structs.proto index 351ec4f47..9bc561d65 100644 --- a/proto/service/structs.proto +++ b/proto/service/structs.proto @@ -191,6 +191,9 @@ message SetMockInvoiceAsPaidRequest { message LndGetInfoResponse { string alias = 1; + bool synced_to_chain = 2; + bool synced_to_graph = 3; + bool watchdog_barking = 4; } message BanUserRequest { diff --git a/src/e2e.ts b/src/e2e.ts new file mode 100644 index 000000000..886202be0 --- /dev/null +++ b/src/e2e.ts @@ -0,0 +1,42 @@ +import 'dotenv/config' +import NewServer from '../proto/autogenerated/ts/express_server.js' +import GetServerMethods from './services/serverMethods/index.js' +import serverOptions from './auth.js'; +import { LoadNosrtSettingsFromEnv } from './services/nostr/index.js' +import nostrMiddleware from './nostrMiddleware.js' +import { getLogger } from './services/helpers/logger.js'; +import { initMainHandler } from './services/main/init.js'; +import { LoadMainSettingsFromEnv } from './services/main/settings.js'; +import { nip19 } from 'nostr-tools' +//@ts-ignore +const { nprofileEncode } = nip19 + +const start = async () => { + const log = getLogger({}) + const mainSettings = LoadMainSettingsFromEnv() + const keepOn = await initMainHandler(log, mainSettings) + if (!keepOn) { + log("manual process ended") + return + } + + const { apps, mainHandler, liquidityProviderInfo, wizard, adminManager } = keepOn + const serverMethods = GetServerMethods(mainHandler) + const nostrSettings = LoadNosrtSettingsFromEnv() + log("initializing nostr middleware") + const { Send } = nostrMiddleware(serverMethods, mainHandler, + { ...nostrSettings, apps, clients: [liquidityProviderInfo] }, + (e, p) => mainHandler.liquidityProvider.onEvent(e, p) + ) + log("starting server") + mainHandler.attachNostrSend(Send) + mainHandler.StartBeacons() + const appNprofile = nprofileEncode({ pubkey: liquidityProviderInfo.publicKey, relays: nostrSettings.relays }) + if (wizard) { + wizard.AddConnectInfo(appNprofile, nostrSettings.relays) + } + adminManager.setAppNprofile(appNprofile) + const Server = NewServer(serverMethods, serverOptions(mainHandler)) + Server.Listen(mainSettings.servicePort) +} +start() diff --git a/src/services/main/adminManager.ts b/src/services/main/adminManager.ts index 9cd47f269..f56bca2fd 100644 --- a/src/services/main/adminManager.ts +++ b/src/services/main/adminManager.ts @@ -10,6 +10,7 @@ export class AdminManager { + storage: Storage log = getLogger({ component: "adminManager" }) adminNpub = "" @@ -25,8 +26,8 @@ export class AdminManager { this.storage = storage this.dataDir = mainSettings.storageSettings.dataDir this.adminNpubPath = getDataPath(this.dataDir, 'admin.npub') - this.adminEnrollTokenPath = getDataPath(this.dataDir, '.admin_enroll') - this.adminConnectPath = getDataPath(this.dataDir, '.admin_connect') + this.adminEnrollTokenPath = getDataPath(this.dataDir, 'admin.enroll') + this.adminConnectPath = getDataPath(this.dataDir, 'admin.connect') this.appNprofilePath = getDataPath(this.dataDir, 'app.nprofile') this.start() } @@ -145,6 +146,17 @@ export class AdminManager { } } + async LndGetInfo(): Promise { + const info = await this.lnd.GetInfo() + return { + alias: info.alias, + synced_to_chain: info.syncedToChain, + synced_to_graph: info.syncedToGraph, + watchdog_barking: this.lnd.outgoingOpsLocked + + } + } + ListChannels = async (): Promise => { const { channels } = await this.lnd.ListChannels(true) const { identityPubkey } = await this.lnd.GetInfo() diff --git a/src/services/metrics/index.ts b/src/services/metrics/index.ts index 79c89cf3c..0d86aee33 100644 --- a/src/services/metrics/index.ts +++ b/src/services/metrics/index.ts @@ -27,6 +27,7 @@ export default class Handler { const providers = await this.storage.liquidityStorage.GetTrackedProviders() let lndTotal = 0 let providerTotal = 0 + console.log({ providers }) providers.forEach(p => { if (p.provider_type === 'lnd') { lndTotal += p.latest_balance diff --git a/src/services/serverMethods/index.ts b/src/services/serverMethods/index.ts index e1a2adafe..a998d2ef6 100644 --- a/src/services/serverMethods/index.ts +++ b/src/services/serverMethods/index.ts @@ -54,8 +54,7 @@ export default (mainHandler: Main): Types.ServerMethods => { EncryptionExchange: async () => { }, Health: async () => { await mainHandler.lnd.Health() }, LndGetInfo: async ({ ctx }) => { - const info = await mainHandler.lnd.GetInfo() - return { alias: info.alias } + return await mainHandler.adminManager.LndGetInfo() }, BanUser: async ({ ctx, req }) => { const err = Types.BanUserRequestValidate(req, { From d3766232765b8a7943ad0f4f39e567cd8e339e71 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Thu, 21 Nov 2024 18:28:25 +0000 Subject: [PATCH 07/10] fix chans source --- src/services/metrics/index.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/services/metrics/index.ts b/src/services/metrics/index.ts index 0d86aee33..8995a1da9 100644 --- a/src/services/metrics/index.ts +++ b/src/services/metrics/index.ts @@ -25,13 +25,11 @@ export default class Handler { async NewBlockCb(height: number, balanceInfo: BalanceInfo) { const providers = await this.storage.liquidityStorage.GetTrackedProviders() - let lndTotal = 0 + const channels = await this.lnd.GetChannelBalance() let providerTotal = 0 console.log({ providers }) providers.forEach(p => { - if (p.provider_type === 'lnd') { - lndTotal += p.latest_balance - } else { + if (p.provider_type === 'lnPub') { providerTotal += p.latest_balance } }) @@ -40,7 +38,7 @@ export default class Handler { confirmed_chain_balance: balanceInfo.confirmedBalance, unconfirmed_chain_balance: balanceInfo.unconfirmedBalance, total_chain_balance: balanceInfo.totalBalance, - channels_balance: lndTotal, + channels_balance: Number(channels.localBalance?.sat) || 0, external_balance: providerTotal } const channelsEvents: Partial[] = balanceInfo.channelsBalance.map(c => ({ From bd433c1259f6402e0896be77f838d1dd782bfaff Mon Sep 17 00:00:00 2001 From: boufni95 Date: Mon, 25 Nov 2024 20:17:50 +0000 Subject: [PATCH 08/10] fix metrics page --- proto/autogenerated/client.md | 12 + proto/autogenerated/go/types.go | 21 +- proto/autogenerated/ts/types.ts | 56 + proto/lnd/chainnotifier.client.ts | 8 +- proto/lnd/invoices.client.ts | 20 +- proto/lnd/invoices.ts | 4 +- proto/lnd/lightning.client.ts | 292 +- proto/lnd/router.client.ts | 62 +- proto/lnd/router.ts | 16 +- proto/lnd/signer.client.ts | 394 ++ proto/lnd/signer.ts | 2502 ++++++++ proto/lnd/walletkit.client.ts | 958 +++ proto/lnd/walletkit.ts | 5641 ++++++++++++++++++ proto/lnd/walletunlocker.client.ts | 18 +- proto/lnd/walletunlocker.ts | 2 +- proto/others/signer.proto | 709 +++ proto/others/walletkit.proto | 1568 +++++ proto/service/structs.proto | 12 + src/services/lnd/lnd.ts | 8 + src/services/main/index.ts | 10 +- src/services/metrics/index.ts | 43 +- src/services/storage/entity/RootOperation.ts | 22 + src/services/storage/metricsStorage.ts | 12 + 23 files changed, 12151 insertions(+), 239 deletions(-) create mode 100644 proto/lnd/signer.client.ts create mode 100644 proto/lnd/signer.ts create mode 100644 proto/lnd/walletkit.client.ts create mode 100644 proto/lnd/walletkit.ts create mode 100644 proto/others/signer.proto create mode 100644 proto/others/walletkit.proto create mode 100644 src/services/storage/entity/RootOperation.ts diff --git a/proto/autogenerated/client.md b/proto/autogenerated/client.md index 9ee8079a1..b2a729b45 100644 --- a/proto/autogenerated/client.md +++ b/proto/autogenerated/client.md @@ -854,6 +854,7 @@ The nostr server will send back a message response, and inside the body there wi ### ClosedChannel - __capacity__: _number_ - __channel_id__: _string_ + - __close_tx_timestamp__: _number_ - __closed_height__: _number_ ### ClosureMigration @@ -1006,6 +1007,7 @@ The nostr server will send back a message response, and inside the body there wi - __online_channels__: _number_ - __open_channels__: ARRAY of: _[OpenChannel](#OpenChannel)_ - __pending_channels__: _number_ + - __root_ops__: ARRAY of: _[RootOperation](#RootOperation)_ ### LndSeed - __seed__: ARRAY of: _string_ @@ -1125,6 +1127,12 @@ The nostr server will send back a message response, and inside the body there wi ### RequestNPubLinkingTokenResponse - __token__: _string_ +### RootOperation + - __amount__: _number_ + - __created_at_unix__: _number_ + - __op_id__: _string_ + - __op_type__: _[OperationType](#OperationType)_ + ### RoutingEvent - __event_type__: _string_ - __failure_string__: _string_ @@ -1231,6 +1239,10 @@ The nostr server will send back a message response, and inside the body there wi - __MONTH__ - __WEEK__ +### OperationType + - __CHAIN_OP__ + - __INVOICE_OP__ + ### UserOperationType - __INCOMING_INVOICE__ - __INCOMING_TX__ diff --git a/proto/autogenerated/go/types.go b/proto/autogenerated/go/types.go index 69da589be..9b84c8892 100644 --- a/proto/autogenerated/go/types.go +++ b/proto/autogenerated/go/types.go @@ -64,6 +64,13 @@ const ( WEEK IntervalType = "WEEK" ) +type OperationType string + +const ( + CHAIN_OP OperationType = "CHAIN_OP" + INVOICE_OP OperationType = "INVOICE_OP" +) + type UserOperationType string const ( @@ -175,9 +182,10 @@ type CloseChannelResponse struct { Closing_txid string `json:"closing_txid"` } type ClosedChannel struct { - Capacity int64 `json:"capacity"` - Channel_id string `json:"channel_id"` - Closed_height int64 `json:"closed_height"` + Capacity int64 `json:"capacity"` + Channel_id string `json:"channel_id"` + Close_tx_timestamp int64 `json:"close_tx_timestamp"` + Closed_height int64 `json:"closed_height"` } type ClosureMigration struct { Closes_at_unix int64 `json:"closes_at_unix"` @@ -329,6 +337,7 @@ type LndNodeMetrics struct { Online_channels int64 `json:"online_channels"` Open_channels []OpenChannel `json:"open_channels"` Pending_channels int64 `json:"pending_channels"` + Root_ops []RootOperation `json:"root_ops"` } type LndSeed struct { Seed []string `json:"seed"` @@ -448,6 +457,12 @@ type RequestNPubLinkingTokenRequest struct { type RequestNPubLinkingTokenResponse struct { Token string `json:"token"` } +type RootOperation struct { + Amount int64 `json:"amount"` + Created_at_unix int64 `json:"created_at_unix"` + Op_id string `json:"op_id"` + Op_type OperationType `json:"op_type"` +} type RoutingEvent struct { Event_type string `json:"event_type"` Failure_string string `json:"failure_string"` diff --git a/proto/autogenerated/ts/types.ts b/proto/autogenerated/ts/types.ts index 6851dbb5a..ac2532340 100644 --- a/proto/autogenerated/ts/types.ts +++ b/proto/autogenerated/ts/types.ts @@ -344,6 +344,14 @@ export const enumCheckIntervalType = (e?: IntervalType): boolean => { for (const v in IntervalType) if (e === v) return true return false } +export enum OperationType { + CHAIN_OP = 'CHAIN_OP', + INVOICE_OP = 'INVOICE_OP', +} +export const enumCheckOperationType = (e?: OperationType): boolean => { + for (const v in OperationType) if (e === v) return true + return false +} export enum UserOperationType { INCOMING_INVOICE = 'INCOMING_INVOICE', INCOMING_TX = 'INCOMING_TX', @@ -942,6 +950,7 @@ export const CloseChannelResponseValidate = (o?: CloseChannelResponse, opts: Clo export type ClosedChannel = { capacity: number channel_id: string + close_tx_timestamp: number closed_height: number } export const ClosedChannelOptionalFields: [] = [] @@ -949,6 +958,7 @@ export type ClosedChannelOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] capacity_CustomCheck?: (v: number) => boolean channel_id_CustomCheck?: (v: string) => boolean + close_tx_timestamp_CustomCheck?: (v: number) => boolean closed_height_CustomCheck?: (v: number) => boolean } export const ClosedChannelValidate = (o?: ClosedChannel, opts: ClosedChannelOptions = {}, path: string = 'ClosedChannel::root.'): Error | null => { @@ -961,6 +971,9 @@ export const ClosedChannelValidate = (o?: ClosedChannel, opts: ClosedChannelOpti if (typeof o.channel_id !== 'string') return new Error(`${path}.channel_id: is not a string`) if (opts.channel_id_CustomCheck && !opts.channel_id_CustomCheck(o.channel_id)) return new Error(`${path}.channel_id: custom check failed`) + if (typeof o.close_tx_timestamp !== 'number') return new Error(`${path}.close_tx_timestamp: is not a number`) + if (opts.close_tx_timestamp_CustomCheck && !opts.close_tx_timestamp_CustomCheck(o.close_tx_timestamp)) return new Error(`${path}.close_tx_timestamp: custom check failed`) + if (typeof o.closed_height !== 'number') return new Error(`${path}.closed_height: is not a number`) if (opts.closed_height_CustomCheck && !opts.closed_height_CustomCheck(o.closed_height)) return new Error(`${path}.closed_height: custom check failed`) @@ -1820,6 +1833,7 @@ export type LndNodeMetrics = { online_channels: number open_channels: OpenChannel[] pending_channels: number + root_ops: RootOperation[] } export const LndNodeMetricsOptionalFields: [] = [] export type LndNodeMetricsOptions = OptionsBaseMessage & { @@ -1840,6 +1854,8 @@ export type LndNodeMetricsOptions = OptionsBaseMessage & { open_channels_ItemOptions?: OpenChannelOptions open_channels_CustomCheck?: (v: OpenChannel[]) => boolean pending_channels_CustomCheck?: (v: number) => boolean + root_ops_ItemOptions?: RootOperationOptions + root_ops_CustomCheck?: (v: RootOperation[]) => boolean } export const LndNodeMetricsValidate = (o?: LndNodeMetrics, opts: LndNodeMetricsOptions = {}, path: string = 'LndNodeMetrics::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') @@ -1898,6 +1914,13 @@ export const LndNodeMetricsValidate = (o?: LndNodeMetrics, opts: LndNodeMetricsO if (typeof o.pending_channels !== 'number') return new Error(`${path}.pending_channels: is not a number`) if (opts.pending_channels_CustomCheck && !opts.pending_channels_CustomCheck(o.pending_channels)) return new Error(`${path}.pending_channels: custom check failed`) + if (!Array.isArray(o.root_ops)) return new Error(`${path}.root_ops: is not an array`) + for (let index = 0; index < o.root_ops.length; index++) { + const root_opsErr = RootOperationValidate(o.root_ops[index], opts.root_ops_ItemOptions, `${path}.root_ops[${index}]`) + if (root_opsErr !== null) return root_opsErr + } + if (opts.root_ops_CustomCheck && !opts.root_ops_CustomCheck(o.root_ops)) return new Error(`${path}.root_ops: custom check failed`) + return null } @@ -2582,6 +2605,39 @@ export const RequestNPubLinkingTokenResponseValidate = (o?: RequestNPubLinkingTo return null } +export type RootOperation = { + amount: number + created_at_unix: number + op_id: string + op_type: OperationType +} +export const RootOperationOptionalFields: [] = [] +export type RootOperationOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + amount_CustomCheck?: (v: number) => boolean + created_at_unix_CustomCheck?: (v: number) => boolean + op_id_CustomCheck?: (v: string) => boolean + op_type_CustomCheck?: (v: OperationType) => boolean +} +export const RootOperationValidate = (o?: RootOperation, opts: RootOperationOptions = {}, path: string = 'RootOperation::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) + if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) + + if (typeof o.created_at_unix !== 'number') return new Error(`${path}.created_at_unix: is not a number`) + if (opts.created_at_unix_CustomCheck && !opts.created_at_unix_CustomCheck(o.created_at_unix)) return new Error(`${path}.created_at_unix: custom check failed`) + + if (typeof o.op_id !== 'string') return new Error(`${path}.op_id: is not a string`) + if (opts.op_id_CustomCheck && !opts.op_id_CustomCheck(o.op_id)) return new Error(`${path}.op_id: custom check failed`) + + if (!enumCheckOperationType(o.op_type)) return new Error(`${path}.op_type: is not a valid OperationType`) + if (opts.op_type_CustomCheck && !opts.op_type_CustomCheck(o.op_type)) return new Error(`${path}.op_type: custom check failed`) + + return null +} + export type RoutingEvent = { event_type: string failure_string: string diff --git a/proto/lnd/chainnotifier.client.ts b/proto/lnd/chainnotifier.client.ts index 23bc340e0..d76e5cd84 100644 --- a/proto/lnd/chainnotifier.client.ts +++ b/proto/lnd/chainnotifier.client.ts @@ -3,10 +3,10 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { ChainNotifier } from "./chainnotifier.js"; -import type { BlockEpoch } from "./chainnotifier.js"; -import type { SpendEvent } from "./chainnotifier.js"; -import type { SpendRequest } from "./chainnotifier.js"; +import { ChainNotifier } from "./chainnotifier"; +import type { BlockEpoch } from "./chainnotifier"; +import type { SpendEvent } from "./chainnotifier"; +import type { SpendRequest } from "./chainnotifier"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; import type { ConfEvent } from "./chainnotifier"; import type { ConfRequest } from "./chainnotifier"; diff --git a/proto/lnd/invoices.client.ts b/proto/lnd/invoices.client.ts index b529cca1d..f4437d32c 100644 --- a/proto/lnd/invoices.client.ts +++ b/proto/lnd/invoices.client.ts @@ -3,18 +3,18 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { Invoices } from "./invoices.js"; -import type { LookupInvoiceMsg } from "./invoices.js"; -import type { SettleInvoiceResp } from "./invoices.js"; -import type { SettleInvoiceMsg } from "./invoices.js"; -import type { AddHoldInvoiceResp } from "./invoices.js"; -import type { AddHoldInvoiceRequest } from "./invoices.js"; -import type { CancelInvoiceResp } from "./invoices.js"; -import type { CancelInvoiceMsg } from "./invoices.js"; +import { Invoices } from "./invoices"; +import type { LookupInvoiceMsg } from "./invoices"; +import type { SettleInvoiceResp } from "./invoices"; +import type { SettleInvoiceMsg } from "./invoices"; +import type { AddHoldInvoiceResp } from "./invoices"; +import type { AddHoldInvoiceRequest } from "./invoices"; +import type { CancelInvoiceResp } from "./invoices"; +import type { CancelInvoiceMsg } from "./invoices"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { Invoice } from "./lightning.js"; -import type { SubscribeSingleInvoiceRequest } from "./invoices.js"; +import type { Invoice } from "./lightning"; +import type { SubscribeSingleInvoiceRequest } from "./invoices"; import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** diff --git a/proto/lnd/invoices.ts b/proto/lnd/invoices.ts index 4155cf06a..a94573dc0 100644 --- a/proto/lnd/invoices.ts +++ b/proto/lnd/invoices.ts @@ -1,7 +1,7 @@ // @generated by protobuf-ts 2.8.1 // @generated from protobuf file "invoices.proto" (package "invoicesrpc", syntax proto3) // tslint:disable -import { Invoice } from "./lightning.js"; +import { Invoice } from "./lightning"; import { ServiceType } from "@protobuf-ts/runtime-rpc"; import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; import type { IBinaryWriter } from "@protobuf-ts/runtime"; @@ -13,7 +13,7 @@ import type { PartialMessage } from "@protobuf-ts/runtime"; import { reflectionMergePartial } from "@protobuf-ts/runtime"; import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; import { MessageType } from "@protobuf-ts/runtime"; -import { RouteHint } from "./lightning.js"; +import { RouteHint } from "./lightning"; /** * @generated from protobuf message invoicesrpc.CancelInvoiceMsg */ diff --git a/proto/lnd/lightning.client.ts b/proto/lnd/lightning.client.ts index 52e938b90..0c3193df7 100644 --- a/proto/lnd/lightning.client.ts +++ b/proto/lnd/lightning.client.ts @@ -3,155 +3,138 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { Lightning } from "./lightning.js"; -import type { ListAliasesResponse } from "./lightning.js"; -import type { ListAliasesRequest } from "./lightning.js"; -import type { CustomMessage } from "./lightning.js"; -import type { SubscribeCustomMessagesRequest } from "./lightning.js"; -import type { SendCustomMessageResponse } from "./lightning.js"; -import type { SendCustomMessageRequest } from "./lightning.js"; -import type { RPCMiddlewareRequest } from "./lightning.js"; -import type { RPCMiddlewareResponse } from "./lightning.js"; -import type { CheckMacPermResponse } from "./lightning.js"; -import type { CheckMacPermRequest } from "./lightning.js"; -import type { ListPermissionsResponse } from "./lightning.js"; -import type { ListPermissionsRequest } from "./lightning.js"; -import type { DeleteMacaroonIDResponse } from "./lightning.js"; -import type { DeleteMacaroonIDRequest } from "./lightning.js"; -import type { ListMacaroonIDsResponse } from "./lightning.js"; -import type { ListMacaroonIDsRequest } from "./lightning.js"; -import type { BakeMacaroonResponse } from "./lightning.js"; -import type { BakeMacaroonRequest } from "./lightning.js"; -import type { ChannelBackupSubscription } from "./lightning.js"; -import type { RestoreBackupResponse } from "./lightning.js"; -import type { RestoreChanBackupRequest } from "./lightning.js"; -import type { VerifyChanBackupResponse } from "./lightning.js"; -import type { ChanBackupSnapshot } from "./lightning.js"; -import type { ChanBackupExportRequest } from "./lightning.js"; -import type { ChannelBackup } from "./lightning.js"; -import type { ExportChannelBackupRequest } from "./lightning.js"; -import type { ForwardingHistoryResponse } from "./lightning.js"; -import type { ForwardingHistoryRequest } from "./lightning.js"; -import type { PolicyUpdateResponse } from "./lightning.js"; -import type { PolicyUpdateRequest } from "./lightning.js"; -import type { FeeReportResponse } from "./lightning.js"; -import type { FeeReportRequest } from "./lightning.js"; -import type { DebugLevelResponse } from "./lightning.js"; -import type { DebugLevelRequest } from "./lightning.js"; -import type { GraphTopologyUpdate } from "./lightning.js"; -import type { GraphTopologySubscription } from "./lightning.js"; -import type { StopResponse } from "./lightning.js"; -import type { StopRequest } from "./lightning.js"; -import type { NetworkInfo } from "./lightning.js"; -import type { NetworkInfoRequest } from "./lightning.js"; -import type { QueryRoutesResponse } from "./lightning.js"; -import type { QueryRoutesRequest } from "./lightning.js"; -import type { NodeInfo } from "./lightning.js"; -import type { NodeInfoRequest } from "./lightning.js"; -import type { ChannelEdge } from "./lightning.js"; -import type { ChanInfoRequest } from "./lightning.js"; -import type { NodeMetricsResponse } from "./lightning.js"; -import type { NodeMetricsRequest } from "./lightning.js"; -import type { ChannelGraph } from "./lightning.js"; -import type { ChannelGraphRequest } from "./lightning.js"; -import type { DeleteAllPaymentsResponse } from "./lightning.js"; -import type { DeleteAllPaymentsRequest } from "./lightning.js"; -import type { DeletePaymentResponse } from "./lightning.js"; -import type { DeletePaymentRequest } from "./lightning.js"; -import type { ListPaymentsResponse } from "./lightning.js"; -import type { ListPaymentsRequest } from "./lightning.js"; -import type { PayReq } from "./lightning.js"; -import type { PayReqString } from "./lightning.js"; -import type { InvoiceSubscription } from "./lightning.js"; -import type { PaymentHash } from "./lightning.js"; -import type { ListInvoiceResponse } from "./lightning.js"; -import type { ListInvoiceRequest } from "./lightning.js"; -import type { AddInvoiceResponse } from "./lightning.js"; -import type { Invoice } from "./lightning.js"; -import type { SendToRouteRequest } from "./lightning.js"; -import type { SendResponse } from "./lightning.js"; -import type { SendRequest } from "./lightning.js"; -import type { AbandonChannelResponse } from "./lightning.js"; -import type { AbandonChannelRequest } from "./lightning.js"; -import type { CloseStatusUpdate } from "./lightning.js"; -import type { CloseChannelRequest } from "./lightning.js"; -import type { ChannelAcceptRequest } from "./lightning.js"; -import type { ChannelAcceptResponse } from "./lightning.js"; +import { Lightning } from "./lightning"; +import type { LookupHtlcResolutionResponse } from "./lightning"; +import type { LookupHtlcResolutionRequest } from "./lightning"; +import type { ListAliasesResponse } from "./lightning"; +import type { ListAliasesRequest } from "./lightning"; +import type { CustomMessage } from "./lightning"; +import type { SubscribeCustomMessagesRequest } from "./lightning"; +import type { SendCustomMessageResponse } from "./lightning"; +import type { SendCustomMessageRequest } from "./lightning"; +import type { RPCMiddlewareRequest } from "./lightning"; +import type { RPCMiddlewareResponse } from "./lightning"; +import type { CheckMacPermResponse } from "./lightning"; +import type { CheckMacPermRequest } from "./lightning"; +import type { ListPermissionsResponse } from "./lightning"; +import type { ListPermissionsRequest } from "./lightning"; +import type { DeleteMacaroonIDResponse } from "./lightning"; +import type { DeleteMacaroonIDRequest } from "./lightning"; +import type { ListMacaroonIDsResponse } from "./lightning"; +import type { ListMacaroonIDsRequest } from "./lightning"; +import type { BakeMacaroonResponse } from "./lightning"; +import type { BakeMacaroonRequest } from "./lightning"; +import type { ChannelBackupSubscription } from "./lightning"; +import type { RestoreBackupResponse } from "./lightning"; +import type { RestoreChanBackupRequest } from "./lightning"; +import type { VerifyChanBackupResponse } from "./lightning"; +import type { ChanBackupSnapshot } from "./lightning"; +import type { ChanBackupExportRequest } from "./lightning"; +import type { ChannelBackup } from "./lightning"; +import type { ExportChannelBackupRequest } from "./lightning"; +import type { ForwardingHistoryResponse } from "./lightning"; +import type { ForwardingHistoryRequest } from "./lightning"; +import type { PolicyUpdateResponse } from "./lightning"; +import type { PolicyUpdateRequest } from "./lightning"; +import type { FeeReportResponse } from "./lightning"; +import type { FeeReportRequest } from "./lightning"; +import type { DebugLevelResponse } from "./lightning"; +import type { DebugLevelRequest } from "./lightning"; +import type { GraphTopologyUpdate } from "./lightning"; +import type { GraphTopologySubscription } from "./lightning"; +import type { StopResponse } from "./lightning"; +import type { StopRequest } from "./lightning"; +import type { NetworkInfo } from "./lightning"; +import type { NetworkInfoRequest } from "./lightning"; +import type { QueryRoutesResponse } from "./lightning"; +import type { QueryRoutesRequest } from "./lightning"; +import type { NodeInfo } from "./lightning"; +import type { NodeInfoRequest } from "./lightning"; +import type { ChannelEdge } from "./lightning"; +import type { ChanInfoRequest } from "./lightning"; +import type { NodeMetricsResponse } from "./lightning"; +import type { NodeMetricsRequest } from "./lightning"; +import type { ChannelGraph } from "./lightning"; +import type { ChannelGraphRequest } from "./lightning"; +import type { DeleteAllPaymentsResponse } from "./lightning"; +import type { DeleteAllPaymentsRequest } from "./lightning"; +import type { DeletePaymentResponse } from "./lightning"; +import type { DeletePaymentRequest } from "./lightning"; +import type { ListPaymentsResponse } from "./lightning"; +import type { ListPaymentsRequest } from "./lightning"; +import type { PayReq } from "./lightning"; +import type { PayReqString } from "./lightning"; +import type { InvoiceSubscription } from "./lightning"; +import type { PaymentHash } from "./lightning"; +import type { ListInvoiceResponse } from "./lightning"; +import type { ListInvoiceRequest } from "./lightning"; +import type { AddInvoiceResponse } from "./lightning"; +import type { Invoice } from "./lightning"; +import type { SendToRouteRequest } from "./lightning"; +import type { SendResponse } from "./lightning"; +import type { SendRequest } from "./lightning"; +import type { AbandonChannelResponse } from "./lightning"; +import type { AbandonChannelRequest } from "./lightning"; +import type { CloseStatusUpdate } from "./lightning"; +import type { CloseChannelRequest } from "./lightning"; +import type { ChannelAcceptRequest } from "./lightning"; +import type { ChannelAcceptResponse } from "./lightning"; import type { DuplexStreamingCall } from "@protobuf-ts/runtime-rpc"; -import type { FundingStateStepResp } from "./lightning.js"; -import type { FundingTransitionMsg } from "./lightning.js"; -import type { BatchOpenChannelResponse } from "./lightning.js"; -import type { BatchOpenChannelRequest } from "./lightning.js"; -import type { OpenStatusUpdate } from "./lightning.js"; -import type { ChannelPoint } from "./lightning.js"; -import type { OpenChannelRequest } from "./lightning.js"; -import type { ClosedChannelsResponse } from "./lightning.js"; -import type { ClosedChannelsRequest } from "./lightning.js"; -import type { ChannelEventUpdate } from "./lightning.js"; -import type { ChannelEventSubscription } from "./lightning.js"; -import type { ListChannelsResponse } from "./lightning.js"; -import type { ListChannelsRequest } from "./lightning.js"; -import type { PendingChannelsResponse } from "./lightning.js"; -import type { PendingChannelsRequest } from "./lightning.js"; -import type { GetRecoveryInfoResponse } from "./lightning.js"; -import type { GetRecoveryInfoRequest } from "./lightning.js"; -import type { GetInfoResponse } from "./lightning.js"; -import type { GetInfoRequest } from "./lightning.js"; -import type { PeerEvent } from "./lightning.js"; -import type { PeerEventSubscription } from "./lightning.js"; -import type { ListPeersResponse } from "./lightning.js"; -import type { ListPeersRequest } from "./lightning.js"; -import type { DisconnectPeerResponse } from "./lightning.js"; -import type { DisconnectPeerRequest } from "./lightning.js"; -import type { ConnectPeerResponse } from "./lightning.js"; -import type { ConnectPeerRequest } from "./lightning.js"; -import type { VerifyMessageResponse } from "./lightning.js"; -import type { VerifyMessageRequest } from "./lightning.js"; -import type { SignMessageResponse } from "./lightning.js"; -import type { SignMessageRequest } from "./lightning.js"; -import type { NewAddressResponse } from "./lightning.js"; -import type { NewAddressRequest } from "./lightning.js"; -import type { SendManyResponse } from "./lightning.js"; -import type { SendManyRequest } from "./lightning.js"; -import type { Transaction } from "./lightning.js"; +import type { FundingStateStepResp } from "./lightning"; +import type { FundingTransitionMsg } from "./lightning"; +import type { BatchOpenChannelResponse } from "./lightning"; +import type { BatchOpenChannelRequest } from "./lightning"; +import type { OpenStatusUpdate } from "./lightning"; +import type { ChannelPoint } from "./lightning"; +import type { OpenChannelRequest } from "./lightning"; +import type { ClosedChannelsResponse } from "./lightning"; +import type { ClosedChannelsRequest } from "./lightning"; +import type { ChannelEventUpdate } from "./lightning"; +import type { ChannelEventSubscription } from "./lightning"; +import type { ListChannelsResponse } from "./lightning"; +import type { ListChannelsRequest } from "./lightning"; +import type { PendingChannelsResponse } from "./lightning"; +import type { PendingChannelsRequest } from "./lightning"; +import type { GetRecoveryInfoResponse } from "./lightning"; +import type { GetRecoveryInfoRequest } from "./lightning"; +import type { GetDebugInfoResponse } from "./lightning"; +import type { GetDebugInfoRequest } from "./lightning"; +import type { GetInfoResponse } from "./lightning"; +import type { GetInfoRequest } from "./lightning"; +import type { PeerEvent } from "./lightning"; +import type { PeerEventSubscription } from "./lightning"; +import type { ListPeersResponse } from "./lightning"; +import type { ListPeersRequest } from "./lightning"; +import type { DisconnectPeerResponse } from "./lightning"; +import type { DisconnectPeerRequest } from "./lightning"; +import type { ConnectPeerResponse } from "./lightning"; +import type { ConnectPeerRequest } from "./lightning"; +import type { VerifyMessageResponse } from "./lightning"; +import type { VerifyMessageRequest } from "./lightning"; +import type { SignMessageResponse } from "./lightning"; +import type { SignMessageRequest } from "./lightning"; +import type { NewAddressResponse } from "./lightning"; +import type { NewAddressRequest } from "./lightning"; +import type { SendManyResponse } from "./lightning"; +import type { SendManyRequest } from "./lightning"; +import type { Transaction } from "./lightning"; import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; -import type { ListUnspentResponse } from "./lightning.js"; -import type { ListUnspentRequest } from "./lightning.js"; -import type { SendCoinsResponse } from "./lightning.js"; -import type { SendCoinsRequest } from "./lightning.js"; -import type { EstimateFeeResponse } from "./lightning.js"; -import type { EstimateFeeRequest } from "./lightning.js"; -import type { TransactionDetails } from "./lightning.js"; -import type { GetTransactionsRequest } from "./lightning.js"; -import type { ChannelBalanceResponse } from "./lightning.js"; -import type { ChannelBalanceRequest } from "./lightning.js"; +import type { ListUnspentResponse } from "./lightning"; +import type { ListUnspentRequest } from "./lightning"; +import type { SendCoinsResponse } from "./lightning"; +import type { SendCoinsRequest } from "./lightning"; +import type { EstimateFeeResponse } from "./lightning"; +import type { EstimateFeeRequest } from "./lightning"; +import type { TransactionDetails } from "./lightning"; +import type { GetTransactionsRequest } from "./lightning"; +import type { ChannelBalanceResponse } from "./lightning"; +import type { ChannelBalanceRequest } from "./lightning"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { WalletBalanceResponse } from "./lightning.js"; -import type { WalletBalanceRequest } from "./lightning.js"; +import type { WalletBalanceResponse } from "./lightning"; +import type { WalletBalanceRequest } from "./lightning"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; - -import type { GetDebugInfoResponse } from "./lightning.js"; -import type { GetDebugInfoRequest } from "./lightning.js"; - -import type { LookupHtlcResolutionResponse } from "./lightning.js"; -import type { LookupHtlcResolutionRequest } from "./lightning.js"; -// -// Comments in this file will be directly parsed into the API -// Documentation as descriptions of the associated method, message, or field. -// These descriptions should go right above the definition of the object, and -// can be in either block or // comment format. -// -// An RPC method can be matched to an lncli command by placing a line in the -// beginning of the description in exactly the following format: -// lncli: `methodname` -// -// Failure to specify the exact name of the command will cause documentation -// generation to fail. -// -// More information on how exactly the gRPC documentation is generated from -// this proto file can be found here: -// https://github.com/lightninglabs/lightning-api +// // Comments in this file will be directly parsed into the API // Documentation as descriptions of the associated method, message, or field. // These descriptions should go right above the definition of the object, and // can be in either block or // comment format. // // An RPC method can be matched to an lncli command by placing a line in the // beginning of the description in exactly the following format: // lncli: `methodname` // // Failure to specify the exact name of the command will cause documentation // generation to fail. // // More information on how exactly the gRPC documentation is generated from // this proto file can be found here: // https://github.com/lightninglabs/lightning-api /** * Lightning is the main RPC server of the daemon. @@ -327,7 +310,7 @@ export interface ILightningClient { * @generated from protobuf rpc: GetRecoveryInfo(lnrpc.GetRecoveryInfoRequest) returns (lnrpc.GetRecoveryInfoResponse); */ getRecoveryInfo(input: GetRecoveryInfoRequest, options?: RpcOptions): UnaryCall; - // TODO(roasbeef): merge with below with bool? + // TODO(roasbeef): merge with below with bool? /** * lncli: `pendingchannels` @@ -847,22 +830,7 @@ export interface ILightningClient { */ lookupHtlcResolution(input: LookupHtlcResolutionRequest, options?: RpcOptions): UnaryCall; } -// -// Comments in this file will be directly parsed into the API -// Documentation as descriptions of the associated method, message, or field. -// These descriptions should go right above the definition of the object, and -// can be in either block or // comment format. -// -// An RPC method can be matched to an lncli command by placing a line in the -// beginning of the description in exactly the following format: -// lncli: `methodname` -// -// Failure to specify the exact name of the command will cause documentation -// generation to fail. -// -// More information on how exactly the gRPC documentation is generated from -// this proto file can be found here: -// https://github.com/lightninglabs/lightning-api +// // Comments in this file will be directly parsed into the API // Documentation as descriptions of the associated method, message, or field. // These descriptions should go right above the definition of the object, and // can be in either block or // comment format. // // An RPC method can be matched to an lncli command by placing a line in the // beginning of the description in exactly the following format: // lncli: `methodname` // // Failure to specify the exact name of the command will cause documentation // generation to fail. // // More information on how exactly the gRPC documentation is generated from // this proto file can be found here: // https://github.com/lightninglabs/lightning-api /** * Lightning is the main RPC server of the daemon. @@ -1097,7 +1065,7 @@ export class LightningClient implements ILightningClient, ServiceInfo { const method = this.methods[17], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } - // TODO(roasbeef): merge with below with bool? + // TODO(roasbeef): merge with below with bool? /** * lncli: `pendingchannels` diff --git a/proto/lnd/router.client.ts b/proto/lnd/router.client.ts index 27722e38b..fc85cc794 100644 --- a/proto/lnd/router.client.ts +++ b/proto/lnd/router.client.ts @@ -3,40 +3,40 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { Router } from "./router.js"; -import type { UpdateChanStatusResponse } from "./router.js"; -import type { UpdateChanStatusRequest } from "./router.js"; -import type { ForwardHtlcInterceptRequest } from "./router.js"; -import type { ForwardHtlcInterceptResponse } from "./router.js"; +import { Router } from "./router"; +import type { UpdateChanStatusResponse } from "./router"; +import type { UpdateChanStatusRequest } from "./router"; +import type { ForwardHtlcInterceptRequest } from "./router"; +import type { ForwardHtlcInterceptResponse } from "./router"; import type { DuplexStreamingCall } from "@protobuf-ts/runtime-rpc"; -import type { PaymentStatus } from "./router.js"; -import type { HtlcEvent } from "./router.js"; -import type { SubscribeHtlcEventsRequest } from "./router.js"; -import type { BuildRouteResponse } from "./router.js"; -import type { BuildRouteRequest } from "./router.js"; -import type { QueryProbabilityResponse } from "./router.js"; -import type { QueryProbabilityRequest } from "./router.js"; -import type { SetMissionControlConfigResponse } from "./router.js"; -import type { SetMissionControlConfigRequest } from "./router.js"; -import type { GetMissionControlConfigResponse } from "./router.js"; -import type { GetMissionControlConfigRequest } from "./router.js"; -import type { XImportMissionControlResponse } from "./router.js"; -import type { XImportMissionControlRequest } from "./router.js"; -import type { QueryMissionControlResponse } from "./router.js"; -import type { QueryMissionControlRequest } from "./router.js"; -import type { ResetMissionControlResponse } from "./router.js"; -import type { ResetMissionControlRequest } from "./router.js"; -import type { HTLCAttempt } from "./lightning.js"; -import type { SendToRouteResponse } from "./router.js"; -import type { SendToRouteRequest } from "./router.js"; -import type { RouteFeeResponse } from "./router.js"; -import type { RouteFeeRequest } from "./router.js"; +import type { PaymentStatus } from "./router"; +import type { HtlcEvent } from "./router"; +import type { SubscribeHtlcEventsRequest } from "./router"; +import type { BuildRouteResponse } from "./router"; +import type { BuildRouteRequest } from "./router"; +import type { QueryProbabilityResponse } from "./router"; +import type { QueryProbabilityRequest } from "./router"; +import type { SetMissionControlConfigResponse } from "./router"; +import type { SetMissionControlConfigRequest } from "./router"; +import type { GetMissionControlConfigResponse } from "./router"; +import type { GetMissionControlConfigRequest } from "./router"; +import type { XImportMissionControlResponse } from "./router"; +import type { XImportMissionControlRequest } from "./router"; +import type { QueryMissionControlResponse } from "./router"; +import type { QueryMissionControlRequest } from "./router"; +import type { ResetMissionControlResponse } from "./router"; +import type { ResetMissionControlRequest } from "./router"; +import type { HTLCAttempt } from "./lightning"; +import type { SendToRouteResponse } from "./router"; +import type { SendToRouteRequest } from "./router"; +import type { RouteFeeResponse } from "./router"; +import type { RouteFeeRequest } from "./router"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; -import type { TrackPaymentsRequest } from "./router.js"; -import type { TrackPaymentRequest } from "./router.js"; +import type { TrackPaymentsRequest } from "./router"; +import type { TrackPaymentRequest } from "./router"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { Payment } from "./lightning.js"; -import type { SendPaymentRequest } from "./router.js"; +import type { Payment } from "./lightning"; +import type { SendPaymentRequest } from "./router"; import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** diff --git a/proto/lnd/router.ts b/proto/lnd/router.ts index edb624cd5..2a52b0548 100644 --- a/proto/lnd/router.ts +++ b/proto/lnd/router.ts @@ -1,7 +1,7 @@ // @generated by protobuf-ts 2.8.1 // @generated from protobuf file "router.proto" (package "routerrpc", syntax proto3) // tslint:disable -import { Payment } from "./lightning.js"; +import { Payment } from "./lightning"; import { ServiceType } from "@protobuf-ts/runtime-rpc"; import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; import type { IBinaryWriter } from "@protobuf-ts/runtime"; @@ -13,13 +13,13 @@ import type { PartialMessage } from "@protobuf-ts/runtime"; import { reflectionMergePartial } from "@protobuf-ts/runtime"; import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; import { MessageType } from "@protobuf-ts/runtime"; -import { ChannelPoint } from "./lightning.js"; -import { HTLCAttempt } from "./lightning.js"; -import { Failure_FailureCode } from "./lightning.js"; -import { Failure } from "./lightning.js"; -import { Route } from "./lightning.js"; -import { FeatureBit } from "./lightning.js"; -import { RouteHint } from "./lightning.js"; +import { ChannelPoint } from "./lightning"; +import { HTLCAttempt } from "./lightning"; +import { Failure_FailureCode } from "./lightning"; +import { Failure } from "./lightning"; +import { Route } from "./lightning"; +import { FeatureBit } from "./lightning"; +import { RouteHint } from "./lightning"; /** * @generated from protobuf message routerrpc.SendPaymentRequest */ diff --git a/proto/lnd/signer.client.ts b/proto/lnd/signer.client.ts new file mode 100644 index 000000000..92ee85ddf --- /dev/null +++ b/proto/lnd/signer.client.ts @@ -0,0 +1,394 @@ +// @generated by protobuf-ts 2.8.1 +// @generated from protobuf file "signer.proto" (package "signrpc", syntax proto3) +// tslint:disable +import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; +import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; +import { Signer } from "./signer"; +import type { MuSig2CleanupResponse } from "./signer"; +import type { MuSig2CleanupRequest } from "./signer"; +import type { MuSig2CombineSigResponse } from "./signer"; +import type { MuSig2CombineSigRequest } from "./signer"; +import type { MuSig2SignResponse } from "./signer"; +import type { MuSig2SignRequest } from "./signer"; +import type { MuSig2RegisterNoncesResponse } from "./signer"; +import type { MuSig2RegisterNoncesRequest } from "./signer"; +import type { MuSig2SessionResponse } from "./signer"; +import type { MuSig2SessionRequest } from "./signer"; +import type { MuSig2CombineKeysResponse } from "./signer"; +import type { MuSig2CombineKeysRequest } from "./signer"; +import type { SharedKeyResponse } from "./signer"; +import type { SharedKeyRequest } from "./signer"; +import type { VerifyMessageResp } from "./signer"; +import type { VerifyMessageReq } from "./signer"; +import type { SignMessageResp } from "./signer"; +import type { SignMessageReq } from "./signer"; +import type { InputScriptResp } from "./signer"; +import { stackIntercept } from "@protobuf-ts/runtime-rpc"; +import type { SignResp } from "./signer"; +import type { SignReq } from "./signer"; +import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; +import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; +/** + * Signer is a service that gives access to the signing functionality of the + * daemon's wallet. + * + * @generated from protobuf service signrpc.Signer + */ +export interface ISignerClient { + /** + * + * SignOutputRaw is a method that can be used to generated a signature for a + * set of inputs/outputs to a transaction. Each request specifies details + * concerning how the outputs should be signed, which keys they should be + * signed with, and also any optional tweaks. The return value is a fixed + * 64-byte signature (the same format as we use on the wire in Lightning). + * + * If we are unable to sign using the specified keys, then an error will be + * returned. + * + * @generated from protobuf rpc: SignOutputRaw(signrpc.SignReq) returns (signrpc.SignResp); + */ + signOutputRaw(input: SignReq, options?: RpcOptions): UnaryCall; + /** + * + * ComputeInputScript generates a complete InputIndex for the passed + * transaction with the signature as defined within the passed SignDescriptor. + * This method should be capable of generating the proper input script for both + * regular p2wkh/p2tr outputs and p2wkh outputs nested within a regular p2sh + * output. + * + * Note that when using this method to sign inputs belonging to the wallet, + * the only items of the SignDescriptor that need to be populated are pkScript + * in the TxOut field, the value in that same field, and finally the input + * index. + * + * @generated from protobuf rpc: ComputeInputScript(signrpc.SignReq) returns (signrpc.InputScriptResp); + */ + computeInputScript(input: SignReq, options?: RpcOptions): UnaryCall; + /** + * + * SignMessage signs a message with the key specified in the key locator. The + * returned signature is fixed-size LN wire format encoded. + * + * The main difference to SignMessage in the main RPC is that a specific key is + * used to sign the message instead of the node identity private key. + * + * @generated from protobuf rpc: SignMessage(signrpc.SignMessageReq) returns (signrpc.SignMessageResp); + */ + signMessage(input: SignMessageReq, options?: RpcOptions): UnaryCall; + /** + * + * VerifyMessage verifies a signature over a message using the public key + * provided. The signature must be fixed-size LN wire format encoded. + * + * The main difference to VerifyMessage in the main RPC is that the public key + * used to sign the message does not have to be a node known to the network. + * + * @generated from protobuf rpc: VerifyMessage(signrpc.VerifyMessageReq) returns (signrpc.VerifyMessageResp); + */ + verifyMessage(input: VerifyMessageReq, options?: RpcOptions): UnaryCall; + /** + * + * DeriveSharedKey returns a shared secret key by performing Diffie-Hellman key + * derivation between the ephemeral public key in the request and the node's + * key specified in the key_desc parameter. Either a key locator or a raw + * public key is expected in the key_desc, if neither is supplied, defaults to + * the node's identity private key: + * P_shared = privKeyNode * ephemeralPubkey + * The resulting shared public key is serialized in the compressed format and + * hashed with sha256, resulting in the final key length of 256bit. + * + * @generated from protobuf rpc: DeriveSharedKey(signrpc.SharedKeyRequest) returns (signrpc.SharedKeyResponse); + */ + deriveSharedKey(input: SharedKeyRequest, options?: RpcOptions): UnaryCall; + /** + * + * MuSig2CombineKeys (experimental!) is a stateless helper RPC that can be used + * to calculate the combined MuSig2 public key from a list of all participating + * signers' public keys. This RPC is completely stateless and deterministic and + * does not create any signing session. It can be used to determine the Taproot + * public key that should be put in an on-chain output once all public keys are + * known. A signing session is only needed later when that output should be + * _spent_ again. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2CombineKeys(signrpc.MuSig2CombineKeysRequest) returns (signrpc.MuSig2CombineKeysResponse); + */ + muSig2CombineKeys(input: MuSig2CombineKeysRequest, options?: RpcOptions): UnaryCall; + /** + * + * MuSig2CreateSession (experimental!) creates a new MuSig2 signing session + * using the local key identified by the key locator. The complete list of all + * public keys of all signing parties must be provided, including the public + * key of the local signing key. If nonces of other parties are already known, + * they can be submitted as well to reduce the number of RPC calls necessary + * later on. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2CreateSession(signrpc.MuSig2SessionRequest) returns (signrpc.MuSig2SessionResponse); + */ + muSig2CreateSession(input: MuSig2SessionRequest, options?: RpcOptions): UnaryCall; + /** + * + * MuSig2RegisterNonces (experimental!) registers one or more public nonces of + * other signing participants for a session identified by its ID. This RPC can + * be called multiple times until all nonces are registered. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2RegisterNonces(signrpc.MuSig2RegisterNoncesRequest) returns (signrpc.MuSig2RegisterNoncesResponse); + */ + muSig2RegisterNonces(input: MuSig2RegisterNoncesRequest, options?: RpcOptions): UnaryCall; + /** + * + * MuSig2Sign (experimental!) creates a partial signature using the local + * signing key that was specified when the session was created. This can only + * be called when all public nonces of all participants are known and have been + * registered with the session. If this node isn't responsible for combining + * all the partial signatures, then the cleanup flag should be set, indicating + * that the session can be removed from memory once the signature was produced. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2Sign(signrpc.MuSig2SignRequest) returns (signrpc.MuSig2SignResponse); + */ + muSig2Sign(input: MuSig2SignRequest, options?: RpcOptions): UnaryCall; + /** + * + * MuSig2CombineSig (experimental!) combines the given partial signature(s) + * with the local one, if it already exists. Once a partial signature of all + * participants is registered, the final signature will be combined and + * returned. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2CombineSig(signrpc.MuSig2CombineSigRequest) returns (signrpc.MuSig2CombineSigResponse); + */ + muSig2CombineSig(input: MuSig2CombineSigRequest, options?: RpcOptions): UnaryCall; + /** + * + * MuSig2Cleanup (experimental!) allows a caller to clean up a session early in + * cases where it's obvious that the signing session won't succeed and the + * resources can be released. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2Cleanup(signrpc.MuSig2CleanupRequest) returns (signrpc.MuSig2CleanupResponse); + */ + muSig2Cleanup(input: MuSig2CleanupRequest, options?: RpcOptions): UnaryCall; +} +/** + * Signer is a service that gives access to the signing functionality of the + * daemon's wallet. + * + * @generated from protobuf service signrpc.Signer + */ +export class SignerClient implements ISignerClient, ServiceInfo { + typeName = Signer.typeName; + methods = Signer.methods; + options = Signer.options; + constructor(private readonly _transport: RpcTransport) { + } + /** + * + * SignOutputRaw is a method that can be used to generated a signature for a + * set of inputs/outputs to a transaction. Each request specifies details + * concerning how the outputs should be signed, which keys they should be + * signed with, and also any optional tweaks. The return value is a fixed + * 64-byte signature (the same format as we use on the wire in Lightning). + * + * If we are unable to sign using the specified keys, then an error will be + * returned. + * + * @generated from protobuf rpc: SignOutputRaw(signrpc.SignReq) returns (signrpc.SignResp); + */ + signOutputRaw(input: SignReq, options?: RpcOptions): UnaryCall { + const method = this.methods[0], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * ComputeInputScript generates a complete InputIndex for the passed + * transaction with the signature as defined within the passed SignDescriptor. + * This method should be capable of generating the proper input script for both + * regular p2wkh/p2tr outputs and p2wkh outputs nested within a regular p2sh + * output. + * + * Note that when using this method to sign inputs belonging to the wallet, + * the only items of the SignDescriptor that need to be populated are pkScript + * in the TxOut field, the value in that same field, and finally the input + * index. + * + * @generated from protobuf rpc: ComputeInputScript(signrpc.SignReq) returns (signrpc.InputScriptResp); + */ + computeInputScript(input: SignReq, options?: RpcOptions): UnaryCall { + const method = this.methods[1], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * SignMessage signs a message with the key specified in the key locator. The + * returned signature is fixed-size LN wire format encoded. + * + * The main difference to SignMessage in the main RPC is that a specific key is + * used to sign the message instead of the node identity private key. + * + * @generated from protobuf rpc: SignMessage(signrpc.SignMessageReq) returns (signrpc.SignMessageResp); + */ + signMessage(input: SignMessageReq, options?: RpcOptions): UnaryCall { + const method = this.methods[2], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * VerifyMessage verifies a signature over a message using the public key + * provided. The signature must be fixed-size LN wire format encoded. + * + * The main difference to VerifyMessage in the main RPC is that the public key + * used to sign the message does not have to be a node known to the network. + * + * @generated from protobuf rpc: VerifyMessage(signrpc.VerifyMessageReq) returns (signrpc.VerifyMessageResp); + */ + verifyMessage(input: VerifyMessageReq, options?: RpcOptions): UnaryCall { + const method = this.methods[3], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * DeriveSharedKey returns a shared secret key by performing Diffie-Hellman key + * derivation between the ephemeral public key in the request and the node's + * key specified in the key_desc parameter. Either a key locator or a raw + * public key is expected in the key_desc, if neither is supplied, defaults to + * the node's identity private key: + * P_shared = privKeyNode * ephemeralPubkey + * The resulting shared public key is serialized in the compressed format and + * hashed with sha256, resulting in the final key length of 256bit. + * + * @generated from protobuf rpc: DeriveSharedKey(signrpc.SharedKeyRequest) returns (signrpc.SharedKeyResponse); + */ + deriveSharedKey(input: SharedKeyRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[4], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * MuSig2CombineKeys (experimental!) is a stateless helper RPC that can be used + * to calculate the combined MuSig2 public key from a list of all participating + * signers' public keys. This RPC is completely stateless and deterministic and + * does not create any signing session. It can be used to determine the Taproot + * public key that should be put in an on-chain output once all public keys are + * known. A signing session is only needed later when that output should be + * _spent_ again. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2CombineKeys(signrpc.MuSig2CombineKeysRequest) returns (signrpc.MuSig2CombineKeysResponse); + */ + muSig2CombineKeys(input: MuSig2CombineKeysRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[5], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * MuSig2CreateSession (experimental!) creates a new MuSig2 signing session + * using the local key identified by the key locator. The complete list of all + * public keys of all signing parties must be provided, including the public + * key of the local signing key. If nonces of other parties are already known, + * they can be submitted as well to reduce the number of RPC calls necessary + * later on. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2CreateSession(signrpc.MuSig2SessionRequest) returns (signrpc.MuSig2SessionResponse); + */ + muSig2CreateSession(input: MuSig2SessionRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[6], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * MuSig2RegisterNonces (experimental!) registers one or more public nonces of + * other signing participants for a session identified by its ID. This RPC can + * be called multiple times until all nonces are registered. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2RegisterNonces(signrpc.MuSig2RegisterNoncesRequest) returns (signrpc.MuSig2RegisterNoncesResponse); + */ + muSig2RegisterNonces(input: MuSig2RegisterNoncesRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[7], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * MuSig2Sign (experimental!) creates a partial signature using the local + * signing key that was specified when the session was created. This can only + * be called when all public nonces of all participants are known and have been + * registered with the session. If this node isn't responsible for combining + * all the partial signatures, then the cleanup flag should be set, indicating + * that the session can be removed from memory once the signature was produced. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2Sign(signrpc.MuSig2SignRequest) returns (signrpc.MuSig2SignResponse); + */ + muSig2Sign(input: MuSig2SignRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[8], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * MuSig2CombineSig (experimental!) combines the given partial signature(s) + * with the local one, if it already exists. Once a partial signature of all + * participants is registered, the final signature will be combined and + * returned. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2CombineSig(signrpc.MuSig2CombineSigRequest) returns (signrpc.MuSig2CombineSigResponse); + */ + muSig2CombineSig(input: MuSig2CombineSigRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[9], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * MuSig2Cleanup (experimental!) allows a caller to clean up a session early in + * cases where it's obvious that the signing session won't succeed and the + * resources can be released. + * + * NOTE: The MuSig2 BIP is not final yet and therefore this API must be + * considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + * releases. Backward compatibility is not guaranteed! + * + * @generated from protobuf rpc: MuSig2Cleanup(signrpc.MuSig2CleanupRequest) returns (signrpc.MuSig2CleanupResponse); + */ + muSig2Cleanup(input: MuSig2CleanupRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[10], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } +} diff --git a/proto/lnd/signer.ts b/proto/lnd/signer.ts new file mode 100644 index 000000000..cf9cf1d40 --- /dev/null +++ b/proto/lnd/signer.ts @@ -0,0 +1,2502 @@ +// @generated by protobuf-ts 2.8.1 +// @generated from protobuf file "signer.proto" (package "signrpc", syntax proto3) +// tslint:disable +import { ServiceType } from "@protobuf-ts/runtime-rpc"; +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +/** + * @generated from protobuf message signrpc.KeyLocator + */ +export interface KeyLocator { + /** + * The family of key being identified. + * + * @generated from protobuf field: int32 key_family = 1; + */ + keyFamily: number; + /** + * The precise index of the key being identified. + * + * @generated from protobuf field: int32 key_index = 2; + */ + keyIndex: number; +} +/** + * @generated from protobuf message signrpc.KeyDescriptor + */ +export interface KeyDescriptor { + /** + * + * The raw bytes of the public key in the key pair being identified. Either + * this or the KeyLocator must be specified. + * + * @generated from protobuf field: bytes raw_key_bytes = 1; + */ + rawKeyBytes: Uint8Array; + /** + * + * The key locator that identifies which private key to use for signing. + * Either this or the raw bytes of the target public key must be specified. + * + * @generated from protobuf field: signrpc.KeyLocator key_loc = 2; + */ + keyLoc?: KeyLocator; +} +/** + * @generated from protobuf message signrpc.TxOut + */ +export interface TxOut { + /** + * The value of the output being spent. + * + * @generated from protobuf field: int64 value = 1; + */ + value: bigint; + /** + * The script of the output being spent. + * + * @generated from protobuf field: bytes pk_script = 2; + */ + pkScript: Uint8Array; +} +/** + * @generated from protobuf message signrpc.SignDescriptor + */ +export interface SignDescriptor { + /** + * + * A descriptor that precisely describes *which* key to use for signing. This + * may provide the raw public key directly, or require the Signer to re-derive + * the key according to the populated derivation path. + * + * Note that if the key descriptor was obtained through walletrpc.DeriveKey, + * then the key locator MUST always be provided, since the derived keys are not + * persisted unlike with DeriveNextKey. + * + * @generated from protobuf field: signrpc.KeyDescriptor key_desc = 1; + */ + keyDesc?: KeyDescriptor; + /** + * + * A scalar value that will be added to the private key corresponding to the + * above public key to obtain the private key to be used to sign this input. + * This value is typically derived via the following computation: + * + * derivedKey = privkey + sha256(perCommitmentPoint || pubKey) mod N + * + * @generated from protobuf field: bytes single_tweak = 2; + */ + singleTweak: Uint8Array; + /** + * + * A private key that will be used in combination with its corresponding + * private key to derive the private key that is to be used to sign the target + * input. Within the Lightning protocol, this value is typically the + * commitment secret from a previously revoked commitment transaction. This + * value is in combination with two hash values, and the original private key + * to derive the private key to be used when signing. + * + * k = (privKey*sha256(pubKey || tweakPub) + + * tweakPriv*sha256(tweakPub || pubKey)) mod N + * + * @generated from protobuf field: bytes double_tweak = 3; + */ + doubleTweak: Uint8Array; + /** + * + * The 32 byte input to the taproot tweak derivation that is used to derive + * the output key from an internal key: outputKey = internalKey + + * tagged_hash("tapTweak", internalKey || tapTweak). + * + * When doing a BIP 86 spend, this field can be an empty byte slice. + * + * When doing a normal key path spend, with the output key committing to an + * actual script root, then this field should be: the tapscript root hash. + * + * @generated from protobuf field: bytes tap_tweak = 10; + */ + tapTweak: Uint8Array; + /** + * + * The full script required to properly redeem the output. This field will + * only be populated if a p2tr, p2wsh or a p2sh output is being signed. If a + * taproot script path spend is being attempted, then this should be the raw + * leaf script. + * + * @generated from protobuf field: bytes witness_script = 4; + */ + witnessScript: Uint8Array; + /** + * + * A description of the output being spent. The value and script MUST be + * provided. + * + * @generated from protobuf field: signrpc.TxOut output = 5; + */ + output?: TxOut; + /** + * + * The target sighash type that should be used when generating the final + * sighash, and signature. + * + * @generated from protobuf field: uint32 sighash = 7; + */ + sighash: number; + /** + * + * The target input within the transaction that should be signed. + * + * @generated from protobuf field: int32 input_index = 8; + */ + inputIndex: number; + /** + * + * The sign method specifies how the input should be signed. Depending on the + * method, either the tap_tweak, witness_script or both need to be specified. + * Defaults to SegWit v0 signing to be backward compatible with older RPC + * clients. + * + * @generated from protobuf field: signrpc.SignMethod sign_method = 9; + */ + signMethod: SignMethod; +} +/** + * @generated from protobuf message signrpc.SignReq + */ +export interface SignReq { + /** + * The raw bytes of the transaction to be signed. + * + * @generated from protobuf field: bytes raw_tx_bytes = 1; + */ + rawTxBytes: Uint8Array; + /** + * A set of sign descriptors, for each input to be signed. + * + * @generated from protobuf field: repeated signrpc.SignDescriptor sign_descs = 2; + */ + signDescs: SignDescriptor[]; + /** + * + * The full list of UTXO information for each of the inputs being spent. This + * is required when spending one or more taproot (SegWit v1) outputs. + * + * @generated from protobuf field: repeated signrpc.TxOut prev_outputs = 3; + */ + prevOutputs: TxOut[]; +} +/** + * @generated from protobuf message signrpc.SignResp + */ +export interface SignResp { + /** + * + * A set of signatures realized in a fixed 64-byte format ordered in ascending + * input order. + * + * @generated from protobuf field: repeated bytes raw_sigs = 1; + */ + rawSigs: Uint8Array[]; +} +/** + * @generated from protobuf message signrpc.InputScript + */ +export interface InputScript { + /** + * The serializes witness stack for the specified input. + * + * @generated from protobuf field: repeated bytes witness = 1; + */ + witness: Uint8Array[]; + /** + * + * The optional sig script for the specified witness that will only be set if + * the input specified is a nested p2sh witness program. + * + * @generated from protobuf field: bytes sig_script = 2; + */ + sigScript: Uint8Array; +} +/** + * @generated from protobuf message signrpc.InputScriptResp + */ +export interface InputScriptResp { + /** + * The set of fully valid input scripts requested. + * + * @generated from protobuf field: repeated signrpc.InputScript input_scripts = 1; + */ + inputScripts: InputScript[]; +} +/** + * @generated from protobuf message signrpc.SignMessageReq + */ +export interface SignMessageReq { + /** + * + * The message to be signed. When using REST, this field must be encoded as + * base64. + * + * @generated from protobuf field: bytes msg = 1; + */ + msg: Uint8Array; + /** + * The key locator that identifies which key to use for signing. + * + * @generated from protobuf field: signrpc.KeyLocator key_loc = 2; + */ + keyLoc?: KeyLocator; + /** + * Double-SHA256 hash instead of just the default single round. + * + * @generated from protobuf field: bool double_hash = 3; + */ + doubleHash: boolean; + /** + * + * Use the compact (pubkey recoverable) format instead of the raw lnwire + * format. This option cannot be used with Schnorr signatures. + * + * @generated from protobuf field: bool compact_sig = 4; + */ + compactSig: boolean; + /** + * + * Use Schnorr signature. This option cannot be used with compact format. + * + * @generated from protobuf field: bool schnorr_sig = 5; + */ + schnorrSig: boolean; + /** + * + * The optional Taproot tweak bytes to apply to the private key before creating + * a Schnorr signature. The private key is tweaked as described in BIP-341: + * privKey + h_tapTweak(internalKey || tapTweak) + * + * @generated from protobuf field: bytes schnorr_sig_tap_tweak = 6; + */ + schnorrSigTapTweak: Uint8Array; + /** + * + * An optional tag that can be provided when taking a tagged hash of a + * message. This option can only be used when schnorr_sig is true. + * + * @generated from protobuf field: bytes tag = 7; + */ + tag: Uint8Array; +} +/** + * @generated from protobuf message signrpc.SignMessageResp + */ +export interface SignMessageResp { + /** + * + * The signature for the given message in the fixed-size LN wire format. + * + * @generated from protobuf field: bytes signature = 1; + */ + signature: Uint8Array; +} +/** + * @generated from protobuf message signrpc.VerifyMessageReq + */ +export interface VerifyMessageReq { + /** + * The message over which the signature is to be verified. When using + * REST, this field must be encoded as base64. + * + * @generated from protobuf field: bytes msg = 1; + */ + msg: Uint8Array; + /** + * + * The fixed-size LN wire encoded signature to be verified over the given + * message. When using REST, this field must be encoded as base64. + * + * @generated from protobuf field: bytes signature = 2; + */ + signature: Uint8Array; + /** + * + * The public key the signature has to be valid for. When using REST, this + * field must be encoded as base64. If the is_schnorr_sig option is true, then + * the public key is expected to be in the 32-byte x-only serialization + * according to BIP-340. + * + * @generated from protobuf field: bytes pubkey = 3; + */ + pubkey: Uint8Array; + /** + * + * Specifies if the signature is a Schnorr signature. + * + * @generated from protobuf field: bool is_schnorr_sig = 4; + */ + isSchnorrSig: boolean; + /** + * + * An optional tag that can be provided when taking a tagged hash of a + * message. This option can only be used when is_schnorr_sig is true. + * + * @generated from protobuf field: bytes tag = 5; + */ + tag: Uint8Array; +} +/** + * @generated from protobuf message signrpc.VerifyMessageResp + */ +export interface VerifyMessageResp { + /** + * Whether the signature was valid over the given message. + * + * @generated from protobuf field: bool valid = 1; + */ + valid: boolean; +} +/** + * @generated from protobuf message signrpc.SharedKeyRequest + */ +export interface SharedKeyRequest { + /** + * The ephemeral public key to use for the DH key derivation. + * + * @generated from protobuf field: bytes ephemeral_pubkey = 1; + */ + ephemeralPubkey: Uint8Array; + /** + * + * Deprecated. The optional key locator of the local key that should be used. + * If this parameter is not set then the node's identity private key will be + * used. + * + * @deprecated + * @generated from protobuf field: signrpc.KeyLocator key_loc = 2 [deprecated = true]; + */ + keyLoc?: KeyLocator; + /** + * + * A key descriptor describes the key used for performing ECDH. Either a key + * locator or a raw public key is expected, if neither is supplied, defaults to + * the node's identity private key. + * + * @generated from protobuf field: signrpc.KeyDescriptor key_desc = 3; + */ + keyDesc?: KeyDescriptor; +} +/** + * @generated from protobuf message signrpc.SharedKeyResponse + */ +export interface SharedKeyResponse { + /** + * The shared public key, hashed with sha256. + * + * @generated from protobuf field: bytes shared_key = 1; + */ + sharedKey: Uint8Array; +} +/** + * @generated from protobuf message signrpc.TweakDesc + */ +export interface TweakDesc { + /** + * + * Tweak is the 32-byte value that will modify the public key. + * + * @generated from protobuf field: bytes tweak = 1; + */ + tweak: Uint8Array; + /** + * + * Specifies if the target key should be converted to an x-only public key + * before tweaking. If true, then the public key will be mapped to an x-only + * key before the tweaking operation is applied. + * + * @generated from protobuf field: bool is_x_only = 2; + */ + isXOnly: boolean; +} +/** + * @generated from protobuf message signrpc.TaprootTweakDesc + */ +export interface TaprootTweakDesc { + /** + * + * The root hash of the tapscript tree if a script path is committed to. If + * the MuSig2 key put on chain doesn't also commit to a script path (BIP-0086 + * key spend only), then this needs to be empty and the key_spend_only field + * below must be set to true. This is required because gRPC cannot + * differentiate between a zero-size byte slice and a nil byte slice (both + * would be serialized the same way). So the extra boolean is required. + * + * @generated from protobuf field: bytes script_root = 1; + */ + scriptRoot: Uint8Array; + /** + * + * Indicates that the above script_root is expected to be empty because this + * is a BIP-0086 key spend only commitment where only the internal key is + * committed to instead of also including a script root hash. + * + * @generated from protobuf field: bool key_spend_only = 2; + */ + keySpendOnly: boolean; +} +/** + * @generated from protobuf message signrpc.MuSig2CombineKeysRequest + */ +export interface MuSig2CombineKeysRequest { + /** + * + * A list of all public keys (serialized in 32-byte x-only format for v0.4.0 + * and 33-byte compressed format for v1.0.0rc2!) participating in the signing + * session. The list will always be sorted lexicographically internally. This + * must include the local key which is described by the above key_loc. + * + * @generated from protobuf field: repeated bytes all_signer_pubkeys = 1; + */ + allSignerPubkeys: Uint8Array[]; + /** + * + * A series of optional generic tweaks to be applied to the aggregated + * public key. + * + * @generated from protobuf field: repeated signrpc.TweakDesc tweaks = 2; + */ + tweaks: TweakDesc[]; + /** + * + * An optional taproot specific tweak that must be specified if the MuSig2 + * combined key will be used as the main taproot key of a taproot output + * on-chain. + * + * @generated from protobuf field: signrpc.TaprootTweakDesc taproot_tweak = 3; + */ + taprootTweak?: TaprootTweakDesc; + /** + * + * The mandatory version of the MuSig2 BIP draft to use. This is necessary to + * differentiate between the changes that were made to the BIP while this + * experimental RPC was already released. Some of those changes affect how the + * combined key and nonces are created. + * + * @generated from protobuf field: signrpc.MuSig2Version version = 4; + */ + version: MuSig2Version; +} +/** + * @generated from protobuf message signrpc.MuSig2CombineKeysResponse + */ +export interface MuSig2CombineKeysResponse { + /** + * + * The combined public key (in the 32-byte x-only format) with all tweaks + * applied to it. If a taproot tweak is specified, this corresponds to the + * taproot key that can be put into the on-chain output. + * + * @generated from protobuf field: bytes combined_key = 1; + */ + combinedKey: Uint8Array; + /** + * + * The raw combined public key (in the 32-byte x-only format) before any tweaks + * are applied to it. If a taproot tweak is specified, this corresponds to the + * internal key that needs to be put into the witness if the script spend path + * is used. + * + * @generated from protobuf field: bytes taproot_internal_key = 2; + */ + taprootInternalKey: Uint8Array; + /** + * + * The version of the MuSig2 BIP that was used to combine the keys. + * + * @generated from protobuf field: signrpc.MuSig2Version version = 4; + */ + version: MuSig2Version; +} +/** + * @generated from protobuf message signrpc.MuSig2SessionRequest + */ +export interface MuSig2SessionRequest { + /** + * + * The key locator that identifies which key to use for signing. + * + * @generated from protobuf field: signrpc.KeyLocator key_loc = 1; + */ + keyLoc?: KeyLocator; + /** + * + * A list of all public keys (serialized in 32-byte x-only format for v0.4.0 + * and 33-byte compressed format for v1.0.0rc2!) participating in the signing + * session. The list will always be sorted lexicographically internally. This + * must include the local key which is described by the above key_loc. + * + * @generated from protobuf field: repeated bytes all_signer_pubkeys = 2; + */ + allSignerPubkeys: Uint8Array[]; + /** + * + * An optional list of all public nonces of other signing participants that + * might already be known. + * + * @generated from protobuf field: repeated bytes other_signer_public_nonces = 3; + */ + otherSignerPublicNonces: Uint8Array[]; + /** + * + * A series of optional generic tweaks to be applied to the aggregated + * public key. + * + * @generated from protobuf field: repeated signrpc.TweakDesc tweaks = 4; + */ + tweaks: TweakDesc[]; + /** + * + * An optional taproot specific tweak that must be specified if the MuSig2 + * combined key will be used as the main taproot key of a taproot output + * on-chain. + * + * @generated from protobuf field: signrpc.TaprootTweakDesc taproot_tweak = 5; + */ + taprootTweak?: TaprootTweakDesc; + /** + * + * The mandatory version of the MuSig2 BIP draft to use. This is necessary to + * differentiate between the changes that were made to the BIP while this + * experimental RPC was already released. Some of those changes affect how the + * combined key and nonces are created. + * + * @generated from protobuf field: signrpc.MuSig2Version version = 6; + */ + version: MuSig2Version; + /** + * + * A set of pre generated secret local nonces to use in the musig2 session. + * This field is optional. This can be useful for protocols that need to send + * nonces ahead of time before the set of signer keys are known. This value + * MUST be 97 bytes and be the concatenation of two CSPRNG generated 32 byte + * values and local public key used for signing as specified in the key_loc + * field. + * + * @generated from protobuf field: bytes pregenerated_local_nonce = 7; + */ + pregeneratedLocalNonce: Uint8Array; +} +/** + * @generated from protobuf message signrpc.MuSig2SessionResponse + */ +export interface MuSig2SessionResponse { + /** + * + * The unique ID that represents this signing session. A session can be used + * for producing a signature a single time. If the signing fails for any + * reason, a new session with the same participants needs to be created. + * + * @generated from protobuf field: bytes session_id = 1; + */ + sessionId: Uint8Array; + /** + * + * The combined public key (in the 32-byte x-only format) with all tweaks + * applied to it. If a taproot tweak is specified, this corresponds to the + * taproot key that can be put into the on-chain output. + * + * @generated from protobuf field: bytes combined_key = 2; + */ + combinedKey: Uint8Array; + /** + * + * The raw combined public key (in the 32-byte x-only format) before any tweaks + * are applied to it. If a taproot tweak is specified, this corresponds to the + * internal key that needs to be put into the witness if the script spend path + * is used. + * + * @generated from protobuf field: bytes taproot_internal_key = 3; + */ + taprootInternalKey: Uint8Array; + /** + * + * The two public nonces the local signer uses, combined into a single value + * of 66 bytes. Can be split into the two 33-byte points to get the individual + * nonces. + * + * @generated from protobuf field: bytes local_public_nonces = 4; + */ + localPublicNonces: Uint8Array; + /** + * + * Indicates whether all nonces required to start the signing process are known + * now. + * + * @generated from protobuf field: bool have_all_nonces = 5; + */ + haveAllNonces: boolean; + /** + * + * The version of the MuSig2 BIP that was used to create the session. + * + * @generated from protobuf field: signrpc.MuSig2Version version = 6; + */ + version: MuSig2Version; +} +/** + * @generated from protobuf message signrpc.MuSig2RegisterNoncesRequest + */ +export interface MuSig2RegisterNoncesRequest { + /** + * + * The unique ID of the signing session those nonces should be registered with. + * + * @generated from protobuf field: bytes session_id = 1; + */ + sessionId: Uint8Array; + /** + * + * A list of all public nonces of other signing participants that should be + * registered. + * + * @generated from protobuf field: repeated bytes other_signer_public_nonces = 3; + */ + otherSignerPublicNonces: Uint8Array[]; +} +/** + * @generated from protobuf message signrpc.MuSig2RegisterNoncesResponse + */ +export interface MuSig2RegisterNoncesResponse { + /** + * + * Indicates whether all nonces required to start the signing process are known + * now. + * + * @generated from protobuf field: bool have_all_nonces = 1; + */ + haveAllNonces: boolean; +} +/** + * @generated from protobuf message signrpc.MuSig2SignRequest + */ +export interface MuSig2SignRequest { + /** + * + * The unique ID of the signing session to use for signing. + * + * @generated from protobuf field: bytes session_id = 1; + */ + sessionId: Uint8Array; + /** + * + * The 32-byte SHA256 digest of the message to sign. + * + * @generated from protobuf field: bytes message_digest = 2; + */ + messageDigest: Uint8Array; + /** + * + * Cleanup indicates that after signing, the session state can be cleaned up, + * since another participant is going to be responsible for combining the + * partial signatures. + * + * @generated from protobuf field: bool cleanup = 3; + */ + cleanup: boolean; +} +/** + * @generated from protobuf message signrpc.MuSig2SignResponse + */ +export interface MuSig2SignResponse { + /** + * + * The partial signature created by the local signer. + * + * @generated from protobuf field: bytes local_partial_signature = 1; + */ + localPartialSignature: Uint8Array; +} +/** + * @generated from protobuf message signrpc.MuSig2CombineSigRequest + */ +export interface MuSig2CombineSigRequest { + /** + * + * The unique ID of the signing session to combine the signatures for. + * + * @generated from protobuf field: bytes session_id = 1; + */ + sessionId: Uint8Array; + /** + * + * The list of all other participants' partial signatures to add to the current + * session. + * + * @generated from protobuf field: repeated bytes other_partial_signatures = 2; + */ + otherPartialSignatures: Uint8Array[]; +} +/** + * @generated from protobuf message signrpc.MuSig2CombineSigResponse + */ +export interface MuSig2CombineSigResponse { + /** + * + * Indicates whether all partial signatures required to create a final, full + * signature are known yet. If this is true, then the final_signature field is + * set, otherwise it is empty. + * + * @generated from protobuf field: bool have_all_signatures = 1; + */ + haveAllSignatures: boolean; + /** + * + * The final, full signature that is valid for the combined public key. + * + * @generated from protobuf field: bytes final_signature = 2; + */ + finalSignature: Uint8Array; +} +/** + * @generated from protobuf message signrpc.MuSig2CleanupRequest + */ +export interface MuSig2CleanupRequest { + /** + * + * The unique ID of the signing session that should be removed/cleaned up. + * + * @generated from protobuf field: bytes session_id = 1; + */ + sessionId: Uint8Array; +} +/** + * @generated from protobuf message signrpc.MuSig2CleanupResponse + */ +export interface MuSig2CleanupResponse { +} +/** + * @generated from protobuf enum signrpc.SignMethod + */ +export enum SignMethod { + /** + * + * Specifies that a SegWit v0 (p2wkh, np2wkh, p2wsh) input script should be + * signed. + * + * @generated from protobuf enum value: SIGN_METHOD_WITNESS_V0 = 0; + */ + WITNESS_V0 = 0, + /** + * + * Specifies that a SegWit v1 (p2tr) input should be signed by using the + * BIP0086 method (commit to internal key only). + * + * @generated from protobuf enum value: SIGN_METHOD_TAPROOT_KEY_SPEND_BIP0086 = 1; + */ + TAPROOT_KEY_SPEND_BIP0086 = 1, + /** + * + * Specifies that a SegWit v1 (p2tr) input should be signed by using a given + * taproot hash to commit to in addition to the internal key. + * + * @generated from protobuf enum value: SIGN_METHOD_TAPROOT_KEY_SPEND = 2; + */ + TAPROOT_KEY_SPEND = 2, + /** + * + * Specifies that a SegWit v1 (p2tr) input should be spent using the script + * path and that a specific leaf script should be signed for. + * + * @generated from protobuf enum value: SIGN_METHOD_TAPROOT_SCRIPT_SPEND = 3; + */ + TAPROOT_SCRIPT_SPEND = 3 +} +/** + * @generated from protobuf enum signrpc.MuSig2Version + */ +export enum MuSig2Version { + /** + * + * The default value on the RPC is zero for enums so we need to represent an + * invalid/undefined version by default to make sure clients upgrade their + * software to set the version explicitly. + * + * @generated from protobuf enum value: MUSIG2_VERSION_UNDEFINED = 0; + */ + MUSIG2_VERSION_UNDEFINED = 0, + /** + * + * The version of MuSig2 that lnd 0.15.x shipped with, which corresponds to the + * version v0.4.0 of the MuSig2 BIP draft. + * + * @generated from protobuf enum value: MUSIG2_VERSION_V040 = 1; + */ + MUSIG2_VERSION_V040 = 1, + /** + * + * The current version of MuSig2 which corresponds to the version v1.0.0rc2 of + * the MuSig2 BIP draft. + * + * @generated from protobuf enum value: MUSIG2_VERSION_V100RC2 = 2; + */ + MUSIG2_VERSION_V100RC2 = 2 +} +// @generated message type with reflection information, may provide speed optimized methods +class KeyLocator$Type extends MessageType { + constructor() { + super("signrpc.KeyLocator", [ + { no: 1, name: "key_family", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "key_index", kind: "scalar", T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): KeyLocator { + const message = { keyFamily: 0, keyIndex: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: KeyLocator): KeyLocator { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int32 key_family */ 1: + message.keyFamily = reader.int32(); + break; + case /* int32 key_index */ 2: + message.keyIndex = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: KeyLocator, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int32 key_family = 1; */ + if (message.keyFamily !== 0) + writer.tag(1, WireType.Varint).int32(message.keyFamily); + /* int32 key_index = 2; */ + if (message.keyIndex !== 0) + writer.tag(2, WireType.Varint).int32(message.keyIndex); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.KeyLocator + */ +export const KeyLocator = new KeyLocator$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class KeyDescriptor$Type extends MessageType { + constructor() { + super("signrpc.KeyDescriptor", [ + { no: 1, name: "raw_key_bytes", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "key_loc", kind: "message", T: () => KeyLocator } + ]); + } + create(value?: PartialMessage): KeyDescriptor { + const message = { rawKeyBytes: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: KeyDescriptor): KeyDescriptor { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes raw_key_bytes */ 1: + message.rawKeyBytes = reader.bytes(); + break; + case /* signrpc.KeyLocator key_loc */ 2: + message.keyLoc = KeyLocator.internalBinaryRead(reader, reader.uint32(), options, message.keyLoc); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: KeyDescriptor, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes raw_key_bytes = 1; */ + if (message.rawKeyBytes.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.rawKeyBytes); + /* signrpc.KeyLocator key_loc = 2; */ + if (message.keyLoc) + KeyLocator.internalBinaryWrite(message.keyLoc, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.KeyDescriptor + */ +export const KeyDescriptor = new KeyDescriptor$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TxOut$Type extends MessageType { + constructor() { + super("signrpc.TxOut", [ + { no: 1, name: "value", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 2, name: "pk_script", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): TxOut { + const message = { value: 0n, pkScript: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TxOut): TxOut { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int64 value */ 1: + message.value = reader.int64().toBigInt(); + break; + case /* bytes pk_script */ 2: + message.pkScript = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TxOut, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int64 value = 1; */ + if (message.value !== 0n) + writer.tag(1, WireType.Varint).int64(message.value); + /* bytes pk_script = 2; */ + if (message.pkScript.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.pkScript); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.TxOut + */ +export const TxOut = new TxOut$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignDescriptor$Type extends MessageType { + constructor() { + super("signrpc.SignDescriptor", [ + { no: 1, name: "key_desc", kind: "message", T: () => KeyDescriptor }, + { no: 2, name: "single_tweak", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 3, name: "double_tweak", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 10, name: "tap_tweak", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 4, name: "witness_script", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 5, name: "output", kind: "message", T: () => TxOut }, + { no: 7, name: "sighash", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 8, name: "input_index", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 9, name: "sign_method", kind: "enum", T: () => ["signrpc.SignMethod", SignMethod, "SIGN_METHOD_"] } + ]); + } + create(value?: PartialMessage): SignDescriptor { + const message = { singleTweak: new Uint8Array(0), doubleTweak: new Uint8Array(0), tapTweak: new Uint8Array(0), witnessScript: new Uint8Array(0), sighash: 0, inputIndex: 0, signMethod: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignDescriptor): SignDescriptor { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* signrpc.KeyDescriptor key_desc */ 1: + message.keyDesc = KeyDescriptor.internalBinaryRead(reader, reader.uint32(), options, message.keyDesc); + break; + case /* bytes single_tweak */ 2: + message.singleTweak = reader.bytes(); + break; + case /* bytes double_tweak */ 3: + message.doubleTweak = reader.bytes(); + break; + case /* bytes tap_tweak */ 10: + message.tapTweak = reader.bytes(); + break; + case /* bytes witness_script */ 4: + message.witnessScript = reader.bytes(); + break; + case /* signrpc.TxOut output */ 5: + message.output = TxOut.internalBinaryRead(reader, reader.uint32(), options, message.output); + break; + case /* uint32 sighash */ 7: + message.sighash = reader.uint32(); + break; + case /* int32 input_index */ 8: + message.inputIndex = reader.int32(); + break; + case /* signrpc.SignMethod sign_method */ 9: + message.signMethod = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignDescriptor, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* signrpc.KeyDescriptor key_desc = 1; */ + if (message.keyDesc) + KeyDescriptor.internalBinaryWrite(message.keyDesc, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* bytes single_tweak = 2; */ + if (message.singleTweak.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.singleTweak); + /* bytes double_tweak = 3; */ + if (message.doubleTweak.length) + writer.tag(3, WireType.LengthDelimited).bytes(message.doubleTweak); + /* bytes tap_tweak = 10; */ + if (message.tapTweak.length) + writer.tag(10, WireType.LengthDelimited).bytes(message.tapTweak); + /* bytes witness_script = 4; */ + if (message.witnessScript.length) + writer.tag(4, WireType.LengthDelimited).bytes(message.witnessScript); + /* signrpc.TxOut output = 5; */ + if (message.output) + TxOut.internalBinaryWrite(message.output, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* uint32 sighash = 7; */ + if (message.sighash !== 0) + writer.tag(7, WireType.Varint).uint32(message.sighash); + /* int32 input_index = 8; */ + if (message.inputIndex !== 0) + writer.tag(8, WireType.Varint).int32(message.inputIndex); + /* signrpc.SignMethod sign_method = 9; */ + if (message.signMethod !== 0) + writer.tag(9, WireType.Varint).int32(message.signMethod); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.SignDescriptor + */ +export const SignDescriptor = new SignDescriptor$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignReq$Type extends MessageType { + constructor() { + super("signrpc.SignReq", [ + { no: 1, name: "raw_tx_bytes", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "sign_descs", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => SignDescriptor }, + { no: 3, name: "prev_outputs", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TxOut } + ]); + } + create(value?: PartialMessage): SignReq { + const message = { rawTxBytes: new Uint8Array(0), signDescs: [], prevOutputs: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignReq): SignReq { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes raw_tx_bytes */ 1: + message.rawTxBytes = reader.bytes(); + break; + case /* repeated signrpc.SignDescriptor sign_descs */ 2: + message.signDescs.push(SignDescriptor.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* repeated signrpc.TxOut prev_outputs */ 3: + message.prevOutputs.push(TxOut.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignReq, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes raw_tx_bytes = 1; */ + if (message.rawTxBytes.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.rawTxBytes); + /* repeated signrpc.SignDescriptor sign_descs = 2; */ + for (let i = 0; i < message.signDescs.length; i++) + SignDescriptor.internalBinaryWrite(message.signDescs[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* repeated signrpc.TxOut prev_outputs = 3; */ + for (let i = 0; i < message.prevOutputs.length; i++) + TxOut.internalBinaryWrite(message.prevOutputs[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.SignReq + */ +export const SignReq = new SignReq$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignResp$Type extends MessageType { + constructor() { + super("signrpc.SignResp", [ + { no: 1, name: "raw_sigs", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): SignResp { + const message = { rawSigs: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignResp): SignResp { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated bytes raw_sigs */ 1: + message.rawSigs.push(reader.bytes()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignResp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated bytes raw_sigs = 1; */ + for (let i = 0; i < message.rawSigs.length; i++) + writer.tag(1, WireType.LengthDelimited).bytes(message.rawSigs[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.SignResp + */ +export const SignResp = new SignResp$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class InputScript$Type extends MessageType { + constructor() { + super("signrpc.InputScript", [ + { no: 1, name: "witness", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "sig_script", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): InputScript { + const message = { witness: [], sigScript: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: InputScript): InputScript { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated bytes witness */ 1: + message.witness.push(reader.bytes()); + break; + case /* bytes sig_script */ 2: + message.sigScript = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: InputScript, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated bytes witness = 1; */ + for (let i = 0; i < message.witness.length; i++) + writer.tag(1, WireType.LengthDelimited).bytes(message.witness[i]); + /* bytes sig_script = 2; */ + if (message.sigScript.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.sigScript); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.InputScript + */ +export const InputScript = new InputScript$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class InputScriptResp$Type extends MessageType { + constructor() { + super("signrpc.InputScriptResp", [ + { no: 1, name: "input_scripts", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => InputScript } + ]); + } + create(value?: PartialMessage): InputScriptResp { + const message = { inputScripts: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: InputScriptResp): InputScriptResp { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated signrpc.InputScript input_scripts */ 1: + message.inputScripts.push(InputScript.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: InputScriptResp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated signrpc.InputScript input_scripts = 1; */ + for (let i = 0; i < message.inputScripts.length; i++) + InputScript.internalBinaryWrite(message.inputScripts[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.InputScriptResp + */ +export const InputScriptResp = new InputScriptResp$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignMessageReq$Type extends MessageType { + constructor() { + super("signrpc.SignMessageReq", [ + { no: 1, name: "msg", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "key_loc", kind: "message", T: () => KeyLocator }, + { no: 3, name: "double_hash", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 4, name: "compact_sig", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 5, name: "schnorr_sig", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 6, name: "schnorr_sig_tap_tweak", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 7, name: "tag", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): SignMessageReq { + const message = { msg: new Uint8Array(0), doubleHash: false, compactSig: false, schnorrSig: false, schnorrSigTapTweak: new Uint8Array(0), tag: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignMessageReq): SignMessageReq { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes msg */ 1: + message.msg = reader.bytes(); + break; + case /* signrpc.KeyLocator key_loc */ 2: + message.keyLoc = KeyLocator.internalBinaryRead(reader, reader.uint32(), options, message.keyLoc); + break; + case /* bool double_hash */ 3: + message.doubleHash = reader.bool(); + break; + case /* bool compact_sig */ 4: + message.compactSig = reader.bool(); + break; + case /* bool schnorr_sig */ 5: + message.schnorrSig = reader.bool(); + break; + case /* bytes schnorr_sig_tap_tweak */ 6: + message.schnorrSigTapTweak = reader.bytes(); + break; + case /* bytes tag */ 7: + message.tag = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignMessageReq, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes msg = 1; */ + if (message.msg.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.msg); + /* signrpc.KeyLocator key_loc = 2; */ + if (message.keyLoc) + KeyLocator.internalBinaryWrite(message.keyLoc, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* bool double_hash = 3; */ + if (message.doubleHash !== false) + writer.tag(3, WireType.Varint).bool(message.doubleHash); + /* bool compact_sig = 4; */ + if (message.compactSig !== false) + writer.tag(4, WireType.Varint).bool(message.compactSig); + /* bool schnorr_sig = 5; */ + if (message.schnorrSig !== false) + writer.tag(5, WireType.Varint).bool(message.schnorrSig); + /* bytes schnorr_sig_tap_tweak = 6; */ + if (message.schnorrSigTapTweak.length) + writer.tag(6, WireType.LengthDelimited).bytes(message.schnorrSigTapTweak); + /* bytes tag = 7; */ + if (message.tag.length) + writer.tag(7, WireType.LengthDelimited).bytes(message.tag); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.SignMessageReq + */ +export const SignMessageReq = new SignMessageReq$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignMessageResp$Type extends MessageType { + constructor() { + super("signrpc.SignMessageResp", [ + { no: 1, name: "signature", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): SignMessageResp { + const message = { signature: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignMessageResp): SignMessageResp { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes signature */ 1: + message.signature = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignMessageResp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes signature = 1; */ + if (message.signature.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.signature); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.SignMessageResp + */ +export const SignMessageResp = new SignMessageResp$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class VerifyMessageReq$Type extends MessageType { + constructor() { + super("signrpc.VerifyMessageReq", [ + { no: 1, name: "msg", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "signature", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 3, name: "pubkey", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 4, name: "is_schnorr_sig", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 5, name: "tag", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): VerifyMessageReq { + const message = { msg: new Uint8Array(0), signature: new Uint8Array(0), pubkey: new Uint8Array(0), isSchnorrSig: false, tag: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: VerifyMessageReq): VerifyMessageReq { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes msg */ 1: + message.msg = reader.bytes(); + break; + case /* bytes signature */ 2: + message.signature = reader.bytes(); + break; + case /* bytes pubkey */ 3: + message.pubkey = reader.bytes(); + break; + case /* bool is_schnorr_sig */ 4: + message.isSchnorrSig = reader.bool(); + break; + case /* bytes tag */ 5: + message.tag = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: VerifyMessageReq, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes msg = 1; */ + if (message.msg.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.msg); + /* bytes signature = 2; */ + if (message.signature.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.signature); + /* bytes pubkey = 3; */ + if (message.pubkey.length) + writer.tag(3, WireType.LengthDelimited).bytes(message.pubkey); + /* bool is_schnorr_sig = 4; */ + if (message.isSchnorrSig !== false) + writer.tag(4, WireType.Varint).bool(message.isSchnorrSig); + /* bytes tag = 5; */ + if (message.tag.length) + writer.tag(5, WireType.LengthDelimited).bytes(message.tag); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.VerifyMessageReq + */ +export const VerifyMessageReq = new VerifyMessageReq$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class VerifyMessageResp$Type extends MessageType { + constructor() { + super("signrpc.VerifyMessageResp", [ + { no: 1, name: "valid", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): VerifyMessageResp { + const message = { valid: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: VerifyMessageResp): VerifyMessageResp { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bool valid */ 1: + message.valid = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: VerifyMessageResp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bool valid = 1; */ + if (message.valid !== false) + writer.tag(1, WireType.Varint).bool(message.valid); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.VerifyMessageResp + */ +export const VerifyMessageResp = new VerifyMessageResp$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SharedKeyRequest$Type extends MessageType { + constructor() { + super("signrpc.SharedKeyRequest", [ + { no: 1, name: "ephemeral_pubkey", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "key_loc", kind: "message", T: () => KeyLocator }, + { no: 3, name: "key_desc", kind: "message", T: () => KeyDescriptor } + ]); + } + create(value?: PartialMessage): SharedKeyRequest { + const message = { ephemeralPubkey: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SharedKeyRequest): SharedKeyRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes ephemeral_pubkey */ 1: + message.ephemeralPubkey = reader.bytes(); + break; + case /* signrpc.KeyLocator key_loc = 2 [deprecated = true];*/ 2: + message.keyLoc = KeyLocator.internalBinaryRead(reader, reader.uint32(), options, message.keyLoc); + break; + case /* signrpc.KeyDescriptor key_desc */ 3: + message.keyDesc = KeyDescriptor.internalBinaryRead(reader, reader.uint32(), options, message.keyDesc); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SharedKeyRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes ephemeral_pubkey = 1; */ + if (message.ephemeralPubkey.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.ephemeralPubkey); + /* signrpc.KeyLocator key_loc = 2 [deprecated = true]; */ + if (message.keyLoc) + KeyLocator.internalBinaryWrite(message.keyLoc, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* signrpc.KeyDescriptor key_desc = 3; */ + if (message.keyDesc) + KeyDescriptor.internalBinaryWrite(message.keyDesc, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.SharedKeyRequest + */ +export const SharedKeyRequest = new SharedKeyRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SharedKeyResponse$Type extends MessageType { + constructor() { + super("signrpc.SharedKeyResponse", [ + { no: 1, name: "shared_key", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): SharedKeyResponse { + const message = { sharedKey: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SharedKeyResponse): SharedKeyResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes shared_key */ 1: + message.sharedKey = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SharedKeyResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes shared_key = 1; */ + if (message.sharedKey.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.sharedKey); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.SharedKeyResponse + */ +export const SharedKeyResponse = new SharedKeyResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TweakDesc$Type extends MessageType { + constructor() { + super("signrpc.TweakDesc", [ + { no: 1, name: "tweak", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "is_x_only", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): TweakDesc { + const message = { tweak: new Uint8Array(0), isXOnly: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TweakDesc): TweakDesc { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes tweak */ 1: + message.tweak = reader.bytes(); + break; + case /* bool is_x_only */ 2: + message.isXOnly = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TweakDesc, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes tweak = 1; */ + if (message.tweak.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.tweak); + /* bool is_x_only = 2; */ + if (message.isXOnly !== false) + writer.tag(2, WireType.Varint).bool(message.isXOnly); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.TweakDesc + */ +export const TweakDesc = new TweakDesc$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TaprootTweakDesc$Type extends MessageType { + constructor() { + super("signrpc.TaprootTweakDesc", [ + { no: 1, name: "script_root", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "key_spend_only", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): TaprootTweakDesc { + const message = { scriptRoot: new Uint8Array(0), keySpendOnly: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TaprootTweakDesc): TaprootTweakDesc { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes script_root */ 1: + message.scriptRoot = reader.bytes(); + break; + case /* bool key_spend_only */ 2: + message.keySpendOnly = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TaprootTweakDesc, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes script_root = 1; */ + if (message.scriptRoot.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.scriptRoot); + /* bool key_spend_only = 2; */ + if (message.keySpendOnly !== false) + writer.tag(2, WireType.Varint).bool(message.keySpendOnly); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.TaprootTweakDesc + */ +export const TaprootTweakDesc = new TaprootTweakDesc$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2CombineKeysRequest$Type extends MessageType { + constructor() { + super("signrpc.MuSig2CombineKeysRequest", [ + { no: 1, name: "all_signer_pubkeys", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "tweaks", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TweakDesc }, + { no: 3, name: "taproot_tweak", kind: "message", T: () => TaprootTweakDesc }, + { no: 4, name: "version", kind: "enum", T: () => ["signrpc.MuSig2Version", MuSig2Version] } + ]); + } + create(value?: PartialMessage): MuSig2CombineKeysRequest { + const message = { allSignerPubkeys: [], tweaks: [], version: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2CombineKeysRequest): MuSig2CombineKeysRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated bytes all_signer_pubkeys */ 1: + message.allSignerPubkeys.push(reader.bytes()); + break; + case /* repeated signrpc.TweakDesc tweaks */ 2: + message.tweaks.push(TweakDesc.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* signrpc.TaprootTweakDesc taproot_tweak */ 3: + message.taprootTweak = TaprootTweakDesc.internalBinaryRead(reader, reader.uint32(), options, message.taprootTweak); + break; + case /* signrpc.MuSig2Version version */ 4: + message.version = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2CombineKeysRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated bytes all_signer_pubkeys = 1; */ + for (let i = 0; i < message.allSignerPubkeys.length; i++) + writer.tag(1, WireType.LengthDelimited).bytes(message.allSignerPubkeys[i]); + /* repeated signrpc.TweakDesc tweaks = 2; */ + for (let i = 0; i < message.tweaks.length; i++) + TweakDesc.internalBinaryWrite(message.tweaks[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* signrpc.TaprootTweakDesc taproot_tweak = 3; */ + if (message.taprootTweak) + TaprootTweakDesc.internalBinaryWrite(message.taprootTweak, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* signrpc.MuSig2Version version = 4; */ + if (message.version !== 0) + writer.tag(4, WireType.Varint).int32(message.version); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2CombineKeysRequest + */ +export const MuSig2CombineKeysRequest = new MuSig2CombineKeysRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2CombineKeysResponse$Type extends MessageType { + constructor() { + super("signrpc.MuSig2CombineKeysResponse", [ + { no: 1, name: "combined_key", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "taproot_internal_key", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 4, name: "version", kind: "enum", T: () => ["signrpc.MuSig2Version", MuSig2Version] } + ]); + } + create(value?: PartialMessage): MuSig2CombineKeysResponse { + const message = { combinedKey: new Uint8Array(0), taprootInternalKey: new Uint8Array(0), version: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2CombineKeysResponse): MuSig2CombineKeysResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes combined_key */ 1: + message.combinedKey = reader.bytes(); + break; + case /* bytes taproot_internal_key */ 2: + message.taprootInternalKey = reader.bytes(); + break; + case /* signrpc.MuSig2Version version */ 4: + message.version = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2CombineKeysResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes combined_key = 1; */ + if (message.combinedKey.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.combinedKey); + /* bytes taproot_internal_key = 2; */ + if (message.taprootInternalKey.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.taprootInternalKey); + /* signrpc.MuSig2Version version = 4; */ + if (message.version !== 0) + writer.tag(4, WireType.Varint).int32(message.version); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2CombineKeysResponse + */ +export const MuSig2CombineKeysResponse = new MuSig2CombineKeysResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2SessionRequest$Type extends MessageType { + constructor() { + super("signrpc.MuSig2SessionRequest", [ + { no: 1, name: "key_loc", kind: "message", T: () => KeyLocator }, + { no: 2, name: "all_signer_pubkeys", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ }, + { no: 3, name: "other_signer_public_nonces", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ }, + { no: 4, name: "tweaks", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TweakDesc }, + { no: 5, name: "taproot_tweak", kind: "message", T: () => TaprootTweakDesc }, + { no: 6, name: "version", kind: "enum", T: () => ["signrpc.MuSig2Version", MuSig2Version] }, + { no: 7, name: "pregenerated_local_nonce", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): MuSig2SessionRequest { + const message = { allSignerPubkeys: [], otherSignerPublicNonces: [], tweaks: [], version: 0, pregeneratedLocalNonce: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2SessionRequest): MuSig2SessionRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* signrpc.KeyLocator key_loc */ 1: + message.keyLoc = KeyLocator.internalBinaryRead(reader, reader.uint32(), options, message.keyLoc); + break; + case /* repeated bytes all_signer_pubkeys */ 2: + message.allSignerPubkeys.push(reader.bytes()); + break; + case /* repeated bytes other_signer_public_nonces */ 3: + message.otherSignerPublicNonces.push(reader.bytes()); + break; + case /* repeated signrpc.TweakDesc tweaks */ 4: + message.tweaks.push(TweakDesc.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* signrpc.TaprootTweakDesc taproot_tweak */ 5: + message.taprootTweak = TaprootTweakDesc.internalBinaryRead(reader, reader.uint32(), options, message.taprootTweak); + break; + case /* signrpc.MuSig2Version version */ 6: + message.version = reader.int32(); + break; + case /* bytes pregenerated_local_nonce */ 7: + message.pregeneratedLocalNonce = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2SessionRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* signrpc.KeyLocator key_loc = 1; */ + if (message.keyLoc) + KeyLocator.internalBinaryWrite(message.keyLoc, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* repeated bytes all_signer_pubkeys = 2; */ + for (let i = 0; i < message.allSignerPubkeys.length; i++) + writer.tag(2, WireType.LengthDelimited).bytes(message.allSignerPubkeys[i]); + /* repeated bytes other_signer_public_nonces = 3; */ + for (let i = 0; i < message.otherSignerPublicNonces.length; i++) + writer.tag(3, WireType.LengthDelimited).bytes(message.otherSignerPublicNonces[i]); + /* repeated signrpc.TweakDesc tweaks = 4; */ + for (let i = 0; i < message.tweaks.length; i++) + TweakDesc.internalBinaryWrite(message.tweaks[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* signrpc.TaprootTweakDesc taproot_tweak = 5; */ + if (message.taprootTweak) + TaprootTweakDesc.internalBinaryWrite(message.taprootTweak, writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + /* signrpc.MuSig2Version version = 6; */ + if (message.version !== 0) + writer.tag(6, WireType.Varint).int32(message.version); + /* bytes pregenerated_local_nonce = 7; */ + if (message.pregeneratedLocalNonce.length) + writer.tag(7, WireType.LengthDelimited).bytes(message.pregeneratedLocalNonce); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2SessionRequest + */ +export const MuSig2SessionRequest = new MuSig2SessionRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2SessionResponse$Type extends MessageType { + constructor() { + super("signrpc.MuSig2SessionResponse", [ + { no: 1, name: "session_id", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "combined_key", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 3, name: "taproot_internal_key", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 4, name: "local_public_nonces", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 5, name: "have_all_nonces", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 6, name: "version", kind: "enum", T: () => ["signrpc.MuSig2Version", MuSig2Version] } + ]); + } + create(value?: PartialMessage): MuSig2SessionResponse { + const message = { sessionId: new Uint8Array(0), combinedKey: new Uint8Array(0), taprootInternalKey: new Uint8Array(0), localPublicNonces: new Uint8Array(0), haveAllNonces: false, version: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2SessionResponse): MuSig2SessionResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes session_id */ 1: + message.sessionId = reader.bytes(); + break; + case /* bytes combined_key */ 2: + message.combinedKey = reader.bytes(); + break; + case /* bytes taproot_internal_key */ 3: + message.taprootInternalKey = reader.bytes(); + break; + case /* bytes local_public_nonces */ 4: + message.localPublicNonces = reader.bytes(); + break; + case /* bool have_all_nonces */ 5: + message.haveAllNonces = reader.bool(); + break; + case /* signrpc.MuSig2Version version */ 6: + message.version = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2SessionResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes session_id = 1; */ + if (message.sessionId.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.sessionId); + /* bytes combined_key = 2; */ + if (message.combinedKey.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.combinedKey); + /* bytes taproot_internal_key = 3; */ + if (message.taprootInternalKey.length) + writer.tag(3, WireType.LengthDelimited).bytes(message.taprootInternalKey); + /* bytes local_public_nonces = 4; */ + if (message.localPublicNonces.length) + writer.tag(4, WireType.LengthDelimited).bytes(message.localPublicNonces); + /* bool have_all_nonces = 5; */ + if (message.haveAllNonces !== false) + writer.tag(5, WireType.Varint).bool(message.haveAllNonces); + /* signrpc.MuSig2Version version = 6; */ + if (message.version !== 0) + writer.tag(6, WireType.Varint).int32(message.version); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2SessionResponse + */ +export const MuSig2SessionResponse = new MuSig2SessionResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2RegisterNoncesRequest$Type extends MessageType { + constructor() { + super("signrpc.MuSig2RegisterNoncesRequest", [ + { no: 1, name: "session_id", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 3, name: "other_signer_public_nonces", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): MuSig2RegisterNoncesRequest { + const message = { sessionId: new Uint8Array(0), otherSignerPublicNonces: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2RegisterNoncesRequest): MuSig2RegisterNoncesRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes session_id */ 1: + message.sessionId = reader.bytes(); + break; + case /* repeated bytes other_signer_public_nonces */ 3: + message.otherSignerPublicNonces.push(reader.bytes()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2RegisterNoncesRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes session_id = 1; */ + if (message.sessionId.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.sessionId); + /* repeated bytes other_signer_public_nonces = 3; */ + for (let i = 0; i < message.otherSignerPublicNonces.length; i++) + writer.tag(3, WireType.LengthDelimited).bytes(message.otherSignerPublicNonces[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2RegisterNoncesRequest + */ +export const MuSig2RegisterNoncesRequest = new MuSig2RegisterNoncesRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2RegisterNoncesResponse$Type extends MessageType { + constructor() { + super("signrpc.MuSig2RegisterNoncesResponse", [ + { no: 1, name: "have_all_nonces", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): MuSig2RegisterNoncesResponse { + const message = { haveAllNonces: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2RegisterNoncesResponse): MuSig2RegisterNoncesResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bool have_all_nonces */ 1: + message.haveAllNonces = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2RegisterNoncesResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bool have_all_nonces = 1; */ + if (message.haveAllNonces !== false) + writer.tag(1, WireType.Varint).bool(message.haveAllNonces); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2RegisterNoncesResponse + */ +export const MuSig2RegisterNoncesResponse = new MuSig2RegisterNoncesResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2SignRequest$Type extends MessageType { + constructor() { + super("signrpc.MuSig2SignRequest", [ + { no: 1, name: "session_id", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "message_digest", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 3, name: "cleanup", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): MuSig2SignRequest { + const message = { sessionId: new Uint8Array(0), messageDigest: new Uint8Array(0), cleanup: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2SignRequest): MuSig2SignRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes session_id */ 1: + message.sessionId = reader.bytes(); + break; + case /* bytes message_digest */ 2: + message.messageDigest = reader.bytes(); + break; + case /* bool cleanup */ 3: + message.cleanup = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2SignRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes session_id = 1; */ + if (message.sessionId.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.sessionId); + /* bytes message_digest = 2; */ + if (message.messageDigest.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.messageDigest); + /* bool cleanup = 3; */ + if (message.cleanup !== false) + writer.tag(3, WireType.Varint).bool(message.cleanup); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2SignRequest + */ +export const MuSig2SignRequest = new MuSig2SignRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2SignResponse$Type extends MessageType { + constructor() { + super("signrpc.MuSig2SignResponse", [ + { no: 1, name: "local_partial_signature", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): MuSig2SignResponse { + const message = { localPartialSignature: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2SignResponse): MuSig2SignResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes local_partial_signature */ 1: + message.localPartialSignature = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2SignResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes local_partial_signature = 1; */ + if (message.localPartialSignature.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.localPartialSignature); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2SignResponse + */ +export const MuSig2SignResponse = new MuSig2SignResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2CombineSigRequest$Type extends MessageType { + constructor() { + super("signrpc.MuSig2CombineSigRequest", [ + { no: 1, name: "session_id", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "other_partial_signatures", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): MuSig2CombineSigRequest { + const message = { sessionId: new Uint8Array(0), otherPartialSignatures: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2CombineSigRequest): MuSig2CombineSigRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes session_id */ 1: + message.sessionId = reader.bytes(); + break; + case /* repeated bytes other_partial_signatures */ 2: + message.otherPartialSignatures.push(reader.bytes()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2CombineSigRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes session_id = 1; */ + if (message.sessionId.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.sessionId); + /* repeated bytes other_partial_signatures = 2; */ + for (let i = 0; i < message.otherPartialSignatures.length; i++) + writer.tag(2, WireType.LengthDelimited).bytes(message.otherPartialSignatures[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2CombineSigRequest + */ +export const MuSig2CombineSigRequest = new MuSig2CombineSigRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2CombineSigResponse$Type extends MessageType { + constructor() { + super("signrpc.MuSig2CombineSigResponse", [ + { no: 1, name: "have_all_signatures", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 2, name: "final_signature", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): MuSig2CombineSigResponse { + const message = { haveAllSignatures: false, finalSignature: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2CombineSigResponse): MuSig2CombineSigResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bool have_all_signatures */ 1: + message.haveAllSignatures = reader.bool(); + break; + case /* bytes final_signature */ 2: + message.finalSignature = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2CombineSigResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bool have_all_signatures = 1; */ + if (message.haveAllSignatures !== false) + writer.tag(1, WireType.Varint).bool(message.haveAllSignatures); + /* bytes final_signature = 2; */ + if (message.finalSignature.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.finalSignature); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2CombineSigResponse + */ +export const MuSig2CombineSigResponse = new MuSig2CombineSigResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2CleanupRequest$Type extends MessageType { + constructor() { + super("signrpc.MuSig2CleanupRequest", [ + { no: 1, name: "session_id", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): MuSig2CleanupRequest { + const message = { sessionId: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2CleanupRequest): MuSig2CleanupRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes session_id */ 1: + message.sessionId = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: MuSig2CleanupRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes session_id = 1; */ + if (message.sessionId.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.sessionId); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2CleanupRequest + */ +export const MuSig2CleanupRequest = new MuSig2CleanupRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class MuSig2CleanupResponse$Type extends MessageType { + constructor() { + super("signrpc.MuSig2CleanupResponse", []); + } + create(value?: PartialMessage): MuSig2CleanupResponse { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MuSig2CleanupResponse): MuSig2CleanupResponse { + return target ?? this.create(); + } + internalBinaryWrite(message: MuSig2CleanupResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message signrpc.MuSig2CleanupResponse + */ +export const MuSig2CleanupResponse = new MuSig2CleanupResponse$Type(); +/** + * @generated ServiceType for protobuf service signrpc.Signer + */ +export const Signer = new ServiceType("signrpc.Signer", [ + { name: "SignOutputRaw", options: {}, I: SignReq, O: SignResp }, + { name: "ComputeInputScript", options: {}, I: SignReq, O: InputScriptResp }, + { name: "SignMessage", options: {}, I: SignMessageReq, O: SignMessageResp }, + { name: "VerifyMessage", options: {}, I: VerifyMessageReq, O: VerifyMessageResp }, + { name: "DeriveSharedKey", options: {}, I: SharedKeyRequest, O: SharedKeyResponse }, + { name: "MuSig2CombineKeys", options: {}, I: MuSig2CombineKeysRequest, O: MuSig2CombineKeysResponse }, + { name: "MuSig2CreateSession", options: {}, I: MuSig2SessionRequest, O: MuSig2SessionResponse }, + { name: "MuSig2RegisterNonces", options: {}, I: MuSig2RegisterNoncesRequest, O: MuSig2RegisterNoncesResponse }, + { name: "MuSig2Sign", options: {}, I: MuSig2SignRequest, O: MuSig2SignResponse }, + { name: "MuSig2CombineSig", options: {}, I: MuSig2CombineSigRequest, O: MuSig2CombineSigResponse }, + { name: "MuSig2Cleanup", options: {}, I: MuSig2CleanupRequest, O: MuSig2CleanupResponse } +]); diff --git a/proto/lnd/walletkit.client.ts b/proto/lnd/walletkit.client.ts new file mode 100644 index 000000000..f47734ab1 --- /dev/null +++ b/proto/lnd/walletkit.client.ts @@ -0,0 +1,958 @@ +// @generated by protobuf-ts 2.8.1 +// @generated from protobuf file "walletkit.proto" (package "walletrpc", syntax proto3) +// tslint:disable +import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; +import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; +import { WalletKit } from "./walletkit"; +import type { FinalizePsbtResponse } from "./walletkit"; +import type { FinalizePsbtRequest } from "./walletkit"; +import type { SignPsbtResponse } from "./walletkit"; +import type { SignPsbtRequest } from "./walletkit"; +import type { FundPsbtResponse } from "./walletkit"; +import type { FundPsbtRequest } from "./walletkit"; +import type { LabelTransactionResponse } from "./walletkit"; +import type { LabelTransactionRequest } from "./walletkit"; +import type { ListSweepsResponse } from "./walletkit"; +import type { ListSweepsRequest } from "./walletkit"; +import type { BumpForceCloseFeeResponse } from "./walletkit"; +import type { BumpForceCloseFeeRequest } from "./walletkit"; +import type { BumpFeeResponse } from "./walletkit"; +import type { BumpFeeRequest } from "./walletkit"; +import type { PendingSweepsResponse } from "./walletkit"; +import type { PendingSweepsRequest } from "./walletkit"; +import type { EstimateFeeResponse } from "./walletkit"; +import type { EstimateFeeRequest } from "./walletkit"; +import type { SendOutputsResponse } from "./walletkit"; +import type { SendOutputsRequest } from "./walletkit"; +import type { RemoveTransactionResponse } from "./walletkit"; +import type { PublishResponse } from "./walletkit"; +import type { Transaction as Transaction$ } from "./walletkit"; +import type { ImportTapscriptResponse } from "./walletkit"; +import type { ImportTapscriptRequest } from "./walletkit"; +import type { ImportPublicKeyResponse } from "./walletkit"; +import type { ImportPublicKeyRequest } from "./walletkit"; +import type { ImportAccountResponse } from "./walletkit"; +import type { ImportAccountRequest } from "./walletkit"; +import type { VerifyMessageWithAddrResponse } from "./walletkit"; +import type { VerifyMessageWithAddrRequest } from "./walletkit"; +import type { SignMessageWithAddrResponse } from "./walletkit"; +import type { SignMessageWithAddrRequest } from "./walletkit"; +import type { ListAddressesResponse } from "./walletkit"; +import type { ListAddressesRequest } from "./walletkit"; +import type { RequiredReserveResponse } from "./walletkit"; +import type { RequiredReserveRequest } from "./walletkit"; +import type { ListAccountsResponse } from "./walletkit"; +import type { ListAccountsRequest } from "./walletkit"; +import type { Transaction } from "./lightning"; +import type { GetTransactionRequest } from "./walletkit"; +import type { AddrResponse } from "./walletkit"; +import type { AddrRequest } from "./walletkit"; +import type { KeyLocator } from "./signer"; +import type { KeyDescriptor } from "./signer"; +import type { KeyReq } from "./walletkit"; +import type { ListLeasesResponse } from "./walletkit"; +import type { ListLeasesRequest } from "./walletkit"; +import type { ReleaseOutputResponse } from "./walletkit"; +import type { ReleaseOutputRequest } from "./walletkit"; +import type { LeaseOutputResponse } from "./walletkit"; +import type { LeaseOutputRequest } from "./walletkit"; +import { stackIntercept } from "@protobuf-ts/runtime-rpc"; +import type { ListUnspentResponse } from "./walletkit"; +import type { ListUnspentRequest } from "./walletkit"; +import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; +import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; +// +// Comments in this file will be directly parsed into the API +// Documentation as descriptions of the associated method, message, or field. +// These descriptions should go right above the definition of the object, and +// can be in either block or // comment format. +// +// An RPC method can be matched to an lncli command by placing a line in the +// beginning of the description in exactly the following format: +// lncli: `methodname` +// +// Failure to specify the exact name of the command will cause documentation +// generation to fail. +// +// More information on how exactly the gRPC documentation is generated from +// this proto file can be found here: +// https://github.com/lightninglabs/lightning-api + +/** + * WalletKit is a service that gives access to the core functionalities of the + * daemon's wallet. + * + * @generated from protobuf service walletrpc.WalletKit + */ +export interface IWalletKitClient { + /** + * + * ListUnspent returns a list of all utxos spendable by the wallet with a + * number of confirmations between the specified minimum and maximum. By + * default, all utxos are listed. To list only the unconfirmed utxos, set + * the unconfirmed_only to true. + * + * @generated from protobuf rpc: ListUnspent(walletrpc.ListUnspentRequest) returns (walletrpc.ListUnspentResponse); + */ + listUnspent(input: ListUnspentRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet leaseoutput` + * LeaseOutput locks an output to the given ID, preventing it from being + * available for any future coin selection attempts. The absolute time of the + * lock's expiration is returned. The expiration of the lock can be extended by + * successive invocations of this RPC. Outputs can be unlocked before their + * expiration through `ReleaseOutput`. + * + * @generated from protobuf rpc: LeaseOutput(walletrpc.LeaseOutputRequest) returns (walletrpc.LeaseOutputResponse); + */ + leaseOutput(input: LeaseOutputRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet releaseoutput` + * ReleaseOutput unlocks an output, allowing it to be available for coin + * selection if it remains unspent. The ID should match the one used to + * originally lock the output. + * + * @generated from protobuf rpc: ReleaseOutput(walletrpc.ReleaseOutputRequest) returns (walletrpc.ReleaseOutputResponse); + */ + releaseOutput(input: ReleaseOutputRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet listleases` + * ListLeases lists all currently locked utxos. + * + * @generated from protobuf rpc: ListLeases(walletrpc.ListLeasesRequest) returns (walletrpc.ListLeasesResponse); + */ + listLeases(input: ListLeasesRequest, options?: RpcOptions): UnaryCall; + /** + * + * DeriveNextKey attempts to derive the *next* key within the key family + * (account in BIP43) specified. This method should return the next external + * child within this branch. + * + * @generated from protobuf rpc: DeriveNextKey(walletrpc.KeyReq) returns (signrpc.KeyDescriptor); + */ + deriveNextKey(input: KeyReq, options?: RpcOptions): UnaryCall; + /** + * + * DeriveKey attempts to derive an arbitrary key specified by the passed + * KeyLocator. + * + * @generated from protobuf rpc: DeriveKey(signrpc.KeyLocator) returns (signrpc.KeyDescriptor); + */ + deriveKey(input: KeyLocator, options?: RpcOptions): UnaryCall; + /** + * + * NextAddr returns the next unused address within the wallet. + * + * @generated from protobuf rpc: NextAddr(walletrpc.AddrRequest) returns (walletrpc.AddrResponse); + */ + nextAddr(input: AddrRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet gettx` + * GetTransaction returns details for a transaction found in the wallet. + * + * @generated from protobuf rpc: GetTransaction(walletrpc.GetTransactionRequest) returns (lnrpc.Transaction); + */ + getTransaction(input: GetTransactionRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet accounts list` + * ListAccounts retrieves all accounts belonging to the wallet by default. A + * name and key scope filter can be provided to filter through all of the + * wallet accounts and return only those matching. + * + * @generated from protobuf rpc: ListAccounts(walletrpc.ListAccountsRequest) returns (walletrpc.ListAccountsResponse); + */ + listAccounts(input: ListAccountsRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet requiredreserve` + * RequiredReserve returns the minimum amount of satoshis that should be kept + * in the wallet in order to fee bump anchor channels if necessary. The value + * scales with the number of public anchor channels but is capped at a maximum. + * + * @generated from protobuf rpc: RequiredReserve(walletrpc.RequiredReserveRequest) returns (walletrpc.RequiredReserveResponse); + */ + requiredReserve(input: RequiredReserveRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet addresses list` + * ListAddresses retrieves all the addresses along with their balance. An + * account name filter can be provided to filter through all of the + * wallet accounts and return the addresses of only those matching. + * + * @generated from protobuf rpc: ListAddresses(walletrpc.ListAddressesRequest) returns (walletrpc.ListAddressesResponse); + */ + listAddresses(input: ListAddressesRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet addresses signmessage` + * SignMessageWithAddr returns the compact signature (base64 encoded) created + * with the private key of the provided address. This requires the address + * to be solely based on a public key lock (no scripts). Obviously the internal + * lnd wallet has to possess the private key of the address otherwise + * an error is returned. + * + * This method aims to provide full compatibility with the bitcoin-core and + * btcd implementation. Bitcoin-core's algorithm is not specified in a + * BIP and only applicable for legacy addresses. This method enhances the + * signing for additional address types: P2WKH, NP2WKH, P2TR. + * For P2TR addresses this represents a special case. ECDSA is used to create + * a compact signature which makes the public key of the signature recoverable. + * + * @generated from protobuf rpc: SignMessageWithAddr(walletrpc.SignMessageWithAddrRequest) returns (walletrpc.SignMessageWithAddrResponse); + */ + signMessageWithAddr(input: SignMessageWithAddrRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet addresses verifymessage` + * VerifyMessageWithAddr returns the validity and the recovered public key of + * the provided compact signature (base64 encoded). The verification is + * twofold. First the validity of the signature itself is checked and then + * it is verified that the recovered public key of the signature equals + * the public key of the provided address. There is no dependence on the + * private key of the address therefore also external addresses are allowed + * to verify signatures. + * Supported address types are P2PKH, P2WKH, NP2WKH, P2TR. + * + * This method is the counterpart of the related signing method + * (SignMessageWithAddr) and aims to provide full compatibility to + * bitcoin-core's implementation. Although bitcoin-core/btcd only provide + * this functionality for legacy addresses this function enhances it to + * the address types: P2PKH, P2WKH, NP2WKH, P2TR. + * + * The verification for P2TR addresses is a special case and requires the + * ECDSA compact signature to compare the reovered public key to the internal + * taproot key. The compact ECDSA signature format was used because there + * are still no known compact signature schemes for schnorr signatures. + * + * @generated from protobuf rpc: VerifyMessageWithAddr(walletrpc.VerifyMessageWithAddrRequest) returns (walletrpc.VerifyMessageWithAddrResponse); + */ + verifyMessageWithAddr(input: VerifyMessageWithAddrRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet accounts import` + * ImportAccount imports an account backed by an account extended public key. + * The master key fingerprint denotes the fingerprint of the root key + * corresponding to the account public key (also known as the key with + * derivation path m/). This may be required by some hardware wallets for + * proper identification and signing. + * + * The address type can usually be inferred from the key's version, but may be + * required for certain keys to map them into the proper scope. + * + * For BIP-0044 keys, an address type must be specified as we intend to not + * support importing BIP-0044 keys into the wallet using the legacy + * pay-to-pubkey-hash (P2PKH) scheme. A nested witness address type will force + * the standard BIP-0049 derivation scheme, while a witness address type will + * force the standard BIP-0084 derivation scheme. + * + * For BIP-0049 keys, an address type must also be specified to make a + * distinction between the standard BIP-0049 address schema (nested witness + * pubkeys everywhere) and our own BIP-0049Plus address schema (nested pubkeys + * externally, witness pubkeys internally). + * + * NOTE: Events (deposits/spends) for keys derived from an account will only be + * detected by lnd if they happen after the import. Rescans to detect past + * events will be supported later on. + * + * @generated from protobuf rpc: ImportAccount(walletrpc.ImportAccountRequest) returns (walletrpc.ImportAccountResponse); + */ + importAccount(input: ImportAccountRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet accounts import-pubkey` + * ImportPublicKey imports a public key as watch-only into the wallet. The + * public key is converted into a simple address of the given type and that + * address script is watched on chain. For Taproot keys, this will only watch + * the BIP-0086 style output script. Use ImportTapscript for more advanced key + * spend or script spend outputs. + * + * NOTE: Events (deposits/spends) for a key will only be detected by lnd if + * they happen after the import. Rescans to detect past events will be + * supported later on. + * + * @generated from protobuf rpc: ImportPublicKey(walletrpc.ImportPublicKeyRequest) returns (walletrpc.ImportPublicKeyResponse); + */ + importPublicKey(input: ImportPublicKeyRequest, options?: RpcOptions): UnaryCall; + /** + * + * ImportTapscript imports a Taproot script and internal key and adds the + * resulting Taproot output key as a watch-only output script into the wallet. + * For BIP-0086 style Taproot keys (no root hash commitment and no script spend + * path) use ImportPublicKey. + * + * NOTE: Events (deposits/spends) for a key will only be detected by lnd if + * they happen after the import. Rescans to detect past events will be + * supported later on. + * + * NOTE: Taproot keys imported through this RPC currently _cannot_ be used for + * funding PSBTs. Only tracking the balance and UTXOs is currently supported. + * + * @generated from protobuf rpc: ImportTapscript(walletrpc.ImportTapscriptRequest) returns (walletrpc.ImportTapscriptResponse); + */ + importTapscript(input: ImportTapscriptRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet publishtx` + * PublishTransaction attempts to publish the passed transaction to the + * network. Once this returns without an error, the wallet will continually + * attempt to re-broadcast the transaction on start up, until it enters the + * chain. + * + * @generated from protobuf rpc: PublishTransaction(walletrpc.Transaction) returns (walletrpc.PublishResponse); + */ + publishTransaction(input: Transaction$, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet removetx` + * RemoveTransaction attempts to remove the provided transaction from the + * internal transaction store of the wallet. + * + * @generated from protobuf rpc: RemoveTransaction(walletrpc.GetTransactionRequest) returns (walletrpc.RemoveTransactionResponse); + */ + removeTransaction(input: GetTransactionRequest, options?: RpcOptions): UnaryCall; + /** + * + * SendOutputs is similar to the existing sendmany call in Bitcoind, and + * allows the caller to create a transaction that sends to several outputs at + * once. This is ideal when wanting to batch create a set of transactions. + * + * @generated from protobuf rpc: SendOutputs(walletrpc.SendOutputsRequest) returns (walletrpc.SendOutputsResponse); + */ + sendOutputs(input: SendOutputsRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet estimatefeerate` + * EstimateFee attempts to query the internal fee estimator of the wallet to + * determine the fee (in sat/kw) to attach to a transaction in order to + * achieve the confirmation target. + * + * @generated from protobuf rpc: EstimateFee(walletrpc.EstimateFeeRequest) returns (walletrpc.EstimateFeeResponse); + */ + estimateFee(input: EstimateFeeRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet pendingsweeps` + * PendingSweeps returns lists of on-chain outputs that lnd is currently + * attempting to sweep within its central batching engine. Outputs with similar + * fee rates are batched together in order to sweep them within a single + * transaction. + * + * NOTE: Some of the fields within PendingSweepsRequest are not guaranteed to + * remain supported. This is an advanced API that depends on the internals of + * the UtxoSweeper, so things may change. + * + * @generated from protobuf rpc: PendingSweeps(walletrpc.PendingSweepsRequest) returns (walletrpc.PendingSweepsResponse); + */ + pendingSweeps(input: PendingSweepsRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet bumpfee` + * BumpFee is an endpoint that allows users to interact with lnd's sweeper + * directly. It takes an outpoint from an unconfirmed transaction and sends it + * to the sweeper for potential fee bumping. Depending on whether the outpoint + * has been registered in the sweeper (an existing input, e.g., an anchor + * output) or not (a new input, e.g., an unconfirmed wallet utxo), this will + * either be an RBF or CPFP attempt. + * + * When receiving an input, lnd’s sweeper needs to understand its time + * sensitivity to make economical fee bumps - internally a fee function is + * created using the deadline and budget to guide the process. When the + * deadline is approaching, the fee function will increase the fee rate and + * perform an RBF. + * + * When a force close happens, all the outputs from the force closing + * transaction will be registered in the sweeper. The sweeper will then handle + * the creation, publish, and fee bumping of the sweeping transactions. + * Everytime a new block comes in, unless the sweeping transaction is + * confirmed, an RBF is attempted. To interfere with this automatic process, + * users can use BumpFee to specify customized fee rate, budget, deadline, and + * whether the sweep should happen immediately. It's recommended to call + * `ListSweeps` to understand the shape of the existing sweeping transaction + * first - depending on the number of inputs in this transaction, the RBF + * requirements can be quite different. + * + * This RPC also serves useful when wanting to perform a Child-Pays-For-Parent + * (CPFP), where the child transaction pays for its parent's fee. This can be + * done by specifying an outpoint within the low fee transaction that is under + * the control of the wallet. + * + * @generated from protobuf rpc: BumpFee(walletrpc.BumpFeeRequest) returns (walletrpc.BumpFeeResponse); + */ + bumpFee(input: BumpFeeRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet bumpforceclosefee` + * BumpForceCloseFee is an endpoint that allows users to bump the fee of a + * channel force close. This only works for channels with option_anchors. + * + * @generated from protobuf rpc: BumpForceCloseFee(walletrpc.BumpForceCloseFeeRequest) returns (walletrpc.BumpForceCloseFeeResponse); + */ + bumpForceCloseFee(input: BumpForceCloseFeeRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet listsweeps` + * ListSweeps returns a list of the sweep transactions our node has produced. + * Note that these sweeps may not be confirmed yet, as we record sweeps on + * broadcast, not confirmation. + * + * @generated from protobuf rpc: ListSweeps(walletrpc.ListSweepsRequest) returns (walletrpc.ListSweepsResponse); + */ + listSweeps(input: ListSweepsRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet labeltx` + * LabelTransaction adds a label to a transaction. If the transaction already + * has a label the call will fail unless the overwrite bool is set. This will + * overwrite the existing transaction label. Labels must not be empty, and + * cannot exceed 500 characters. + * + * @generated from protobuf rpc: LabelTransaction(walletrpc.LabelTransactionRequest) returns (walletrpc.LabelTransactionResponse); + */ + labelTransaction(input: LabelTransactionRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet psbt fund` + * FundPsbt creates a fully populated PSBT that contains enough inputs to fund + * the outputs specified in the template. There are three ways a user can + * specify what we call the template (a list of inputs and outputs to use in + * the PSBT): Either as a PSBT packet directly with no coin selection (using + * the legacy "psbt" field), a PSBT with advanced coin selection support (using + * the new "coin_select" field) or as a raw RPC message (using the "raw" + * field). + * The legacy "psbt" and "raw" modes, the following restrictions apply: + * 1. If there are no inputs specified in the template, coin selection is + * performed automatically. + * 2. If the template does contain any inputs, it is assumed that full + * coin selection happened externally and no additional inputs are added. If + * the specified inputs aren't enough to fund the outputs with the given fee + * rate, an error is returned. + * + * The new "coin_select" mode does not have these restrictions and allows the + * user to specify a PSBT with inputs and outputs and still perform coin + * selection on top of that. + * For all modes this RPC requires any inputs that are specified to be locked + * by the user (if they belong to this node in the first place). + * + * After either selecting or verifying the inputs, all input UTXOs are locked + * with an internal app ID. + * + * NOTE: If this method returns without an error, it is the caller's + * responsibility to either spend the locked UTXOs (by finalizing and then + * publishing the transaction) or to unlock/release the locked UTXOs in case of + * an error on the caller's side. + * + * @generated from protobuf rpc: FundPsbt(walletrpc.FundPsbtRequest) returns (walletrpc.FundPsbtResponse); + */ + fundPsbt(input: FundPsbtRequest, options?: RpcOptions): UnaryCall; + /** + * + * SignPsbt expects a partial transaction with all inputs and outputs fully + * declared and tries to sign all unsigned inputs that have all required fields + * (UTXO information, BIP32 derivation information, witness or sig scripts) + * set. + * If no error is returned, the PSBT is ready to be given to the next signer or + * to be finalized if lnd was the last signer. + * + * NOTE: This RPC only signs inputs (and only those it can sign), it does not + * perform any other tasks (such as coin selection, UTXO locking or + * input/output/fee value validation, PSBT finalization). Any input that is + * incomplete will be skipped. + * + * @generated from protobuf rpc: SignPsbt(walletrpc.SignPsbtRequest) returns (walletrpc.SignPsbtResponse); + */ + signPsbt(input: SignPsbtRequest, options?: RpcOptions): UnaryCall; + /** + * lncli: `wallet psbt finalize` + * FinalizePsbt expects a partial transaction with all inputs and outputs fully + * declared and tries to sign all inputs that belong to the wallet. Lnd must be + * the last signer of the transaction. That means, if there are any unsigned + * non-witness inputs or inputs without UTXO information attached or inputs + * without witness data that do not belong to lnd's wallet, this method will + * fail. If no error is returned, the PSBT is ready to be extracted and the + * final TX within to be broadcast. + * + * NOTE: This method does NOT publish the transaction once finalized. It is the + * caller's responsibility to either publish the transaction on success or + * unlock/release any locked UTXOs in case of an error in this method. + * + * @generated from protobuf rpc: FinalizePsbt(walletrpc.FinalizePsbtRequest) returns (walletrpc.FinalizePsbtResponse); + */ + finalizePsbt(input: FinalizePsbtRequest, options?: RpcOptions): UnaryCall; +} +// +// Comments in this file will be directly parsed into the API +// Documentation as descriptions of the associated method, message, or field. +// These descriptions should go right above the definition of the object, and +// can be in either block or // comment format. +// +// An RPC method can be matched to an lncli command by placing a line in the +// beginning of the description in exactly the following format: +// lncli: `methodname` +// +// Failure to specify the exact name of the command will cause documentation +// generation to fail. +// +// More information on how exactly the gRPC documentation is generated from +// this proto file can be found here: +// https://github.com/lightninglabs/lightning-api + +/** + * WalletKit is a service that gives access to the core functionalities of the + * daemon's wallet. + * + * @generated from protobuf service walletrpc.WalletKit + */ +export class WalletKitClient implements IWalletKitClient, ServiceInfo { + typeName = WalletKit.typeName; + methods = WalletKit.methods; + options = WalletKit.options; + constructor(private readonly _transport: RpcTransport) { + } + /** + * + * ListUnspent returns a list of all utxos spendable by the wallet with a + * number of confirmations between the specified minimum and maximum. By + * default, all utxos are listed. To list only the unconfirmed utxos, set + * the unconfirmed_only to true. + * + * @generated from protobuf rpc: ListUnspent(walletrpc.ListUnspentRequest) returns (walletrpc.ListUnspentResponse); + */ + listUnspent(input: ListUnspentRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[0], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet leaseoutput` + * LeaseOutput locks an output to the given ID, preventing it from being + * available for any future coin selection attempts. The absolute time of the + * lock's expiration is returned. The expiration of the lock can be extended by + * successive invocations of this RPC. Outputs can be unlocked before their + * expiration through `ReleaseOutput`. + * + * @generated from protobuf rpc: LeaseOutput(walletrpc.LeaseOutputRequest) returns (walletrpc.LeaseOutputResponse); + */ + leaseOutput(input: LeaseOutputRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[1], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet releaseoutput` + * ReleaseOutput unlocks an output, allowing it to be available for coin + * selection if it remains unspent. The ID should match the one used to + * originally lock the output. + * + * @generated from protobuf rpc: ReleaseOutput(walletrpc.ReleaseOutputRequest) returns (walletrpc.ReleaseOutputResponse); + */ + releaseOutput(input: ReleaseOutputRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[2], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet listleases` + * ListLeases lists all currently locked utxos. + * + * @generated from protobuf rpc: ListLeases(walletrpc.ListLeasesRequest) returns (walletrpc.ListLeasesResponse); + */ + listLeases(input: ListLeasesRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[3], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * DeriveNextKey attempts to derive the *next* key within the key family + * (account in BIP43) specified. This method should return the next external + * child within this branch. + * + * @generated from protobuf rpc: DeriveNextKey(walletrpc.KeyReq) returns (signrpc.KeyDescriptor); + */ + deriveNextKey(input: KeyReq, options?: RpcOptions): UnaryCall { + const method = this.methods[4], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * DeriveKey attempts to derive an arbitrary key specified by the passed + * KeyLocator. + * + * @generated from protobuf rpc: DeriveKey(signrpc.KeyLocator) returns (signrpc.KeyDescriptor); + */ + deriveKey(input: KeyLocator, options?: RpcOptions): UnaryCall { + const method = this.methods[5], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * NextAddr returns the next unused address within the wallet. + * + * @generated from protobuf rpc: NextAddr(walletrpc.AddrRequest) returns (walletrpc.AddrResponse); + */ + nextAddr(input: AddrRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[6], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet gettx` + * GetTransaction returns details for a transaction found in the wallet. + * + * @generated from protobuf rpc: GetTransaction(walletrpc.GetTransactionRequest) returns (lnrpc.Transaction); + */ + getTransaction(input: GetTransactionRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[7], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet accounts list` + * ListAccounts retrieves all accounts belonging to the wallet by default. A + * name and key scope filter can be provided to filter through all of the + * wallet accounts and return only those matching. + * + * @generated from protobuf rpc: ListAccounts(walletrpc.ListAccountsRequest) returns (walletrpc.ListAccountsResponse); + */ + listAccounts(input: ListAccountsRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[8], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet requiredreserve` + * RequiredReserve returns the minimum amount of satoshis that should be kept + * in the wallet in order to fee bump anchor channels if necessary. The value + * scales with the number of public anchor channels but is capped at a maximum. + * + * @generated from protobuf rpc: RequiredReserve(walletrpc.RequiredReserveRequest) returns (walletrpc.RequiredReserveResponse); + */ + requiredReserve(input: RequiredReserveRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[9], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet addresses list` + * ListAddresses retrieves all the addresses along with their balance. An + * account name filter can be provided to filter through all of the + * wallet accounts and return the addresses of only those matching. + * + * @generated from protobuf rpc: ListAddresses(walletrpc.ListAddressesRequest) returns (walletrpc.ListAddressesResponse); + */ + listAddresses(input: ListAddressesRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[10], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet addresses signmessage` + * SignMessageWithAddr returns the compact signature (base64 encoded) created + * with the private key of the provided address. This requires the address + * to be solely based on a public key lock (no scripts). Obviously the internal + * lnd wallet has to possess the private key of the address otherwise + * an error is returned. + * + * This method aims to provide full compatibility with the bitcoin-core and + * btcd implementation. Bitcoin-core's algorithm is not specified in a + * BIP and only applicable for legacy addresses. This method enhances the + * signing for additional address types: P2WKH, NP2WKH, P2TR. + * For P2TR addresses this represents a special case. ECDSA is used to create + * a compact signature which makes the public key of the signature recoverable. + * + * @generated from protobuf rpc: SignMessageWithAddr(walletrpc.SignMessageWithAddrRequest) returns (walletrpc.SignMessageWithAddrResponse); + */ + signMessageWithAddr(input: SignMessageWithAddrRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[11], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet addresses verifymessage` + * VerifyMessageWithAddr returns the validity and the recovered public key of + * the provided compact signature (base64 encoded). The verification is + * twofold. First the validity of the signature itself is checked and then + * it is verified that the recovered public key of the signature equals + * the public key of the provided address. There is no dependence on the + * private key of the address therefore also external addresses are allowed + * to verify signatures. + * Supported address types are P2PKH, P2WKH, NP2WKH, P2TR. + * + * This method is the counterpart of the related signing method + * (SignMessageWithAddr) and aims to provide full compatibility to + * bitcoin-core's implementation. Although bitcoin-core/btcd only provide + * this functionality for legacy addresses this function enhances it to + * the address types: P2PKH, P2WKH, NP2WKH, P2TR. + * + * The verification for P2TR addresses is a special case and requires the + * ECDSA compact signature to compare the reovered public key to the internal + * taproot key. The compact ECDSA signature format was used because there + * are still no known compact signature schemes for schnorr signatures. + * + * @generated from protobuf rpc: VerifyMessageWithAddr(walletrpc.VerifyMessageWithAddrRequest) returns (walletrpc.VerifyMessageWithAddrResponse); + */ + verifyMessageWithAddr(input: VerifyMessageWithAddrRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[12], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet accounts import` + * ImportAccount imports an account backed by an account extended public key. + * The master key fingerprint denotes the fingerprint of the root key + * corresponding to the account public key (also known as the key with + * derivation path m/). This may be required by some hardware wallets for + * proper identification and signing. + * + * The address type can usually be inferred from the key's version, but may be + * required for certain keys to map them into the proper scope. + * + * For BIP-0044 keys, an address type must be specified as we intend to not + * support importing BIP-0044 keys into the wallet using the legacy + * pay-to-pubkey-hash (P2PKH) scheme. A nested witness address type will force + * the standard BIP-0049 derivation scheme, while a witness address type will + * force the standard BIP-0084 derivation scheme. + * + * For BIP-0049 keys, an address type must also be specified to make a + * distinction between the standard BIP-0049 address schema (nested witness + * pubkeys everywhere) and our own BIP-0049Plus address schema (nested pubkeys + * externally, witness pubkeys internally). + * + * NOTE: Events (deposits/spends) for keys derived from an account will only be + * detected by lnd if they happen after the import. Rescans to detect past + * events will be supported later on. + * + * @generated from protobuf rpc: ImportAccount(walletrpc.ImportAccountRequest) returns (walletrpc.ImportAccountResponse); + */ + importAccount(input: ImportAccountRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[13], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet accounts import-pubkey` + * ImportPublicKey imports a public key as watch-only into the wallet. The + * public key is converted into a simple address of the given type and that + * address script is watched on chain. For Taproot keys, this will only watch + * the BIP-0086 style output script. Use ImportTapscript for more advanced key + * spend or script spend outputs. + * + * NOTE: Events (deposits/spends) for a key will only be detected by lnd if + * they happen after the import. Rescans to detect past events will be + * supported later on. + * + * @generated from protobuf rpc: ImportPublicKey(walletrpc.ImportPublicKeyRequest) returns (walletrpc.ImportPublicKeyResponse); + */ + importPublicKey(input: ImportPublicKeyRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[14], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * ImportTapscript imports a Taproot script and internal key and adds the + * resulting Taproot output key as a watch-only output script into the wallet. + * For BIP-0086 style Taproot keys (no root hash commitment and no script spend + * path) use ImportPublicKey. + * + * NOTE: Events (deposits/spends) for a key will only be detected by lnd if + * they happen after the import. Rescans to detect past events will be + * supported later on. + * + * NOTE: Taproot keys imported through this RPC currently _cannot_ be used for + * funding PSBTs. Only tracking the balance and UTXOs is currently supported. + * + * @generated from protobuf rpc: ImportTapscript(walletrpc.ImportTapscriptRequest) returns (walletrpc.ImportTapscriptResponse); + */ + importTapscript(input: ImportTapscriptRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[15], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet publishtx` + * PublishTransaction attempts to publish the passed transaction to the + * network. Once this returns without an error, the wallet will continually + * attempt to re-broadcast the transaction on start up, until it enters the + * chain. + * + * @generated from protobuf rpc: PublishTransaction(walletrpc.Transaction) returns (walletrpc.PublishResponse); + */ + publishTransaction(input: Transaction$, options?: RpcOptions): UnaryCall { + const method = this.methods[16], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet removetx` + * RemoveTransaction attempts to remove the provided transaction from the + * internal transaction store of the wallet. + * + * @generated from protobuf rpc: RemoveTransaction(walletrpc.GetTransactionRequest) returns (walletrpc.RemoveTransactionResponse); + */ + removeTransaction(input: GetTransactionRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[17], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * SendOutputs is similar to the existing sendmany call in Bitcoind, and + * allows the caller to create a transaction that sends to several outputs at + * once. This is ideal when wanting to batch create a set of transactions. + * + * @generated from protobuf rpc: SendOutputs(walletrpc.SendOutputsRequest) returns (walletrpc.SendOutputsResponse); + */ + sendOutputs(input: SendOutputsRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[18], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet estimatefeerate` + * EstimateFee attempts to query the internal fee estimator of the wallet to + * determine the fee (in sat/kw) to attach to a transaction in order to + * achieve the confirmation target. + * + * @generated from protobuf rpc: EstimateFee(walletrpc.EstimateFeeRequest) returns (walletrpc.EstimateFeeResponse); + */ + estimateFee(input: EstimateFeeRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[19], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet pendingsweeps` + * PendingSweeps returns lists of on-chain outputs that lnd is currently + * attempting to sweep within its central batching engine. Outputs with similar + * fee rates are batched together in order to sweep them within a single + * transaction. + * + * NOTE: Some of the fields within PendingSweepsRequest are not guaranteed to + * remain supported. This is an advanced API that depends on the internals of + * the UtxoSweeper, so things may change. + * + * @generated from protobuf rpc: PendingSweeps(walletrpc.PendingSweepsRequest) returns (walletrpc.PendingSweepsResponse); + */ + pendingSweeps(input: PendingSweepsRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[20], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet bumpfee` + * BumpFee is an endpoint that allows users to interact with lnd's sweeper + * directly. It takes an outpoint from an unconfirmed transaction and sends it + * to the sweeper for potential fee bumping. Depending on whether the outpoint + * has been registered in the sweeper (an existing input, e.g., an anchor + * output) or not (a new input, e.g., an unconfirmed wallet utxo), this will + * either be an RBF or CPFP attempt. + * + * When receiving an input, lnd’s sweeper needs to understand its time + * sensitivity to make economical fee bumps - internally a fee function is + * created using the deadline and budget to guide the process. When the + * deadline is approaching, the fee function will increase the fee rate and + * perform an RBF. + * + * When a force close happens, all the outputs from the force closing + * transaction will be registered in the sweeper. The sweeper will then handle + * the creation, publish, and fee bumping of the sweeping transactions. + * Everytime a new block comes in, unless the sweeping transaction is + * confirmed, an RBF is attempted. To interfere with this automatic process, + * users can use BumpFee to specify customized fee rate, budget, deadline, and + * whether the sweep should happen immediately. It's recommended to call + * `ListSweeps` to understand the shape of the existing sweeping transaction + * first - depending on the number of inputs in this transaction, the RBF + * requirements can be quite different. + * + * This RPC also serves useful when wanting to perform a Child-Pays-For-Parent + * (CPFP), where the child transaction pays for its parent's fee. This can be + * done by specifying an outpoint within the low fee transaction that is under + * the control of the wallet. + * + * @generated from protobuf rpc: BumpFee(walletrpc.BumpFeeRequest) returns (walletrpc.BumpFeeResponse); + */ + bumpFee(input: BumpFeeRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[21], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet bumpforceclosefee` + * BumpForceCloseFee is an endpoint that allows users to bump the fee of a + * channel force close. This only works for channels with option_anchors. + * + * @generated from protobuf rpc: BumpForceCloseFee(walletrpc.BumpForceCloseFeeRequest) returns (walletrpc.BumpForceCloseFeeResponse); + */ + bumpForceCloseFee(input: BumpForceCloseFeeRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[22], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet listsweeps` + * ListSweeps returns a list of the sweep transactions our node has produced. + * Note that these sweeps may not be confirmed yet, as we record sweeps on + * broadcast, not confirmation. + * + * @generated from protobuf rpc: ListSweeps(walletrpc.ListSweepsRequest) returns (walletrpc.ListSweepsResponse); + */ + listSweeps(input: ListSweepsRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[23], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet labeltx` + * LabelTransaction adds a label to a transaction. If the transaction already + * has a label the call will fail unless the overwrite bool is set. This will + * overwrite the existing transaction label. Labels must not be empty, and + * cannot exceed 500 characters. + * + * @generated from protobuf rpc: LabelTransaction(walletrpc.LabelTransactionRequest) returns (walletrpc.LabelTransactionResponse); + */ + labelTransaction(input: LabelTransactionRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[24], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet psbt fund` + * FundPsbt creates a fully populated PSBT that contains enough inputs to fund + * the outputs specified in the template. There are three ways a user can + * specify what we call the template (a list of inputs and outputs to use in + * the PSBT): Either as a PSBT packet directly with no coin selection (using + * the legacy "psbt" field), a PSBT with advanced coin selection support (using + * the new "coin_select" field) or as a raw RPC message (using the "raw" + * field). + * The legacy "psbt" and "raw" modes, the following restrictions apply: + * 1. If there are no inputs specified in the template, coin selection is + * performed automatically. + * 2. If the template does contain any inputs, it is assumed that full + * coin selection happened externally and no additional inputs are added. If + * the specified inputs aren't enough to fund the outputs with the given fee + * rate, an error is returned. + * + * The new "coin_select" mode does not have these restrictions and allows the + * user to specify a PSBT with inputs and outputs and still perform coin + * selection on top of that. + * For all modes this RPC requires any inputs that are specified to be locked + * by the user (if they belong to this node in the first place). + * + * After either selecting or verifying the inputs, all input UTXOs are locked + * with an internal app ID. + * + * NOTE: If this method returns without an error, it is the caller's + * responsibility to either spend the locked UTXOs (by finalizing and then + * publishing the transaction) or to unlock/release the locked UTXOs in case of + * an error on the caller's side. + * + * @generated from protobuf rpc: FundPsbt(walletrpc.FundPsbtRequest) returns (walletrpc.FundPsbtResponse); + */ + fundPsbt(input: FundPsbtRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[25], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * + * SignPsbt expects a partial transaction with all inputs and outputs fully + * declared and tries to sign all unsigned inputs that have all required fields + * (UTXO information, BIP32 derivation information, witness or sig scripts) + * set. + * If no error is returned, the PSBT is ready to be given to the next signer or + * to be finalized if lnd was the last signer. + * + * NOTE: This RPC only signs inputs (and only those it can sign), it does not + * perform any other tasks (such as coin selection, UTXO locking or + * input/output/fee value validation, PSBT finalization). Any input that is + * incomplete will be skipped. + * + * @generated from protobuf rpc: SignPsbt(walletrpc.SignPsbtRequest) returns (walletrpc.SignPsbtResponse); + */ + signPsbt(input: SignPsbtRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[26], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * lncli: `wallet psbt finalize` + * FinalizePsbt expects a partial transaction with all inputs and outputs fully + * declared and tries to sign all inputs that belong to the wallet. Lnd must be + * the last signer of the transaction. That means, if there are any unsigned + * non-witness inputs or inputs without UTXO information attached or inputs + * without witness data that do not belong to lnd's wallet, this method will + * fail. If no error is returned, the PSBT is ready to be extracted and the + * final TX within to be broadcast. + * + * NOTE: This method does NOT publish the transaction once finalized. It is the + * caller's responsibility to either publish the transaction on success or + * unlock/release any locked UTXOs in case of an error in this method. + * + * @generated from protobuf rpc: FinalizePsbt(walletrpc.FinalizePsbtRequest) returns (walletrpc.FinalizePsbtResponse); + */ + finalizePsbt(input: FinalizePsbtRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[27], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } +} diff --git a/proto/lnd/walletkit.ts b/proto/lnd/walletkit.ts new file mode 100644 index 000000000..18819bb73 --- /dev/null +++ b/proto/lnd/walletkit.ts @@ -0,0 +1,5641 @@ +// @generated by protobuf-ts 2.8.1 +// @generated from protobuf file "walletkit.proto" (package "walletrpc", syntax proto3) +// tslint:disable +import { Transaction as Transaction$ } from "./lightning"; +import { KeyLocator } from "./signer"; +import { KeyDescriptor } from "./signer"; +import { ServiceType } from "@protobuf-ts/runtime-rpc"; +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +import { TransactionDetails } from "./lightning"; +import { ChannelPoint } from "./lightning"; +import { CoinSelectionStrategy } from "./lightning"; +import { TxOut } from "./signer"; +import { OutPoint } from "./lightning"; +import { Utxo } from "./lightning"; +/** + * @generated from protobuf message walletrpc.ListUnspentRequest + */ +export interface ListUnspentRequest { + /** + * The minimum number of confirmations to be included. + * + * @generated from protobuf field: int32 min_confs = 1; + */ + minConfs: number; + /** + * The maximum number of confirmations to be included. + * + * @generated from protobuf field: int32 max_confs = 2; + */ + maxConfs: number; + /** + * An optional filter to only include outputs belonging to an account. + * + * @generated from protobuf field: string account = 3; + */ + account: string; + /** + * + * When min_confs and max_confs are zero, setting false implicitly + * overrides max_confs to be MaxInt32, otherwise max_confs remains + * zero. An error is returned if the value is true and both min_confs + * and max_confs are non-zero. (default: false) + * + * @generated from protobuf field: bool unconfirmed_only = 4; + */ + unconfirmedOnly: boolean; +} +/** + * @generated from protobuf message walletrpc.ListUnspentResponse + */ +export interface ListUnspentResponse { + /** + * A list of utxos satisfying the specified number of confirmations. + * + * @generated from protobuf field: repeated lnrpc.Utxo utxos = 1; + */ + utxos: Utxo[]; +} +/** + * @generated from protobuf message walletrpc.LeaseOutputRequest + */ +export interface LeaseOutputRequest { + /** + * + * An ID of 32 random bytes that must be unique for each distinct application + * using this RPC which will be used to bound the output lease to. + * + * @generated from protobuf field: bytes id = 1; + */ + id: Uint8Array; + /** + * The identifying outpoint of the output being leased. + * + * @generated from protobuf field: lnrpc.OutPoint outpoint = 2; + */ + outpoint?: OutPoint; + /** + * The time in seconds before the lock expires. If set to zero, the default + * lock duration is used. + * + * @generated from protobuf field: uint64 expiration_seconds = 3; + */ + expirationSeconds: bigint; +} +/** + * @generated from protobuf message walletrpc.LeaseOutputResponse + */ +export interface LeaseOutputResponse { + /** + * + * The absolute expiration of the output lease represented as a unix timestamp. + * + * @generated from protobuf field: uint64 expiration = 1; + */ + expiration: bigint; +} +/** + * @generated from protobuf message walletrpc.ReleaseOutputRequest + */ +export interface ReleaseOutputRequest { + /** + * The unique ID that was used to lock the output. + * + * @generated from protobuf field: bytes id = 1; + */ + id: Uint8Array; + /** + * The identifying outpoint of the output being released. + * + * @generated from protobuf field: lnrpc.OutPoint outpoint = 2; + */ + outpoint?: OutPoint; +} +/** + * @generated from protobuf message walletrpc.ReleaseOutputResponse + */ +export interface ReleaseOutputResponse { + /** + * The status of the release operation. + * + * @generated from protobuf field: string status = 1; + */ + status: string; +} +/** + * @generated from protobuf message walletrpc.KeyReq + */ +export interface KeyReq { + /** + * + * Is the key finger print of the root pubkey that this request is targeting. + * This allows the WalletKit to possibly serve out keys for multiple HD chains + * via public derivation. + * + * @generated from protobuf field: int32 key_finger_print = 1; + */ + keyFingerPrint: number; + /** + * + * The target key family to derive a key from. In other contexts, this is + * known as the "account". + * + * @generated from protobuf field: int32 key_family = 2; + */ + keyFamily: number; +} +/** + * @generated from protobuf message walletrpc.AddrRequest + */ +export interface AddrRequest { + /** + * + * The name of the account to retrieve the next address of. If empty, the + * default wallet account is used. + * + * @generated from protobuf field: string account = 1; + */ + account: string; + /** + * + * The type of address to derive. + * + * @generated from protobuf field: walletrpc.AddressType type = 2; + */ + type: AddressType; + /** + * + * Whether a change address should be derived. + * + * @generated from protobuf field: bool change = 3; + */ + change: boolean; +} +/** + * @generated from protobuf message walletrpc.AddrResponse + */ +export interface AddrResponse { + /** + * + * The address encoded using a bech32 format. + * + * @generated from protobuf field: string addr = 1; + */ + addr: string; +} +/** + * @generated from protobuf message walletrpc.Account + */ +export interface Account { + /** + * The name used to identify the account. + * + * @generated from protobuf field: string name = 1; + */ + name: string; + /** + * The type of addresses the account supports. + * + * @generated from protobuf field: walletrpc.AddressType address_type = 2; + */ + addressType: AddressType; + /** + * + * The public key backing the account that all keys are derived from + * represented as an extended key. This will always be empty for the default + * imported account in which single public keys are imported into. + * + * @generated from protobuf field: string extended_public_key = 3; + */ + extendedPublicKey: string; + /** + * + * The fingerprint of the root key from which the account public key was + * derived from. This will always be zero for the default imported account in + * which single public keys are imported into. The bytes are in big-endian + * order. + * + * @generated from protobuf field: bytes master_key_fingerprint = 4; + */ + masterKeyFingerprint: Uint8Array; + /** + * + * The derivation path corresponding to the account public key. This will + * always be empty for the default imported account in which single public keys + * are imported into. + * + * @generated from protobuf field: string derivation_path = 5; + */ + derivationPath: string; + /** + * + * The number of keys derived from the external branch of the account public + * key. This will always be zero for the default imported account in which + * single public keys are imported into. + * + * @generated from protobuf field: uint32 external_key_count = 6; + */ + externalKeyCount: number; + /** + * + * The number of keys derived from the internal branch of the account public + * key. This will always be zero for the default imported account in which + * single public keys are imported into. + * + * @generated from protobuf field: uint32 internal_key_count = 7; + */ + internalKeyCount: number; + /** + * Whether the wallet stores private keys for the account. + * + * @generated from protobuf field: bool watch_only = 8; + */ + watchOnly: boolean; +} +/** + * @generated from protobuf message walletrpc.AddressProperty + */ +export interface AddressProperty { + /** + * + * The address encoded using the appropriate format depending on the + * address type (base58, bech32, bech32m). + * + * Note that lnd's internal/custom keys for channels and other + * functionality are derived from the same scope. Since they + * aren't really used as addresses and will never have an + * on-chain balance, we'll show the public key instead (only if + * the show_custom_accounts flag is provided). + * + * @generated from protobuf field: string address = 1; + */ + address: string; + /** + * Denotes if the address is a change address. + * + * @generated from protobuf field: bool is_internal = 2; + */ + isInternal: boolean; + /** + * The balance of the address. + * + * @generated from protobuf field: int64 balance = 3; + */ + balance: bigint; + /** + * The full derivation path of the address. This will be empty for imported + * addresses. + * + * @generated from protobuf field: string derivation_path = 4; + */ + derivationPath: string; + /** + * The public key of the address. This will be empty for imported addresses. + * + * @generated from protobuf field: bytes public_key = 5; + */ + publicKey: Uint8Array; +} +/** + * @generated from protobuf message walletrpc.AccountWithAddresses + */ +export interface AccountWithAddresses { + /** + * The name used to identify the account. + * + * @generated from protobuf field: string name = 1; + */ + name: string; + /** + * The type of addresses the account supports. + * + * @generated from protobuf field: walletrpc.AddressType address_type = 2; + */ + addressType: AddressType; + /** + * + * The derivation path corresponding to the account public key. This will + * always be empty for the default imported account in which single public keys + * are imported into. + * + * @generated from protobuf field: string derivation_path = 3; + */ + derivationPath: string; + /** + * + * List of address, its type internal/external & balance. + * Note that the order of addresses will be random and not according to the + * derivation index, since that information is not stored by the underlying + * wallet. + * + * @generated from protobuf field: repeated walletrpc.AddressProperty addresses = 4; + */ + addresses: AddressProperty[]; +} +/** + * @generated from protobuf message walletrpc.ListAccountsRequest + */ +export interface ListAccountsRequest { + /** + * An optional filter to only return accounts matching this name. + * + * @generated from protobuf field: string name = 1; + */ + name: string; + /** + * An optional filter to only return accounts matching this address type. + * + * @generated from protobuf field: walletrpc.AddressType address_type = 2; + */ + addressType: AddressType; +} +/** + * @generated from protobuf message walletrpc.ListAccountsResponse + */ +export interface ListAccountsResponse { + /** + * @generated from protobuf field: repeated walletrpc.Account accounts = 1; + */ + accounts: Account[]; +} +/** + * @generated from protobuf message walletrpc.RequiredReserveRequest + */ +export interface RequiredReserveRequest { + /** + * The number of additional channels the user would like to open. + * + * @generated from protobuf field: uint32 additional_public_channels = 1; + */ + additionalPublicChannels: number; +} +/** + * @generated from protobuf message walletrpc.RequiredReserveResponse + */ +export interface RequiredReserveResponse { + /** + * The amount of reserve required. + * + * @generated from protobuf field: int64 required_reserve = 1; + */ + requiredReserve: bigint; +} +/** + * @generated from protobuf message walletrpc.ListAddressesRequest + */ +export interface ListAddressesRequest { + /** + * An optional filter to only return addresses matching this account. + * + * @generated from protobuf field: string account_name = 1; + */ + accountName: string; + /** + * An optional flag to return LND's custom accounts (Purpose=1017) + * public key along with other addresses. + * + * @generated from protobuf field: bool show_custom_accounts = 2; + */ + showCustomAccounts: boolean; +} +/** + * @generated from protobuf message walletrpc.ListAddressesResponse + */ +export interface ListAddressesResponse { + /** + * A list of all the accounts and their addresses. + * + * @generated from protobuf field: repeated walletrpc.AccountWithAddresses account_with_addresses = 1; + */ + accountWithAddresses: AccountWithAddresses[]; +} +/** + * @generated from protobuf message walletrpc.GetTransactionRequest + */ +export interface GetTransactionRequest { + /** + * The txid of the transaction. + * + * @generated from protobuf field: string txid = 1; + */ + txid: string; +} +/** + * @generated from protobuf message walletrpc.SignMessageWithAddrRequest + */ +export interface SignMessageWithAddrRequest { + /** + * The message to be signed. When using REST, this field must be encoded as + * base64. + * + * @generated from protobuf field: bytes msg = 1; + */ + msg: Uint8Array; + /** + * The address which will be used to look up the private key and sign the + * corresponding message. + * + * @generated from protobuf field: string addr = 2; + */ + addr: string; +} +/** + * @generated from protobuf message walletrpc.SignMessageWithAddrResponse + */ +export interface SignMessageWithAddrResponse { + /** + * The compact ECDSA signature for the given message encoded in base64. + * + * @generated from protobuf field: string signature = 1; + */ + signature: string; +} +/** + * @generated from protobuf message walletrpc.VerifyMessageWithAddrRequest + */ +export interface VerifyMessageWithAddrRequest { + /** + * The message to be signed. When using REST, this field must be encoded as + * base64. + * + * @generated from protobuf field: bytes msg = 1; + */ + msg: Uint8Array; + /** + * The compact ECDSA signature to be verified over the given message + * ecoded in base64. + * + * @generated from protobuf field: string signature = 2; + */ + signature: string; + /** + * The address which will be used to look up the public key and verify the + * the signature. + * + * @generated from protobuf field: string addr = 3; + */ + addr: string; +} +/** + * @generated from protobuf message walletrpc.VerifyMessageWithAddrResponse + */ +export interface VerifyMessageWithAddrResponse { + /** + * Whether the signature was valid over the given message. + * + * @generated from protobuf field: bool valid = 1; + */ + valid: boolean; + /** + * The pubkey recovered from the signature. + * + * @generated from protobuf field: bytes pubkey = 2; + */ + pubkey: Uint8Array; +} +/** + * @generated from protobuf message walletrpc.ImportAccountRequest + */ +export interface ImportAccountRequest { + /** + * A name to identify the account with. + * + * @generated from protobuf field: string name = 1; + */ + name: string; + /** + * + * A public key that corresponds to a wallet account represented as an extended + * key. It must conform to a derivation path of the form + * m/purpose'/coin_type'/account'. + * + * @generated from protobuf field: string extended_public_key = 2; + */ + extendedPublicKey: string; + /** + * + * The fingerprint of the root key (also known as the key with derivation path + * m/) from which the account public key was derived from. This may be required + * by some hardware wallets for proper identification and signing. The bytes + * must be in big-endian order. + * + * @generated from protobuf field: bytes master_key_fingerprint = 3; + */ + masterKeyFingerprint: Uint8Array; + /** + * + * An address type is only required when the extended account public key has a + * legacy version (xpub, tpub, etc.), such that the wallet cannot detect what + * address scheme it belongs to. + * + * @generated from protobuf field: walletrpc.AddressType address_type = 4; + */ + addressType: AddressType; + /** + * + * Whether a dry run should be attempted when importing the account. This + * serves as a way to confirm whether the account is being imported correctly + * by returning the first N addresses for the external and internal branches of + * the account. If these addresses match as expected, then it should be safe to + * import the account as is. + * + * @generated from protobuf field: bool dry_run = 5; + */ + dryRun: boolean; +} +/** + * @generated from protobuf message walletrpc.ImportAccountResponse + */ +export interface ImportAccountResponse { + /** + * The details of the imported account. + * + * @generated from protobuf field: walletrpc.Account account = 1; + */ + account?: Account; + /** + * + * The first N addresses that belong to the external branch of the account. + * The external branch is typically used for external non-change addresses. + * These are only returned if a dry run was specified within the request. + * + * @generated from protobuf field: repeated string dry_run_external_addrs = 2; + */ + dryRunExternalAddrs: string[]; + /** + * + * The first N addresses that belong to the internal branch of the account. + * The internal branch is typically used for change addresses. These are only + * returned if a dry run was specified within the request. + * + * @generated from protobuf field: repeated string dry_run_internal_addrs = 3; + */ + dryRunInternalAddrs: string[]; +} +/** + * @generated from protobuf message walletrpc.ImportPublicKeyRequest + */ +export interface ImportPublicKeyRequest { + /** + * A compressed public key represented as raw bytes. + * + * @generated from protobuf field: bytes public_key = 1; + */ + publicKey: Uint8Array; + /** + * The type of address that will be generated from the public key. + * + * @generated from protobuf field: walletrpc.AddressType address_type = 2; + */ + addressType: AddressType; +} +/** + * @generated from protobuf message walletrpc.ImportPublicKeyResponse + */ +export interface ImportPublicKeyResponse { + /** + * The status of the import operation. + * + * @generated from protobuf field: string status = 1; + */ + status: string; +} +/** + * @generated from protobuf message walletrpc.ImportTapscriptRequest + */ +export interface ImportTapscriptRequest { + /** + * + * The internal public key, serialized as 32-byte x-only public key. + * + * @generated from protobuf field: bytes internal_public_key = 1; + */ + internalPublicKey: Uint8Array; + /** + * @generated from protobuf oneof: script + */ + script: { + oneofKind: "fullTree"; + /** + * + * The full script tree with all individual leaves is known and the root + * hash can be constructed from the full tree directly. + * + * @generated from protobuf field: walletrpc.TapscriptFullTree full_tree = 2; + */ + fullTree: TapscriptFullTree; + } | { + oneofKind: "partialReveal"; + /** + * + * Only a single script leaf is known. To construct the root hash, the full + * inclusion proof must also be provided. + * + * @generated from protobuf field: walletrpc.TapscriptPartialReveal partial_reveal = 3; + */ + partialReveal: TapscriptPartialReveal; + } | { + oneofKind: "rootHashOnly"; + /** + * + * Only the root hash of the Taproot script tree (or other form of Taproot + * commitment) is known. + * + * @generated from protobuf field: bytes root_hash_only = 4; + */ + rootHashOnly: Uint8Array; + } | { + oneofKind: "fullKeyOnly"; + /** + * + * Only the final, tweaked Taproot key is known and no additional + * information about the internal key or type of tweak that was used to + * derive it. When this is set, the wallet treats the key in + * internal_public_key as the Taproot key directly. This can be useful for + * tracking arbitrary Taproot outputs without the goal of ever being able + * to spend from them through the internal wallet. + * + * @generated from protobuf field: bool full_key_only = 5; + */ + fullKeyOnly: boolean; + } | { + oneofKind: undefined; + }; +} +/** + * @generated from protobuf message walletrpc.TapscriptFullTree + */ +export interface TapscriptFullTree { + /** + * + * The complete, ordered list of all tap leaves of the tree. + * + * @generated from protobuf field: repeated walletrpc.TapLeaf all_leaves = 1; + */ + allLeaves: TapLeaf[]; +} +/** + * @generated from protobuf message walletrpc.TapLeaf + */ +export interface TapLeaf { + /** + * The leaf version. Should be 0xc0 (192) in case of a SegWit v1 script. + * + * @generated from protobuf field: uint32 leaf_version = 1; + */ + leafVersion: number; + /** + * The script of the tap leaf. + * + * @generated from protobuf field: bytes script = 2; + */ + script: Uint8Array; +} +/** + * @generated from protobuf message walletrpc.TapscriptPartialReveal + */ +export interface TapscriptPartialReveal { + /** + * The tap leaf that is known and will be revealed. + * + * @generated from protobuf field: walletrpc.TapLeaf revealed_leaf = 1; + */ + revealedLeaf?: TapLeaf; + /** + * The BIP-0341 serialized inclusion proof that is required to prove that + * the revealed leaf is part of the tree. This contains 0..n blocks of 32 + * bytes. If the tree only contained a single leaf (which is the revealed + * leaf), this can be empty. + * + * @generated from protobuf field: bytes full_inclusion_proof = 2; + */ + fullInclusionProof: Uint8Array; +} +/** + * @generated from protobuf message walletrpc.ImportTapscriptResponse + */ +export interface ImportTapscriptResponse { + /** + * + * The resulting pay-to-Taproot address that represents the imported internal + * key with the script committed to it. + * + * @generated from protobuf field: string p2tr_address = 1 [json_name = "p2trAddress"]; + */ + p2TrAddress: string; +} +/** + * @generated from protobuf message walletrpc.Transaction + */ +export interface Transaction { + /** + * + * The raw serialized transaction. Despite the field name, this does need to be + * specified in raw bytes (or base64 encoded when using REST) and not in hex. + * To not break existing software, the field can't simply be renamed. + * + * @generated from protobuf field: bytes tx_hex = 1; + */ + txHex: Uint8Array; + /** + * + * An optional label to save with the transaction. Limited to 500 characters. + * + * @generated from protobuf field: string label = 2; + */ + label: string; +} +/** + * @generated from protobuf message walletrpc.PublishResponse + */ +export interface PublishResponse { + /** + * + * If blank, then no error occurred and the transaction was successfully + * published. If not the empty string, then a string representation of the + * broadcast error. + * + * TODO(roasbeef): map to a proper enum type + * + * @generated from protobuf field: string publish_error = 1; + */ + publishError: string; +} +/** + * @generated from protobuf message walletrpc.RemoveTransactionResponse + */ +export interface RemoveTransactionResponse { + /** + * The status of the remove transaction operation. + * + * @generated from protobuf field: string status = 1; + */ + status: string; +} +/** + * @generated from protobuf message walletrpc.SendOutputsRequest + */ +export interface SendOutputsRequest { + /** + * + * The number of satoshis per kilo weight that should be used when crafting + * this transaction. + * + * @generated from protobuf field: int64 sat_per_kw = 1; + */ + satPerKw: bigint; + /** + * + * A slice of the outputs that should be created in the transaction produced. + * + * @generated from protobuf field: repeated signrpc.TxOut outputs = 2; + */ + outputs: TxOut[]; + /** + * An optional label for the transaction, limited to 500 characters. + * + * @generated from protobuf field: string label = 3; + */ + label: string; + /** + * The minimum number of confirmations each one of your outputs used for + * the transaction must satisfy. + * + * @generated from protobuf field: int32 min_confs = 4; + */ + minConfs: number; + /** + * Whether unconfirmed outputs should be used as inputs for the transaction. + * + * @generated from protobuf field: bool spend_unconfirmed = 5; + */ + spendUnconfirmed: boolean; + /** + * The strategy to use for selecting coins during sending the outputs. + * + * @generated from protobuf field: lnrpc.CoinSelectionStrategy coin_selection_strategy = 6; + */ + coinSelectionStrategy: CoinSelectionStrategy; +} +/** + * @generated from protobuf message walletrpc.SendOutputsResponse + */ +export interface SendOutputsResponse { + /** + * + * The serialized transaction sent out on the network. + * + * @generated from protobuf field: bytes raw_tx = 1; + */ + rawTx: Uint8Array; +} +/** + * @generated from protobuf message walletrpc.EstimateFeeRequest + */ +export interface EstimateFeeRequest { + /** + * + * The number of confirmations to shoot for when estimating the fee. + * + * @generated from protobuf field: int32 conf_target = 1; + */ + confTarget: number; +} +/** + * @generated from protobuf message walletrpc.EstimateFeeResponse + */ +export interface EstimateFeeResponse { + /** + * + * The amount of satoshis per kw that should be used in order to reach the + * confirmation target in the request. + * + * @generated from protobuf field: int64 sat_per_kw = 1; + */ + satPerKw: bigint; + /** + * The current minimum relay fee based on our chain backend in sat/kw. + * + * @generated from protobuf field: int64 min_relay_fee_sat_per_kw = 2; + */ + minRelayFeeSatPerKw: bigint; +} +/** + * @generated from protobuf message walletrpc.PendingSweep + */ +export interface PendingSweep { + /** + * The outpoint of the output we're attempting to sweep. + * + * @generated from protobuf field: lnrpc.OutPoint outpoint = 1; + */ + outpoint?: OutPoint; + /** + * The witness type of the output we're attempting to sweep. + * + * @generated from protobuf field: walletrpc.WitnessType witness_type = 2; + */ + witnessType: WitnessType; + /** + * The value of the output we're attempting to sweep. + * + * @generated from protobuf field: uint32 amount_sat = 3; + */ + amountSat: number; + /** + * + * Deprecated, use sat_per_vbyte. + * The fee rate we'll use to sweep the output, expressed in sat/vbyte. The fee + * rate is only determined once a sweeping transaction for the output is + * created, so it's possible for this to be 0 before this. + * + * @deprecated + * @generated from protobuf field: uint32 sat_per_byte = 4 [deprecated = true]; + */ + satPerByte: number; + /** + * The number of broadcast attempts we've made to sweep the output. + * + * @generated from protobuf field: uint32 broadcast_attempts = 5; + */ + broadcastAttempts: number; + /** + * + * Deprecated. + * The next height of the chain at which we'll attempt to broadcast the + * sweep transaction of the output. + * + * @deprecated + * @generated from protobuf field: uint32 next_broadcast_height = 6 [deprecated = true]; + */ + nextBroadcastHeight: number; + /** + * + * Deprecated, use immediate. + * Whether this input must be force-swept. This means that it is swept + * immediately. + * + * @deprecated + * @generated from protobuf field: bool force = 7 [deprecated = true]; + */ + force: boolean; + /** + * + * Deprecated, use deadline. + * The requested confirmation target for this output, which is the deadline + * used by the sweeper. + * + * @deprecated + * @generated from protobuf field: uint32 requested_conf_target = 8 [deprecated = true]; + */ + requestedConfTarget: number; + /** + * Deprecated, use requested_sat_per_vbyte. + * The requested fee rate, expressed in sat/vbyte, for this output. + * + * @deprecated + * @generated from protobuf field: uint32 requested_sat_per_byte = 9 [deprecated = true]; + */ + requestedSatPerByte: number; + /** + * + * The current fee rate we'll use to sweep the output, expressed in sat/vbyte. + * The fee rate is only determined once a sweeping transaction for the output + * is created, so it's possible for this to be 0 before this. + * + * @generated from protobuf field: uint64 sat_per_vbyte = 10; + */ + satPerVbyte: bigint; + /** + * The requested starting fee rate, expressed in sat/vbyte, for this + * output. When not requested, this field will be 0. + * + * @generated from protobuf field: uint64 requested_sat_per_vbyte = 11; + */ + requestedSatPerVbyte: bigint; + /** + * + * Whether this input will be swept immediately. + * + * @generated from protobuf field: bool immediate = 12; + */ + immediate: boolean; + /** + * + * The budget for this sweep, expressed in satoshis. This is the maximum amount + * that can be spent as fees to sweep this output. + * + * @generated from protobuf field: uint64 budget = 13; + */ + budget: bigint; + /** + * + * The deadline height used for this output when perform fee bumping. + * + * @generated from protobuf field: uint32 deadline_height = 14; + */ + deadlineHeight: number; +} +/** + * @generated from protobuf message walletrpc.PendingSweepsRequest + */ +export interface PendingSweepsRequest { +} +/** + * @generated from protobuf message walletrpc.PendingSweepsResponse + */ +export interface PendingSweepsResponse { + /** + * + * The set of outputs currently being swept by lnd's central batching engine. + * + * @generated from protobuf field: repeated walletrpc.PendingSweep pending_sweeps = 1; + */ + pendingSweeps: PendingSweep[]; +} +/** + * @generated from protobuf message walletrpc.BumpFeeRequest + */ +export interface BumpFeeRequest { + /** + * The input we're attempting to bump the fee of. + * + * @generated from protobuf field: lnrpc.OutPoint outpoint = 1; + */ + outpoint?: OutPoint; + /** + * Optional. The deadline in number of blocks that the input should be spent + * within. When not set, for new inputs, the default value (1008) is used; + * for existing inputs, their current values will be retained. + * + * @generated from protobuf field: uint32 target_conf = 2; + */ + targetConf: number; + /** + * + * Deprecated, use sat_per_vbyte. + * The fee rate, expressed in sat/vbyte, that should be used to spend the input + * with. + * + * @deprecated + * @generated from protobuf field: uint32 sat_per_byte = 3 [deprecated = true]; + */ + satPerByte: number; + /** + * + * Deprecated, use immediate. + * Whether this input must be force-swept. This means that it is swept + * immediately. + * + * @deprecated + * @generated from protobuf field: bool force = 4 [deprecated = true]; + */ + force: boolean; + /** + * + * Optional. The starting fee rate, expressed in sat/vbyte, that will be used + * to spend the input with initially. This value will be used by the sweeper's + * fee function as its starting fee rate. When not set, the sweeper will use + * the estimated fee rate using the `target_conf` as the starting fee rate. + * + * @generated from protobuf field: uint64 sat_per_vbyte = 5; + */ + satPerVbyte: bigint; + /** + * + * Optional. Whether this input will be swept immediately. When set to true, + * the sweeper will sweep this input without waiting for the next batch. + * + * @generated from protobuf field: bool immediate = 6; + */ + immediate: boolean; + /** + * + * Optional. The max amount in sats that can be used as the fees. Setting this + * value greater than the input's value may result in CPFP - one or more wallet + * utxos will be used to pay the fees specified by the budget. If not set, for + * new inputs, by default 50% of the input's value will be treated as the + * budget for fee bumping; for existing inputs, their current budgets will be + * retained. + * + * @generated from protobuf field: uint64 budget = 7; + */ + budget: bigint; +} +/** + * @generated from protobuf message walletrpc.BumpFeeResponse + */ +export interface BumpFeeResponse { + /** + * The status of the bump fee operation. + * + * @generated from protobuf field: string status = 1; + */ + status: string; +} +/** + * @generated from protobuf message walletrpc.BumpForceCloseFeeRequest + */ +export interface BumpForceCloseFeeRequest { + /** + * The channel point which force close transaction we are attempting to + * bump the fee rate for. + * + * @generated from protobuf field: lnrpc.ChannelPoint chan_point = 1; + */ + chanPoint?: ChannelPoint; + /** + * Optional. The deadline delta in number of blocks that the anchor output + * should be spent within to bump the closing transaction. + * + * @generated from protobuf field: uint32 deadline_delta = 2; + */ + deadlineDelta: number; + /** + * + * Optional. The starting fee rate, expressed in sat/vbyte. This value will be + * used by the sweeper's fee function as its starting fee rate. When not set, + * the sweeper will use the estimated fee rate using the target_conf as the + * starting fee rate. + * + * @generated from protobuf field: uint64 starting_feerate = 3; + */ + startingFeerate: bigint; + /** + * + * Optional. Whether this cpfp transaction will be triggered immediately. When + * set to true, the sweeper will consider all currently registered sweeps and + * trigger new batch transactions including the sweeping of the anchor output + * related to the selected force close transaction. + * + * @generated from protobuf field: bool immediate = 4; + */ + immediate: boolean; + /** + * + * Optional. The max amount in sats that can be used as the fees. For already + * registered anchor outputs if not set explicitly the old value will be used. + * For channel force closes which have no HTLCs in their commitment transaction + * this value has to be set to an appropriate amount to pay for the cpfp + * transaction of the force closed channel otherwise the fee bumping will fail. + * + * @generated from protobuf field: uint64 budget = 5; + */ + budget: bigint; +} +/** + * @generated from protobuf message walletrpc.BumpForceCloseFeeResponse + */ +export interface BumpForceCloseFeeResponse { + /** + * The status of the force close fee bump operation. + * + * @generated from protobuf field: string status = 1; + */ + status: string; +} +/** + * @generated from protobuf message walletrpc.ListSweepsRequest + */ +export interface ListSweepsRequest { + /** + * + * Retrieve the full sweep transaction details. If false, only the sweep txids + * will be returned. Note that some sweeps that LND publishes will have been + * replaced-by-fee, so will not be included in this output. + * + * @generated from protobuf field: bool verbose = 1; + */ + verbose: boolean; + /** + * + * The start height to use when fetching sweeps. If not specified (0), the + * result will start from the earliest sweep. If set to -1 the result will + * only include unconfirmed sweeps (at the time of the call). + * + * @generated from protobuf field: int32 start_height = 2; + */ + startHeight: number; +} +/** + * @generated from protobuf message walletrpc.ListSweepsResponse + */ +export interface ListSweepsResponse { + /** + * @generated from protobuf oneof: sweeps + */ + sweeps: { + oneofKind: "transactionDetails"; + /** + * @generated from protobuf field: lnrpc.TransactionDetails transaction_details = 1; + */ + transactionDetails: TransactionDetails; + } | { + oneofKind: "transactionIds"; + /** + * @generated from protobuf field: walletrpc.ListSweepsResponse.TransactionIDs transaction_ids = 2; + */ + transactionIds: ListSweepsResponse_TransactionIDs; + } | { + oneofKind: undefined; + }; +} +/** + * @generated from protobuf message walletrpc.ListSweepsResponse.TransactionIDs + */ +export interface ListSweepsResponse_TransactionIDs { + /** + * + * Reversed, hex-encoded string representing the transaction ids of the + * sweeps that our node has broadcast. Note that these transactions may + * not have confirmed yet, we record sweeps on broadcast, not confirmation. + * + * @generated from protobuf field: repeated string transaction_ids = 1; + */ + transactionIds: string[]; +} +/** + * @generated from protobuf message walletrpc.LabelTransactionRequest + */ +export interface LabelTransactionRequest { + /** + * The txid of the transaction to label. Note: When using gRPC, the bytes + * must be in little-endian (reverse) order. + * + * @generated from protobuf field: bytes txid = 1; + */ + txid: Uint8Array; + /** + * The label to add to the transaction, limited to 500 characters. + * + * @generated from protobuf field: string label = 2; + */ + label: string; + /** + * Whether to overwrite the existing label, if it is present. + * + * @generated from protobuf field: bool overwrite = 3; + */ + overwrite: boolean; +} +/** + * @generated from protobuf message walletrpc.LabelTransactionResponse + */ +export interface LabelTransactionResponse { + /** + * The status of the label operation. + * + * @generated from protobuf field: string status = 1; + */ + status: string; +} +/** + * @generated from protobuf message walletrpc.FundPsbtRequest + */ +export interface FundPsbtRequest { + /** + * @generated from protobuf oneof: template + */ + template: { + oneofKind: "psbt"; + /** + * + * Use an existing PSBT packet as the template for the funded PSBT. + * + * The packet must contain at least one non-dust output. If one or more + * inputs are specified, no coin selection is performed. In that case every + * input must be an UTXO known to the wallet that has not been locked + * before. The sum of all inputs must be sufficiently greater than the sum + * of all outputs to pay a miner fee with the specified fee rate. A change + * output is added to the PSBT if necessary. + * + * @generated from protobuf field: bytes psbt = 1; + */ + psbt: Uint8Array; + } | { + oneofKind: "raw"; + /** + * + * Use the outputs and optional inputs from this raw template. + * + * @generated from protobuf field: walletrpc.TxTemplate raw = 2; + */ + raw: TxTemplate; + } | { + oneofKind: "coinSelect"; + /** + * + * Use an existing PSBT packet as the template for the funded PSBT. + * + * The difference to the pure PSBT template above is that coin selection is + * performed even if inputs are specified. The output amounts are summed up + * and used as the target amount for coin selection. A change output must + * either already exist in the PSBT and be marked as such, otherwise a new + * change output of the specified output type will be added. Any inputs + * already specified in the PSBT must already be locked (if they belong to + * this node), only newly added inputs will be locked by this RPC. + * + * In case the sum of the already provided inputs exceeds the required + * output amount, no new coins are selected. Instead only the fee and + * change amount calculation is performed (e.g. a change output is added if + * requested or the change is added to the specified existing change + * output, given there is any non-dust change). This can be identified by + * the returned locked UTXOs being empty. + * + * @generated from protobuf field: walletrpc.PsbtCoinSelect coin_select = 9; + */ + coinSelect: PsbtCoinSelect; + } | { + oneofKind: undefined; + }; + /** + * @generated from protobuf oneof: fees + */ + fees: { + oneofKind: "targetConf"; + /** + * + * The target number of blocks that the transaction should be confirmed in. + * + * @generated from protobuf field: uint32 target_conf = 3; + */ + targetConf: number; + } | { + oneofKind: "satPerVbyte"; + /** + * + * The fee rate, expressed in sat/vbyte, that should be used to spend the + * input with. + * + * @generated from protobuf field: uint64 sat_per_vbyte = 4; + */ + satPerVbyte: bigint; + } | { + oneofKind: "satPerKw"; + /** + * + * The fee rate, expressed in sat/kWU, that should be used to spend the + * input with. + * + * @generated from protobuf field: uint64 sat_per_kw = 11; + */ + satPerKw: bigint; + } | { + oneofKind: undefined; + }; + /** + * + * The name of the account to fund the PSBT with. If empty, the default wallet + * account is used. + * + * @generated from protobuf field: string account = 5; + */ + account: string; + /** + * The minimum number of confirmations each one of your outputs used for + * the transaction must satisfy. + * + * @generated from protobuf field: int32 min_confs = 6; + */ + minConfs: number; + /** + * Whether unconfirmed outputs should be used as inputs for the transaction. + * + * @generated from protobuf field: bool spend_unconfirmed = 7; + */ + spendUnconfirmed: boolean; + /** + * The address type for the change. If empty, P2WPKH addresses will be used + * for default accounts and single imported public keys. For custom + * accounts, no change type should be provided as the coin selection key + * scope will always be used to generate the change address. + * + * @generated from protobuf field: walletrpc.ChangeAddressType change_type = 8; + */ + changeType: ChangeAddressType; + /** + * The strategy to use for selecting coins during funding the PSBT. + * + * @generated from protobuf field: lnrpc.CoinSelectionStrategy coin_selection_strategy = 10; + */ + coinSelectionStrategy: CoinSelectionStrategy; + /** + * The max fee to total output amount ratio that this psbt should adhere to. + * + * @generated from protobuf field: double max_fee_ratio = 12; + */ + maxFeeRatio: number; +} +/** + * @generated from protobuf message walletrpc.FundPsbtResponse + */ +export interface FundPsbtResponse { + /** + * + * The funded but not yet signed PSBT packet. + * + * @generated from protobuf field: bytes funded_psbt = 1; + */ + fundedPsbt: Uint8Array; + /** + * + * The index of the added change output or -1 if no change was left over. + * + * @generated from protobuf field: int32 change_output_index = 2; + */ + changeOutputIndex: number; + /** + * + * The list of lock leases that were acquired for the inputs in the funded PSBT + * packet. Only inputs added to the PSBT by this RPC are locked, inputs that + * were already present in the PSBT are not locked. + * + * @generated from protobuf field: repeated walletrpc.UtxoLease locked_utxos = 3; + */ + lockedUtxos: UtxoLease[]; +} +/** + * @generated from protobuf message walletrpc.TxTemplate + */ +export interface TxTemplate { + /** + * + * An optional list of inputs to use. Every input must be an UTXO known to the + * wallet that has not been locked before. The sum of all inputs must be + * sufficiently greater than the sum of all outputs to pay a miner fee with the + * fee rate specified in the parent message. + * + * If no inputs are specified, coin selection will be performed instead and + * inputs of sufficient value will be added to the resulting PSBT. + * + * @generated from protobuf field: repeated lnrpc.OutPoint inputs = 1; + */ + inputs: OutPoint[]; + /** + * + * A map of all addresses and the amounts to send to in the funded PSBT. + * + * @generated from protobuf field: map outputs = 2; + */ + outputs: { + [key: string]: bigint; + }; +} +/** + * @generated from protobuf message walletrpc.PsbtCoinSelect + */ +export interface PsbtCoinSelect { + /** + * + * The template to use for the funded PSBT. The template must contain at least + * one non-dust output. The amount to be funded is calculated by summing up the + * amounts of all outputs in the template, subtracting all the input values of + * the already specified inputs. The change value is added to the output that + * is marked as such (or a new change output is added if none is marked). For + * the input amount calculation to be correct, the template must have the + * WitnessUtxo field set for all inputs. Any inputs already specified in the + * PSBT must already be locked (if they belong to this node), only newly added + * inputs will be locked by this RPC. + * + * @generated from protobuf field: bytes psbt = 1; + */ + psbt: Uint8Array; + /** + * @generated from protobuf oneof: change_output + */ + changeOutput: { + oneofKind: "existingOutputIndex"; + /** + * + * Use the existing output within the template PSBT with the specified + * index as the change output. Any leftover change will be added to the + * already specified amount of that output. To add a new change output to + * the PSBT, set the "add" field below instead. The type of change output + * added is defined by change_type in the parent message. + * + * @generated from protobuf field: int32 existing_output_index = 2; + */ + existingOutputIndex: number; + } | { + oneofKind: "add"; + /** + * + * Add a new change output to the PSBT using the change_type specified in + * the parent message. + * + * @generated from protobuf field: bool add = 3; + */ + add: boolean; + } | { + oneofKind: undefined; + }; +} +/** + * @generated from protobuf message walletrpc.UtxoLease + */ +export interface UtxoLease { + /** + * + * A 32 byte random ID that identifies the lease. + * + * @generated from protobuf field: bytes id = 1; + */ + id: Uint8Array; + /** + * The identifying outpoint of the output being leased. + * + * @generated from protobuf field: lnrpc.OutPoint outpoint = 2; + */ + outpoint?: OutPoint; + /** + * + * The absolute expiration of the output lease represented as a unix timestamp. + * + * @generated from protobuf field: uint64 expiration = 3; + */ + expiration: bigint; + /** + * + * The public key script of the leased output. + * + * @generated from protobuf field: bytes pk_script = 4; + */ + pkScript: Uint8Array; + /** + * + * The value of the leased output in satoshis. + * + * @generated from protobuf field: uint64 value = 5; + */ + value: bigint; +} +/** + * @generated from protobuf message walletrpc.SignPsbtRequest + */ +export interface SignPsbtRequest { + /** + * + * The PSBT that should be signed. The PSBT must contain all required inputs, + * outputs, UTXO data and custom fields required to identify the signing key. + * + * @generated from protobuf field: bytes funded_psbt = 1; + */ + fundedPsbt: Uint8Array; +} +/** + * @generated from protobuf message walletrpc.SignPsbtResponse + */ +export interface SignPsbtResponse { + /** + * The signed transaction in PSBT format. + * + * @generated from protobuf field: bytes signed_psbt = 1; + */ + signedPsbt: Uint8Array; + /** + * The indices of signed inputs. + * + * @generated from protobuf field: repeated uint32 signed_inputs = 2; + */ + signedInputs: number[]; +} +/** + * @generated from protobuf message walletrpc.FinalizePsbtRequest + */ +export interface FinalizePsbtRequest { + /** + * + * A PSBT that should be signed and finalized. The PSBT must contain all + * required inputs, outputs, UTXO data and partial signatures of all other + * signers. + * + * @generated from protobuf field: bytes funded_psbt = 1; + */ + fundedPsbt: Uint8Array; + /** + * + * The name of the account to finalize the PSBT with. If empty, the default + * wallet account is used. + * + * @generated from protobuf field: string account = 5; + */ + account: string; +} +/** + * @generated from protobuf message walletrpc.FinalizePsbtResponse + */ +export interface FinalizePsbtResponse { + /** + * The fully signed and finalized transaction in PSBT format. + * + * @generated from protobuf field: bytes signed_psbt = 1; + */ + signedPsbt: Uint8Array; + /** + * The fully signed and finalized transaction in the raw wire format. + * + * @generated from protobuf field: bytes raw_final_tx = 2; + */ + rawFinalTx: Uint8Array; +} +/** + * @generated from protobuf message walletrpc.ListLeasesRequest + */ +export interface ListLeasesRequest { +} +/** + * @generated from protobuf message walletrpc.ListLeasesResponse + */ +export interface ListLeasesResponse { + /** + * The list of currently leased utxos. + * + * @generated from protobuf field: repeated walletrpc.UtxoLease locked_utxos = 1; + */ + lockedUtxos: UtxoLease[]; +} +/** + * @generated from protobuf enum walletrpc.AddressType + */ +export enum AddressType { + /** + * @generated from protobuf enum value: UNKNOWN = 0; + */ + UNKNOWN = 0, + /** + * @generated from protobuf enum value: WITNESS_PUBKEY_HASH = 1; + */ + WITNESS_PUBKEY_HASH = 1, + /** + * @generated from protobuf enum value: NESTED_WITNESS_PUBKEY_HASH = 2; + */ + NESTED_WITNESS_PUBKEY_HASH = 2, + /** + * @generated from protobuf enum value: HYBRID_NESTED_WITNESS_PUBKEY_HASH = 3; + */ + HYBRID_NESTED_WITNESS_PUBKEY_HASH = 3, + /** + * @generated from protobuf enum value: TAPROOT_PUBKEY = 4; + */ + TAPROOT_PUBKEY = 4 +} +/** + * @generated from protobuf enum walletrpc.WitnessType + */ +export enum WitnessType { + /** + * @generated from protobuf enum value: UNKNOWN_WITNESS = 0; + */ + UNKNOWN_WITNESS = 0, + /** + * + * A witness that allows us to spend the output of a commitment transaction + * after a relative lock-time lockout. + * + * @generated from protobuf enum value: COMMITMENT_TIME_LOCK = 1; + */ + COMMITMENT_TIME_LOCK = 1, + /** + * + * A witness that allows us to spend a settled no-delay output immediately on a + * counterparty's commitment transaction. + * + * @generated from protobuf enum value: COMMITMENT_NO_DELAY = 2; + */ + COMMITMENT_NO_DELAY = 2, + /** + * + * A witness that allows us to sweep the settled output of a malicious + * counterparty's who broadcasts a revoked commitment transaction. + * + * @generated from protobuf enum value: COMMITMENT_REVOKE = 3; + */ + COMMITMENT_REVOKE = 3, + /** + * + * A witness that allows us to sweep an HTLC which we offered to the remote + * party in the case that they broadcast a revoked commitment state. + * + * @generated from protobuf enum value: HTLC_OFFERED_REVOKE = 4; + */ + HTLC_OFFERED_REVOKE = 4, + /** + * + * A witness that allows us to sweep an HTLC output sent to us in the case that + * the remote party broadcasts a revoked commitment state. + * + * @generated from protobuf enum value: HTLC_ACCEPTED_REVOKE = 5; + */ + HTLC_ACCEPTED_REVOKE = 5, + /** + * + * A witness that allows us to sweep an HTLC output that we extended to a + * party, but was never fulfilled. This HTLC output isn't directly on the + * commitment transaction, but is the result of a confirmed second-level HTLC + * transaction. As a result, we can only spend this after a CSV delay. + * + * @generated from protobuf enum value: HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 6; + */ + HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 6, + /** + * + * A witness that allows us to sweep an HTLC output that was offered to us, and + * for which we have a payment preimage. This HTLC output isn't directly on our + * commitment transaction, but is the result of confirmed second-level HTLC + * transaction. As a result, we can only spend this after a CSV delay. + * + * @generated from protobuf enum value: HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 7; + */ + HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 7, + /** + * + * A witness that allows us to sweep an HTLC that we offered to the remote + * party which lies in the commitment transaction of the remote party. We can + * spend this output after the absolute CLTV timeout of the HTLC as passed. + * + * @generated from protobuf enum value: HTLC_OFFERED_REMOTE_TIMEOUT = 8; + */ + HTLC_OFFERED_REMOTE_TIMEOUT = 8, + /** + * + * A witness that allows us to sweep an HTLC that was offered to us by the + * remote party. We use this witness in the case that the remote party goes to + * chain, and we know the pre-image to the HTLC. We can sweep this without any + * additional timeout. + * + * @generated from protobuf enum value: HTLC_ACCEPTED_REMOTE_SUCCESS = 9; + */ + HTLC_ACCEPTED_REMOTE_SUCCESS = 9, + /** + * + * A witness that allows us to sweep an HTLC from the remote party's commitment + * transaction in the case that the broadcast a revoked commitment, but then + * also immediately attempt to go to the second level to claim the HTLC. + * + * @generated from protobuf enum value: HTLC_SECOND_LEVEL_REVOKE = 10; + */ + HTLC_SECOND_LEVEL_REVOKE = 10, + /** + * + * A witness type that allows us to spend a regular p2wkh output that's sent to + * an output which is under complete control of the backing wallet. + * + * @generated from protobuf enum value: WITNESS_KEY_HASH = 11; + */ + WITNESS_KEY_HASH = 11, + /** + * + * A witness type that allows us to sweep an output that sends to a nested P2SH + * script that pays to a key solely under our control. + * + * @generated from protobuf enum value: NESTED_WITNESS_KEY_HASH = 12; + */ + NESTED_WITNESS_KEY_HASH = 12, + /** + * + * A witness type that allows us to spend our anchor on the commitment + * transaction. + * + * @generated from protobuf enum value: COMMITMENT_ANCHOR = 13; + */ + COMMITMENT_ANCHOR = 13, + /** + * + * A witness type that is similar to the COMMITMENT_NO_DELAY type, + * but it omits the tweak that randomizes the key we need to + * spend with a channel peer supplied set of randomness. + * + * @generated from protobuf enum value: COMMITMENT_NO_DELAY_TWEAKLESS = 14; + */ + COMMITMENT_NO_DELAY_TWEAKLESS = 14, + /** + * + * A witness type that allows us to spend our output on the counterparty's + * commitment transaction after a confirmation. + * + * @generated from protobuf enum value: COMMITMENT_TO_REMOTE_CONFIRMED = 15; + */ + COMMITMENT_TO_REMOTE_CONFIRMED = 15, + /** + * + * A witness type that allows us to sweep an HTLC output that we extended + * to a party, but was never fulfilled. This _is_ the HTLC output directly + * on our commitment transaction, and the input to the second-level HTLC + * timeout transaction. It can only be spent after CLTV expiry, and + * commitment confirmation. + * + * @generated from protobuf enum value: HTLC_OFFERED_TIMEOUT_SECOND_LEVEL_INPUT_CONFIRMED = 16; + */ + HTLC_OFFERED_TIMEOUT_SECOND_LEVEL_INPUT_CONFIRMED = 16, + /** + * + * A witness type that allows us to sweep an HTLC output that was offered + * to us, and for which we have a payment preimage. This _is_ the HTLC + * output directly on our commitment transaction, and the input to the + * second-level HTLC success transaction. It can only be spent after the + * commitment has confirmed. + * + * @generated from protobuf enum value: HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL_INPUT_CONFIRMED = 17; + */ + HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL_INPUT_CONFIRMED = 17, + /** + * + * A witness type that allows us to spend our output on our local + * commitment transaction after a relative and absolute lock-time lockout as + * part of the script enforced lease commitment type. + * + * @generated from protobuf enum value: LEASE_COMMITMENT_TIME_LOCK = 18; + */ + LEASE_COMMITMENT_TIME_LOCK = 18, + /** + * + * A witness type that allows us to spend our output on the counterparty's + * commitment transaction after a confirmation and absolute locktime as part + * of the script enforced lease commitment type. + * + * @generated from protobuf enum value: LEASE_COMMITMENT_TO_REMOTE_CONFIRMED = 19; + */ + LEASE_COMMITMENT_TO_REMOTE_CONFIRMED = 19, + /** + * + * A witness type that allows us to sweep an HTLC output that we extended + * to a party, but was never fulfilled. This HTLC output isn't directly on + * the commitment transaction, but is the result of a confirmed second-level + * HTLC transaction. As a result, we can only spend this after a CSV delay + * and CLTV locktime as part of the script enforced lease commitment type. + * + * @generated from protobuf enum value: LEASE_HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 20; + */ + LEASE_HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 20, + /** + * + * A witness type that allows us to sweep an HTLC output that was offered + * to us, and for which we have a payment preimage. This HTLC output isn't + * directly on our commitment transaction, but is the result of confirmed + * second-level HTLC transaction. As a result, we can only spend this after + * a CSV delay and CLTV locktime as part of the script enforced lease + * commitment type. + * + * @generated from protobuf enum value: LEASE_HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 21; + */ + LEASE_HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 21, + /** + * + * A witness type that allows us to spend a regular p2tr output that's sent + * to an output which is under complete control of the backing wallet. + * + * @generated from protobuf enum value: TAPROOT_PUB_KEY_SPEND = 22; + */ + TAPROOT_PUB_KEY_SPEND = 22, + /** + * + * A witness type that allows us to spend our settled local commitment after a + * CSV delay when we force close the channel. + * + * @generated from protobuf enum value: TAPROOT_LOCAL_COMMIT_SPEND = 23; + */ + TAPROOT_LOCAL_COMMIT_SPEND = 23, + /** + * + * A witness type that allows us to spend our settled local commitment after + * a CSV delay when the remote party has force closed the channel. + * + * @generated from protobuf enum value: TAPROOT_REMOTE_COMMIT_SPEND = 24; + */ + TAPROOT_REMOTE_COMMIT_SPEND = 24, + /** + * + * A witness type that we'll use for spending our own anchor output. + * + * @generated from protobuf enum value: TAPROOT_ANCHOR_SWEEP_SPEND = 25; + */ + TAPROOT_ANCHOR_SWEEP_SPEND = 25, + /** + * + * A witness that allows us to timeout an HTLC we offered to the remote party + * on our commitment transaction. We use this when we need to go on chain to + * time out an HTLC. + * + * @generated from protobuf enum value: TAPROOT_HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 26; + */ + TAPROOT_HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 26, + /** + * + * A witness type that allows us to sweep an HTLC we accepted on our commitment + * transaction after we go to the second level on chain. + * + * @generated from protobuf enum value: TAPROOT_HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 27; + */ + TAPROOT_HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 27, + /** + * + * A witness that allows us to sweep an HTLC on the revoked transaction of the + * remote party that goes to the second level. + * + * @generated from protobuf enum value: TAPROOT_HTLC_SECOND_LEVEL_REVOKE = 28; + */ + TAPROOT_HTLC_SECOND_LEVEL_REVOKE = 28, + /** + * + * A witness that allows us to sweep an HTLC sent to us by the remote party + * in the event that they broadcast a revoked state. + * + * @generated from protobuf enum value: TAPROOT_HTLC_ACCEPTED_REVOKE = 29; + */ + TAPROOT_HTLC_ACCEPTED_REVOKE = 29, + /** + * + * A witness that allows us to sweep an HTLC we offered to the remote party if + * they broadcast a revoked commitment. + * + * @generated from protobuf enum value: TAPROOT_HTLC_OFFERED_REVOKE = 30; + */ + TAPROOT_HTLC_OFFERED_REVOKE = 30, + /** + * + * A witness that allows us to sweep an HTLC we offered to the remote party + * that lies on the commitment transaction for the remote party. We can spend + * this output after the absolute CLTV timeout of the HTLC as passed. + * + * @generated from protobuf enum value: TAPROOT_HTLC_OFFERED_REMOTE_TIMEOUT = 31; + */ + TAPROOT_HTLC_OFFERED_REMOTE_TIMEOUT = 31, + /** + * + * A witness type that allows us to sign the second level HTLC timeout + * transaction when spending from an HTLC residing on our local commitment + * transaction. + * This is used by the sweeper to re-sign inputs if it needs to aggregate + * several second level HTLCs. + * + * @generated from protobuf enum value: TAPROOT_HTLC_LOCAL_OFFERED_TIMEOUT = 32; + */ + TAPROOT_HTLC_LOCAL_OFFERED_TIMEOUT = 32, + /** + * + * A witness that allows us to sweep an HTLC that was offered to us by the + * remote party for a taproot channels. We use this witness in the case that + * the remote party goes to chain, and we know the pre-image to the HTLC. We + * can sweep this without any additional timeout. + * + * @generated from protobuf enum value: TAPROOT_HTLC_ACCEPTED_REMOTE_SUCCESS = 33; + */ + TAPROOT_HTLC_ACCEPTED_REMOTE_SUCCESS = 33, + /** + * + * A witness type that allows us to sweep the HTLC offered to us on our local + * commitment transaction. We'll use this when we need to go on chain to sweep + * the HTLC. In this case, this is the second level HTLC success transaction. + * + * @generated from protobuf enum value: TAPROOT_HTLC_ACCEPTED_LOCAL_SUCCESS = 34; + */ + TAPROOT_HTLC_ACCEPTED_LOCAL_SUCCESS = 34, + /** + * + * A witness that allows us to sweep the settled output of a malicious + * counterparty's who broadcasts a revoked taproot commitment transaction. + * + * @generated from protobuf enum value: TAPROOT_COMMITMENT_REVOKE = 35; + */ + TAPROOT_COMMITMENT_REVOKE = 35 +} +/** + * The possible change address types for default accounts and single imported + * public keys. By default, P2WPKH will be used. We don't provide the + * possibility to choose P2PKH as it is a legacy key scope, nor NP2WPKH as + * no key scope permits to do so. For custom accounts, no change type should + * be provided as the coin selection key scope will always be used to generate + * the change address. + * + * @generated from protobuf enum walletrpc.ChangeAddressType + */ +export enum ChangeAddressType { + /** + * CHANGE_ADDRESS_TYPE_UNSPECIFIED indicates that no change address type is + * provided. We will then use P2WPKH address type for change (BIP0084 key + * scope). + * + * @generated from protobuf enum value: CHANGE_ADDRESS_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + /** + * CHANGE_ADDRESS_TYPE_P2TR indicates to use P2TR address for change output + * (BIP0086 key scope). + * + * @generated from protobuf enum value: CHANGE_ADDRESS_TYPE_P2TR = 1; + */ + P2TR = 1 +} +// @generated message type with reflection information, may provide speed optimized methods +class ListUnspentRequest$Type extends MessageType { + constructor() { + super("walletrpc.ListUnspentRequest", [ + { no: 1, name: "min_confs", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "max_confs", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 3, name: "account", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "unconfirmed_only", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): ListUnspentRequest { + const message = { minConfs: 0, maxConfs: 0, account: "", unconfirmedOnly: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListUnspentRequest): ListUnspentRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int32 min_confs */ 1: + message.minConfs = reader.int32(); + break; + case /* int32 max_confs */ 2: + message.maxConfs = reader.int32(); + break; + case /* string account */ 3: + message.account = reader.string(); + break; + case /* bool unconfirmed_only */ 4: + message.unconfirmedOnly = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListUnspentRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int32 min_confs = 1; */ + if (message.minConfs !== 0) + writer.tag(1, WireType.Varint).int32(message.minConfs); + /* int32 max_confs = 2; */ + if (message.maxConfs !== 0) + writer.tag(2, WireType.Varint).int32(message.maxConfs); + /* string account = 3; */ + if (message.account !== "") + writer.tag(3, WireType.LengthDelimited).string(message.account); + /* bool unconfirmed_only = 4; */ + if (message.unconfirmedOnly !== false) + writer.tag(4, WireType.Varint).bool(message.unconfirmedOnly); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListUnspentRequest + */ +export const ListUnspentRequest = new ListUnspentRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListUnspentResponse$Type extends MessageType { + constructor() { + super("walletrpc.ListUnspentResponse", [ + { no: 1, name: "utxos", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Utxo } + ]); + } + create(value?: PartialMessage): ListUnspentResponse { + const message = { utxos: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListUnspentResponse): ListUnspentResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated lnrpc.Utxo utxos */ 1: + message.utxos.push(Utxo.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListUnspentResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated lnrpc.Utxo utxos = 1; */ + for (let i = 0; i < message.utxos.length; i++) + Utxo.internalBinaryWrite(message.utxos[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListUnspentResponse + */ +export const ListUnspentResponse = new ListUnspentResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class LeaseOutputRequest$Type extends MessageType { + constructor() { + super("walletrpc.LeaseOutputRequest", [ + { no: 1, name: "id", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "outpoint", kind: "message", T: () => OutPoint }, + { no: 3, name: "expiration_seconds", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): LeaseOutputRequest { + const message = { id: new Uint8Array(0), expirationSeconds: 0n }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LeaseOutputRequest): LeaseOutputRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes id */ 1: + message.id = reader.bytes(); + break; + case /* lnrpc.OutPoint outpoint */ 2: + message.outpoint = OutPoint.internalBinaryRead(reader, reader.uint32(), options, message.outpoint); + break; + case /* uint64 expiration_seconds */ 3: + message.expirationSeconds = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: LeaseOutputRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes id = 1; */ + if (message.id.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.id); + /* lnrpc.OutPoint outpoint = 2; */ + if (message.outpoint) + OutPoint.internalBinaryWrite(message.outpoint, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* uint64 expiration_seconds = 3; */ + if (message.expirationSeconds !== 0n) + writer.tag(3, WireType.Varint).uint64(message.expirationSeconds); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.LeaseOutputRequest + */ +export const LeaseOutputRequest = new LeaseOutputRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class LeaseOutputResponse$Type extends MessageType { + constructor() { + super("walletrpc.LeaseOutputResponse", [ + { no: 1, name: "expiration", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): LeaseOutputResponse { + const message = { expiration: 0n }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LeaseOutputResponse): LeaseOutputResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint64 expiration */ 1: + message.expiration = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: LeaseOutputResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint64 expiration = 1; */ + if (message.expiration !== 0n) + writer.tag(1, WireType.Varint).uint64(message.expiration); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.LeaseOutputResponse + */ +export const LeaseOutputResponse = new LeaseOutputResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ReleaseOutputRequest$Type extends MessageType { + constructor() { + super("walletrpc.ReleaseOutputRequest", [ + { no: 1, name: "id", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "outpoint", kind: "message", T: () => OutPoint } + ]); + } + create(value?: PartialMessage): ReleaseOutputRequest { + const message = { id: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ReleaseOutputRequest): ReleaseOutputRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes id */ 1: + message.id = reader.bytes(); + break; + case /* lnrpc.OutPoint outpoint */ 2: + message.outpoint = OutPoint.internalBinaryRead(reader, reader.uint32(), options, message.outpoint); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ReleaseOutputRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes id = 1; */ + if (message.id.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.id); + /* lnrpc.OutPoint outpoint = 2; */ + if (message.outpoint) + OutPoint.internalBinaryWrite(message.outpoint, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ReleaseOutputRequest + */ +export const ReleaseOutputRequest = new ReleaseOutputRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ReleaseOutputResponse$Type extends MessageType { + constructor() { + super("walletrpc.ReleaseOutputResponse", [ + { no: 1, name: "status", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ReleaseOutputResponse { + const message = { status: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ReleaseOutputResponse): ReleaseOutputResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string status */ 1: + message.status = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ReleaseOutputResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string status = 1; */ + if (message.status !== "") + writer.tag(1, WireType.LengthDelimited).string(message.status); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ReleaseOutputResponse + */ +export const ReleaseOutputResponse = new ReleaseOutputResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class KeyReq$Type extends MessageType { + constructor() { + super("walletrpc.KeyReq", [ + { no: 1, name: "key_finger_print", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 2, name: "key_family", kind: "scalar", T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): KeyReq { + const message = { keyFingerPrint: 0, keyFamily: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: KeyReq): KeyReq { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int32 key_finger_print */ 1: + message.keyFingerPrint = reader.int32(); + break; + case /* int32 key_family */ 2: + message.keyFamily = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: KeyReq, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int32 key_finger_print = 1; */ + if (message.keyFingerPrint !== 0) + writer.tag(1, WireType.Varint).int32(message.keyFingerPrint); + /* int32 key_family = 2; */ + if (message.keyFamily !== 0) + writer.tag(2, WireType.Varint).int32(message.keyFamily); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.KeyReq + */ +export const KeyReq = new KeyReq$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AddrRequest$Type extends MessageType { + constructor() { + super("walletrpc.AddrRequest", [ + { no: 1, name: "account", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "type", kind: "enum", T: () => ["walletrpc.AddressType", AddressType] }, + { no: 3, name: "change", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): AddrRequest { + const message = { account: "", type: 0, change: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AddrRequest): AddrRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string account */ 1: + message.account = reader.string(); + break; + case /* walletrpc.AddressType type */ 2: + message.type = reader.int32(); + break; + case /* bool change */ 3: + message.change = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AddrRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string account = 1; */ + if (message.account !== "") + writer.tag(1, WireType.LengthDelimited).string(message.account); + /* walletrpc.AddressType type = 2; */ + if (message.type !== 0) + writer.tag(2, WireType.Varint).int32(message.type); + /* bool change = 3; */ + if (message.change !== false) + writer.tag(3, WireType.Varint).bool(message.change); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.AddrRequest + */ +export const AddrRequest = new AddrRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AddrResponse$Type extends MessageType { + constructor() { + super("walletrpc.AddrResponse", [ + { no: 1, name: "addr", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): AddrResponse { + const message = { addr: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AddrResponse): AddrResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string addr */ 1: + message.addr = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AddrResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string addr = 1; */ + if (message.addr !== "") + writer.tag(1, WireType.LengthDelimited).string(message.addr); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.AddrResponse + */ +export const AddrResponse = new AddrResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Account$Type extends MessageType { + constructor() { + super("walletrpc.Account", [ + { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "address_type", kind: "enum", T: () => ["walletrpc.AddressType", AddressType] }, + { no: 3, name: "extended_public_key", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "master_key_fingerprint", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 5, name: "derivation_path", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 6, name: "external_key_count", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 7, name: "internal_key_count", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 8, name: "watch_only", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): Account { + const message = { name: "", addressType: 0, extendedPublicKey: "", masterKeyFingerprint: new Uint8Array(0), derivationPath: "", externalKeyCount: 0, internalKeyCount: 0, watchOnly: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Account): Account { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string name */ 1: + message.name = reader.string(); + break; + case /* walletrpc.AddressType address_type */ 2: + message.addressType = reader.int32(); + break; + case /* string extended_public_key */ 3: + message.extendedPublicKey = reader.string(); + break; + case /* bytes master_key_fingerprint */ 4: + message.masterKeyFingerprint = reader.bytes(); + break; + case /* string derivation_path */ 5: + message.derivationPath = reader.string(); + break; + case /* uint32 external_key_count */ 6: + message.externalKeyCount = reader.uint32(); + break; + case /* uint32 internal_key_count */ 7: + message.internalKeyCount = reader.uint32(); + break; + case /* bool watch_only */ 8: + message.watchOnly = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Account, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string name = 1; */ + if (message.name !== "") + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* walletrpc.AddressType address_type = 2; */ + if (message.addressType !== 0) + writer.tag(2, WireType.Varint).int32(message.addressType); + /* string extended_public_key = 3; */ + if (message.extendedPublicKey !== "") + writer.tag(3, WireType.LengthDelimited).string(message.extendedPublicKey); + /* bytes master_key_fingerprint = 4; */ + if (message.masterKeyFingerprint.length) + writer.tag(4, WireType.LengthDelimited).bytes(message.masterKeyFingerprint); + /* string derivation_path = 5; */ + if (message.derivationPath !== "") + writer.tag(5, WireType.LengthDelimited).string(message.derivationPath); + /* uint32 external_key_count = 6; */ + if (message.externalKeyCount !== 0) + writer.tag(6, WireType.Varint).uint32(message.externalKeyCount); + /* uint32 internal_key_count = 7; */ + if (message.internalKeyCount !== 0) + writer.tag(7, WireType.Varint).uint32(message.internalKeyCount); + /* bool watch_only = 8; */ + if (message.watchOnly !== false) + writer.tag(8, WireType.Varint).bool(message.watchOnly); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.Account + */ +export const Account = new Account$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AddressProperty$Type extends MessageType { + constructor() { + super("walletrpc.AddressProperty", [ + { no: 1, name: "address", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "is_internal", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 3, name: "balance", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 4, name: "derivation_path", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 5, name: "public_key", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): AddressProperty { + const message = { address: "", isInternal: false, balance: 0n, derivationPath: "", publicKey: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AddressProperty): AddressProperty { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string address */ 1: + message.address = reader.string(); + break; + case /* bool is_internal */ 2: + message.isInternal = reader.bool(); + break; + case /* int64 balance */ 3: + message.balance = reader.int64().toBigInt(); + break; + case /* string derivation_path */ 4: + message.derivationPath = reader.string(); + break; + case /* bytes public_key */ 5: + message.publicKey = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AddressProperty, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string address = 1; */ + if (message.address !== "") + writer.tag(1, WireType.LengthDelimited).string(message.address); + /* bool is_internal = 2; */ + if (message.isInternal !== false) + writer.tag(2, WireType.Varint).bool(message.isInternal); + /* int64 balance = 3; */ + if (message.balance !== 0n) + writer.tag(3, WireType.Varint).int64(message.balance); + /* string derivation_path = 4; */ + if (message.derivationPath !== "") + writer.tag(4, WireType.LengthDelimited).string(message.derivationPath); + /* bytes public_key = 5; */ + if (message.publicKey.length) + writer.tag(5, WireType.LengthDelimited).bytes(message.publicKey); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.AddressProperty + */ +export const AddressProperty = new AddressProperty$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class AccountWithAddresses$Type extends MessageType { + constructor() { + super("walletrpc.AccountWithAddresses", [ + { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "address_type", kind: "enum", T: () => ["walletrpc.AddressType", AddressType] }, + { no: 3, name: "derivation_path", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "addresses", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => AddressProperty } + ]); + } + create(value?: PartialMessage): AccountWithAddresses { + const message = { name: "", addressType: 0, derivationPath: "", addresses: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AccountWithAddresses): AccountWithAddresses { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string name */ 1: + message.name = reader.string(); + break; + case /* walletrpc.AddressType address_type */ 2: + message.addressType = reader.int32(); + break; + case /* string derivation_path */ 3: + message.derivationPath = reader.string(); + break; + case /* repeated walletrpc.AddressProperty addresses */ 4: + message.addresses.push(AddressProperty.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AccountWithAddresses, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string name = 1; */ + if (message.name !== "") + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* walletrpc.AddressType address_type = 2; */ + if (message.addressType !== 0) + writer.tag(2, WireType.Varint).int32(message.addressType); + /* string derivation_path = 3; */ + if (message.derivationPath !== "") + writer.tag(3, WireType.LengthDelimited).string(message.derivationPath); + /* repeated walletrpc.AddressProperty addresses = 4; */ + for (let i = 0; i < message.addresses.length; i++) + AddressProperty.internalBinaryWrite(message.addresses[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.AccountWithAddresses + */ +export const AccountWithAddresses = new AccountWithAddresses$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListAccountsRequest$Type extends MessageType { + constructor() { + super("walletrpc.ListAccountsRequest", [ + { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "address_type", kind: "enum", T: () => ["walletrpc.AddressType", AddressType] } + ]); + } + create(value?: PartialMessage): ListAccountsRequest { + const message = { name: "", addressType: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListAccountsRequest): ListAccountsRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string name */ 1: + message.name = reader.string(); + break; + case /* walletrpc.AddressType address_type */ 2: + message.addressType = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListAccountsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string name = 1; */ + if (message.name !== "") + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* walletrpc.AddressType address_type = 2; */ + if (message.addressType !== 0) + writer.tag(2, WireType.Varint).int32(message.addressType); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListAccountsRequest + */ +export const ListAccountsRequest = new ListAccountsRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListAccountsResponse$Type extends MessageType { + constructor() { + super("walletrpc.ListAccountsResponse", [ + { no: 1, name: "accounts", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Account } + ]); + } + create(value?: PartialMessage): ListAccountsResponse { + const message = { accounts: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListAccountsResponse): ListAccountsResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated walletrpc.Account accounts */ 1: + message.accounts.push(Account.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListAccountsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated walletrpc.Account accounts = 1; */ + for (let i = 0; i < message.accounts.length; i++) + Account.internalBinaryWrite(message.accounts[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListAccountsResponse + */ +export const ListAccountsResponse = new ListAccountsResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RequiredReserveRequest$Type extends MessageType { + constructor() { + super("walletrpc.RequiredReserveRequest", [ + { no: 1, name: "additional_public_channels", kind: "scalar", T: 13 /*ScalarType.UINT32*/ } + ]); + } + create(value?: PartialMessage): RequiredReserveRequest { + const message = { additionalPublicChannels: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RequiredReserveRequest): RequiredReserveRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint32 additional_public_channels */ 1: + message.additionalPublicChannels = reader.uint32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RequiredReserveRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint32 additional_public_channels = 1; */ + if (message.additionalPublicChannels !== 0) + writer.tag(1, WireType.Varint).uint32(message.additionalPublicChannels); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.RequiredReserveRequest + */ +export const RequiredReserveRequest = new RequiredReserveRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RequiredReserveResponse$Type extends MessageType { + constructor() { + super("walletrpc.RequiredReserveResponse", [ + { no: 1, name: "required_reserve", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): RequiredReserveResponse { + const message = { requiredReserve: 0n }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RequiredReserveResponse): RequiredReserveResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int64 required_reserve */ 1: + message.requiredReserve = reader.int64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RequiredReserveResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int64 required_reserve = 1; */ + if (message.requiredReserve !== 0n) + writer.tag(1, WireType.Varint).int64(message.requiredReserve); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.RequiredReserveResponse + */ +export const RequiredReserveResponse = new RequiredReserveResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListAddressesRequest$Type extends MessageType { + constructor() { + super("walletrpc.ListAddressesRequest", [ + { no: 1, name: "account_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "show_custom_accounts", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): ListAddressesRequest { + const message = { accountName: "", showCustomAccounts: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListAddressesRequest): ListAddressesRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string account_name */ 1: + message.accountName = reader.string(); + break; + case /* bool show_custom_accounts */ 2: + message.showCustomAccounts = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListAddressesRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string account_name = 1; */ + if (message.accountName !== "") + writer.tag(1, WireType.LengthDelimited).string(message.accountName); + /* bool show_custom_accounts = 2; */ + if (message.showCustomAccounts !== false) + writer.tag(2, WireType.Varint).bool(message.showCustomAccounts); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListAddressesRequest + */ +export const ListAddressesRequest = new ListAddressesRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListAddressesResponse$Type extends MessageType { + constructor() { + super("walletrpc.ListAddressesResponse", [ + { no: 1, name: "account_with_addresses", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => AccountWithAddresses } + ]); + } + create(value?: PartialMessage): ListAddressesResponse { + const message = { accountWithAddresses: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListAddressesResponse): ListAddressesResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated walletrpc.AccountWithAddresses account_with_addresses */ 1: + message.accountWithAddresses.push(AccountWithAddresses.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListAddressesResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated walletrpc.AccountWithAddresses account_with_addresses = 1; */ + for (let i = 0; i < message.accountWithAddresses.length; i++) + AccountWithAddresses.internalBinaryWrite(message.accountWithAddresses[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListAddressesResponse + */ +export const ListAddressesResponse = new ListAddressesResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class GetTransactionRequest$Type extends MessageType { + constructor() { + super("walletrpc.GetTransactionRequest", [ + { no: 1, name: "txid", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): GetTransactionRequest { + const message = { txid: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GetTransactionRequest): GetTransactionRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string txid */ 1: + message.txid = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: GetTransactionRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string txid = 1; */ + if (message.txid !== "") + writer.tag(1, WireType.LengthDelimited).string(message.txid); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.GetTransactionRequest + */ +export const GetTransactionRequest = new GetTransactionRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignMessageWithAddrRequest$Type extends MessageType { + constructor() { + super("walletrpc.SignMessageWithAddrRequest", [ + { no: 1, name: "msg", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "addr", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): SignMessageWithAddrRequest { + const message = { msg: new Uint8Array(0), addr: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignMessageWithAddrRequest): SignMessageWithAddrRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes msg */ 1: + message.msg = reader.bytes(); + break; + case /* string addr */ 2: + message.addr = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignMessageWithAddrRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes msg = 1; */ + if (message.msg.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.msg); + /* string addr = 2; */ + if (message.addr !== "") + writer.tag(2, WireType.LengthDelimited).string(message.addr); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.SignMessageWithAddrRequest + */ +export const SignMessageWithAddrRequest = new SignMessageWithAddrRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignMessageWithAddrResponse$Type extends MessageType { + constructor() { + super("walletrpc.SignMessageWithAddrResponse", [ + { no: 1, name: "signature", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): SignMessageWithAddrResponse { + const message = { signature: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignMessageWithAddrResponse): SignMessageWithAddrResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string signature */ 1: + message.signature = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignMessageWithAddrResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string signature = 1; */ + if (message.signature !== "") + writer.tag(1, WireType.LengthDelimited).string(message.signature); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.SignMessageWithAddrResponse + */ +export const SignMessageWithAddrResponse = new SignMessageWithAddrResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class VerifyMessageWithAddrRequest$Type extends MessageType { + constructor() { + super("walletrpc.VerifyMessageWithAddrRequest", [ + { no: 1, name: "msg", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "signature", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "addr", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): VerifyMessageWithAddrRequest { + const message = { msg: new Uint8Array(0), signature: "", addr: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: VerifyMessageWithAddrRequest): VerifyMessageWithAddrRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes msg */ 1: + message.msg = reader.bytes(); + break; + case /* string signature */ 2: + message.signature = reader.string(); + break; + case /* string addr */ 3: + message.addr = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: VerifyMessageWithAddrRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes msg = 1; */ + if (message.msg.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.msg); + /* string signature = 2; */ + if (message.signature !== "") + writer.tag(2, WireType.LengthDelimited).string(message.signature); + /* string addr = 3; */ + if (message.addr !== "") + writer.tag(3, WireType.LengthDelimited).string(message.addr); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.VerifyMessageWithAddrRequest + */ +export const VerifyMessageWithAddrRequest = new VerifyMessageWithAddrRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class VerifyMessageWithAddrResponse$Type extends MessageType { + constructor() { + super("walletrpc.VerifyMessageWithAddrResponse", [ + { no: 1, name: "valid", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 2, name: "pubkey", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): VerifyMessageWithAddrResponse { + const message = { valid: false, pubkey: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: VerifyMessageWithAddrResponse): VerifyMessageWithAddrResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bool valid */ 1: + message.valid = reader.bool(); + break; + case /* bytes pubkey */ 2: + message.pubkey = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: VerifyMessageWithAddrResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bool valid = 1; */ + if (message.valid !== false) + writer.tag(1, WireType.Varint).bool(message.valid); + /* bytes pubkey = 2; */ + if (message.pubkey.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.pubkey); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.VerifyMessageWithAddrResponse + */ +export const VerifyMessageWithAddrResponse = new VerifyMessageWithAddrResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ImportAccountRequest$Type extends MessageType { + constructor() { + super("walletrpc.ImportAccountRequest", [ + { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "extended_public_key", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "master_key_fingerprint", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 4, name: "address_type", kind: "enum", T: () => ["walletrpc.AddressType", AddressType] }, + { no: 5, name: "dry_run", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): ImportAccountRequest { + const message = { name: "", extendedPublicKey: "", masterKeyFingerprint: new Uint8Array(0), addressType: 0, dryRun: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ImportAccountRequest): ImportAccountRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string name */ 1: + message.name = reader.string(); + break; + case /* string extended_public_key */ 2: + message.extendedPublicKey = reader.string(); + break; + case /* bytes master_key_fingerprint */ 3: + message.masterKeyFingerprint = reader.bytes(); + break; + case /* walletrpc.AddressType address_type */ 4: + message.addressType = reader.int32(); + break; + case /* bool dry_run */ 5: + message.dryRun = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ImportAccountRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string name = 1; */ + if (message.name !== "") + writer.tag(1, WireType.LengthDelimited).string(message.name); + /* string extended_public_key = 2; */ + if (message.extendedPublicKey !== "") + writer.tag(2, WireType.LengthDelimited).string(message.extendedPublicKey); + /* bytes master_key_fingerprint = 3; */ + if (message.masterKeyFingerprint.length) + writer.tag(3, WireType.LengthDelimited).bytes(message.masterKeyFingerprint); + /* walletrpc.AddressType address_type = 4; */ + if (message.addressType !== 0) + writer.tag(4, WireType.Varint).int32(message.addressType); + /* bool dry_run = 5; */ + if (message.dryRun !== false) + writer.tag(5, WireType.Varint).bool(message.dryRun); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ImportAccountRequest + */ +export const ImportAccountRequest = new ImportAccountRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ImportAccountResponse$Type extends MessageType { + constructor() { + super("walletrpc.ImportAccountResponse", [ + { no: 1, name: "account", kind: "message", T: () => Account }, + { no: 2, name: "dry_run_external_addrs", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "dry_run_internal_addrs", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ImportAccountResponse { + const message = { dryRunExternalAddrs: [], dryRunInternalAddrs: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ImportAccountResponse): ImportAccountResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* walletrpc.Account account */ 1: + message.account = Account.internalBinaryRead(reader, reader.uint32(), options, message.account); + break; + case /* repeated string dry_run_external_addrs */ 2: + message.dryRunExternalAddrs.push(reader.string()); + break; + case /* repeated string dry_run_internal_addrs */ 3: + message.dryRunInternalAddrs.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ImportAccountResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* walletrpc.Account account = 1; */ + if (message.account) + Account.internalBinaryWrite(message.account, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* repeated string dry_run_external_addrs = 2; */ + for (let i = 0; i < message.dryRunExternalAddrs.length; i++) + writer.tag(2, WireType.LengthDelimited).string(message.dryRunExternalAddrs[i]); + /* repeated string dry_run_internal_addrs = 3; */ + for (let i = 0; i < message.dryRunInternalAddrs.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.dryRunInternalAddrs[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ImportAccountResponse + */ +export const ImportAccountResponse = new ImportAccountResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ImportPublicKeyRequest$Type extends MessageType { + constructor() { + super("walletrpc.ImportPublicKeyRequest", [ + { no: 1, name: "public_key", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "address_type", kind: "enum", T: () => ["walletrpc.AddressType", AddressType] } + ]); + } + create(value?: PartialMessage): ImportPublicKeyRequest { + const message = { publicKey: new Uint8Array(0), addressType: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ImportPublicKeyRequest): ImportPublicKeyRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes public_key */ 1: + message.publicKey = reader.bytes(); + break; + case /* walletrpc.AddressType address_type */ 2: + message.addressType = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ImportPublicKeyRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes public_key = 1; */ + if (message.publicKey.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.publicKey); + /* walletrpc.AddressType address_type = 2; */ + if (message.addressType !== 0) + writer.tag(2, WireType.Varint).int32(message.addressType); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ImportPublicKeyRequest + */ +export const ImportPublicKeyRequest = new ImportPublicKeyRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ImportPublicKeyResponse$Type extends MessageType { + constructor() { + super("walletrpc.ImportPublicKeyResponse", [ + { no: 1, name: "status", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ImportPublicKeyResponse { + const message = { status: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ImportPublicKeyResponse): ImportPublicKeyResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string status */ 1: + message.status = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ImportPublicKeyResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string status = 1; */ + if (message.status !== "") + writer.tag(1, WireType.LengthDelimited).string(message.status); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ImportPublicKeyResponse + */ +export const ImportPublicKeyResponse = new ImportPublicKeyResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ImportTapscriptRequest$Type extends MessageType { + constructor() { + super("walletrpc.ImportTapscriptRequest", [ + { no: 1, name: "internal_public_key", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "full_tree", kind: "message", oneof: "script", T: () => TapscriptFullTree }, + { no: 3, name: "partial_reveal", kind: "message", oneof: "script", T: () => TapscriptPartialReveal }, + { no: 4, name: "root_hash_only", kind: "scalar", oneof: "script", T: 12 /*ScalarType.BYTES*/ }, + { no: 5, name: "full_key_only", kind: "scalar", oneof: "script", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): ImportTapscriptRequest { + const message = { internalPublicKey: new Uint8Array(0), script: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ImportTapscriptRequest): ImportTapscriptRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes internal_public_key */ 1: + message.internalPublicKey = reader.bytes(); + break; + case /* walletrpc.TapscriptFullTree full_tree */ 2: + message.script = { + oneofKind: "fullTree", + fullTree: TapscriptFullTree.internalBinaryRead(reader, reader.uint32(), options, (message.script as any).fullTree) + }; + break; + case /* walletrpc.TapscriptPartialReveal partial_reveal */ 3: + message.script = { + oneofKind: "partialReveal", + partialReveal: TapscriptPartialReveal.internalBinaryRead(reader, reader.uint32(), options, (message.script as any).partialReveal) + }; + break; + case /* bytes root_hash_only */ 4: + message.script = { + oneofKind: "rootHashOnly", + rootHashOnly: reader.bytes() + }; + break; + case /* bool full_key_only */ 5: + message.script = { + oneofKind: "fullKeyOnly", + fullKeyOnly: reader.bool() + }; + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ImportTapscriptRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes internal_public_key = 1; */ + if (message.internalPublicKey.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.internalPublicKey); + /* walletrpc.TapscriptFullTree full_tree = 2; */ + if (message.script.oneofKind === "fullTree") + TapscriptFullTree.internalBinaryWrite(message.script.fullTree, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* walletrpc.TapscriptPartialReveal partial_reveal = 3; */ + if (message.script.oneofKind === "partialReveal") + TapscriptPartialReveal.internalBinaryWrite(message.script.partialReveal, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + /* bytes root_hash_only = 4; */ + if (message.script.oneofKind === "rootHashOnly") + writer.tag(4, WireType.LengthDelimited).bytes(message.script.rootHashOnly); + /* bool full_key_only = 5; */ + if (message.script.oneofKind === "fullKeyOnly") + writer.tag(5, WireType.Varint).bool(message.script.fullKeyOnly); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ImportTapscriptRequest + */ +export const ImportTapscriptRequest = new ImportTapscriptRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TapscriptFullTree$Type extends MessageType { + constructor() { + super("walletrpc.TapscriptFullTree", [ + { no: 1, name: "all_leaves", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TapLeaf } + ]); + } + create(value?: PartialMessage): TapscriptFullTree { + const message = { allLeaves: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TapscriptFullTree): TapscriptFullTree { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated walletrpc.TapLeaf all_leaves */ 1: + message.allLeaves.push(TapLeaf.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TapscriptFullTree, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated walletrpc.TapLeaf all_leaves = 1; */ + for (let i = 0; i < message.allLeaves.length; i++) + TapLeaf.internalBinaryWrite(message.allLeaves[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.TapscriptFullTree + */ +export const TapscriptFullTree = new TapscriptFullTree$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TapLeaf$Type extends MessageType { + constructor() { + super("walletrpc.TapLeaf", [ + { no: 1, name: "leaf_version", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 2, name: "script", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): TapLeaf { + const message = { leafVersion: 0, script: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TapLeaf): TapLeaf { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint32 leaf_version */ 1: + message.leafVersion = reader.uint32(); + break; + case /* bytes script */ 2: + message.script = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TapLeaf, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint32 leaf_version = 1; */ + if (message.leafVersion !== 0) + writer.tag(1, WireType.Varint).uint32(message.leafVersion); + /* bytes script = 2; */ + if (message.script.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.script); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.TapLeaf + */ +export const TapLeaf = new TapLeaf$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TapscriptPartialReveal$Type extends MessageType { + constructor() { + super("walletrpc.TapscriptPartialReveal", [ + { no: 1, name: "revealed_leaf", kind: "message", T: () => TapLeaf }, + { no: 2, name: "full_inclusion_proof", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): TapscriptPartialReveal { + const message = { fullInclusionProof: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TapscriptPartialReveal): TapscriptPartialReveal { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* walletrpc.TapLeaf revealed_leaf */ 1: + message.revealedLeaf = TapLeaf.internalBinaryRead(reader, reader.uint32(), options, message.revealedLeaf); + break; + case /* bytes full_inclusion_proof */ 2: + message.fullInclusionProof = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TapscriptPartialReveal, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* walletrpc.TapLeaf revealed_leaf = 1; */ + if (message.revealedLeaf) + TapLeaf.internalBinaryWrite(message.revealedLeaf, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* bytes full_inclusion_proof = 2; */ + if (message.fullInclusionProof.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.fullInclusionProof); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.TapscriptPartialReveal + */ +export const TapscriptPartialReveal = new TapscriptPartialReveal$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ImportTapscriptResponse$Type extends MessageType { + constructor() { + super("walletrpc.ImportTapscriptResponse", [ + { no: 1, name: "p2tr_address", kind: "scalar", jsonName: "p2trAddress", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ImportTapscriptResponse { + const message = { p2TrAddress: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ImportTapscriptResponse): ImportTapscriptResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string p2tr_address = 1 [json_name = "p2trAddress"];*/ 1: + message.p2TrAddress = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ImportTapscriptResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string p2tr_address = 1 [json_name = "p2trAddress"]; */ + if (message.p2TrAddress !== "") + writer.tag(1, WireType.LengthDelimited).string(message.p2TrAddress); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ImportTapscriptResponse + */ +export const ImportTapscriptResponse = new ImportTapscriptResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class Transaction$Type extends MessageType { + constructor() { + super("walletrpc.Transaction", [ + { no: 1, name: "tx_hex", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "label", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): Transaction { + const message = { txHex: new Uint8Array(0), label: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Transaction): Transaction { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes tx_hex */ 1: + message.txHex = reader.bytes(); + break; + case /* string label */ 2: + message.label = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Transaction, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes tx_hex = 1; */ + if (message.txHex.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.txHex); + /* string label = 2; */ + if (message.label !== "") + writer.tag(2, WireType.LengthDelimited).string(message.label); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.Transaction + */ +export const Transaction = new Transaction$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class PublishResponse$Type extends MessageType { + constructor() { + super("walletrpc.PublishResponse", [ + { no: 1, name: "publish_error", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): PublishResponse { + const message = { publishError: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PublishResponse): PublishResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string publish_error */ 1: + message.publishError = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PublishResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string publish_error = 1; */ + if (message.publishError !== "") + writer.tag(1, WireType.LengthDelimited).string(message.publishError); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.PublishResponse + */ +export const PublishResponse = new PublishResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class RemoveTransactionResponse$Type extends MessageType { + constructor() { + super("walletrpc.RemoveTransactionResponse", [ + { no: 1, name: "status", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): RemoveTransactionResponse { + const message = { status: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RemoveTransactionResponse): RemoveTransactionResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string status */ 1: + message.status = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RemoveTransactionResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string status = 1; */ + if (message.status !== "") + writer.tag(1, WireType.LengthDelimited).string(message.status); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.RemoveTransactionResponse + */ +export const RemoveTransactionResponse = new RemoveTransactionResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SendOutputsRequest$Type extends MessageType { + constructor() { + super("walletrpc.SendOutputsRequest", [ + { no: 1, name: "sat_per_kw", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 2, name: "outputs", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => TxOut }, + { no: 3, name: "label", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "min_confs", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 5, name: "spend_unconfirmed", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 6, name: "coin_selection_strategy", kind: "enum", T: () => ["lnrpc.CoinSelectionStrategy", CoinSelectionStrategy] } + ]); + } + create(value?: PartialMessage): SendOutputsRequest { + const message = { satPerKw: 0n, outputs: [], label: "", minConfs: 0, spendUnconfirmed: false, coinSelectionStrategy: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SendOutputsRequest): SendOutputsRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int64 sat_per_kw */ 1: + message.satPerKw = reader.int64().toBigInt(); + break; + case /* repeated signrpc.TxOut outputs */ 2: + message.outputs.push(TxOut.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* string label */ 3: + message.label = reader.string(); + break; + case /* int32 min_confs */ 4: + message.minConfs = reader.int32(); + break; + case /* bool spend_unconfirmed */ 5: + message.spendUnconfirmed = reader.bool(); + break; + case /* lnrpc.CoinSelectionStrategy coin_selection_strategy */ 6: + message.coinSelectionStrategy = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SendOutputsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int64 sat_per_kw = 1; */ + if (message.satPerKw !== 0n) + writer.tag(1, WireType.Varint).int64(message.satPerKw); + /* repeated signrpc.TxOut outputs = 2; */ + for (let i = 0; i < message.outputs.length; i++) + TxOut.internalBinaryWrite(message.outputs[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* string label = 3; */ + if (message.label !== "") + writer.tag(3, WireType.LengthDelimited).string(message.label); + /* int32 min_confs = 4; */ + if (message.minConfs !== 0) + writer.tag(4, WireType.Varint).int32(message.minConfs); + /* bool spend_unconfirmed = 5; */ + if (message.spendUnconfirmed !== false) + writer.tag(5, WireType.Varint).bool(message.spendUnconfirmed); + /* lnrpc.CoinSelectionStrategy coin_selection_strategy = 6; */ + if (message.coinSelectionStrategy !== 0) + writer.tag(6, WireType.Varint).int32(message.coinSelectionStrategy); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.SendOutputsRequest + */ +export const SendOutputsRequest = new SendOutputsRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SendOutputsResponse$Type extends MessageType { + constructor() { + super("walletrpc.SendOutputsResponse", [ + { no: 1, name: "raw_tx", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): SendOutputsResponse { + const message = { rawTx: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SendOutputsResponse): SendOutputsResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes raw_tx */ 1: + message.rawTx = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SendOutputsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes raw_tx = 1; */ + if (message.rawTx.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.rawTx); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.SendOutputsResponse + */ +export const SendOutputsResponse = new SendOutputsResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class EstimateFeeRequest$Type extends MessageType { + constructor() { + super("walletrpc.EstimateFeeRequest", [ + { no: 1, name: "conf_target", kind: "scalar", T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): EstimateFeeRequest { + const message = { confTarget: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: EstimateFeeRequest): EstimateFeeRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int32 conf_target */ 1: + message.confTarget = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: EstimateFeeRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int32 conf_target = 1; */ + if (message.confTarget !== 0) + writer.tag(1, WireType.Varint).int32(message.confTarget); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.EstimateFeeRequest + */ +export const EstimateFeeRequest = new EstimateFeeRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class EstimateFeeResponse$Type extends MessageType { + constructor() { + super("walletrpc.EstimateFeeResponse", [ + { no: 1, name: "sat_per_kw", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 2, name: "min_relay_fee_sat_per_kw", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): EstimateFeeResponse { + const message = { satPerKw: 0n, minRelayFeeSatPerKw: 0n }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: EstimateFeeResponse): EstimateFeeResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* int64 sat_per_kw */ 1: + message.satPerKw = reader.int64().toBigInt(); + break; + case /* int64 min_relay_fee_sat_per_kw */ 2: + message.minRelayFeeSatPerKw = reader.int64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: EstimateFeeResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* int64 sat_per_kw = 1; */ + if (message.satPerKw !== 0n) + writer.tag(1, WireType.Varint).int64(message.satPerKw); + /* int64 min_relay_fee_sat_per_kw = 2; */ + if (message.minRelayFeeSatPerKw !== 0n) + writer.tag(2, WireType.Varint).int64(message.minRelayFeeSatPerKw); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.EstimateFeeResponse + */ +export const EstimateFeeResponse = new EstimateFeeResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class PendingSweep$Type extends MessageType { + constructor() { + super("walletrpc.PendingSweep", [ + { no: 1, name: "outpoint", kind: "message", T: () => OutPoint }, + { no: 2, name: "witness_type", kind: "enum", T: () => ["walletrpc.WitnessType", WitnessType] }, + { no: 3, name: "amount_sat", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 4, name: "sat_per_byte", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 5, name: "broadcast_attempts", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 6, name: "next_broadcast_height", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 7, name: "force", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 8, name: "requested_conf_target", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 9, name: "requested_sat_per_byte", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 10, name: "sat_per_vbyte", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 11, name: "requested_sat_per_vbyte", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 12, name: "immediate", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 13, name: "budget", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 14, name: "deadline_height", kind: "scalar", T: 13 /*ScalarType.UINT32*/ } + ]); + } + create(value?: PartialMessage): PendingSweep { + const message = { witnessType: 0, amountSat: 0, satPerByte: 0, broadcastAttempts: 0, nextBroadcastHeight: 0, force: false, requestedConfTarget: 0, requestedSatPerByte: 0, satPerVbyte: 0n, requestedSatPerVbyte: 0n, immediate: false, budget: 0n, deadlineHeight: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PendingSweep): PendingSweep { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* lnrpc.OutPoint outpoint */ 1: + message.outpoint = OutPoint.internalBinaryRead(reader, reader.uint32(), options, message.outpoint); + break; + case /* walletrpc.WitnessType witness_type */ 2: + message.witnessType = reader.int32(); + break; + case /* uint32 amount_sat */ 3: + message.amountSat = reader.uint32(); + break; + case /* uint32 sat_per_byte = 4 [deprecated = true];*/ 4: + message.satPerByte = reader.uint32(); + break; + case /* uint32 broadcast_attempts */ 5: + message.broadcastAttempts = reader.uint32(); + break; + case /* uint32 next_broadcast_height = 6 [deprecated = true];*/ 6: + message.nextBroadcastHeight = reader.uint32(); + break; + case /* bool force = 7 [deprecated = true];*/ 7: + message.force = reader.bool(); + break; + case /* uint32 requested_conf_target = 8 [deprecated = true];*/ 8: + message.requestedConfTarget = reader.uint32(); + break; + case /* uint32 requested_sat_per_byte = 9 [deprecated = true];*/ 9: + message.requestedSatPerByte = reader.uint32(); + break; + case /* uint64 sat_per_vbyte */ 10: + message.satPerVbyte = reader.uint64().toBigInt(); + break; + case /* uint64 requested_sat_per_vbyte */ 11: + message.requestedSatPerVbyte = reader.uint64().toBigInt(); + break; + case /* bool immediate */ 12: + message.immediate = reader.bool(); + break; + case /* uint64 budget */ 13: + message.budget = reader.uint64().toBigInt(); + break; + case /* uint32 deadline_height */ 14: + message.deadlineHeight = reader.uint32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PendingSweep, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* lnrpc.OutPoint outpoint = 1; */ + if (message.outpoint) + OutPoint.internalBinaryWrite(message.outpoint, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* walletrpc.WitnessType witness_type = 2; */ + if (message.witnessType !== 0) + writer.tag(2, WireType.Varint).int32(message.witnessType); + /* uint32 amount_sat = 3; */ + if (message.amountSat !== 0) + writer.tag(3, WireType.Varint).uint32(message.amountSat); + /* uint32 sat_per_byte = 4 [deprecated = true]; */ + if (message.satPerByte !== 0) + writer.tag(4, WireType.Varint).uint32(message.satPerByte); + /* uint32 broadcast_attempts = 5; */ + if (message.broadcastAttempts !== 0) + writer.tag(5, WireType.Varint).uint32(message.broadcastAttempts); + /* uint32 next_broadcast_height = 6 [deprecated = true]; */ + if (message.nextBroadcastHeight !== 0) + writer.tag(6, WireType.Varint).uint32(message.nextBroadcastHeight); + /* bool force = 7 [deprecated = true]; */ + if (message.force !== false) + writer.tag(7, WireType.Varint).bool(message.force); + /* uint32 requested_conf_target = 8 [deprecated = true]; */ + if (message.requestedConfTarget !== 0) + writer.tag(8, WireType.Varint).uint32(message.requestedConfTarget); + /* uint32 requested_sat_per_byte = 9 [deprecated = true]; */ + if (message.requestedSatPerByte !== 0) + writer.tag(9, WireType.Varint).uint32(message.requestedSatPerByte); + /* uint64 sat_per_vbyte = 10; */ + if (message.satPerVbyte !== 0n) + writer.tag(10, WireType.Varint).uint64(message.satPerVbyte); + /* uint64 requested_sat_per_vbyte = 11; */ + if (message.requestedSatPerVbyte !== 0n) + writer.tag(11, WireType.Varint).uint64(message.requestedSatPerVbyte); + /* bool immediate = 12; */ + if (message.immediate !== false) + writer.tag(12, WireType.Varint).bool(message.immediate); + /* uint64 budget = 13; */ + if (message.budget !== 0n) + writer.tag(13, WireType.Varint).uint64(message.budget); + /* uint32 deadline_height = 14; */ + if (message.deadlineHeight !== 0) + writer.tag(14, WireType.Varint).uint32(message.deadlineHeight); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.PendingSweep + */ +export const PendingSweep = new PendingSweep$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class PendingSweepsRequest$Type extends MessageType { + constructor() { + super("walletrpc.PendingSweepsRequest", []); + } + create(value?: PartialMessage): PendingSweepsRequest { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PendingSweepsRequest): PendingSweepsRequest { + return target ?? this.create(); + } + internalBinaryWrite(message: PendingSweepsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.PendingSweepsRequest + */ +export const PendingSweepsRequest = new PendingSweepsRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class PendingSweepsResponse$Type extends MessageType { + constructor() { + super("walletrpc.PendingSweepsResponse", [ + { no: 1, name: "pending_sweeps", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => PendingSweep } + ]); + } + create(value?: PartialMessage): PendingSweepsResponse { + const message = { pendingSweeps: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PendingSweepsResponse): PendingSweepsResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated walletrpc.PendingSweep pending_sweeps */ 1: + message.pendingSweeps.push(PendingSweep.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PendingSweepsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated walletrpc.PendingSweep pending_sweeps = 1; */ + for (let i = 0; i < message.pendingSweeps.length; i++) + PendingSweep.internalBinaryWrite(message.pendingSweeps[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.PendingSweepsResponse + */ +export const PendingSweepsResponse = new PendingSweepsResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class BumpFeeRequest$Type extends MessageType { + constructor() { + super("walletrpc.BumpFeeRequest", [ + { no: 1, name: "outpoint", kind: "message", T: () => OutPoint }, + { no: 2, name: "target_conf", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 3, name: "sat_per_byte", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 4, name: "force", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 5, name: "sat_per_vbyte", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 6, name: "immediate", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 7, name: "budget", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): BumpFeeRequest { + const message = { targetConf: 0, satPerByte: 0, force: false, satPerVbyte: 0n, immediate: false, budget: 0n }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BumpFeeRequest): BumpFeeRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* lnrpc.OutPoint outpoint */ 1: + message.outpoint = OutPoint.internalBinaryRead(reader, reader.uint32(), options, message.outpoint); + break; + case /* uint32 target_conf */ 2: + message.targetConf = reader.uint32(); + break; + case /* uint32 sat_per_byte = 3 [deprecated = true];*/ 3: + message.satPerByte = reader.uint32(); + break; + case /* bool force = 4 [deprecated = true];*/ 4: + message.force = reader.bool(); + break; + case /* uint64 sat_per_vbyte */ 5: + message.satPerVbyte = reader.uint64().toBigInt(); + break; + case /* bool immediate */ 6: + message.immediate = reader.bool(); + break; + case /* uint64 budget */ 7: + message.budget = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: BumpFeeRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* lnrpc.OutPoint outpoint = 1; */ + if (message.outpoint) + OutPoint.internalBinaryWrite(message.outpoint, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* uint32 target_conf = 2; */ + if (message.targetConf !== 0) + writer.tag(2, WireType.Varint).uint32(message.targetConf); + /* uint32 sat_per_byte = 3 [deprecated = true]; */ + if (message.satPerByte !== 0) + writer.tag(3, WireType.Varint).uint32(message.satPerByte); + /* bool force = 4 [deprecated = true]; */ + if (message.force !== false) + writer.tag(4, WireType.Varint).bool(message.force); + /* uint64 sat_per_vbyte = 5; */ + if (message.satPerVbyte !== 0n) + writer.tag(5, WireType.Varint).uint64(message.satPerVbyte); + /* bool immediate = 6; */ + if (message.immediate !== false) + writer.tag(6, WireType.Varint).bool(message.immediate); + /* uint64 budget = 7; */ + if (message.budget !== 0n) + writer.tag(7, WireType.Varint).uint64(message.budget); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.BumpFeeRequest + */ +export const BumpFeeRequest = new BumpFeeRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class BumpFeeResponse$Type extends MessageType { + constructor() { + super("walletrpc.BumpFeeResponse", [ + { no: 1, name: "status", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): BumpFeeResponse { + const message = { status: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BumpFeeResponse): BumpFeeResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string status */ 1: + message.status = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: BumpFeeResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string status = 1; */ + if (message.status !== "") + writer.tag(1, WireType.LengthDelimited).string(message.status); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.BumpFeeResponse + */ +export const BumpFeeResponse = new BumpFeeResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class BumpForceCloseFeeRequest$Type extends MessageType { + constructor() { + super("walletrpc.BumpForceCloseFeeRequest", [ + { no: 1, name: "chan_point", kind: "message", T: () => ChannelPoint }, + { no: 2, name: "deadline_delta", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, + { no: 3, name: "starting_feerate", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 4, name: "immediate", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 5, name: "budget", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): BumpForceCloseFeeRequest { + const message = { deadlineDelta: 0, startingFeerate: 0n, immediate: false, budget: 0n }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BumpForceCloseFeeRequest): BumpForceCloseFeeRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* lnrpc.ChannelPoint chan_point */ 1: + message.chanPoint = ChannelPoint.internalBinaryRead(reader, reader.uint32(), options, message.chanPoint); + break; + case /* uint32 deadline_delta */ 2: + message.deadlineDelta = reader.uint32(); + break; + case /* uint64 starting_feerate */ 3: + message.startingFeerate = reader.uint64().toBigInt(); + break; + case /* bool immediate */ 4: + message.immediate = reader.bool(); + break; + case /* uint64 budget */ 5: + message.budget = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: BumpForceCloseFeeRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* lnrpc.ChannelPoint chan_point = 1; */ + if (message.chanPoint) + ChannelPoint.internalBinaryWrite(message.chanPoint, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* uint32 deadline_delta = 2; */ + if (message.deadlineDelta !== 0) + writer.tag(2, WireType.Varint).uint32(message.deadlineDelta); + /* uint64 starting_feerate = 3; */ + if (message.startingFeerate !== 0n) + writer.tag(3, WireType.Varint).uint64(message.startingFeerate); + /* bool immediate = 4; */ + if (message.immediate !== false) + writer.tag(4, WireType.Varint).bool(message.immediate); + /* uint64 budget = 5; */ + if (message.budget !== 0n) + writer.tag(5, WireType.Varint).uint64(message.budget); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.BumpForceCloseFeeRequest + */ +export const BumpForceCloseFeeRequest = new BumpForceCloseFeeRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class BumpForceCloseFeeResponse$Type extends MessageType { + constructor() { + super("walletrpc.BumpForceCloseFeeResponse", [ + { no: 1, name: "status", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): BumpForceCloseFeeResponse { + const message = { status: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BumpForceCloseFeeResponse): BumpForceCloseFeeResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string status */ 1: + message.status = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: BumpForceCloseFeeResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string status = 1; */ + if (message.status !== "") + writer.tag(1, WireType.LengthDelimited).string(message.status); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.BumpForceCloseFeeResponse + */ +export const BumpForceCloseFeeResponse = new BumpForceCloseFeeResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListSweepsRequest$Type extends MessageType { + constructor() { + super("walletrpc.ListSweepsRequest", [ + { no: 1, name: "verbose", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 2, name: "start_height", kind: "scalar", T: 5 /*ScalarType.INT32*/ } + ]); + } + create(value?: PartialMessage): ListSweepsRequest { + const message = { verbose: false, startHeight: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListSweepsRequest): ListSweepsRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bool verbose */ 1: + message.verbose = reader.bool(); + break; + case /* int32 start_height */ 2: + message.startHeight = reader.int32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListSweepsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bool verbose = 1; */ + if (message.verbose !== false) + writer.tag(1, WireType.Varint).bool(message.verbose); + /* int32 start_height = 2; */ + if (message.startHeight !== 0) + writer.tag(2, WireType.Varint).int32(message.startHeight); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListSweepsRequest + */ +export const ListSweepsRequest = new ListSweepsRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListSweepsResponse$Type extends MessageType { + constructor() { + super("walletrpc.ListSweepsResponse", [ + { no: 1, name: "transaction_details", kind: "message", oneof: "sweeps", T: () => TransactionDetails }, + { no: 2, name: "transaction_ids", kind: "message", oneof: "sweeps", T: () => ListSweepsResponse_TransactionIDs } + ]); + } + create(value?: PartialMessage): ListSweepsResponse { + const message = { sweeps: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListSweepsResponse): ListSweepsResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* lnrpc.TransactionDetails transaction_details */ 1: + message.sweeps = { + oneofKind: "transactionDetails", + transactionDetails: TransactionDetails.internalBinaryRead(reader, reader.uint32(), options, (message.sweeps as any).transactionDetails) + }; + break; + case /* walletrpc.ListSweepsResponse.TransactionIDs transaction_ids */ 2: + message.sweeps = { + oneofKind: "transactionIds", + transactionIds: ListSweepsResponse_TransactionIDs.internalBinaryRead(reader, reader.uint32(), options, (message.sweeps as any).transactionIds) + }; + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListSweepsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* lnrpc.TransactionDetails transaction_details = 1; */ + if (message.sweeps.oneofKind === "transactionDetails") + TransactionDetails.internalBinaryWrite(message.sweeps.transactionDetails, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* walletrpc.ListSweepsResponse.TransactionIDs transaction_ids = 2; */ + if (message.sweeps.oneofKind === "transactionIds") + ListSweepsResponse_TransactionIDs.internalBinaryWrite(message.sweeps.transactionIds, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListSweepsResponse + */ +export const ListSweepsResponse = new ListSweepsResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListSweepsResponse_TransactionIDs$Type extends MessageType { + constructor() { + super("walletrpc.ListSweepsResponse.TransactionIDs", [ + { no: 1, name: "transaction_ids", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ListSweepsResponse_TransactionIDs { + const message = { transactionIds: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListSweepsResponse_TransactionIDs): ListSweepsResponse_TransactionIDs { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated string transaction_ids */ 1: + message.transactionIds.push(reader.string()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListSweepsResponse_TransactionIDs, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated string transaction_ids = 1; */ + for (let i = 0; i < message.transactionIds.length; i++) + writer.tag(1, WireType.LengthDelimited).string(message.transactionIds[i]); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListSweepsResponse.TransactionIDs + */ +export const ListSweepsResponse_TransactionIDs = new ListSweepsResponse_TransactionIDs$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class LabelTransactionRequest$Type extends MessageType { + constructor() { + super("walletrpc.LabelTransactionRequest", [ + { no: 1, name: "txid", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "label", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "overwrite", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): LabelTransactionRequest { + const message = { txid: new Uint8Array(0), label: "", overwrite: false }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LabelTransactionRequest): LabelTransactionRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes txid */ 1: + message.txid = reader.bytes(); + break; + case /* string label */ 2: + message.label = reader.string(); + break; + case /* bool overwrite */ 3: + message.overwrite = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: LabelTransactionRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes txid = 1; */ + if (message.txid.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.txid); + /* string label = 2; */ + if (message.label !== "") + writer.tag(2, WireType.LengthDelimited).string(message.label); + /* bool overwrite = 3; */ + if (message.overwrite !== false) + writer.tag(3, WireType.Varint).bool(message.overwrite); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.LabelTransactionRequest + */ +export const LabelTransactionRequest = new LabelTransactionRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class LabelTransactionResponse$Type extends MessageType { + constructor() { + super("walletrpc.LabelTransactionResponse", [ + { no: 1, name: "status", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): LabelTransactionResponse { + const message = { status: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LabelTransactionResponse): LabelTransactionResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string status */ 1: + message.status = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: LabelTransactionResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string status = 1; */ + if (message.status !== "") + writer.tag(1, WireType.LengthDelimited).string(message.status); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.LabelTransactionResponse + */ +export const LabelTransactionResponse = new LabelTransactionResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FundPsbtRequest$Type extends MessageType { + constructor() { + super("walletrpc.FundPsbtRequest", [ + { no: 1, name: "psbt", kind: "scalar", oneof: "template", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "raw", kind: "message", oneof: "template", T: () => TxTemplate }, + { no: 9, name: "coin_select", kind: "message", oneof: "template", T: () => PsbtCoinSelect }, + { no: 3, name: "target_conf", kind: "scalar", oneof: "fees", T: 13 /*ScalarType.UINT32*/ }, + { no: 4, name: "sat_per_vbyte", kind: "scalar", oneof: "fees", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 11, name: "sat_per_kw", kind: "scalar", oneof: "fees", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 5, name: "account", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 6, name: "min_confs", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 7, name: "spend_unconfirmed", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 8, name: "change_type", kind: "enum", T: () => ["walletrpc.ChangeAddressType", ChangeAddressType, "CHANGE_ADDRESS_TYPE_"] }, + { no: 10, name: "coin_selection_strategy", kind: "enum", T: () => ["lnrpc.CoinSelectionStrategy", CoinSelectionStrategy] }, + { no: 12, name: "max_fee_ratio", kind: "scalar", T: 1 /*ScalarType.DOUBLE*/ } + ]); + } + create(value?: PartialMessage): FundPsbtRequest { + const message = { template: { oneofKind: undefined }, fees: { oneofKind: undefined }, account: "", minConfs: 0, spendUnconfirmed: false, changeType: 0, coinSelectionStrategy: 0, maxFeeRatio: 0 }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FundPsbtRequest): FundPsbtRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes psbt */ 1: + message.template = { + oneofKind: "psbt", + psbt: reader.bytes() + }; + break; + case /* walletrpc.TxTemplate raw */ 2: + message.template = { + oneofKind: "raw", + raw: TxTemplate.internalBinaryRead(reader, reader.uint32(), options, (message.template as any).raw) + }; + break; + case /* walletrpc.PsbtCoinSelect coin_select */ 9: + message.template = { + oneofKind: "coinSelect", + coinSelect: PsbtCoinSelect.internalBinaryRead(reader, reader.uint32(), options, (message.template as any).coinSelect) + }; + break; + case /* uint32 target_conf */ 3: + message.fees = { + oneofKind: "targetConf", + targetConf: reader.uint32() + }; + break; + case /* uint64 sat_per_vbyte */ 4: + message.fees = { + oneofKind: "satPerVbyte", + satPerVbyte: reader.uint64().toBigInt() + }; + break; + case /* uint64 sat_per_kw */ 11: + message.fees = { + oneofKind: "satPerKw", + satPerKw: reader.uint64().toBigInt() + }; + break; + case /* string account */ 5: + message.account = reader.string(); + break; + case /* int32 min_confs */ 6: + message.minConfs = reader.int32(); + break; + case /* bool spend_unconfirmed */ 7: + message.spendUnconfirmed = reader.bool(); + break; + case /* walletrpc.ChangeAddressType change_type */ 8: + message.changeType = reader.int32(); + break; + case /* lnrpc.CoinSelectionStrategy coin_selection_strategy */ 10: + message.coinSelectionStrategy = reader.int32(); + break; + case /* double max_fee_ratio */ 12: + message.maxFeeRatio = reader.double(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FundPsbtRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes psbt = 1; */ + if (message.template.oneofKind === "psbt") + writer.tag(1, WireType.LengthDelimited).bytes(message.template.psbt); + /* walletrpc.TxTemplate raw = 2; */ + if (message.template.oneofKind === "raw") + TxTemplate.internalBinaryWrite(message.template.raw, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* walletrpc.PsbtCoinSelect coin_select = 9; */ + if (message.template.oneofKind === "coinSelect") + PsbtCoinSelect.internalBinaryWrite(message.template.coinSelect, writer.tag(9, WireType.LengthDelimited).fork(), options).join(); + /* uint32 target_conf = 3; */ + if (message.fees.oneofKind === "targetConf") + writer.tag(3, WireType.Varint).uint32(message.fees.targetConf); + /* uint64 sat_per_vbyte = 4; */ + if (message.fees.oneofKind === "satPerVbyte") + writer.tag(4, WireType.Varint).uint64(message.fees.satPerVbyte); + /* uint64 sat_per_kw = 11; */ + if (message.fees.oneofKind === "satPerKw") + writer.tag(11, WireType.Varint).uint64(message.fees.satPerKw); + /* string account = 5; */ + if (message.account !== "") + writer.tag(5, WireType.LengthDelimited).string(message.account); + /* int32 min_confs = 6; */ + if (message.minConfs !== 0) + writer.tag(6, WireType.Varint).int32(message.minConfs); + /* bool spend_unconfirmed = 7; */ + if (message.spendUnconfirmed !== false) + writer.tag(7, WireType.Varint).bool(message.spendUnconfirmed); + /* walletrpc.ChangeAddressType change_type = 8; */ + if (message.changeType !== 0) + writer.tag(8, WireType.Varint).int32(message.changeType); + /* lnrpc.CoinSelectionStrategy coin_selection_strategy = 10; */ + if (message.coinSelectionStrategy !== 0) + writer.tag(10, WireType.Varint).int32(message.coinSelectionStrategy); + /* double max_fee_ratio = 12; */ + if (message.maxFeeRatio !== 0) + writer.tag(12, WireType.Bit64).double(message.maxFeeRatio); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.FundPsbtRequest + */ +export const FundPsbtRequest = new FundPsbtRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FundPsbtResponse$Type extends MessageType { + constructor() { + super("walletrpc.FundPsbtResponse", [ + { no: 1, name: "funded_psbt", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "change_output_index", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 3, name: "locked_utxos", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => UtxoLease } + ]); + } + create(value?: PartialMessage): FundPsbtResponse { + const message = { fundedPsbt: new Uint8Array(0), changeOutputIndex: 0, lockedUtxos: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FundPsbtResponse): FundPsbtResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes funded_psbt */ 1: + message.fundedPsbt = reader.bytes(); + break; + case /* int32 change_output_index */ 2: + message.changeOutputIndex = reader.int32(); + break; + case /* repeated walletrpc.UtxoLease locked_utxos */ 3: + message.lockedUtxos.push(UtxoLease.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FundPsbtResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes funded_psbt = 1; */ + if (message.fundedPsbt.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.fundedPsbt); + /* int32 change_output_index = 2; */ + if (message.changeOutputIndex !== 0) + writer.tag(2, WireType.Varint).int32(message.changeOutputIndex); + /* repeated walletrpc.UtxoLease locked_utxos = 3; */ + for (let i = 0; i < message.lockedUtxos.length; i++) + UtxoLease.internalBinaryWrite(message.lockedUtxos[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.FundPsbtResponse + */ +export const FundPsbtResponse = new FundPsbtResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class TxTemplate$Type extends MessageType { + constructor() { + super("walletrpc.TxTemplate", [ + { no: 1, name: "inputs", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => OutPoint }, + { no: 2, name: "outputs", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } } + ]); + } + create(value?: PartialMessage): TxTemplate { + const message = { inputs: [], outputs: {} }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TxTemplate): TxTemplate { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated lnrpc.OutPoint inputs */ 1: + message.inputs.push(OutPoint.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* map outputs */ 2: + this.binaryReadMap2(message.outputs, reader, options); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + private binaryReadMap2(map: TxTemplate["outputs"], reader: IBinaryReader, options: BinaryReadOptions): void { + let len = reader.uint32(), end = reader.pos + len, key: keyof TxTemplate["outputs"] | undefined, val: TxTemplate["outputs"][any] | undefined; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case 1: + key = reader.string(); + break; + case 2: + val = reader.uint64().toBigInt(); + break; + default: throw new globalThis.Error("unknown map entry field for field walletrpc.TxTemplate.outputs"); + } + } + map[key ?? ""] = val ?? 0n; + } + internalBinaryWrite(message: TxTemplate, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated lnrpc.OutPoint inputs = 1; */ + for (let i = 0; i < message.inputs.length; i++) + OutPoint.internalBinaryWrite(message.inputs[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* map outputs = 2; */ + for (let k of Object.keys(message.outputs)) + writer.tag(2, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.Varint).uint64(message.outputs[k]).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.TxTemplate + */ +export const TxTemplate = new TxTemplate$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class PsbtCoinSelect$Type extends MessageType { + constructor() { + super("walletrpc.PsbtCoinSelect", [ + { no: 1, name: "psbt", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "existing_output_index", kind: "scalar", oneof: "changeOutput", T: 5 /*ScalarType.INT32*/ }, + { no: 3, name: "add", kind: "scalar", oneof: "changeOutput", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): PsbtCoinSelect { + const message = { psbt: new Uint8Array(0), changeOutput: { oneofKind: undefined } }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PsbtCoinSelect): PsbtCoinSelect { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes psbt */ 1: + message.psbt = reader.bytes(); + break; + case /* int32 existing_output_index */ 2: + message.changeOutput = { + oneofKind: "existingOutputIndex", + existingOutputIndex: reader.int32() + }; + break; + case /* bool add */ 3: + message.changeOutput = { + oneofKind: "add", + add: reader.bool() + }; + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PsbtCoinSelect, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes psbt = 1; */ + if (message.psbt.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.psbt); + /* int32 existing_output_index = 2; */ + if (message.changeOutput.oneofKind === "existingOutputIndex") + writer.tag(2, WireType.Varint).int32(message.changeOutput.existingOutputIndex); + /* bool add = 3; */ + if (message.changeOutput.oneofKind === "add") + writer.tag(3, WireType.Varint).bool(message.changeOutput.add); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.PsbtCoinSelect + */ +export const PsbtCoinSelect = new PsbtCoinSelect$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class UtxoLease$Type extends MessageType { + constructor() { + super("walletrpc.UtxoLease", [ + { no: 1, name: "id", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "outpoint", kind: "message", T: () => OutPoint }, + { no: 3, name: "expiration", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 4, name: "pk_script", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 5, name: "value", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): UtxoLease { + const message = { id: new Uint8Array(0), expiration: 0n, pkScript: new Uint8Array(0), value: 0n }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UtxoLease): UtxoLease { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes id */ 1: + message.id = reader.bytes(); + break; + case /* lnrpc.OutPoint outpoint */ 2: + message.outpoint = OutPoint.internalBinaryRead(reader, reader.uint32(), options, message.outpoint); + break; + case /* uint64 expiration */ 3: + message.expiration = reader.uint64().toBigInt(); + break; + case /* bytes pk_script */ 4: + message.pkScript = reader.bytes(); + break; + case /* uint64 value */ 5: + message.value = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: UtxoLease, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes id = 1; */ + if (message.id.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.id); + /* lnrpc.OutPoint outpoint = 2; */ + if (message.outpoint) + OutPoint.internalBinaryWrite(message.outpoint, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* uint64 expiration = 3; */ + if (message.expiration !== 0n) + writer.tag(3, WireType.Varint).uint64(message.expiration); + /* bytes pk_script = 4; */ + if (message.pkScript.length) + writer.tag(4, WireType.LengthDelimited).bytes(message.pkScript); + /* uint64 value = 5; */ + if (message.value !== 0n) + writer.tag(5, WireType.Varint).uint64(message.value); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.UtxoLease + */ +export const UtxoLease = new UtxoLease$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignPsbtRequest$Type extends MessageType { + constructor() { + super("walletrpc.SignPsbtRequest", [ + { no: 1, name: "funded_psbt", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): SignPsbtRequest { + const message = { fundedPsbt: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignPsbtRequest): SignPsbtRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes funded_psbt */ 1: + message.fundedPsbt = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignPsbtRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes funded_psbt = 1; */ + if (message.fundedPsbt.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.fundedPsbt); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.SignPsbtRequest + */ +export const SignPsbtRequest = new SignPsbtRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SignPsbtResponse$Type extends MessageType { + constructor() { + super("walletrpc.SignPsbtResponse", [ + { no: 1, name: "signed_psbt", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "signed_inputs", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 13 /*ScalarType.UINT32*/ } + ]); + } + create(value?: PartialMessage): SignPsbtResponse { + const message = { signedPsbt: new Uint8Array(0), signedInputs: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignPsbtResponse): SignPsbtResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes signed_psbt */ 1: + message.signedPsbt = reader.bytes(); + break; + case /* repeated uint32 signed_inputs */ 2: + if (wireType === WireType.LengthDelimited) + for (let e = reader.int32() + reader.pos; reader.pos < e;) + message.signedInputs.push(reader.uint32()); + else + message.signedInputs.push(reader.uint32()); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SignPsbtResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes signed_psbt = 1; */ + if (message.signedPsbt.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.signedPsbt); + /* repeated uint32 signed_inputs = 2; */ + if (message.signedInputs.length) { + writer.tag(2, WireType.LengthDelimited).fork(); + for (let i = 0; i < message.signedInputs.length; i++) + writer.uint32(message.signedInputs[i]); + writer.join(); + } + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.SignPsbtResponse + */ +export const SignPsbtResponse = new SignPsbtResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FinalizePsbtRequest$Type extends MessageType { + constructor() { + super("walletrpc.FinalizePsbtRequest", [ + { no: 1, name: "funded_psbt", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 5, name: "account", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): FinalizePsbtRequest { + const message = { fundedPsbt: new Uint8Array(0), account: "" }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FinalizePsbtRequest): FinalizePsbtRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes funded_psbt */ 1: + message.fundedPsbt = reader.bytes(); + break; + case /* string account */ 5: + message.account = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FinalizePsbtRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes funded_psbt = 1; */ + if (message.fundedPsbt.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.fundedPsbt); + /* string account = 5; */ + if (message.account !== "") + writer.tag(5, WireType.LengthDelimited).string(message.account); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.FinalizePsbtRequest + */ +export const FinalizePsbtRequest = new FinalizePsbtRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class FinalizePsbtResponse$Type extends MessageType { + constructor() { + super("walletrpc.FinalizePsbtResponse", [ + { no: 1, name: "signed_psbt", kind: "scalar", T: 12 /*ScalarType.BYTES*/ }, + { no: 2, name: "raw_final_tx", kind: "scalar", T: 12 /*ScalarType.BYTES*/ } + ]); + } + create(value?: PartialMessage): FinalizePsbtResponse { + const message = { signedPsbt: new Uint8Array(0), rawFinalTx: new Uint8Array(0) }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FinalizePsbtResponse): FinalizePsbtResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bytes signed_psbt */ 1: + message.signedPsbt = reader.bytes(); + break; + case /* bytes raw_final_tx */ 2: + message.rawFinalTx = reader.bytes(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: FinalizePsbtResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bytes signed_psbt = 1; */ + if (message.signedPsbt.length) + writer.tag(1, WireType.LengthDelimited).bytes(message.signedPsbt); + /* bytes raw_final_tx = 2; */ + if (message.rawFinalTx.length) + writer.tag(2, WireType.LengthDelimited).bytes(message.rawFinalTx); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.FinalizePsbtResponse + */ +export const FinalizePsbtResponse = new FinalizePsbtResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListLeasesRequest$Type extends MessageType { + constructor() { + super("walletrpc.ListLeasesRequest", []); + } + create(value?: PartialMessage): ListLeasesRequest { + const message = {}; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListLeasesRequest): ListLeasesRequest { + return target ?? this.create(); + } + internalBinaryWrite(message: ListLeasesRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListLeasesRequest + */ +export const ListLeasesRequest = new ListLeasesRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListLeasesResponse$Type extends MessageType { + constructor() { + super("walletrpc.ListLeasesResponse", [ + { no: 1, name: "locked_utxos", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => UtxoLease } + ]); + } + create(value?: PartialMessage): ListLeasesResponse { + const message = { lockedUtxos: [] }; + globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this }); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListLeasesResponse): ListLeasesResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated walletrpc.UtxoLease locked_utxos */ 1: + message.lockedUtxos.push(UtxoLease.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListLeasesResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated walletrpc.UtxoLease locked_utxos = 1; */ + for (let i = 0; i < message.lockedUtxos.length; i++) + UtxoLease.internalBinaryWrite(message.lockedUtxos[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message walletrpc.ListLeasesResponse + */ +export const ListLeasesResponse = new ListLeasesResponse$Type(); +/** + * @generated ServiceType for protobuf service walletrpc.WalletKit + */ +export const WalletKit = new ServiceType("walletrpc.WalletKit", [ + { name: "ListUnspent", options: {}, I: ListUnspentRequest, O: ListUnspentResponse }, + { name: "LeaseOutput", options: {}, I: LeaseOutputRequest, O: LeaseOutputResponse }, + { name: "ReleaseOutput", options: {}, I: ReleaseOutputRequest, O: ReleaseOutputResponse }, + { name: "ListLeases", options: {}, I: ListLeasesRequest, O: ListLeasesResponse }, + { name: "DeriveNextKey", options: {}, I: KeyReq, O: KeyDescriptor }, + { name: "DeriveKey", options: {}, I: KeyLocator, O: KeyDescriptor }, + { name: "NextAddr", options: {}, I: AddrRequest, O: AddrResponse }, + { name: "GetTransaction", options: {}, I: GetTransactionRequest, O: Transaction$ }, + { name: "ListAccounts", options: {}, I: ListAccountsRequest, O: ListAccountsResponse }, + { name: "RequiredReserve", options: {}, I: RequiredReserveRequest, O: RequiredReserveResponse }, + { name: "ListAddresses", options: {}, I: ListAddressesRequest, O: ListAddressesResponse }, + { name: "SignMessageWithAddr", options: {}, I: SignMessageWithAddrRequest, O: SignMessageWithAddrResponse }, + { name: "VerifyMessageWithAddr", options: {}, I: VerifyMessageWithAddrRequest, O: VerifyMessageWithAddrResponse }, + { name: "ImportAccount", options: {}, I: ImportAccountRequest, O: ImportAccountResponse }, + { name: "ImportPublicKey", options: {}, I: ImportPublicKeyRequest, O: ImportPublicKeyResponse }, + { name: "ImportTapscript", options: {}, I: ImportTapscriptRequest, O: ImportTapscriptResponse }, + { name: "PublishTransaction", options: {}, I: Transaction, O: PublishResponse }, + { name: "RemoveTransaction", options: {}, I: GetTransactionRequest, O: RemoveTransactionResponse }, + { name: "SendOutputs", options: {}, I: SendOutputsRequest, O: SendOutputsResponse }, + { name: "EstimateFee", options: {}, I: EstimateFeeRequest, O: EstimateFeeResponse }, + { name: "PendingSweeps", options: {}, I: PendingSweepsRequest, O: PendingSweepsResponse }, + { name: "BumpFee", options: {}, I: BumpFeeRequest, O: BumpFeeResponse }, + { name: "BumpForceCloseFee", options: {}, I: BumpForceCloseFeeRequest, O: BumpForceCloseFeeResponse }, + { name: "ListSweeps", options: {}, I: ListSweepsRequest, O: ListSweepsResponse }, + { name: "LabelTransaction", options: {}, I: LabelTransactionRequest, O: LabelTransactionResponse }, + { name: "FundPsbt", options: {}, I: FundPsbtRequest, O: FundPsbtResponse }, + { name: "SignPsbt", options: {}, I: SignPsbtRequest, O: SignPsbtResponse }, + { name: "FinalizePsbt", options: {}, I: FinalizePsbtRequest, O: FinalizePsbtResponse } +]); diff --git a/proto/lnd/walletunlocker.client.ts b/proto/lnd/walletunlocker.client.ts index a3e3d7da7..ed94ca63c 100644 --- a/proto/lnd/walletunlocker.client.ts +++ b/proto/lnd/walletunlocker.client.ts @@ -3,16 +3,16 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { WalletUnlocker } from "./walletunlocker.js"; -import type { ChangePasswordResponse } from "./walletunlocker.js"; -import type { ChangePasswordRequest } from "./walletunlocker.js"; -import type { UnlockWalletResponse } from "./walletunlocker.js"; -import type { UnlockWalletRequest } from "./walletunlocker.js"; -import type { InitWalletResponse } from "./walletunlocker.js"; -import type { InitWalletRequest } from "./walletunlocker.js"; +import { WalletUnlocker } from "./walletunlocker"; +import type { ChangePasswordResponse } from "./walletunlocker"; +import type { ChangePasswordRequest } from "./walletunlocker"; +import type { UnlockWalletResponse } from "./walletunlocker"; +import type { UnlockWalletRequest } from "./walletunlocker"; +import type { InitWalletResponse } from "./walletunlocker"; +import type { InitWalletRequest } from "./walletunlocker"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { GenSeedResponse } from "./walletunlocker.js"; -import type { GenSeedRequest } from "./walletunlocker.js"; +import type { GenSeedResponse } from "./walletunlocker"; +import type { GenSeedRequest } from "./walletunlocker"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; // diff --git a/proto/lnd/walletunlocker.ts b/proto/lnd/walletunlocker.ts index a472c857e..7851c6756 100644 --- a/proto/lnd/walletunlocker.ts +++ b/proto/lnd/walletunlocker.ts @@ -12,7 +12,7 @@ import type { PartialMessage } from "@protobuf-ts/runtime"; import { reflectionMergePartial } from "@protobuf-ts/runtime"; import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; import { MessageType } from "@protobuf-ts/runtime"; -import { ChanBackupSnapshot } from "./lightning.js"; +import { ChanBackupSnapshot } from "./lightning"; /** * @generated from protobuf message lnrpc.GenSeedRequest */ diff --git a/proto/others/signer.proto b/proto/others/signer.proto new file mode 100644 index 000000000..ad43f0d3e --- /dev/null +++ b/proto/others/signer.proto @@ -0,0 +1,709 @@ +syntax = "proto3"; + +package signrpc; + +option go_package = "github.com/lightningnetwork/lnd/lnrpc/signrpc"; + +// Signer is a service that gives access to the signing functionality of the +// daemon's wallet. +service Signer { + /* + SignOutputRaw is a method that can be used to generated a signature for a + set of inputs/outputs to a transaction. Each request specifies details + concerning how the outputs should be signed, which keys they should be + signed with, and also any optional tweaks. The return value is a fixed + 64-byte signature (the same format as we use on the wire in Lightning). + + If we are unable to sign using the specified keys, then an error will be + returned. + */ + rpc SignOutputRaw (SignReq) returns (SignResp); + + /* + ComputeInputScript generates a complete InputIndex for the passed + transaction with the signature as defined within the passed SignDescriptor. + This method should be capable of generating the proper input script for both + regular p2wkh/p2tr outputs and p2wkh outputs nested within a regular p2sh + output. + + Note that when using this method to sign inputs belonging to the wallet, + the only items of the SignDescriptor that need to be populated are pkScript + in the TxOut field, the value in that same field, and finally the input + index. + */ + rpc ComputeInputScript (SignReq) returns (InputScriptResp); + + /* + SignMessage signs a message with the key specified in the key locator. The + returned signature is fixed-size LN wire format encoded. + + The main difference to SignMessage in the main RPC is that a specific key is + used to sign the message instead of the node identity private key. + */ + rpc SignMessage (SignMessageReq) returns (SignMessageResp); + + /* + VerifyMessage verifies a signature over a message using the public key + provided. The signature must be fixed-size LN wire format encoded. + + The main difference to VerifyMessage in the main RPC is that the public key + used to sign the message does not have to be a node known to the network. + */ + rpc VerifyMessage (VerifyMessageReq) returns (VerifyMessageResp); + + /* + DeriveSharedKey returns a shared secret key by performing Diffie-Hellman key + derivation between the ephemeral public key in the request and the node's + key specified in the key_desc parameter. Either a key locator or a raw + public key is expected in the key_desc, if neither is supplied, defaults to + the node's identity private key: + P_shared = privKeyNode * ephemeralPubkey + The resulting shared public key is serialized in the compressed format and + hashed with sha256, resulting in the final key length of 256bit. + */ + rpc DeriveSharedKey (SharedKeyRequest) returns (SharedKeyResponse); + + /* + MuSig2CombineKeys (experimental!) is a stateless helper RPC that can be used + to calculate the combined MuSig2 public key from a list of all participating + signers' public keys. This RPC is completely stateless and deterministic and + does not create any signing session. It can be used to determine the Taproot + public key that should be put in an on-chain output once all public keys are + known. A signing session is only needed later when that output should be + _spent_ again. + + NOTE: The MuSig2 BIP is not final yet and therefore this API must be + considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + releases. Backward compatibility is not guaranteed! + */ + rpc MuSig2CombineKeys (MuSig2CombineKeysRequest) + returns (MuSig2CombineKeysResponse); + + /* + MuSig2CreateSession (experimental!) creates a new MuSig2 signing session + using the local key identified by the key locator. The complete list of all + public keys of all signing parties must be provided, including the public + key of the local signing key. If nonces of other parties are already known, + they can be submitted as well to reduce the number of RPC calls necessary + later on. + + NOTE: The MuSig2 BIP is not final yet and therefore this API must be + considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + releases. Backward compatibility is not guaranteed! + */ + rpc MuSig2CreateSession (MuSig2SessionRequest) + returns (MuSig2SessionResponse); + + /* + MuSig2RegisterNonces (experimental!) registers one or more public nonces of + other signing participants for a session identified by its ID. This RPC can + be called multiple times until all nonces are registered. + + NOTE: The MuSig2 BIP is not final yet and therefore this API must be + considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + releases. Backward compatibility is not guaranteed! + */ + rpc MuSig2RegisterNonces (MuSig2RegisterNoncesRequest) + returns (MuSig2RegisterNoncesResponse); + + /* + MuSig2Sign (experimental!) creates a partial signature using the local + signing key that was specified when the session was created. This can only + be called when all public nonces of all participants are known and have been + registered with the session. If this node isn't responsible for combining + all the partial signatures, then the cleanup flag should be set, indicating + that the session can be removed from memory once the signature was produced. + + NOTE: The MuSig2 BIP is not final yet and therefore this API must be + considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + releases. Backward compatibility is not guaranteed! + */ + rpc MuSig2Sign (MuSig2SignRequest) returns (MuSig2SignResponse); + + /* + MuSig2CombineSig (experimental!) combines the given partial signature(s) + with the local one, if it already exists. Once a partial signature of all + participants is registered, the final signature will be combined and + returned. + + NOTE: The MuSig2 BIP is not final yet and therefore this API must be + considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + releases. Backward compatibility is not guaranteed! + */ + rpc MuSig2CombineSig (MuSig2CombineSigRequest) + returns (MuSig2CombineSigResponse); + + /* + MuSig2Cleanup (experimental!) allows a caller to clean up a session early in + cases where it's obvious that the signing session won't succeed and the + resources can be released. + + NOTE: The MuSig2 BIP is not final yet and therefore this API must be + considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming + releases. Backward compatibility is not guaranteed! + */ + rpc MuSig2Cleanup (MuSig2CleanupRequest) returns (MuSig2CleanupResponse); +} + +message KeyLocator { + // The family of key being identified. + int32 key_family = 1; + + // The precise index of the key being identified. + int32 key_index = 2; +} + +message KeyDescriptor { + /* + The raw bytes of the public key in the key pair being identified. Either + this or the KeyLocator must be specified. + */ + bytes raw_key_bytes = 1; + + /* + The key locator that identifies which private key to use for signing. + Either this or the raw bytes of the target public key must be specified. + */ + KeyLocator key_loc = 2; +} + +message TxOut { + // The value of the output being spent. + int64 value = 1; + + // The script of the output being spent. + bytes pk_script = 2; +} + +enum SignMethod { + /* + Specifies that a SegWit v0 (p2wkh, np2wkh, p2wsh) input script should be + signed. + */ + SIGN_METHOD_WITNESS_V0 = 0; + + /* + Specifies that a SegWit v1 (p2tr) input should be signed by using the + BIP0086 method (commit to internal key only). + */ + SIGN_METHOD_TAPROOT_KEY_SPEND_BIP0086 = 1; + + /* + Specifies that a SegWit v1 (p2tr) input should be signed by using a given + taproot hash to commit to in addition to the internal key. + */ + SIGN_METHOD_TAPROOT_KEY_SPEND = 2; + + /* + Specifies that a SegWit v1 (p2tr) input should be spent using the script + path and that a specific leaf script should be signed for. + */ + SIGN_METHOD_TAPROOT_SCRIPT_SPEND = 3; +} + +message SignDescriptor { + /* + A descriptor that precisely describes *which* key to use for signing. This + may provide the raw public key directly, or require the Signer to re-derive + the key according to the populated derivation path. + + Note that if the key descriptor was obtained through walletrpc.DeriveKey, + then the key locator MUST always be provided, since the derived keys are not + persisted unlike with DeriveNextKey. + */ + KeyDescriptor key_desc = 1; + + /* + A scalar value that will be added to the private key corresponding to the + above public key to obtain the private key to be used to sign this input. + This value is typically derived via the following computation: + + * derivedKey = privkey + sha256(perCommitmentPoint || pubKey) mod N + */ + bytes single_tweak = 2; + + /* + A private key that will be used in combination with its corresponding + private key to derive the private key that is to be used to sign the target + input. Within the Lightning protocol, this value is typically the + commitment secret from a previously revoked commitment transaction. This + value is in combination with two hash values, and the original private key + to derive the private key to be used when signing. + + * k = (privKey*sha256(pubKey || tweakPub) + + tweakPriv*sha256(tweakPub || pubKey)) mod N + */ + bytes double_tweak = 3; + + /* + The 32 byte input to the taproot tweak derivation that is used to derive + the output key from an internal key: outputKey = internalKey + + tagged_hash("tapTweak", internalKey || tapTweak). + + When doing a BIP 86 spend, this field can be an empty byte slice. + + When doing a normal key path spend, with the output key committing to an + actual script root, then this field should be: the tapscript root hash. + */ + bytes tap_tweak = 10; + + /* + The full script required to properly redeem the output. This field will + only be populated if a p2tr, p2wsh or a p2sh output is being signed. If a + taproot script path spend is being attempted, then this should be the raw + leaf script. + */ + bytes witness_script = 4; + + /* + A description of the output being spent. The value and script MUST be + provided. + */ + TxOut output = 5; + + /* + The target sighash type that should be used when generating the final + sighash, and signature. + */ + uint32 sighash = 7; + + /* + The target input within the transaction that should be signed. + */ + int32 input_index = 8; + + /* + The sign method specifies how the input should be signed. Depending on the + method, either the tap_tweak, witness_script or both need to be specified. + Defaults to SegWit v0 signing to be backward compatible with older RPC + clients. + */ + SignMethod sign_method = 9; +} + +message SignReq { + // The raw bytes of the transaction to be signed. + bytes raw_tx_bytes = 1; + + // A set of sign descriptors, for each input to be signed. + repeated SignDescriptor sign_descs = 2; + + /* + The full list of UTXO information for each of the inputs being spent. This + is required when spending one or more taproot (SegWit v1) outputs. + */ + repeated TxOut prev_outputs = 3; +} + +message SignResp { + /* + A set of signatures realized in a fixed 64-byte format ordered in ascending + input order. + */ + repeated bytes raw_sigs = 1; +} + +message InputScript { + // The serializes witness stack for the specified input. + repeated bytes witness = 1; + + /* + The optional sig script for the specified witness that will only be set if + the input specified is a nested p2sh witness program. + */ + bytes sig_script = 2; +} + +message InputScriptResp { + // The set of fully valid input scripts requested. + repeated InputScript input_scripts = 1; +} + +message SignMessageReq { + /* + The message to be signed. When using REST, this field must be encoded as + base64. + */ + bytes msg = 1; + + // The key locator that identifies which key to use for signing. + KeyLocator key_loc = 2; + + // Double-SHA256 hash instead of just the default single round. + bool double_hash = 3; + + /* + Use the compact (pubkey recoverable) format instead of the raw lnwire + format. This option cannot be used with Schnorr signatures. + */ + bool compact_sig = 4; + + /* + Use Schnorr signature. This option cannot be used with compact format. + */ + bool schnorr_sig = 5; + + /* + The optional Taproot tweak bytes to apply to the private key before creating + a Schnorr signature. The private key is tweaked as described in BIP-341: + privKey + h_tapTweak(internalKey || tapTweak) + */ + bytes schnorr_sig_tap_tweak = 6; + + /* + An optional tag that can be provided when taking a tagged hash of a + message. This option can only be used when schnorr_sig is true. + */ + bytes tag = 7; +} +message SignMessageResp { + /* + The signature for the given message in the fixed-size LN wire format. + */ + bytes signature = 1; +} + +message VerifyMessageReq { + // The message over which the signature is to be verified. When using + // REST, this field must be encoded as base64. + bytes msg = 1; + + /* + The fixed-size LN wire encoded signature to be verified over the given + message. When using REST, this field must be encoded as base64. + */ + bytes signature = 2; + + /* + The public key the signature has to be valid for. When using REST, this + field must be encoded as base64. If the is_schnorr_sig option is true, then + the public key is expected to be in the 32-byte x-only serialization + according to BIP-340. + */ + bytes pubkey = 3; + + /* + Specifies if the signature is a Schnorr signature. + */ + bool is_schnorr_sig = 4; + + /* + An optional tag that can be provided when taking a tagged hash of a + message. This option can only be used when is_schnorr_sig is true. + */ + bytes tag = 5; +} + +message VerifyMessageResp { + // Whether the signature was valid over the given message. + bool valid = 1; +} + +message SharedKeyRequest { + // The ephemeral public key to use for the DH key derivation. + bytes ephemeral_pubkey = 1; + + /* + Deprecated. The optional key locator of the local key that should be used. + If this parameter is not set then the node's identity private key will be + used. + */ + KeyLocator key_loc = 2 [deprecated = true]; + + /* + A key descriptor describes the key used for performing ECDH. Either a key + locator or a raw public key is expected, if neither is supplied, defaults to + the node's identity private key. + */ + KeyDescriptor key_desc = 3; +} + +message SharedKeyResponse { + // The shared public key, hashed with sha256. + bytes shared_key = 1; +} + +message TweakDesc { + /* + Tweak is the 32-byte value that will modify the public key. + */ + bytes tweak = 1; + + /* + Specifies if the target key should be converted to an x-only public key + before tweaking. If true, then the public key will be mapped to an x-only + key before the tweaking operation is applied. + */ + bool is_x_only = 2; +} + +message TaprootTweakDesc { + /* + The root hash of the tapscript tree if a script path is committed to. If + the MuSig2 key put on chain doesn't also commit to a script path (BIP-0086 + key spend only), then this needs to be empty and the key_spend_only field + below must be set to true. This is required because gRPC cannot + differentiate between a zero-size byte slice and a nil byte slice (both + would be serialized the same way). So the extra boolean is required. + */ + bytes script_root = 1; + + /* + Indicates that the above script_root is expected to be empty because this + is a BIP-0086 key spend only commitment where only the internal key is + committed to instead of also including a script root hash. + */ + bool key_spend_only = 2; +} + +enum MuSig2Version { + /* + The default value on the RPC is zero for enums so we need to represent an + invalid/undefined version by default to make sure clients upgrade their + software to set the version explicitly. + */ + MUSIG2_VERSION_UNDEFINED = 0; + + /* + The version of MuSig2 that lnd 0.15.x shipped with, which corresponds to the + version v0.4.0 of the MuSig2 BIP draft. + */ + MUSIG2_VERSION_V040 = 1; + + /* + The current version of MuSig2 which corresponds to the version v1.0.0rc2 of + the MuSig2 BIP draft. + */ + MUSIG2_VERSION_V100RC2 = 2; +} + +message MuSig2CombineKeysRequest { + /* + A list of all public keys (serialized in 32-byte x-only format for v0.4.0 + and 33-byte compressed format for v1.0.0rc2!) participating in the signing + session. The list will always be sorted lexicographically internally. This + must include the local key which is described by the above key_loc. + */ + repeated bytes all_signer_pubkeys = 1; + + /* + A series of optional generic tweaks to be applied to the aggregated + public key. + */ + repeated TweakDesc tweaks = 2; + + /* + An optional taproot specific tweak that must be specified if the MuSig2 + combined key will be used as the main taproot key of a taproot output + on-chain. + */ + TaprootTweakDesc taproot_tweak = 3; + + /* + The mandatory version of the MuSig2 BIP draft to use. This is necessary to + differentiate between the changes that were made to the BIP while this + experimental RPC was already released. Some of those changes affect how the + combined key and nonces are created. + */ + MuSig2Version version = 4; +} + +message MuSig2CombineKeysResponse { + /* + The combined public key (in the 32-byte x-only format) with all tweaks + applied to it. If a taproot tweak is specified, this corresponds to the + taproot key that can be put into the on-chain output. + */ + bytes combined_key = 1; + + /* + The raw combined public key (in the 32-byte x-only format) before any tweaks + are applied to it. If a taproot tweak is specified, this corresponds to the + internal key that needs to be put into the witness if the script spend path + is used. + */ + bytes taproot_internal_key = 2; + + /* + The version of the MuSig2 BIP that was used to combine the keys. + */ + MuSig2Version version = 4; +} + +message MuSig2SessionRequest { + /* + The key locator that identifies which key to use for signing. + */ + KeyLocator key_loc = 1; + + /* + A list of all public keys (serialized in 32-byte x-only format for v0.4.0 + and 33-byte compressed format for v1.0.0rc2!) participating in the signing + session. The list will always be sorted lexicographically internally. This + must include the local key which is described by the above key_loc. + */ + repeated bytes all_signer_pubkeys = 2; + + /* + An optional list of all public nonces of other signing participants that + might already be known. + */ + repeated bytes other_signer_public_nonces = 3; + + /* + A series of optional generic tweaks to be applied to the aggregated + public key. + */ + repeated TweakDesc tweaks = 4; + + /* + An optional taproot specific tweak that must be specified if the MuSig2 + combined key will be used as the main taproot key of a taproot output + on-chain. + */ + TaprootTweakDesc taproot_tweak = 5; + + /* + The mandatory version of the MuSig2 BIP draft to use. This is necessary to + differentiate between the changes that were made to the BIP while this + experimental RPC was already released. Some of those changes affect how the + combined key and nonces are created. + */ + MuSig2Version version = 6; + + /* + A set of pre generated secret local nonces to use in the musig2 session. + This field is optional. This can be useful for protocols that need to send + nonces ahead of time before the set of signer keys are known. This value + MUST be 97 bytes and be the concatenation of two CSPRNG generated 32 byte + values and local public key used for signing as specified in the key_loc + field. + */ + bytes pregenerated_local_nonce = 7; +} + +message MuSig2SessionResponse { + /* + The unique ID that represents this signing session. A session can be used + for producing a signature a single time. If the signing fails for any + reason, a new session with the same participants needs to be created. + */ + bytes session_id = 1; + + /* + The combined public key (in the 32-byte x-only format) with all tweaks + applied to it. If a taproot tweak is specified, this corresponds to the + taproot key that can be put into the on-chain output. + */ + bytes combined_key = 2; + + /* + The raw combined public key (in the 32-byte x-only format) before any tweaks + are applied to it. If a taproot tweak is specified, this corresponds to the + internal key that needs to be put into the witness if the script spend path + is used. + */ + bytes taproot_internal_key = 3; + + /* + The two public nonces the local signer uses, combined into a single value + of 66 bytes. Can be split into the two 33-byte points to get the individual + nonces. + */ + bytes local_public_nonces = 4; + + /* + Indicates whether all nonces required to start the signing process are known + now. + */ + bool have_all_nonces = 5; + + /* + The version of the MuSig2 BIP that was used to create the session. + */ + MuSig2Version version = 6; +} + +message MuSig2RegisterNoncesRequest { + /* + The unique ID of the signing session those nonces should be registered with. + */ + bytes session_id = 1; + + /* + A list of all public nonces of other signing participants that should be + registered. + */ + repeated bytes other_signer_public_nonces = 3; +} + +message MuSig2RegisterNoncesResponse { + /* + Indicates whether all nonces required to start the signing process are known + now. + */ + bool have_all_nonces = 1; +} + +message MuSig2SignRequest { + /* + The unique ID of the signing session to use for signing. + */ + bytes session_id = 1; + + /* + The 32-byte SHA256 digest of the message to sign. + */ + bytes message_digest = 2; + + /* + Cleanup indicates that after signing, the session state can be cleaned up, + since another participant is going to be responsible for combining the + partial signatures. + */ + bool cleanup = 3; +} + +message MuSig2SignResponse { + /* + The partial signature created by the local signer. + */ + bytes local_partial_signature = 1; +} + +message MuSig2CombineSigRequest { + /* + The unique ID of the signing session to combine the signatures for. + */ + bytes session_id = 1; + + /* + The list of all other participants' partial signatures to add to the current + session. + */ + repeated bytes other_partial_signatures = 2; +} + +message MuSig2CombineSigResponse { + /* + Indicates whether all partial signatures required to create a final, full + signature are known yet. If this is true, then the final_signature field is + set, otherwise it is empty. + */ + bool have_all_signatures = 1; + + /* + The final, full signature that is valid for the combined public key. + */ + bytes final_signature = 2; +} + +message MuSig2CleanupRequest { + /* + The unique ID of the signing session that should be removed/cleaned up. + */ + bytes session_id = 1; +} + +message MuSig2CleanupResponse { +} \ No newline at end of file diff --git a/proto/others/walletkit.proto b/proto/others/walletkit.proto new file mode 100644 index 000000000..5ecb18a94 --- /dev/null +++ b/proto/others/walletkit.proto @@ -0,0 +1,1568 @@ +syntax = "proto3"; + +package walletrpc; + +import "lightning.proto"; +import "signer.proto"; + +option go_package = "github.com/lightningnetwork/lnd/lnrpc/walletrpc"; + +/* + * Comments in this file will be directly parsed into the API + * Documentation as descriptions of the associated method, message, or field. + * These descriptions should go right above the definition of the object, and + * can be in either block or // comment format. + * + * An RPC method can be matched to an lncli command by placing a line in the + * beginning of the description in exactly the following format: + * lncli: `methodname` + * + * Failure to specify the exact name of the command will cause documentation + * generation to fail. + * + * More information on how exactly the gRPC documentation is generated from + * this proto file can be found here: + * https://github.com/lightninglabs/lightning-api + */ + +// WalletKit is a service that gives access to the core functionalities of the +// daemon's wallet. +service WalletKit { + /* + ListUnspent returns a list of all utxos spendable by the wallet with a + number of confirmations between the specified minimum and maximum. By + default, all utxos are listed. To list only the unconfirmed utxos, set + the unconfirmed_only to true. + */ + rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse); + + /* lncli: `wallet leaseoutput` + LeaseOutput locks an output to the given ID, preventing it from being + available for any future coin selection attempts. The absolute time of the + lock's expiration is returned. The expiration of the lock can be extended by + successive invocations of this RPC. Outputs can be unlocked before their + expiration through `ReleaseOutput`. + */ + rpc LeaseOutput (LeaseOutputRequest) returns (LeaseOutputResponse); + + /* lncli: `wallet releaseoutput` + ReleaseOutput unlocks an output, allowing it to be available for coin + selection if it remains unspent. The ID should match the one used to + originally lock the output. + */ + rpc ReleaseOutput (ReleaseOutputRequest) returns (ReleaseOutputResponse); + + /* lncli: `wallet listleases` + ListLeases lists all currently locked utxos. + */ + rpc ListLeases (ListLeasesRequest) returns (ListLeasesResponse); + + /* + DeriveNextKey attempts to derive the *next* key within the key family + (account in BIP43) specified. This method should return the next external + child within this branch. + */ + rpc DeriveNextKey (KeyReq) returns (signrpc.KeyDescriptor); + + /* + DeriveKey attempts to derive an arbitrary key specified by the passed + KeyLocator. + */ + rpc DeriveKey (signrpc.KeyLocator) returns (signrpc.KeyDescriptor); + + /* + NextAddr returns the next unused address within the wallet. + */ + rpc NextAddr (AddrRequest) returns (AddrResponse); + + /* lncli: `wallet gettx` + GetTransaction returns details for a transaction found in the wallet. + */ + rpc GetTransaction (GetTransactionRequest) returns (lnrpc.Transaction); + + /* lncli: `wallet accounts list` + ListAccounts retrieves all accounts belonging to the wallet by default. A + name and key scope filter can be provided to filter through all of the + wallet accounts and return only those matching. + */ + rpc ListAccounts (ListAccountsRequest) returns (ListAccountsResponse); + + /* lncli: `wallet requiredreserve` + RequiredReserve returns the minimum amount of satoshis that should be kept + in the wallet in order to fee bump anchor channels if necessary. The value + scales with the number of public anchor channels but is capped at a maximum. + */ + rpc RequiredReserve (RequiredReserveRequest) + returns (RequiredReserveResponse); + + /* lncli: `wallet addresses list` + ListAddresses retrieves all the addresses along with their balance. An + account name filter can be provided to filter through all of the + wallet accounts and return the addresses of only those matching. + */ + rpc ListAddresses (ListAddressesRequest) returns (ListAddressesResponse); + + /* lncli: `wallet addresses signmessage` + SignMessageWithAddr returns the compact signature (base64 encoded) created + with the private key of the provided address. This requires the address + to be solely based on a public key lock (no scripts). Obviously the internal + lnd wallet has to possess the private key of the address otherwise + an error is returned. + + This method aims to provide full compatibility with the bitcoin-core and + btcd implementation. Bitcoin-core's algorithm is not specified in a + BIP and only applicable for legacy addresses. This method enhances the + signing for additional address types: P2WKH, NP2WKH, P2TR. + For P2TR addresses this represents a special case. ECDSA is used to create + a compact signature which makes the public key of the signature recoverable. + */ + rpc SignMessageWithAddr (SignMessageWithAddrRequest) + returns (SignMessageWithAddrResponse); + + /* lncli: `wallet addresses verifymessage` + VerifyMessageWithAddr returns the validity and the recovered public key of + the provided compact signature (base64 encoded). The verification is + twofold. First the validity of the signature itself is checked and then + it is verified that the recovered public key of the signature equals + the public key of the provided address. There is no dependence on the + private key of the address therefore also external addresses are allowed + to verify signatures. + Supported address types are P2PKH, P2WKH, NP2WKH, P2TR. + + This method is the counterpart of the related signing method + (SignMessageWithAddr) and aims to provide full compatibility to + bitcoin-core's implementation. Although bitcoin-core/btcd only provide + this functionality for legacy addresses this function enhances it to + the address types: P2PKH, P2WKH, NP2WKH, P2TR. + + The verification for P2TR addresses is a special case and requires the + ECDSA compact signature to compare the reovered public key to the internal + taproot key. The compact ECDSA signature format was used because there + are still no known compact signature schemes for schnorr signatures. + */ + rpc VerifyMessageWithAddr (VerifyMessageWithAddrRequest) + returns (VerifyMessageWithAddrResponse); + + /* lncli: `wallet accounts import` + ImportAccount imports an account backed by an account extended public key. + The master key fingerprint denotes the fingerprint of the root key + corresponding to the account public key (also known as the key with + derivation path m/). This may be required by some hardware wallets for + proper identification and signing. + + The address type can usually be inferred from the key's version, but may be + required for certain keys to map them into the proper scope. + + For BIP-0044 keys, an address type must be specified as we intend to not + support importing BIP-0044 keys into the wallet using the legacy + pay-to-pubkey-hash (P2PKH) scheme. A nested witness address type will force + the standard BIP-0049 derivation scheme, while a witness address type will + force the standard BIP-0084 derivation scheme. + + For BIP-0049 keys, an address type must also be specified to make a + distinction between the standard BIP-0049 address schema (nested witness + pubkeys everywhere) and our own BIP-0049Plus address schema (nested pubkeys + externally, witness pubkeys internally). + + NOTE: Events (deposits/spends) for keys derived from an account will only be + detected by lnd if they happen after the import. Rescans to detect past + events will be supported later on. + */ + rpc ImportAccount (ImportAccountRequest) returns (ImportAccountResponse); + + /* lncli: `wallet accounts import-pubkey` + ImportPublicKey imports a public key as watch-only into the wallet. The + public key is converted into a simple address of the given type and that + address script is watched on chain. For Taproot keys, this will only watch + the BIP-0086 style output script. Use ImportTapscript for more advanced key + spend or script spend outputs. + + NOTE: Events (deposits/spends) for a key will only be detected by lnd if + they happen after the import. Rescans to detect past events will be + supported later on. + */ + rpc ImportPublicKey (ImportPublicKeyRequest) + returns (ImportPublicKeyResponse); + + /* + ImportTapscript imports a Taproot script and internal key and adds the + resulting Taproot output key as a watch-only output script into the wallet. + For BIP-0086 style Taproot keys (no root hash commitment and no script spend + path) use ImportPublicKey. + + NOTE: Events (deposits/spends) for a key will only be detected by lnd if + they happen after the import. Rescans to detect past events will be + supported later on. + + NOTE: Taproot keys imported through this RPC currently _cannot_ be used for + funding PSBTs. Only tracking the balance and UTXOs is currently supported. + */ + rpc ImportTapscript (ImportTapscriptRequest) + returns (ImportTapscriptResponse); + + /* lncli: `wallet publishtx` + PublishTransaction attempts to publish the passed transaction to the + network. Once this returns without an error, the wallet will continually + attempt to re-broadcast the transaction on start up, until it enters the + chain. + */ + rpc PublishTransaction (Transaction) returns (PublishResponse); + + /* lncli: `wallet removetx` + RemoveTransaction attempts to remove the provided transaction from the + internal transaction store of the wallet. + */ + rpc RemoveTransaction (GetTransactionRequest) + returns (RemoveTransactionResponse); + + /* + SendOutputs is similar to the existing sendmany call in Bitcoind, and + allows the caller to create a transaction that sends to several outputs at + once. This is ideal when wanting to batch create a set of transactions. + */ + rpc SendOutputs (SendOutputsRequest) returns (SendOutputsResponse); + + /* lncli: `wallet estimatefeerate` + EstimateFee attempts to query the internal fee estimator of the wallet to + determine the fee (in sat/kw) to attach to a transaction in order to + achieve the confirmation target. + */ + rpc EstimateFee (EstimateFeeRequest) returns (EstimateFeeResponse); + + /* lncli: `wallet pendingsweeps` + PendingSweeps returns lists of on-chain outputs that lnd is currently + attempting to sweep within its central batching engine. Outputs with similar + fee rates are batched together in order to sweep them within a single + transaction. + + NOTE: Some of the fields within PendingSweepsRequest are not guaranteed to + remain supported. This is an advanced API that depends on the internals of + the UtxoSweeper, so things may change. + */ + rpc PendingSweeps (PendingSweepsRequest) returns (PendingSweepsResponse); + + /* lncli: `wallet bumpfee` + BumpFee is an endpoint that allows users to interact with lnd's sweeper + directly. It takes an outpoint from an unconfirmed transaction and sends it + to the sweeper for potential fee bumping. Depending on whether the outpoint + has been registered in the sweeper (an existing input, e.g., an anchor + output) or not (a new input, e.g., an unconfirmed wallet utxo), this will + either be an RBF or CPFP attempt. + + When receiving an input, lnd’s sweeper needs to understand its time + sensitivity to make economical fee bumps - internally a fee function is + created using the deadline and budget to guide the process. When the + deadline is approaching, the fee function will increase the fee rate and + perform an RBF. + + When a force close happens, all the outputs from the force closing + transaction will be registered in the sweeper. The sweeper will then handle + the creation, publish, and fee bumping of the sweeping transactions. + Everytime a new block comes in, unless the sweeping transaction is + confirmed, an RBF is attempted. To interfere with this automatic process, + users can use BumpFee to specify customized fee rate, budget, deadline, and + whether the sweep should happen immediately. It's recommended to call + `ListSweeps` to understand the shape of the existing sweeping transaction + first - depending on the number of inputs in this transaction, the RBF + requirements can be quite different. + + This RPC also serves useful when wanting to perform a Child-Pays-For-Parent + (CPFP), where the child transaction pays for its parent's fee. This can be + done by specifying an outpoint within the low fee transaction that is under + the control of the wallet. + */ + rpc BumpFee (BumpFeeRequest) returns (BumpFeeResponse); + + /* lncli: `wallet bumpforceclosefee` + BumpForceCloseFee is an endpoint that allows users to bump the fee of a + channel force close. This only works for channels with option_anchors. + */ + rpc BumpForceCloseFee (BumpForceCloseFeeRequest) + returns (BumpForceCloseFeeResponse); + + /* lncli: `wallet listsweeps` + ListSweeps returns a list of the sweep transactions our node has produced. + Note that these sweeps may not be confirmed yet, as we record sweeps on + broadcast, not confirmation. + */ + rpc ListSweeps (ListSweepsRequest) returns (ListSweepsResponse); + + /* lncli: `wallet labeltx` + LabelTransaction adds a label to a transaction. If the transaction already + has a label the call will fail unless the overwrite bool is set. This will + overwrite the existing transaction label. Labels must not be empty, and + cannot exceed 500 characters. + */ + rpc LabelTransaction (LabelTransactionRequest) + returns (LabelTransactionResponse); + + /* lncli: `wallet psbt fund` + FundPsbt creates a fully populated PSBT that contains enough inputs to fund + the outputs specified in the template. There are three ways a user can + specify what we call the template (a list of inputs and outputs to use in + the PSBT): Either as a PSBT packet directly with no coin selection (using + the legacy "psbt" field), a PSBT with advanced coin selection support (using + the new "coin_select" field) or as a raw RPC message (using the "raw" + field). + The legacy "psbt" and "raw" modes, the following restrictions apply: + 1. If there are no inputs specified in the template, coin selection is + performed automatically. + 2. If the template does contain any inputs, it is assumed that full + coin selection happened externally and no additional inputs are added. If + the specified inputs aren't enough to fund the outputs with the given fee + rate, an error is returned. + + The new "coin_select" mode does not have these restrictions and allows the + user to specify a PSBT with inputs and outputs and still perform coin + selection on top of that. + For all modes this RPC requires any inputs that are specified to be locked + by the user (if they belong to this node in the first place). + + After either selecting or verifying the inputs, all input UTXOs are locked + with an internal app ID. + + NOTE: If this method returns without an error, it is the caller's + responsibility to either spend the locked UTXOs (by finalizing and then + publishing the transaction) or to unlock/release the locked UTXOs in case of + an error on the caller's side. + */ + rpc FundPsbt (FundPsbtRequest) returns (FundPsbtResponse); + + /* + SignPsbt expects a partial transaction with all inputs and outputs fully + declared and tries to sign all unsigned inputs that have all required fields + (UTXO information, BIP32 derivation information, witness or sig scripts) + set. + If no error is returned, the PSBT is ready to be given to the next signer or + to be finalized if lnd was the last signer. + + NOTE: This RPC only signs inputs (and only those it can sign), it does not + perform any other tasks (such as coin selection, UTXO locking or + input/output/fee value validation, PSBT finalization). Any input that is + incomplete will be skipped. + */ + rpc SignPsbt (SignPsbtRequest) returns (SignPsbtResponse); + + /* lncli: `wallet psbt finalize` + FinalizePsbt expects a partial transaction with all inputs and outputs fully + declared and tries to sign all inputs that belong to the wallet. Lnd must be + the last signer of the transaction. That means, if there are any unsigned + non-witness inputs or inputs without UTXO information attached or inputs + without witness data that do not belong to lnd's wallet, this method will + fail. If no error is returned, the PSBT is ready to be extracted and the + final TX within to be broadcast. + + NOTE: This method does NOT publish the transaction once finalized. It is the + caller's responsibility to either publish the transaction on success or + unlock/release any locked UTXOs in case of an error in this method. + */ + rpc FinalizePsbt (FinalizePsbtRequest) returns (FinalizePsbtResponse); +} + +message ListUnspentRequest { + // The minimum number of confirmations to be included. + int32 min_confs = 1; + + // The maximum number of confirmations to be included. + int32 max_confs = 2; + + // An optional filter to only include outputs belonging to an account. + string account = 3; + + /* + When min_confs and max_confs are zero, setting false implicitly + overrides max_confs to be MaxInt32, otherwise max_confs remains + zero. An error is returned if the value is true and both min_confs + and max_confs are non-zero. (default: false) + */ + bool unconfirmed_only = 4; +} + +message ListUnspentResponse { + // A list of utxos satisfying the specified number of confirmations. + repeated lnrpc.Utxo utxos = 1; +} + +message LeaseOutputRequest { + /* + An ID of 32 random bytes that must be unique for each distinct application + using this RPC which will be used to bound the output lease to. + */ + bytes id = 1; + + // The identifying outpoint of the output being leased. + lnrpc.OutPoint outpoint = 2; + + // The time in seconds before the lock expires. If set to zero, the default + // lock duration is used. + uint64 expiration_seconds = 3; +} + +message LeaseOutputResponse { + /* + The absolute expiration of the output lease represented as a unix timestamp. + */ + uint64 expiration = 1; +} + +message ReleaseOutputRequest { + // The unique ID that was used to lock the output. + bytes id = 1; + + // The identifying outpoint of the output being released. + lnrpc.OutPoint outpoint = 2; +} + +message ReleaseOutputResponse { + // The status of the release operation. + string status = 1; +} + +message KeyReq { + /* + Is the key finger print of the root pubkey that this request is targeting. + This allows the WalletKit to possibly serve out keys for multiple HD chains + via public derivation. + */ + int32 key_finger_print = 1; + + /* + The target key family to derive a key from. In other contexts, this is + known as the "account". + */ + int32 key_family = 2; +} + +message AddrRequest { + /* + The name of the account to retrieve the next address of. If empty, the + default wallet account is used. + */ + string account = 1; + + /* + The type of address to derive. + */ + AddressType type = 2; + + /* + Whether a change address should be derived. + */ + bool change = 3; +} +message AddrResponse { + /* + The address encoded using a bech32 format. + */ + string addr = 1; +} + +enum AddressType { + UNKNOWN = 0; + WITNESS_PUBKEY_HASH = 1; + NESTED_WITNESS_PUBKEY_HASH = 2; + HYBRID_NESTED_WITNESS_PUBKEY_HASH = 3; + TAPROOT_PUBKEY = 4; +} +message Account { + // The name used to identify the account. + string name = 1; + + // The type of addresses the account supports. + AddressType address_type = 2; + + /* + The public key backing the account that all keys are derived from + represented as an extended key. This will always be empty for the default + imported account in which single public keys are imported into. + */ + string extended_public_key = 3; + + /* + The fingerprint of the root key from which the account public key was + derived from. This will always be zero for the default imported account in + which single public keys are imported into. The bytes are in big-endian + order. + */ + bytes master_key_fingerprint = 4; + + /* + The derivation path corresponding to the account public key. This will + always be empty for the default imported account in which single public keys + are imported into. + */ + string derivation_path = 5; + + /* + The number of keys derived from the external branch of the account public + key. This will always be zero for the default imported account in which + single public keys are imported into. + */ + uint32 external_key_count = 6; + + /* + The number of keys derived from the internal branch of the account public + key. This will always be zero for the default imported account in which + single public keys are imported into. + */ + uint32 internal_key_count = 7; + + // Whether the wallet stores private keys for the account. + bool watch_only = 8; +} + +message AddressProperty { + /* + The address encoded using the appropriate format depending on the + address type (base58, bech32, bech32m). + + Note that lnd's internal/custom keys for channels and other + functionality are derived from the same scope. Since they + aren't really used as addresses and will never have an + on-chain balance, we'll show the public key instead (only if + the show_custom_accounts flag is provided). + */ + string address = 1; + + // Denotes if the address is a change address. + bool is_internal = 2; + + // The balance of the address. + int64 balance = 3; + + // The full derivation path of the address. This will be empty for imported + // addresses. + string derivation_path = 4; + + // The public key of the address. This will be empty for imported addresses. + bytes public_key = 5; +} + +message AccountWithAddresses { + // The name used to identify the account. + string name = 1; + + // The type of addresses the account supports. + AddressType address_type = 2; + + /* + The derivation path corresponding to the account public key. This will + always be empty for the default imported account in which single public keys + are imported into. + */ + string derivation_path = 3; + + /* + List of address, its type internal/external & balance. + Note that the order of addresses will be random and not according to the + derivation index, since that information is not stored by the underlying + wallet. + */ + repeated AddressProperty addresses = 4; +} + +message ListAccountsRequest { + // An optional filter to only return accounts matching this name. + string name = 1; + + // An optional filter to only return accounts matching this address type. + AddressType address_type = 2; +} + +message ListAccountsResponse { + repeated Account accounts = 1; +} + +message RequiredReserveRequest { + // The number of additional channels the user would like to open. + uint32 additional_public_channels = 1; +} + +message RequiredReserveResponse { + // The amount of reserve required. + int64 required_reserve = 1; +} + +message ListAddressesRequest { + // An optional filter to only return addresses matching this account. + string account_name = 1; + + // An optional flag to return LND's custom accounts (Purpose=1017) + // public key along with other addresses. + bool show_custom_accounts = 2; +} + +message ListAddressesResponse { + // A list of all the accounts and their addresses. + repeated AccountWithAddresses account_with_addresses = 1; +} + +message GetTransactionRequest { + // The txid of the transaction. + string txid = 1; +} + +message SignMessageWithAddrRequest { + // The message to be signed. When using REST, this field must be encoded as + // base64. + bytes msg = 1; + + // The address which will be used to look up the private key and sign the + // corresponding message. + string addr = 2; +} + +message SignMessageWithAddrResponse { + // The compact ECDSA signature for the given message encoded in base64. + string signature = 1; +} + +message VerifyMessageWithAddrRequest { + // The message to be signed. When using REST, this field must be encoded as + // base64. + bytes msg = 1; + + // The compact ECDSA signature to be verified over the given message + // ecoded in base64. + string signature = 2; + + // The address which will be used to look up the public key and verify the + // the signature. + string addr = 3; +} + +message VerifyMessageWithAddrResponse { + // Whether the signature was valid over the given message. + bool valid = 1; + + // The pubkey recovered from the signature. + bytes pubkey = 2; +} + +message ImportAccountRequest { + // A name to identify the account with. + string name = 1; + + /* + A public key that corresponds to a wallet account represented as an extended + key. It must conform to a derivation path of the form + m/purpose'/coin_type'/account'. + */ + string extended_public_key = 2; + + /* + The fingerprint of the root key (also known as the key with derivation path + m/) from which the account public key was derived from. This may be required + by some hardware wallets for proper identification and signing. The bytes + must be in big-endian order. + */ + bytes master_key_fingerprint = 3; + + /* + An address type is only required when the extended account public key has a + legacy version (xpub, tpub, etc.), such that the wallet cannot detect what + address scheme it belongs to. + */ + AddressType address_type = 4; + + /* + Whether a dry run should be attempted when importing the account. This + serves as a way to confirm whether the account is being imported correctly + by returning the first N addresses for the external and internal branches of + the account. If these addresses match as expected, then it should be safe to + import the account as is. + */ + bool dry_run = 5; +} +message ImportAccountResponse { + // The details of the imported account. + Account account = 1; + + /* + The first N addresses that belong to the external branch of the account. + The external branch is typically used for external non-change addresses. + These are only returned if a dry run was specified within the request. + */ + repeated string dry_run_external_addrs = 2; + + /* + The first N addresses that belong to the internal branch of the account. + The internal branch is typically used for change addresses. These are only + returned if a dry run was specified within the request. + */ + repeated string dry_run_internal_addrs = 3; +} + +message ImportPublicKeyRequest { + // A compressed public key represented as raw bytes. + bytes public_key = 1; + + // The type of address that will be generated from the public key. + AddressType address_type = 2; +} +message ImportPublicKeyResponse { + // The status of the import operation. + string status = 1; +} + +message ImportTapscriptRequest { + /* + The internal public key, serialized as 32-byte x-only public key. + */ + bytes internal_public_key = 1; + + oneof script { + /* + The full script tree with all individual leaves is known and the root + hash can be constructed from the full tree directly. + */ + TapscriptFullTree full_tree = 2; + + /* + Only a single script leaf is known. To construct the root hash, the full + inclusion proof must also be provided. + */ + TapscriptPartialReveal partial_reveal = 3; + + /* + Only the root hash of the Taproot script tree (or other form of Taproot + commitment) is known. + */ + bytes root_hash_only = 4; + + /* + Only the final, tweaked Taproot key is known and no additional + information about the internal key or type of tweak that was used to + derive it. When this is set, the wallet treats the key in + internal_public_key as the Taproot key directly. This can be useful for + tracking arbitrary Taproot outputs without the goal of ever being able + to spend from them through the internal wallet. + */ + bool full_key_only = 5; + } +} + +message TapscriptFullTree { + /* + The complete, ordered list of all tap leaves of the tree. + */ + repeated TapLeaf all_leaves = 1; +} + +message TapLeaf { + // The leaf version. Should be 0xc0 (192) in case of a SegWit v1 script. + uint32 leaf_version = 1; + + // The script of the tap leaf. + bytes script = 2; +} + +message TapscriptPartialReveal { + // The tap leaf that is known and will be revealed. + TapLeaf revealed_leaf = 1; + + // The BIP-0341 serialized inclusion proof that is required to prove that + // the revealed leaf is part of the tree. This contains 0..n blocks of 32 + // bytes. If the tree only contained a single leaf (which is the revealed + // leaf), this can be empty. + bytes full_inclusion_proof = 2; +} + +message ImportTapscriptResponse { + /* + The resulting pay-to-Taproot address that represents the imported internal + key with the script committed to it. + */ + string p2tr_address = 1; +} + +message Transaction { + /* + The raw serialized transaction. Despite the field name, this does need to be + specified in raw bytes (or base64 encoded when using REST) and not in hex. + To not break existing software, the field can't simply be renamed. + */ + bytes tx_hex = 1; + + /* + An optional label to save with the transaction. Limited to 500 characters. + */ + string label = 2; +} + +message PublishResponse { + /* + If blank, then no error occurred and the transaction was successfully + published. If not the empty string, then a string representation of the + broadcast error. + + TODO(roasbeef): map to a proper enum type + */ + string publish_error = 1; +} + +message RemoveTransactionResponse { + // The status of the remove transaction operation. + string status = 1; +} + +message SendOutputsRequest { + /* + The number of satoshis per kilo weight that should be used when crafting + this transaction. + */ + int64 sat_per_kw = 1; + + /* + A slice of the outputs that should be created in the transaction produced. + */ + repeated signrpc.TxOut outputs = 2; + + // An optional label for the transaction, limited to 500 characters. + string label = 3; + + // The minimum number of confirmations each one of your outputs used for + // the transaction must satisfy. + int32 min_confs = 4; + + // Whether unconfirmed outputs should be used as inputs for the transaction. + bool spend_unconfirmed = 5; + + // The strategy to use for selecting coins during sending the outputs. + lnrpc.CoinSelectionStrategy coin_selection_strategy = 6; +} +message SendOutputsResponse { + /* + The serialized transaction sent out on the network. + */ + bytes raw_tx = 1; +} + +message EstimateFeeRequest { + /* + The number of confirmations to shoot for when estimating the fee. + */ + int32 conf_target = 1; +} +message EstimateFeeResponse { + /* + The amount of satoshis per kw that should be used in order to reach the + confirmation target in the request. + */ + int64 sat_per_kw = 1; + + // The current minimum relay fee based on our chain backend in sat/kw. + int64 min_relay_fee_sat_per_kw = 2; +} + +enum WitnessType { + UNKNOWN_WITNESS = 0; + + /* + A witness that allows us to spend the output of a commitment transaction + after a relative lock-time lockout. + */ + COMMITMENT_TIME_LOCK = 1; + + /* + A witness that allows us to spend a settled no-delay output immediately on a + counterparty's commitment transaction. + */ + COMMITMENT_NO_DELAY = 2; + + /* + A witness that allows us to sweep the settled output of a malicious + counterparty's who broadcasts a revoked commitment transaction. + */ + COMMITMENT_REVOKE = 3; + + /* + A witness that allows us to sweep an HTLC which we offered to the remote + party in the case that they broadcast a revoked commitment state. + */ + HTLC_OFFERED_REVOKE = 4; + + /* + A witness that allows us to sweep an HTLC output sent to us in the case that + the remote party broadcasts a revoked commitment state. + */ + HTLC_ACCEPTED_REVOKE = 5; + + /* + A witness that allows us to sweep an HTLC output that we extended to a + party, but was never fulfilled. This HTLC output isn't directly on the + commitment transaction, but is the result of a confirmed second-level HTLC + transaction. As a result, we can only spend this after a CSV delay. + */ + HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 6; + + /* + A witness that allows us to sweep an HTLC output that was offered to us, and + for which we have a payment preimage. This HTLC output isn't directly on our + commitment transaction, but is the result of confirmed second-level HTLC + transaction. As a result, we can only spend this after a CSV delay. + */ + HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 7; + + /* + A witness that allows us to sweep an HTLC that we offered to the remote + party which lies in the commitment transaction of the remote party. We can + spend this output after the absolute CLTV timeout of the HTLC as passed. + */ + HTLC_OFFERED_REMOTE_TIMEOUT = 8; + + /* + A witness that allows us to sweep an HTLC that was offered to us by the + remote party. We use this witness in the case that the remote party goes to + chain, and we know the pre-image to the HTLC. We can sweep this without any + additional timeout. + */ + HTLC_ACCEPTED_REMOTE_SUCCESS = 9; + + /* + A witness that allows us to sweep an HTLC from the remote party's commitment + transaction in the case that the broadcast a revoked commitment, but then + also immediately attempt to go to the second level to claim the HTLC. + */ + HTLC_SECOND_LEVEL_REVOKE = 10; + + /* + A witness type that allows us to spend a regular p2wkh output that's sent to + an output which is under complete control of the backing wallet. + */ + WITNESS_KEY_HASH = 11; + + /* + A witness type that allows us to sweep an output that sends to a nested P2SH + script that pays to a key solely under our control. + */ + NESTED_WITNESS_KEY_HASH = 12; + + /* + A witness type that allows us to spend our anchor on the commitment + transaction. + */ + COMMITMENT_ANCHOR = 13; + + /* + A witness type that is similar to the COMMITMENT_NO_DELAY type, + but it omits the tweak that randomizes the key we need to + spend with a channel peer supplied set of randomness. + */ + COMMITMENT_NO_DELAY_TWEAKLESS = 14; + + /* + A witness type that allows us to spend our output on the counterparty's + commitment transaction after a confirmation. + */ + COMMITMENT_TO_REMOTE_CONFIRMED = 15; + + /* + A witness type that allows us to sweep an HTLC output that we extended + to a party, but was never fulfilled. This _is_ the HTLC output directly + on our commitment transaction, and the input to the second-level HTLC + timeout transaction. It can only be spent after CLTV expiry, and + commitment confirmation. + */ + HTLC_OFFERED_TIMEOUT_SECOND_LEVEL_INPUT_CONFIRMED = 16; + + /* + A witness type that allows us to sweep an HTLC output that was offered + to us, and for which we have a payment preimage. This _is_ the HTLC + output directly on our commitment transaction, and the input to the + second-level HTLC success transaction. It can only be spent after the + commitment has confirmed. + */ + HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL_INPUT_CONFIRMED = 17; + + /* + A witness type that allows us to spend our output on our local + commitment transaction after a relative and absolute lock-time lockout as + part of the script enforced lease commitment type. + */ + LEASE_COMMITMENT_TIME_LOCK = 18; + + /* + A witness type that allows us to spend our output on the counterparty's + commitment transaction after a confirmation and absolute locktime as part + of the script enforced lease commitment type. + */ + LEASE_COMMITMENT_TO_REMOTE_CONFIRMED = 19; + + /* + A witness type that allows us to sweep an HTLC output that we extended + to a party, but was never fulfilled. This HTLC output isn't directly on + the commitment transaction, but is the result of a confirmed second-level + HTLC transaction. As a result, we can only spend this after a CSV delay + and CLTV locktime as part of the script enforced lease commitment type. + */ + LEASE_HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 20; + + /* + A witness type that allows us to sweep an HTLC output that was offered + to us, and for which we have a payment preimage. This HTLC output isn't + directly on our commitment transaction, but is the result of confirmed + second-level HTLC transaction. As a result, we can only spend this after + a CSV delay and CLTV locktime as part of the script enforced lease + commitment type. + */ + LEASE_HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 21; + + /* + A witness type that allows us to spend a regular p2tr output that's sent + to an output which is under complete control of the backing wallet. + */ + TAPROOT_PUB_KEY_SPEND = 22; + + /* + A witness type that allows us to spend our settled local commitment after a + CSV delay when we force close the channel. + */ + TAPROOT_LOCAL_COMMIT_SPEND = 23; + + /* + A witness type that allows us to spend our settled local commitment after + a CSV delay when the remote party has force closed the channel. + */ + TAPROOT_REMOTE_COMMIT_SPEND = 24; + + /* + A witness type that we'll use for spending our own anchor output. + */ + TAPROOT_ANCHOR_SWEEP_SPEND = 25; + + /* + A witness that allows us to timeout an HTLC we offered to the remote party + on our commitment transaction. We use this when we need to go on chain to + time out an HTLC. + */ + TAPROOT_HTLC_OFFERED_TIMEOUT_SECOND_LEVEL = 26; + + /* + A witness type that allows us to sweep an HTLC we accepted on our commitment + transaction after we go to the second level on chain. + */ + TAPROOT_HTLC_ACCEPTED_SUCCESS_SECOND_LEVEL = 27; + + /* + A witness that allows us to sweep an HTLC on the revoked transaction of the + remote party that goes to the second level. + */ + TAPROOT_HTLC_SECOND_LEVEL_REVOKE = 28; + + /* + A witness that allows us to sweep an HTLC sent to us by the remote party + in the event that they broadcast a revoked state. + */ + TAPROOT_HTLC_ACCEPTED_REVOKE = 29; + + /* + A witness that allows us to sweep an HTLC we offered to the remote party if + they broadcast a revoked commitment. + */ + TAPROOT_HTLC_OFFERED_REVOKE = 30; + + /* + A witness that allows us to sweep an HTLC we offered to the remote party + that lies on the commitment transaction for the remote party. We can spend + this output after the absolute CLTV timeout of the HTLC as passed. + */ + TAPROOT_HTLC_OFFERED_REMOTE_TIMEOUT = 31; + + /* + A witness type that allows us to sign the second level HTLC timeout + transaction when spending from an HTLC residing on our local commitment + transaction. + This is used by the sweeper to re-sign inputs if it needs to aggregate + several second level HTLCs. + */ + TAPROOT_HTLC_LOCAL_OFFERED_TIMEOUT = 32; + + /* + A witness that allows us to sweep an HTLC that was offered to us by the + remote party for a taproot channels. We use this witness in the case that + the remote party goes to chain, and we know the pre-image to the HTLC. We + can sweep this without any additional timeout. + */ + TAPROOT_HTLC_ACCEPTED_REMOTE_SUCCESS = 33; + + /* + A witness type that allows us to sweep the HTLC offered to us on our local + commitment transaction. We'll use this when we need to go on chain to sweep + the HTLC. In this case, this is the second level HTLC success transaction. + */ + TAPROOT_HTLC_ACCEPTED_LOCAL_SUCCESS = 34; + + /* + A witness that allows us to sweep the settled output of a malicious + counterparty's who broadcasts a revoked taproot commitment transaction. + */ + TAPROOT_COMMITMENT_REVOKE = 35; +} + +message PendingSweep { + // The outpoint of the output we're attempting to sweep. + lnrpc.OutPoint outpoint = 1; + + // The witness type of the output we're attempting to sweep. + WitnessType witness_type = 2; + + // The value of the output we're attempting to sweep. + uint32 amount_sat = 3; + + /* + Deprecated, use sat_per_vbyte. + The fee rate we'll use to sweep the output, expressed in sat/vbyte. The fee + rate is only determined once a sweeping transaction for the output is + created, so it's possible for this to be 0 before this. + */ + uint32 sat_per_byte = 4 [deprecated = true]; + + // The number of broadcast attempts we've made to sweep the output. + uint32 broadcast_attempts = 5; + + /* + Deprecated. + The next height of the chain at which we'll attempt to broadcast the + sweep transaction of the output. + */ + uint32 next_broadcast_height = 6 [deprecated = true]; + + /* + Deprecated, use immediate. + Whether this input must be force-swept. This means that it is swept + immediately. + */ + bool force = 7 [deprecated = true]; + + /* + Deprecated, use deadline. + The requested confirmation target for this output, which is the deadline + used by the sweeper. + */ + uint32 requested_conf_target = 8 [deprecated = true]; + + // Deprecated, use requested_sat_per_vbyte. + // The requested fee rate, expressed in sat/vbyte, for this output. + uint32 requested_sat_per_byte = 9 [deprecated = true]; + + /* + The current fee rate we'll use to sweep the output, expressed in sat/vbyte. + The fee rate is only determined once a sweeping transaction for the output + is created, so it's possible for this to be 0 before this. + */ + uint64 sat_per_vbyte = 10; + + // The requested starting fee rate, expressed in sat/vbyte, for this + // output. When not requested, this field will be 0. + uint64 requested_sat_per_vbyte = 11; + + /* + Whether this input will be swept immediately. + */ + bool immediate = 12; + + /* + The budget for this sweep, expressed in satoshis. This is the maximum amount + that can be spent as fees to sweep this output. + */ + uint64 budget = 13; + + /* + The deadline height used for this output when perform fee bumping. + */ + uint32 deadline_height = 14; +} + +message PendingSweepsRequest { +} + +message PendingSweepsResponse { + /* + The set of outputs currently being swept by lnd's central batching engine. + */ + repeated PendingSweep pending_sweeps = 1; +} + +message BumpFeeRequest { + // The input we're attempting to bump the fee of. + lnrpc.OutPoint outpoint = 1; + + // Optional. The deadline in number of blocks that the input should be spent + // within. When not set, for new inputs, the default value (1008) is used; + // for existing inputs, their current values will be retained. + uint32 target_conf = 2; + + /* + Deprecated, use sat_per_vbyte. + The fee rate, expressed in sat/vbyte, that should be used to spend the input + with. + */ + uint32 sat_per_byte = 3 [deprecated = true]; + + /* + Deprecated, use immediate. + Whether this input must be force-swept. This means that it is swept + immediately. + */ + bool force = 4 [deprecated = true]; + + /* + Optional. The starting fee rate, expressed in sat/vbyte, that will be used + to spend the input with initially. This value will be used by the sweeper's + fee function as its starting fee rate. When not set, the sweeper will use + the estimated fee rate using the `target_conf` as the starting fee rate. + */ + uint64 sat_per_vbyte = 5; + + /* + Optional. Whether this input will be swept immediately. When set to true, + the sweeper will sweep this input without waiting for the next batch. + */ + bool immediate = 6; + + /* + Optional. The max amount in sats that can be used as the fees. Setting this + value greater than the input's value may result in CPFP - one or more wallet + utxos will be used to pay the fees specified by the budget. If not set, for + new inputs, by default 50% of the input's value will be treated as the + budget for fee bumping; for existing inputs, their current budgets will be + retained. + */ + uint64 budget = 7; +} + +message BumpFeeResponse { + // The status of the bump fee operation. + string status = 1; +} + +message BumpForceCloseFeeRequest { + // The channel point which force close transaction we are attempting to + // bump the fee rate for. + lnrpc.ChannelPoint chan_point = 1; + + // Optional. The deadline delta in number of blocks that the anchor output + // should be spent within to bump the closing transaction. + uint32 deadline_delta = 2; + + /* + Optional. The starting fee rate, expressed in sat/vbyte. This value will be + used by the sweeper's fee function as its starting fee rate. When not set, + the sweeper will use the estimated fee rate using the target_conf as the + starting fee rate. + */ + uint64 starting_feerate = 3; + + /* + Optional. Whether this cpfp transaction will be triggered immediately. When + set to true, the sweeper will consider all currently registered sweeps and + trigger new batch transactions including the sweeping of the anchor output + related to the selected force close transaction. + */ + bool immediate = 4; + + /* + Optional. The max amount in sats that can be used as the fees. For already + registered anchor outputs if not set explicitly the old value will be used. + For channel force closes which have no HTLCs in their commitment transaction + this value has to be set to an appropriate amount to pay for the cpfp + transaction of the force closed channel otherwise the fee bumping will fail. + */ + uint64 budget = 5; +} + +message BumpForceCloseFeeResponse { + // The status of the force close fee bump operation. + string status = 1; +} + +message ListSweepsRequest { + /* + Retrieve the full sweep transaction details. If false, only the sweep txids + will be returned. Note that some sweeps that LND publishes will have been + replaced-by-fee, so will not be included in this output. + */ + bool verbose = 1; + + /* + The start height to use when fetching sweeps. If not specified (0), the + result will start from the earliest sweep. If set to -1 the result will + only include unconfirmed sweeps (at the time of the call). + */ + int32 start_height = 2; +} + +message ListSweepsResponse { + message TransactionIDs { + /* + Reversed, hex-encoded string representing the transaction ids of the + sweeps that our node has broadcast. Note that these transactions may + not have confirmed yet, we record sweeps on broadcast, not confirmation. + */ + repeated string transaction_ids = 1; + } + + oneof sweeps { + lnrpc.TransactionDetails transaction_details = 1; + TransactionIDs transaction_ids = 2; + } +} + +message LabelTransactionRequest { + // The txid of the transaction to label. Note: When using gRPC, the bytes + // must be in little-endian (reverse) order. + bytes txid = 1; + + // The label to add to the transaction, limited to 500 characters. + string label = 2; + + // Whether to overwrite the existing label, if it is present. + bool overwrite = 3; +} + +message LabelTransactionResponse { + // The status of the label operation. + string status = 1; +} + +// The possible change address types for default accounts and single imported +// public keys. By default, P2WPKH will be used. We don't provide the +// possibility to choose P2PKH as it is a legacy key scope, nor NP2WPKH as +// no key scope permits to do so. For custom accounts, no change type should +// be provided as the coin selection key scope will always be used to generate +// the change address. +enum ChangeAddressType { + // CHANGE_ADDRESS_TYPE_UNSPECIFIED indicates that no change address type is + // provided. We will then use P2WPKH address type for change (BIP0084 key + // scope). + CHANGE_ADDRESS_TYPE_UNSPECIFIED = 0; + + // CHANGE_ADDRESS_TYPE_P2TR indicates to use P2TR address for change output + // (BIP0086 key scope). + CHANGE_ADDRESS_TYPE_P2TR = 1; +} + +message FundPsbtRequest { + oneof template { + /* + Use an existing PSBT packet as the template for the funded PSBT. + + The packet must contain at least one non-dust output. If one or more + inputs are specified, no coin selection is performed. In that case every + input must be an UTXO known to the wallet that has not been locked + before. The sum of all inputs must be sufficiently greater than the sum + of all outputs to pay a miner fee with the specified fee rate. A change + output is added to the PSBT if necessary. + */ + bytes psbt = 1; + + /* + Use the outputs and optional inputs from this raw template. + */ + TxTemplate raw = 2; + + /* + Use an existing PSBT packet as the template for the funded PSBT. + + The difference to the pure PSBT template above is that coin selection is + performed even if inputs are specified. The output amounts are summed up + and used as the target amount for coin selection. A change output must + either already exist in the PSBT and be marked as such, otherwise a new + change output of the specified output type will be added. Any inputs + already specified in the PSBT must already be locked (if they belong to + this node), only newly added inputs will be locked by this RPC. + + In case the sum of the already provided inputs exceeds the required + output amount, no new coins are selected. Instead only the fee and + change amount calculation is performed (e.g. a change output is added if + requested or the change is added to the specified existing change + output, given there is any non-dust change). This can be identified by + the returned locked UTXOs being empty. + */ + PsbtCoinSelect coin_select = 9; + } + + oneof fees { + /* + The target number of blocks that the transaction should be confirmed in. + */ + uint32 target_conf = 3; + + /* + The fee rate, expressed in sat/vbyte, that should be used to spend the + input with. + */ + uint64 sat_per_vbyte = 4; + + /* + The fee rate, expressed in sat/kWU, that should be used to spend the + input with. + */ + uint64 sat_per_kw = 11; + } + + /* + The name of the account to fund the PSBT with. If empty, the default wallet + account is used. + */ + string account = 5; + + // The minimum number of confirmations each one of your outputs used for + // the transaction must satisfy. + int32 min_confs = 6; + + // Whether unconfirmed outputs should be used as inputs for the transaction. + bool spend_unconfirmed = 7; + + // The address type for the change. If empty, P2WPKH addresses will be used + // for default accounts and single imported public keys. For custom + // accounts, no change type should be provided as the coin selection key + // scope will always be used to generate the change address. + ChangeAddressType change_type = 8; + + // The strategy to use for selecting coins during funding the PSBT. + lnrpc.CoinSelectionStrategy coin_selection_strategy = 10; + + // The max fee to total output amount ratio that this psbt should adhere to. + double max_fee_ratio = 12; +} +message FundPsbtResponse { + /* + The funded but not yet signed PSBT packet. + */ + bytes funded_psbt = 1; + + /* + The index of the added change output or -1 if no change was left over. + */ + int32 change_output_index = 2; + + /* + The list of lock leases that were acquired for the inputs in the funded PSBT + packet. Only inputs added to the PSBT by this RPC are locked, inputs that + were already present in the PSBT are not locked. + */ + repeated UtxoLease locked_utxos = 3; +} + +message TxTemplate { + /* + An optional list of inputs to use. Every input must be an UTXO known to the + wallet that has not been locked before. The sum of all inputs must be + sufficiently greater than the sum of all outputs to pay a miner fee with the + fee rate specified in the parent message. + + If no inputs are specified, coin selection will be performed instead and + inputs of sufficient value will be added to the resulting PSBT. + */ + repeated lnrpc.OutPoint inputs = 1; + + /* + A map of all addresses and the amounts to send to in the funded PSBT. + */ + map outputs = 2; +} + +message PsbtCoinSelect { + /* + The template to use for the funded PSBT. The template must contain at least + one non-dust output. The amount to be funded is calculated by summing up the + amounts of all outputs in the template, subtracting all the input values of + the already specified inputs. The change value is added to the output that + is marked as such (or a new change output is added if none is marked). For + the input amount calculation to be correct, the template must have the + WitnessUtxo field set for all inputs. Any inputs already specified in the + PSBT must already be locked (if they belong to this node), only newly added + inputs will be locked by this RPC. + */ + bytes psbt = 1; + + oneof change_output { + /* + Use the existing output within the template PSBT with the specified + index as the change output. Any leftover change will be added to the + already specified amount of that output. To add a new change output to + the PSBT, set the "add" field below instead. The type of change output + added is defined by change_type in the parent message. + */ + int32 existing_output_index = 2; + + /* + Add a new change output to the PSBT using the change_type specified in + the parent message. + */ + bool add = 3; + } +} + +message UtxoLease { + /* + A 32 byte random ID that identifies the lease. + */ + bytes id = 1; + + // The identifying outpoint of the output being leased. + lnrpc.OutPoint outpoint = 2; + + /* + The absolute expiration of the output lease represented as a unix timestamp. + */ + uint64 expiration = 3; + + /* + The public key script of the leased output. + */ + bytes pk_script = 4; + + /* + The value of the leased output in satoshis. + */ + uint64 value = 5; +} + +message SignPsbtRequest { + /* + The PSBT that should be signed. The PSBT must contain all required inputs, + outputs, UTXO data and custom fields required to identify the signing key. + */ + bytes funded_psbt = 1; +} + +message SignPsbtResponse { + // The signed transaction in PSBT format. + bytes signed_psbt = 1; + + // The indices of signed inputs. + repeated uint32 signed_inputs = 2; +} + +message FinalizePsbtRequest { + /* + A PSBT that should be signed and finalized. The PSBT must contain all + required inputs, outputs, UTXO data and partial signatures of all other + signers. + */ + bytes funded_psbt = 1; + + /* + The name of the account to finalize the PSBT with. If empty, the default + wallet account is used. + */ + string account = 5; +} +message FinalizePsbtResponse { + // The fully signed and finalized transaction in PSBT format. + bytes signed_psbt = 1; + + // The fully signed and finalized transaction in the raw wire format. + bytes raw_final_tx = 2; +} + +message ListLeasesRequest { +} + +message ListLeasesResponse { + // The list of currently leased utxos. + repeated UtxoLease locked_utxos = 1; +} \ No newline at end of file diff --git a/proto/service/structs.proto b/proto/service/structs.proto index 9bc561d65..79e43b442 100644 --- a/proto/service/structs.proto +++ b/proto/service/structs.proto @@ -119,12 +119,23 @@ message ClosedChannel { string channel_id = 1; int64 capacity = 2; int64 closed_height =4; + int64 close_tx_timestamp = 5; } message GraphPoint { int64 x = 1; int64 y = 2; } +enum OperationType { + CHAIN_OP = 0; + INVOICE_OP = 1; +} +message RootOperation { + OperationType op_type = 1; + string op_id = 2; + int64 amount = 3; + int64 created_at_unix = 4; +} message LndNodeMetrics { repeated GraphPoint chain_balance = 1; @@ -138,6 +149,7 @@ message LndNodeMetrics { repeated ClosedChannel closed_channels = 9; int64 forwarding_events = 11; int64 forwarding_fees = 12; + repeated RootOperation root_ops = 13; } message LndMetrics { diff --git a/src/services/lnd/lnd.ts b/src/services/lnd/lnd.ts index 05aa2aeda..3df13920e 100644 --- a/src/services/lnd/lnd.ts +++ b/src/services/lnd/lnd.ts @@ -19,6 +19,7 @@ import { HtlcEvent_EventType } from '../../../proto/lnd/router.js'; import { LiquidityProvider, LiquidityRequest } from '../main/liquidityProvider.js'; import { Utils } from '../helpers/utilsWrapper.js'; import { TxPointSettings } from '../storage/stateBundler.js'; +import { WalletKitClient } from '../../../proto/lnd/walletkit.client.js'; const DeadLineMetadata = (deadline = 10 * 1000) => ({ deadline: Date.now() + deadline }) const deadLndRetrySeconds = 5 type TxActionOptions = { useProvider: boolean, from: 'user' | 'system' } @@ -27,6 +28,7 @@ export default class { invoices: InvoicesClient router: RouterClient chainNotifier: ChainNotifierClient + walletKit: WalletKitClient settings: LndSettings ready = false latestKnownBlockHeigh = 0 @@ -67,6 +69,7 @@ export default class { this.invoices = new InvoicesClient(transport) this.router = new RouterClient(transport) this.chainNotifier = new ChainNotifierClient(transport) + this.walletKit = new WalletKitClient(transport) this.liquidProvider = liquidProvider } @@ -507,6 +510,11 @@ export default class { } + async GetTx(txid: string) { + const res = await this.walletKit.getTransaction({ txid }, DeadLineMetadata()) + return res.response + } + async AddPeer(pub: string, host: string, port: number) { const res = await this.lightning.connectPeer({ addr: { diff --git a/src/services/main/index.ts b/src/services/main/index.ts index 368c378d1..bd9de9b9f 100644 --- a/src/services/main/index.ts +++ b/src/services/main/index.ts @@ -148,7 +148,10 @@ export default class { return this.storage.StartTransaction(async tx => { const { blockHeight } = await this.lnd.GetInfo() const userAddress = await this.storage.paymentStorage.GetAddressOwner(address, tx) - if (!userAddress) { return } + if (!userAddress) { + await this.metricsManager.AddRootAddressPaid(address, txOutput, amount) + return + } const internal = used === 'internal' let log = getLogger({}) if (!userAddress.linkedApplication) { @@ -188,7 +191,10 @@ export default class { return this.storage.StartTransaction(async tx => { let log = getLogger({}) const userInvoice = await this.storage.paymentStorage.GetInvoiceOwner(paymentRequest, tx) - if (!userInvoice) { return } + if (!userInvoice) { + await this.metricsManager.AddRootInvoicePaid(paymentRequest, amount) + return + } const internal = used === 'internal' if (userInvoice.paid_at_unix > 0 && internal) { log("cannot pay internally, invoice already paid"); return } if (userInvoice.paid_at_unix > 0 && !internal && userInvoice.paidByLnd) { log("invoice already paid by lnd"); return } diff --git a/src/services/metrics/index.ts b/src/services/metrics/index.ts index 8995a1da9..84b8a355d 100644 --- a/src/services/metrics/index.ts +++ b/src/services/metrics/index.ts @@ -9,6 +9,8 @@ import LND from '../lnd/lnd.js' import HtlcTracker from './htlcTracker.js' const maxEvents = 100_000 export default class Handler { + + storage: Storage lnd: LND htlcTracker: HtlcTracker @@ -215,10 +217,17 @@ export default class Handler { async GetLndMetrics(req: Types.LndMetricsRequest): Promise { - const { openChannels, totalActive, totalInactive } = await this.GetChannelsInfo() - const { totalPendingOpen, totalPendingClose } = await this.GetPendingChannelsInfo() - const { channels: closedChannels } = await this.lnd.ListClosedChannels() - const rawRouting = await this.storage.metricsStorage.GetChannelRouting({ from: req.from_unix, to: req.to_unix }) + const [chansInfo, pendingChansInfo, closedChansInfo, routing, rootOps] = await Promise.all([ + this.GetChannelsInfo(), + this.GetPendingChannelsInfo(), + this.lnd.ListClosedChannels(), + this.storage.metricsStorage.GetChannelRouting({ from: req.from_unix, to: req.to_unix }), + this.storage.metricsStorage.GetRootOperations({ from: req.from_unix, to: req.to_unix }) + ]) + const { openChannels, totalActive, totalInactive } = chansInfo + const { totalPendingOpen, totalPendingClose } = pendingChansInfo + const { channels: closedChannels } = closedChansInfo + const rawRouting = routing let totalEvents = 0 let totalFees = 0 rawRouting.forEach(r => { @@ -242,7 +251,10 @@ export default class Handler { externalBalance.push({ x: e.block_height, y: e.external_balance }) } }) - + const closed = await Promise.all(closedChannels.map(async c => { + const tx = await this.lnd.GetTx(c.closingTxHash) + return { capacity: Number(c.capacity), channel_id: c.chanId, closed_height: c.closeHeight, close_tx_timestamp: Number(tx.timeStamp) } + })) return { nodes: [{ chain_balance: chainBalance, @@ -252,11 +264,28 @@ export default class Handler { pending_channels: totalPendingOpen, offline_channels: totalInactive, online_channels: totalActive, - closed_channels: closedChannels.map(c => ({ capacity: Number(c.capacity), channel_id: c.chanId, closed_height: c.closeHeight })), + closed_channels: closed, open_channels: openChannels.map(c => ({ channel_point: c.channelPoint, active: c.active, capacity: Number(c.capacity), channel_id: c.chanId, lifetime: Number(c.lifetime), local_balance: Number(c.localBalance), remote_balance: Number(c.remoteBalance), label: c.peerAlias })), forwarding_events: totalEvents, - forwarding_fees: totalFees + forwarding_fees: totalFees, + root_ops: rootOps.map(r => ({ amount: r.operation_amount, created_at_unix: r.created_at.getTime(), op_id: r.operation_identifier, op_type: mapRootOpType(r.operation_type) })), }], } } + + async AddRootAddressPaid(address: string, txOutput: { hash: string; index: number }, amount: number) { + await this.storage.metricsStorage.AddRootOperation("chain", `${address}:${txOutput.hash}:${txOutput.index}`, amount) + } + + async AddRootInvoicePaid(paymentRequest: string, amount: number) { + await this.storage.metricsStorage.AddRootOperation("invoice", paymentRequest, amount) + } +} + +const mapRootOpType = (opType: string): Types.OperationType => { + switch (opType) { + case "chain": return Types.OperationType.CHAIN_OP + case "invoice": return Types.OperationType.INVOICE_OP + default: throw new Error("Unknown operation type") + } } \ No newline at end of file diff --git a/src/services/storage/entity/RootOperation.ts b/src/services/storage/entity/RootOperation.ts new file mode 100644 index 000000000..96e541865 --- /dev/null +++ b/src/services/storage/entity/RootOperation.ts @@ -0,0 +1,22 @@ +import { Entity, PrimaryGeneratedColumn, Column, Index, Check, CreateDateColumn, UpdateDateColumn } from "typeorm" + +@Entity() +export class RootOperation { + @PrimaryGeneratedColumn() + serial_id: number + + @Column() + operation_type: string + + @Column() + operation_amount: number + + @Column() + operation_identifier: string + + @CreateDateColumn() + created_at: Date + + @UpdateDateColumn() + updated_at: Date +} diff --git a/src/services/storage/metricsStorage.ts b/src/services/storage/metricsStorage.ts index a08f314ff..16e6e72d7 100644 --- a/src/services/storage/metricsStorage.ts +++ b/src/services/storage/metricsStorage.ts @@ -5,8 +5,10 @@ import TransactionsQueue, { TX } from "./transactionsQueue.js"; import { StorageSettings } from "./index.js"; import { newMetricsDb } from "./db.js"; import { ChannelRouting } from "./entity/ChannelRouting.js"; +import { RootOperation } from "./entity/RootOperation.js"; export default class { + DB: DataSource | EntityManager settings: StorageSettings txQueue: TransactionsQueue @@ -98,6 +100,16 @@ export default class { await repo.update(existing.serial_id, { latest_index_offset: event.latest_index_offset }) } } + + async AddRootOperation(opType: string, id: string, amount: number, entityManager = this.DB) { + const newOp = entityManager.getRepository(RootOperation).create({ operation_type: opType, operation_amount: amount, operation_identifier: id }) + return this.txQueue.PushToQueue({ exec: async db => db.getRepository(RootOperation).save(newOp), dbTx: false }) + } + + async GetRootOperations({ from, to }: { from?: number, to?: number }, entityManager = this.DB) { + const q = getTimeQuery({ from, to }) + return entityManager.getRepository(RootOperation).find(q) + } } const getTimeQuery = ({ from, to }: { from?: number, to?: number }): FindManyOptions<{ created_at: Date }> => { From 862059015fc9837c511ef4032d8f61043c70c3ce Mon Sep 17 00:00:00 2001 From: boufni95 Date: Mon, 25 Nov 2024 20:24:41 +0000 Subject: [PATCH 09/10] fix --- proto/lnd/chainnotifier.client.ts | 12 +- proto/lnd/invoices.client.ts | 20 +- proto/lnd/invoices.ts | 4 +- proto/lnd/lightning.client.ts | 290 ++++++++++++++++------------- proto/lnd/router.client.ts | 62 +++--- proto/lnd/router.ts | 16 +- proto/lnd/signer.client.ts | 44 ++--- proto/lnd/walletkit.client.ts | 108 +++++------ proto/lnd/walletkit.ts | 18 +- proto/lnd/walletunlocker.client.ts | 18 +- proto/lnd/walletunlocker.ts | 2 +- 11 files changed, 312 insertions(+), 282 deletions(-) diff --git a/proto/lnd/chainnotifier.client.ts b/proto/lnd/chainnotifier.client.ts index d76e5cd84..dba8dc1b6 100644 --- a/proto/lnd/chainnotifier.client.ts +++ b/proto/lnd/chainnotifier.client.ts @@ -3,13 +3,13 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { ChainNotifier } from "./chainnotifier"; -import type { BlockEpoch } from "./chainnotifier"; -import type { SpendEvent } from "./chainnotifier"; -import type { SpendRequest } from "./chainnotifier"; +import { ChainNotifier } from "./chainnotifier.js"; +import type { BlockEpoch } from "./chainnotifier.js"; +import type { SpendEvent } from "./chainnotifier.js"; +import type { SpendRequest } from "./chainnotifier.js"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { ConfEvent } from "./chainnotifier"; -import type { ConfRequest } from "./chainnotifier"; +import type { ConfEvent } from "./chainnotifier.js"; +import type { ConfRequest } from "./chainnotifier.js"; import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** diff --git a/proto/lnd/invoices.client.ts b/proto/lnd/invoices.client.ts index f4437d32c..b529cca1d 100644 --- a/proto/lnd/invoices.client.ts +++ b/proto/lnd/invoices.client.ts @@ -3,18 +3,18 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { Invoices } from "./invoices"; -import type { LookupInvoiceMsg } from "./invoices"; -import type { SettleInvoiceResp } from "./invoices"; -import type { SettleInvoiceMsg } from "./invoices"; -import type { AddHoldInvoiceResp } from "./invoices"; -import type { AddHoldInvoiceRequest } from "./invoices"; -import type { CancelInvoiceResp } from "./invoices"; -import type { CancelInvoiceMsg } from "./invoices"; +import { Invoices } from "./invoices.js"; +import type { LookupInvoiceMsg } from "./invoices.js"; +import type { SettleInvoiceResp } from "./invoices.js"; +import type { SettleInvoiceMsg } from "./invoices.js"; +import type { AddHoldInvoiceResp } from "./invoices.js"; +import type { AddHoldInvoiceRequest } from "./invoices.js"; +import type { CancelInvoiceResp } from "./invoices.js"; +import type { CancelInvoiceMsg } from "./invoices.js"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { Invoice } from "./lightning"; -import type { SubscribeSingleInvoiceRequest } from "./invoices"; +import type { Invoice } from "./lightning.js"; +import type { SubscribeSingleInvoiceRequest } from "./invoices.js"; import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** diff --git a/proto/lnd/invoices.ts b/proto/lnd/invoices.ts index a94573dc0..4155cf06a 100644 --- a/proto/lnd/invoices.ts +++ b/proto/lnd/invoices.ts @@ -1,7 +1,7 @@ // @generated by protobuf-ts 2.8.1 // @generated from protobuf file "invoices.proto" (package "invoicesrpc", syntax proto3) // tslint:disable -import { Invoice } from "./lightning"; +import { Invoice } from "./lightning.js"; import { ServiceType } from "@protobuf-ts/runtime-rpc"; import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; import type { IBinaryWriter } from "@protobuf-ts/runtime"; @@ -13,7 +13,7 @@ import type { PartialMessage } from "@protobuf-ts/runtime"; import { reflectionMergePartial } from "@protobuf-ts/runtime"; import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; import { MessageType } from "@protobuf-ts/runtime"; -import { RouteHint } from "./lightning"; +import { RouteHint } from "./lightning.js"; /** * @generated from protobuf message invoicesrpc.CancelInvoiceMsg */ diff --git a/proto/lnd/lightning.client.ts b/proto/lnd/lightning.client.ts index 0c3193df7..746e75682 100644 --- a/proto/lnd/lightning.client.ts +++ b/proto/lnd/lightning.client.ts @@ -3,138 +3,153 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { Lightning } from "./lightning"; -import type { LookupHtlcResolutionResponse } from "./lightning"; -import type { LookupHtlcResolutionRequest } from "./lightning"; -import type { ListAliasesResponse } from "./lightning"; -import type { ListAliasesRequest } from "./lightning"; -import type { CustomMessage } from "./lightning"; -import type { SubscribeCustomMessagesRequest } from "./lightning"; -import type { SendCustomMessageResponse } from "./lightning"; -import type { SendCustomMessageRequest } from "./lightning"; -import type { RPCMiddlewareRequest } from "./lightning"; -import type { RPCMiddlewareResponse } from "./lightning"; -import type { CheckMacPermResponse } from "./lightning"; -import type { CheckMacPermRequest } from "./lightning"; -import type { ListPermissionsResponse } from "./lightning"; -import type { ListPermissionsRequest } from "./lightning"; -import type { DeleteMacaroonIDResponse } from "./lightning"; -import type { DeleteMacaroonIDRequest } from "./lightning"; -import type { ListMacaroonIDsResponse } from "./lightning"; -import type { ListMacaroonIDsRequest } from "./lightning"; -import type { BakeMacaroonResponse } from "./lightning"; -import type { BakeMacaroonRequest } from "./lightning"; -import type { ChannelBackupSubscription } from "./lightning"; -import type { RestoreBackupResponse } from "./lightning"; -import type { RestoreChanBackupRequest } from "./lightning"; -import type { VerifyChanBackupResponse } from "./lightning"; -import type { ChanBackupSnapshot } from "./lightning"; -import type { ChanBackupExportRequest } from "./lightning"; -import type { ChannelBackup } from "./lightning"; -import type { ExportChannelBackupRequest } from "./lightning"; -import type { ForwardingHistoryResponse } from "./lightning"; -import type { ForwardingHistoryRequest } from "./lightning"; -import type { PolicyUpdateResponse } from "./lightning"; -import type { PolicyUpdateRequest } from "./lightning"; -import type { FeeReportResponse } from "./lightning"; -import type { FeeReportRequest } from "./lightning"; -import type { DebugLevelResponse } from "./lightning"; -import type { DebugLevelRequest } from "./lightning"; -import type { GraphTopologyUpdate } from "./lightning"; -import type { GraphTopologySubscription } from "./lightning"; -import type { StopResponse } from "./lightning"; -import type { StopRequest } from "./lightning"; -import type { NetworkInfo } from "./lightning"; -import type { NetworkInfoRequest } from "./lightning"; -import type { QueryRoutesResponse } from "./lightning"; -import type { QueryRoutesRequest } from "./lightning"; -import type { NodeInfo } from "./lightning"; -import type { NodeInfoRequest } from "./lightning"; -import type { ChannelEdge } from "./lightning"; -import type { ChanInfoRequest } from "./lightning"; -import type { NodeMetricsResponse } from "./lightning"; -import type { NodeMetricsRequest } from "./lightning"; -import type { ChannelGraph } from "./lightning"; -import type { ChannelGraphRequest } from "./lightning"; -import type { DeleteAllPaymentsResponse } from "./lightning"; -import type { DeleteAllPaymentsRequest } from "./lightning"; -import type { DeletePaymentResponse } from "./lightning"; -import type { DeletePaymentRequest } from "./lightning"; -import type { ListPaymentsResponse } from "./lightning"; -import type { ListPaymentsRequest } from "./lightning"; -import type { PayReq } from "./lightning"; -import type { PayReqString } from "./lightning"; -import type { InvoiceSubscription } from "./lightning"; -import type { PaymentHash } from "./lightning"; -import type { ListInvoiceResponse } from "./lightning"; -import type { ListInvoiceRequest } from "./lightning"; -import type { AddInvoiceResponse } from "./lightning"; -import type { Invoice } from "./lightning"; -import type { SendToRouteRequest } from "./lightning"; -import type { SendResponse } from "./lightning"; -import type { SendRequest } from "./lightning"; -import type { AbandonChannelResponse } from "./lightning"; -import type { AbandonChannelRequest } from "./lightning"; -import type { CloseStatusUpdate } from "./lightning"; -import type { CloseChannelRequest } from "./lightning"; -import type { ChannelAcceptRequest } from "./lightning"; -import type { ChannelAcceptResponse } from "./lightning"; +import { Lightning } from "./lightning.js"; +import type { LookupHtlcResolutionResponse } from "./lightning.js"; +import type { LookupHtlcResolutionRequest } from "./lightning.js"; +import type { ListAliasesResponse } from "./lightning.js"; +import type { ListAliasesRequest } from "./lightning.js"; +import type { CustomMessage } from "./lightning.js"; +import type { SubscribeCustomMessagesRequest } from "./lightning.js"; +import type { SendCustomMessageResponse } from "./lightning.js"; +import type { SendCustomMessageRequest } from "./lightning.js"; +import type { RPCMiddlewareRequest } from "./lightning.js"; +import type { RPCMiddlewareResponse } from "./lightning.js"; +import type { CheckMacPermResponse } from "./lightning.js"; +import type { CheckMacPermRequest } from "./lightning.js"; +import type { ListPermissionsResponse } from "./lightning.js"; +import type { ListPermissionsRequest } from "./lightning.js"; +import type { DeleteMacaroonIDResponse } from "./lightning.js"; +import type { DeleteMacaroonIDRequest } from "./lightning.js"; +import type { ListMacaroonIDsResponse } from "./lightning.js"; +import type { ListMacaroonIDsRequest } from "./lightning.js"; +import type { BakeMacaroonResponse } from "./lightning.js"; +import type { BakeMacaroonRequest } from "./lightning.js"; +import type { ChannelBackupSubscription } from "./lightning.js"; +import type { RestoreBackupResponse } from "./lightning.js"; +import type { RestoreChanBackupRequest } from "./lightning.js"; +import type { VerifyChanBackupResponse } from "./lightning.js"; +import type { ChanBackupSnapshot } from "./lightning.js"; +import type { ChanBackupExportRequest } from "./lightning.js"; +import type { ChannelBackup } from "./lightning.js"; +import type { ExportChannelBackupRequest } from "./lightning.js"; +import type { ForwardingHistoryResponse } from "./lightning.js"; +import type { ForwardingHistoryRequest } from "./lightning.js"; +import type { PolicyUpdateResponse } from "./lightning.js"; +import type { PolicyUpdateRequest } from "./lightning.js"; +import type { FeeReportResponse } from "./lightning.js"; +import type { FeeReportRequest } from "./lightning.js"; +import type { DebugLevelResponse } from "./lightning.js"; +import type { DebugLevelRequest } from "./lightning.js"; +import type { GraphTopologyUpdate } from "./lightning.js"; +import type { GraphTopologySubscription } from "./lightning.js"; +import type { StopResponse } from "./lightning.js"; +import type { StopRequest } from "./lightning.js"; +import type { NetworkInfo } from "./lightning.js"; +import type { NetworkInfoRequest } from "./lightning.js"; +import type { QueryRoutesResponse } from "./lightning.js"; +import type { QueryRoutesRequest } from "./lightning.js"; +import type { NodeInfo } from "./lightning.js"; +import type { NodeInfoRequest } from "./lightning.js"; +import type { ChannelEdge } from "./lightning.js"; +import type { ChanInfoRequest } from "./lightning.js"; +import type { NodeMetricsResponse } from "./lightning.js"; +import type { NodeMetricsRequest } from "./lightning.js"; +import type { ChannelGraph } from "./lightning.js"; +import type { ChannelGraphRequest } from "./lightning.js"; +import type { DeleteAllPaymentsResponse } from "./lightning.js"; +import type { DeleteAllPaymentsRequest } from "./lightning.js"; +import type { DeletePaymentResponse } from "./lightning.js"; +import type { DeletePaymentRequest } from "./lightning.js"; +import type { ListPaymentsResponse } from "./lightning.js"; +import type { ListPaymentsRequest } from "./lightning.js"; +import type { PayReq } from "./lightning.js"; +import type { PayReqString } from "./lightning.js"; +import type { InvoiceSubscription } from "./lightning.js"; +import type { PaymentHash } from "./lightning.js"; +import type { ListInvoiceResponse } from "./lightning.js"; +import type { ListInvoiceRequest } from "./lightning.js"; +import type { AddInvoiceResponse } from "./lightning.js"; +import type { Invoice } from "./lightning.js"; +import type { SendToRouteRequest } from "./lightning.js"; +import type { SendResponse } from "./lightning.js"; +import type { SendRequest } from "./lightning.js"; +import type { AbandonChannelResponse } from "./lightning.js"; +import type { AbandonChannelRequest } from "./lightning.js"; +import type { CloseStatusUpdate } from "./lightning.js"; +import type { CloseChannelRequest } from "./lightning.js"; +import type { ChannelAcceptRequest } from "./lightning.js"; +import type { ChannelAcceptResponse } from "./lightning.js"; import type { DuplexStreamingCall } from "@protobuf-ts/runtime-rpc"; -import type { FundingStateStepResp } from "./lightning"; -import type { FundingTransitionMsg } from "./lightning"; -import type { BatchOpenChannelResponse } from "./lightning"; -import type { BatchOpenChannelRequest } from "./lightning"; -import type { OpenStatusUpdate } from "./lightning"; -import type { ChannelPoint } from "./lightning"; -import type { OpenChannelRequest } from "./lightning"; -import type { ClosedChannelsResponse } from "./lightning"; -import type { ClosedChannelsRequest } from "./lightning"; -import type { ChannelEventUpdate } from "./lightning"; -import type { ChannelEventSubscription } from "./lightning"; -import type { ListChannelsResponse } from "./lightning"; -import type { ListChannelsRequest } from "./lightning"; -import type { PendingChannelsResponse } from "./lightning"; -import type { PendingChannelsRequest } from "./lightning"; -import type { GetRecoveryInfoResponse } from "./lightning"; -import type { GetRecoveryInfoRequest } from "./lightning"; -import type { GetDebugInfoResponse } from "./lightning"; -import type { GetDebugInfoRequest } from "./lightning"; -import type { GetInfoResponse } from "./lightning"; -import type { GetInfoRequest } from "./lightning"; -import type { PeerEvent } from "./lightning"; -import type { PeerEventSubscription } from "./lightning"; -import type { ListPeersResponse } from "./lightning"; -import type { ListPeersRequest } from "./lightning"; -import type { DisconnectPeerResponse } from "./lightning"; -import type { DisconnectPeerRequest } from "./lightning"; -import type { ConnectPeerResponse } from "./lightning"; -import type { ConnectPeerRequest } from "./lightning"; -import type { VerifyMessageResponse } from "./lightning"; -import type { VerifyMessageRequest } from "./lightning"; -import type { SignMessageResponse } from "./lightning"; -import type { SignMessageRequest } from "./lightning"; -import type { NewAddressResponse } from "./lightning"; -import type { NewAddressRequest } from "./lightning"; -import type { SendManyResponse } from "./lightning"; -import type { SendManyRequest } from "./lightning"; -import type { Transaction } from "./lightning"; +import type { FundingStateStepResp } from "./lightning.js"; +import type { FundingTransitionMsg } from "./lightning.js"; +import type { BatchOpenChannelResponse } from "./lightning.js"; +import type { BatchOpenChannelRequest } from "./lightning.js"; +import type { OpenStatusUpdate } from "./lightning.js"; +import type { ChannelPoint } from "./lightning.js"; +import type { OpenChannelRequest } from "./lightning.js"; +import type { ClosedChannelsResponse } from "./lightning.js"; +import type { ClosedChannelsRequest } from "./lightning.js"; +import type { ChannelEventUpdate } from "./lightning.js"; +import type { ChannelEventSubscription } from "./lightning.js"; +import type { ListChannelsResponse } from "./lightning.js"; +import type { ListChannelsRequest } from "./lightning.js"; +import type { PendingChannelsResponse } from "./lightning.js"; +import type { PendingChannelsRequest } from "./lightning.js"; +import type { GetRecoveryInfoResponse } from "./lightning.js"; +import type { GetRecoveryInfoRequest } from "./lightning.js"; +import type { GetDebugInfoResponse } from "./lightning.js"; +import type { GetDebugInfoRequest } from "./lightning.js"; +import type { GetInfoResponse } from "./lightning.js"; +import type { GetInfoRequest } from "./lightning.js"; +import type { PeerEvent } from "./lightning.js"; +import type { PeerEventSubscription } from "./lightning.js"; +import type { ListPeersResponse } from "./lightning.js"; +import type { ListPeersRequest } from "./lightning.js"; +import type { DisconnectPeerResponse } from "./lightning.js"; +import type { DisconnectPeerRequest } from "./lightning.js"; +import type { ConnectPeerResponse } from "./lightning.js"; +import type { ConnectPeerRequest } from "./lightning.js"; +import type { VerifyMessageResponse } from "./lightning.js"; +import type { VerifyMessageRequest } from "./lightning.js"; +import type { SignMessageResponse } from "./lightning.js"; +import type { SignMessageRequest } from "./lightning.js"; +import type { NewAddressResponse } from "./lightning.js"; +import type { NewAddressRequest } from "./lightning.js"; +import type { SendManyResponse } from "./lightning.js"; +import type { SendManyRequest } from "./lightning.js"; +import type { Transaction } from "./lightning.js"; import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; -import type { ListUnspentResponse } from "./lightning"; -import type { ListUnspentRequest } from "./lightning"; -import type { SendCoinsResponse } from "./lightning"; -import type { SendCoinsRequest } from "./lightning"; -import type { EstimateFeeResponse } from "./lightning"; -import type { EstimateFeeRequest } from "./lightning"; -import type { TransactionDetails } from "./lightning"; -import type { GetTransactionsRequest } from "./lightning"; -import type { ChannelBalanceResponse } from "./lightning"; -import type { ChannelBalanceRequest } from "./lightning"; +import type { ListUnspentResponse } from "./lightning.js"; +import type { ListUnspentRequest } from "./lightning.js"; +import type { SendCoinsResponse } from "./lightning.js"; +import type { SendCoinsRequest } from "./lightning.js"; +import type { EstimateFeeResponse } from "./lightning.js"; +import type { EstimateFeeRequest } from "./lightning.js"; +import type { TransactionDetails } from "./lightning.js"; +import type { GetTransactionsRequest } from "./lightning.js"; +import type { ChannelBalanceResponse } from "./lightning.js"; +import type { ChannelBalanceRequest } from "./lightning.js"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { WalletBalanceResponse } from "./lightning"; -import type { WalletBalanceRequest } from "./lightning"; +import type { WalletBalanceResponse } from "./lightning.js"; +import type { WalletBalanceRequest } from "./lightning.js"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; -// // Comments in this file will be directly parsed into the API // Documentation as descriptions of the associated method, message, or field. // These descriptions should go right above the definition of the object, and // can be in either block or // comment format. // // An RPC method can be matched to an lncli command by placing a line in the // beginning of the description in exactly the following format: // lncli: `methodname` // // Failure to specify the exact name of the command will cause documentation // generation to fail. // // More information on how exactly the gRPC documentation is generated from // this proto file can be found here: // https://github.com/lightninglabs/lightning-api +// +// Comments in this file will be directly parsed into the API +// Documentation as descriptions of the associated method, message, or field. +// These descriptions should go right above the definition of the object, and +// can be in either block or // comment format. +// +// An RPC method can be matched to an lncli command by placing a line in the +// beginning of the description in exactly the following format: +// lncli: `methodname` +// +// Failure to specify the exact name of the command will cause documentation +// generation to fail. +// +// More information on how exactly the gRPC documentation is generated from +// this proto file can be found here: +// https://github.com/lightninglabs/lightning-api /** * Lightning is the main RPC server of the daemon. @@ -310,7 +325,7 @@ export interface ILightningClient { * @generated from protobuf rpc: GetRecoveryInfo(lnrpc.GetRecoveryInfoRequest) returns (lnrpc.GetRecoveryInfoResponse); */ getRecoveryInfo(input: GetRecoveryInfoRequest, options?: RpcOptions): UnaryCall; - // TODO(roasbeef): merge with below with bool? + // TODO(roasbeef): merge with below with bool? /** * lncli: `pendingchannels` @@ -830,7 +845,22 @@ export interface ILightningClient { */ lookupHtlcResolution(input: LookupHtlcResolutionRequest, options?: RpcOptions): UnaryCall; } -// // Comments in this file will be directly parsed into the API // Documentation as descriptions of the associated method, message, or field. // These descriptions should go right above the definition of the object, and // can be in either block or // comment format. // // An RPC method can be matched to an lncli command by placing a line in the // beginning of the description in exactly the following format: // lncli: `methodname` // // Failure to specify the exact name of the command will cause documentation // generation to fail. // // More information on how exactly the gRPC documentation is generated from // this proto file can be found here: // https://github.com/lightninglabs/lightning-api +// +// Comments in this file will be directly parsed into the API +// Documentation as descriptions of the associated method, message, or field. +// These descriptions should go right above the definition of the object, and +// can be in either block or // comment format. +// +// An RPC method can be matched to an lncli command by placing a line in the +// beginning of the description in exactly the following format: +// lncli: `methodname` +// +// Failure to specify the exact name of the command will cause documentation +// generation to fail. +// +// More information on how exactly the gRPC documentation is generated from +// this proto file can be found here: +// https://github.com/lightninglabs/lightning-api /** * Lightning is the main RPC server of the daemon. @@ -1065,7 +1095,7 @@ export class LightningClient implements ILightningClient, ServiceInfo { const method = this.methods[17], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } - // TODO(roasbeef): merge with below with bool? + // TODO(roasbeef): merge with below with bool? /** * lncli: `pendingchannels` diff --git a/proto/lnd/router.client.ts b/proto/lnd/router.client.ts index fc85cc794..27722e38b 100644 --- a/proto/lnd/router.client.ts +++ b/proto/lnd/router.client.ts @@ -3,40 +3,40 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { Router } from "./router"; -import type { UpdateChanStatusResponse } from "./router"; -import type { UpdateChanStatusRequest } from "./router"; -import type { ForwardHtlcInterceptRequest } from "./router"; -import type { ForwardHtlcInterceptResponse } from "./router"; +import { Router } from "./router.js"; +import type { UpdateChanStatusResponse } from "./router.js"; +import type { UpdateChanStatusRequest } from "./router.js"; +import type { ForwardHtlcInterceptRequest } from "./router.js"; +import type { ForwardHtlcInterceptResponse } from "./router.js"; import type { DuplexStreamingCall } from "@protobuf-ts/runtime-rpc"; -import type { PaymentStatus } from "./router"; -import type { HtlcEvent } from "./router"; -import type { SubscribeHtlcEventsRequest } from "./router"; -import type { BuildRouteResponse } from "./router"; -import type { BuildRouteRequest } from "./router"; -import type { QueryProbabilityResponse } from "./router"; -import type { QueryProbabilityRequest } from "./router"; -import type { SetMissionControlConfigResponse } from "./router"; -import type { SetMissionControlConfigRequest } from "./router"; -import type { GetMissionControlConfigResponse } from "./router"; -import type { GetMissionControlConfigRequest } from "./router"; -import type { XImportMissionControlResponse } from "./router"; -import type { XImportMissionControlRequest } from "./router"; -import type { QueryMissionControlResponse } from "./router"; -import type { QueryMissionControlRequest } from "./router"; -import type { ResetMissionControlResponse } from "./router"; -import type { ResetMissionControlRequest } from "./router"; -import type { HTLCAttempt } from "./lightning"; -import type { SendToRouteResponse } from "./router"; -import type { SendToRouteRequest } from "./router"; -import type { RouteFeeResponse } from "./router"; -import type { RouteFeeRequest } from "./router"; +import type { PaymentStatus } from "./router.js"; +import type { HtlcEvent } from "./router.js"; +import type { SubscribeHtlcEventsRequest } from "./router.js"; +import type { BuildRouteResponse } from "./router.js"; +import type { BuildRouteRequest } from "./router.js"; +import type { QueryProbabilityResponse } from "./router.js"; +import type { QueryProbabilityRequest } from "./router.js"; +import type { SetMissionControlConfigResponse } from "./router.js"; +import type { SetMissionControlConfigRequest } from "./router.js"; +import type { GetMissionControlConfigResponse } from "./router.js"; +import type { GetMissionControlConfigRequest } from "./router.js"; +import type { XImportMissionControlResponse } from "./router.js"; +import type { XImportMissionControlRequest } from "./router.js"; +import type { QueryMissionControlResponse } from "./router.js"; +import type { QueryMissionControlRequest } from "./router.js"; +import type { ResetMissionControlResponse } from "./router.js"; +import type { ResetMissionControlRequest } from "./router.js"; +import type { HTLCAttempt } from "./lightning.js"; +import type { SendToRouteResponse } from "./router.js"; +import type { SendToRouteRequest } from "./router.js"; +import type { RouteFeeResponse } from "./router.js"; +import type { RouteFeeRequest } from "./router.js"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; -import type { TrackPaymentsRequest } from "./router"; -import type { TrackPaymentRequest } from "./router"; +import type { TrackPaymentsRequest } from "./router.js"; +import type { TrackPaymentRequest } from "./router.js"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { Payment } from "./lightning"; -import type { SendPaymentRequest } from "./router"; +import type { Payment } from "./lightning.js"; +import type { SendPaymentRequest } from "./router.js"; import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** diff --git a/proto/lnd/router.ts b/proto/lnd/router.ts index 2a52b0548..edb624cd5 100644 --- a/proto/lnd/router.ts +++ b/proto/lnd/router.ts @@ -1,7 +1,7 @@ // @generated by protobuf-ts 2.8.1 // @generated from protobuf file "router.proto" (package "routerrpc", syntax proto3) // tslint:disable -import { Payment } from "./lightning"; +import { Payment } from "./lightning.js"; import { ServiceType } from "@protobuf-ts/runtime-rpc"; import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; import type { IBinaryWriter } from "@protobuf-ts/runtime"; @@ -13,13 +13,13 @@ import type { PartialMessage } from "@protobuf-ts/runtime"; import { reflectionMergePartial } from "@protobuf-ts/runtime"; import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; import { MessageType } from "@protobuf-ts/runtime"; -import { ChannelPoint } from "./lightning"; -import { HTLCAttempt } from "./lightning"; -import { Failure_FailureCode } from "./lightning"; -import { Failure } from "./lightning"; -import { Route } from "./lightning"; -import { FeatureBit } from "./lightning"; -import { RouteHint } from "./lightning"; +import { ChannelPoint } from "./lightning.js"; +import { HTLCAttempt } from "./lightning.js"; +import { Failure_FailureCode } from "./lightning.js"; +import { Failure } from "./lightning.js"; +import { Route } from "./lightning.js"; +import { FeatureBit } from "./lightning.js"; +import { RouteHint } from "./lightning.js"; /** * @generated from protobuf message routerrpc.SendPaymentRequest */ diff --git a/proto/lnd/signer.client.ts b/proto/lnd/signer.client.ts index 92ee85ddf..8ce80d4c3 100644 --- a/proto/lnd/signer.client.ts +++ b/proto/lnd/signer.client.ts @@ -3,29 +3,29 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { Signer } from "./signer"; -import type { MuSig2CleanupResponse } from "./signer"; -import type { MuSig2CleanupRequest } from "./signer"; -import type { MuSig2CombineSigResponse } from "./signer"; -import type { MuSig2CombineSigRequest } from "./signer"; -import type { MuSig2SignResponse } from "./signer"; -import type { MuSig2SignRequest } from "./signer"; -import type { MuSig2RegisterNoncesResponse } from "./signer"; -import type { MuSig2RegisterNoncesRequest } from "./signer"; -import type { MuSig2SessionResponse } from "./signer"; -import type { MuSig2SessionRequest } from "./signer"; -import type { MuSig2CombineKeysResponse } from "./signer"; -import type { MuSig2CombineKeysRequest } from "./signer"; -import type { SharedKeyResponse } from "./signer"; -import type { SharedKeyRequest } from "./signer"; -import type { VerifyMessageResp } from "./signer"; -import type { VerifyMessageReq } from "./signer"; -import type { SignMessageResp } from "./signer"; -import type { SignMessageReq } from "./signer"; -import type { InputScriptResp } from "./signer"; +import { Signer } from "./signer.js"; +import type { MuSig2CleanupResponse } from "./signer.js"; +import type { MuSig2CleanupRequest } from "./signer.js"; +import type { MuSig2CombineSigResponse } from "./signer.js"; +import type { MuSig2CombineSigRequest } from "./signer.js"; +import type { MuSig2SignResponse } from "./signer.js"; +import type { MuSig2SignRequest } from "./signer.js"; +import type { MuSig2RegisterNoncesResponse } from "./signer.js"; +import type { MuSig2RegisterNoncesRequest } from "./signer.js"; +import type { MuSig2SessionResponse } from "./signer.js"; +import type { MuSig2SessionRequest } from "./signer.js"; +import type { MuSig2CombineKeysResponse } from "./signer.js"; +import type { MuSig2CombineKeysRequest } from "./signer.js"; +import type { SharedKeyResponse } from "./signer.js"; +import type { SharedKeyRequest } from "./signer.js"; +import type { VerifyMessageResp } from "./signer.js"; +import type { VerifyMessageReq } from "./signer.js"; +import type { SignMessageResp } from "./signer.js"; +import type { SignMessageReq } from "./signer.js"; +import type { InputScriptResp } from "./signer.js"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { SignResp } from "./signer"; -import type { SignReq } from "./signer"; +import type { SignResp } from "./signer.js"; +import type { SignReq } from "./signer.js"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** diff --git a/proto/lnd/walletkit.client.ts b/proto/lnd/walletkit.client.ts index f47734ab1..f136b7afd 100644 --- a/proto/lnd/walletkit.client.ts +++ b/proto/lnd/walletkit.client.ts @@ -3,62 +3,62 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { WalletKit } from "./walletkit"; -import type { FinalizePsbtResponse } from "./walletkit"; -import type { FinalizePsbtRequest } from "./walletkit"; -import type { SignPsbtResponse } from "./walletkit"; -import type { SignPsbtRequest } from "./walletkit"; -import type { FundPsbtResponse } from "./walletkit"; -import type { FundPsbtRequest } from "./walletkit"; -import type { LabelTransactionResponse } from "./walletkit"; -import type { LabelTransactionRequest } from "./walletkit"; -import type { ListSweepsResponse } from "./walletkit"; -import type { ListSweepsRequest } from "./walletkit"; -import type { BumpForceCloseFeeResponse } from "./walletkit"; -import type { BumpForceCloseFeeRequest } from "./walletkit"; -import type { BumpFeeResponse } from "./walletkit"; -import type { BumpFeeRequest } from "./walletkit"; -import type { PendingSweepsResponse } from "./walletkit"; -import type { PendingSweepsRequest } from "./walletkit"; -import type { EstimateFeeResponse } from "./walletkit"; -import type { EstimateFeeRequest } from "./walletkit"; -import type { SendOutputsResponse } from "./walletkit"; -import type { SendOutputsRequest } from "./walletkit"; -import type { RemoveTransactionResponse } from "./walletkit"; -import type { PublishResponse } from "./walletkit"; -import type { Transaction as Transaction$ } from "./walletkit"; -import type { ImportTapscriptResponse } from "./walletkit"; -import type { ImportTapscriptRequest } from "./walletkit"; -import type { ImportPublicKeyResponse } from "./walletkit"; -import type { ImportPublicKeyRequest } from "./walletkit"; -import type { ImportAccountResponse } from "./walletkit"; -import type { ImportAccountRequest } from "./walletkit"; -import type { VerifyMessageWithAddrResponse } from "./walletkit"; -import type { VerifyMessageWithAddrRequest } from "./walletkit"; -import type { SignMessageWithAddrResponse } from "./walletkit"; -import type { SignMessageWithAddrRequest } from "./walletkit"; -import type { ListAddressesResponse } from "./walletkit"; -import type { ListAddressesRequest } from "./walletkit"; -import type { RequiredReserveResponse } from "./walletkit"; -import type { RequiredReserveRequest } from "./walletkit"; -import type { ListAccountsResponse } from "./walletkit"; -import type { ListAccountsRequest } from "./walletkit"; +import { WalletKit } from "./walletkit.js"; +import type { FinalizePsbtResponse } from "./walletkit.js"; +import type { FinalizePsbtRequest } from "./walletkit.js"; +import type { SignPsbtResponse } from "./walletkit.js"; +import type { SignPsbtRequest } from "./walletkit.js"; +import type { FundPsbtResponse } from "./walletkit.js"; +import type { FundPsbtRequest } from "./walletkit.js"; +import type { LabelTransactionResponse } from "./walletkit.js"; +import type { LabelTransactionRequest } from "./walletkit.js"; +import type { ListSweepsResponse } from "./walletkit.js"; +import type { ListSweepsRequest } from "./walletkit.js"; +import type { BumpForceCloseFeeResponse } from "./walletkit.js"; +import type { BumpForceCloseFeeRequest } from "./walletkit.js"; +import type { BumpFeeResponse } from "./walletkit.js"; +import type { BumpFeeRequest } from "./walletkit.js"; +import type { PendingSweepsResponse } from "./walletkit.js"; +import type { PendingSweepsRequest } from "./walletkit.js"; +import type { EstimateFeeResponse } from "./walletkit.js"; +import type { EstimateFeeRequest } from "./walletkit.js"; +import type { SendOutputsResponse } from "./walletkit.js"; +import type { SendOutputsRequest } from "./walletkit.js"; +import type { RemoveTransactionResponse } from "./walletkit.js"; +import type { PublishResponse } from "./walletkit.js"; +import type { Transaction as Transaction$ } from "./walletkit.js"; +import type { ImportTapscriptResponse } from "./walletkit.js"; +import type { ImportTapscriptRequest } from "./walletkit.js"; +import type { ImportPublicKeyResponse } from "./walletkit.js"; +import type { ImportPublicKeyRequest } from "./walletkit.js"; +import type { ImportAccountResponse } from "./walletkit.js"; +import type { ImportAccountRequest } from "./walletkit.js"; +import type { VerifyMessageWithAddrResponse } from "./walletkit.js"; +import type { VerifyMessageWithAddrRequest } from "./walletkit.js"; +import type { SignMessageWithAddrResponse } from "./walletkit.js"; +import type { SignMessageWithAddrRequest } from "./walletkit.js"; +import type { ListAddressesResponse } from "./walletkit.js"; +import type { ListAddressesRequest } from "./walletkit.js"; +import type { RequiredReserveResponse } from "./walletkit.js"; +import type { RequiredReserveRequest } from "./walletkit.js"; +import type { ListAccountsResponse } from "./walletkit.js"; +import type { ListAccountsRequest } from "./walletkit.js"; import type { Transaction } from "./lightning"; -import type { GetTransactionRequest } from "./walletkit"; -import type { AddrResponse } from "./walletkit"; -import type { AddrRequest } from "./walletkit"; -import type { KeyLocator } from "./signer"; -import type { KeyDescriptor } from "./signer"; -import type { KeyReq } from "./walletkit"; -import type { ListLeasesResponse } from "./walletkit"; -import type { ListLeasesRequest } from "./walletkit"; -import type { ReleaseOutputResponse } from "./walletkit"; -import type { ReleaseOutputRequest } from "./walletkit"; -import type { LeaseOutputResponse } from "./walletkit"; -import type { LeaseOutputRequest } from "./walletkit"; +import type { GetTransactionRequest } from "./walletkit.js"; +import type { AddrResponse } from "./walletkit.js"; +import type { AddrRequest } from "./walletkit.js"; +import type { KeyLocator } from "./signer.js"; +import type { KeyDescriptor } from "./signer.js"; +import type { KeyReq } from "./walletkit.js"; +import type { ListLeasesResponse } from "./walletkit.js"; +import type { ListLeasesRequest } from "./walletkit.js"; +import type { ReleaseOutputResponse } from "./walletkit.js"; +import type { ReleaseOutputRequest } from "./walletkit.js"; +import type { LeaseOutputResponse } from "./walletkit.js"; +import type { LeaseOutputRequest } from "./walletkit.js"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { ListUnspentResponse } from "./walletkit"; -import type { ListUnspentRequest } from "./walletkit"; +import type { ListUnspentResponse } from "./walletkit.js"; +import type { ListUnspentRequest } from "./walletkit.js"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; // diff --git a/proto/lnd/walletkit.ts b/proto/lnd/walletkit.ts index 18819bb73..dc8955665 100644 --- a/proto/lnd/walletkit.ts +++ b/proto/lnd/walletkit.ts @@ -1,9 +1,9 @@ // @generated by protobuf-ts 2.8.1 // @generated from protobuf file "walletkit.proto" (package "walletrpc", syntax proto3) // tslint:disable -import { Transaction as Transaction$ } from "./lightning"; -import { KeyLocator } from "./signer"; -import { KeyDescriptor } from "./signer"; +import { Transaction as Transaction$ } from "./lightning.js"; +import { KeyLocator } from "./signer.js"; +import { KeyDescriptor } from "./signer.js"; import { ServiceType } from "@protobuf-ts/runtime-rpc"; import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; import type { IBinaryWriter } from "@protobuf-ts/runtime"; @@ -15,12 +15,12 @@ import type { PartialMessage } from "@protobuf-ts/runtime"; import { reflectionMergePartial } from "@protobuf-ts/runtime"; import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; import { MessageType } from "@protobuf-ts/runtime"; -import { TransactionDetails } from "./lightning"; -import { ChannelPoint } from "./lightning"; -import { CoinSelectionStrategy } from "./lightning"; -import { TxOut } from "./signer"; -import { OutPoint } from "./lightning"; -import { Utxo } from "./lightning"; +import { TransactionDetails } from "./lightning.js"; +import { ChannelPoint } from "./lightning.js"; +import { CoinSelectionStrategy } from "./lightning.js"; +import { TxOut } from "./signer.js"; +import { OutPoint } from "./lightning.js"; +import { Utxo } from "./lightning.js"; /** * @generated from protobuf message walletrpc.ListUnspentRequest */ diff --git a/proto/lnd/walletunlocker.client.ts b/proto/lnd/walletunlocker.client.ts index ed94ca63c..a3e3d7da7 100644 --- a/proto/lnd/walletunlocker.client.ts +++ b/proto/lnd/walletunlocker.client.ts @@ -3,16 +3,16 @@ // tslint:disable import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { WalletUnlocker } from "./walletunlocker"; -import type { ChangePasswordResponse } from "./walletunlocker"; -import type { ChangePasswordRequest } from "./walletunlocker"; -import type { UnlockWalletResponse } from "./walletunlocker"; -import type { UnlockWalletRequest } from "./walletunlocker"; -import type { InitWalletResponse } from "./walletunlocker"; -import type { InitWalletRequest } from "./walletunlocker"; +import { WalletUnlocker } from "./walletunlocker.js"; +import type { ChangePasswordResponse } from "./walletunlocker.js"; +import type { ChangePasswordRequest } from "./walletunlocker.js"; +import type { UnlockWalletResponse } from "./walletunlocker.js"; +import type { UnlockWalletRequest } from "./walletunlocker.js"; +import type { InitWalletResponse } from "./walletunlocker.js"; +import type { InitWalletRequest } from "./walletunlocker.js"; import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { GenSeedResponse } from "./walletunlocker"; -import type { GenSeedRequest } from "./walletunlocker"; +import type { GenSeedResponse } from "./walletunlocker.js"; +import type { GenSeedRequest } from "./walletunlocker.js"; import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; // diff --git a/proto/lnd/walletunlocker.ts b/proto/lnd/walletunlocker.ts index 7851c6756..a472c857e 100644 --- a/proto/lnd/walletunlocker.ts +++ b/proto/lnd/walletunlocker.ts @@ -12,7 +12,7 @@ import type { PartialMessage } from "@protobuf-ts/runtime"; import { reflectionMergePartial } from "@protobuf-ts/runtime"; import { MESSAGE_TYPE } from "@protobuf-ts/runtime"; import { MessageType } from "@protobuf-ts/runtime"; -import { ChanBackupSnapshot } from "./lightning"; +import { ChanBackupSnapshot } from "./lightning.js"; /** * @generated from protobuf message lnrpc.GenSeedRequest */ From a945038b1627f61ca26b24df0c8f9561c1c1b678 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Mon, 25 Nov 2024 20:28:19 +0000 Subject: [PATCH 10/10] db migration --- metricsDatasource.js | 8 +++++--- src/services/storage/db.ts | 3 ++- .../storage/migrations/1732566440447-root_ops.ts | 14 ++++++++++++++ src/services/storage/migrations/runner.ts | 3 ++- 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 src/services/storage/migrations/1732566440447-root_ops.ts diff --git a/metricsDatasource.js b/metricsDatasource.js index dbfff8324..021034836 100644 --- a/metricsDatasource.js +++ b/metricsDatasource.js @@ -2,15 +2,17 @@ import { DataSource } from "typeorm" import { BalanceEvent } from "./build/src/services/storage/entity/BalanceEvent.js" import { ChannelBalanceEvent } from "./build/src/services/storage/entity/ChannelsBalanceEvent.js" import { ChannelRouting } from "./build/src/services/storage/entity/ChannelRouting.js" +import { RootOperation } from "./build/src/services/storage/entity/RootOperation.js" import { LndMetrics1703170330183 } from './build/src/services/storage/migrations/1703170330183-lnd_metrics.js' import { ChannelRouting1709316653538 } from './build/src/services/storage/migrations/1709316653538-channel_routing.js' import { HtlcCount1724266887195 } from './build/src/services/storage/migrations/1724266887195-htlc_count.js' +import { BalanceEvents1724860966825 } from './build/src/services/storage/migrations/1724860966825-balance_events.js' export default new DataSource({ type: "sqlite", database: "metrics.sqlite", - entities: [BalanceEvent, ChannelBalanceEvent, ChannelRouting], - migrations: [LndMetrics1703170330183, ChannelRouting1709316653538, HtlcCount1724266887195] + entities: [BalanceEvent, ChannelBalanceEvent, ChannelRouting, RootOperation], + migrations: [LndMetrics1703170330183, ChannelRouting1709316653538, HtlcCount1724266887195, BalanceEvents1724860966825] }); -//npx typeorm migration:generate ./src/services/storage/migrations/balance_events -d ./metricsDatasource.js \ No newline at end of file +//npx typeorm migration:generate ./src/services/storage/migrations/root_ops -d ./metricsDatasource.js \ No newline at end of file diff --git a/src/services/storage/db.ts b/src/services/storage/db.ts index 2ee113d98..6c5804426 100644 --- a/src/services/storage/db.ts +++ b/src/services/storage/db.ts @@ -22,6 +22,7 @@ import { LndNodeInfo } from "./entity/LndNodeInfo.js" import { TrackedProvider } from "./entity/TrackedProvider.js" import { InviteToken } from "./entity/InviteToken.js" import { DebitAccess } from "./entity/DebitAccess.js" +import { RootOperation } from "./entity/RootOperation.js" export type DbSettings = { @@ -41,7 +42,7 @@ export const newMetricsDb = async (settings: DbSettings, metricsMigrations: Func const source = await new DataSource({ type: "sqlite", database: settings.metricsDatabaseFile, - entities: [BalanceEvent, ChannelBalanceEvent, ChannelRouting], + entities: [BalanceEvent, ChannelBalanceEvent, ChannelRouting, RootOperation], migrations: metricsMigrations }).initialize(); const log = getLogger({}); diff --git a/src/services/storage/migrations/1732566440447-root_ops.ts b/src/services/storage/migrations/1732566440447-root_ops.ts new file mode 100644 index 000000000..86f599c3c --- /dev/null +++ b/src/services/storage/migrations/1732566440447-root_ops.ts @@ -0,0 +1,14 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class RootOps1732566440447 implements MigrationInterface { + name = 'RootOps1732566440447' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`CREATE TABLE "root_operation" ("serial_id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "operation_type" varchar NOT NULL, "operation_amount" integer NOT NULL, "operation_identifier" varchar NOT NULL, "created_at" datetime NOT NULL DEFAULT (datetime('now')), "updated_at" datetime NOT NULL DEFAULT (datetime('now')))`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP TABLE "root_operation"`); + } + +} diff --git a/src/services/storage/migrations/runner.ts b/src/services/storage/migrations/runner.ts index 8efd66d51..767e3d2e6 100644 --- a/src/services/storage/migrations/runner.ts +++ b/src/services/storage/migrations/runner.ts @@ -16,8 +16,9 @@ import { DebitAccess1726496225078 } from './1726496225078-debit_access.js' import { DebitAccessFixes1726685229264 } from './1726685229264-debit_access_fixes.js' import { DebitToPub1727105758354 } from './1727105758354-debit_to_pub.js' import { UserCbUrl1727112281043 } from './1727112281043-user_cb_url.js' +import { RootOps1732566440447 } from './1732566440447-root_ops.js' const allMigrations = [Initial1703170309875, LspOrder1718387847693, LiquidityProvider1719335699480, LndNodeInfo1720187506189, TrackedProvider1720814323679, CreateInviteTokenTable1721751414878, PaymentIndex1721760297610, DebitAccess1726496225078, DebitAccessFixes1726685229264, DebitToPub1727105758354, UserCbUrl1727112281043] -const allMetricsMigrations = [LndMetrics1703170330183, ChannelRouting1709316653538, HtlcCount1724266887195, BalanceEvents1724860966825] +const allMetricsMigrations = [LndMetrics1703170330183, ChannelRouting1709316653538, HtlcCount1724266887195, BalanceEvents1724860966825, RootOps1732566440447] export const TypeOrmMigrationRunner = async (log: PubLogger, storageManager: Storage, settings: DbSettings, arg: string | undefined): Promise => { if (arg === 'fake_initial_migration') { runFakeMigration(settings.databaseFile, [Initial1703170309875])