diff --git a/apps/web/package.json b/apps/web/package.json index ae6666d36..0ae2fa71f 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -54,9 +54,9 @@ "@makerkit/data-loader-supabase-nextjs": "^1.2.3", "@marsidev/react-turnstile": "^0.7.1", "@radix-ui/react-icons": "^1.3.0", - "@supabase/supabase-js": "^2.43.4", - "@tanstack/react-query": "5.45.0", - "@tanstack/react-query-next-experimental": "^5.45.0", + "@supabase/supabase-js": "^2.43.5", + "@tanstack/react-query": "5.45.1", + "@tanstack/react-query-next-experimental": "^5.45.1", "@tanstack/react-table": "^8.17.3", "date-fns": "^3.6.0", "lucide-react": "^0.395.0", @@ -65,7 +65,7 @@ "next-themes": "0.3.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-hook-form": "^7.51.5", + "react-hook-form": "^7.52.0", "react-i18next": "^14.1.2", "recharts": "^2.12.7", "sonner": "^1.5.0", diff --git a/package.json b/package.json index 5bafd8ed4..d72dc559f 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@manypkg/cli": "^0.21.4", "@turbo/gen": "^2.0.4", "cross-env": "^7.0.3", - "pnpm": "^9.3.0", + "pnpm": "^9.4.0", "prettier": "^3.3.2", "turbo": "2.0.4", "typescript": "^5.4.5", diff --git a/packages/billing/core/src/create-billing-schema.ts b/packages/billing/core/src/create-billing-schema.ts index 159f4616e..ce4f9c875 100644 --- a/packages/billing/core/src/create-billing-schema.ts +++ b/packages/billing/core/src/create-billing-schema.ts @@ -173,7 +173,12 @@ export const PlanSchema = z ) .refine( (item) => { - const ids = item.lineItems.map((item) => item.id); + // metered line items can be shared across plans + const lineItems = item.lineItems.filter( + (item) => item.type !== LineItemType.Metered, + ); + + const ids = lineItems.map((item) => item.id); return ids.length === new Set(ids).size; }, diff --git a/packages/billing/core/src/services/billing-strategy-provider.service.ts b/packages/billing/core/src/services/billing-strategy-provider.service.ts index a56c29a96..1529a174a 100644 --- a/packages/billing/core/src/services/billing-strategy-provider.service.ts +++ b/packages/billing/core/src/services/billing-strategy-provider.service.ts @@ -9,6 +9,7 @@ import { RetrieveCheckoutSessionSchema, UpdateSubscriptionParamsSchema, } from '../schema'; +import { UpsertSubscriptionParams } from '../types'; export abstract class BillingStrategyProviderService { abstract createBillingPortalSession( @@ -65,4 +66,12 @@ export abstract class BillingStrategyProviderService { interval: string; amount: number; }>; + + abstract getSubscription( + subscriptionId: string, + ): Promise; } diff --git a/packages/billing/core/src/services/billing-webhook-handler.service.ts b/packages/billing/core/src/services/billing-webhook-handler.service.ts index 7a3ec3172..60ffc0ea1 100644 --- a/packages/billing/core/src/services/billing-webhook-handler.service.ts +++ b/packages/billing/core/src/services/billing-webhook-handler.service.ts @@ -43,7 +43,7 @@ export abstract class BillingWebhookHandlerService { onPaymentFailed: (sessionId: string) => Promise; // generic handler for any event - onEvent?: (data: Data) => Promise; + onEvent?: (data: unknown) => Promise; }, ): Promise; } diff --git a/packages/billing/core/src/types/index.ts b/packages/billing/core/src/types/index.ts index cb67f1a80..f62f12819 100644 --- a/packages/billing/core/src/types/index.ts +++ b/packages/billing/core/src/types/index.ts @@ -1,7 +1,22 @@ import { Database } from '@kit/supabase/database'; export type UpsertSubscriptionParams = - Database['public']['Functions']['upsert_subscription']['Args']; + Database['public']['Functions']['upsert_subscription']['Args'] & { + line_items: Array; + }; + +interface LineItem { + id: string; + quantity: number; + subscription_id: string; + subscription_item_id: string; + product_id: string; + variant_id: string; + price_amount: number | null | undefined; + interval: string; + interval_count: number; + type: 'flat' | 'metered' | 'per_seat' | undefined; +} export type UpsertOrderParams = Database['public']['Functions']['upsert_order']['Args']; \ No newline at end of file diff --git a/packages/billing/gateway/package.json b/packages/billing/gateway/package.json index 577464493..57f73631f 100644 --- a/packages/billing/gateway/package.json +++ b/packages/billing/gateway/package.json @@ -27,13 +27,13 @@ "@kit/tailwind-config": "workspace:*", "@kit/tsconfig": "workspace:*", "@kit/ui": "workspace:^", - "@supabase/supabase-js": "^2.43.4", + "@supabase/supabase-js": "^2.43.5", "@types/react": "^18.3.3", "date-fns": "^3.6.0", "lucide-react": "^0.395.0", "next": "14.2.4", "react": "18.3.1", - "react-hook-form": "^7.51.5", + "react-hook-form": "^7.52.0", "react-i18next": "^14.1.2", "zod": "^3.23.8" }, diff --git a/packages/billing/gateway/src/server/services/billing-event-handler/billing-event-handler.service.ts b/packages/billing/gateway/src/server/services/billing-event-handler/billing-event-handler.service.ts index 4e4a99aaa..7da20387e 100644 --- a/packages/billing/gateway/src/server/services/billing-event-handler/billing-event-handler.service.ts +++ b/packages/billing/gateway/src/server/services/billing-event-handler/billing-event-handler.service.ts @@ -26,7 +26,7 @@ interface CustomHandlersParams { ) => Promise; onPaymentSucceeded: (sessionId: string) => Promise; onPaymentFailed: (sessionId: string) => Promise; - onEvent?: (data: Data) => Promise; + onEvent(event: unknown): Promise; } /** diff --git a/packages/billing/gateway/src/server/services/billing-gateway/billing-gateway.service.ts b/packages/billing/gateway/src/server/services/billing-gateway/billing-gateway.service.ts index b02e1c041..8662f3b37 100644 --- a/packages/billing/gateway/src/server/services/billing-gateway/billing-gateway.service.ts +++ b/packages/billing/gateway/src/server/services/billing-gateway/billing-gateway.service.ts @@ -127,7 +127,17 @@ class BillingGatewayService { return strategy.updateSubscriptionItem(payload); } - getStrategy() { + /** + * Retrieves a subscription from the provider. + * @param subscriptionId + */ + async getSubscription(subscriptionId: string) { + const strategy = await this.getStrategy(); + + return strategy.getSubscription(subscriptionId); + } + + private getStrategy() { return BillingGatewayFactoryService.GetProviderStrategy(this.provider); } } diff --git a/packages/billing/lemon-squeezy/src/services/lemon-squeezy-billing-strategy.service.ts b/packages/billing/lemon-squeezy/src/services/lemon-squeezy-billing-strategy.service.ts index 8db513deb..ac55fb253 100644 --- a/packages/billing/lemon-squeezy/src/services/lemon-squeezy-billing-strategy.service.ts +++ b/packages/billing/lemon-squeezy/src/services/lemon-squeezy-billing-strategy.service.ts @@ -4,6 +4,7 @@ import { cancelSubscription, createUsageRecord, getCheckout, + getSubscription, getVariant, listUsageRecords, updateSubscriptionItem, @@ -24,6 +25,7 @@ import { getLogger } from '@kit/shared/logger'; import { createLemonSqueezyBillingPortalSession } from './create-lemon-squeezy-billing-portal-session'; import { createLemonSqueezyCheckout } from './create-lemon-squeezy-checkout'; +import { createLemonSqueezySubscriptionPayloadBuilderService } from './lemon-squeezy-subscription-payload-builder.service'; export class LemonSqueezyBillingStrategyService implements BillingStrategyProviderService @@ -340,6 +342,91 @@ export class LemonSqueezyBillingStrategyService return { success: true }; } + async getSubscription(subscriptionId: string) { + const logger = await getLogger(); + + const ctx = { + name: this.namespace, + subscriptionId, + }; + + logger.info(ctx, 'Retrieving subscription...'); + + const { error, data } = await getSubscription(subscriptionId); + + if (error) { + logger.error( + { + ...ctx, + error, + }, + 'Failed to retrieve subscription', + ); + + throw new Error('Failed to retrieve subscription'); + } + + if (!data) { + logger.error( + { + ...ctx, + }, + 'Subscription not found', + ); + + throw new Error('Subscription not found'); + } + + logger.info(ctx, 'Subscription retrieved successfully'); + + const payloadBuilderService = + createLemonSqueezySubscriptionPayloadBuilderService(); + + const subscription = data.data.attributes; + const customerId = subscription.customer_id.toString(); + const status = subscription.status; + const variantId = subscription.variant_id; + const productId = subscription.product_id; + const createdAt = subscription.created_at; + const endsAt = subscription.ends_at; + const renewsAt = subscription.renews_at; + const trialEndsAt = subscription.trial_ends_at; + const intervalCount = subscription.billing_anchor; + const interval = intervalCount === 1 ? 'month' : 'year'; + + const subscriptionItemId = + data.data.attributes.first_subscription_item?.id.toString() as string; + + const lineItems = [ + { + id: subscriptionItemId.toString(), + product: productId.toString(), + variant: variantId.toString(), + quantity: subscription.first_subscription_item?.quantity ?? 1, + // not anywhere in the API + priceAmount: 0, + }, + ]; + + return payloadBuilderService.build({ + customerId, + id: subscriptionId, + // not in the API + accountId: '', + lineItems, + status, + interval, + intervalCount, + // not in the API + currency: '', + periodStartsAt: new Date(createdAt).getTime(), + periodEndsAt: new Date(renewsAt ?? endsAt).getTime(), + cancelAtPeriodEnd: subscription.cancelled, + trialStartsAt: trialEndsAt ? new Date(createdAt).getTime() : null, + trialEndsAt: trialEndsAt ? new Date(trialEndsAt).getTime() : null, + }); + } + /** * @name queryUsage * @description Queries the usage of the metered billing diff --git a/packages/billing/lemon-squeezy/src/services/lemon-squeezy-subscription-payload-builder.service.ts b/packages/billing/lemon-squeezy/src/services/lemon-squeezy-subscription-payload-builder.service.ts new file mode 100644 index 000000000..cf10823f1 --- /dev/null +++ b/packages/billing/lemon-squeezy/src/services/lemon-squeezy-subscription-payload-builder.service.ts @@ -0,0 +1,141 @@ +import { BillingConfig, getLineItemTypeById } from '@kit/billing'; +import { UpsertSubscriptionParams } from '@kit/billing/types'; + +type SubscriptionStatus = + | 'on_trial' + | 'active' + | 'cancelled' + | 'paused' + | 'expired' + | 'unpaid' + | 'past_due'; + +/** + * @name createLemonSqueezySubscriptionPayloadBuilderService + * @description Create a new instance of the `LemonSqueezySubscriptionPayloadBuilderService` class + */ +export function createLemonSqueezySubscriptionPayloadBuilderService() { + return new LemonSqueezySubscriptionPayloadBuilderService(); +} + +/** + * @name LemonSqueezySubscriptionPayloadBuilderService + * @description This class is used to build the subscription payload for Lemon Squeezy + */ +class LemonSqueezySubscriptionPayloadBuilderService { + private config?: BillingConfig; + + /** + * @name withBillingConfig + * @description Set the billing config for the subscription payload + * @param config + */ + withBillingConfig(config: BillingConfig) { + this.config = config; + + return this; + } + + /** + * @name build + * @description Build the subscription payload for Lemon Squeezy + * @param params + */ + build< + LineItem extends { + id: string; + quantity: number; + product: string; + variant: string; + priceAmount: number; + }, + >(params: { + id: string; + accountId: string; + customerId: string; + lineItems: LineItem[]; + interval: string; + intervalCount: number; + status: string; + currency: string; + cancelAtPeriodEnd: boolean; + periodStartsAt: number; + periodEndsAt: number; + trialStartsAt: number | null; + trialEndsAt: number | null; + }): UpsertSubscriptionParams { + const canceledAtPeriodEnd = + params.status === 'cancelled' && params.cancelAtPeriodEnd; + + const active = + params.status === 'active' || + params.status === 'trialing' || + canceledAtPeriodEnd; + + const lineItems = params.lineItems.map((item) => { + const quantity = item.quantity ?? 1; + + return { + id: item.id, + subscription_item_id: item.id, + quantity, + interval: params.interval, + interval_count: params.intervalCount, + subscription_id: params.id, + product_id: item.product, + variant_id: item.variant, + price_amount: item.priceAmount, + type: this.config + ? getLineItemTypeById(this.config, item.variant) + : undefined, + }; + }); + + // otherwise we are updating a subscription + // and we only need to return the update payload + return { + target_subscription_id: params.id, + target_account_id: params.accountId, + target_customer_id: params.customerId, + billing_provider: 'lemon-squeezy', + status: this.getSubscriptionStatus(params.status as SubscriptionStatus), + line_items: lineItems, + active, + currency: params.currency, + cancel_at_period_end: params.cancelAtPeriodEnd ?? false, + period_starts_at: getISOString(params.periodStartsAt) as string, + period_ends_at: getISOString(params.periodEndsAt) as string, + trial_starts_at: params.trialStartsAt + ? getISOString(params.trialStartsAt) + : undefined, + trial_ends_at: params.trialEndsAt + ? getISOString(params.trialEndsAt) + : undefined, + }; + } + + private getSubscriptionStatus(status: SubscriptionStatus) { + switch (status) { + case 'active': + return 'active'; + case 'cancelled': + return 'canceled'; + case 'paused': + return 'paused'; + case 'on_trial': + return 'trialing'; + case 'past_due': + return 'past_due'; + case 'unpaid': + return 'unpaid'; + case 'expired': + return 'past_due'; + default: + return 'active'; + } + } +} + +function getISOString(date: number | null) { + return date ? new Date(date).toISOString() : undefined; +} diff --git a/packages/billing/lemon-squeezy/src/services/lemon-squeezy-webhook-handler.service.ts b/packages/billing/lemon-squeezy/src/services/lemon-squeezy-webhook-handler.service.ts index 472768109..5989a8740 100644 --- a/packages/billing/lemon-squeezy/src/services/lemon-squeezy-webhook-handler.service.ts +++ b/packages/billing/lemon-squeezy/src/services/lemon-squeezy-webhook-handler.service.ts @@ -1,10 +1,6 @@ import { getOrder, getVariant } from '@lemonsqueezy/lemonsqueezy.js'; -import { - BillingConfig, - BillingWebhookHandlerService, - getLineItemTypeById, -} from '@kit/billing'; +import { BillingConfig, BillingWebhookHandlerService } from '@kit/billing'; import { getLogger } from '@kit/shared/logger'; import { Database } from '@kit/supabase/database'; @@ -12,24 +8,31 @@ import { getLemonSqueezyEnv } from '../schema/lemon-squeezy-server-env.schema'; import { OrderWebhook } from '../types/order-webhook'; import { SubscriptionWebhook } from '../types/subscription-webhook'; import { initializeLemonSqueezyClient } from './lemon-squeezy-sdk'; +import { createLemonSqueezySubscriptionPayloadBuilderService } from './lemon-squeezy-subscription-payload-builder.service'; import { createHmac } from './verify-hmac'; type UpsertSubscriptionParams = - Database['public']['Functions']['upsert_subscription']['Args']; + Database['public']['Functions']['upsert_subscription']['Args'] & { + line_items: Array; + }; type UpsertOrderParams = Database['public']['Functions']['upsert_order']['Args']; -type OrderStatus = 'pending' | 'failed' | 'paid' | 'refunded'; +interface LineItem { + id: string; + quantity: number; + subscription_id: string; + subscription_item_id: string; + product_id: string; + variant_id: string; + price_amount: number | null | undefined; + interval: string; + interval_count: number; + type: 'flat' | 'metered' | 'per_seat' | undefined; +} -type SubscriptionStatus = - | 'on_trial' - | 'active' - | 'cancelled' - | 'paused' - | 'expired' - | 'unpaid' - | 'past_due'; +type OrderStatus = 'pending' | 'failed' | 'paid' | 'refunded'; export class LemonSqueezyWebhookHandlerService implements BillingWebhookHandlerService @@ -252,7 +255,10 @@ export class LemonSqueezyWebhookHandlerService const interval = intervalCount === 1 ? 'month' : 'year'; - const payload = this.buildSubscriptionPayload({ + const payloadBuilderService = + createLemonSqueezySubscriptionPayloadBuilderService(); + + const payload = payloadBuilderService.withBillingConfig(this.config).build({ customerId, id: subscriptionId, accountId, @@ -292,76 +298,6 @@ export class LemonSqueezyWebhookHandlerService return onSubscriptionDeletedCallback(subscription.data.id); } - private buildSubscriptionPayload< - LineItem extends { - id: string; - quantity: number; - product: string; - variant: string; - priceAmount: number; - }, - >(params: { - id: string; - accountId: string; - customerId: string; - lineItems: LineItem[]; - interval: string; - intervalCount: number; - status: string; - currency: string; - cancelAtPeriodEnd: boolean; - periodStartsAt: number; - periodEndsAt: number; - trialStartsAt: number | null; - trialEndsAt: number | null; - }): UpsertSubscriptionParams { - const canceledAtPeriodEnd = - params.status === 'cancelled' && params.cancelAtPeriodEnd; - - const active = - params.status === 'active' || - params.status === 'trialing' || - canceledAtPeriodEnd; - - const lineItems = params.lineItems.map((item) => { - const quantity = item.quantity ?? 1; - - return { - id: item.id, - quantity, - interval: params.interval, - interval_count: params.intervalCount, - subscription_id: params.id, - product_id: item.product, - variant_id: item.variant, - price_amount: item.priceAmount, - type: getLineItemTypeById(this.config, item.variant), - }; - }); - - // otherwise we are updating a subscription - // and we only need to return the update payload - return { - target_subscription_id: params.id, - target_account_id: params.accountId, - target_customer_id: params.customerId, - billing_provider: this.provider, - status: this.getSubscriptionStatus(params.status as SubscriptionStatus), - line_items: lineItems, - active, - currency: params.currency, - cancel_at_period_end: params.cancelAtPeriodEnd ?? false, - period_starts_at: getISOString(params.periodStartsAt) as string, - period_ends_at: getISOString(params.periodEndsAt) as string, - trial_starts_at: params.trialStartsAt - ? getISOString(params.trialStartsAt) - : undefined, - trial_ends_at: params.trialEndsAt - ? getISOString(params.trialEndsAt) - : undefined, - }; - } - private getOrderStatus(status: OrderStatus) { switch (status) { case 'paid': @@ -376,31 +312,6 @@ export class LemonSqueezyWebhookHandlerService return 'pending'; } } - - private getSubscriptionStatus(status: SubscriptionStatus) { - switch (status) { - case 'active': - return 'active'; - case 'cancelled': - return 'canceled'; - case 'paused': - return 'paused'; - case 'on_trial': - return 'trialing'; - case 'past_due': - return 'past_due'; - case 'unpaid': - return 'unpaid'; - case 'expired': - return 'past_due'; - default: - return 'active'; - } - } -} - -function getISOString(date: number | null) { - return date ? new Date(date).toISOString() : undefined; } async function isSigningSecretValid(rawBody: string, signatureHeader: string) { diff --git a/packages/billing/stripe/package.json b/packages/billing/stripe/package.json index c23017018..ebbe1f4fa 100644 --- a/packages/billing/stripe/package.json +++ b/packages/billing/stripe/package.json @@ -17,7 +17,7 @@ "dependencies": { "@stripe/react-stripe-js": "^2.7.1", "@stripe/stripe-js": "^3.5.0", - "stripe": "^15.11.0" + "stripe": "^15.12.0" }, "devDependencies": { "@kit/billing": "workspace:^", diff --git a/packages/billing/stripe/src/services/stripe-billing-strategy.service.ts b/packages/billing/stripe/src/services/stripe-billing-strategy.service.ts index 7fb8781be..582a1f4bc 100644 --- a/packages/billing/stripe/src/services/stripe-billing-strategy.service.ts +++ b/packages/billing/stripe/src/services/stripe-billing-strategy.service.ts @@ -18,6 +18,7 @@ import { getLogger } from '@kit/shared/logger'; import { createStripeBillingPortalSession } from './create-stripe-billing-portal-session'; import { createStripeCheckout } from './create-stripe-checkout'; import { createStripeClient } from './stripe-sdk'; +import { createStripeSubscriptionPayloadBuilderService } from './stripe-subscription-payload-builder.service'; /** * @name StripeBillingStrategyService @@ -357,6 +358,50 @@ export class StripeBillingStrategyService } } + async getSubscription(subscriptionId: string) { + const stripe = await this.stripeProvider(); + const logger = await getLogger(); + + const ctx = { + name: this.namespace, + subscriptionId, + }; + + logger.info(ctx, 'Retrieving subscription...'); + + const subscriptionPayloadBuilder = + createStripeSubscriptionPayloadBuilderService(); + + try { + const subscription = await stripe.subscriptions.retrieve(subscriptionId, { + expand: ['line_items'], + }); + + logger.info(ctx, 'Subscription retrieved successfully'); + + const customer = subscription.customer as string; + const accountId = subscription.metadata?.accountId as string; + + return subscriptionPayloadBuilder.build({ + customerId: customer, + accountId, + id: subscription.id, + lineItems: subscription.items.data, + status: subscription.status, + currency: subscription.currency, + cancelAtPeriodEnd: subscription.cancel_at_period_end, + periodStartsAt: subscription.current_period_start, + periodEndsAt: subscription.current_period_end, + trialStartsAt: subscription.trial_start, + trialEndsAt: subscription.trial_end, + }); + } catch (error) { + logger.error({ ...ctx, error }, 'Failed to retrieve subscription'); + + throw new Error('Failed to retrieve subscription'); + } + } + private async stripeProvider(): Promise { return createStripeClient(); } diff --git a/packages/billing/stripe/src/services/stripe-subscription-payload-builder.service.ts b/packages/billing/stripe/src/services/stripe-subscription-payload-builder.service.ts new file mode 100644 index 000000000..5d68789cc --- /dev/null +++ b/packages/billing/stripe/src/services/stripe-subscription-payload-builder.service.ts @@ -0,0 +1,100 @@ +import Stripe from 'stripe'; + +import { BillingConfig, getLineItemTypeById } from '@kit/billing'; +import { UpsertSubscriptionParams } from '@kit/billing/types'; + +/** + * @name createStripeSubscriptionPayloadBuilderService + * @description Create a new instance of the `StripeSubscriptionPayloadBuilderService` class + */ +export function createStripeSubscriptionPayloadBuilderService() { + return new StripeSubscriptionPayloadBuilderService(); +} + +/** + * @name StripeSubscriptionPayloadBuilderService + * @description This class is used to build the subscription payload for Stripe + */ +class StripeSubscriptionPayloadBuilderService { + private config?: BillingConfig; + + /** + * @name withBillingConfig + * @description Set the billing config for the subscription payload + * @param config + */ + withBillingConfig(config: BillingConfig) { + this.config = config; + + return this; + } + + /** + * @name build + * @description Build the subscription payload for Stripe + * @param params + */ + build< + LineItem extends { + id: string; + quantity?: number; + price?: Stripe.Price; + }, + >(params: { + id: string; + accountId: string; + customerId: string; + lineItems: LineItem[]; + status: Stripe.Subscription.Status; + currency: string; + cancelAtPeriodEnd: boolean; + periodStartsAt: number; + periodEndsAt: number; + trialStartsAt: number | null; + trialEndsAt: number | null; + }): UpsertSubscriptionParams { + const active = params.status === 'active' || params.status === 'trialing'; + + const lineItems = params.lineItems.map((item) => { + const quantity = item.quantity ?? 1; + const variantId = item.price?.id as string; + + return { + id: item.id, + quantity, + subscription_id: params.id, + subscription_item_id: item.id, + product_id: item.price?.product as string, + variant_id: variantId, + price_amount: item.price?.unit_amount, + interval: item.price?.recurring?.interval as string, + interval_count: item.price?.recurring?.interval_count as number, + type: this.config + ? getLineItemTypeById(this.config, variantId) + : undefined, + }; + }); + + // otherwise we are updating a subscription + // and we only need to return the update payload + return { + target_subscription_id: params.id, + target_account_id: params.accountId, + target_customer_id: params.customerId, + billing_provider: 'stripe', + status: params.status, + line_items: lineItems, + active, + currency: params.currency, + cancel_at_period_end: params.cancelAtPeriodEnd ?? false, + period_starts_at: getISOString(params.periodStartsAt) as string, + period_ends_at: getISOString(params.periodEndsAt) as string, + trial_starts_at: getISOString(params.trialStartsAt), + trial_ends_at: getISOString(params.trialEndsAt), + }; + } +} + +function getISOString(date: number | null) { + return date ? new Date(date * 1000).toISOString() : undefined; +} diff --git a/packages/billing/stripe/src/services/stripe-webhook-handler.service.ts b/packages/billing/stripe/src/services/stripe-webhook-handler.service.ts index 4690b46e4..0f8ff66e9 100644 --- a/packages/billing/stripe/src/services/stripe-webhook-handler.service.ts +++ b/packages/billing/stripe/src/services/stripe-webhook-handler.service.ts @@ -1,18 +1,30 @@ import Stripe from 'stripe'; -import { - BillingConfig, - BillingWebhookHandlerService, - getLineItemTypeById, -} from '@kit/billing'; +import { BillingConfig, BillingWebhookHandlerService } from '@kit/billing'; import { getLogger } from '@kit/shared/logger'; import { Database } from '@kit/supabase/database'; import { StripeServerEnvSchema } from '../schema/stripe-server-env.schema'; import { createStripeClient } from './stripe-sdk'; +import { createStripeSubscriptionPayloadBuilderService } from './stripe-subscription-payload-builder.service'; type UpsertSubscriptionParams = - Database['public']['Functions']['upsert_subscription']['Args']; + Database['public']['Functions']['upsert_subscription']['Args'] & { + line_items: Array; + }; + +interface LineItem { + id: string; + quantity: number; + subscription_id: string; + subscription_item_id: string; + product_id: string; + variant_id: string; + price_amount: number | null | undefined; + interval: string; + interval_count: number; + type: 'flat' | 'metered' | 'per_seat' | undefined; +} type UpsertOrderParams = Database['public']['Functions']['upsert_order']['Args']; @@ -149,22 +161,27 @@ export class StripeWebhookHandlerService // if it's a subscription, we need to retrieve the subscription // and build the payload for the subscription if (isSubscription) { + const subscriptionPayloadBuilderService = + createStripeSubscriptionPayloadBuilderService(); + const subscriptionId = session.subscription as string; const subscription = await stripe.subscriptions.retrieve(subscriptionId); - const payload = this.buildSubscriptionPayload({ - accountId, - customerId, - id: subscription.id, - lineItems: subscription.items.data, - status: subscription.status, - currency: subscription.currency, - periodStartsAt: subscription.current_period_start, - periodEndsAt: subscription.current_period_end, - cancelAtPeriodEnd: subscription.cancel_at_period_end, - trialStartsAt: subscription.trial_start, - trialEndsAt: subscription.trial_end, - }); + const payload = subscriptionPayloadBuilderService + .withBillingConfig(this.config) + .build({ + accountId, + customerId, + id: subscription.id, + lineItems: subscription.items.data, + status: subscription.status, + currency: subscription.currency, + periodStartsAt: subscription.current_period_start, + periodEndsAt: subscription.current_period_end, + cancelAtPeriodEnd: subscription.cancel_at_period_end, + trialStartsAt: subscription.trial_start, + trialEndsAt: subscription.trial_end, + }); return onCheckoutCompletedCallback(payload); } else { @@ -237,19 +254,24 @@ export class StripeWebhookHandlerService const subscriptionId = subscription.id; const accountId = subscription.metadata.accountId as string; - const payload = this.buildSubscriptionPayload({ - customerId: subscription.customer as string, - id: subscriptionId, - accountId, - lineItems: subscription.items.data, - status: subscription.status, - currency: subscription.currency, - periodStartsAt: subscription.current_period_start, - periodEndsAt: subscription.current_period_end, - cancelAtPeriodEnd: subscription.cancel_at_period_end, - trialStartsAt: subscription.trial_start, - trialEndsAt: subscription.trial_end, - }); + const subscriptionPayloadBuilderService = + createStripeSubscriptionPayloadBuilderService(); + + const payload = subscriptionPayloadBuilderService + .withBillingConfig(this.config) + .build({ + customerId: subscription.customer as string, + id: subscriptionId, + accountId, + lineItems: subscription.items.data, + status: subscription.status, + currency: subscription.currency, + periodStartsAt: subscription.current_period_start, + periodEndsAt: subscription.current_period_end, + cancelAtPeriodEnd: subscription.cancel_at_period_end, + trialStartsAt: subscription.trial_start, + trialEndsAt: subscription.trial_end, + }); return onSubscriptionUpdatedCallback(payload); } @@ -263,64 +285,6 @@ export class StripeWebhookHandlerService return onSubscriptionDeletedCallback(event.data.object.id); } - private buildSubscriptionPayload< - LineItem extends { - id: string; - quantity?: number; - price?: Stripe.Price; - }, - >(params: { - id: string; - accountId: string; - customerId: string; - lineItems: LineItem[]; - status: Stripe.Subscription.Status; - currency: string; - cancelAtPeriodEnd: boolean; - periodStartsAt: number; - periodEndsAt: number; - trialStartsAt: number | null; - trialEndsAt: number | null; - }): UpsertSubscriptionParams { - const active = params.status === 'active' || params.status === 'trialing'; - - const lineItems = params.lineItems.map((item) => { - const quantity = item.quantity ?? 1; - const variantId = item.price?.id as string; - - return { - id: item.id, - quantity, - subscription_id: params.id, - subscription_item_id: item.id, - product_id: item.price?.product as string, - variant_id: variantId, - price_amount: item.price?.unit_amount, - interval: item.price?.recurring?.interval as string, - interval_count: item.price?.recurring?.interval_count as number, - type: getLineItemTypeById(this.config, variantId), - }; - }); - - // otherwise we are updating a subscription - // and we only need to return the update payload - return { - target_subscription_id: params.id, - target_account_id: params.accountId, - target_customer_id: params.customerId, - billing_provider: this.provider, - status: params.status, - line_items: lineItems, - active, - currency: params.currency, - cancel_at_period_end: params.cancelAtPeriodEnd ?? false, - period_starts_at: getISOString(params.periodStartsAt) as string, - period_ends_at: getISOString(params.periodEndsAt) as string, - trial_starts_at: getISOString(params.trialStartsAt), - trial_ends_at: getISOString(params.trialEndsAt), - }; - } - private async loadStripe() { if (!this.stripe) { this.stripe = await createStripeClient(); @@ -329,7 +293,3 @@ export class StripeWebhookHandlerService return this.stripe; } } - -function getISOString(date: number | null) { - return date ? new Date(date * 1000).toISOString() : undefined; -} diff --git a/packages/cms/keystatic/package.json b/packages/cms/keystatic/package.json index 38158ad0e..2c822ad1c 100644 --- a/packages/cms/keystatic/package.json +++ b/packages/cms/keystatic/package.json @@ -15,7 +15,7 @@ "./route-handler": "./src/keystatic-route-handler.ts" }, "dependencies": { - "@keystatic/core": "0.5.19", + "@keystatic/core": "0.5.20", "@keystatic/next": "^5.0.1", "@markdoc/markdoc": "^0.4.0" }, diff --git a/packages/database-webhooks/package.json b/packages/database-webhooks/package.json index dc049ba36..dfbd8c73a 100644 --- a/packages/database-webhooks/package.json +++ b/packages/database-webhooks/package.json @@ -23,7 +23,7 @@ "@kit/tailwind-config": "workspace:*", "@kit/team-accounts": "workspace:^", "@kit/tsconfig": "workspace:*", - "@supabase/supabase-js": "^2.43.4", + "@supabase/supabase-js": "^2.43.5", "zod": "^3.23.8" }, "eslintConfig": { diff --git a/packages/features/accounts/package.json b/packages/features/accounts/package.json index 01dc28152..ca070b6ea 100644 --- a/packages/features/accounts/package.json +++ b/packages/features/accounts/package.json @@ -33,8 +33,8 @@ "@kit/tsconfig": "workspace:*", "@kit/ui": "workspace:^", "@radix-ui/react-icons": "^1.3.0", - "@supabase/supabase-js": "^2.43.4", - "@tanstack/react-query": "5.45.0", + "@supabase/supabase-js": "^2.43.5", + "@tanstack/react-query": "5.45.1", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "lucide-react": "^0.395.0", @@ -42,7 +42,7 @@ "next-themes": "0.3.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-hook-form": "^7.51.5", + "react-hook-form": "^7.52.0", "react-i18next": "^14.1.2", "sonner": "^1.5.0", "zod": "^3.23.8" diff --git a/packages/features/admin/package.json b/packages/features/admin/package.json index cef815f33..004c03203 100644 --- a/packages/features/admin/package.json +++ b/packages/features/admin/package.json @@ -20,15 +20,15 @@ "@kit/ui": "workspace:^", "@makerkit/data-loader-supabase-core": "^0.0.8", "@makerkit/data-loader-supabase-nextjs": "^1.2.3", - "@supabase/supabase-js": "^2.43.4", - "@tanstack/react-query": "5.45.0", + "@supabase/supabase-js": "^2.43.5", + "@tanstack/react-query": "5.45.1", "@tanstack/react-table": "^8.17.3", "@types/react": "^18.3.3", "lucide-react": "^0.395.0", "next": "14.2.4", "react": "18.3.1", "react-dom": "18.3.1", - "react-hook-form": "^7.51.5", + "react-hook-form": "^7.52.0", "zod": "^3.23.8" }, "exports": { diff --git a/packages/features/auth/package.json b/packages/features/auth/package.json index 2008bc6a8..0f3ac5a2a 100644 --- a/packages/features/auth/package.json +++ b/packages/features/auth/package.json @@ -28,12 +28,12 @@ "@kit/ui": "workspace:^", "@marsidev/react-turnstile": "^0.7.1", "@radix-ui/react-icons": "^1.3.0", - "@supabase/supabase-js": "^2.43.4", - "@tanstack/react-query": "5.45.0", + "@supabase/supabase-js": "^2.43.5", + "@tanstack/react-query": "5.45.1", "@types/react": "^18.3.3", "lucide-react": "^0.395.0", "next": "14.2.4", - "react-hook-form": "^7.51.5", + "react-hook-form": "^7.52.0", "react-i18next": "^14.1.2", "sonner": "^1.5.0", "zod": "^3.23.8" diff --git a/packages/features/notifications/package.json b/packages/features/notifications/package.json index 98b44024d..0c809efc2 100644 --- a/packages/features/notifications/package.json +++ b/packages/features/notifications/package.json @@ -20,8 +20,8 @@ "@kit/tailwind-config": "workspace:*", "@kit/tsconfig": "workspace:*", "@kit/ui": "workspace:*", - "@supabase/supabase-js": "^2.43.4", - "@tanstack/react-query": "5.45.0", + "@supabase/supabase-js": "^2.43.5", + "@tanstack/react-query": "5.45.1", "@types/react": "^18.3.3", "lucide-react": "^0.395.0", "react": "18.3.1", diff --git a/packages/features/team-accounts/package.json b/packages/features/team-accounts/package.json index acac2314d..7c0f47083 100644 --- a/packages/features/team-accounts/package.json +++ b/packages/features/team-accounts/package.json @@ -31,8 +31,8 @@ "@kit/tailwind-config": "workspace:*", "@kit/tsconfig": "workspace:*", "@kit/ui": "workspace:^", - "@supabase/supabase-js": "^2.43.4", - "@tanstack/react-query": "5.45.0", + "@supabase/supabase-js": "^2.43.5", + "@tanstack/react-query": "5.45.1", "@tanstack/react-table": "^8.17.3", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", @@ -42,7 +42,7 @@ "next": "14.2.4", "react": "18.3.1", "react-dom": "18.3.1", - "react-hook-form": "^7.51.5", + "react-hook-form": "^7.52.0", "react-i18next": "^14.1.2", "sonner": "^1.5.0", "zod": "^3.23.8" diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 33800ae31..adaaaa27b 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -21,7 +21,7 @@ "@kit/shared": "workspace:^", "@kit/tailwind-config": "workspace:*", "@kit/tsconfig": "workspace:*", - "@tanstack/react-query": "5.45.0", + "@tanstack/react-query": "5.45.1", "react-i18next": "^14.1.2" }, "dependencies": { diff --git a/packages/next/package.json b/packages/next/package.json index ddefbcbee..86da05a58 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -21,7 +21,7 @@ "@kit/supabase": "workspace:^", "@kit/tailwind-config": "workspace:*", "@kit/tsconfig": "workspace:*", - "@supabase/supabase-js": "^2.43.4", + "@supabase/supabase-js": "^2.43.5", "next": "14.2.4", "zod": "^3.23.8" }, diff --git a/packages/supabase/package.json b/packages/supabase/package.json index dad3e2b0c..2665725a4 100644 --- a/packages/supabase/package.json +++ b/packages/supabase/package.json @@ -26,10 +26,10 @@ "@kit/prettier-config": "workspace:*", "@kit/tailwind-config": "workspace:*", "@kit/tsconfig": "workspace:*", - "@supabase/gotrue-js": "2.62.2", + "@supabase/gotrue-js": "2.64.3", "@supabase/ssr": "^0.3.0", - "@supabase/supabase-js": "^2.43.4", - "@tanstack/react-query": "5.45.0", + "@supabase/supabase-js": "^2.43.5", + "@tanstack/react-query": "5.45.1", "@types/react": "^18.3.3", "next": "14.2.4", "react": "18.3.1", diff --git a/packages/supabase/src/auth-callback.service.ts b/packages/supabase/src/auth-callback.service.ts index c9f336d6c..d0b6e59bc 100644 --- a/packages/supabase/src/auth-callback.service.ts +++ b/packages/supabase/src/auth-callback.service.ts @@ -44,15 +44,14 @@ class AuthCallbackService { url.port = ''; } + url.pathname = params.redirectPath; + const token_hash = searchParams.get('token_hash'); const type = searchParams.get('type') as EmailOtpType | null; const callbackParam = searchParams.get('callback'); - const next = callbackParam - ? new URL(callbackParam).pathname - : params.redirectPath; - const callbackUrl = callbackParam ? new URL(callbackParam) : null; + const nextPath = callbackUrl ? callbackUrl.searchParams.get('next') : null; const inviteToken = callbackUrl?.searchParams.get('invite_token'); const errorPath = params.errorPath ?? '/auth/callback/error'; @@ -62,7 +61,10 @@ class AuthCallbackService { searchParams.delete('next'); searchParams.delete('callback'); - url.pathname = next; + // if we have a next path, we redirect to that path + if (nextPath) { + url.pathname = nextPath; + } // if we have an invite token, we append it to the redirect url if (inviteToken) { diff --git a/packages/ui/package.json b/packages/ui/package.json index 355632f9e..0c6597424 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -51,7 +51,7 @@ "next-themes": "0.3.0", "prettier": "^3.3.2", "react-day-picker": "^8.10.1", - "react-hook-form": "^7.51.5", + "react-hook-form": "^7.52.0", "react-i18next": "^14.1.2", "sonner": "^1.5.0", "tailwindcss": "3.4.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cfed0643a..da4572efc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,8 +22,8 @@ importers: specifier: ^7.0.3 version: 7.0.3 pnpm: - specifier: ^9.3.0 - version: 9.3.0 + specifier: ^9.4.0 + version: 9.4.0 prettier: specifier: ^3.3.2 version: 3.3.2 @@ -56,7 +56,7 @@ importers: version: 2.2.0(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@hookform/resolvers': specifier: ^3.6.0 - version: 3.6.0(react-hook-form@7.51.5(react@18.3.1)) + version: 3.6.0(react-hook-form@7.52.0(react@18.3.1)) '@kit/accounts': specifier: workspace:^ version: link:../../packages/features/accounts @@ -110,10 +110,10 @@ importers: version: link:../../packages/ui '@makerkit/data-loader-supabase-core': specifier: ^0.0.8 - version: 0.0.8(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.4) + version: 0.0.8(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.5) '@makerkit/data-loader-supabase-nextjs': specifier: ^1.2.3 - version: 1.2.3(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.4)(@tanstack/react-query@5.45.0(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 1.2.3(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.5)(@tanstack/react-query@5.45.1(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@marsidev/react-turnstile': specifier: ^0.7.1 version: 0.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -121,14 +121,14 @@ importers: specifier: ^1.3.0 version: 1.3.0(react@18.3.1) '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 '@tanstack/react-query': - specifier: 5.45.0 - version: 5.45.0(react@18.3.1) + specifier: 5.45.1 + version: 5.45.1(react@18.3.1) '@tanstack/react-query-next-experimental': - specifier: ^5.45.0 - version: 5.45.0(@tanstack/react-query@5.45.0(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + specifier: ^5.45.1 + version: 5.45.1(@tanstack/react-query@5.45.1(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@tanstack/react-table': specifier: ^8.17.3 version: 8.17.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -154,8 +154,8 @@ importers: specifier: 18.3.1 version: 18.3.1(react@18.3.1) react-hook-form: - specifier: ^7.51.5 - version: 7.51.5(react@18.3.1) + specifier: ^7.52.0 + version: 7.52.0(react@18.3.1) react-i18next: specifier: ^14.1.2 version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -249,7 +249,7 @@ importers: devDependencies: '@hookform/resolvers': specifier: ^3.6.0 - version: 3.6.0(react-hook-form@7.51.5(react@18.3.1)) + version: 3.6.0(react-hook-form@7.52.0(react@18.3.1)) '@kit/billing': specifier: workspace:^ version: link:../core @@ -281,8 +281,8 @@ importers: specifier: workspace:^ version: link:../../ui '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -299,8 +299,8 @@ importers: specifier: 18.3.1 version: 18.3.1 react-hook-form: - specifier: ^7.51.5 - version: 7.51.5(react@18.3.1) + specifier: ^7.52.0 + version: 7.52.0(react@18.3.1) react-i18next: specifier: ^14.1.2 version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -360,8 +360,8 @@ importers: specifier: ^3.5.0 version: 3.5.0 stripe: - specifier: ^15.11.0 - version: 15.11.0 + specifier: ^15.12.0 + version: 15.12.0 devDependencies: '@kit/billing': specifier: workspace:^ @@ -421,11 +421,11 @@ importers: packages/cms/keystatic: dependencies: '@keystatic/core': - specifier: 0.5.19 - version: 0.5.19(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 0.5.20 + version: 0.5.20(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@keystatic/next': specifier: ^5.0.1 - version: 5.0.1(@keystatic/core@0.5.19(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.0.1(@keystatic/core@0.5.20(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@markdoc/markdoc': specifier: ^0.4.0 version: 0.4.0(@types/react@18.3.3)(react@18.3.1) @@ -515,8 +515,8 @@ importers: specifier: workspace:* version: link:../../tooling/typescript '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 zod: specifier: ^3.23.8 version: 3.23.8 @@ -551,7 +551,7 @@ importers: devDependencies: '@hookform/resolvers': specifier: ^3.6.0 - version: 3.6.0(react-hook-form@7.51.5(react@18.3.1)) + version: 3.6.0(react-hook-form@7.52.0(react@18.3.1)) '@kit/billing-gateway': specifier: workspace:^ version: link:../../billing/gateway @@ -592,11 +592,11 @@ importers: specifier: ^1.3.0 version: 1.3.0(react@18.3.1) '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 '@tanstack/react-query': - specifier: 5.45.0 - version: 5.45.0(react@18.3.1) + specifier: 5.45.1 + version: 5.45.1(react@18.3.1) '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -619,8 +619,8 @@ importers: specifier: 18.3.1 version: 18.3.1(react@18.3.1) react-hook-form: - specifier: ^7.51.5 - version: 7.51.5(react@18.3.1) + specifier: ^7.52.0 + version: 7.52.0(react@18.3.1) react-i18next: specifier: ^14.1.2 version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -635,7 +635,7 @@ importers: devDependencies: '@hookform/resolvers': specifier: ^3.6.0 - version: 3.6.0(react-hook-form@7.51.5(react@18.3.1)) + version: 3.6.0(react-hook-form@7.52.0(react@18.3.1)) '@kit/eslint-config': specifier: workspace:* version: link:../../../tooling/eslint @@ -659,16 +659,16 @@ importers: version: link:../../ui '@makerkit/data-loader-supabase-core': specifier: ^0.0.8 - version: 0.0.8(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.4) + version: 0.0.8(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.5) '@makerkit/data-loader-supabase-nextjs': specifier: ^1.2.3 - version: 1.2.3(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.4)(@tanstack/react-query@5.45.0(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 1.2.3(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.5)(@tanstack/react-query@5.45.1(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 '@tanstack/react-query': - specifier: 5.45.0 - version: 5.45.0(react@18.3.1) + specifier: 5.45.1 + version: 5.45.1(react@18.3.1) '@tanstack/react-table': specifier: ^8.17.3 version: 8.17.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -688,8 +688,8 @@ importers: specifier: 18.3.1 version: 18.3.1(react@18.3.1) react-hook-form: - specifier: ^7.51.5 - version: 7.51.5(react@18.3.1) + specifier: ^7.52.0 + version: 7.52.0(react@18.3.1) zod: specifier: ^3.23.8 version: 3.23.8 @@ -698,7 +698,7 @@ importers: devDependencies: '@hookform/resolvers': specifier: ^3.6.0 - version: 3.6.0(react-hook-form@7.51.5(react@18.3.1)) + version: 3.6.0(react-hook-form@7.52.0(react@18.3.1)) '@kit/eslint-config': specifier: workspace:* version: link:../../../tooling/eslint @@ -727,11 +727,11 @@ importers: specifier: ^1.3.0 version: 1.3.0(react@18.3.1) '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 '@tanstack/react-query': - specifier: 5.45.0 - version: 5.45.0(react@18.3.1) + specifier: 5.45.1 + version: 5.45.1(react@18.3.1) '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -742,8 +742,8 @@ importers: specifier: 14.2.4 version: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-hook-form: - specifier: ^7.51.5 - version: 7.51.5(react@18.3.1) + specifier: ^7.52.0 + version: 7.52.0(react@18.3.1) react-i18next: specifier: ^14.1.2 version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -775,11 +775,11 @@ importers: specifier: workspace:* version: link:../../ui '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 '@tanstack/react-query': - specifier: 5.45.0 - version: 5.45.0(react@18.3.1) + specifier: 5.45.1 + version: 5.45.1(react@18.3.1) '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -804,7 +804,7 @@ importers: devDependencies: '@hookform/resolvers': specifier: ^3.6.0 - version: 3.6.0(react-hook-form@7.51.5(react@18.3.1)) + version: 3.6.0(react-hook-form@7.52.0(react@18.3.1)) '@kit/accounts': specifier: workspace:^ version: link:../accounts @@ -845,11 +845,11 @@ importers: specifier: workspace:^ version: link:../../ui '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 '@tanstack/react-query': - specifier: 5.45.0 - version: 5.45.0(react@18.3.1) + specifier: 5.45.1 + version: 5.45.1(react@18.3.1) '@tanstack/react-table': specifier: ^8.17.3 version: 8.17.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -878,8 +878,8 @@ importers: specifier: 18.3.1 version: 18.3.1(react@18.3.1) react-hook-form: - specifier: ^7.51.5 - version: 7.51.5(react@18.3.1) + specifier: ^7.52.0 + version: 7.52.0(react@18.3.1) react-i18next: specifier: ^14.1.2 version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -918,8 +918,8 @@ importers: specifier: workspace:* version: link:../../tooling/typescript '@tanstack/react-query': - specifier: 5.45.0 - version: 5.45.0(react@18.3.1) + specifier: 5.45.1 + version: 5.45.1(react@18.3.1) react-i18next: specifier: ^14.1.2 version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1041,7 +1041,7 @@ importers: dependencies: '@sentry/nextjs': specifier: ^8.9.2 - version: 8.9.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.0)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.0) + version: 8.9.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.0)(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.0) devDependencies: '@kit/eslint-config': specifier: workspace:* @@ -1089,8 +1089,8 @@ importers: specifier: workspace:* version: link:../../tooling/typescript '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 next: specifier: 14.2.4 version: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1135,17 +1135,17 @@ importers: specifier: workspace:* version: link:../../tooling/typescript '@supabase/gotrue-js': - specifier: 2.62.2 - version: 2.62.2 + specifier: 2.64.3 + version: 2.64.3 '@supabase/ssr': specifier: ^0.3.0 - version: 0.3.0(@supabase/supabase-js@2.43.4) + version: 0.3.0(@supabase/supabase-js@2.43.5) '@supabase/supabase-js': - specifier: ^2.43.4 - version: 2.43.4 + specifier: ^2.43.5 + version: 2.43.5 '@tanstack/react-query': - specifier: 5.45.0 - version: 5.45.0(react@18.3.1) + specifier: 5.45.1 + version: 5.45.1(react@18.3.1) '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -1166,7 +1166,7 @@ importers: dependencies: '@hookform/resolvers': specifier: ^3.6.0 - version: 3.6.0(react-hook-form@7.51.5(react@18.3.1)) + version: 3.6.0(react-hook-form@7.52.0(react@18.3.1)) '@radix-ui/react-accordion': specifier: 1.1.2 version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1286,8 +1286,8 @@ importers: specifier: ^8.10.1 version: 8.10.1(date-fns@3.6.0)(react@18.3.1) react-hook-form: - specifier: ^7.51.5 - version: 7.51.5(react@18.3.1) + specifier: ^7.52.0 + version: 7.52.0(react@18.3.1) react-i18next: specifier: ^14.1.2 version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1365,8 +1365,8 @@ importers: specifier: ^3.3.2 version: 3.3.2 prettier-plugin-tailwindcss: - specifier: ^0.6.4 - version: 0.6.4(@ianvs/prettier-plugin-sort-imports@4.2.1(prettier@3.3.2))(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.3.2))(prettier-plugin-astro@0.14.0)(prettier@3.3.2) + specifier: ^0.6.5 + version: 0.6.5(@ianvs/prettier-plugin-sort-imports@4.2.1(prettier@3.3.2))(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.3.2))(prettier-plugin-astro@0.14.0)(prettier@3.3.2) devDependencies: '@kit/tsconfig': specifier: workspace:^ @@ -1744,8 +1744,8 @@ packages: '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - '@keystar/ui@0.7.4': - resolution: {integrity: sha512-U9oHOPP6JrsK7Ky1BJ+pe3T05kBz8V5ryAN+jD4i0i4fegJ1aE06yFwVHcL5iK+Ksj9qoT9pNRBfWOOFs9QMrg==} + '@keystar/ui@0.7.5': + resolution: {integrity: sha512-n65I/AwvjlrwMVUUHm3PbFFeSteQ2PeVZx7Y6sfOcRS1vAfBIOdN/qwk1BYd6ssyMLsx/x3xALAXt45jNL7d9g==} peerDependencies: next: '>=14' react: 18.3.1 @@ -1754,8 +1754,8 @@ packages: next: optional: true - '@keystatic/core@0.5.19': - resolution: {integrity: sha512-y/0PFHLKARQWgFvsu6Kp3/ZoNkLyseNEyrez7tPmfXX08hPMNVlXlwpojCLiXOKAMFYI3XgLgwKHOf5gIsJa3g==} + '@keystatic/core@0.5.20': + resolution: {integrity: sha512-oiKSdBQGcsQe87xUP+k5nXBo9pFxTCP2LRnvr59ztYvNGMcIi9btUplIgKoeVx4nK+JkL4Q0vpegz6j+EMeuuw==} peerDependencies: react: 18.3.1 react-dom: 18.3.1 @@ -3570,19 +3570,16 @@ packages: '@supabase/auth-js@2.64.2': resolution: {integrity: sha512-s+lkHEdGiczDrzXJ1YWt2y3bxRi+qIUnXcgkpLSrId7yjBeaXBFygNjTaoZLG02KNcYwbuZ9qkEIqmj2hF7svw==} - '@supabase/functions-js@2.3.1': - resolution: {integrity: sha512-QyzNle/rVzlOi4BbVqxLSH828VdGY1RElqGFAj+XeVypj6+PVtMlD21G8SDnsPQDtlqqTtoGRgdMlQZih5hTuw==} + '@supabase/functions-js@2.4.1': + resolution: {integrity: sha512-8sZ2ibwHlf+WkHDUZJUXqqmPvWQ3UHN0W30behOJngVh/qHHekhJLCFbh0AjkE9/FqqXtf9eoVvmYgfCLk5tNA==} - '@supabase/gotrue-js@2.62.2': - resolution: {integrity: sha512-AP6e6W9rQXFTEJ7sTTNYQrNf0LCcnt1hUW+RIgUK+Uh3jbWvcIST7wAlYyNZiMlS9+PYyymWQ+Ykz/rOYSO0+A==} + '@supabase/gotrue-js@2.64.3': + resolution: {integrity: sha512-Rql+txnKu1iGl8pZ2NG24nNWtRIaGzC61UZ8G6XVnqt1A8fmq/VXAnNvbuyStMtFV8l9bQnduAB6C1eD+2Eq2Q==} '@supabase/node-fetch@2.6.15': resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} engines: {node: 4.x || >=6.0.0} - '@supabase/postgrest-js@1.15.2': - resolution: {integrity: sha512-9/7pUmXExvGuEK1yZhVYXPZnLEkDTwxgMQHXLrN5BwPZZm4iUCL1YEyep/Z2lIZah8d8M433mVAUEGsihUj5KQ==} - '@supabase/postgrest-js@1.15.5': resolution: {integrity: sha512-YR4TiitTE2hizT7mB99Cl3V9i00RAY5sUxS2/NuWWzkreM7OeYlP2OqnqVwwb4z6ILn+j8x9e/igJDepFhjswQ==} @@ -3594,11 +3591,11 @@ packages: peerDependencies: '@supabase/supabase-js': ^2.33.1 - '@supabase/storage-js@2.5.5': - resolution: {integrity: sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==} + '@supabase/storage-js@2.6.0': + resolution: {integrity: sha512-REAxr7myf+3utMkI2oOmZ6sdplMZZ71/2NEIEMBZHL9Fkmm3/JnaOZVSRqvG4LStYj2v5WhCruCzuMn6oD/Drw==} - '@supabase/supabase-js@2.43.4': - resolution: {integrity: sha512-/pLPaxiIsn5Vaz3s32HC6O/VNwfeddnzS0bZRpOW0AKcPuXroD8pT9G8mpiBlZfpKsMmq6k7tlhW7Sr1PAQ1lw==} + '@supabase/supabase-js@2.43.5': + resolution: {integrity: sha512-Y4GukjZWW6ouohMaPlYz8tSz9ykf9jY7w9/RhqKuScmla3Xiklce8eLr8TYAtA+oQYCWxo3RgS3B6O4rd/72FA==} '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -3616,15 +3613,15 @@ packages: '@tanstack/query-core@5.45.0': resolution: {integrity: sha512-RVfIZQmFUTdjhSAAblvueimfngYyfN6HlwaJUPK71PKd7yi43Vs1S/rdimmZedPWX/WGppcq/U1HOj7O7FwYxw==} - '@tanstack/react-query-next-experimental@5.45.0': - resolution: {integrity: sha512-75Tl2T54w5m1h0CvZN1Pdz3zM52zj18uNsOHi5Xszj5D4KM07ZhSNyon8N5osVS+YVcoR/gVqZn8pkRv1SpSqA==} + '@tanstack/react-query-next-experimental@5.45.1': + resolution: {integrity: sha512-GhaU4TwN8xxxt0ZQrdfI4o5uWK53cydLpwGIIuwzF+mqLL9379umsJUKrDbx2GZplyQY0+TYD568+rsb5YDzng==} peerDependencies: - '@tanstack/react-query': ^5.45.0 + '@tanstack/react-query': ^5.45.1 next: ^13 || ^14 || ^15 react: 18.3.1 - '@tanstack/react-query@5.45.0': - resolution: {integrity: sha512-y272cKRJp1BvehrWG4ashOBuqBj1Qm2O6fgYJ9LYSHrLdsCXl74GbSVjUQTReUdHuRIl9cEOoyPa6HYag400lw==} + '@tanstack/react-query@5.45.1': + resolution: {integrity: sha512-mYYfJujKg2kxmkRRjA6nn4YKG3ITsKuH22f1kteJ5IuVQqgKUgbaSQfYwVP0gBS05mhwxO03HVpD0t7BMN7WOA==} peerDependencies: react: 18.3.1 @@ -3798,8 +3795,8 @@ packages: '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - '@types/lodash@4.17.4': - resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} + '@types/lodash@4.17.5': + resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} '@types/markdown-it@12.2.3': resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} @@ -4281,8 +4278,8 @@ packages: caniuse-lite@1.0.30001632: resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==} - caniuse-lite@1.0.30001634: - resolution: {integrity: sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==} + caniuse-lite@1.0.30001636: + resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -5166,8 +5163,8 @@ packages: peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + graphql@16.8.2: + resolution: {integrity: sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} gzip-size@6.0.0: @@ -6312,8 +6309,8 @@ packages: engines: {node: '>=16'} hasBin: true - pnpm@9.3.0: - resolution: {integrity: sha512-7nuT4MK9EUCcZCT5K4ZvMdPqG+9fvkfTx1AM3DyWaIM9LlVoGtZt9bZAxh+p3CXVRu+lTXbX+L9UsTYUrCk2MQ==} + pnpm@9.4.0: + resolution: {integrity: sha512-9Um4pSydK4U2di+ZwHIiBe/Fr5E+d4NdvMw7CwssqefcgCK3gGLBcpHEjoh0nHDOiOtadPH6jEv14Yu0bIvYOg==} engines: {node: '>=18.12'} hasBin: true @@ -6390,8 +6387,8 @@ packages: resolution: {integrity: sha512-7jRGJsexaRIyUzTk8uzXlP45cw6DQ5Ci4bTe0xCBCcuO1Fff8jJy9oI+kRCQKSdDFTSAArMSg8GpvzlKBtSaZA==} engines: {node: ^14.15.0 || >=16.0.0} - prettier-plugin-tailwindcss@0.6.4: - resolution: {integrity: sha512-3vhbIvlKyAWPaw9bUr2cw6M1BGx2Oy9CCLJyv+nxEiBGCTcL69WcAz2IFMGqx8IXSzQCInGSo2ujAByg9poHLQ==} + prettier-plugin-tailwindcss@0.6.5: + resolution: {integrity: sha512-axfeOArc/RiGHjOIy9HytehlC0ZLeMaqY09mm8YCkMzznKiDkwFzOpBvtuhuv3xG5qB73+Mj7OCe2j/L1ryfuQ==} engines: {node: '>=14.21.3'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -6486,8 +6483,8 @@ packages: prosemirror-transform@1.9.0: resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} - prosemirror-view@1.33.7: - resolution: {integrity: sha512-jo6eMQCtPRwcrA2jISBCnm0Dd2B+szS08BU1Ay+XGiozHo5EZMHfLQE8R5nO4vb1spTH2RW1woZIYXRiQsuP8g==} + prosemirror-view@1.33.8: + resolution: {integrity: sha512-4PhMr/ufz2cdvFgpUAnZfs+0xij3RsFysreeG9V/utpwX7AJtYCDVyuRxzWoMJIEf4C7wVihuBNMPpFLPCiLQw==} proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -6550,8 +6547,8 @@ packages: peerDependencies: react: 18.3.1 - react-hook-form@7.51.5: - resolution: {integrity: sha512-J2ILT5gWx1XUIJRETiA7M19iXHlG74+6O3KApzvqB/w8S5NQR7AbU8HVZrMALdmDgWpRPYiZJl0zx8Z4L2mP6Q==} + react-hook-form@7.52.0: + resolution: {integrity: sha512-mJX506Xc6mirzLsmXUJyqlAI3Kj9Ph2RhplYhUVffeOQSnubK2uVqBFOBJmvKikvbFV91pxVXmDiR+QMF19x6A==} engines: {node: '>=12.22.0'} peerDependencies: react: 18.3.1 @@ -6995,8 +6992,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - stripe@15.11.0: - resolution: {integrity: sha512-qmZF0PN1jRVpiQrXL8eTb9Jy/6S+aUlcDquKBFT2h3PkaD7RZ444FIojVXUg67FK2zFIUNXgMv02c7csdL5qHg==} + stripe@15.12.0: + resolution: {integrity: sha512-slTbYS1WhRJXVB8YXU8fgHizkUrM9KJyrw4Dd8pLEwzKHYyQTIE46EePC2MVbSDZdE24o1GdNtzmJV4PrPpmJA==} engines: {node: '>=12.*'} styled-jsx@5.1.1: @@ -7491,8 +7488,8 @@ packages: utf-8-validate: optional: true - ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -7507,8 +7504,8 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y-prosemirror@1.2.6: - resolution: {integrity: sha512-rGz8kX4v/uFJrLaqZvsezY1JGN/zTDSPMO76zRbNcpE63OEiw2PBCEQi9ZlfbEwgCMoeJLUT+otNyO/Oj73TGQ==} + y-prosemirror@1.2.9: + resolution: {integrity: sha512-fThGIVmSqrqnG/ckywEGlHM9ElfILC4TcMZd5zxWPe/i+UuP97TEr4swsopRKG3Y+KHBVt4Y/5NVBC3AAsUoUg==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} peerDependencies: prosemirror-model: ^1.7.1 @@ -7564,8 +7561,8 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - yjs@13.6.15: - resolution: {integrity: sha512-moFv4uNYhp8BFxIk3AkpoAnnjts7gwdpiG8RtyFiKbMtxKCS0zVZ5wPaaGpwC3V2N/K8TK8MwtSI3+WO9CHWjQ==} + yjs@13.6.17: + resolution: {integrity: sha512-ERnKXYZrZqgGO81Yqt3D69detaRUwaqhsQTZRKi9CDMgteDMund+KcLChfwpjQbva9YwfRgh7S914Pa6qPVVCA==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} yn@3.1.1: @@ -7584,9 +7581,9 @@ packages: snapshots: - '@0no-co/graphql.web@1.0.7(graphql@16.8.1)': + '@0no-co/graphql.web@1.0.7(graphql@16.8.2)': optionalDependencies: - graphql: 16.8.1 + graphql: 16.8.2 '@alloc/quick-lru@5.2.0': {} @@ -7932,9 +7929,9 @@ snapshots: dependencies: tslib: 2.6.3 - '@graphql-typed-document-node/core@3.2.0(graphql@16.8.1)': + '@graphql-typed-document-node/core@3.2.0(graphql@16.8.2)': dependencies: - graphql: 16.8.1 + graphql: 16.8.2 '@grpc/grpc-js@1.10.8': dependencies: @@ -7948,9 +7945,9 @@ snapshots: protobufjs: 7.3.0 yargs: 17.7.2 - '@hookform/resolvers@3.6.0(react-hook-form@7.51.5(react@18.3.1))': + '@hookform/resolvers@3.6.0(react-hook-form@7.52.0(react@18.3.1))': dependencies: - react-hook-form: 7.51.5(react@18.3.1) + react-hook-form: 7.52.0(react@18.3.1) '@humanwhocodes/config-array@0.11.14': dependencies: @@ -8037,7 +8034,7 @@ snapshots: '@juggle/resize-observer@3.4.0': {} - '@keystar/ui@0.7.4(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@keystar/ui@0.7.5(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.7 '@emotion/css': 11.11.2 @@ -8129,7 +8126,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@keystatic/core@0.5.19(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@keystatic/core@0.5.20(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.7 '@braintree/sanitize-url': 6.0.4 @@ -8137,7 +8134,7 @@ snapshots: '@emotion/weak-memoize': 0.3.1 '@floating-ui/react': 0.24.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@internationalized/string': 3.2.3 - '@keystar/ui': 0.7.4(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@keystar/ui': 0.7.5(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@markdoc/markdoc': 0.4.0(@types/react@18.3.3)(react@18.3.1) '@react-aria/focus': 3.17.1(react@18.3.1) '@react-aria/i18n': 3.11.1(react@18.3.1) @@ -8153,22 +8150,22 @@ snapshots: '@react-stately/utils': 3.10.1(react@18.3.1) '@react-types/shared': 3.23.1(react@18.3.1) '@sindresorhus/slugify': 1.1.2 - '@toeverything/y-indexeddb': 0.10.0-canary.9(yjs@13.6.15) - '@ts-gql/tag': 0.7.3(graphql@16.8.1) + '@toeverything/y-indexeddb': 0.10.0-canary.9(yjs@13.6.17) + '@ts-gql/tag': 0.7.3(graphql@16.8.2) '@types/mdast': 4.0.4 '@types/node': 16.11.13 '@types/react': 18.3.3 '@types/react-dom': 18.3.0 - '@urql/core': 4.3.0(graphql@16.8.1) - '@urql/exchange-auth': 2.2.0(@urql/core@4.3.0(graphql@16.8.1)) - '@urql/exchange-graphcache': 6.5.1(graphql@16.8.1) - '@urql/exchange-persisted': 4.3.0(@urql/core@4.3.0(graphql@16.8.1)) + '@urql/core': 4.3.0(graphql@16.8.2) + '@urql/exchange-auth': 2.2.0(@urql/core@4.3.0(graphql@16.8.2)) + '@urql/exchange-graphcache': 6.5.1(graphql@16.8.2) + '@urql/exchange-persisted': 4.3.0(@urql/core@4.3.0(graphql@16.8.2)) cookie: 0.5.0 decimal.js-light: 2.5.1 emery: 1.4.3 escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 - graphql: 16.8.1 + graphql: 16.8.2 idb-keyval: 6.2.1 ignore: 5.3.1 is-hotkey: 0.2.0 @@ -8195,7 +8192,7 @@ snapshots: prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.7 + prosemirror-view: 1.33.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 @@ -8204,18 +8201,18 @@ snapshots: slate-react: 0.91.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.91.4) superstruct: 1.0.4 unist-util-visit: 5.0.0 - urql: 4.1.0(@urql/core@4.3.0(graphql@16.8.1))(react@18.3.1) - y-prosemirror: 1.2.6(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.7)(y-protocols@1.0.6(yjs@13.6.15))(yjs@13.6.15) - y-protocols: 1.0.6(yjs@13.6.15) - yjs: 13.6.15 + urql: 4.1.0(@urql/core@4.3.0(graphql@16.8.2))(react@18.3.1) + y-prosemirror: 1.2.9(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8)(y-protocols@1.0.6(yjs@13.6.17))(yjs@13.6.17) + y-protocols: 1.0.6(yjs@13.6.17) + yjs: 13.6.17 transitivePeerDependencies: - next - supports-color - '@keystatic/next@5.0.1(@keystatic/core@0.5.19(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@keystatic/next@5.0.1(@keystatic/core@0.5.20(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.7 - '@keystatic/core': 0.5.19(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@keystatic/core': 0.5.20(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': 18.3.3 chokidar: 3.6.0 next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -8225,17 +8222,17 @@ snapshots: '@lemonsqueezy/lemonsqueezy.js@3.2.0': {} - '@makerkit/data-loader-supabase-core@0.0.8(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.4)': + '@makerkit/data-loader-supabase-core@0.0.8(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.5)': dependencies: '@supabase/postgrest-js': 1.15.5 - '@supabase/supabase-js': 2.43.4 + '@supabase/supabase-js': 2.43.5 ts-case-convert: 2.0.7 - '@makerkit/data-loader-supabase-nextjs@1.2.3(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.4)(@tanstack/react-query@5.45.0(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@makerkit/data-loader-supabase-nextjs@1.2.3(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.5)(@tanstack/react-query@5.45.1(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@makerkit/data-loader-supabase-core': 0.0.8(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.4) - '@supabase/supabase-js': 2.43.4 - '@tanstack/react-query': 5.45.0(react@18.3.1) + '@makerkit/data-loader-supabase-core': 0.0.8(@supabase/postgrest-js@1.15.5)(@supabase/supabase-js@2.43.5) + '@supabase/supabase-js': 2.43.5 + '@tanstack/react-query': 5.45.1(react@18.3.1) next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 transitivePeerDependencies: @@ -10518,7 +10515,7 @@ snapshots: '@sentry/types': 8.9.2 '@sentry/utils': 8.9.2 - '@sentry/nextjs@8.9.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.0)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.0)': + '@sentry/nextjs@8.9.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.0)(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.0)': dependencies: '@opentelemetry/instrumentation-http': 0.52.0(@opentelemetry/api@1.9.0) '@rollup/plugin-commonjs': 24.0.0(rollup@3.29.4) @@ -10648,11 +10645,11 @@ snapshots: dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/functions-js@2.3.1': + '@supabase/functions-js@2.4.1': dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/gotrue-js@2.62.2': + '@supabase/gotrue-js@2.64.3': dependencies: '@supabase/node-fetch': 2.6.15 @@ -10660,10 +10657,6 @@ snapshots: dependencies: whatwg-url: 5.0.0 - '@supabase/postgrest-js@1.15.2': - dependencies: - '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js@1.15.5': dependencies: '@supabase/node-fetch': 2.6.15 @@ -10673,29 +10666,29 @@ snapshots: '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.4 '@types/ws': 8.5.10 - ws: 8.17.0 + ws: 8.17.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@supabase/ssr@0.3.0(@supabase/supabase-js@2.43.4)': + '@supabase/ssr@0.3.0(@supabase/supabase-js@2.43.5)': dependencies: - '@supabase/supabase-js': 2.43.4 + '@supabase/supabase-js': 2.43.5 cookie: 0.5.0 ramda: 0.29.1 - '@supabase/storage-js@2.5.5': + '@supabase/storage-js@2.6.0': dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/supabase-js@2.43.4': + '@supabase/supabase-js@2.43.5': dependencies: '@supabase/auth-js': 2.64.2 - '@supabase/functions-js': 2.3.1 + '@supabase/functions-js': 2.4.1 '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js': 1.15.2 + '@supabase/postgrest-js': 1.15.5 '@supabase/realtime-js': 2.9.5 - '@supabase/storage-js': 2.5.5 + '@supabase/storage-js': 2.6.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -10717,13 +10710,13 @@ snapshots: '@tanstack/query-core@5.45.0': {} - '@tanstack/react-query-next-experimental@5.45.0(@tanstack/react-query@5.45.0(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query-next-experimental@5.45.1(@tanstack/react-query@5.45.1(react@18.3.1))(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/react-query': 5.45.0(react@18.3.1) + '@tanstack/react-query': 5.45.1(react@18.3.1) next: 14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@tanstack/react-query@5.45.0(react@18.3.1)': + '@tanstack/react-query@5.45.1(react@18.3.1)': dependencies: '@tanstack/query-core': 5.45.0 react: 18.3.1 @@ -10736,12 +10729,12 @@ snapshots: '@tanstack/table-core@8.17.3': {} - '@toeverything/y-indexeddb@0.10.0-canary.9(yjs@13.6.15)': + '@toeverything/y-indexeddb@0.10.0-canary.9(yjs@13.6.17)': dependencies: idb: 7.1.1 nanoid: 5.0.7 - y-provider: 0.10.0-canary.9(yjs@13.6.15) - yjs: 13.6.15 + y-provider: 0.10.0-canary.9(yjs@13.6.17) + yjs: 13.6.17 '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -10759,11 +10752,11 @@ snapshots: '@trpc/server@10.45.2': {} - '@ts-gql/tag@0.7.3(graphql@16.8.1)': + '@ts-gql/tag@0.7.3(graphql@16.8.2)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) - graphql: 16.8.1 - graphql-tag: 2.12.6(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.2) + graphql: 16.8.2 + graphql-tag: 2.12.6(graphql@16.8.2) '@tsconfig/node10@1.0.11': {} @@ -10948,7 +10941,7 @@ snapshots: '@types/linkify-it@5.0.0': optional: true - '@types/lodash@4.17.4': {} + '@types/lodash@4.17.5': {} '@types/markdown-it@12.2.3': dependencies: @@ -11126,29 +11119,29 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@urql/core@4.3.0(graphql@16.8.1)': + '@urql/core@4.3.0(graphql@16.8.2)': dependencies: - '@0no-co/graphql.web': 1.0.7(graphql@16.8.1) + '@0no-co/graphql.web': 1.0.7(graphql@16.8.2) wonka: 6.3.4 transitivePeerDependencies: - graphql - '@urql/exchange-auth@2.2.0(@urql/core@4.3.0(graphql@16.8.1))': + '@urql/exchange-auth@2.2.0(@urql/core@4.3.0(graphql@16.8.2))': dependencies: - '@urql/core': 4.3.0(graphql@16.8.1) + '@urql/core': 4.3.0(graphql@16.8.2) wonka: 6.3.4 - '@urql/exchange-graphcache@6.5.1(graphql@16.8.1)': + '@urql/exchange-graphcache@6.5.1(graphql@16.8.2)': dependencies: - '@0no-co/graphql.web': 1.0.7(graphql@16.8.1) - '@urql/core': 4.3.0(graphql@16.8.1) + '@0no-co/graphql.web': 1.0.7(graphql@16.8.2) + '@urql/core': 4.3.0(graphql@16.8.2) wonka: 6.3.4 transitivePeerDependencies: - graphql - '@urql/exchange-persisted@4.3.0(@urql/core@4.3.0(graphql@16.8.1))': + '@urql/exchange-persisted@4.3.0(@urql/core@4.3.0(graphql@16.8.2))': dependencies: - '@urql/core': 4.3.0(graphql@16.8.1) + '@urql/core': 4.3.0(graphql@16.8.2) wonka: 6.3.4 '@webassemblyjs/ast@1.12.1': @@ -11254,6 +11247,10 @@ snapshots: dependencies: acorn: 8.11.3 + acorn-jsx@5.3.2(acorn@8.12.0): + dependencies: + acorn: 8.12.0 + acorn-walk@8.3.2: {} acorn-walk@8.3.3: @@ -11486,7 +11483,7 @@ snapshots: browserslist@4.23.1: dependencies: - caniuse-lite: 1.0.30001634 + caniuse-lite: 1.0.30001636 electron-to-chromium: 1.4.803 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) @@ -11542,7 +11539,7 @@ snapshots: caniuse-lite@1.0.30001632: {} - caniuse-lite@1.0.30001634: {} + caniuse-lite@1.0.30001636: {} ccount@2.0.1: {} @@ -12545,12 +12542,12 @@ snapshots: graphemer@1.4.0: {} - graphql-tag@2.12.6(graphql@16.8.1): + graphql-tag@2.12.6(graphql@16.8.2): dependencies: - graphql: 16.8.1 + graphql: 16.8.2 tslib: 2.6.3 - graphql@16.8.1: {} + graphql@16.8.2: {} gzip-size@6.0.0: dependencies: @@ -13399,8 +13396,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -13989,7 +13986,7 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - pnpm@9.3.0: {} + pnpm@9.4.0: {} possible-typed-array-names@1.0.0: {} @@ -14056,7 +14053,7 @@ snapshots: sass-formatter: 0.7.9 optional: true - prettier-plugin-tailwindcss@0.6.4(@ianvs/prettier-plugin-sort-imports@4.2.1(prettier@3.3.2))(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.3.2))(prettier-plugin-astro@0.14.0)(prettier@3.3.2): + prettier-plugin-tailwindcss@0.6.5(@ianvs/prettier-plugin-sort-imports@4.2.1(prettier@3.3.2))(@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.3.2))(prettier-plugin-astro@0.14.0)(prettier@3.3.2): dependencies: prettier: 3.3.2 optionalDependencies: @@ -14090,7 +14087,7 @@ snapshots: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.7 + prosemirror-view: 1.33.8 rope-sequence: 1.3.4 prosemirror-keymap@1.2.2: @@ -14106,7 +14103,7 @@ snapshots: dependencies: prosemirror-model: 1.21.1 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.7 + prosemirror-view: 1.33.8 prosemirror-tables@1.3.7: dependencies: @@ -14114,13 +14111,13 @@ snapshots: prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.7 + prosemirror-view: 1.33.8 prosemirror-transform@1.9.0: dependencies: prosemirror-model: 1.21.1 - prosemirror-view@1.33.7: + prosemirror-view@1.33.8: dependencies: prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 @@ -14201,7 +14198,7 @@ snapshots: '@babel/runtime': 7.24.7 react: 18.3.1 - react-hook-form@7.51.5(react@18.3.1): + react-hook-form@7.52.0(react@18.3.1): dependencies: react: 18.3.1 @@ -14553,7 +14550,7 @@ snapshots: dependencies: '@juggle/resize-observer': 3.4.0 '@types/is-hotkey': 0.1.10 - '@types/lodash': 4.17.4 + '@types/lodash': 4.17.5 direction: 1.0.4 is-hotkey: 0.1.8 is-plain-object: 5.0.0 @@ -14697,7 +14694,7 @@ snapshots: strip-json-comments@3.1.1: {} - stripe@15.11.0: + stripe@15.12.0: dependencies: '@types/node': 20.14.2 qs: 6.12.1 @@ -15056,9 +15053,9 @@ snapshots: dependencies: punycode: 2.3.1 - urql@4.1.0(@urql/core@4.3.0(graphql@16.8.1))(react@18.3.1): + urql@4.1.0(@urql/core@4.3.0(graphql@16.8.2))(react@18.3.1): dependencies: - '@urql/core': 4.3.0(graphql@16.8.1) + '@urql/core': 4.3.0(graphql@16.8.2) react: 18.3.1 wonka: 6.3.4 @@ -15278,27 +15275,27 @@ snapshots: ws@7.5.9: {} - ws@8.17.0: {} + ws@8.17.1: {} xtend@4.0.2: {} - y-prosemirror@1.2.6(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.7)(y-protocols@1.0.6(yjs@13.6.15))(yjs@13.6.15): + y-prosemirror@1.2.9(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8)(y-protocols@1.0.6(yjs@13.6.17))(yjs@13.6.17): dependencies: lib0: 0.2.94 prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.7 - y-protocols: 1.0.6(yjs@13.6.15) - yjs: 13.6.15 + prosemirror-view: 1.33.8 + y-protocols: 1.0.6(yjs@13.6.17) + yjs: 13.6.17 - y-protocols@1.0.6(yjs@13.6.15): + y-protocols@1.0.6(yjs@13.6.17): dependencies: lib0: 0.2.94 - yjs: 13.6.15 + yjs: 13.6.17 - y-provider@0.10.0-canary.9(yjs@13.6.15): + y-provider@0.10.0-canary.9(yjs@13.6.17): dependencies: - yjs: 13.6.15 + yjs: 13.6.17 y18n@5.0.8: {} @@ -15326,7 +15323,7 @@ snapshots: yarn@1.22.22: {} - yjs@13.6.15: + yjs@13.6.17: dependencies: lib0: 0.2.94 diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json index c005ff79b..05f1896b8 100644 --- a/tooling/prettier/package.json +++ b/tooling/prettier/package.json @@ -12,7 +12,7 @@ "@ianvs/prettier-plugin-sort-imports": "^4.2.1", "next": "14.2.4", "prettier": "^3.3.2", - "prettier-plugin-tailwindcss": "^0.6.4" + "prettier-plugin-tailwindcss": "^0.6.5" }, "devDependencies": { "@kit/tsconfig": "workspace:^",