Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
8b4868b
initial generation with event-type-location-video-static template
nangelina Aug 23, 2025
db81e14
implement kyzon-space conferencing app. renamed type from kyzon-space…
nangelina Sep 1, 2025
05721a6
add explicit return type to getKyzonAppKeys to enforce the parsed typ…
nangelina Sep 1, 2025
9614550
select only required fields from prisma
nangelina Sep 1, 2025
fba2dad
fix "X-API-Key" header casing inconsistency
nangelina Sep 1, 2025
4d7a24c
use WEBAPP_URL const instead of process.env.NEXT_PUBLIC_WEBAPP_URL fo…
nangelina Sep 1, 2025
0fc375e
await setDefaultConferencingApp before redirecting to avoid race cond…
nangelina Sep 1, 2025
92c6c2e
Rename deleteMeeting param for clarity: uid → meetingId
nangelina Sep 1, 2025
c3db869
make sure cal's event start and end times are converted to ISO string…
nangelina Sep 1, 2025
7fd2d99
refactor add.ts handler function to include NextApiResponse and retur…
nangelina Sep 1, 2025
772438b
remove logging errors to console in callback.ts to avoid leaking secrets
nangelina Sep 1, 2025
8406e07
Refactor kyzonCredentialKeySchema: Tighten the schema and coerce IDs …
nangelina Sep 1, 2025
1e36d66
Refactor getKyzonCredentialKey: Adjust expiry_date calculation to acc…
nangelina Sep 1, 2025
4b12cfd
Guard missing refresh_token before calling provider
nangelina Sep 1, 2025
55e37e5
Instead of logging the whole error object, only log select fields to …
nangelina Sep 1, 2025
1f2d47c
Add a timeout to kyzonAxiosInstance to ensure all external API calls …
nangelina Sep 1, 2025
985acfc
Harden expiry check against malformed tokens
nangelina Sep 1, 2025
94e023c
Use URLSearchParams instead of legacy querystring.stringify.
nangelina Sep 1, 2025
f27e812
Instead of logging the whole error object, only log select fields to …
nangelina Sep 1, 2025
e9a84e6
Previously, in 1e36d6658e78c11f59b81fa4c483b946a4f5b74f, we applied a…
nangelina Sep 1, 2025
69969d4
add descriptive user-agent to kyzonAxiosInstance, so KYZON can whitel…
nangelina Sep 1, 2025
9f90f65
implement wrapper function: authenticatedRequest. this will retry a f…
nangelina Sep 1, 2025
6e5a4a5
De-duplicate concurrent refreshes per credential.
nangelina Sep 1, 2025
67a28d9
change config of kyzon space call to have wait room enabled
nangelina Sep 1, 2025
b9f5b5e
fix: rename kyzon-space app directory to kyzonspacevideo
nangelina Sep 1, 2025
6d11fdd
change config of kyzon space call to have wait room enabled
nangelina Sep 1, 2025
fa4bc51
Merge branch 'main' into angelina/kyzon-space-app
Devanshusharma2005 Sep 2, 2025
8476621
better user-facing error messages
nangelina Sep 2, 2025
7dae7e7
write tests
nangelina Sep 2, 2025
df3e101
Merge branch 'main' into angelina/kyzon-space-app
Devanshusharma2005 Sep 4, 2025
7ce50ab
Merge branch 'main' into angelina/kyzon-space-app
Devanshusharma2005 Sep 9, 2025
330e7ab
Merge branch 'main' into angelina/kyzon-space-app
Devanshusharma2005 Sep 12, 2025
50b3b6f
Merge remote-tracking branch 'calcom/main' into angelina/kyzon-space-app
nangelina Sep 16, 2025
230764e
Merge branch 'main' into angelina/kyzon-space-app
Devanshusharma2005 Sep 22, 2025
3682ccf
Merge branch 'main' into angelina/kyzon-space-app
romitg2 Feb 11, 2026
e4d2a51
Merge remote-tracking branch 'upstream/main' into angelina/kyzon-spac…
romitg2 Feb 20, 2026
f75c696
Merge remote-tracking branch 'upstream/main' into angelina/kyzon-spac…
romitg2 Feb 20, 2026
be3c9e1
fix: remove logging sensitive information (full response body & autho…
nangelina Feb 22, 2026
926f666
fix: update token_type schema to allow case-insensitive 'Bearer' string
nangelina Feb 22, 2026
216d9b3
fix: prevent null/undefined coercing to strings for user_id and team_id
nangelina Feb 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/app-store/apps.keys-schemas.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { appKeysSchema as insihts_zod_ts } from "./insihts/zod";
import { appKeysSchema as intercom_zod_ts } from "./intercom/zod";
import { appKeysSchema as jelly_zod_ts } from "./jelly/zod";
import { appKeysSchema as jitsivideo_zod_ts } from "./jitsivideo/zod";
import { appKeysSchema as kyzonspacevideo_zod_ts } from "./kyzonspacevideo/zod";
import { appKeysSchema as larkcalendar_zod_ts } from "./larkcalendar/zod";
import { appKeysSchema as make_zod_ts } from "./make/zod";
import { appKeysSchema as matomo_zod_ts } from "./matomo/zod";
Expand Down Expand Up @@ -73,6 +74,7 @@ export const appKeysSchemas = {
intercom: intercom_zod_ts,
jelly: jelly_zod_ts,
jitsivideo: jitsivideo_zod_ts,
kyzonspacevideo: kyzonspacevideo_zod_ts,
larkcalendar: larkcalendar_zod_ts,
make: make_zod_ts,
matomo: matomo_zod_ts,
Expand Down
2 changes: 2 additions & 0 deletions packages/app-store/apps.metadata.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ import insihts_config_json from "./insihts/config.json";
import intercom_config_json from "./intercom/config.json";
import jelly_config_json from "./jelly/config.json";
import { metadata as jitsivideo__metadata_ts } from "./jitsivideo/_metadata";
import kyzonspacevideo_config_json from "./kyzonspacevideo/config.json";
import { metadata as larkcalendar__metadata_ts } from "./larkcalendar/_metadata";
import lindy_config_json from "./lindy/config.json";
import linear_config_json from "./linear/config.json";
Expand Down Expand Up @@ -163,6 +164,7 @@ export const appStoreMetadata = {
intercom: intercom_config_json,
jelly: jelly_config_json,
jitsivideo: jitsivideo__metadata_ts,
kyzonspacevideo: kyzonspacevideo_config_json,
larkcalendar: larkcalendar__metadata_ts,
lindy: lindy_config_json,
linear: linear_config_json,
Expand Down
2 changes: 2 additions & 0 deletions packages/app-store/apps.schemas.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { appDataSchema as insihts_zod_ts } from "./insihts/zod";
import { appDataSchema as intercom_zod_ts } from "./intercom/zod";
import { appDataSchema as jelly_zod_ts } from "./jelly/zod";
import { appDataSchema as jitsivideo_zod_ts } from "./jitsivideo/zod";
import { appDataSchema as kyzonspacevideo_zod_ts } from "./kyzonspacevideo/zod";
import { appDataSchema as larkcalendar_zod_ts } from "./larkcalendar/zod";
import { appDataSchema as make_zod_ts } from "./make/zod";
import { appDataSchema as matomo_zod_ts } from "./matomo/zod";
Expand Down Expand Up @@ -73,6 +74,7 @@ export const appDataSchemas = {
intercom: intercom_zod_ts,
jelly: jelly_zod_ts,
jitsivideo: jitsivideo_zod_ts,
kyzonspacevideo: kyzonspacevideo_zod_ts,
larkcalendar: larkcalendar_zod_ts,
make: make_zod_ts,
matomo: matomo_zod_ts,
Expand Down
1 change: 1 addition & 0 deletions packages/app-store/apps.server.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const apiHandlers = {
intercom: import("./intercom/api"),
jelly: import("./jelly/api"),
jitsivideo: import("./jitsivideo/api"),
kyzonspacevideo: import("./kyzonspacevideo/api"),
larkcalendar: import("./larkcalendar/api"),
linear: import("./linear/api"),
make: import("./make/api"),
Expand Down
2 changes: 2 additions & 0 deletions packages/app-store/bookerApps.metadata.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { metadata as huddle01video__metadata_ts } from "./huddle01video/_metadat
import insihts_config_json from "./insihts/config.json";
import jelly_config_json from "./jelly/config.json";
import { metadata as jitsivideo__metadata_ts } from "./jitsivideo/_metadata";
import kyzonspacevideo_config_json from "./kyzonspacevideo/config.json";
import matomo_config_json from "./matomo/config.json";
import metapixel_config_json from "./metapixel/config.json";
import mirotalk_config_json from "./mirotalk/config.json";
Expand Down Expand Up @@ -65,6 +66,7 @@ export const appStoreMetadata = {
insihts: insihts_config_json,
jelly: jelly_config_json,
jitsivideo: jitsivideo__metadata_ts,
kyzonspacevideo: kyzonspacevideo_config_json,
matomo: matomo_config_json,
metapixel: metapixel_config_json,
mirotalk: mirotalk_config_json,
Expand Down
9 changes: 9 additions & 0 deletions packages/app-store/kyzonspacevideo/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
items:
- 1.png
- 2.png
- 3.png
- 4.png
---

{DESCRIPTION}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't need to add description . You can remove this.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I removed {DESCRIPTION}, my app's description disappears from the app store page, so I think we do still need it

38 changes: 38 additions & 0 deletions packages/app-store/kyzonspacevideo/api/add.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import type { NextApiRequest, NextApiResponse } from "next";

import { WEBAPP_URL } from "@calcom/lib/constants";
import { defaultHandler } from "@calcom/lib/server/defaultHandler";
import { defaultResponder } from "@calcom/lib/server/defaultResponder";

import { encodeOAuthState } from "../../_utils/oauth/encodeOAuthState";
import config from "../config.json";
import { kyzonBaseUrl } from "../lib/axios";
import { getKyzonAppKeys } from "../lib/getKyzonAppKeys";

async function handler(req: NextApiRequest, res: NextApiResponse) {
// Get user
const user = req?.session?.user;
if (!user) {
return res.status(401).json({ message: "Unauthorized" });
}

const { client_id } = await getKyzonAppKeys();
const state = encodeOAuthState(req);

const query = new URLSearchParams();
query.set("response_type", "code");
query.set("client_id", client_id);
query.set("redirect_uri", `${WEBAPP_URL}/api/integrations/${config.slug}/callback`);
query.set("scope", "meetings:write calendar:write profile:read");
if (state) {
query.set("state", state);
}

const url = `${kyzonBaseUrl}/oauth/authorize?${query.toString()}`;

return res.status(200).json({ url });
}

export default defaultHandler({
GET: Promise.resolve({ default: defaultResponder(handler) }),
});
Loading
Loading