1 | |
2 |
|
3 | export type DynSelect_object_type = string |
4 |
|
5 | |
6 | export async function object_type(auth: RT.Hubspot) { |
7 | const standard = [ |
8 | "contacts", |
9 | "companies", |
10 | "deals", |
11 | "tickets", |
12 | "line_items", |
13 | "products", |
14 | "quotes", |
15 | "leads", |
16 | "notes", |
17 | "tasks", |
18 | "meetings", |
19 | "calls", |
20 | "emails", |
21 | "communications", |
22 | ].map((o) => ({ value: o, label: o })) |
23 | const response = await fetch("https://api.hubapi.com/crm/v3/schemas", { |
24 | headers: { |
25 | Authorization: `Bearer ${auth.token}`, |
26 | Accept: "application/json", |
27 | }, |
28 | }) |
29 | |
30 | if (!response.ok) return standard |
31 | const { results } = (await response.json()) as { |
32 | results: { fullyQualifiedName: string; labels: { plural: string } }[] |
33 | } |
34 | return [ |
35 | ...standard, |
36 | ...results.map((s) => ({ |
37 | value: s.fullyQualifiedName, |
38 | label: `${s.labels.plural} (custom)`, |
39 | })), |
40 | ] |
41 | } |
42 |
|
43 | |
44 | * Archive CRM Object |
45 | * Move a CRM record to the recycling bin. It can be restored from HubSpot for 90 days. 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). |
46 | */ |
47 | export async function main( |
48 | auth: RT.Hubspot, |
49 | object_type: DynSelect_object_type, |
50 | object_id: string |
51 | ) { |
52 | const url = new URL( |
53 | `https://api.hubapi.com/crm/v3/objects/${object_type}/${object_id}` |
54 | ) |
55 |
|
56 | const response = await fetch(url, { |
57 | method: "DELETE", |
58 | headers: { |
59 | Authorization: `Bearer ${auth.token}`, |
60 | Accept: "application/json", |
61 | }, |
62 | }) |
63 |
|
64 | if (!response.ok) { |
65 | throw new Error(`${response.status} ${await response.text()}`) |
66 | } |
67 | if (response.status === 204) return { success: true } |
68 |
|
69 | return await response.json() |
70 | } |
71 |
|