Skip to main content
Glama

mcp-google-sheets

create-user.ts5.69 kB
import { Property, createAction, } from '@activepieces/pieces-framework'; import { AuthenticationType, HttpMethod, httpClient, propsValidation, } from '@activepieces/pieces-common'; import { heartbeatAuth } from '../..'; import { z } from 'zod'; export const heartBeatCreateUser = createAction({ auth: heartbeatAuth, name: 'heartbeat_create_user', displayName: 'Create User', description: 'Create a new user in a Heartbeat community', props: { name: Property.ShortText({ displayName: 'Name', description: "The user's full name", required: true, }), email: Property.ShortText({ displayName: 'Email', description: "The user's email. Must be unique to the community", required: true, }), role_id: Property.Dropdown({ displayName: 'Roles', description: 'The role the user should have', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) return { disabled: true, options: [], placeholder: 'Please select a connection', }; const response = await httpClient.sendRequest< { id: string; name: string; }[] >({ method: HttpMethod.GET, url: `https://api.heartbeat.chat/v0/roles`, headers: { 'content-type': 'application/json', }, authentication: { type: AuthenticationType.BEARER_TOKEN, token: auth as string, }, body: {}, }); if (response.status === 200) { return { options: response.body.map((role) => ({ label: role.name, value: role.id, })), disabled: false, }; } return { options: [], disabled: true, placeholder: 'Error loading roles.', }; }, }), group_ids: Property.MultiSelectDropdown({ displayName: 'Groups', description: 'A list of the ids of the groups that the user should belong to.', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) return { disabled: true, options: [], placeholder: 'Error loading groups', }; const response = await httpClient.sendRequest< { id: string; name: string; }[] >({ method: HttpMethod.GET, url: `https://api.heartbeat.chat/v0/groups`, headers: { 'content-type': 'application/json', }, authentication: { type: AuthenticationType.BEARER_TOKEN, token: auth as string, }, body: {}, }); if (response.status === 200) { return { options: response.body.map((group) => ({ label: group.name, value: group.id, })), disabled: false, }; } return { disabled: true, options: [], placeholder: 'Error loading groups', }; }, }), profile_picture: Property.ShortText({ displayName: 'Profile Picture', description: 'A Data URI scheme in the JPG, GIF, or PNG format. Ensure you use the proper content type (image/jpeg, image/png, image/gif) that matches the image data being provided', required: false, }), bio: Property.ShortText({ displayName: 'Bio', description: "The user's bio", required: false, }), status: Property.ShortText({ displayName: 'Status', description: "The user's status", required: false, }), linkedin: Property.LongText({ displayName: 'LinkedIn', description: "A link to the user's LinkedIn profile", required: false, }), twitter: Property.LongText({ displayName: 'Twitter', description: "A link to the user's Twitter profile", required: false, }), instagram: Property.LongText({ displayName: 'Instagram', description: "A link to the user's Instagram profile", required: false, }), create_introduction_thread: Property.Checkbox({ displayName: 'Create introduction thread', description: 'If true and a value for bio is provided, an introduction thread for the user will be created in the channel designated for introductions in your community settings.', required: false, }), }, async run({ auth, propsValue }) { await propsValidation.validateZod(propsValue, { email: z.string().email(), linkedin: z.string().url().optional(), twitter: z.string().url().optional(), instagram: z.string().url().optional() }); const response = await httpClient.sendRequest({ method: HttpMethod.PUT, url: `https://api.heartbeat.chat/v0/users`, headers: { 'content-type': 'application/json', }, authentication: { type: AuthenticationType.BEARER_TOKEN, token: auth as string, }, body: { name: propsValue.name, email: propsValue.email, roleID: propsValue.role_id, groupIDs: propsValue.group_ids, profilePicture: propsValue.profile_picture, bio: propsValue.bio, status: propsValue.status, linkedin: propsValue.linkedin, twitter: propsValue.twitter, instagram: propsValue.instagram, createIntroductionThread: propsValue.create_introduction_thread, }, }); return response.body; }, });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server