)}
diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json
index a63b4a5fee..a379a87a6f 100644
--- a/apps/web/public/static/locales/en/common.json
+++ b/apps/web/public/static/locales/en/common.json
@@ -1026,5 +1026,6 @@
"variable_format": "Variable format",
"custom_input_as_variable_info": "Ignore all special characters of the additonal input label (use only letters and numbers), use uppercase for all letters and replace whitespaces with underscores.",
"using_additional_inputs_as_variables": "How to use additional inputs as variables?",
- "missing_connected_calendar": "No calendar connected"
+ "missing_connected_calendar": "No calendar connected",
+ "set_ping_link": "Set Ping link"
}
diff --git a/packages/app-store-cli/readme.md b/packages/app-store-cli/readme.md
index 215cc3152b..2e1ac52692 100644
--- a/packages/app-store-cli/readme.md
+++ b/packages/app-store-cli/readme.md
@@ -17,14 +17,15 @@ If we rename all existing apps to their slug names, we can remove type and then
## TODO
-- Beta Release
- - Show a warning somewhere that app directory must not be renamed manually, edit command must be used.
- - edit command should ask for slug and verify if it exists
- Improvements
- - Prefill fields in edit command
+ - Edit command Improvements
+ - Prefill fields in edit command -> It allows only that content to change which user wants to change.
+ - Don't override icon.svg
+ - For Video Apps
+ - Update app-store/locations.ts
+ - _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.
- - App already exists check. Ask user to run edit/regenerate command
- 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.
- Require assets path relative to app dir.
diff --git a/packages/app-store-cli/src/CliApp.tsx b/packages/app-store-cli/src/CliApp.tsx
index 8e2ddc2d13..4504eb124c 100644
--- a/packages/app-store-cli/src/CliApp.tsx
+++ b/packages/app-store-cli/src/CliApp.tsx
@@ -63,6 +63,10 @@ const BaseAppFork = {
}
updatePackageJson({ slug, appDirPath, appDescription });
+ const categoryToVariantMap = {
+ video: "conferencing",
+ };
+
let config = {
"/*": "Don't modify slug - If required, do it using cli edit command",
name: appName,
@@ -73,7 +77,7 @@ const BaseAppFork = {
imageSrc: `/api/app-store/${slug}/icon.svg`,
logo: `/api/app-store/${slug}/icon.svg`,
url: `https://cal.com/apps/${slug}`,
- variant: category,
+ variant: categoryToVariantMap[category] || category,
categories: [category],
publisher: publisherName,
email: publisherEmail,
diff --git a/packages/app-store/apps.browser.generated.tsx b/packages/app-store/apps.browser.generated.tsx
index cad5c3b913..9791ae2d9d 100644
--- a/packages/app-store/apps.browser.generated.tsx
+++ b/packages/app-store/apps.browser.generated.tsx
@@ -21,6 +21,7 @@ import { metadata as larkcalendar_meta } from "./larkcalendar/_metadata";
import { metadata as metamask_meta } from "./metamask/_metadata";
import { metadata as office365calendar_meta } from "./office365calendar/_metadata";
import { metadata as office365video_meta } from "./office365video/_metadata";
+import { metadata as ping_meta } from "./ping/_metadata";
import { metadata as riverside_meta } from "./riverside/_metadata";
import { metadata as slackmessaging_meta } from "./slackmessaging/_metadata";
import { metadata as stripepayment_meta } from "./stripepayment/_metadata";
@@ -49,6 +50,7 @@ export const appStoreMetadata = {
metamask: metamask_meta,
office365calendar: office365calendar_meta,
office365video: office365video_meta,
+ ping: ping_meta,
riverside: riverside_meta,
slackmessaging: slackmessaging_meta,
stripepayment: stripepayment_meta,
diff --git a/packages/app-store/apps.server.generated.ts b/packages/app-store/apps.server.generated.ts
index fd003ee35d..ca5561e575 100644
--- a/packages/app-store/apps.server.generated.ts
+++ b/packages/app-store/apps.server.generated.ts
@@ -18,6 +18,7 @@ export const apiHandlers = {
metamask: import("./metamask/api"),
office365calendar: import("./office365calendar/api"),
office365video: import("./office365video/api"),
+ ping: import("./ping/api"),
riverside: import("./riverside/api"),
slackmessaging: import("./slackmessaging/api"),
stripepayment: import("./stripepayment/api"),
diff --git a/packages/app-store/locations.ts b/packages/app-store/locations.ts
index f8a9ec7289..be3b6585d4 100644
--- a/packages/app-store/locations.ts
+++ b/packages/app-store/locations.ts
@@ -19,6 +19,7 @@ export enum AppStoreLocationType {
Whereby = "integrations:whereby_video",
Around = "integrations:around_video",
Riverside = "integrations:riverside_video",
+ Ping = "integrations:ping_video",
}
export type LocationObject = {
diff --git a/packages/app-store/ping/README.mdx b/packages/app-store/ping/README.mdx
new file mode 100644
index 0000000000..af0e679517
--- /dev/null
+++ b/packages/app-store/ping/README.mdx
@@ -0,0 +1,10 @@
+---
+items:
+ - /api/app-store/ping/1.png
+ - /api/app-store/ping/2.png
+ - /api/app-store/ping/3.png
+---
+
+
+
+Ping.gg makes high quality video collaborations easier than ever. Think "Zoom for streamers and creators". Join a call in 3 clicks, manage audio and video like a pro, and copy-paste your guests straight into OBS
diff --git a/packages/app-store/ping/_metadata.ts b/packages/app-store/ping/_metadata.ts
new file mode 100644
index 0000000000..69f864df41
--- /dev/null
+++ b/packages/app-store/ping/_metadata.ts
@@ -0,0 +1,19 @@
+import { LocationType } from "@calcom/core/location";
+import type { App } from "@calcom/types/App";
+
+import config from "./config.json";
+
+export const metadata = {
+ category: "other",
+ // FIXME: Currently for an app to be shown as installed, it must have this variable set. Either hardcoded or if it depends on some env variable, that should be checked here
+ installed: true,
+ rating: 0,
+ reviews: 0,
+ trending: true,
+ verified: true,
+ locationType: LocationType.Ping,
+ locationLabel: "Ping.gg",
+ ...config,
+} as App;
+
+export default metadata;
diff --git a/packages/app-store/ping/api/_getAdd.ts b/packages/app-store/ping/api/_getAdd.ts
new file mode 100644
index 0000000000..4a6e1b4ba8
--- /dev/null
+++ b/packages/app-store/ping/api/_getAdd.ts
@@ -0,0 +1,25 @@
+import type { NextApiRequest, NextApiResponse } from "next";
+
+import { defaultResponder } from "@calcom/lib/server";
+
+import checkSession from "../../_utils/auth";
+import { checkInstalled, createDefaultInstallation } from "../../_utils/installation";
+import appConfig from "../config.json";
+
+export async function getHandler(req: NextApiRequest, res: NextApiResponse) {
+ const session = checkSession(req);
+ const slug = appConfig.slug;
+ const appType = appConfig.type;
+
+ await checkInstalled(slug, session.user.id);
+ await createDefaultInstallation({
+ appType,
+ userId: session.user.id,
+ slug,
+ key: {},
+ });
+
+ return { url: "/apps/installed" };
+}
+
+export default defaultResponder(getHandler);
diff --git a/packages/app-store/ping/api/add.ts b/packages/app-store/ping/api/add.ts
new file mode 100644
index 0000000000..912126e232
--- /dev/null
+++ b/packages/app-store/ping/api/add.ts
@@ -0,0 +1,5 @@
+import { defaultHandler } from "@calcom/lib/server";
+
+export default defaultHandler({
+ GET: import("./_getAdd"),
+});
diff --git a/packages/app-store/ping/api/index.ts b/packages/app-store/ping/api/index.ts
new file mode 100644
index 0000000000..4c0d2ead01
--- /dev/null
+++ b/packages/app-store/ping/api/index.ts
@@ -0,0 +1 @@
+export { default as add } from "./add";
diff --git a/packages/app-store/ping/config.json b/packages/app-store/ping/config.json
new file mode 100644
index 0000000000..068945376c
--- /dev/null
+++ b/packages/app-store/ping/config.json
@@ -0,0 +1,16 @@
+{
+ "/*": "Don't modify slug - If required, do it using cli edit command",
+ "name": "Ping.gg",
+ "title": "Ping.gg",
+ "slug": "ping",
+ "type": "ping_video",
+ "imageSrc": "/api/app-store/ping/icon.svg",
+ "logo": "/api/app-store/ping/icon.svg",
+ "url": "https://ping.gg",
+ "variant": "conferencing",
+ "categories": ["video"],
+ "publisher": "Ping.gg",
+ "email": "support@ping.gg",
+ "description": "Ping.gg makes high quality video collaborations easier than ever. Think 'Zoom for streamers and creators'. Join a call in 3 clicks, manage audio and video like a pro, and copy-paste your guests straight into OBS",
+ "__createdUsingCli": true
+}
diff --git a/packages/app-store/ping/index.ts b/packages/app-store/ping/index.ts
new file mode 100644
index 0000000000..a698d1f5c5
--- /dev/null
+++ b/packages/app-store/ping/index.ts
@@ -0,0 +1,3 @@
+export * as api from "./api";
+export * as components from "./components";
+export { metadata } from "./_metadata";
diff --git a/packages/app-store/ping/package.json b/packages/app-store/ping/package.json
new file mode 100644
index 0000000000..9b4b409ca8
--- /dev/null
+++ b/packages/app-store/ping/package.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://json.schemastore.org/package.json",
+ "private": true,
+ "name": "@calcom/ping",
+ "version": "0.0.0",
+ "main": "./index.ts",
+ "description": "Ping.gg makes high quality video collaborations easier than ever. Think 'Zoom for streamers and creators'. Join a call in 3 clicks, manage audio and video like a pro, and copy-paste your guests straight into OBS",
+ "dependencies": {
+ "@calcom/lib": "*"
+ },
+ "devDependencies": {
+ "@calcom/types": "*"
+ }
+}
diff --git a/packages/app-store/ping/static/1.png b/packages/app-store/ping/static/1.png
new file mode 100644
index 0000000000..be59824852
Binary files /dev/null and b/packages/app-store/ping/static/1.png differ
diff --git a/packages/app-store/ping/static/2.png b/packages/app-store/ping/static/2.png
new file mode 100644
index 0000000000..801b5d49fd
Binary files /dev/null and b/packages/app-store/ping/static/2.png differ
diff --git a/packages/app-store/ping/static/3.png b/packages/app-store/ping/static/3.png
new file mode 100644
index 0000000000..dcdda95a07
Binary files /dev/null and b/packages/app-store/ping/static/3.png differ
diff --git a/packages/app-store/ping/static/icon.svg b/packages/app-store/ping/static/icon.svg
new file mode 100644
index 0000000000..920953f704
--- /dev/null
+++ b/packages/app-store/ping/static/icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/prisma/seed-app-store.config.json b/packages/prisma/seed-app-store.config.json
index c76df81da4..9eee17e3e2 100644
--- a/packages/prisma/seed-app-store.config.json
+++ b/packages/prisma/seed-app-store.config.json
@@ -25,5 +25,12 @@
"categories": ["video"],
"slug": "riverside",
"type": "riverside_video"
+ },
+ {
+ "/*": "This file is auto-generated and managed by `yarn app-store`. Don't edit manually but it is to be committed",
+ "dirName": "ping",
+ "categories": ["video"],
+ "slug": "ping",
+ "type": "ping_video"
}
]