From b8acf1e1806fe54d2133beef9132e8aee1a29b22 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 11:38:21 -0600 Subject: [PATCH] Update all Yarn dependencies (2022-07-29) (#3599) * Update all Yarn dependencies (2022-07-29) * Adds syncpack config * Fixes mismatches * Update yarn.lock * RRule fixes * Locking dayjs to fix build * Type fixes * Fixes mismatches * Submodule sync * Update yarn.lock * Update event.ts * Conflict fixes * Fixes prisma warnings * Liting * Upgrade next, zod * Prevents articfact overwriting * Yarn fixes * Jest fixes * Submodule sync * Formatting * Submodule sync * Adds provider for react-tooltip * Removed dotenv-cli * Readds dotenv-cli * Skips getSchedule tests Until prisma is mocked properly * Fixes * Revert prisma seed script * E2E fixes * test * Removed deprecated req.page in middleware * Make tests stable * Unskip getSchedule tests * fixed 404 logo on cal video (#3885) * Removed PW aliases as aren't needed anymore Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> Co-authored-by: zomars Co-authored-by: Hariom Balhara Co-authored-by: Alex van Andel Co-authored-by: Peer Richelsen --- README.md | 10 +- apps/api | 2 +- apps/console | 2 +- apps/docs/package.json | 8 +- apps/storybook/package.json | 24 +- apps/swagger/package.json | 12 +- apps/web/jest.config.ts | 2 + apps/web/lib/app-providers.tsx | 19 +- apps/web/middleware.ts | 1 - apps/web/package.json | 86 +- apps/web/pages/api/book/event.ts | 4 +- apps/web/pages/auth/sso/[provider].tsx | 2 +- apps/web/pages/success.tsx | 2 +- apps/web/playwright/change-username.test.ts | 10 +- .../playwright/embed-code-generator.test.ts | 21 +- apps/web/test/jest-resolver.js | 15 + apps/web/test/jest-setup.js | 6 + apps/website | 2 +- package.json | 19 +- packages/app-store-cli/package.json | 10 +- packages/app-store-cli/readme.md | 2 +- packages/app-store/applecalendar/package.json | 2 +- .../app-store/caldavcalendar/package.json | 2 +- .../closecomothercalendar/package.json | 6 +- .../exchange2013calendar/package.json | 2 +- .../exchange2016calendar/package.json | 2 +- .../app-store/slackmessaging/package.json | 6 +- packages/app-store/stripepayment/package.json | 10 +- packages/app-store/vital/package.json | 2 +- packages/config/package.json | 22 +- packages/core/package.json | 2 +- packages/dayjs/index.ts | 51 +- packages/dayjs/package.json | 4 +- packages/emails/package.json | 4 +- packages/emails/src/components/WhenInfo.tsx | 4 +- .../templates/attendee-scheduled-email.ts | 4 +- .../templates/organizer-scheduled-email.ts | 4 +- packages/embeds/embed-core/package.json | 11 +- packages/embeds/embed-react/package.json | 12 +- packages/embeds/embed-snippet/package.json | 4 +- packages/eslint-plugin/package.json | 10 +- .../components/ApiKeyListContainer.tsx | 7 +- packages/features/ee/package.json | 2 +- .../features/ee/payments/server/stripe.ts | 18 + .../workflows/components/WorkflowListPage.tsx | 7 +- .../components/WorkflowStepContainer.tsx | 32 +- packages/features/package.json | 3 +- packages/lib/CalendarService.ts | 3 +- packages/lib/package.json | 16 +- packages/lib/telemetry.ts | 4 +- packages/prisma/package.json | 11 +- packages/trpc/package.json | 10 +- .../trpc/server/routers/viewer/apiKeys.tsx | 14 +- packages/ui/form/fields.tsx | 16 +- packages/ui/package.json | 10 +- packages/ui/v2/form/fields.tsx | 10 +- tests/config/playwright.config.ts | 18 +- yarn.lock | 8856 ++++++++--------- 58 files changed, 4297 insertions(+), 5163 deletions(-) create mode 100644 apps/web/test/jest-resolver.js create mode 100644 apps/web/test/jest-setup.js create mode 100644 packages/features/ee/payments/server/stripe.ts diff --git a/README.md b/README.md index 524c084b2a..903074aba6 100644 --- a/README.md +++ b/README.md @@ -64,9 +64,6 @@ That's where Cal.com comes in. Self-hosted or hosted by us. White-label by desig Cal.com - The open source Calendly alternative | Product Hunt Cal.com - The open source Calendly alternative | Product Hunt Cal.com - The open source Calendly alternative | Product Hunt - - - ### Built With - [Next.js](https://nextjs.org/) @@ -266,13 +263,13 @@ yarn workspace @calcom/web playwright-report ### Docker -The Docker configuration for Cal is an effort powered by people within the community. +The Docker configuration for Cal is an effort powered by people within the community. If you want to contribute to the Docker repository, [reply here](https://github.com/calcom/docker/discussions/32). The Docker configuration can be found [in our docker repository](https://github.com/calcom/docker). -Issues with Docker? Find your answer or open a new discussion [here](https://github.com/calcom/docker/discussions) to ask the community. +Issues with Docker? Find your answer or open a new discussion [here](https://github.com/calcom/docker/discussions) to ask the community. Cal.com, Inc. does not provide official support for Docker, but we will accept fixes and documentation. Use at your own risk. @@ -328,7 +325,7 @@ We have a list of [help wanted](https://github.com/orgs/calcom/projects/1/views/ 10. The key will be created and you will be redirected back to the Credentials page. Select the newly generated client ID under OAuth 2.0 Client IDs. 11. Select Download JSON. Copy the contents of this file and paste the entire JSON string in the .env file as the value for GOOGLE_API_CREDENTIALS key. -#### *Adding google calendar to Cal.com App Store* +#### _Adding google calendar to Cal.com App Store_ After adding Google credentials, you can now Google Calendar App to the app store. You can repopulate the App store by running @@ -344,6 +341,7 @@ following 1. Add extra redirect URL `/api/auth/callback/google` 1. Under 'OAuth concent screen', click "PUBLISH APP" + ### Obtaining Microsoft Graph Client ID and Secret 1. Open [Azure App Registration](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps) and select New registration diff --git a/apps/api b/apps/api index 7560fdbfc5..1de91a5124 160000 --- a/apps/api +++ b/apps/api @@ -1 +1 @@ -Subproject commit 7560fdbfc576f7a72ac840f9bef2b9fb92cbe3a3 +Subproject commit 1de91a5124012d62d23eaf30d95c801ee6d7117d diff --git a/apps/console b/apps/console index 544ded3da4..2fc5d892a0 160000 --- a/apps/console +++ b/apps/console @@ -1 +1 @@ -Subproject commit 544ded3da4649b01ea90b21cddf9830ce62adcb8 +Subproject commit 2fc5d892a062f0013fcc7c12b94d8f7159724867 diff --git a/apps/docs/package.json b/apps/docs/package.json index 1d92c74ee2..6e5dd7c364 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -17,14 +17,14 @@ "license": "MIT", "dependencies": { "iframe-resizer-react": "^1.1.0", - "next": "^12.2.0", + "next": "^12.2.5", "nextra": "^1.1.0", "nextra-theme-docs": "^1.2.2", - "react": "^18.1.0", - "react-dom": "^18.1.0" + "react": "^18.2.0", + "react-dom": "^18.2.0" }, "devDependencies": { "@calcom/config": "*", - "eslint": "^8.15.0" + "eslint": "^8.20.0" } } diff --git a/apps/storybook/package.json b/apps/storybook/package.json index e95ad2231e..f38c2f130e 100644 --- a/apps/storybook/package.json +++ b/apps/storybook/package.json @@ -23,16 +23,16 @@ "@radix-ui/react-radio-group": "^0.1.1", "@radix-ui/react-slider": "^0.1.1", "@radix-ui/react-switch": "^0.1.1", - "@radix-ui/react-tooltip": "^0.1.0", - "next": "^12.2.0", + "@radix-ui/react-tooltip": "^1.0.0", + "next": "^12.2.5", "next-transpile-modules": "^9.0.0", - "react": "18.1.0", - "react-dom": "18.1.0", - "react-feather": "^2.0.9", - "react-hot-toast": "^2.2.0" + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-feather": "^2.0.10", + "react-hot-toast": "^2.3.0" }, "devDependencies": { - "@babel/core": "^7.18.6", + "@babel/core": "^7.18.9", "@calcom/config": "*", "@storybook/addon-a11y": "^6.5.9", "@storybook/addon-actions": "^6.5.9", @@ -44,19 +44,19 @@ "@storybook/manager-webpack5": "^6.5.9", "@storybook/react": "^6.5.9", "@types/node": "16.9.1", - "@types/react": "18.0.9", + "@types/react": "^18.0.9", "@types/react-dom": "18.0.4", "autoprefixer": "^10.4.7", "babel-loader": "^8.2.5", - "chromatic": "^6.6.4", - "eslint": "^8.15.0", + "chromatic": "^6.7.1", + "eslint": "^8.20.0", "postcss": "^8.4.13", "postcss-loader": "^7.0.0", "storybook-addon-designs": "^6.3.1", "storybook-addon-next": "^1.6.7", - "tailwindcss": "^3.1.3", + "tailwindcss": "^3.1.6", "tsconfig-paths-webpack-plugin": "^3.5.2", - "typescript": "^4.6.4" + "typescript": "^4.7.4" }, "readme": "ERROR: No README data found!", "_id": "@calcom/storybook@0.1.0" diff --git a/apps/swagger/package.json b/apps/swagger/package.json index 8378d2e0e3..0ba03fe335 100644 --- a/apps/swagger/package.json +++ b/apps/swagger/package.json @@ -12,18 +12,18 @@ "start": "PORT=4200 next start" }, "dependencies": { - "highlight.js": "^11.5.1", + "highlight.js": "^11.6.0", "isarray": "2.0.5", - "next": "12.2.0", + "next": "^12.2.5", "openapi-snippet": "^0.13.0", - "react": "18.1.0", - "react-dom": "18.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "swagger-ui-react": "4.11.1" }, "devDependencies": { "@types/node": "16.9.1", - "@types/react": "18.0.9", + "@types/react": "^18.0.9", "@types/react-dom": "18.0.4", - "typescript": "4.6.4" + "typescript": "^4.7.4" } } diff --git a/apps/web/jest.config.ts b/apps/web/jest.config.ts index 92fe6767d7..584c18e7d1 100644 --- a/apps/web/jest.config.ts +++ b/apps/web/jest.config.ts @@ -3,6 +3,7 @@ import type { Config } from "@jest/types"; const config: Config.InitialOptions = { verbose: true, roots: [""], + setupFiles: ["/test/jest-setup.js"], testMatch: ["**/test/lib/**/*.(spec|test).(ts|tsx|js)"], testPathIgnorePatterns: ["/.next", "/playwright/"], transform: { @@ -10,6 +11,7 @@ const config: Config.InitialOptions = { }, transformIgnorePatterns: ["/node_modules/", "^.+\\.module\\.(css|sass|scss)$"], testEnvironment: "jsdom", + resolver: `/test/jest-resolver.js`, moduleNameMapper: { "^@components(.*)$": "/components$1", "^@lib(.*)$": "/lib$1", diff --git a/apps/web/lib/app-providers.tsx b/apps/web/lib/app-providers.tsx index ead9218664..c682bc501d 100644 --- a/apps/web/lib/app-providers.tsx +++ b/apps/web/lib/app-providers.tsx @@ -1,3 +1,4 @@ +import { TooltipProvider } from "@radix-ui/react-tooltip"; import { SessionProvider } from "next-auth/react"; import { EventCollectionProvider } from "next-collect/client"; import { appWithTranslation } from "next-i18next"; @@ -72,14 +73,16 @@ const AppProviders = (props: AppPropsWithChildren) => { - {/* color-scheme makes background:transparent not work which is required by embed. We need to ensure next-theme adds color-scheme to `body` instead of `html`(https://github.com/pacocoursey/next-themes/blob/main/src/index.tsx#L74). Once that's done we can enable color-scheme support */} - - {props.children} - + + {/* color-scheme makes background:transparent not work which is required by embed. We need to ensure next-theme adds color-scheme to `body` instead of `html`(https://github.com/pacocoursey/next-themes/blob/main/src/index.tsx#L74). Once that's done we can enable color-scheme support */} + + {props.children} + + diff --git a/apps/web/middleware.ts b/apps/web/middleware.ts index fb9815d3e2..ef1f74195f 100644 --- a/apps/web/middleware.ts +++ b/apps/web/middleware.ts @@ -1,5 +1,4 @@ import { collectEvents } from "next-collect/server"; -// eslint-disable-next-line @next/next/no-server-import-in-page import { NextMiddleware, NextResponse } from "next/server"; import { extendEventData, nextCollectBasicSettings } from "@calcom/lib/telemetry"; diff --git a/apps/web/package.json b/apps/web/package.json index 68951c367d..49ef3266b0 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -47,9 +47,9 @@ "@hookform/error-message": "^2.0.0", "@hookform/resolvers": "^2.9.7", "@metamask/providers": "^8.1.1", - "@next-auth/prisma-adapter": "^1.0.3", + "@next-auth/prisma-adapter": "^1.0.4", "@next/bundle-analyzer": "12.1.6", - "@radix-ui/react-avatar": "^0.1.0", + "@radix-ui/react-avatar": "^0.1.4", "@radix-ui/react-collapsible": "^0.1.0", "@radix-ui/react-dialog": "^0.1.0", "@radix-ui/react-dropdown-menu": "^0.1.1", @@ -58,106 +58,108 @@ "@radix-ui/react-slider": "^0.1.1", "@radix-ui/react-switch": "^0.1.1", "@radix-ui/react-toggle-group": "^0.1.5", - "@radix-ui/react-tooltip": "^0.1.0", - "@stripe/react-stripe-js": "^1.8.0", - "@stripe/stripe-js": "^1.29.0", + "@radix-ui/react-tooltip": "^1.0.0", + "@stripe/react-stripe-js": "^1.9.0", + "@stripe/stripe-js": "^1.34.0", "@vercel/edge-functions-ui": "^0.2.1", "@wojtekmaj/react-daterange-picker": "^3.3.1", "accept-language-parser": "^1.5.0", - "async": "^3.2.1", + "async": "^3.2.4", "bcryptjs": "^2.4.3", "classnames": "^2.3.1", + "dotenv-cli": "^6.0.0", "googleapis": "^84.0.0", "gray-matter": "^4.0.3", "handlebars": "^4.7.7", "ical.js": "^1.4.0", - "ics": "^2.31.0", + "ics": "^2.37.0", "jimp": "^0.16.1", "kbar": "^0.1.0-beta.36", - "libphonenumber-js": "^1.9.53", + "libphonenumber-js": "^1.10.10", "lodash": "^4.17.21", "markdown-it": "^13.0.1", "memory-cache": "^0.2.0", - "micro": "^9.3.4", + "micro": "^9.4.0", "mime-types": "^2.1.35", - "next": "^12.2.0", + "next": "^12.2.5", "next-auth": "^4.10.3", "next-axiom": "^0.10.0", - "next-collect": "^0.2.0", - "next-i18next": "^11.0.0", - "next-mdx-remote": "^4.0.3", + "next-collect": "^0.2.1", + "next-i18next": "^11.3.0", + "next-mdx-remote": "^4.1.0", "next-seo": "^4.26.0", "next-themes": "^0.2.0", "next-transpile-modules": "^9.0.0", "nock": "^13.2.8", - "nodemailer": "^6.7.5", + "nodemailer": "^6.7.7", "otplib": "^12.0.1", - "qrcode": "^1.5.0", - "react": "^18.1.0", + "qrcode": "^1.5.1", + "react": "^18.2.0", "react-colorful": "^5.5.1", "react-date-picker": "^8.3.6", "react-digit-input": "^2.1.0", - "react-dom": "^18.1.0", + "react-dom": "^18.2.0", "react-easy-crop": "^3.5.2", "react-feather": "^2.0.10", - "react-hook-form": "^7.31.1", - "react-hot-toast": "^2.1.0", + "react-hook-form": "^7.33.1", + "react-hot-toast": "^2.3.0", "react-intl": "^5.25.1", "react-live-chat-loader": "^2.7.3", "react-multi-email": "^0.5.3", - "react-phone-number-input": "^3.1.52", - "react-query": "^3.39.0", - "react-select": "^5.3.2", - "react-timezone-select": "^1.3.1", + "react-phone-number-input": "^3.2.6", + "react-query": "^3.39.2", + "react-select": "^5.4.0", + "react-timezone-select": "^1.3.2", "react-use-intercom": "1.5.1", "react-virtualized-auto-sizer": "^1.0.6", "react-window": "^1.8.7", - "rrule": "^2.6.9", + "rrule": "^2.7.1", "short-uuid": "^4.2.0", - "stripe": "^9.1.0", + "stripe": "^9.16.0", "superjson": "1.9.1", "uuid": "^8.3.2", - "web3": "^1.7.3", - "zod": "^3.16.0" + "web3": "^1.7.4", + "zod": "^3.18.0" }, "devDependencies": { - "@babel/core": "^7.17.10", + "@babel/core": "^7.18.9", "@calcom/config": "*", "@calcom/types": "*", "@microsoft/microsoft-graph-types-beta": "0.15.0-preview", - "@playwright/test": "^1.22.1", + "@playwright/test": "^1.25.0", "@types/accept-language-parser": "1.5.2", - "@types/async": "^3.2.13", + "@types/async": "^3.2.15", "@types/bcryptjs": "^2.4.2", "@types/glidejs__glide": "^3.4.2", - "@types/jest": "^27.5.1", + "@types/jest": "^28.1.7", "@types/lodash": "^4.14.182", "@types/markdown-it": "^12.2.3", "@types/memory-cache": "^0.2.2", - "@types/micro": "7.3.6", + "@types/micro": "7.3.7", "@types/mime-types": "^2.1.1", "@types/module-alias": "^2.0.1", "@types/node": "16.9.1", "@types/nodemailer": "^6.4.4", "@types/qrcode": "^1.4.1", - "@types/react": "18.0.9", - "@types/react-phone-number-input": "^3.0.13", + "@types/react": "^18.0.9", + "@types/react-phone-number-input": "^3.0.14", "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", "@types/stripe": "^8.0.417", "@types/uuid": "8.3.1", "autoprefixer": "^10.4.7", - "babel-jest": "^27.3.1", - "env-cmd": "10.1.0", - "eslint": "^8.16.0", - "jest": "^26.0.0", + "babel-jest": "^28.1.0", + "env-cmd": "^10.1.0", + "eslint": "^8.20.0", + "jest": "^28.1.0", + "jest-environment-jsdom": "^28.1.3", "jest-mock-extended": "^2.0.7", "mockdate": "^3.0.5", "module-alias": "^2.2.2", "postcss": "^8.4.13", - "tailwindcss": "^3.1.3", - "ts-jest": "^26.0.0", - "ts-node": "^10.6.0", - "typescript": "^4.6.4" + "tailwindcss": "^3.1.6", + "ts-jest": "^28.0.8", + "ts-node": "^10.9.1", + "typescript": "^4.7.4" } } diff --git a/apps/web/pages/api/book/event.ts b/apps/web/pages/api/book/event.ts index 627b579c50..035c768098 100644 --- a/apps/web/pages/api/book/event.ts +++ b/apps/web/pages/api/book/event.ts @@ -1,7 +1,7 @@ import { BookingStatus, Credential, Prisma, SchedulingType, WebhookTriggerEvents } from "@prisma/client"; import async from "async"; import type { NextApiRequest } from "next"; -import rrule from "rrule"; +import { RRule } from "rrule"; import short from "short-uuid"; import { v5 as uuidv5 } from "uuid"; @@ -201,7 +201,7 @@ async function ensureAvailableUsers( try { if (eventType.recurringEvent) { const recurringEvent = parseRecurringEvent(eventType.recurringEvent); - const allBookingDates = new rrule({ dtstart: new Date(input.dateFrom), ...recurringEvent }).all(); + const allBookingDates = new RRule({ dtstart: new Date(input.dateFrom), ...recurringEvent }).all(); // Go through each date for the recurring event and check if each one's availability // DONE: Decreased computational complexity from O(2^n) to O(n) by refactoring this loop to stop // running at the first unavailable time. diff --git a/apps/web/pages/auth/sso/[provider].tsx b/apps/web/pages/auth/sso/[provider].tsx index 3331177549..bef4fbcdb9 100644 --- a/apps/web/pages/auth/sso/[provider].tsx +++ b/apps/web/pages/auth/sso/[provider].tsx @@ -3,8 +3,8 @@ import { signIn } from "next-auth/react"; import { useRouter } from "next/router"; import { useEffect } from "react"; -import stripe from "@calcom/app-store/stripepayment/lib/server"; import { getPremiumPlanPrice } from "@calcom/app-store/stripepayment/lib/utils"; +import stripe from "@calcom/features/ee/payments/server/stripe"; import { checkUsername } from "@calcom/lib/server/checkUsername"; import prisma from "@calcom/prisma"; diff --git a/apps/web/pages/success.tsx b/apps/web/pages/success.tsx index 811a69dd8b..a2a5c18575 100644 --- a/apps/web/pages/success.tsx +++ b/apps/web/pages/success.tsx @@ -6,7 +6,7 @@ import { useSession } from "next-auth/react"; import Link from "next/link"; import { useRouter } from "next/router"; import { useEffect, useRef, useState } from "react"; -import RRule from "rrule"; +import { RRule } from "rrule"; import { z } from "zod"; import dayjs from "@calcom/dayjs"; diff --git a/apps/web/playwright/change-username.test.ts b/apps/web/playwright/change-username.test.ts index 5ef6ec38f3..0426e8c570 100644 --- a/apps/web/playwright/change-username.test.ts +++ b/apps/web/playwright/change-username.test.ts @@ -1,9 +1,9 @@ import { expect } from "@playwright/test"; import { UserPlan } from "@prisma/client"; -import stripe from "@calcom/app-store/stripepayment/lib/server"; import { getFreePlanPrice, getProPlanPrice } from "@calcom/app-store/stripepayment/lib/utils"; import dayjs from "@calcom/dayjs"; +import stripe from "@calcom/features/ee/payments/server/stripe"; import { WEBAPP_URL } from "@calcom/lib/constants"; import prisma from "@calcom/prisma"; @@ -40,9 +40,11 @@ test.describe("Change username on settings", () => { // Click on save button await page.click("[data-testid=update-username-btn-desktop]"); - await page.click("[data-testid=save-username]"); - // eslint-disable-next-line playwright/no-wait-for-timeout - await page.waitForTimeout(400); + await Promise.all([ + page.waitForResponse("**/viewer.updateProfile*"), + page.click("[data-testid=save-username]"), + ]); + const newUpdatedUser = await prisma.user.findFirst({ where: { id: user.id, diff --git a/apps/web/playwright/embed-code-generator.test.ts b/apps/web/playwright/embed-code-generator.test.ts index 954a504bf6..059cbcd7df 100644 --- a/apps/web/playwright/embed-code-generator.test.ts +++ b/apps/web/playwright/embed-code-generator.test.ts @@ -15,7 +15,8 @@ async function clickEmbedButton(page: Page) { const embedButton = page.locator("[data-testid=embed]"); const embedUrl = await embedButton.getAttribute("data-test-embed-url"); embedButton.click(); - return embedUrl; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return embedUrl!; } async function clickFirstEventTypeEmbedButton(page: Page) { @@ -158,25 +159,29 @@ test.describe("Embed Code Generator Tests", () => { }); test.describe("Event Type Edit Page", () => { - //TODO: Instead of hardcoding, browse through actual events, as this ID might change in future - const sixtyMinProEventId = "6"; test.beforeEach(async ({ page }) => { - await page.goto(`/event-types/${sixtyMinProEventId}`); + await page.goto(`/event-types`); + await Promise.all([ + page.locator('[href*="/event-types/"]').first().click(), + page.waitForNavigation({ + url: (url) => url.pathname.startsWith("/event-types/"), + }), + ]); }); test("open Embed Dialog for the Event Type", async ({ page }) => { + const basePage = new URL(page.url()).pathname; const embedUrl = await clickEmbedButton(page); - await expectToBeNavigatingToEmbedTypesDialog(page, { embedUrl, - basePage: `/event-types/${sixtyMinProEventId}`, + basePage, }); chooseEmbedType(page, "inline"); await expectToBeNavigatingToEmbedCodeAndPreviewDialog(page, { embedUrl, - basePage: `/event-types/${sixtyMinProEventId}`, + basePage, embedType: "inline", }); @@ -188,7 +193,7 @@ test.describe("Embed Code Generator Tests", () => { await expectToContainValidPreviewIframe(page, { embedType: "inline", - calLink: "pro/60min", + calLink: decodeURIComponent(embedUrl), }); }); }); diff --git a/apps/web/test/jest-resolver.js b/apps/web/test/jest-resolver.js new file mode 100644 index 0000000000..d5fb532a29 --- /dev/null +++ b/apps/web/test/jest-resolver.js @@ -0,0 +1,15 @@ +module.exports = (path, options) => { + // Call the defaultResolver, so we leverage its cache, error handling, etc. + return options.defaultResolver(path, { + ...options, + // Use packageFilter to process parsed `package.json` before the resolution (see https://www.npmjs.com/package/resolve#resolveid-opts-cb) + packageFilter: (pkg) => { + // See https://github.com/microsoft/accessibility-insights-web/blob/40416a4ae6b91baf43102f58e069eff787de4de2/src/tests/common/resolver.js + if (pkg.name === "uuid" || pkg.name === "nanoid") { + delete pkg["exports"]; + delete pkg["module"]; + } + return pkg; + }, + }); +}; diff --git a/apps/web/test/jest-setup.js b/apps/web/test/jest-setup.js new file mode 100644 index 0000000000..fa5c44868d --- /dev/null +++ b/apps/web/test/jest-setup.js @@ -0,0 +1,6 @@ +// This is a workaround for https://github.com/jsdom/jsdom/issues/2524#issuecomment-902027138 + +// See https://github.com/microsoft/accessibility-insights-web/blob/40416a4ae6b91baf43102f58e069eff787de4de2/src/tests/unit/jest-setup.ts +const { TextEncoder, TextDecoder } = require("util"); +global.TextEncoder = TextEncoder; +global.TextDecoder = TextDecoder; diff --git a/apps/website b/apps/website index 5261b5839e..a70f2f2b70 160000 --- a/apps/website +++ b/apps/website @@ -1 +1 @@ -Subproject commit 5261b5839e277012a50903cd5b110f9e89923e91 +Subproject commit a70f2f2b7018813313f8cf8520f3832e737d400c diff --git a/package.json b/package.json index e56b4b66e2..14175e2dcd 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "pre-commit": "lint-staged", "predev": "echo 'Checking env files'", "prepare": "husky install", - "prisma": "yarn dotenv -e .env yarn workspace @calcom/prisma prisma", + "prisma": "yarn workspace @calcom/prisma prisma", "start": "turbo run start --scope=\"@calcom/web\"", "test-e2e": "turbo run test --scope=\"@calcom/web\" && yarn turbo run test-e2e --scope=\"@calcom/web\" --concurrency=1", "test-playwright": "yarn playwright test --config=tests/config/playwright.config.ts", @@ -55,17 +55,16 @@ "devDependencies": { "@snaplet/copycat": "^0.3.0", "dotenv-checker": "^1.1.5", - "dotenv-cli": "^6.0.0", "husky": "^8.0.1", - "lint-staged": "^12.4.1", - "prettier": "^2.5.1" + "lint-staged": "^12.5.0", + "prettier": "^2.7.1" }, "dependencies": { "turbo": "^1.4.3" }, "resolutions": { "@types/node": "16.9.1", - "@types/react": "18.0.9", + "@types/react": "^18.0.9", "@types/react-dom": "18.0.4" }, "lint-staged": { @@ -85,5 +84,13 @@ "npm": ">=7.0.0", "yarn": ">=1.19.0 < 2.0.0" }, - "packageManager": "yarn@1.22.17" + "prisma": { + "schema": "packages/prisma/schema.prisma", + "seed": "ts-node --transpile-only ./packages/prisma/seed.ts" + }, + "packageManager": "yarn@1.22.17", + "syncpack": { + "filter": "^(?!@calcom).*", + "semverRange": "" + } } diff --git a/packages/app-store-cli/package.json b/packages/app-store-cli/package.json index 9c40f2cf8f..7105ed3520 100644 --- a/packages/app-store-cli/package.json +++ b/packages/app-store-cli/package.json @@ -22,14 +22,14 @@ "ink-select-input": "^4.2.1", "ink-text-input": "^4.0.3", "meow": "^9.0.0", - "react": "18.1.0" + "react": "^18.2.0" }, "devDependencies": { "chokidar": "^3.5.3", "@types/react": "^18.0.9", - "eslint-plugin-react": "^7.30.0", - "eslint-plugin-react-hooks": "^4.5.0", - "ts-node": "^10.6.0", - "typescript": "^4.6.4" + "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react-hooks": "^4.6.0", + "ts-node": "^10.9.1", + "typescript": "^4.7.4" } } diff --git a/packages/app-store-cli/readme.md b/packages/app-store-cli/readme.md index 2e1ac52692..9205595d9a 100644 --- a/packages/app-store-cli/readme.md +++ b/packages/app-store-cli/readme.md @@ -23,7 +23,7 @@ If we rename all existing apps to their slug names, we can remove type and then - Don't override icon.svg - For Video Apps - Update app-store/locations.ts - - _metadata.ts should have locationType and locationLabel props. + - \_metadata.ts should have locationType and locationLabel props. - Merge app-store:watch and app-store commands, introduce app-store --watch - Allow inputs in non interactive way as well - That would allow easily copy pasting commands. - An app created through CLI should be able to completely skip API validation for testing purposes. Credentials should be created with no API specified specific to the app. It would allow us to test any app end to end not worrying about the corresponding API endpoint. diff --git a/packages/app-store/applecalendar/package.json b/packages/app-store/applecalendar/package.json index 332cea9731..9146bda74c 100644 --- a/packages/app-store/applecalendar/package.json +++ b/packages/app-store/applecalendar/package.json @@ -7,7 +7,7 @@ "description": "Apple calendar runs both the macOS and iOS mobile operating systems. Offering online cloud backup of calendars using Appleā€™s iCloud service, it can sync with Google Calendar and Microsoft Exchange Server. Users can schedule events in their day that include time, location, duration, and extra notes.", "dependencies": { "@calcom/prisma": "*", - "react-hook-form": "^7.31.1" + "react-hook-form": "^7.33.1" }, "devDependencies": { "@calcom/types": "*" diff --git a/packages/app-store/caldavcalendar/package.json b/packages/app-store/caldavcalendar/package.json index f5bc0ea760..ec39fb6c8d 100644 --- a/packages/app-store/caldavcalendar/package.json +++ b/packages/app-store/caldavcalendar/package.json @@ -10,7 +10,7 @@ "@calcom/lib": "*", "@calcom/prisma": "*", "@calcom/ui": "*", - "react-hook-form": "^7.31.1" + "react-hook-form": "^7.33.1" }, "devDependencies": { "@calcom/types": "*" diff --git a/packages/app-store/closecomothercalendar/package.json b/packages/app-store/closecomothercalendar/package.json index e1e07d322e..5bf42917e0 100644 --- a/packages/app-store/closecomothercalendar/package.json +++ b/packages/app-store/closecomothercalendar/package.json @@ -15,8 +15,8 @@ }, "devDependencies": { "@calcom/types": "*", - "@types/jest": "^26.0.0", - "jest": "^26.0.0", - "ts-jest": "^26.0.0" + "@types/jest": "^28.1.7", + "jest": "^28.1.0", + "ts-jest": "^28.0.8" } } diff --git a/packages/app-store/exchange2013calendar/package.json b/packages/app-store/exchange2013calendar/package.json index 0d299adf34..8b39da538e 100644 --- a/packages/app-store/exchange2013calendar/package.json +++ b/packages/app-store/exchange2013calendar/package.json @@ -9,7 +9,7 @@ "@calcom/lib": "*", "@calcom/prisma": "*", "@calcom/ui": "*", - "react-hook-form": "^7.31.1", + "react-hook-form": "^7.33.1", "ews-javascript-api": "^0.11.0" }, "devDependencies": { diff --git a/packages/app-store/exchange2016calendar/package.json b/packages/app-store/exchange2016calendar/package.json index be3b18ee89..508ca62878 100644 --- a/packages/app-store/exchange2016calendar/package.json +++ b/packages/app-store/exchange2016calendar/package.json @@ -9,7 +9,7 @@ "@calcom/lib": "*", "@calcom/prisma": "*", "@calcom/ui": "*", - "react-hook-form": "^7.31.1", + "react-hook-form": "^7.33.1", "ews-javascript-api": "^0.11.0" }, "devDependencies": { diff --git a/packages/app-store/slackmessaging/package.json b/packages/app-store/slackmessaging/package.json index 7e357377f8..de148aca60 100644 --- a/packages/app-store/slackmessaging/package.json +++ b/packages/app-store/slackmessaging/package.json @@ -7,9 +7,9 @@ "description": "A business communication platform that includes persistent chat rooms (channels), private groups and direct messaging.", "dependencies": { "@calcom/prisma": "*", - "@slack/web-api": "^6.7.0", - "slack-block-builder": "^2.5.0", - "zod": "^3.16.0" + "@slack/web-api": "^6.7.2", + "slack-block-builder": "^2.6.0", + "zod": "^3.18.0" }, "devDependencies": { "@calcom/types": "*" diff --git a/packages/app-store/stripepayment/package.json b/packages/app-store/stripepayment/package.json index 1a8f9d7d95..30a7de1510 100644 --- a/packages/app-store/stripepayment/package.json +++ b/packages/app-store/stripepayment/package.json @@ -17,14 +17,14 @@ "@calcom/lib": "*", "@calcom/prisma": "*", "@calcom/types": "*", - "@stripe/react-stripe-js": "^1.8.0", - "@stripe/stripe-js": "^1.29.0", - "stripe": "^9.1.0", + "@stripe/react-stripe-js": "^1.9.0", + "@stripe/stripe-js": "^1.34.0", + "stripe": "^9.16.0", "uuid": "^8.3.2", - "zod": "^3.16.0" + "zod": "^3.18.0" }, "devDependencies": { "@calcom/types": "*", - "ts-node": "^10.6.0" + "ts-node": "^10.9.1" } } diff --git a/packages/app-store/vital/package.json b/packages/app-store/vital/package.json index f395909bc9..a70b6451d8 100644 --- a/packages/app-store/vital/package.json +++ b/packages/app-store/vital/package.json @@ -7,7 +7,7 @@ "description": "Connect your health data or wearables to trigger actions on your calendar.", "dependencies": { "@calcom/prisma": "*", - "@tryvital/vital-node": "^1.3.6", + "@tryvital/vital-node": "^1.4.1", "queue": "^6.0.2" }, "devDependencies": { diff --git a/packages/config/package.json b/packages/config/package.json index c335a0b90c..74583b5444 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -10,23 +10,23 @@ ], "dependencies": { "@calcom/eslint-plugin-eslint": "*", - "eslint-config-next": "^12.1.6", + "eslint-config-next": "^12.2.3", "eslint-config-prettier": "^8.5.0", "eslint-config-turbo": "^0.0.3", "eslint-plugin-playwright": "^0.9.0", - "eslint-plugin-prettier": "^4.0.0" + "eslint-plugin-prettier": "^4.2.1" }, "devDependencies": { - "@tailwindcss/forms": "^0.5.1", + "@tailwindcss/forms": "^0.5.2", "@tailwindcss/line-clamp": "^0.4.0", - "@tailwindcss/typography": "^0.5.2", + "@tailwindcss/typography": "^0.5.4", "@trivago/prettier-plugin-sort-imports": "3.2.0", - "@typescript-eslint/eslint-plugin": "^5.25.0", - "@typescript-eslint/parser": "^5.25.0", - "eslint": "^8.15.0", - "prettier": "^2.5.1", - "prettier-plugin-tailwindcss": "^0.1.11", - "tailwindcss": "^3.1.3", - "typescript": "^4.6.4" + "@typescript-eslint/eslint-plugin": "^5.31.0", + "@typescript-eslint/parser": "^5.31.0", + "eslint": "^8.20.0", + "prettier": "^2.7.1", + "prettier-plugin-tailwindcss": "^0.1.13", + "tailwindcss": "^3.1.6", + "typescript": "^4.7.4" } } diff --git a/packages/core/package.json b/packages/core/package.json index 39fd7e89a4..c46ffee0e9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -14,7 +14,7 @@ "@calcom/dayjs": "*", "@calcom/lib": "*", "ical.js": "^1.4.0", - "ics": "^2.31.0", + "ics": "^2.37.0", "uuid": "^8.3.2" }, "devDependencies": { diff --git a/packages/dayjs/index.ts b/packages/dayjs/index.ts index 27b233c9e2..0f576d4103 100644 --- a/packages/dayjs/index.ts +++ b/packages/dayjs/index.ts @@ -1,6 +1,31 @@ /* eslint-disable @calcom/eslint/deprecated-imports */ import dayjs from "dayjs"; import dayjsBusinessTime from "dayjs-business-days2"; +import "dayjs/locale/ar"; +import "dayjs/locale/bg"; +import "dayjs/locale/cs"; +import "dayjs/locale/de"; +import "dayjs/locale/es"; +import "dayjs/locale/es-mx"; +import "dayjs/locale/fr"; +import "dayjs/locale/he"; +import "dayjs/locale/hu"; +import "dayjs/locale/it"; +import "dayjs/locale/ja"; +import "dayjs/locale/ko"; +import "dayjs/locale/nl"; +import "dayjs/locale/pl"; +import "dayjs/locale/pt"; +import "dayjs/locale/pt-br"; +import "dayjs/locale/ro"; +import "dayjs/locale/ru"; +import "dayjs/locale/sr"; +import "dayjs/locale/sv"; +import "dayjs/locale/tr"; +import "dayjs/locale/uk"; +import "dayjs/locale/vi"; +import "dayjs/locale/zh-cn"; +import "dayjs/locale/zh-tw"; import customParseFormat from "dayjs/plugin/customParseFormat"; import isBetween from "dayjs/plugin/isBetween"; import isToday from "dayjs/plugin/isToday"; @@ -20,32 +45,6 @@ dayjs.extend(timeZone); dayjs.extend(toArray); dayjs.extend(utc); -require('dayjs/locale/ar'); -require('dayjs/locale/bg'); -require('dayjs/locale/cs'); -require('dayjs/locale/de'); -require('dayjs/locale/es'); -require('dayjs/locale/es-mx'); -require('dayjs/locale/fr'); -require('dayjs/locale/he'); -require('dayjs/locale/hu'); -require('dayjs/locale/it'); -require('dayjs/locale/ja'); -require('dayjs/locale/ko'); -require('dayjs/locale/nl'); -require('dayjs/locale/pl'); -require('dayjs/locale/pt'); -require('dayjs/locale/pt-br'); -require('dayjs/locale/ro'); -require('dayjs/locale/ru'); -require('dayjs/locale/sr'); -require('dayjs/locale/sv'); -require('dayjs/locale/tr'); -require('dayjs/locale/uk'); -require('dayjs/locale/vi'); -require('dayjs/locale/zh-tw'); -require('dayjs/locale/zh-cn'); - export type Dayjs = dayjs.Dayjs; export type { ConfigType } from "dayjs"; diff --git a/packages/dayjs/package.json b/packages/dayjs/package.json index 621e93ac8c..77a9a60dcd 100644 --- a/packages/dayjs/package.json +++ b/packages/dayjs/package.json @@ -4,7 +4,7 @@ "version": "1.0.0", "main": "./index.ts", "dependencies": { - "dayjs": "^1.11.2", - "dayjs-business-days2": "^1.1.0" + "dayjs": "1.11.2", + "dayjs-business-days2": "1.1.0" } } diff --git a/packages/emails/package.json b/packages/emails/package.json index 3c514f96c7..2dffc3a680 100644 --- a/packages/emails/package.json +++ b/packages/emails/package.json @@ -7,8 +7,8 @@ "dependencies": { "@calcom/dayjs": "*", "@calcom/lib": "*", - "next-i18next": "^11.0.0", - "rrule": "^2.6.9" + "next-i18next": "^11.3.0", + "rrule": "^2.7.1" }, "devDependencies": { "@calcom/types": "*" diff --git a/packages/emails/src/components/WhenInfo.tsx b/packages/emails/src/components/WhenInfo.tsx index 7318ad5d67..3f08a78afc 100644 --- a/packages/emails/src/components/WhenInfo.tsx +++ b/packages/emails/src/components/WhenInfo.tsx @@ -1,5 +1,5 @@ import { TFunction } from "next-i18next"; -import rrule from "rrule"; +import { RRule } from "rrule"; import dayjs from "@calcom/dayjs"; import { getEveryFreqFor } from "@calcom/lib/recurringStrings"; @@ -11,7 +11,7 @@ import { Info } from "./Info"; function getRecurringWhen({ calEvent }: { calEvent: CalendarEvent }) { if (calEvent.recurringEvent) { const t = calEvent.attendees[0].language.translate; - const rruleOptions = new rrule(calEvent.recurringEvent).options; + const rruleOptions = new RRule(calEvent.recurringEvent).options; const recurringEvent: RecurringEvent = { freq: rruleOptions.freq, count: rruleOptions.count || 1, diff --git a/packages/emails/templates/attendee-scheduled-email.ts b/packages/emails/templates/attendee-scheduled-email.ts index 6d8d8cb8e1..d2f5559d47 100644 --- a/packages/emails/templates/attendee-scheduled-email.ts +++ b/packages/emails/templates/attendee-scheduled-email.ts @@ -1,6 +1,6 @@ import { createEvent, DateArray } from "ics"; import { TFunction } from "next-i18next"; -import rrule from "rrule"; +import { RRule } from "rrule"; import dayjs from "@calcom/dayjs"; import { getRichDescription } from "@calcom/lib/CalEventParser"; @@ -27,7 +27,7 @@ export default class AttendeeScheduledEmail extends BaseEmail { let recurrenceRule: string | undefined = undefined; if (this.calEvent.recurringEvent?.count) { // ics appends "RRULE:" already, so removing it from RRule generated string - recurrenceRule = new rrule(this.calEvent.recurringEvent).toString().replace("RRULE:", ""); + recurrenceRule = new RRule(this.calEvent.recurringEvent).toString().replace("RRULE:", ""); } const icsEvent = createEvent({ start: dayjs(this.calEvent.startTime) diff --git a/packages/emails/templates/organizer-scheduled-email.ts b/packages/emails/templates/organizer-scheduled-email.ts index c4447f8acf..6de4cc46c0 100644 --- a/packages/emails/templates/organizer-scheduled-email.ts +++ b/packages/emails/templates/organizer-scheduled-email.ts @@ -1,6 +1,6 @@ import { createEvent, DateArray, Person } from "ics"; import { TFunction } from "next-i18next"; -import rrule from "rrule"; +import { RRule } from "rrule"; import dayjs from "@calcom/dayjs"; import { getRichDescription } from "@calcom/lib/CalEventParser"; @@ -27,7 +27,7 @@ export default class OrganizerScheduledEmail extends BaseEmail { let recurrenceRule: string | undefined = undefined; if (this.calEvent.recurringEvent?.count) { // ics appends "RRULE:" already, so removing it from RRule generated string - recurrenceRule = new rrule(this.calEvent.recurringEvent).toString().replace("RRULE:", ""); + recurrenceRule = new RRule(this.calEvent.recurringEvent).toString().replace("RRULE:", ""); } const icsEvent = createEvent({ start: dayjs(this.calEvent.startTime) diff --git a/packages/embeds/embed-core/package.json b/packages/embeds/embed-core/package.json index 81a8307306..851d766dcb 100644 --- a/packages/embeds/embed-core/package.json +++ b/packages/embeds/embed-core/package.json @@ -43,12 +43,11 @@ }, "devDependencies": { "autoprefixer": "^10.4.7", - "eslint": "^8.15.0", + "eslint": "^8.20.0", "npm-run-all": "^4.1.5", "postcss": "^8.4.13", - "typescript": "^4.6.4", - "vite": "^2.9.9", - "tailwindcss": "^3.1.3" - }, - "dependencies": {} + "typescript": "^4.7.4", + "vite": "^2.9.14", + "tailwindcss": "^3.1.6" + } } diff --git a/packages/embeds/embed-react/package.json b/packages/embeds/embed-react/package.json index a6206a7b89..99a758609e 100644 --- a/packages/embeds/embed-react/package.json +++ b/packages/embeds/embed-react/package.json @@ -28,8 +28,8 @@ "module": "./dist/Cal.es.js", "types": "./dist/index.d.ts", "peerDependencies": { - "react": "^18.1.0", - "react-dom": "^18.1.0" + "react": "^18.2.0", + "react-dom": "^18.2.0" }, "files": [ "dist" @@ -41,13 +41,13 @@ } }, "devDependencies": { - "@types/react": "18.0.9", + "@types/react": "^18.0.9", "@types/react-dom": "18.0.4", "@vitejs/plugin-react": "^1.3.2", - "eslint": "^8.15.0", + "eslint": "^8.20.0", "npm-run-all": "^4.1.5", - "typescript": "^4.6.4", - "vite": "^2.9.9" + "typescript": "^4.7.4", + "vite": "^2.9.14" }, "dependencies": { "@calcom/embed-core": "*", diff --git a/packages/embeds/embed-snippet/package.json b/packages/embeds/embed-snippet/package.json index 770723c1f0..bf7371100c 100644 --- a/packages/embeds/embed-snippet/package.json +++ b/packages/embeds/embed-snippet/package.json @@ -24,8 +24,8 @@ ], "types": "./dist/index.d.ts", "devDependencies": { - "eslint": "^8.15.0", - "typescript": "^4.6.4" + "eslint": "^8.20.0", + "typescript": "^4.7.4" }, "dependencies": { "@calcom/embed-core": "*" diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 8e4f475aed..c70c6984f3 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -4,11 +4,11 @@ "version": "0.1.0", "main": "./src/index.js", "dependencies": { - "@typescript-eslint/parser": "^5.25.0", - "@typescript-eslint/utils": "^5.30.5", - "eslint": "^8.15.0", - "ts-node": "^10.6.0", - "typescript": "^4.6.4" + "@typescript-eslint/parser": "^5.31.0", + "@typescript-eslint/utils": "^5.31.0", + "eslint": "^8.20.0", + "ts-node": "^10.9.1", + "typescript": "^4.7.4" }, "devDependencies": { "@types/eslint": "^8.4.5" diff --git a/packages/features/ee/api-keys/components/ApiKeyListContainer.tsx b/packages/features/ee/api-keys/components/ApiKeyListContainer.tsx index de8ad67d22..fd6e60f2a0 100644 --- a/packages/features/ee/api-keys/components/ApiKeyListContainer.tsx +++ b/packages/features/ee/api-keys/components/ApiKeyListContainer.tsx @@ -28,7 +28,12 @@ function ApiKeyListContainer() { title={t("api_keys")} subtitle={t("api_keys_subtitle")} actions={ -