//native
export type DynSelect_object_type = string
// Dropdown of the standard CRM object types plus the account's custom objects.
export async function object_type(auth: RT.Hubspot) {
const standard = [
"contacts",
"companies",
"deals",
"tickets",
"line_items",
"products",
"quotes",
"leads",
"notes",
"tasks",
"meetings",
"calls",
"emails",
"communications",
].map((o) => ({ value: o, label: o }))
const response = await fetch("https://api.hubapi.com/crm/v3/schemas", {
headers: {
Authorization: `Bearer ${auth.token}`,
Accept: "application/json",
},
})
// A token without crm.schemas.custom.read still gets the standard objects.
if (!response.ok) return standard
const { results } = (await response.json()) as {
results: { fullyQualifiedName: string; labels: { plural: string } }[]
}
return [
...standard,
...results.map((s) => ({
value: s.fullyQualifiedName,
label: `${s.labels.plural} (custom)`,
})),
]
}
/**
* List Association Labels
* List the association types (default and custom labels, with their category and typeId) available between two CRM object types. Object types other than contacts, companies and deals need their own scope on the connection (e.g. tickets, crm.objects.line_items.read, crm.objects.custom.read).
*/
export async function main(
auth: RT.Hubspot,
from_object_type: DynSelect_object_type,
to_object_type: DynSelect_object_type
) {
const url = new URL(
`https://api.hubapi.com/crm/v4/associations/${from_object_type}/${to_object_type}/labels`
)
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${auth.token}`,
Accept: "application/json",
},
})
if (!response.ok) {
throw new Error(`${response.status} ${await response.text()}`)
}
return await response.json()
}
Submitted by hugo989 5 hours ago