Compare commits

...

2 Commits

Author SHA1 Message Date
review-agent-prime[bot]
7484a99ad5 Edit packages/lib/customerio.ts 2024-01-30 10:46:07 +00:00
Matthias Nannt
bcf039030e feat: add support for customer-io formbricks users sync 2024-01-30 11:42:13 +01:00
5 changed files with 43 additions and 1 deletions

View File

@@ -137,3 +137,7 @@ ENTERPRISE_LICENSE_KEY=
# set to 1 to skip onboarding for new users
# ONBOARDING_DISABLED=1
# Send new users to customer.io
# CUSTOMER_IO_API_KEY=
# CUSTOMER_IO_SITE_ID=

View File

@@ -0,0 +1,27 @@
import { TUser } from "@formbricks/types/user";
import { env } from "./env.mjs";
export const createCustomerIoCustomer = async (user: TUser) => {
if (!env.CUSTOMER_IO_SITE_ID || !env.CUSTOMER_IO_API_KEY) {
return;
}
try {
// existing code...
} catch (error) {
console.error("Error sending user to CustomerIO:", error);
throw error;
}
},
body: JSON.stringify({
id: user.id,
email: user.email,
}),
});
if (res.status !== 200) {
console.log("Error sending user to CustomerIO:", await res.text());
}
} catch (error) {
console.log("error sending user to CustomerIO:", error);
}
};

View File

@@ -7,6 +7,9 @@ export const env = createEnv({
* Will throw if you access these variables on the client.
*/
server: {
CUSTOMER_IO_API_KEY: z.string().optional(),
CUSTOMER_IO_SITE_ID: z.string().optional(),
NEXT_PUBLIC_POSTHOG_API_HOST: z.string().optional(),
WEBAPP_URL: z.string().url().optional(),
DATABASE_URL: z.string().url(),
ENCRYPTION_KEY: z.string().length(64).or(z.string().length(32)),
@@ -96,6 +99,8 @@ export const env = createEnv({
* 💡 You'll get type errors if not all variables from `server` & `client` are included here.
*/
runtimeEnv: {
CUSTOMER_IO_API_KEY: process.env.CUSTOMER_IO_API_KEY,
CUSTOMER_IO_SITE_ID: process.env.CUSTOMER_IO_SITE_ID,
WEBAPP_URL: process.env.WEBAPP_URL,
DATABASE_URL: process.env.DATABASE_URL,
ENCRYPTION_KEY: process.env.ENCRYPTION_KEY,
@@ -146,7 +151,7 @@ export const env = createEnv({
AZUREAD_CLIENT_ID: process.env.AZUREAD_CLIENT_ID,
AZUREAD_CLIENT_SECRET: process.env.AZUREAD_CLIENT_SECRET,
AZUREAD_TENANT_ID: process.env.AZUREAD_TENANT_ID,
AIR_TABLE_CLIENT_ID: process.env.AIR_TABLE_CLIENT_ID,
AIRTABLE_CLIENT_ID: process.env.AIRTABLE_CLIENT_ID,
DEFAULT_TEAM_ID: process.env.DEFAULT_TEAM_ID,
DEFAULT_TEAM_ROLE: process.env.DEFAULT_TEAM_ROLE,
ONBOARDING_DISABLED: process.env.ONBOARDING_DISABLED,

View File

@@ -11,6 +11,7 @@ import { TMembership } from "@formbricks/types/memberships";
import { TUser, TUserCreateInput, TUserUpdateInput, ZUser, ZUserUpdateInput } from "@formbricks/types/user";
import { SERVICES_REVALIDATION_INTERVAL } from "../constants";
import { createCustomerIoCustomer } from "../customerio";
import { updateMembership } from "../membership/service";
import { deleteTeam } from "../team/service";
import { formatDateFields } from "../utils/datetime";
@@ -171,6 +172,9 @@ export const createUser = async (data: TUserCreateInput): Promise<TUser> => {
id: user.id,
});
// send new user customer.io to customer.io
createCustomerIoCustomer(user);
return user;
};

View File

@@ -66,6 +66,8 @@
"DEFAULT_TEAM_ROLE",
"ONBOARDING_DISABLED",
"CRON_SECRET",
"CUSTOMER_IO_API_KEY",
"CUSTOMER_IO_SITE_ID",
"DEBUG",
"EMAIL_VERIFICATION_DISABLED",
"ENCRYPTION_KEY",