🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/calendly

Package Overview
Dependencies
Maintainers
4
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/calendly - npm Package Compare versions

Comparing version
0.1.2
to
0.3.0
+44
dist/calendly.d.ts
/**
* RobinPath Calendly Module (Node port)
*
* Calendly API v2 — users, organizations, event types, scheduled events,
* invitees, single-use scheduling links, and webhook subscriptions. Mirror
* of packages/php/calendly/src/index.php for the WordPress plugin; shares
* the same credential contract, metadata shape, and error taxonomy so the
* visual editor can render both identically.
*
* Authentication is a Bearer token on every request. Calendly supports two
* kinds of tokens:
* 1. Personal Access Token (PAT) — long-lived, scoped to a single user.
* Create one at calendly.com/integrations/api_webhooks (requires a
* Professional / Teams / Enterprise plan). PATs are JWTs and begin
* with `eyJ`.
* 2. OAuth 2.0 access token — short-lived, issued via the OAuth
* authorization-code flow.
*
* Every method takes a credential slug as its first argument; the module
* resolves the stored token at call time via the injected ModuleHost.
*
* --- URI quirk -----------------------------------------------------------
* Calendly identifies most resources by URI rather than bare UUID
* (e.g. `https://api.calendly.com/users/AAAAAAAAAAAAAAAA`). Many list
* endpoints require a `user`, `organization`, or `event_type` URI as
* a query parameter.
*
* For convenience, every `*Uri` argument in this module accepts either:
* - a full URI: `https://api.calendly.com/users/AAAAAAAAAAAAAAAA`
* - a bare UUID: `AAAAAAAAAAAAAAAA`
* The module upgrades bare UUIDs to the full URI form internally, using
* a hint from the parameter name (`userUri` → `/users/`, `eventUri` →
* `/scheduled_events/`, etc.) before sending the request.
*
* Credential type declared by this module:
* - calendly : { token }
*/
import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core";
export declare function configureCalendly(h: ModuleHost): void;
export declare const CalendlyFunctions: Record<string, BuiltinHandler>;
export declare const CalendlyCredentialTypes: CredentialTypeSchema[];
export declare const CalendlyFunctionMetadata: Record<string, FunctionMetadata>;
export declare const CalendlyModuleMetadata: ModuleMetadata;
//# sourceMappingURL=calendly.d.ts.map
{"version":3,"file":"calendly.d.ts","sourceRoot":"","sources":["../src/calendly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAezB,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAErD;AAslBD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAqB5D,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,EAkBzD,CAAC;AAkFF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAofrE,CAAC;AAIF,eAAO,MAAM,sBAAsB,EAAE,cAiDpC,CAAC"}
/**
* RobinPath Calendly Module (Node port)
*
* Calendly API v2 — users, organizations, event types, scheduled events,
* invitees, single-use scheduling links, and webhook subscriptions. Mirror
* of packages/php/calendly/src/index.php for the WordPress plugin; shares
* the same credential contract, metadata shape, and error taxonomy so the
* visual editor can render both identically.
*
* Authentication is a Bearer token on every request. Calendly supports two
* kinds of tokens:
* 1. Personal Access Token (PAT) — long-lived, scoped to a single user.
* Create one at calendly.com/integrations/api_webhooks (requires a
* Professional / Teams / Enterprise plan). PATs are JWTs and begin
* with `eyJ`.
* 2. OAuth 2.0 access token — short-lived, issued via the OAuth
* authorization-code flow.
*
* Every method takes a credential slug as its first argument; the module
* resolves the stored token at call time via the injected ModuleHost.
*
* --- URI quirk -----------------------------------------------------------
* Calendly identifies most resources by URI rather than bare UUID
* (e.g. `https://api.calendly.com/users/AAAAAAAAAAAAAAAA`). Many list
* endpoints require a `user`, `organization`, or `event_type` URI as
* a query parameter.
*
* For convenience, every `*Uri` argument in this module accepts either:
* - a full URI: `https://api.calendly.com/users/AAAAAAAAAAAAAAAA`
* - a bare UUID: `AAAAAAAAAAAAAAAA`
* The module upgrades bare UUIDs to the full URI form internally, using
* a hint from the parameter name (`userUri` → `/users/`, `eventUri` →
* `/scheduled_events/`, etc.) before sending the request.
*
* Credential type declared by this module:
* - calendly : { token }
*/
// ── Module-local state (populated by configure hook) ────────────────────
const state = {};
function host() {
if (!state.host) {
throw new Error("Calendly module not initialized. Pass the adapter to rp.installModule() so its configure() hook runs first.");
}
return state.host;
}
export function configureCalendly(h) {
state.host = h;
}
// ── Constants ──────────────────────────────────────────────────────────
const API_BASE = "https://api.calendly.com/";
const CREDENTIAL_TYPE = "calendly";
function errorReturn(error, code, extra = {}) {
return { error, code, ...extra };
}
function isErrorReturn(v) {
return !!v && typeof v === "object" && "error" in v;
}
function isPlainObject(v) {
return !!v && typeof v === "object" && !Array.isArray(v);
}
// ── Credential resolver (mirrors PHP resolveToken) ─────────────────────
async function resolveToken(credentialSlug) {
if (!credentialSlug) {
return errorReturn("Credential slug is required.", "credential_not_found");
}
let fields;
try {
fields = await host().credentials.get(credentialSlug);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "credential_not_found");
}
if (!fields) {
return errorReturn(`Credential '${credentialSlug}' not found.`, "credential_not_found");
}
const token = String(fields.token ?? fields.access_token ?? fields.personal_access_token ?? "");
if (!token) {
return errorReturn("Credential has no `token` field.", "token_missing");
}
return { token };
}
// ── HTTP helper (normalized envelope, never throws for API errors) ─────
async function http(token, method, pathAndQuery, body) {
const headers = {
Authorization: `Bearer ${token}`,
Accept: "application/json",
};
if (body !== undefined && body !== null) {
headers["Content-Type"] = "application/json";
}
const init = { method, headers };
if (body !== undefined && body !== null) {
init.body = JSON.stringify(body);
}
let response;
try {
response = await fetch(`${API_BASE}${pathAndQuery.replace(/^\/+/, "")}`, init);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const raw = await response.text();
if (response.status === 204 || raw === "") {
if (response.status >= 200 && response.status < 300) {
return { ok: true };
}
}
let decoded;
try {
decoded = raw ? JSON.parse(raw) : null;
}
catch {
decoded = { raw: raw.slice(0, 500) };
}
if (response.status >= 200 && response.status < 300) {
if (decoded && typeof decoded === "object")
return decoded;
return { raw };
}
return calendlyError(response.status, isPlainObject(decoded)
? decoded
: { raw: typeof raw === "string" ? raw.slice(0, 500) : "" });
}
function calendlyError(status, decoded) {
// Calendly errors come back as either { message, title, details: [...] }
// or occasionally { error: "...", error_description: "..." } for OAuth issues.
const message = String(decoded.message
?? decoded.title
?? decoded.error_description
?? decoded.error
?? `Calendly returned HTTP ${status}.`);
let code = "calendly_error";
if (status === 404)
code = "not_found";
else if (status === 429)
code = "rate_limited";
return errorReturn(message, code, {
status,
calendly_error: decoded,
});
}
// ── URI helpers ────────────────────────────────────────────────────────
/**
* Upgrade a bare UUID to a full Calendly URI, using `resource` as the
* path hint. A value that already looks like a URI is returned as-is.
*/
function toUri(value, resource) {
if (value.startsWith("https://api.calendly.com/")) {
return value;
}
return `https://api.calendly.com/${resource}/${value}`;
}
/**
* Extract the trailing UUID segment from a URI or return the value as-is
* if it's already a bare UUID.
*/
function extractUuid(value, resource) {
if (value.startsWith("https://api.calendly.com/")) {
let trimmed = value.slice("https://api.calendly.com/".length).replace(/\/+$/, "");
const prefix = `${resource}/`;
if (trimmed.startsWith(prefix)) {
trimmed = trimmed.slice(prefix.length);
}
if (trimmed.includes("/")) {
const parts = trimmed.split("/");
trimmed = parts[parts.length - 1];
}
return trimmed;
}
return value;
}
// ── Shared caller ──────────────────────────────────────────────────────
async function call(cred, method, path, body) {
const resolved = await resolveToken(cred);
if ("error" in resolved)
return resolved;
return http(resolved.token, method, path, body);
}
/**
* Resolve the current user's URI from /users/me. Used to default `user`
* filters on listEventTypes / listScheduledEvents etc.
*/
async function resolveCurrentUserUri(cred) {
const me = await call(cred, "GET", "users/me", null);
if (isErrorReturn(me))
return me;
const uri = isPlainObject(me) && isPlainObject(me.resource)
? String(me.resource.uri ?? "")
: "";
if (!uri) {
return errorReturn("Could not resolve current user URI from /users/me response.", "calendly_error");
}
return uri;
}
/**
* Resolve the current user's organization URI from /users/me.
*/
async function resolveCurrentOrganizationUri(cred) {
const me = await call(cred, "GET", "users/me", null);
if (isErrorReturn(me))
return me;
const uri = isPlainObject(me) && isPlainObject(me.resource)
? String(me.resource.current_organization ?? "")
: "";
if (!uri) {
return errorReturn("Could not resolve current organization URI from /users/me response.", "calendly_error");
}
return uri;
}
// ── Query-string helpers ───────────────────────────────────────────────
function buildQueryString(params) {
const keys = Object.keys(params);
if (keys.length === 0)
return "";
const sp = new URLSearchParams();
for (const k of keys)
sp.set(k, params[k]);
return `?${sp.toString()}`;
}
// ── Handlers: Identity ─────────────────────────────────────────────────
const getCurrentUser = async (args) => {
const cred = String(args[0] ?? "");
return (await call(cred, "GET", "users/me", null));
};
const getUser = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`userUri` is required.", "not_found");
}
const uuid = extractUuid(id, "users");
return (await call(cred, "GET", `users/${encodeURIComponent(uuid)}`, null));
};
const getOrganization = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`organizationUri` is required.", "not_found");
}
const uuid = extractUuid(id, "organizations");
return (await call(cred, "GET", `organizations/${encodeURIComponent(uuid)}`, null));
};
// ── Handlers: Event Types ──────────────────────────────────────────────
const listEventTypes = async (args) => {
const cred = String(args[0] ?? "");
const opts = (isPlainObject(args[1]) ? args[1] : {});
const query = {};
if (opts.organization !== undefined && String(opts.organization) !== "") {
query.organization = toUri(String(opts.organization), "organizations");
}
else if (opts.user !== undefined && String(opts.user) !== "") {
query.user = toUri(String(opts.user), "users");
}
else {
const userUri = await resolveCurrentUserUri(cred);
if (typeof userUri !== "string")
return userUri;
query.user = userUri;
}
for (const k of ["active", "count", "page_token", "sort"]) {
if (opts[k] !== undefined) {
query[k] = typeof opts[k] === "boolean"
? (opts[k] ? "true" : "false")
: String(opts[k]);
}
}
return (await call(cred, "GET", `event_types${buildQueryString(query)}`, null));
};
const getEventType = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`eventTypeUri` is required.", "not_found");
}
const uuid = extractUuid(id, "event_types");
return (await call(cred, "GET", `event_types/${encodeURIComponent(uuid)}`, null));
};
// ── Handlers: Scheduled Events ─────────────────────────────────────────
const listScheduledEvents = async (args) => {
const cred = String(args[0] ?? "");
const opts = (isPlainObject(args[1]) ? args[1] : {});
const query = {};
if (opts.organization !== undefined && String(opts.organization) !== "") {
query.organization = toUri(String(opts.organization), "organizations");
}
else if (opts.user !== undefined && String(opts.user) !== "") {
query.user = toUri(String(opts.user), "users");
}
else {
const userUri = await resolveCurrentUserUri(cred);
if (typeof userUri !== "string")
return userUri;
query.user = userUri;
}
for (const k of [
"invitee_email",
"status",
"min_start_time",
"max_start_time",
"count",
"page_token",
"sort",
]) {
if (opts[k] !== undefined) {
query[k] = String(opts[k]);
}
}
return (await call(cred, "GET", `scheduled_events${buildQueryString(query)}`, null));
};
const getScheduledEvent = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`eventUri` is required.", "not_found");
}
const uuid = extractUuid(id, "scheduled_events");
return (await call(cred, "GET", `scheduled_events/${encodeURIComponent(uuid)}`, null));
};
const cancelScheduledEvent = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
const reason = args[2] !== undefined ? String(args[2]) : "";
if (!id) {
return errorReturn("`eventUri` is required.", "not_found");
}
const uuid = extractUuid(id, "scheduled_events");
const body = {};
if (reason !== "") {
body.reason = reason;
}
return (await call(cred, "POST", `scheduled_events/${encodeURIComponent(uuid)}/cancellation`, body));
};
// ── Handlers: Invitees ─────────────────────────────────────────────────
const listInvitees = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
const opts = (isPlainObject(args[2]) ? args[2] : {});
if (!id) {
return errorReturn("`eventUri` is required.", "not_found");
}
const uuid = extractUuid(id, "scheduled_events");
const query = {};
for (const k of ["email", "status", "count", "page_token", "sort"]) {
if (opts[k] !== undefined) {
query[k] = String(opts[k]);
}
}
const path = `scheduled_events/${encodeURIComponent(uuid)}/invitees${buildQueryString(query)}`;
return (await call(cred, "GET", path, null));
};
const getInvitee = async (args) => {
const cred = String(args[0] ?? "");
const uri = String(args[1] ?? "");
if (!uri) {
return errorReturn("`inviteeUri` is required.", "not_found");
}
// Accept either a full URI or the `eventUuid:inviteeUuid` shorthand.
let path;
if (uri.startsWith("https://api.calendly.com/")) {
path = uri.slice("https://api.calendly.com/".length);
}
else if (uri.includes(":")) {
const [eventUuid, inviteeUuid] = uri.split(":", 2);
path = `scheduled_events/${encodeURIComponent(eventUuid)}/invitees/${encodeURIComponent(inviteeUuid)}`;
}
else {
return errorReturn("inviteeUri must be a full URI or `eventUuid:inviteeUuid` shorthand.", "not_found");
}
return (await call(cred, "GET", path, null));
};
// ── Handlers: Scheduling Links ─────────────────────────────────────────
const createSchedulingLink = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
const opts = (isPlainObject(args[2]) ? args[2] : {});
if (!id) {
return errorReturn("`eventTypeUri` is required.", "not_found");
}
const eventTypeUri = toUri(id, "event_types");
const body = {
max_event_count: opts.maxEventCount !== undefined
? Number(opts.maxEventCount) | 0
: 1,
// Calendly: the scheduling-link owner is the event type itself.
owner: opts.owner !== undefined && String(opts.owner) !== ""
? toUri(String(opts.owner), "event_types")
: eventTypeUri,
owner_type: String(opts.ownerType ?? "EventType"),
};
return (await call(cred, "POST", "scheduling_links", body));
};
// ── Handlers: Webhooks ─────────────────────────────────────────────────
const listWebhookSubscriptions = async (args) => {
const cred = String(args[0] ?? "");
const opts = (isPlainObject(args[1]) ? args[1] : {});
let scope = String(opts.scope ?? "user").toLowerCase();
if (scope !== "user" && scope !== "organization") {
scope = "user";
}
const query = { scope };
if (scope === "organization") {
if (opts.organization === undefined || String(opts.organization) === "") {
return errorReturn('`organization` URI is required when scope is "organization".', "not_found");
}
query.organization = toUri(String(opts.organization), "organizations");
}
else {
// scope=user → need both user AND organization URIs per Calendly API.
let userUri = opts.user !== undefined && String(opts.user) !== ""
? toUri(String(opts.user), "users")
: null;
if (userUri === null) {
const resolved = await resolveCurrentUserUri(cred);
if (typeof resolved !== "string")
return resolved;
userUri = resolved;
}
query.user = userUri;
if (opts.organization !== undefined && String(opts.organization) !== "") {
query.organization = toUri(String(opts.organization), "organizations");
}
else {
const orgUri = await resolveCurrentOrganizationUri(cred);
if (typeof orgUri !== "string")
return orgUri;
query.organization = orgUri;
}
}
for (const k of ["count", "page_token", "sort"]) {
if (opts[k] !== undefined) {
query[k] = String(opts[k]);
}
}
return (await call(cred, "GET", `webhook_subscriptions${buildQueryString(query)}`, null));
};
const createWebhookSubscription = async (args) => {
const cred = String(args[0] ?? "");
const callbackUrl = String(args[1] ?? "");
const events = Array.isArray(args[2]) ? args[2] : [];
const opts = (isPlainObject(args[3]) ? args[3] : {});
if (!callbackUrl) {
return errorReturn("`callbackUrl` is required.", "not_found");
}
if (events.length === 0) {
return errorReturn("`events` is required (non-empty array).", "not_found");
}
let scope = String(opts.scope ?? "user").toLowerCase();
if (scope !== "user" && scope !== "organization") {
scope = "user";
}
const body = {
url: callbackUrl,
events: events.map((e) => String(e)),
scope,
};
// Organization URI is always required by the Calendly webhooks API.
if (opts.organization !== undefined && String(opts.organization) !== "") {
body.organization = toUri(String(opts.organization), "organizations");
}
else {
const orgUri = await resolveCurrentOrganizationUri(cred);
if (typeof orgUri !== "string")
return orgUri;
body.organization = orgUri;
}
if (scope === "user") {
let userUri = opts.user !== undefined && String(opts.user) !== ""
? toUri(String(opts.user), "users")
: null;
if (userUri === null) {
const resolved = await resolveCurrentUserUri(cred);
if (typeof resolved !== "string")
return resolved;
userUri = resolved;
}
body.user = userUri;
}
if (opts.signingKey !== undefined && String(opts.signingKey) !== "") {
body.signing_key = String(opts.signingKey);
}
return (await call(cred, "POST", "webhook_subscriptions", body));
};
const deleteWebhookSubscription = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`webhookUri` is required.", "not_found");
}
const uuid = extractUuid(id, "webhook_subscriptions");
return (await call(cred, "DELETE", `webhook_subscriptions/${encodeURIComponent(uuid)}`, null));
};
// ── Exports: functions map ─────────────────────────────────────────────
export const CalendlyFunctions = {
// Identity.
getCurrentUser,
getUser,
getOrganization,
// Event types.
listEventTypes,
getEventType,
// Scheduled events.
listScheduledEvents,
getScheduledEvent,
cancelScheduledEvent,
// Invitees.
listInvitees,
getInvitee,
// Scheduling links.
createSchedulingLink,
// Webhooks.
listWebhookSubscriptions,
createWebhookSubscription,
deleteWebhookSubscription,
};
// ── Exports: credential types ──────────────────────────────────────────
export const CalendlyCredentialTypes = [
{
slug: CREDENTIAL_TYPE,
title: "Calendly API Token",
icon: "calendar",
fields: [
{
name: "token",
title: "Access Token",
type: "password",
required: true,
placeholder: "eyJraWQiOi...",
description: "Personal Access Token from calendly.com/integrations/api_webhooks (Professional/Teams/Enterprise only), or an OAuth 2.0 access token obtained via the authorization-code flow. Calendly tokens are JWTs and start with `eyJ`.",
pattern: "^eyJ",
},
],
},
];
// ── Shared parameter metadata ──────────────────────────────────────────
const credentialParam = {
name: "credential",
title: "Credential",
description: "Slug of a saved `calendly` credential.",
dataType: "string",
formInputType: "resource",
required: true,
allowExpression: true,
placeholder: "my_calendly",
resource: {
type: "credential",
listFn: "credential.list",
modes: ["list", "expression"],
searchable: true,
filter: { type: CREDENTIAL_TYPE },
},
};
const userUriParam = {
name: "userUri",
title: "User URI or UUID",
description: "Full user URI (`https://api.calendly.com/users/AAAAAAAAAAAAAAAA`) OR bare UUID (`AAAAAAAAAAAAAAAA`). The module upgrades bare UUIDs internally. Use `getCurrentUser` to discover your own URI.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "AAAAAAAAAAAAAAAA",
};
const orgUriParam = {
name: "organizationUri",
title: "Organization URI or UUID",
description: "Full organization URI or bare UUID. Read from `getCurrentUser().resource.current_organization`.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "BBBBBBBBBBBBBBBB",
};
const eventTypeUriParam = {
name: "eventTypeUri",
title: "Event Type URI or UUID",
description: "Full event-type URI (`https://api.calendly.com/event_types/CCCCCCCCCCCCCCCC`) or bare UUID.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "CCCCCCCCCCCCCCCC",
};
const eventUriParam = {
name: "eventUri",
title: "Scheduled Event URI or UUID",
description: "Full scheduled-event URI (`https://api.calendly.com/scheduled_events/DDDDDDDDDDDDDDDD`) or bare UUID. Found in webhook payloads at `payload.event.uri` and in `listScheduledEvents` results.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "DDDDDDDDDDDDDDDD",
};
const commonErrors = {
credential_not_found: "No credential with that slug exists in the vault.",
token_missing: "The credential exists but has no `token` field.",
transport: "Network failure calling api.calendly.com.",
calendly_error: "Calendly returned an error — see `calendly_error.message` and `.details` in the response.",
rate_limited: "Hit Calendly rate limits. Slow down or review your plan limits.",
not_found: "No resource with that URI exists (or it was deleted).",
};
// ── Exports: function metadata ─────────────────────────────────────────
export const CalendlyFunctionMetadata = {
// ===================== IDENTITY =====================
getCurrentUser: {
title: "Get current user",
summary: "Fetch the user that owns the API token",
description: "Calls `GET /users/me`. Returns the authenticated user's profile including their URI, scheduling URL, timezone, and — importantly — `current_organization` (the organization URI you'll pass to most list endpoints).\n\nTypically the first call in any Calendly script: use the returned URI as the `user` filter for `listEventTypes` and `listScheduledEvents`.",
group: "identity",
action: "read",
icon: "user",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "user", "me", "identity"],
parameters: [credentialParam],
returnType: "object",
returnDescription: "{resource: {uri, name, slug, email, scheduling_url, timezone, current_organization, created_at, updated_at}}.",
errors: commonErrors,
example: 'calendly.getCurrentUser "my_calendly"',
},
getUser: {
title: "Get user",
summary: "Fetch a specific user by URI",
description: "Calls `GET /users/{uuid}`. Use to look up teammates within your organization. Returns the same shape as `getCurrentUser`.",
group: "identity",
action: "read",
icon: "user-search",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "user", "lookup"],
parameters: [credentialParam, userUriParam],
returnType: "object",
returnDescription: "{resource: {uri, name, email, ...}}.",
errors: commonErrors,
example: 'calendly.getUser "my_calendly" "AAAAAAAAAAAAAAAA"',
},
getOrganization: {
title: "Get organization",
summary: "Fetch an organization by URI",
description: "Calls `GET /organizations/{uuid}`. Returns organization name, plan, and settings. Use the URI from `getCurrentUser().resource.current_organization`.",
group: "identity",
action: "read",
icon: "building",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "organization", "team"],
parameters: [credentialParam, orgUriParam],
returnType: "object",
returnDescription: "{resource: {uri, name, plan, stage, created_at}}.",
errors: commonErrors,
example: 'calendly.getOrganization "my_calendly" "BBBBBBBBBBBBBBBB"',
},
// ===================== EVENT TYPES =====================
listEventTypes: {
title: "List event types",
summary: "Page through bookable event types",
description: "Calls `GET /event_types`. Requires a `user` OR `organization` URI as a filter. This module defaults to the current user's URI if none is supplied (performs an implicit `getCurrentUser` call first).\n\nEvent types are the meeting templates you've configured in Calendly (e.g. \"30-minute intro\", \"60-minute strategy session\"). Each has a URI, name, duration, and `scheduling_url` that invitees can book.",
group: "eventTypes",
action: "query",
icon: "list",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "event-type", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n user : user URI or UUID — filter to event types owned by this user (defaults to current user)\n organization : org URI or UUID — filter to event types in this org\n active : bool — only return active (published) event types\n count : 1–100 (default 20)\n page_token : pagination cursor from previous response's `pagination.next_page_token`\n sort : e.g. 'name:asc', 'created_at:desc'",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 6,
advanced: true,
},
],
returnType: "object",
returnDescription: "{collection: [{uri, name, slug, duration, active, scheduling_url, ...}], pagination: {next_page_token?}}.",
errors: commonErrors,
examples: [
{ title: "Current user", code: 'calendly.listEventTypes "my_calendly"' },
{
title: "Org-wide",
code: 'calendly.listEventTypes "my_calendly" {organization: "BBBBBBBBBBBBBBBB", active: true, count: 100}',
},
],
example: 'calendly.listEventTypes "my_calendly"',
},
getEventType: {
title: "Get event type",
summary: "Fetch a single event type by URI",
description: "Calls `GET /event_types/{uuid}`. Returns detailed metadata including custom questions, location options, and booking rules.",
group: "eventTypes",
action: "read",
icon: "calendar",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "event-type", "lookup"],
parameters: [credentialParam, eventTypeUriParam],
returnType: "object",
returnDescription: "{resource: {uri, name, duration, scheduling_url, custom_questions, ...}}.",
errors: commonErrors,
example: 'calendly.getEventType "my_calendly" "CCCCCCCCCCCCCCCC"',
},
// ===================== SCHEDULED EVENTS =====================
listScheduledEvents: {
title: "List scheduled events",
summary: "Page through booked meetings",
description: "Calls `GET /scheduled_events`. Requires a `user` OR `organization` URI (defaults to current user).\n\nFilter by status (`active` = upcoming or completed; `canceled` = canceled), date range (`min_start_time` / `max_start_time`), and invitee email. Results are paginated via `page_token`.",
group: "events",
action: "query",
icon: "calendar-clock",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "event", "scheduled", "booking", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n user : user URI or UUID (defaults to current user)\n organization : org URI or UUID — mutually exclusive with `user`\n invitee_email : filter to events booked by this email\n status : 'active' | 'canceled'\n min_start_time : ISO 8601 (e.g. '2026-04-01T00:00:00Z')\n max_start_time : ISO 8601\n count : 1–100 (default 20)\n page_token : pagination cursor\n sort : 'start_time:asc' (default) | 'start_time:desc'",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 7,
advanced: true,
},
],
returnType: "object",
returnDescription: "{collection: [{uri, name, status, start_time, end_time, event_type, location, ...}], pagination: {next_page_token?}}.",
errors: commonErrors,
examples: [
{
title: "Upcoming only",
code: 'calendly.listScheduledEvents "my_calendly" {status: "active", min_start_time: "2026-04-18T00:00:00Z"}',
},
{
title: "Invitee's bookings",
code: 'calendly.listScheduledEvents "my_calendly" {invitee_email: "ada@example.com"}',
},
],
example: 'calendly.listScheduledEvents "my_calendly" {count: 20, status: "active"}',
},
getScheduledEvent: {
title: "Get scheduled event",
summary: "Fetch a single booking by URI",
description: "Calls `GET /scheduled_events/{uuid}`. Returns full event details including event memberships (hosts), location, and event type reference.",
group: "events",
action: "read",
icon: "calendar-check",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "event", "scheduled", "lookup"],
parameters: [credentialParam, eventUriParam],
returnType: "object",
returnDescription: "{resource: {uri, name, status, start_time, end_time, event_type, event_memberships: [], location, ...}}.",
errors: commonErrors,
example: 'calendly.getScheduledEvent "my_calendly" "DDDDDDDDDDDDDDDD"',
},
cancelScheduledEvent: {
title: "Cancel scheduled event",
summary: "Cancel a booking with an optional reason",
description: 'Calls `POST /scheduled_events/{uuid}/cancellation`. Calendly notifies the invitee by email and records the cancellation reason on the event. The event is not deleted — it remains with `status: "canceled"` and a populated `cancellation` object.',
group: "events",
action: "write",
icon: "calendar-x",
capability: "manage_options",
sideEffects: ["makes_http_call", "notifies_user", "destructive"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "event", "cancel"],
parameters: [
credentialParam,
eventUriParam,
{
name: "reason",
title: "Reason",
description: "Cancellation reason shown to the invitee in the notification email. Optional.",
dataType: "string",
formInputType: "textarea",
required: false,
allowExpression: true,
rows: 3,
placeholder: "Something urgent came up — please rebook at your convenience.",
},
],
returnType: "object",
returnDescription: "{resource: {cancellation: {canceled_by, reason, canceler_type, created_at}}}.",
errors: commonErrors,
example: 'calendly.cancelScheduledEvent "my_calendly" "DDDDDDDDDDDDDDDD" "Rescheduling"',
},
// ===================== INVITEES =====================
listInvitees: {
title: "List invitees",
summary: "List the people who booked a scheduled event",
description: "Calls `GET /scheduled_events/{uuid}/invitees`. Most event types are 1-on-1 (one invitee) but group events can have many. Each invitee has an email, name, timezone, cancellation status, custom question answers, and — if the booking came through tracking parameters — `tracking.utm_source` etc.",
group: "invitees",
action: "query",
icon: "users",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "invitee", "list"],
parameters: [
credentialParam,
eventUriParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n email : filter to a specific invitee email\n status : 'active' | 'canceled'\n count : 1–100 (default 20)\n page_token : pagination cursor\n sort : 'created_at:asc' | 'created_at:desc'",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
advanced: true,
},
],
returnType: "object",
returnDescription: "{collection: [{uri, email, name, status, timezone, questions_and_answers: [], tracking: {}, ...}], pagination: {next_page_token?}}.",
errors: commonErrors,
example: 'calendly.listInvitees "my_calendly" "DDDDDDDDDDDDDDDD"',
},
getInvitee: {
title: "Get invitee",
summary: "Fetch a single invitee by URI",
description: "Calls `GET /scheduled_events/{event_uuid}/invitees/{invitee_uuid}`. Accepts the full invitee URI (which encodes both UUIDs) OR `event_uuid:invitee_uuid` as a shorthand. Use the full URI from `listInvitees` or the `payload.invitee.uri` in a webhook.",
group: "invitees",
action: "read",
icon: "user",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "invitee", "lookup"],
parameters: [
credentialParam,
{
name: "inviteeUri",
title: "Invitee URI",
description: "Full invitee URI (`https://api.calendly.com/scheduled_events/EVT/invitees/INV`). Since an invitee is nested under an event, a bare UUID alone is not enough — pass the full URI.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "https://api.calendly.com/scheduled_events/DDDDDDDDDDDDDDDD/invitees/EEEEEEEEEEEEEEEE",
},
],
returnType: "object",
returnDescription: "{resource: {uri, email, name, status, questions_and_answers, tracking, payment, ...}}.",
errors: commonErrors,
example: 'calendly.getInvitee "my_calendly" "https://api.calendly.com/scheduled_events/DDDD/invitees/EEEE"',
},
// ===================== SCHEDULING LINKS =====================
createSchedulingLink: {
title: "Create scheduling link",
summary: "Generate a single-use booking URL for an event type",
description: "Calls `POST /scheduling_links`. Produces a personalized, single-use (or limited-use) scheduling URL that can only be used `maxEventCount` times. Perfect for:\n - Outbound emails (\"here's a link to book time with me\")\n - Post-purchase onboarding calls\n - Customer support escalations\n\nThe link targets a specific event type; once booked, it becomes invalid (unless `maxEventCount` > 1).",
group: "links",
action: "write",
icon: "link",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["calendly", "scheduling-link", "booking", "single-use"],
parameters: [
credentialParam,
eventTypeUriParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n maxEventCount : int — how many bookings this link permits (default 1; max typically 1000)\n owner : owner URI — defaults to the event type URI itself (which is what the API requires)\n ownerType : 'EventType' (default) — reserved for future types",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
advanced: true,
},
],
returnType: "object",
returnDescription: "{resource: {booking_url, owner, owner_type}}. Email `booking_url` to your invitee.",
errors: commonErrors,
examples: [
{
title: "One-shot link after a form submit",
code: 'let link = calendly.createSchedulingLink "my_calendly" "CCCCCCCCCCCCCCCC"\nemail.send {{ form.email }} "Book your call" "Pick a time: " + link.resource.booking_url',
},
{
title: "Multi-use link for a campaign",
code: 'calendly.createSchedulingLink "my_calendly" "CCCCCCCCCCCCCCCC" {maxEventCount: 50}',
},
],
example: 'calendly.createSchedulingLink "my_calendly" "CCCCCCCCCCCCCCCC"',
},
// ===================== WEBHOOKS =====================
listWebhookSubscriptions: {
title: "List webhook subscriptions",
summary: "Show current webhook subscriptions for a user or org",
description: "Calls `GET /webhook_subscriptions`. Requires a `scope` ('user' or 'organization') plus the corresponding URI. Returns the active subscriptions including their callback URLs and which events they fire on.",
group: "webhooks",
action: "query",
icon: "webhook",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "webhook", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n scope : 'user' (default) | 'organization'\n user : user URI or UUID — required if scope=user (defaults to current user)\n organization : org URI or UUID — required if scope=organization\n count : 1–100 (default 20)\n page_token : pagination cursor\n sort : 'created_at:asc' | 'created_at:desc'",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 6,
advanced: true,
},
],
returnType: "object",
returnDescription: "{collection: [{uri, callback_url, events, scope, state, creator, ...}], pagination: {next_page_token?}}.",
errors: commonErrors,
example: 'calendly.listWebhookSubscriptions "my_calendly"',
},
createWebhookSubscription: {
title: "Create webhook subscription",
summary: "Subscribe to booking events with a callback URL",
description: "Calls `POST /webhook_subscriptions`. Calendly will `POST` a JSON payload to your `callbackUrl` every time one of the subscribed events fires.\n\nSupported events:\n - `invitee.created` — a new booking was made\n - `invitee.canceled` — a booking was canceled\n - `routing_form_submission.created` — a routing-form submission arrived\n\nFor signature verification, provide a `signingKey`; Calendly signs each payload with HMAC-SHA256 and sends the signature in the `Calendly-Webhook-Signature` header.",
group: "webhooks",
action: "write",
icon: "webhook",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["calendly", "webhook", "create", "subscription"],
parameters: [
credentialParam,
{
name: "callbackUrl",
title: "Callback URL",
description: "HTTPS URL that Calendly will POST event payloads to. Must be publicly reachable.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "https://example.com/webhooks/calendly",
},
{
name: "events",
title: "Events",
description: "Array of event names to subscribe to. Supported: `invitee.created`, `invitee.canceled`, `routing_form_submission.created`.",
dataType: "array",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 3,
placeholder: '["invitee.created", "invitee.canceled"]',
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n scope : 'user' (default) | 'organization'\n user : user URI or UUID — required if scope=user (defaults to current user)\n organization : org URI or UUID — required — webhooks always need an organization URI per Calendly API\n signingKey : shared secret for HMAC-SHA256 signature verification\n",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
advanced: true,
},
],
returnType: "object",
returnDescription: "{resource: {uri, callback_url, events, scope, state, creator, ...}}. Save the `uri` to delete later.",
errors: commonErrors,
examples: [
{
title: "Subscribe to new bookings",
code: 'calendly.createWebhookSubscription "my_calendly" "https://example.com/hooks/calendly" ["invitee.created", "invitee.canceled"] {organization: "BBBBBBBBBBBBBBBB", signingKey: "shhh-secret"}',
},
],
example: 'calendly.createWebhookSubscription "my_calendly" "https://example.com/hook" ["invitee.created"] {organization: "BBBB"}',
},
deleteWebhookSubscription: {
title: "Delete webhook subscription",
summary: "Unsubscribe a webhook by URI",
description: "Calls `DELETE /webhook_subscriptions/{uuid}`. Idempotent — deleting an already-deleted subscription returns `{ok: true}`.",
group: "webhooks",
action: "delete",
icon: "trash-2",
capability: "manage_options",
sideEffects: ["makes_http_call", "destructive"],
idempotent: true,
since: "1.0.0",
tags: ["calendly", "webhook", "delete"],
parameters: [
credentialParam,
{
name: "webhookUri",
title: "Webhook URI or UUID",
description: "Full webhook-subscription URI or bare UUID.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "FFFFFFFFFFFFFFFF",
},
],
returnType: "object",
returnDescription: "{ok: true} on success.",
errors: commonErrors,
example: 'calendly.deleteWebhookSubscription "my_calendly" "FFFFFFFFFFFFFFFF"',
},
};
// ── Exports: module metadata ───────────────────────────────────────────
export const CalendlyModuleMetadata = {
slug: "calendly",
title: "Calendly",
summary: "Event types, scheduled events, invitees, scheduling links, and webhooks — automate your Calendly workflows",
description: "Read event types and bookings, generate single-use scheduling links for personalized outreach, cancel appointments, and subscribe to webhook events (invitee.created, invitee.canceled) to trigger RobinPath automations the moment someone books time with you.\n\nAuthenticated with a **Personal Access Token** (Professional plan and above) or an OAuth 2.0 access token. Store it as a `calendly` credential and pass the slug as the first argument to every method.\n\n**URI vs UUID.** Calendly resources are identified by URI (e.g. `https://api.calendly.com/users/AAAAAAAAAAAAAAAA`). Every `*Uri` parameter in this module accepts either the full URI or the bare UUID — the module upgrades bare UUIDs internally based on the parameter name.",
category: "productivity",
icon: "icon.svg",
color: "#006BFF",
version: "0.2.0",
docsUrl: "https://docs.robinpath.com/modules/calendly",
status: "stable",
requires: [],
minNodeVersion: "18.0.0",
credentialsType: CREDENTIAL_TYPE,
operationGroups: {
identity: {
title: "Identity",
description: "Current user, teammates, and organizations.",
order: 1,
},
eventTypes: {
title: "Event Types",
description: "Bookable meeting templates.",
order: 2,
},
events: {
title: "Scheduled Events",
description: "Past and upcoming booked meetings.",
order: 3,
},
invitees: {
title: "Invitees",
description: "The people who booked a scheduled event.",
order: 4,
},
links: {
title: "Scheduling Links",
description: "Single-use booking URLs for personalized outreach.",
order: 5,
},
webhooks: {
title: "Webhooks",
description: "Subscribe to booking events in real time.",
order: 6,
},
},
methods: Object.keys(CalendlyFunctions),
};
//# sourceMappingURL=calendly.js.map
{"version":3,"file":"calendly.js","sourceRoot":"","sources":["../src/calendly.ts"],"names":[],"mappings":"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"}
import type { ModuleAdapter } from "@robinpath/core";
declare const CalendlyModule: ModuleAdapter;
export default CalendlyModule;
export { CalendlyModule };
export { CalendlyFunctions, CalendlyFunctionMetadata, CalendlyModuleMetadata, CalendlyCredentialTypes, } from "./calendly.js";
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,QAAA,MAAM,cAAc,EAAE,aAQrB,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,eAAe,CAAC"}
import { CalendlyFunctions, CalendlyFunctionMetadata, CalendlyModuleMetadata, CalendlyCredentialTypes, configureCalendly, } from "./calendly.js";
const CalendlyModule = {
name: "calendly",
functions: CalendlyFunctions,
functionMetadata: CalendlyFunctionMetadata,
moduleMetadata: CalendlyModuleMetadata,
credentialTypes: CalendlyCredentialTypes,
configure: configureCalendly,
global: false,
};
export default CalendlyModule;
export { CalendlyModule };
export { CalendlyFunctions, CalendlyFunctionMetadata, CalendlyModuleMetadata, CalendlyCredentialTypes, } from "./calendly.js";
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,MAAM,cAAc,GAAkB;IACpC,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,iBAAiB;IAC5B,gBAAgB,EAAE,wBAAwB;IAC1C,cAAc,EAAE,sBAAsB;IACtC,eAAe,EAAE,uBAAuB;IACxC,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,eAAe,CAAC"}
+21
-8
{
"name": "@robinpath/calendly",
"version": "0.1.2",
"version": "0.3.0",
"publishConfig": {

@@ -23,12 +23,19 @@ "access": "public"

"peerDependencies": {
"@robinpath/core": ">=0.20.0"
"@robinpath/core": ">=0.40.0"
},
"devDependencies": {
"@robinpath/core": "^0.30.1",
"@robinpath/core": "^0.40.0",
"typescript": "^5.6.0"
},
"description": "Calendly module for RobinPath.",
"description": "Calendly API v2 — event types, scheduled events, invitees, single-use scheduling links, and webhook subscriptions. Uses the encrypted credential vault for Personal Access Tokens or OAuth access tokens.",
"keywords": [
"calendly",
"utility"
"utility",
"scheduling",
"calendar",
"meetings",
"booking",
"appointments",
"events",
"productivity"
],

@@ -38,7 +45,13 @@ "license": "MIT",

"category": "utility",
"type": "utility",
"auth": "api-key",
"type": "module",
"auth": "credential-vault",
"functionCount": 13,
"baseUrl": "https://api.calendly.com"
"baseUrl": "https://api.calendly.com",
"language": "nodejs",
"platforms": [
"cloud",
"cli",
"desktop"
]
}
}

@@ -22,3 +22,3 @@ # @robinpath/calendly

```bash
npm install @robinpath/calendly
robinpath add @robinpath/calendly
```

@@ -25,0 +25,0 @@