diff --git a/bruno/collections/Rafiki/POS Service APIs/Get Incoming Payments.bru b/bruno/collections/Rafiki/POS Service APIs/Get Incoming Payments.bru index 0b5f2c4816..47104f25a2 100644 --- a/bruno/collections/Rafiki/POS Service APIs/Get Incoming Payments.bru +++ b/bruno/collections/Rafiki/POS Service APIs/Get Incoming Payments.bru @@ -1,7 +1,7 @@ meta { name: Get Incoming Payments type: http - seq: 4 + seq: 2 } get { @@ -13,3 +13,11 @@ get { params:query { receiverWalletAddress: https://happy-life-bank-backend/accounts/pfry } + +script:post-response { + const body = res.getBody(); + + if (body?.result) { + bru.setEnvVar("refundIncomingPaymentId", body.result[0].id); + } +} diff --git a/bruno/collections/Rafiki/POS Service APIs/Initiate Payment.bru b/bruno/collections/Rafiki/POS Service APIs/Initiate Payment.bru index 40d1182c6d..c4b63d942c 100644 --- a/bruno/collections/Rafiki/POS Service APIs/Initiate Payment.bru +++ b/bruno/collections/Rafiki/POS Service APIs/Initiate Payment.bru @@ -1,7 +1,7 @@ meta { name: Initiate Payment type: http - seq: 3 + seq: 1 } post { diff --git a/bruno/collections/Rafiki/POS Service APIs/Refund Incoming Payment.bru b/bruno/collections/Rafiki/POS Service APIs/Refund Incoming Payment.bru new file mode 100644 index 0000000000..04d88ee60f --- /dev/null +++ b/bruno/collections/Rafiki/POS Service APIs/Refund Incoming Payment.bru @@ -0,0 +1,23 @@ +meta { + name: Refund Incoming Payment + type: http + seq: 3 +} + +post { + url: http://localhost:4008/refund + body: json + auth: inherit +} + +body:json { + { + "incomingPaymentId": "{{refundIncomingPaymentId}}", + "posWalletAddress": "https://happy-life-bank-backend/accounts/pfry" + } +} + +settings { + encodeUrl: true + timeout: 0 +} diff --git a/packages/point-of-sale/src/app.ts b/packages/point-of-sale/src/app.ts index 78b13526e4..d35f57cbf1 100644 --- a/packages/point-of-sale/src/app.ts +++ b/packages/point-of-sale/src/app.ts @@ -9,7 +9,8 @@ import cors from '@koa/cors' import { GetPaymentsContext, PaymentContext, - PaymentRoutes + PaymentRoutes, + RefundContext } from './payments/routes' import { HandleWebhookContext, @@ -89,6 +90,13 @@ export class App { webhookHandlerRoutes.handleWebhook ) + // POST /refund + // Refund a payment + router.post( + '/refund', + paymentRoutes.refundPayment + ) + koa.use(cors()) koa.use(router.routes()) diff --git a/packages/point-of-sale/src/graphql/generated/graphql.ts b/packages/point-of-sale/src/graphql/generated/graphql.ts index 06ea5cddac..136b2e0f22 100644 --- a/packages/point-of-sale/src/graphql/generated/graphql.ts +++ b/packages/point-of-sale/src/graphql/generated/graphql.ts @@ -3166,6 +3166,27 @@ export type CreateIncomingPaymentVariables = Exact<{ export type CreateIncomingPayment = { __typename?: 'Mutation', createIncomingPayment: { __typename?: 'IncomingPaymentResponse', payment?: { __typename?: 'IncomingPayment', id: string, url: string } | null } }; +export type CreateOutgoingPaymentFromIncomingPaymentVariables = Exact<{ + input: CreateOutgoingPaymentFromIncomingPaymentInput; +}>; + + +export type CreateOutgoingPaymentFromIncomingPayment = { __typename?: 'Mutation', createOutgoingPaymentFromIncomingPayment: { __typename?: 'OutgoingPaymentResponse', payment?: { __typename?: 'OutgoingPayment', id: string, walletAddressId: string, createdAt: string } | null } }; + +export type CreateReceiverVariables = Exact<{ + input: CreateReceiverInput; +}>; + + +export type CreateReceiver = { __typename?: 'Mutation', createReceiver: { __typename?: 'CreateReceiverResponse', receiver?: { __typename?: 'Receiver', id: string, metadata?: any | null, incomingAmount?: { __typename?: 'Amount', value: bigint, assetCode: string, assetScale: number } | null } | null } }; + +export type GetIncomingPaymentSenderAndAmountVariables = Exact<{ + id: Scalars['String']['input']; +}>; + + +export type GetIncomingPaymentSenderAndAmount = { __typename?: 'Query', incomingPayment?: { __typename?: 'IncomingPayment', id: string, url: string, senderWalletAddress?: string | null, incomingAmount?: { __typename?: 'Amount', value: bigint, assetCode: string, assetScale: number } | null } | null }; + export type GetWalletAddressVariables = Exact<{ url: Scalars['String']['input']; first?: InputMaybe; diff --git a/packages/point-of-sale/src/graphql/mutations/createOutgoingPaymentFromIncomingPayment.ts b/packages/point-of-sale/src/graphql/mutations/createOutgoingPaymentFromIncomingPayment.ts new file mode 100644 index 0000000000..08552e96e4 --- /dev/null +++ b/packages/point-of-sale/src/graphql/mutations/createOutgoingPaymentFromIncomingPayment.ts @@ -0,0 +1,15 @@ +import { gql } from '@apollo/client' + +export const CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT = gql` + mutation CreateOutgoingPaymentFromIncomingPayment( + $input: CreateOutgoingPaymentFromIncomingPaymentInput! + ) { + createOutgoingPaymentFromIncomingPayment(input: $input) { + payment { + id + walletAddressId + createdAt + } + } + } +` diff --git a/packages/point-of-sale/src/graphql/mutations/createReceiver.ts b/packages/point-of-sale/src/graphql/mutations/createReceiver.ts new file mode 100644 index 0000000000..08b7b88fdd --- /dev/null +++ b/packages/point-of-sale/src/graphql/mutations/createReceiver.ts @@ -0,0 +1,17 @@ +import { gql } from '@apollo/client' + +export const CREATE_RECEIVER = gql` + mutation CreateReceiver($input: CreateReceiverInput!) { + createReceiver(input: $input) { + receiver { + id + metadata + incomingAmount { + value + assetCode + assetScale + } + } + } + } +` diff --git a/packages/point-of-sale/src/graphql/queries/getIncomingPayment.ts b/packages/point-of-sale/src/graphql/queries/getIncomingPayment.ts new file mode 100644 index 0000000000..4ffb2313f7 --- /dev/null +++ b/packages/point-of-sale/src/graphql/queries/getIncomingPayment.ts @@ -0,0 +1,16 @@ +import { gql } from '@apollo/client' + +export const GET_INCOMING_PAYMENT = gql` + query GetIncomingPaymentSenderAndAmount($id: String!) { + incomingPayment(id: $id) { + id + url + senderWalletAddress + incomingAmount { + value + assetCode + assetScale + } + } + } +` diff --git a/packages/point-of-sale/src/payments/routes.test.ts b/packages/point-of-sale/src/payments/routes.test.ts index 5b940dbf07..86e9292a04 100644 --- a/packages/point-of-sale/src/payments/routes.test.ts +++ b/packages/point-of-sale/src/payments/routes.test.ts @@ -8,7 +8,8 @@ import { GetPaymentsContext, GetPaymentsQuery, PaymentContext, - PaymentRoutes + PaymentRoutes, + RefundContext } from './routes' import { PaymentService } from './service' import { CardServiceClient, Result } from '../card-service-client/client' @@ -376,6 +377,32 @@ describe('Payment Routes', () => { }) }) }) + + describe('refund payment', () => { + test('returns 200 when refunding incoming payment', async (): Promise => { + const ctx = createRefundContext() + jest + .spyOn(paymentService, 'refundIncomingPayment') + .mockResolvedValueOnce({ + id: v4() + }) + + await paymentRoutes.refundPayment(ctx) + expect(ctx.status).toEqual(200) + }) + + test('returns 400 if incoming payment refund fails', async (): Promise => { + const ctx = createRefundContext() + const refundError = new Error('Failed to refund incoming payment') + jest + .spyOn(paymentService, 'refundIncomingPayment') + .mockRejectedValueOnce(refundError) + + await paymentRoutes.refundPayment(ctx) + expect(ctx.status).toEqual(400) + expect(ctx.body).toEqual(refundError.message) + }) + }) }) function createPaymentContext(bodyOverrides?: Record) { @@ -416,3 +443,15 @@ function createGetPaymentsContext( query }) } + +function createRefundContext() { + return createContext({ + headers: { Accept: 'application/json' }, + method: 'POST', + url: '/refund', + body: { + incomingPaymentId: v4(), + posWalletAddress: faker.internet.url() + } + }) +} diff --git a/packages/point-of-sale/src/payments/routes.ts b/packages/point-of-sale/src/payments/routes.ts index da51e6d817..b72b340dfe 100644 --- a/packages/point-of-sale/src/payments/routes.ts +++ b/packages/point-of-sale/src/payments/routes.ts @@ -68,9 +68,23 @@ export type GetPaymentsContext = Exclude & { request: GetPaymentsRequest } +export interface RefundRequestBody { + incomingPaymentId: string + posWalletAddress: string +} + +export type RefundRequest = Exclude & { + body: RefundRequestBody +} + +export type RefundContext = Exclude & { + request: RefundRequest +} + export interface PaymentRoutes { getPayments(ctx: GetPaymentsContext): Promise payment(ctx: PaymentContext): Promise + refundPayment(ctx: RefundContext): Promise } export function createPaymentRoutes(deps_: ServiceDependencies): PaymentRoutes { @@ -85,7 +99,8 @@ export function createPaymentRoutes(deps_: ServiceDependencies): PaymentRoutes { return { payment: (ctx: PaymentContext) => payment(deps, ctx), - getPayments: (ctx: GetPaymentsContext) => getPayments(deps, ctx) + getPayments: (ctx: GetPaymentsContext) => getPayments(deps, ctx), + refundPayment: (ctx: RefundContext) => refundPayment(deps, ctx) } } @@ -184,6 +199,25 @@ async function payment( } } +async function refundPayment( + deps: ServiceDependencies, + ctx: RefundContext +): Promise { + const { incomingPaymentId, posWalletAddress } = ctx.request.body + try { + await deps.paymentService.refundIncomingPayment( + incomingPaymentId, + posWalletAddress + ) + ctx.status = 200 + return + } catch (err) { + ctx.status = 400 + ctx.body = (err as Error).message + return + } +} + async function waitForIncomingPaymentEvent( config: IAppConfig, deferred: Deferred diff --git a/packages/point-of-sale/src/payments/service.test.ts b/packages/point-of-sale/src/payments/service.test.ts index 2a5c08d545..5241557951 100644 --- a/packages/point-of-sale/src/payments/service.test.ts +++ b/packages/point-of-sale/src/payments/service.test.ts @@ -1,12 +1,15 @@ import { PaymentService, createPaymentService } from './service' import { ApolloClient, NormalizedCacheObject } from '@apollo/client' import { Logger } from 'pino' +import { CREATE_RECEIVER } from '../graphql/mutations/createReceiver' +import { CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT } from '../graphql/mutations/createOutgoingPaymentFromIncomingPayment' import { AmountInput, IncomingPaymentState } from '../graphql/generated/graphql' import { IAppConfig } from '../config/app' import { v4 as uuid, v4 } from 'uuid' import { AxiosInstance } from 'axios' import { faker } from '@faker-js/faker' import { GET_WALLET_ADDRESS_BY_URL } from '../graphql/queries/getWalletAddress' +import { GET_INCOMING_PAYMENT } from '../graphql/queries/getIncomingPayment' const mockLogger = { child: jest.fn().mockReturnThis(), @@ -270,3 +273,267 @@ describe('get payments', (): void => { }) }) }) + +describe('refundIncomingPayment', () => { + let service: PaymentService + + beforeAll(() => { + service = createPaymentService(deps) + }) + + beforeEach(() => { + jest.clearAllMocks() + }) + + const incomingPaymentId = uuid() + const incomingPaymentUrl = faker.internet.url() + '/' + incomingPaymentId + const incomingPaymentAmount = { + value: 100n, + assetCode: 'USD', + assetScale: 2 + } + const senderWalletAddress = faker.internet.url() + const walletAddress = faker.internet.url() + const walletAddressId = uuid() + const receiverId = faker.internet.url() + '/' + uuid() + const outgoingPaymentId = uuid() + + const mockWalletAddressResponse = { + data: { + walletAddressByUrl: { + id: walletAddressId + } + } + } + + const mockIncomingPaymentResponse = { + data: { + incomingPayment: { + id: incomingPaymentId, + url: incomingPaymentUrl, + senderWalletAddress, + incomingAmount: incomingPaymentAmount + } + } + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const generateMockReceiverResponse = (options: any) => ({ + data: { + createReceiver: { + receiver: { + id: receiverId, + metadata: options.variables.input.metadata, + incomingAmount: null + } + } + } + }) + + const mockOutgoingPaymentResponse = { + data: { + createOutgoingPaymentFromIncomingPayment: { + payment: { + id: outgoingPaymentId, + walletAddressId: walletAddressId + } + } + } + } + + function expectWalletAddressQuery( + mockApolloClient: ApolloClient + ) { + expect(mockApolloClient.query).toHaveBeenCalledWith({ + query: GET_WALLET_ADDRESS_BY_URL, + variables: { + url: walletAddress + } + }) + } + + function expectGetIncomingPaymentQuery( + mockApolloClient: ApolloClient + ) { + expect(mockApolloClient.query).toHaveBeenCalledWith({ + query: GET_INCOMING_PAYMENT, + variables: { + id: incomingPaymentId + } + }) + } + + function expectCreateReceiverMutation( + mockApolloClient: ApolloClient + ) { + expect(mockApolloClient.mutate).toHaveBeenCalledWith({ + mutation: CREATE_RECEIVER, + variables: { + input: { + walletAddressUrl: senderWalletAddress, + metadata: { + incomingPaymentToRefund: incomingPaymentUrl + } + } + } + }) + } + + function expectCreateOutoingPaymentMutation( + mockApolloClient: ApolloClient + ) { + expect(mockApolloClient.mutate).toHaveBeenCalledWith({ + mutation: CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT, + variables: { + input: { + walletAddressId, + incomingPayment: receiverId, + debitAmount: incomingPaymentAmount + } + } + }) + } + + test('can refund incoming payment', async (): Promise => { + mockApolloClient.query = jest.fn().mockImplementation((options) => { + if (options.query === GET_WALLET_ADDRESS_BY_URL) { + return mockWalletAddressResponse + } else if (options.query === GET_INCOMING_PAYMENT) { + return mockIncomingPaymentResponse + } + }) + + mockApolloClient.mutate = jest.fn().mockImplementation((options) => { + if (options.mutation === CREATE_RECEIVER) { + return generateMockReceiverResponse(options) + } else if ( + options.mutation === CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT + ) { + return mockOutgoingPaymentResponse + } + }) + + const outgoingPayment = await service.refundIncomingPayment( + incomingPaymentId, + walletAddress + ) + expect(outgoingPayment).toMatchObject({ + id: expect.any(String) + }) + + expectWalletAddressQuery(mockApolloClient) + expectGetIncomingPaymentQuery(mockApolloClient) + expectCreateReceiverMutation(mockApolloClient) + expectCreateOutoingPaymentMutation(mockApolloClient) + }) + + test('incoming payment refund fails with invalid wallet address', async (): Promise => { + mockApolloClient.query = jest.fn().mockResolvedValue(undefined) + + await expect( + service.refundIncomingPayment(incomingPaymentId, walletAddress) + ).rejects.toThrow('Failed to refund incoming payment') + + expectWalletAddressQuery(mockApolloClient) + expect(mockApolloClient.query).not.toHaveBeenCalledWith( + expect.objectContaining({ + query: GET_INCOMING_PAYMENT + }) + ) + expect(mockApolloClient.mutate).not.toHaveBeenCalledWith( + expect.objectContaining({ + mutation: CREATE_RECEIVER + }) + ) + expect(mockApolloClient.mutate).not.toHaveBeenCalledWith( + expect.objectContaining({ + mutation: CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT + }) + ) + }) + + test('incoming payment refund fails with invalid incoming payment', async (): Promise => { + mockApolloClient.query = jest.fn().mockImplementation((options) => { + if (options.query === GET_WALLET_ADDRESS_BY_URL) { + return mockWalletAddressResponse + } else if (options.query === GET_INCOMING_PAYMENT) { + return undefined + } + }) + + await expect( + service.refundIncomingPayment(incomingPaymentId, walletAddress) + ).rejects.toThrow('Failed to refund incoming payment') + + expectWalletAddressQuery(mockApolloClient) + expectGetIncomingPaymentQuery(mockApolloClient) + expect(mockApolloClient.mutate).not.toHaveBeenCalledWith( + expect.objectContaining({ + mutation: CREATE_RECEIVER + }) + ) + expect(mockApolloClient.mutate).not.toHaveBeenCalledWith( + expect.objectContaining({ + mutation: CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT + }) + ) + }) + + test('incoming payment refund fails with invalid receiver', async (): Promise => { + mockApolloClient.query = jest.fn().mockImplementation((options) => { + if (options.query === GET_WALLET_ADDRESS_BY_URL) { + return mockWalletAddressResponse + } else if (options.query === GET_INCOMING_PAYMENT) { + return mockIncomingPaymentResponse + } + }) + + mockApolloClient.mutate = jest.fn().mockImplementation((options) => { + if (options.mutation === CREATE_RECEIVER) { + return undefined + } + }) + + await expect( + service.refundIncomingPayment(incomingPaymentId, walletAddress) + ).rejects.toThrow('Failed to refund incoming payment') + + expectWalletAddressQuery(mockApolloClient) + expectGetIncomingPaymentQuery(mockApolloClient) + expectCreateReceiverMutation(mockApolloClient) + expect(mockApolloClient.mutate).not.toHaveBeenCalledWith( + expect.objectContaining({ + mutation: CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT + }) + ) + }) + + test('incoming payment refund fails with invalid outgoing payment', async (): Promise => { + mockApolloClient.query = jest.fn().mockImplementation((options) => { + if (options.query === GET_WALLET_ADDRESS_BY_URL) { + return mockWalletAddressResponse + } else if (options.query === GET_INCOMING_PAYMENT) { + return mockIncomingPaymentResponse + } + }) + + mockApolloClient.mutate = jest.fn().mockImplementation((options) => { + if (options.mutation === CREATE_RECEIVER) { + return generateMockReceiverResponse(options) + } else if ( + options.mutation === CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT + ) { + return undefined + } + }) + + await expect( + service.refundIncomingPayment(incomingPaymentId, walletAddress) + ).rejects.toThrow('Failed to refund incoming payment') + + expectWalletAddressQuery(mockApolloClient) + expectGetIncomingPaymentQuery(mockApolloClient) + expectCreateReceiverMutation(mockApolloClient) + expectCreateOutoingPaymentMutation(mockApolloClient) + }) +}) diff --git a/packages/point-of-sale/src/payments/service.ts b/packages/point-of-sale/src/payments/service.ts index e220f5bedb..b47942d426 100644 --- a/packages/point-of-sale/src/payments/service.ts +++ b/packages/point-of-sale/src/payments/service.ts @@ -2,19 +2,29 @@ import { Logger } from 'pino' import { CREATE_INCOMING_PAYMENT } from '../graphql/mutations/createIncomingPayment' import { IAppConfig } from '../config/app' import { ApolloClient, NormalizedCacheObject } from '@apollo/client' +import { AxiosInstance, AxiosRequestConfig } from 'axios' +import { v4 } from 'uuid' import { AmountInput, CreateIncomingPayment, + CreateOutgoingPaymentFromIncomingPayment, + CreateOutgoingPaymentFromIncomingPaymentVariables, + CreateReceiver, + CreateReceiverVariables, + GetIncomingPaymentSenderAndAmount, + GetIncomingPaymentSenderAndAmountVariables, MutationCreateIncomingPaymentArgs, + OutgoingPayment, Query, QueryWalletAddressByUrlArgs, GetWalletAddress, GetWalletAddressVariables } from '../graphql/generated/graphql' -import { v4 } from 'uuid' -import { AxiosInstance, AxiosRequestConfig } from 'axios' import { GET_WALLET_ADDRESS_BY_URL } from '../graphql/queries/getWalletAddress' import { GetPaymentsQuery } from './routes' +import { GET_INCOMING_PAYMENT } from '../graphql/queries/getIncomingPayment' +import { CREATE_RECEIVER } from '../graphql/mutations/createReceiver' +import { CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT } from '../graphql/mutations/createOutgoingPaymentFromIncomingPayment' type ServiceDependencies = { logger: Logger @@ -63,6 +73,10 @@ export type PaymentService = { ) => Promise getWalletAddress: (walletAddressUrl: string) => Promise getWalletAddressIdByUrl: (walletAddressUrl: string) => Promise + refundIncomingPayment: ( + incomingPaymentId: string, + posWalletAddress: string + ) => Promise> } export function createPaymentService( @@ -77,14 +91,18 @@ export function createPaymentService( } return { - getIncomingPayments: (options: GetPaymentsQuery) => - getIncomingPayments(deps, options), createIncomingPayment: (args: CreateIncomingPaymentArgs) => createIncomingPayment(deps, args), getWalletAddress: (walletAddressUrl: string) => getWalletAddress(deps, walletAddressUrl), getWalletAddressIdByUrl: (walletAddressUrl: string) => - getWalletAddressIdByUrl(deps, walletAddressUrl) + getWalletAddressIdByUrl(deps, walletAddressUrl), + getIncomingPayments: (options: GetPaymentsQuery) => + getIncomingPayments(deps, options), + refundIncomingPayment: ( + incomingPaymentId: string, + posWalletAddress: string + ) => refundIncomingPayment(deps, incomingPaymentId, posWalletAddress) } } @@ -149,6 +167,111 @@ async function createIncomingPayment( return incomingPayment } +async function refundIncomingPayment( + deps: ServiceDependencies, + incomingPaymentId: string, + posWalletAddress: string +): Promise> { + const client = deps.apolloClient + + const getWalletAddressRes = await client.query< + GetWalletAddress, + GetWalletAddressVariables + >({ + query: GET_WALLET_ADDRESS_BY_URL, + variables: { + url: posWalletAddress + } + }) + + const walletAddress = getWalletAddressRes?.data?.walletAddressByUrl + if (!walletAddress) { + deps.logger.error( + { incomingPaymentId, posWalletAddress }, + 'Failed to refund incoming payment' + ) + throw new Error('Failed to refund incoming payment') + } + + const getIncomingPaymentRes = await client.query< + GetIncomingPaymentSenderAndAmount, + GetIncomingPaymentSenderAndAmountVariables + >({ + query: GET_INCOMING_PAYMENT, + variables: { + id: incomingPaymentId + } + }) + + const incomingPayment = getIncomingPaymentRes?.data?.incomingPayment + if ( + !incomingPayment?.senderWalletAddress || + !incomingPayment.incomingAmount + ) { + deps.logger.error( + { incomingPaymentId, posWalletAddress }, + 'Failed to refund incoming payment' + ) + throw new Error('Failed to refund incoming payment') + } + + const createReceiverRes = await client.mutate< + CreateReceiver, + CreateReceiverVariables + >({ + mutation: CREATE_RECEIVER, + variables: { + input: { + walletAddressUrl: incomingPayment.senderWalletAddress, + metadata: { + incomingPaymentToRefund: incomingPayment.url + } + } + } + }) + + const receiverResponse = createReceiverRes?.data?.createReceiver + if (!receiverResponse?.receiver) { + deps.logger.error( + { posWalletAddress, incomingPaymentId }, + 'Failed to refund incoming payment' + ) + throw new Error('Failed to refund incoming payment') + } + + const createOutgoingPaymentRes = await client.mutate< + CreateOutgoingPaymentFromIncomingPayment, + CreateOutgoingPaymentFromIncomingPaymentVariables + >({ + mutation: CREATE_OUTGOING_PAYMENT_FROM_INCOMING_PAYMENT, + variables: { + input: { + walletAddressId: walletAddress.id, + incomingPayment: receiverResponse.receiver.id, + debitAmount: { + value: incomingPayment.incomingAmount.value, + assetCode: incomingPayment.incomingAmount.assetCode, + assetScale: incomingPayment.incomingAmount.assetScale + } + } + } + }) + + if ( + !createOutgoingPaymentRes?.data?.createOutgoingPaymentFromIncomingPayment + .payment + ) { + deps.logger.error( + { incomingPaymentId }, + 'Failed to refund incoming payment' + ) + throw new Error('Failed to refund incoming payment') + } + + return createOutgoingPaymentRes.data.createOutgoingPaymentFromIncomingPayment + .payment +} + async function getWalletAddress( deps: ServiceDependencies, walletAddressUrl: string diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13430a08c4..b4698461b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -557,7 +557,7 @@ importers: version: 8.2.0 '@apollo/client': specifier: ^3.11.8 - version: 3.11.8(graphql@16.11.0) + version: 3.11.8(@types/react@18.2.73)(graphql@16.11.0)(react-dom@18.2.0)(react@18.2.0) '@interledger/openapi': specifier: 2.0.2 version: 2.0.2 @@ -621,7 +621,7 @@ importers: version: 10.16.0 ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@20.14.15)(typescript@5.8.3) + version: 2.0.0(@swc/core@1.11.29)(@types/node@20.14.15)(typescript@5.8.3) packages/documentation: dependencies: @@ -806,7 +806,7 @@ importers: version: 8.2.0 '@apollo/client': specifier: ^3.11.8 - version: 3.11.8(graphql@16.11.0) + version: 3.11.8(@types/react@18.2.73)(graphql@16.11.0)(react-dom@18.2.0)(react@18.2.0) '@apollo/server': specifier: ^4.11.2 version: 4.11.2(graphql@16.11.0) @@ -821,7 +821,7 @@ importers: version: 12.0.2 axios: specifier: 1.12.0 - version: 1.12.0 + version: 1.12.0(debug@4.3.2) dotenv: specifier: ^16.4.7 version: 16.4.7 @@ -842,7 +842,7 @@ importers: version: 8.19.0 ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@20.14.15)(typescript@5.8.3) + version: 2.0.0(@swc/core@1.11.29)(@types/node@20.14.15)(typescript@5.8.3) uuid: specifier: ^9.0.1 version: 9.0.1 @@ -1121,43 +1121,6 @@ packages: transitivePeerDependencies: - '@types/react' - /@apollo/client@3.11.8(graphql@16.11.0): - resolution: {integrity: sha512-CgG1wbtMjsV2pRGe/eYITmV5B8lXUCYljB2gB/6jWTFQcrvirUVvKg7qtFdjYkQSFbIffU1IDyxgeaN81eTjbA==} - peerDependencies: - graphql: ^15.0.0 || ^16.0.0 - graphql-ws: ^5.5.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 - subscriptions-transport-ws: ^0.9.0 || ^0.11.0 - peerDependenciesMeta: - graphql-ws: - optional: true - react: - optional: true - react-dom: - optional: true - subscriptions-transport-ws: - optional: true - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - '@wry/caches': 1.0.1 - '@wry/equality': 0.5.6 - '@wry/trie': 0.5.0 - graphql: 16.11.0 - graphql-tag: 2.12.6(graphql@16.11.0) - hoist-non-react-statics: 3.3.2 - optimism: 0.18.0 - prop-types: 15.8.1 - rehackt: 0.1.0 - response-iterator: 0.2.6 - symbol-observable: 4.0.0 - ts-invariant: 0.10.3 - tslib: 2.8.1 - zen-observable-ts: 1.2.5 - transitivePeerDependencies: - - '@types/react' - dev: false - /@apollo/protobufjs@1.2.7: resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==} hasBin: true @@ -1572,7 +1535,7 @@ packages: '@babel/traverse': 7.26.7 '@babel/types': 7.27.0 convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.1 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4469,12 +4432,12 @@ packages: '@parcel/watcher': optional: true dependencies: - '@babel/generator': 7.26.5 - '@babel/template': 7.25.9 - '@babel/types': 7.26.7 + '@babel/generator': 7.27.5 + '@babel/template': 7.27.2 + '@babel/types': 7.27.3 '@graphql-codegen/client-preset': 4.6.2(graphql@16.11.0) '@graphql-codegen/core': 4.0.2(graphql@16.11.0) - '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.11.0) + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.11.0) '@graphql-tools/code-file-loader': 8.0.1(@babel/core@7.27.4)(graphql@16.11.0) '@graphql-tools/git-loader': 8.0.1(@babel/core@7.27.4)(graphql@16.11.0) @@ -4575,8 +4538,8 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 5.1.0(graphql@16.11.0) + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) + '@graphql-codegen/visitor-plugin-common': 5.6.1(graphql@16.11.0) graphql: 16.11.0 tslib: 2.6.2 transitivePeerDependencies: @@ -4693,27 +4656,6 @@ packages: - supports-color dev: true - /@graphql-codegen/visitor-plugin-common@5.1.0(graphql@16.11.0): - resolution: {integrity: sha512-eamQxtA9bjJqI2lU5eYoA1GbdMIRT2X8m8vhWYsVQVWD3qM7sx/IqJU0kx0J3Vd4/CSd36BzL6RKwksibytDIg==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.3(graphql@16.11.0) - '@graphql-tools/optimize': 2.0.0(graphql@16.11.0) - '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.11.0) - '@graphql-tools/utils': 10.1.3(graphql@16.11.0) - auto-bind: 4.0.0 - change-case-all: 1.0.15 - dependency-graph: 0.11.0 - graphql: 16.11.0 - graphql-tag: 2.12.6(graphql@16.11.0) - parse-filepath: 1.0.2 - tslib: 2.6.2 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - /@graphql-codegen/visitor-plugin-common@5.6.1(graphql@16.11.0): resolution: {integrity: sha512-q+DkGWWS7pvSc1c4Hw1xD0RI+EplTe2PCyTCT0WuaswnodBytteKTqFOVVGadISLX0xhO25aANTFB4+TLwTBSA==} engines: {node: '>=16'} @@ -5097,7 +5039,7 @@ packages: '@types/json-stable-stringify': 1.0.34 '@whatwg-node/fetch': 0.9.8 chalk: 4.1.2 - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) dotenv: 16.4.7 graphql: 16.11.0 graphql-request: 6.1.0(graphql@16.11.0) @@ -6159,7 +6101,7 @@ packages: resolution: {integrity: sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA==} engines: {node: '>= 12'} dependencies: - debug: 4.3.7 + debug: 4.4.1 http-errors: 2.0.0 koa-compose: 4.1.0 methods: 1.1.2 @@ -8602,7 +8544,15 @@ packages: /@types/pg-pool@2.0.4: resolution: {integrity: sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==} dependencies: - '@types/pg': 8.6.1 + '@types/pg': 8.15.4 + dev: false + + /@types/pg@8.15.4: + resolution: {integrity: sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg==} + dependencies: + '@types/node': 20.14.15 + pg-protocol: 1.6.0 + pg-types: 2.2.0 dev: false /@types/pg@8.6.1: @@ -9029,7 +8979,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 @@ -9458,7 +9408,6 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.14.1 - dev: false /acorn-walk@8.3.2: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} @@ -9473,7 +9422,6 @@ packages: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true - dev: false /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} @@ -9604,6 +9552,14 @@ packages: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true + /anymatch@3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -9658,7 +9614,7 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-array-buffer: 3.0.2 dev: true @@ -9666,7 +9622,7 @@ packages: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-array-buffer: 3.0.4 dev: true @@ -9761,7 +9717,7 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 get-intrinsic: 1.2.6 is-array-buffer: 3.0.2 @@ -9773,7 +9729,7 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.5 es-errors: 1.3.0 @@ -9986,11 +9942,6 @@ packages: postcss-value-parser: 4.2.0 dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - /available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -10002,15 +9953,6 @@ packages: engines: {node: '>=4'} dev: true - /axios@1.12.0: - resolution: {integrity: sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==} - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.4 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - /axios@1.12.0(debug@4.3.2): resolution: {integrity: sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==} dependencies: @@ -10521,7 +10463,7 @@ packages: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 @@ -11012,7 +10954,7 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.52.0 + mime-db: 1.54.0 /compression@1.7.4: resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} @@ -11734,17 +11676,6 @@ packages: optional: true dependencies: ms: 2.1.3 - - /debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 dev: true /debug@4.4.0(supports-color@7.2.0): @@ -11989,7 +11920,7 @@ packages: resolution: {integrity: sha512-h0Ow21gclbYsZ3mkHDfsYNDqtRhXS8fXr51bU0qr1dxgTMJj0XufbzX+jhNOvA8KuEEzn6JbvLVhXyv+fny9Uw==} engines: {node: '>= 8.0'} dependencies: - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) readable-stream: 3.6.0 split-ca: 1.0.1 ssh2: 1.11.0 @@ -12211,19 +12142,19 @@ packages: dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.1 - available-typed-arrays: 1.0.5 - call-bind: 1.0.7 - es-set-tostringtag: 2.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + es-set-tostringtag: 2.1.0 es-to-primitive: 1.2.1 function.prototype.name: 1.1.5 get-intrinsic: 1.2.4 get-symbol-description: 1.0.0 globalthis: 1.0.3 - gopd: 1.0.1 + gopd: 1.2.0 has: 1.0.3 has-property-descriptors: 1.0.2 has-proto: 1.0.3 - has-symbols: 1.0.3 + has-symbols: 1.1.0 internal-slot: 1.0.5 is-array-buffer: 3.0.2 is-callable: 1.2.7 @@ -12231,7 +12162,7 @@ packages: is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.10 + is-typed-array: 1.1.13 is-weakref: 1.0.2 object-inspect: 1.13.1 object-keys: 1.1.1 @@ -12242,12 +12173,12 @@ packages: string.prototype.trim: 1.2.7 string.prototype.trimend: 1.0.6 string.prototype.trimstart: 1.0.6 - typed-array-buffer: 1.0.0 + typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.16 dev: true /es-abstract@1.22.5: @@ -12258,7 +12189,7 @@ packages: arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.7 call-bind: 1.0.7 - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 @@ -12266,10 +12197,10 @@ packages: get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 globalthis: 1.0.3 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 has-proto: 1.0.3 - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasown: 2.0.2 internal-slot: 1.0.7 is-array-buffer: 3.0.4 @@ -12374,7 +12305,7 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.6 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 get-intrinsic: 1.2.6 globalthis: 1.0.4 @@ -13475,15 +13406,6 @@ packages: engines: {node: '>=8'} dev: false - /follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - /follow-redirects@1.15.9(debug@4.3.2): resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -13624,7 +13546,7 @@ packages: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.1 functions-have-names: 1.2.3 @@ -13634,7 +13556,7 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.5 functions-have-names: 1.2.3 @@ -13688,7 +13610,7 @@ packages: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasown: 2.0.2 /get-intrinsic@1.2.6: @@ -13736,7 +13658,7 @@ packages: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 get-intrinsic: 1.2.6 dev: true @@ -13744,7 +13666,7 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 get-intrinsic: 1.2.4 dev: true @@ -14869,6 +14791,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -14918,7 +14841,7 @@ packages: dependencies: get-intrinsic: 1.2.6 has: 1.0.3 - side-channel: 1.0.5 + side-channel: 1.1.0 dev: true /internal-slot@1.0.7: @@ -14927,7 +14850,7 @@ packages: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.5 + side-channel: 1.1.0 dev: true /internal-slot@1.1.0: @@ -15024,17 +14947,17 @@ packages: /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 get-intrinsic: 1.2.6 - is-typed-array: 1.1.10 + is-typed-array: 1.1.13 dev: true /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + get-intrinsic: 1.2.6 dev: true /is-arrayish@0.2.1: @@ -15077,7 +15000,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-tostringtag: 1.0.2 dev: true @@ -15310,14 +15233,14 @@ packages: /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 dev: true /is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 dev: true /is-stream@2.0.1: @@ -15364,22 +15287,11 @@ packages: isstream: 0.1.2 dev: false - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true - /is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.14 + which-typed-array: 1.1.16 /is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} @@ -15413,7 +15325,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 dev: true /is-weakref@1.1.0: @@ -15743,7 +15655,7 @@ packages: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.5 '@types/node': 20.14.15 - anymatch: 3.1.3 + anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.11 jest-regex-util: 29.6.3 @@ -17470,8 +17382,8 @@ packages: /micromark-extension-mdxjs@1.0.0: resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) micromark-extension-mdx-expression: 1.0.3 micromark-extension-mdx-jsx: 1.0.3 micromark-extension-mdx-md: 1.0.0 @@ -17881,7 +17793,6 @@ packages: /mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} - dev: false /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} @@ -18410,7 +18321,6 @@ packages: /object-inspect@1.13.3: resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} - dev: true /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -18421,7 +18331,7 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -18433,7 +18343,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - has-symbols: 1.0.3 + has-symbols: 1.1.0 object-keys: 1.1.1 dev: true @@ -18665,7 +18575,7 @@ packages: dependencies: '@types/request': 2.48.8 '@types/superagent': 4.1.15 - axios: 1.12.0 + axios: 1.12.0(debug@4.3.2) combos: 0.2.0 fs-extra: 9.1.0 js-yaml: 4.1.0 @@ -19627,7 +19537,7 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -19799,7 +19709,7 @@ packages: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} dependencies: - resolve: 1.22.8 + resolve: 1.22.6 /recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -19905,7 +19815,7 @@ packages: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 functions-have-names: 1.2.3 dev: true @@ -19914,7 +19824,7 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.1 @@ -19958,18 +19868,6 @@ packages: jsesc: 3.0.2 dev: true - /rehackt@0.1.0: - resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} - peerDependencies: - '@types/react': '*' - react: '*' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - dev: false - /rehackt@0.1.0(@types/react@18.2.73)(react@18.2.0): resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} peerDependencies: @@ -20343,6 +20241,14 @@ packages: engines: {node: '>=10'} dev: true + /resolve@1.22.6: + resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -20429,6 +20335,7 @@ packages: /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -20534,7 +20441,7 @@ packages: resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 get-intrinsic: 1.2.6 has-symbols: 1.0.3 isarray: 2.0.5 @@ -20544,9 +20451,9 @@ packages: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + call-bind: 1.0.8 + get-intrinsic: 1.2.6 + has-symbols: 1.1.0 isarray: 2.0.5 dev: true @@ -20574,7 +20481,7 @@ packages: /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 get-intrinsic: 1.2.6 is-regex: 1.1.4 dev: true @@ -20762,8 +20669,8 @@ packages: 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 + get-intrinsic: 1.2.6 + gopd: 1.2.0 has-property-descriptors: 1.0.2 /set-function-length@1.2.2: @@ -20925,7 +20832,6 @@ packages: dependencies: es-errors: 1.3.0 object-inspect: 1.13.3 - dev: true /side-channel-map@1.0.1: resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} @@ -20935,7 +20841,6 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.6 object-inspect: 1.13.3 - dev: true /side-channel-weakmap@1.0.2: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} @@ -20946,7 +20851,6 @@ packages: get-intrinsic: 1.2.6 object-inspect: 1.13.3 side-channel-map: 1.0.1 - dev: true /side-channel@1.0.5: resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} @@ -20956,15 +20860,7 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + dev: false /side-channel@1.1.0: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} @@ -20975,7 +20871,6 @@ packages: side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -21418,7 +21313,7 @@ packages: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.1 dev: true @@ -21427,7 +21322,7 @@ packages: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.5 dev: true @@ -21435,7 +21330,7 @@ packages: /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.1 dev: true @@ -21443,7 +21338,7 @@ packages: /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.5 dev: true @@ -21461,7 +21356,7 @@ packages: /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.1 dev: true @@ -21469,7 +21364,7 @@ packages: /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.22.5 dev: true @@ -21805,7 +21700,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 + acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -22084,33 +21979,6 @@ packages: - '@swc/wasm' - '@types/node' - /ts-node-dev@2.0.0(@types/node@20.14.15)(typescript@5.8.3): - resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} - engines: {node: '>=0.8.0'} - hasBin: true - peerDependencies: - node-notifier: '*' - typescript: '*' - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - chokidar: 3.6.0 - dynamic-dedupe: 0.3.0 - minimist: 1.2.8 - mkdirp: 1.0.4 - resolve: 1.22.8 - rimraf: 2.7.1 - source-map-support: 0.5.21 - tree-kill: 1.2.2 - ts-node: 10.9.2(@types/node@20.14.15)(typescript@5.8.3) - tsconfig: 7.0.0 - typescript: 5.8.3 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - /ts-node@10.9.2(@swc/core@1.11.29)(@types/node@20.14.15)(typescript@5.8.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -22132,37 +22000,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.14.15 - acorn: 8.14.0 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.8.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - /ts-node@10.9.2(@types/node@20.14.15)(typescript@5.8.3): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - 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 - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.15 - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 @@ -22289,20 +22127,11 @@ packages: mime-types: 3.0.1 dev: false - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.6 - is-typed-array: 1.1.10 - dev: true - /typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-typed-array: 1.1.13 dev: true @@ -22320,19 +22149,19 @@ packages: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 has-proto: 1.0.3 - is-typed-array: 1.1.10 + is-typed-array: 1.1.13 dev: true /typed-array-byte-length@1.0.1: resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-proto: 1.0.3 is-typed-array: 1.1.13 dev: true @@ -22341,11 +22170,11 @@ packages: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.7 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 has-proto: 1.0.3 - is-typed-array: 1.1.10 + is-typed-array: 1.1.13 dev: true /typed-array-byte-offset@1.0.2: @@ -22353,9 +22182,9 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-proto: 1.0.3 is-typed-array: 1.1.13 dev: true @@ -22376,18 +22205,18 @@ packages: /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - is-typed-array: 1.1.10 + is-typed-array: 1.1.13 dev: true /typed-array-length@1.0.5: resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 @@ -22444,9 +22273,9 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-bigints: 1.0.2 - has-symbols: 1.0.3 + has-symbols: 1.1.0 which-boxed-primitive: 1.0.2 dev: true @@ -23051,7 +22880,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.1 es-module-lexer: 1.6.0 pathe: 1.1.2 vite: 6.2.5(@types/node@18.11.9)(yaml@2.7.0) @@ -23076,7 +22905,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.1 es-module-lexer: 1.6.0 pathe: 1.1.2 vite: 6.2.5(@types/node@20.12.7)(yaml@2.7.0) @@ -23568,26 +23397,16 @@ packages: engines: {node: '>=4'} dev: false - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true - /which-typed-array@1.1.14: resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-tostringtag: 1.0.2 + dev: true /which-typed-array@1.1.16: resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==}