@robinpath/hubspot
Advanced tools
| /** | ||
| * RobinPath HubSpot Module (Node port) | ||
| * | ||
| * HubSpot CRM API v3 — contacts, companies, deals, notes, tasks, and list | ||
| * membership. Mirror of packages/php/hubspot/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. | ||
| * | ||
| * HubSpot retired their legacy `hapikey` query-string API keys in 2022; this | ||
| * module authenticates exclusively with **Private App access tokens** (scoped, | ||
| * revocable OAuth-style bearer tokens). Create one in your HubSpot portal at | ||
| * Settings → Integrations → Private Apps, then paste it into a RobinPath | ||
| * credential of type `hubspot`. | ||
| * | ||
| * Every method takes a credential slug as its first argument; the module | ||
| * resolves the stored token at call time via the injected ModuleHost. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - hubspot : { access_token } → Bearer auth with a Private App token | ||
| */ | ||
| import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core"; | ||
| export declare function configureHubspot(h: ModuleHost): void; | ||
| export declare const HubspotFunctions: Record<string, BuiltinHandler>; | ||
| export declare const HubspotCredentialTypes: CredentialTypeSchema[]; | ||
| export declare const HubspotFunctionMetadata: Record<string, FunctionMetadata>; | ||
| export declare const HubspotModuleMetadata: ModuleMetadata; | ||
| //# sourceMappingURL=hubspot.d.ts.map |
| {"version":3,"file":"hubspot.d.ts","sourceRoot":"","sources":["../src/hubspot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAezB,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAEpD;AA6hBD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAqB3D,CAAC;AAIF,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,EAkBxD,CAAC;AAkHF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA+epE,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,cAsBnC,CAAC"} |
+1082
| /** | ||
| * RobinPath HubSpot Module (Node port) | ||
| * | ||
| * HubSpot CRM API v3 — contacts, companies, deals, notes, tasks, and list | ||
| * membership. Mirror of packages/php/hubspot/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. | ||
| * | ||
| * HubSpot retired their legacy `hapikey` query-string API keys in 2022; this | ||
| * module authenticates exclusively with **Private App access tokens** (scoped, | ||
| * revocable OAuth-style bearer tokens). Create one in your HubSpot portal at | ||
| * Settings → Integrations → Private Apps, then paste it into a RobinPath | ||
| * credential of type `hubspot`. | ||
| * | ||
| * Every method takes a credential slug as its first argument; the module | ||
| * resolves the stored token at call time via the injected ModuleHost. | ||
| * | ||
| * Credential type declared by this module: | ||
| * - hubspot : { access_token } → Bearer auth with a Private App token | ||
| */ | ||
| // ── Module-local state (populated by configure hook) ──────────────────── | ||
| const state = {}; | ||
| function host() { | ||
| if (!state.host) { | ||
| throw new Error("HubSpot module not initialized. Pass the adapter to rp.installModule() so its configure() hook runs first."); | ||
| } | ||
| return state.host; | ||
| } | ||
| export function configureHubspot(h) { | ||
| state.host = h; | ||
| } | ||
| // ── Constants ────────────────────────────────────────────────────────── | ||
| const API_BASE = "https://api.hubapi.com/"; | ||
| const CREDENTIAL_TYPE = "hubspot"; | ||
| function errorReturn(error, code, extra = {}) { | ||
| return { error, code, ...extra }; | ||
| } | ||
| // ── 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.access_token ?? ""); | ||
| if (!token) { | ||
| return errorReturn("Credential has no `access_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 }; | ||
| } | ||
| const decodedObj = (decoded && typeof decoded === "object") | ||
| ? decoded | ||
| : { raw: typeof raw === "string" ? raw.slice(0, 500) : "" }; | ||
| let message = `HubSpot returned HTTP ${response.status}.`; | ||
| if (typeof decodedObj.message === "string") { | ||
| message = decodedObj.message; | ||
| } | ||
| let code = "hubspot_error"; | ||
| if (response.status === 404) | ||
| code = "not_found"; | ||
| else if (response.status === 429) | ||
| code = "rate_limited"; | ||
| return errorReturn(message, code, { | ||
| status: response.status, | ||
| hubspot_error: decodedObj, | ||
| }); | ||
| } | ||
| // ── Internal helpers ─────────────────────────────────────────────────── | ||
| /** | ||
| * HubSpot's `properties` payload expects scalar string values for most | ||
| * fields. Booleans and numbers are accepted but stringified here for | ||
| * consistent behavior across the API surface. Nested arrays/objects are | ||
| * JSON-encoded (rare — used for things like multi-select values). | ||
| */ | ||
| function stringifyProperties(props) { | ||
| const out = {}; | ||
| for (const [k, v] of Object.entries(props)) { | ||
| if (typeof v === "boolean") { | ||
| out[k] = v ? "true" : "false"; | ||
| } | ||
| else if (v === null || v === undefined) { | ||
| out[k] = ""; | ||
| } | ||
| else if (typeof v === "string" || typeof v === "number") { | ||
| out[k] = String(v); | ||
| } | ||
| else { | ||
| try { | ||
| out[k] = JSON.stringify(v); | ||
| } | ||
| catch { | ||
| out[k] = String(v); | ||
| } | ||
| } | ||
| } | ||
| return out; | ||
| } | ||
| /** | ||
| * Convert a contact id like `"12345"` or `"email:ada@example.com"` into | ||
| * a path + query-string pair. HubSpot supports looking up contacts by an | ||
| * alternate identifier via the `idProperty` query parameter. | ||
| */ | ||
| function parseObjectId(basePath, id) { | ||
| if (id.startsWith("email:")) { | ||
| const email = id.slice(6); | ||
| return { | ||
| path: `${basePath}/${encodeURIComponent(email)}`, | ||
| query: { idProperty: "email" }, | ||
| }; | ||
| } | ||
| return { path: `${basePath}/${encodeURIComponent(id)}`, query: {} }; | ||
| } | ||
| 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()}`; | ||
| } | ||
| /** Unix-epoch milliseconds as a string (HubSpot `hs_timestamp`). */ | ||
| function now() { | ||
| return String(Date.now()); | ||
| } | ||
| /** | ||
| * Accept an ISO 8601 string, epoch-ms number, or null/undefined → epoch-ms string. | ||
| */ | ||
| function resolveTimestamp(value) { | ||
| if (value === null || value === undefined || value === "") { | ||
| return now(); | ||
| } | ||
| if (typeof value === "number" && Number.isFinite(value)) { | ||
| return String(Math.trunc(value)); | ||
| } | ||
| if (typeof value === "string") { | ||
| // Numeric string → treat as epoch ms. | ||
| if (/^-?\d+$/.test(value)) { | ||
| return value; | ||
| } | ||
| const parsed = Date.parse(value); | ||
| if (!Number.isNaN(parsed)) { | ||
| return String(parsed); | ||
| } | ||
| } | ||
| return now(); | ||
| } | ||
| /** | ||
| * Convert a flat `{contact: id, company: id, deal: id}` shorthand into | ||
| * HubSpot's `associations[]` payload with association type IDs. The | ||
| * caller's source-object type (`note` / `task` / etc.) determines which | ||
| * association type IDs to use — see | ||
| * https://developers.hubspot.com/docs/api/crm/associations | ||
| */ | ||
| const ASSOCIATION_TYPE_IDS = { | ||
| note: { contact: 202, company: 190, deal: 214, ticket: 228 }, | ||
| task: { contact: 204, company: 192, deal: 216, ticket: 230 }, | ||
| }; | ||
| function buildAssociations(map, from) { | ||
| if (!map || Object.keys(map).length === 0) | ||
| return []; | ||
| const table = ASSOCIATION_TYPE_IDS[from]; | ||
| if (!table) | ||
| return []; | ||
| const out = []; | ||
| for (const [rawType, rawIds] of Object.entries(map)) { | ||
| const objType = String(rawType).toLowerCase(); | ||
| const typeId = table[objType]; | ||
| if (typeId === undefined) | ||
| continue; | ||
| const ids = Array.isArray(rawIds) ? rawIds : [rawIds]; | ||
| for (const id of ids) { | ||
| out.push({ | ||
| to: { id: String(id) }, | ||
| types: [ | ||
| { | ||
| associationCategory: "HUBSPOT_DEFINED", | ||
| associationTypeId: typeId, | ||
| }, | ||
| ], | ||
| }); | ||
| } | ||
| } | ||
| return out; | ||
| } | ||
| /** | ||
| * Shared caller — resolves the credential, invokes http(), passes through. | ||
| */ | ||
| 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); | ||
| } | ||
| function isPlainObject(v) { | ||
| return !!v && typeof v === "object" && !Array.isArray(v); | ||
| } | ||
| /** | ||
| * Shared list-handler used by listContacts / listCompanies / listDeals. | ||
| */ | ||
| async function genericList(args, objectType) { | ||
| const cred = String(args[0] ?? ""); | ||
| const opts = (isPlainObject(args[1]) ? args[1] : {}); | ||
| const query = {}; | ||
| if (opts.limit !== undefined) { | ||
| query.limit = String(Number(opts.limit) | 0); | ||
| } | ||
| if (opts.after !== undefined) { | ||
| query.after = String(opts.after); | ||
| } | ||
| if (opts.properties !== undefined) { | ||
| query.properties = Array.isArray(opts.properties) | ||
| ? opts.properties.map((v) => String(v)).join(",") | ||
| : String(opts.properties); | ||
| } | ||
| if (opts.archived !== undefined) { | ||
| query.archived = opts.archived ? "true" : "false"; | ||
| } | ||
| const path = `crm/v3/objects/${objectType}${buildQueryString(query)}`; | ||
| return call(cred, "GET", path, null); | ||
| } | ||
| // ── Handlers: Contacts ───────────────────────────────────────────────── | ||
| const createContact = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const props = (isPlainObject(args[1]) ? args[1] : {}); | ||
| if (Object.keys(props).length === 0) { | ||
| return errorReturn("`properties` is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "POST", "crm/v3/objects/contacts", { | ||
| properties: stringifyProperties(props), | ||
| })); | ||
| }; | ||
| const updateContact = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = String(args[1] ?? ""); | ||
| const props = (isPlainObject(args[2]) ? args[2] : {}); | ||
| if (!id) { | ||
| return errorReturn("`contactId` is required.", "validation_failed"); | ||
| } | ||
| if (Object.keys(props).length === 0) { | ||
| return errorReturn("`properties` is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "PATCH", `crm/v3/objects/contacts/${encodeURIComponent(id)}`, { properties: stringifyProperties(props) })); | ||
| }; | ||
| const getContact = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = String(args[1] ?? ""); | ||
| const sel = Array.isArray(args[2]) ? args[2] : null; | ||
| if (!id) { | ||
| return errorReturn("`contactId` is required.", "validation_failed"); | ||
| } | ||
| const parsed = parseObjectId("crm/v3/objects/contacts", id); | ||
| const query = { ...parsed.query }; | ||
| if (sel) { | ||
| query.properties = sel.map((v) => String(v)).join(","); | ||
| } | ||
| const qs = buildQueryString(query); | ||
| return (await call(cred, "GET", parsed.path + qs, null)); | ||
| }; | ||
| const searchContacts = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const query = String(args[1] ?? ""); | ||
| const opts = (isPlainObject(args[2]) ? args[2] : {}); | ||
| const body = { | ||
| limit: opts.limit !== undefined ? Number(opts.limit) | 0 : 10, | ||
| }; | ||
| if (query !== "") { | ||
| body.query = query; | ||
| } | ||
| if (opts.after !== undefined) { | ||
| body.after = String(opts.after); | ||
| } | ||
| if (Array.isArray(opts.properties)) { | ||
| body.properties = opts.properties; | ||
| } | ||
| if (Array.isArray(opts.sorts)) { | ||
| body.sorts = opts.sorts; | ||
| } | ||
| if (Array.isArray(opts.filterGroups)) { | ||
| body.filterGroups = opts.filterGroups; | ||
| } | ||
| return (await call(cred, "POST", "crm/v3/objects/contacts/search", body)); | ||
| }; | ||
| const listContacts = async (args) => { | ||
| return (await genericList(args, "contacts")); | ||
| }; | ||
| const deleteContact = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = String(args[1] ?? ""); | ||
| if (!id) { | ||
| return errorReturn("`contactId` is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "DELETE", `crm/v3/objects/contacts/${encodeURIComponent(id)}`, null)); | ||
| }; | ||
| // ── Handlers: Companies ──────────────────────────────────────────────── | ||
| const createCompany = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const props = (isPlainObject(args[1]) ? args[1] : {}); | ||
| if (Object.keys(props).length === 0) { | ||
| return errorReturn("`properties` is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "POST", "crm/v3/objects/companies", { | ||
| properties: stringifyProperties(props), | ||
| })); | ||
| }; | ||
| const updateCompany = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = String(args[1] ?? ""); | ||
| const props = (isPlainObject(args[2]) ? args[2] : {}); | ||
| if (!id) { | ||
| return errorReturn("`companyId` is required.", "validation_failed"); | ||
| } | ||
| if (Object.keys(props).length === 0) { | ||
| return errorReturn("`properties` is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "PATCH", `crm/v3/objects/companies/${encodeURIComponent(id)}`, { properties: stringifyProperties(props) })); | ||
| }; | ||
| const getCompany = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = String(args[1] ?? ""); | ||
| const sel = Array.isArray(args[2]) ? args[2] : null; | ||
| if (!id) { | ||
| return errorReturn("`companyId` is required.", "validation_failed"); | ||
| } | ||
| let path = `crm/v3/objects/companies/${encodeURIComponent(id)}`; | ||
| if (sel) { | ||
| path += buildQueryString({ properties: sel.map((v) => String(v)).join(",") }); | ||
| } | ||
| return (await call(cred, "GET", path, null)); | ||
| }; | ||
| const listCompanies = async (args) => { | ||
| return (await genericList(args, "companies")); | ||
| }; | ||
| // ── Handlers: Deals ──────────────────────────────────────────────────── | ||
| const createDeal = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const props = (isPlainObject(args[1]) ? args[1] : {}); | ||
| if (Object.keys(props).length === 0) { | ||
| return errorReturn("`properties` is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "POST", "crm/v3/objects/deals", { | ||
| properties: stringifyProperties(props), | ||
| })); | ||
| }; | ||
| const updateDeal = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = String(args[1] ?? ""); | ||
| const props = (isPlainObject(args[2]) ? args[2] : {}); | ||
| if (!id) { | ||
| return errorReturn("`dealId` is required.", "validation_failed"); | ||
| } | ||
| if (Object.keys(props).length === 0) { | ||
| return errorReturn("`properties` is required.", "validation_failed"); | ||
| } | ||
| return (await call(cred, "PATCH", `crm/v3/objects/deals/${encodeURIComponent(id)}`, { properties: stringifyProperties(props) })); | ||
| }; | ||
| const getDeal = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const id = String(args[1] ?? ""); | ||
| const sel = Array.isArray(args[2]) ? args[2] : null; | ||
| if (!id) { | ||
| return errorReturn("`dealId` is required.", "validation_failed"); | ||
| } | ||
| let path = `crm/v3/objects/deals/${encodeURIComponent(id)}`; | ||
| if (sel) { | ||
| path += buildQueryString({ properties: sel.map((v) => String(v)).join(",") }); | ||
| } | ||
| return (await call(cred, "GET", path, null)); | ||
| }; | ||
| const listDeals = async (args) => { | ||
| return (await genericList(args, "deals")); | ||
| }; | ||
| // ── Handlers: Engagements (notes & tasks) ────────────────────────────── | ||
| const createNote = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const body = String(args[1] ?? ""); | ||
| const associations = (isPlainObject(args[2]) ? args[2] : {}); | ||
| const extra = (isPlainObject(args[3]) ? args[3] : {}); | ||
| if (!body) { | ||
| return errorReturn("`body` is required.", "validation_failed"); | ||
| } | ||
| const props = { | ||
| hs_note_body: body, | ||
| hs_timestamp: now(), | ||
| ...extra, | ||
| }; | ||
| const payload = { | ||
| properties: stringifyProperties(props), | ||
| }; | ||
| const assocs = buildAssociations(associations, "note"); | ||
| if (assocs.length > 0) { | ||
| payload.associations = assocs; | ||
| } | ||
| return (await call(cred, "POST", "crm/v3/objects/notes", payload)); | ||
| }; | ||
| const createTask = async (args) => { | ||
| const cred = String(args[0] ?? ""); | ||
| const subject = String(args[1] ?? ""); | ||
| const opts = (isPlainObject(args[2]) ? args[2] : {}); | ||
| const associations = (isPlainObject(args[3]) ? args[3] : {}); | ||
| if (!subject) { | ||
| return errorReturn("`subject` is required.", "validation_failed"); | ||
| } | ||
| const props = { | ||
| hs_task_subject: subject, | ||
| hs_task_status: String(opts.status ?? "NOT_STARTED"), | ||
| hs_task_priority: String(opts.priority ?? "MEDIUM"), | ||
| hs_task_type: String(opts.taskType ?? "TODO"), | ||
| hs_timestamp: resolveTimestamp(opts.dueDate ?? null), | ||
| }; | ||
| if (opts.body !== undefined) { | ||
| props.hs_task_body = String(opts.body); | ||
| } | ||
| if (opts.ownerId !== undefined) { | ||
| props.hubspot_owner_id = String(opts.ownerId); | ||
| } | ||
| const payload = { | ||
| properties: stringifyProperties(props), | ||
| }; | ||
| const assocs = buildAssociations(associations, "task"); | ||
| if (assocs.length > 0) { | ||
| payload.associations = assocs; | ||
| } | ||
| return (await call(cred, "POST", "crm/v3/objects/tasks", payload)); | ||
| }; | ||
| // ── Exports: functions map ───────────────────────────────────────────── | ||
| export const HubspotFunctions = { | ||
| // Contacts. | ||
| createContact, | ||
| updateContact, | ||
| getContact, | ||
| searchContacts, | ||
| listContacts, | ||
| deleteContact, | ||
| // Companies. | ||
| createCompany, | ||
| updateCompany, | ||
| getCompany, | ||
| listCompanies, | ||
| // Deals. | ||
| createDeal, | ||
| updateDeal, | ||
| getDeal, | ||
| listDeals, | ||
| // Engagements. | ||
| createNote, | ||
| createTask, | ||
| }; | ||
| // ── Exports: credential types ────────────────────────────────────────── | ||
| export const HubspotCredentialTypes = [ | ||
| { | ||
| slug: CREDENTIAL_TYPE, | ||
| title: "HubSpot Private App Token", | ||
| icon: "users", | ||
| fields: [ | ||
| { | ||
| name: "access_token", | ||
| title: "Access Token", | ||
| type: "password", | ||
| required: true, | ||
| placeholder: "pat-na1-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", | ||
| description: "Create one at Settings → Integrations → Private Apps in your HubSpot portal. Grant scopes for the objects you want to manage (crm.objects.contacts.read/write, crm.objects.deals.read/write, crm.objects.companies.read/write, etc.). Starts with `pat-`.", | ||
| pattern: "^pat-", | ||
| }, | ||
| ], | ||
| }, | ||
| ]; | ||
| // ── Shared parameter metadata ────────────────────────────────────────── | ||
| const credentialParam = { | ||
| name: "credential", | ||
| title: "Credential", | ||
| description: "Slug of a saved `hubspot` credential (Private App token).", | ||
| dataType: "string", | ||
| formInputType: "resource", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "my_hubspot", | ||
| resource: { | ||
| type: "credential", | ||
| listFn: "credential.list", | ||
| modes: ["list", "expression"], | ||
| searchable: true, | ||
| filter: { type: CREDENTIAL_TYPE }, | ||
| }, | ||
| }; | ||
| const contactIdParam = { | ||
| name: "contactId", | ||
| title: "Contact ID", | ||
| description: "Numeric HubSpot contact ID (e.g. `12345`). To fetch by email, prefix with `email:` — e.g. `\"email:ada@example.com\"`.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "12345", | ||
| }; | ||
| const companyIdParam = { | ||
| name: "companyId", | ||
| title: "Company ID", | ||
| description: "Numeric HubSpot company ID.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "67890", | ||
| }; | ||
| const dealIdParam = { | ||
| name: "dealId", | ||
| title: "Deal ID", | ||
| description: "Numeric HubSpot deal ID.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "9876543", | ||
| }; | ||
| function propertiesParam(object, example) { | ||
| return { | ||
| name: "properties", | ||
| title: "Properties", | ||
| description: `Flat object of ${object} properties. Do NOT wrap in \`{properties: ...}\` — this module does that for you. Common fields vary by object; see HubSpot's property definitions.\n\nExample: ${example}`, | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| }; | ||
| } | ||
| const propertySelectParam = { | ||
| name: "properties", | ||
| title: "Properties to return", | ||
| description: "Array of property names to include in the response. Omit to use HubSpot's default set. Pass `[\"*\"]` is NOT supported — enumerate what you need.", | ||
| dataType: "array", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }; | ||
| function listOptionsParam(defaults) { | ||
| return { | ||
| name: "options", | ||
| title: "Options", | ||
| description: `Recognized keys:\n limit : 1–100 (default 10)\n after : pagination cursor from previous response's \`paging.next.after\`\n properties : array of property names OR comma-separated string\n archived : bool — include archived records (default false)\n\n${defaults}`, | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 5, | ||
| advanced: true, | ||
| }; | ||
| } | ||
| const commonErrors = { | ||
| credential_not_found: "No credential with that slug exists in the vault.", | ||
| token_missing: "The credential exists but has no `access_token` field.", | ||
| validation_failed: "A required argument is missing or malformed.", | ||
| transport: "Network failure calling api.hubapi.com.", | ||
| hubspot_error: "HubSpot returned an error — see `hubspot_error.message` and `.category` in the response.", | ||
| rate_limited: "Hit HubSpot rate limits (daily or burst). Slow down or upgrade your tier.", | ||
| not_found: "No record with that ID exists (or it was archived).", | ||
| }; | ||
| // ── Exports: function metadata ───────────────────────────────────────── | ||
| export const HubspotFunctionMetadata = { | ||
| // ===================== CONTACTS ===================== | ||
| createContact: { | ||
| title: "Create contact", | ||
| summary: "Add a new person to the CRM", | ||
| description: "Calls `POST /crm/v3/objects/contacts`. HubSpot requires at least one of `email`, `firstname`, `lastname`, or another unique identifier. Returns the full contact record including the generated `id`. If a contact with the same email already exists, HubSpot returns a 409 error — use `updateContact` or the idempotent upsert pattern (lookup by email then patch).", | ||
| group: "contacts", | ||
| action: "write", | ||
| icon: "user-plus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "contact", "crm", "lead"], | ||
| parameters: [ | ||
| credentialParam, | ||
| propertiesParam("contact", '{email: "ada@example.com", firstname: "Ada", lastname: "Lovelace", phone: "+1-555-0100", company: "Analytical Engines", lifecyclestage: "lead"}'), | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{id, properties: {…}, createdAt, updatedAt, archived}.", | ||
| errors: { ...commonErrors, conflict: "A contact with that email already exists." }, | ||
| examples: [ | ||
| { | ||
| title: "Sync a form submitter", | ||
| code: 'hubspot.createContact "my_hubspot" {\n email: {{ form.email }},\n firstname: {{ form.first_name }},\n lastname: {{ form.last_name }},\n lead_source: "Website form"\n}', | ||
| }, | ||
| ], | ||
| example: 'hubspot.createContact "my_hubspot" {email:"a@b.com", firstname:"Ada"}', | ||
| }, | ||
| updateContact: { | ||
| title: "Update contact", | ||
| summary: "Patch properties on an existing contact", | ||
| description: 'Calls `PATCH /crm/v3/objects/contacts/{id}`. Only the fields you supply are changed; unset fields keep their current values. Use the sentinel value `""` (empty string) to clear a property.', | ||
| group: "contacts", | ||
| action: "write", | ||
| icon: "user-check", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "contact", "update"], | ||
| parameters: [ | ||
| credentialParam, | ||
| contactIdParam, | ||
| propertiesParam("contact", '{lifecyclestage: "customer", hs_lead_status: "CONNECTED"}'), | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Updated contact record.", | ||
| errors: commonErrors, | ||
| example: 'hubspot.updateContact "my_hubspot" "12345" {phone:"+1-555-0100"}', | ||
| }, | ||
| getContact: { | ||
| title: "Get contact", | ||
| summary: "Fetch a single contact by ID or email", | ||
| description: "Calls `GET /crm/v3/objects/contacts/{id}`. Pass a numeric ID, OR prefix with `email:` to look up by email address (uses the `idProperty=email` query parameter). Returns `{error: 'not_found'}` with code `not_found` if no match.", | ||
| group: "contacts", | ||
| action: "read", | ||
| icon: "user", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "contact", "lookup"], | ||
| parameters: [credentialParam, contactIdParam, propertySelectParam], | ||
| returnType: "object", | ||
| returnDescription: 'Contact record or `{error: "not_found"}`.', | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { title: "By ID", code: 'hubspot.getContact "my_hubspot" "12345"' }, | ||
| { title: "By email", code: 'hubspot.getContact "my_hubspot" "email:ada@example.com"' }, | ||
| { | ||
| title: "With custom property set", | ||
| code: 'hubspot.getContact "my_hubspot" "12345" ["email","firstname","phone","lifecyclestage"]', | ||
| }, | ||
| ], | ||
| example: 'hubspot.getContact "my_hubspot" "12345"', | ||
| }, | ||
| searchContacts: { | ||
| title: "Search contacts", | ||
| summary: "Full-text search across contact properties", | ||
| description: "Calls `POST /crm/v3/objects/contacts/search`. Matches against firstname, lastname, email, phone, and company by default. For precise filtering, pass `filterGroups` — an array of `{filters: [{propertyName, operator, value}]}`. Operators: `EQ`, `NEQ`, `LT`, `LTE`, `GT`, `GTE`, `BETWEEN`, `IN`, `NOT_IN`, `HAS_PROPERTY`, `NOT_HAS_PROPERTY`, `CONTAINS_TOKEN`, `NOT_CONTAINS_TOKEN`.", | ||
| group: "contacts", | ||
| action: "query", | ||
| icon: "search", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "contact", "search", "filter"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "query", | ||
| title: "Query", | ||
| description: "Free-text search string. Pass an empty string when using `filterGroups` exclusively.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: false, | ||
| allowExpression: true, | ||
| placeholder: "ada@example.com", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n limit : 1–100 (default 10)\n after : pagination cursor\n properties : array of property names to return\n sorts : array of `{propertyName, direction: 'ASCENDING'|'DESCENDING'}`\n filterGroups : array of filter groups — see description for operator list", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{total, results: [], paging: {next: {after}}}.", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { title: "By email", code: 'hubspot.searchContacts "my_hubspot" "ada@example.com"' }, | ||
| { | ||
| title: "Structured filter", | ||
| code: 'hubspot.searchContacts "my_hubspot" "" {\n filterGroups: [{filters:[{propertyName:"lifecyclestage", operator:"EQ", value:"lead"}]}],\n limit: 50\n}', | ||
| }, | ||
| ], | ||
| example: 'hubspot.searchContacts "my_hubspot" "ada@example.com"', | ||
| }, | ||
| listContacts: { | ||
| title: "List contacts", | ||
| summary: "Page through contacts", | ||
| description: "Calls `GET /crm/v3/objects/contacts`. Cursor-based pagination via `options.after`.", | ||
| group: "contacts", | ||
| action: "query", | ||
| icon: "users", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "contact", "list", "paginate"], | ||
| parameters: [credentialParam, listOptionsParam("Default sort is by `createdAt` descending.")], | ||
| returnType: "object", | ||
| returnDescription: "{results: [], paging?: {next: {after, link}}}.", | ||
| errors: commonErrors, | ||
| example: 'hubspot.listContacts "my_hubspot" {limit: 50}', | ||
| }, | ||
| deleteContact: { | ||
| title: "Delete (archive) contact", | ||
| summary: "Archive a contact by ID", | ||
| description: "Calls `DELETE /crm/v3/objects/contacts/{id}`. HubSpot soft-deletes (archives) rather than hard-delete — the contact can be restored via the UI within 90 days. GDPR erasure requires a separate `/gdpr-delete` endpoint not exposed here.", | ||
| group: "contacts", | ||
| action: "delete", | ||
| icon: "user-minus", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "destructive"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "contact", "delete", "archive"], | ||
| parameters: [credentialParam, contactIdParam], | ||
| returnType: "object", | ||
| returnDescription: "{ok: true} on success.", | ||
| errors: commonErrors, | ||
| example: 'hubspot.deleteContact "my_hubspot" "12345"', | ||
| }, | ||
| // ===================== COMPANIES ===================== | ||
| createCompany: { | ||
| title: "Create company", | ||
| summary: "Add a new organization to the CRM", | ||
| description: "Calls `POST /crm/v3/objects/companies`. Common fields: `name`, `domain`, `industry`, `city`, `country`, `numberofemployees`, `annualrevenue`.", | ||
| group: "companies", | ||
| action: "write", | ||
| icon: "building", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "company", "organization"], | ||
| parameters: [ | ||
| credentialParam, | ||
| propertiesParam("company", '{name: "Acme Inc", domain: "acme.com", industry: "Software", numberofemployees: 120}'), | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Created company record with generated `id`.", | ||
| errors: commonErrors, | ||
| example: 'hubspot.createCompany "my_hubspot" {name:"Acme", domain:"acme.com"}', | ||
| }, | ||
| updateCompany: { | ||
| title: "Update company", | ||
| summary: "Patch properties on an existing company", | ||
| description: "Calls `PATCH /crm/v3/objects/companies/{id}`. Only supplied fields are changed.", | ||
| group: "companies", | ||
| action: "write", | ||
| icon: "edit-3", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "company", "update"], | ||
| parameters: [ | ||
| credentialParam, | ||
| companyIdParam, | ||
| propertiesParam("company", "{numberofemployees: 150, annualrevenue: 5000000}"), | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Updated company record.", | ||
| errors: commonErrors, | ||
| example: 'hubspot.updateCompany "my_hubspot" "67890" {industry:"SaaS"}', | ||
| }, | ||
| getCompany: { | ||
| title: "Get company", | ||
| summary: "Fetch a single company by ID", | ||
| description: "Calls `GET /crm/v3/objects/companies/{id}`.", | ||
| group: "companies", | ||
| action: "read", | ||
| icon: "building", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "company", "lookup"], | ||
| parameters: [credentialParam, companyIdParam, propertySelectParam], | ||
| returnType: "object", | ||
| returnDescription: 'Company record or `{error: "not_found"}`.', | ||
| errors: commonErrors, | ||
| example: 'hubspot.getCompany "my_hubspot" "67890"', | ||
| }, | ||
| listCompanies: { | ||
| title: "List companies", | ||
| summary: "Page through companies", | ||
| description: "Calls `GET /crm/v3/objects/companies`.", | ||
| group: "companies", | ||
| action: "query", | ||
| icon: "list", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "company", "list"], | ||
| parameters: [credentialParam, listOptionsParam("")], | ||
| returnType: "object", | ||
| returnDescription: "{results: [], paging?: {next: {after}}}.", | ||
| errors: commonErrors, | ||
| example: 'hubspot.listCompanies "my_hubspot" {limit: 25}', | ||
| }, | ||
| // ===================== DEALS ===================== | ||
| createDeal: { | ||
| title: "Create deal", | ||
| summary: "Open a new sales opportunity", | ||
| description: "Calls `POST /crm/v3/objects/deals`. Required: `dealname`. Strongly recommended: `dealstage` (must match a stage in your pipeline — the API value, not the label) and `pipeline`. Other common fields: `amount`, `closedate` (epoch ms or ISO), `hubspot_owner_id`.", | ||
| group: "deals", | ||
| action: "write", | ||
| icon: "dollar-sign", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "deal", "opportunity", "sales"], | ||
| parameters: [ | ||
| credentialParam, | ||
| propertiesParam("deal", '{dealname: "Acme Q4 renewal", amount: 15000, dealstage: "appointmentscheduled", pipeline: "default", closedate: "2026-06-30"}'), | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Created deal record with generated `id`.", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Create an MQL deal", | ||
| code: 'hubspot.createDeal "my_hubspot" {\n dealname: "{{ form.company_name }} trial",\n dealstage: "appointmentscheduled",\n pipeline: "default",\n amount: 2500\n}', | ||
| }, | ||
| ], | ||
| example: 'hubspot.createDeal "my_hubspot" {dealname:"Big one", amount:10000}', | ||
| }, | ||
| updateDeal: { | ||
| title: "Update deal", | ||
| summary: "Advance a deal through the pipeline or change its value", | ||
| description: "Calls `PATCH /crm/v3/objects/deals/{id}`. Most common use: setting `dealstage` to move the deal forward, or updating `amount` / `closedate` as the deal evolves.", | ||
| group: "deals", | ||
| action: "write", | ||
| icon: "trending-up", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "deal", "update", "stage"], | ||
| parameters: [ | ||
| credentialParam, | ||
| dealIdParam, | ||
| propertiesParam("deal", '{dealstage: "closedwon", amount: 12500}'), | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Updated deal record.", | ||
| errors: commonErrors, | ||
| example: 'hubspot.updateDeal "my_hubspot" "9876" {dealstage:"closedwon"}', | ||
| }, | ||
| getDeal: { | ||
| title: "Get deal", | ||
| summary: "Fetch a single deal by ID", | ||
| description: "Calls `GET /crm/v3/objects/deals/{id}`.", | ||
| group: "deals", | ||
| action: "read", | ||
| icon: "dollar-sign", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "deal", "lookup"], | ||
| parameters: [credentialParam, dealIdParam, propertySelectParam], | ||
| returnType: "object", | ||
| returnDescription: 'Deal record or `{error: "not_found"}`.', | ||
| errors: commonErrors, | ||
| example: 'hubspot.getDeal "my_hubspot" "9876"', | ||
| }, | ||
| listDeals: { | ||
| title: "List deals", | ||
| summary: "Page through deals", | ||
| description: "Calls `GET /crm/v3/objects/deals`.", | ||
| group: "deals", | ||
| action: "query", | ||
| icon: "list", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "deal", "list", "pipeline"], | ||
| parameters: [credentialParam, listOptionsParam("")], | ||
| returnType: "object", | ||
| returnDescription: "{results: [], paging?: {next: {after}}}.", | ||
| errors: commonErrors, | ||
| example: 'hubspot.listDeals "my_hubspot" {limit: 50, properties: ["dealname","amount","dealstage"]}', | ||
| }, | ||
| // ===================== ENGAGEMENTS ===================== | ||
| createNote: { | ||
| title: "Create note", | ||
| summary: "Attach a note to a contact, company, or deal", | ||
| description: 'Calls `POST /crm/v3/objects/notes`. Pass the body via `body` (HTML allowed). Optional `associations` argument attaches the note to records — pass an object like `{contact: "12345", deal: "9876"}` and the module converts it to HubSpot\'s association type IDs (202 contact, 190 company, 214 deal) automatically.', | ||
| group: "engagements", | ||
| action: "write", | ||
| icon: "sticky-note", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "note", "engagement"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "body", | ||
| title: "Body", | ||
| description: "Note content. HTML allowed (HubSpot renders it in the CRM UI).", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 4, | ||
| placeholder: "Called customer — wants a demo next week.", | ||
| }, | ||
| { | ||
| name: "associations", | ||
| title: "Associations", | ||
| description: "Flat object of `{objectType: id}` to attach the note to. Recognized types: `contact`, `company`, `deal`, `ticket`. Values can be a single ID or an array of IDs.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| }, | ||
| { | ||
| name: "extraProperties", | ||
| title: "Extra properties", | ||
| description: "Any additional properties to set (e.g. `hubspot_owner_id`, `hs_timestamp`). `hs_timestamp` defaults to now.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Created note engagement record.", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Note on a contact", | ||
| code: 'hubspot.createNote "my_hubspot" "Followed up via email" {contact: "12345"}', | ||
| }, | ||
| ], | ||
| example: 'hubspot.createNote "my_hubspot" "Called today" {contact:"12345"}', | ||
| }, | ||
| createTask: { | ||
| title: "Create task", | ||
| summary: "Schedule a follow-up task on a CRM record", | ||
| description: "Calls `POST /crm/v3/objects/tasks`. Pass `subject` and optionally `body`, `dueDate` (ISO or epoch ms — sets `hs_timestamp`), `priority` ('LOW'|'MEDIUM'|'HIGH'), `status` ('NOT_STARTED'|'IN_PROGRESS'|'WAITING'|'COMPLETED'|'DEFERRED'), `taskType` ('CALL'|'EMAIL'|'TODO'), `ownerId`. Attach to records via `associations` (same shape as `createNote`).", | ||
| group: "engagements", | ||
| action: "write", | ||
| icon: "check-square", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["hubspot", "task", "engagement", "todo"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "subject", | ||
| title: "Subject", | ||
| description: "Short task title shown in the CRM task list.", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "Follow up on demo request", | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n body : longer description\n dueDate : ISO 8601 string or epoch ms\n priority : 'LOW' | 'MEDIUM' | 'HIGH' (default 'MEDIUM')\n status : 'NOT_STARTED' (default) | 'IN_PROGRESS' | 'WAITING' | 'COMPLETED' | 'DEFERRED'\n taskType : 'CALL' | 'EMAIL' | 'TODO' (default 'TODO')\n ownerId : hubspot_owner_id to assign to", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| }, | ||
| { | ||
| name: "associations", | ||
| title: "Associations", | ||
| description: "Same shape as `createNote`: `{contact: id, company: id, deal: id, ticket: id}`.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Created task engagement record.", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Task on a deal", | ||
| code: 'hubspot.createTask "my_hubspot" "Send contract" {\n dueDate: "2026-04-25T10:00:00Z",\n priority: "HIGH",\n taskType: "EMAIL"\n} {deal: "9876"}', | ||
| }, | ||
| ], | ||
| example: 'hubspot.createTask "my_hubspot" "Call back" {priority:"HIGH"} {contact:"12345"}', | ||
| }, | ||
| }; | ||
| // ── Exports: module metadata ─────────────────────────────────────────── | ||
| export const HubspotModuleMetadata = { | ||
| description: "Sync form submissions into HubSpot contacts, create and advance deals through your sales pipeline, attach notes and tasks to records, and search your CRM — all from RobinPath scripts.\n\nAuthenticated via a **Private App access token** (HubSpot deprecated legacy API keys in 2022). Store the token as a `hubspot` credential and pass the slug as the first argument to every method.\n\nAll CRM object fields are passed as a flat object. The module wraps them in HubSpot's `properties` envelope automatically. Responses are returned untouched so you can read `.id`, `.properties.email`, `.createdAt`, etc.", | ||
| slug: "hubspot", | ||
| title: "HubSpot", | ||
| summary: "Contacts, companies, deals, notes, tasks — manage your HubSpot CRM pipeline", | ||
| category: "sales", | ||
| icon: "icon.svg", | ||
| color: "#FF7A59", | ||
| version: "0.2.0", | ||
| docsUrl: "https://docs.robinpath.com/modules/hubspot", | ||
| status: "stable", | ||
| requires: [], | ||
| minNodeVersion: "18.0.0", | ||
| credentialsType: CREDENTIAL_TYPE, | ||
| operationGroups: { | ||
| contacts: { title: "Contacts", description: "People records — the primary CRM object.", order: 1 }, | ||
| companies: { title: "Companies", description: "Organizations that contacts belong to.", order: 2 }, | ||
| deals: { title: "Deals", description: "Sales opportunities moving through a pipeline.", order: 3 }, | ||
| engagements: { title: "Engagements", description: "Notes and tasks attached to CRM records.", order: 4 }, | ||
| }, | ||
| methods: Object.keys(HubspotFunctions), | ||
| }; | ||
| //# sourceMappingURL=hubspot.js.map |
| {"version":3,"file":"hubspot.js","sourceRoot":"","sources":["../src/hubspot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAWH,2EAA2E;AAE3E,MAAM,KAAK,GAA0B,EAAE,CAAC;AAExC,SAAS,IAAI;IACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAa;IAC5C,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;AACjB,CAAC;AAED,0EAA0E;AAE1E,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAC3C,MAAM,eAAe,GAAG,SAAS,CAAC;AAMlC,SAAS,WAAW,CAAC,KAAa,EAAE,IAAY,EAAE,QAAiC,EAAE;IACnF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAiB,CAAC;AAClD,CAAC;AAED,0EAA0E;AAE1E,KAAK,UAAU,YAAY,CAAC,cAAsB;IAChD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,8BAA8B,EAAE,sBAAsB,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,MAAsC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,WAAW,CAChB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1C,sBAAsB,CACvB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,WAAW,CAAC,eAAe,cAAc,cAAc,EAAE,sBAAsB,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,WAAW,CAAC,yCAAyC,EAAE,eAAe,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,0EAA0E;AAE1E,KAAK,UAAU,IAAI,CACjB,KAAa,EACb,MAAc,EACd,YAAoB,EACpB,IAAc;IAEd,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,KAAK,EAAE;QAChC,MAAM,EAAE,kBAAkB;KAC3B,CAAC;IACF,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC9C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,WAAW,CAChB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1C,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACpD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAC3D,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC;QACzD,CAAC,CAAE,OAAmC;QACtC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAE9D,IAAI,OAAO,GAAG,yBAAyB,QAAQ,CAAC,MAAM,GAAG,CAAC;IAC1D,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,IAAI,IAAI,GAAG,eAAe,CAAC;IAC3B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,IAAI,GAAG,WAAW,CAAC;SAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,IAAI,GAAG,cAAc,CAAC;IAExD,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;QAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,aAAa,EAAE,UAAU;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAE1E;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAA8B;IACzD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAChC,CAAC;aAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACzC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1D,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CACpB,QAAgB,EAChB,EAAU;IAEV,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,GAAG,QAAQ,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAChD,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE;SAC/B,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA8B;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,oEAAoE;AACpE,SAAS,GAAG;IACV,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,sCAAsC;QACtC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,oBAAoB,GAA2C;IACnE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5D,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;CAC7D,CAAC;AAOF,SAAS,iBAAiB,CACxB,GAA4B,EAC5B,IAAY;IAEZ,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACtD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE;gBACtB,KAAK,EAAE;oBACL;wBACE,mBAAmB,EAAE,iBAAiB;wBACtC,iBAAiB,EAAE,MAAM;qBAC1B;iBACF;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI,CACjB,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,IAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,OAAO,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,IAAe,EAAE,UAAkB;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEhF,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC/C,CAAC,CAAE,IAAI,CAAC,UAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;IACtE,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,0EAA0E;AAE1E,MAAM,aAAa,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACjF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,2BAA2B,EAAE,mBAAmB,CAAmB,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,yBAAyB,EAAE;QAC1D,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC;KACvC,CAAC,CAAmB,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACjF,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,WAAW,CAAC,0BAA0B,EAAE,mBAAmB,CAAmB,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,2BAA2B,EAAE,mBAAmB,CAAmB,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAChB,IAAI,EACJ,OAAO,EACP,2BAA2B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EACnD,EAAE,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAC3C,CAAmB,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,CAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnE,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,WAAW,CAAC,0BAA0B,EAAE,mBAAmB,CAAmB,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAClC,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,CAAmB,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,cAAc,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEhF,MAAM,IAAI,GAA4B;QACpC,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;KAC9D,CAAC;IACF,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,gCAAgC,EAAE,IAAI,CAAC,CAAmB,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,YAAY,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAClD,OAAO,CAAC,MAAM,WAAW,CAAC,IAAiB,EAAE,UAAU,CAAC,CAAmB,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,aAAa,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,WAAW,CAAC,0BAA0B,EAAE,mBAAmB,CAAmB,CAAC;IACxF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAChB,IAAI,EACJ,QAAQ,EACR,2BAA2B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EACnD,IAAI,CACL,CAAmB,CAAC;AACvB,CAAC,CAAC;AAEF,0EAA0E;AAE1E,MAAM,aAAa,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACjF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,2BAA2B,EAAE,mBAAmB,CAAmB,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,0BAA0B,EAAE;QAC3D,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC;KACvC,CAAC,CAAmB,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACjF,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,WAAW,CAAC,0BAA0B,EAAE,mBAAmB,CAAmB,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,2BAA2B,EAAE,mBAAmB,CAAmB,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAChB,IAAI,EACJ,OAAO,EACP,4BAA4B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EACpD,EAAE,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAC3C,CAAmB,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,CAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,WAAW,CAAC,0BAA0B,EAAE,mBAAmB,CAAmB,CAAC;IACxF,CAAC;IACD,IAAI,IAAI,GAAG,4BAA4B,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;IAChE,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,IAAI,gBAAgB,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAmB,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,aAAa,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACnD,OAAO,CAAC,MAAM,WAAW,CAAC,IAAiB,EAAE,WAAW,CAAC,CAAmB,CAAC;AAC/E,CAAC,CAAC;AAEF,0EAA0E;AAE1E,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACjF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,2BAA2B,EAAE,mBAAmB,CAAmB,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE;QACvD,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC;KACvC,CAAC,CAAmB,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACjF,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,WAAW,CAAC,uBAAuB,EAAE,mBAAmB,CAAmB,CAAC;IACrF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,2BAA2B,EAAE,mBAAmB,CAAmB,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAChB,IAAI,EACJ,OAAO,EACP,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAChD,EAAE,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAC3C,CAAmB,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,CAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,WAAW,CAAC,uBAAuB,EAAE,mBAAmB,CAAmB,CAAC;IACrF,CAAC;IACD,IAAI,IAAI,GAAG,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5D,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,IAAI,gBAAgB,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAmB,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,SAAS,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAC/C,OAAO,CAAC,MAAM,WAAW,CAAC,IAAiB,EAAE,OAAO,CAAC,CAAmB,CAAC;AAC3E,CAAC,CAAC;AAEF,0EAA0E;AAE1E,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACxF,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEjF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,WAAW,CAAC,qBAAqB,EAAE,mBAAmB,CAAmB,CAAC;IACnF,CAAC;IAED,MAAM,KAAK,GAA4B;QACrC,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,GAAG,EAAE;QACnB,GAAG,KAAK;KACT,CAAC;IAEF,MAAM,OAAO,GAA4B;QACvC,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC;KACvC,CAAC;IACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAmB,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAChF,MAAM,YAAY,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAExF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,wBAAwB,EAAE,mBAAmB,CAAmB,CAAC;IACtF,CAAC;IAED,MAAM,KAAK,GAA4B;QACrC,eAAe,EAAE,OAAO;QACxB,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC;QACpD,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;QACnD,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;QAC7C,YAAY,EAAE,gBAAgB,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;KACrD,CAAC;IACF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,OAAO,GAA4B;QACvC,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC;KACvC,CAAC;IACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAmB,CAAC;AACvF,CAAC,CAAC;AAEF,0EAA0E;AAE1E,MAAM,CAAC,MAAM,gBAAgB,GAAmC;IAC9D,YAAY;IACZ,aAAa;IACb,aAAa;IACb,UAAU;IACV,cAAc;IACd,YAAY;IACZ,aAAa;IACb,aAAa;IACb,aAAa;IACb,aAAa;IACb,UAAU;IACV,aAAa;IACb,SAAS;IACT,UAAU;IACV,UAAU;IACV,OAAO;IACP,SAAS;IACT,eAAe;IACf,UAAU;IACV,UAAU;CACX,CAAC;AAEF,0EAA0E;AAE1E,MAAM,CAAC,MAAM,sBAAsB,GAA2B;IAC5D;QACE,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,2BAA2B;QAClC,IAAI,EAAE,OAAO;QACb,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,8CAA8C;gBAC3D,WAAW,EACT,2PAA2P;gBAC7P,OAAO,EAAE,OAAO;aACjB;SACF;KACF;CACF,CAAC;AAEF,0EAA0E;AAE1E,MAAM,eAAe,GAAsB;IACzC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,2DAA2D;IACxE,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,UAAU;IACzB,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,YAAY;IACzB,QAAQ,EAAE;QACR,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;QAC7B,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;KAClC;CACF,CAAC;AAEF,MAAM,cAAc,GAAsB;IACxC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,YAAY;IACnB,WAAW,EACT,wHAAwH;IAC1H,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,OAAO;CACrB,CAAC;AAEF,MAAM,cAAc,GAAsB;IACxC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,6BAA6B;IAC1C,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,OAAO;CACrB,CAAC;AAEF,MAAM,WAAW,GAAsB;IACrC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,0BAA0B;IACvC,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,SAAS;CACvB,CAAC;AAEF,SAAS,eAAe,CAAC,MAAc,EAAE,OAAe;IACtD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,kBAAkB,MAAM,oKAAoK,OAAO,EAAE;QACvM,QAAQ,EAAE,QAAQ;QAClB,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;QACrB,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,mBAAmB,GAAsB;IAC7C,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EACT,mJAAmJ;IACrJ,QAAQ,EAAE,OAAO;IACjB,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,KAAK;IACf,eAAe,EAAE,IAAI;IACrB,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,SAAS,gBAAgB,CAAC,QAAgB;IACxC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,6QAA6Q,QAAQ,EAAE;QACzR,QAAQ,EAAE,QAAQ;QAClB,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,KAAK;QACf,eAAe,EAAE,IAAI;QACrB,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAA2B;IAC3C,oBAAoB,EAAE,mDAAmD;IACzE,aAAa,EAAE,wDAAwD;IACvE,iBAAiB,EAAE,8CAA8C;IACjE,SAAS,EAAE,yCAAyC;IACpD,aAAa,EACX,0FAA0F;IAC5F,YAAY,EAAE,2EAA2E;IACzF,SAAS,EAAE,qDAAqD;CACjE,CAAC;AAEF,0EAA0E;AAE1E,MAAM,CAAC,MAAM,uBAAuB,GAAqC;IACvE,uDAAuD;IAEvD,aAAa,EAAE;QACb,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,6BAA6B;QACtC,WAAW,EACT,yWAAyW;QAC3W,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC;QAC3C,UAAU,EAAE;YACV,eAAe;YACf,eAAe,CACb,SAAS,EACT,iJAAiJ,CAClJ;SACF;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,wDAAwD;QAC3E,MAAM,EAAE,EAAE,GAAG,YAAY,EAAE,QAAQ,EAAE,2CAA2C,EAAE;QAClF,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EACF,4KAA4K;aAC/K;SACF;QACD,OAAO,EAAE,uEAAuE;KACjF;IAED,aAAa,EAAE;QACb,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,yCAAyC;QAClD,WAAW,EACT,8LAA8L;QAChM,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;QACtC,UAAU,EAAE;YACV,eAAe;YACf,cAAc;YACd,eAAe,CAAC,SAAS,EAAE,2DAA2D,CAAC;SACxF;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,yBAAyB;QAC5C,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,kEAAkE;KAC5E;IAED,UAAU,EAAE;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,uCAAuC;QAChD,WAAW,EACT,oOAAoO;QACtO,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;QACtC,UAAU,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,mBAAmB,CAAC;QAClE,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,2CAA2C;QAC9D,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE;YACR,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,yCAAyC,EAAE;YACnE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,yDAAyD,EAAE;YACtF;gBACE,KAAK,EAAE,0BAA0B;gBACjC,IAAI,EACF,wFAAwF;aAC3F;SACF;QACD,OAAO,EAAE,yCAAyC;KACnD;IAED,cAAc,EAAE;QACd,KAAK,EAAE,iBAAiB;QACxB,OAAO,EAAE,4CAA4C;QACrD,WAAW,EACT,4XAA4X;QAC9X,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAChD,UAAU,EAAE;YACV,eAAe;YACf;gBACE,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,sFAAsF;gBACnG,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,MAAM;gBACrB,QAAQ,EAAE,KAAK;gBACf,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,iBAAiB;aAC/B;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,SAAS;gBAChB,WAAW,EACT,6SAA6S;gBAC/S,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,MAAM;gBACrB,QAAQ,EAAE,KAAK;gBACf,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,IAAI;aACf;SACF;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,gDAAgD;QACnE,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE;YACR,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,uDAAuD,EAAE;YACpF;gBACE,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EACF,uJAAuJ;aAC1J;SACF;QACD,OAAO,EAAE,uDAAuD;KACjE;IAED,YAAY,EAAE;QACZ,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,uBAAuB;QAChC,WAAW,EAAE,oFAAoF;QACjG,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC;QAChD,UAAU,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,4CAA4C,CAAC,CAAC;QAC7F,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,gDAAgD;QACnE,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,+CAA+C;KACzD;IAED,aAAa,EAAE;QACb,KAAK,EAAE,0BAA0B;QACjC,OAAO,EAAE,yBAAyB;QAClC,WAAW,EACT,2OAA2O;QAC7O,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,EAAE,aAAa,CAAC;QAC/C,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;QACjD,UAAU,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC;QAC7C,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,wBAAwB;QAC3C,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,4CAA4C;KACtD;IAED,wDAAwD;IAExD,aAAa,EAAE;QACb,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,mCAAmC;QAC5C,WAAW,EACT,+IAA+I;QACjJ,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;QAC5C,UAAU,EAAE;YACV,eAAe;YACf,eAAe,CACb,SAAS,EACT,sFAAsF,CACvF;SACF;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,6CAA6C;QAChE,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,qEAAqE;KAC/E;IAED,aAAa,EAAE;QACb,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,yCAAyC;QAClD,WAAW,EAAE,iFAAiF;QAC9F,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;QACtC,UAAU,EAAE;YACV,eAAe;YACf,cAAc;YACd,eAAe,CAAC,SAAS,EAAE,kDAAkD,CAAC;SAC/E;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,yBAAyB;QAC5C,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,8DAA8D;KACxE;IAED,UAAU,EAAE;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,8BAA8B;QACvC,WAAW,EAAE,6CAA6C;QAC1D,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;QACtC,UAAU,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,mBAAmB,CAAC;QAClE,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,2CAA2C;QAC9D,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,yCAAyC;KACnD;IAED,aAAa,EAAE;QACb,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,wBAAwB;QACjC,WAAW,EAAE,wCAAwC;QACrD,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;QACpC,UAAU,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACnD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,0CAA0C;QAC7D,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,gDAAgD;KAC1D;IAED,oDAAoD;IAEpD,UAAU,EAAE;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,8BAA8B;QACvC,WAAW,EACT,oQAAoQ;QACtQ,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC;QACjD,UAAU,EAAE;YACV,eAAe;YACf,eAAe,CACb,MAAM,EACN,+HAA+H,CAChI;SACF;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,0CAA0C;QAC7D,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EACF,kKAAkK;aACrK;SACF;QACD,OAAO,EAAE,oEAAoE;KAC9E;IAED,UAAU,EAAE;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,yDAAyD;QAClE,WAAW,EACT,kKAAkK;QACpK,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC5C,UAAU,EAAE;YACV,eAAe;YACf,WAAW;YACX,eAAe,CAAC,MAAM,EAAE,yCAAyC,CAAC;SACnE;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,sBAAsB;QACzC,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,gEAAgE;KAC1E;IAED,OAAO,EAAE;QACP,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,2BAA2B;QACpC,WAAW,EAAE,yCAAyC;QACtD,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC;QACnC,UAAU,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,mBAAmB,CAAC;QAC/D,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,wCAAwC;QAC3D,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,qCAAqC;KAC/C;IAED,SAAS,EAAE;QACT,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,oBAAoB;QAC7B,WAAW,EAAE,oCAAoC;QACjD,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;QAC7C,UAAU,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACnD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,0CAA0C;QAC7D,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,2FAA2F;KACrG;IAED,0DAA0D;IAE1D,UAAU,EAAE;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,8CAA8C;QACvD,WAAW,EACT,uTAAuT;QACzT,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC;QACvC,UAAU,EAAE;YACV,eAAe;YACf;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,gEAAgE;gBAC7E,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,UAAU;gBACzB,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,IAAI;gBACrB,IAAI,EAAE,CAAC;gBACP,WAAW,EAAE,2CAA2C;aACzD;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,cAAc;gBACrB,WAAW,EACT,kKAAkK;gBACpK,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,MAAM;gBACrB,QAAQ,EAAE,KAAK;gBACf,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EACT,6GAA6G;gBAC/G,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,MAAM;gBACrB,QAAQ,EAAE,KAAK;gBACf,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,IAAI;aACf;SACF;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,iCAAiC;QACpD,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,4EAA4E;aACnF;SACF;QACD,OAAO,EAAE,kEAAkE;KAC5E;IAED,UAAU,EAAE;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,2CAA2C;QACpD,WAAW,EACT,6VAA6V;QAC/V,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;QAChC,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC;QAC/C,UAAU,EAAE;YACV,eAAe;YACf;gBACE,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,8CAA8C;gBAC3D,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,MAAM;gBACrB,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,2BAA2B;aACzC;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,SAAS;gBAChB,WAAW,EACT,gWAAgW;gBAClW,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,MAAM;gBACrB,QAAQ,EAAE,KAAK;gBACf,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,cAAc;gBACrB,WAAW,EACT,iFAAiF;gBACnF,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,MAAM;gBACrB,QAAQ,EAAE,KAAK;gBACf,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,CAAC;aACR;SACF;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,iCAAiC;QACpD,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,gBAAgB;gBACvB,IAAI,EACF,mJAAmJ;aACtJ;SACF;QACD,OAAO,EAAE,iFAAiF;KAC3F;CACF,CAAC;AAEF,0EAA0E;AAE1E,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,WAAW,EACT,4lBAA4lB;IAC9lB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,6EAA6E;IACtF,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,4CAA4C;IACrD,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,QAAQ;IACxB,eAAe,EAAE,eAAe;IAChC,eAAe,EAAE;QACf,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,0CAA0C,EAAE,KAAK,EAAE,CAAC,EAAE;QAClG,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,wCAAwC,EAAE,KAAK,EAAE,CAAC,EAAE;QAClG,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,gDAAgD,EAAE,KAAK,EAAE,CAAC,EAAE;QAClG,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,0CAA0C,EAAE,KAAK,EAAE,CAAC,EAAE;KACzG;IACD,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;CACvC,CAAC"} |
| import type { ModuleAdapter } from "@robinpath/core"; | ||
| declare const HubspotModule: ModuleAdapter; | ||
| export default HubspotModule; | ||
| export { HubspotModule }; | ||
| export { HubspotFunctions, HubspotFunctionMetadata, HubspotModuleMetadata, HubspotCredentialTypes, } from "./hubspot.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,aAAa,EAAE,aAQpB,CAAC;AAEF,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,cAAc,CAAC"} |
| import { HubspotFunctions, HubspotFunctionMetadata, HubspotModuleMetadata, HubspotCredentialTypes, configureHubspot, } from "./hubspot.js"; | ||
| const HubspotModule = { | ||
| name: "hubspot", | ||
| functions: HubspotFunctions, | ||
| functionMetadata: HubspotFunctionMetadata, | ||
| moduleMetadata: HubspotModuleMetadata, | ||
| credentialTypes: HubspotCredentialTypes, | ||
| configure: configureHubspot, | ||
| global: false, | ||
| }; | ||
| export default HubspotModule; | ||
| export { HubspotModule }; | ||
| export { HubspotFunctions, HubspotFunctionMetadata, HubspotModuleMetadata, HubspotCredentialTypes, } from "./hubspot.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,MAAM,aAAa,GAAkB;IACnC,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,gBAAgB;IAC3B,gBAAgB,EAAE,uBAAuB;IACzC,cAAc,EAAE,qBAAqB;IACrC,eAAe,EAAE,sBAAsB;IACvC,SAAS,EAAE,gBAAgB;IAC3B,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,cAAc,CAAC"} |
+20
-8
| { | ||
| "name": "@robinpath/hubspot", | ||
| "version": "0.1.1", | ||
| "version": "0.3.0", | ||
| "publishConfig": { | ||
@@ -23,12 +23,18 @@ "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": "HubSpot module for RobinPath.", | ||
| "description": "HubSpot CRM API v3 — contacts, companies, deals, notes, tasks, and list membership. Uses the encrypted credential vault for Private App tokens.", | ||
| "keywords": [ | ||
| "hubspot", | ||
| "crm" | ||
| "crm", | ||
| "sales", | ||
| "marketing", | ||
| "contacts", | ||
| "deals", | ||
| "companies", | ||
| "pipeline" | ||
| ], | ||
@@ -38,7 +44,13 @@ "license": "MIT", | ||
| "category": "crm", | ||
| "type": "integration", | ||
| "auth": "bearer-token", | ||
| "type": "module", | ||
| "auth": "credential-vault", | ||
| "functionCount": 12, | ||
| "baseUrl": "https://api.hubapi.com" | ||
| "baseUrl": "https://api.hubapi.com", | ||
| "language": "nodejs", | ||
| "platforms": [ | ||
| "cloud", | ||
| "cli", | ||
| "desktop" | ||
| ] | ||
| } | ||
| } |
+1
-1
@@ -22,3 +22,3 @@ # @robinpath/hubspot | ||
| ```bash | ||
| npm install @robinpath/hubspot | ||
| robinpath add @robinpath/hubspot | ||
| ``` | ||
@@ -25,0 +25,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
84888
2025.92%10
400%1132
Infinity%2
100%