webflow-api 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +4 -5
  2. package/dist/api/collection.d.ts +51 -0
  3. package/dist/api/collection.js +35 -0
  4. package/dist/api/index.d.ts +7 -0
  5. package/dist/api/index.js +33 -0
  6. package/dist/api/item.d.ts +143 -0
  7. package/dist/api/item.js +131 -0
  8. package/dist/api/membership.d.ts +91 -0
  9. package/dist/api/membership.js +80 -0
  10. package/dist/api/meta.d.ts +51 -0
  11. package/dist/api/meta.js +24 -0
  12. package/dist/api/oauth.d.ts +67 -0
  13. package/dist/api/oauth.js +65 -0
  14. package/dist/api/site.d.ts +65 -0
  15. package/dist/api/site.js +59 -0
  16. package/dist/api/webhook.d.ts +80 -0
  17. package/dist/api/webhook.js +67 -0
  18. package/dist/core/client.d.ts +40 -0
  19. package/dist/core/client.js +49 -0
  20. package/dist/core/error.d.ts +19 -0
  21. package/dist/core/error.js +23 -0
  22. package/dist/core/index.d.ts +3 -0
  23. package/dist/core/index.js +19 -0
  24. package/dist/core/options.d.ts +8 -0
  25. package/dist/core/options.js +5 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.js +2 -9
  28. package/dist/webflow.d.ts +366 -0
  29. package/dist/webflow.js +388 -0
  30. package/dist/wrapper/collection.d.ts +85 -0
  31. package/dist/wrapper/collection.js +94 -0
  32. package/dist/wrapper/index.d.ts +6 -0
  33. package/dist/wrapper/index.js +22 -0
  34. package/dist/wrapper/item.d.ts +140 -0
  35. package/dist/wrapper/item.js +153 -0
  36. package/dist/wrapper/membership.d.ts +91 -0
  37. package/dist/wrapper/membership.js +106 -0
  38. package/dist/wrapper/response.d.ts +16 -0
  39. package/dist/wrapper/response.js +17 -0
  40. package/dist/wrapper/site.d.ts +119 -0
  41. package/dist/wrapper/site.js +136 -0
  42. package/dist/wrapper/webhook.d.ts +78 -0
  43. package/dist/wrapper/webhook.js +82 -0
  44. package/package.json +16 -17
  45. package/src/api/collection.ts +87 -0
  46. package/src/api/index.ts +7 -0
  47. package/src/api/item.ts +231 -0
  48. package/src/api/membership.ts +125 -0
  49. package/src/api/meta.ts +61 -0
  50. package/src/api/oauth.ts +119 -0
  51. package/src/api/site.ts +86 -0
  52. package/src/api/webhook.ts +125 -0
  53. package/src/core/client.ts +76 -0
  54. package/src/core/error.ts +32 -0
  55. package/src/core/index.ts +3 -0
  56. package/src/core/options.ts +9 -0
  57. package/src/index.ts +3 -0
  58. package/src/webflow.ts +487 -0
  59. package/src/wrapper/collection.ts +115 -0
  60. package/src/wrapper/index.ts +6 -0
  61. package/src/wrapper/item.ts +218 -0
  62. package/src/wrapper/membership.ts +138 -0
  63. package/src/wrapper/response.ts +25 -0
  64. package/src/wrapper/site.ts +164 -0
  65. package/src/wrapper/webhook.ts +116 -0
  66. package/yarn.lock +388 -1473
  67. package/dist/ResponseWrapper.js +0 -135
  68. package/dist/Webflow.js +0 -344
  69. package/dist/WebflowClient.js +0 -115
  70. package/index.d.ts +0 -430
  71. package/src/ResponseWrapper.js +0 -103
  72. package/src/Webflow.js +0 -301
  73. package/src/WebflowClient.js +0 -98
  74. package/src/index.js +0 -3
@@ -0,0 +1,218 @@
1
+ import { Client, QueryString, PaginationFilter } from "../core";
2
+ import { ResponseWrapper } from ".";
3
+ import { Item } from "../api";
4
+
5
+ export class ItemWrapper implements Item.IItem {
6
+ "published-on"?: string | null;
7
+ "published-by"?: string | null;
8
+ "updated-on": string;
9
+ "created-on": string;
10
+ "updated-by": string;
11
+ "created-by": string;
12
+ _archived: boolean;
13
+ _draft: boolean;
14
+ _cid: string;
15
+ name: string;
16
+ slug: string;
17
+ _id: string;
18
+
19
+ constructor(private client: Client, item: Item.IItem) {
20
+ Object.assign(this, item);
21
+ }
22
+
23
+ /**************************************************************
24
+ * Static Methods
25
+ **************************************************************/
26
+
27
+ /**
28
+ * Create a new Item
29
+ * @param client The Webflow client
30
+ * @param params The params for the request
31
+ * @param params.collectionId The Collection ID
32
+ * @param params.fields The Item fields to create
33
+ * @returns The created Item
34
+ */
35
+ static async create(
36
+ client: Client,
37
+ { collectionId, fields }: { collectionId: string; fields: any }
38
+ ) {
39
+ const res = await Item.create(client, { collectionId, fields });
40
+ const item = new ItemWrapper(client, res.data);
41
+ return ResponseWrapper<typeof item>(res, item);
42
+ }
43
+
44
+ /**
45
+ * Get a single Item
46
+ * @param client The Webflow client
47
+ * @param params The params for the request
48
+ * @param params.collectionId The Collection ID
49
+ * @param params.itemId The Item ID
50
+ * @returns A single Item
51
+ */
52
+ static async getOne(
53
+ client: Client,
54
+ itemParams: { collectionId: string; itemId: string }
55
+ ) {
56
+ const res = await Item.getOne(client, itemParams);
57
+ const item = new ItemWrapper(client, res.data.items[0]);
58
+ return ResponseWrapper<typeof item>(res, item);
59
+ }
60
+
61
+ /**
62
+ * Get a list of Items
63
+ * @param client The Webflow client
64
+ * @param params The params for the request
65
+ * @param params.collectionId The Collection ID
66
+ * @param params.limit The number of items to return (optional)
67
+ * @param params.offset The number of items to skip (optional)
68
+ * @returns A list of Items
69
+ */
70
+ static async list(
71
+ client: Client,
72
+ { collectionId, limit, offset }: { collectionId: string } & PaginationFilter
73
+ ) {
74
+ const res = await Item.list(client, { collectionId, limit, offset });
75
+ const items = res.data.items.map((i) => new ItemWrapper(client, i));
76
+ return ResponseWrapper<typeof items>(res, items);
77
+ }
78
+
79
+ /**
80
+ * Remove a single Item
81
+ * @param client The Webflow client
82
+ * @param params The params for the request
83
+ * @param params.collectionId The Collection ID
84
+ * @param params.itemId The Item ID
85
+ * @returns The result from the removal
86
+ */
87
+ static async remove(
88
+ client: Client,
89
+ { collectionId, itemId }: { collectionId: string; itemId: string }
90
+ ) {
91
+ const res = await Item.remove(client, { collectionId, itemId });
92
+ return ResponseWrapper<typeof res.data>(res);
93
+ }
94
+
95
+ /**
96
+ * Publishes a list of Items
97
+ * @param client The Webflow client
98
+ * @param params The request parameters
99
+ * @param params.collectionId The Collection ID
100
+ * @param params.itemIds The list of Item IDs to publish
101
+ * @param params.live Publish to live site
102
+ * @returns The result of the publish
103
+ */
104
+ static async publish(
105
+ client: Client,
106
+ {
107
+ collectionId,
108
+ itemIds,
109
+ live,
110
+ }: { collectionId: string; itemIds: string[]; live: boolean }
111
+ ) {
112
+ const res = await Item.publish(client, { collectionId, itemIds, live });
113
+ return ResponseWrapper<typeof res.data>(res);
114
+ }
115
+
116
+ /**
117
+ * Unpublishes a list of Items
118
+ * @param client The Webflow client
119
+ * @param params The params for the request
120
+ * @param params.collectionId The Collection ID
121
+ * @param params.live Unpublish from the live site
122
+ * @returns The result of the unpublish
123
+ */
124
+ static async unpublish(
125
+ client: Client,
126
+ {
127
+ collectionId,
128
+ itemIds,
129
+ live,
130
+ }: { collectionId: string; itemIds: string[]; live: boolean }
131
+ ) {
132
+ const res = await Item.unpublish(client, { collectionId, itemIds, live });
133
+ return ResponseWrapper<typeof res.data>(res);
134
+ }
135
+
136
+ /**
137
+ * Update a single Item
138
+ * @param client The Webflow client
139
+ * @param params The params for the request
140
+ * @param params.collectionId The Collection ID
141
+ * @param params.itemId The Item ID
142
+ * @param params.fields The fields to update
143
+ * @returns The updated Item
144
+ */
145
+ static async update(
146
+ client: Client,
147
+ {
148
+ collectionId,
149
+ itemId,
150
+ fields,
151
+ }: { collectionId: string; itemId: string; fields: any }
152
+ ) {
153
+ const res = await Item.update(client, {
154
+ collectionId,
155
+ fields,
156
+ itemId,
157
+ });
158
+
159
+ const item = new ItemWrapper(client, res.data);
160
+ return ResponseWrapper<typeof item>(res, item);
161
+ }
162
+
163
+ /**
164
+ * Patch a single Item
165
+ * @param client The Webflow client
166
+ * @param params The params for the request
167
+ * @param params.collectionId The Collection ID
168
+ * @param params.itemId The Item ID
169
+ * @param params.fields The fields to patch
170
+ * @returns The patched Item
171
+ */
172
+ static async patch(
173
+ client: Client,
174
+ {
175
+ collectionId,
176
+ itemId,
177
+ fields,
178
+ }: { collectionId: string; itemId: string; fields: any },
179
+ params?: QueryString
180
+ ) {
181
+ const res = await Item.patch(client, {
182
+ collectionId,
183
+ fields,
184
+ itemId,
185
+ });
186
+
187
+ const item = new ItemWrapper(client, res.data);
188
+ return ResponseWrapper<typeof item>(res, item);
189
+ }
190
+
191
+ /**************************************************************
192
+ * Instance Methods
193
+ **************************************************************/
194
+
195
+ /**
196
+ * Update a single Item
197
+ * @param fields The fields to update
198
+ * @returns The updated Item
199
+ */
200
+ update({ ...fields }) {
201
+ return ItemWrapper.update(this.client, {
202
+ collectionId: this._cid,
203
+ itemId: this._id,
204
+ fields,
205
+ });
206
+ }
207
+
208
+ /**
209
+ * Remove a single Item
210
+ * @returns The result from the removal
211
+ */
212
+ remove() {
213
+ return ItemWrapper.remove(this.client, {
214
+ collectionId: this._cid,
215
+ itemId: this._id,
216
+ });
217
+ }
218
+ }
@@ -0,0 +1,138 @@
1
+ import { Client, PaginationFilter } from "../core";
2
+ import { ResponseWrapper } from ".";
3
+ import { Membership } from "../api";
4
+
5
+ export class MembershipWrapper implements Membership.IUser {
6
+ emailVerified: boolean;
7
+ lastUpdated?: string;
8
+ createdOn: string;
9
+ _id: string;
10
+ data: any;
11
+
12
+ constructor(
13
+ private client: Client,
14
+ private siteId: string,
15
+ membership: Membership.IUser
16
+ ) {
17
+ Object.assign(this, membership);
18
+ }
19
+
20
+ /**************************************************************
21
+ * Static Methods
22
+ **************************************************************/
23
+
24
+ /**
25
+ * Get a single User
26
+ * @param client The Webflow client
27
+ * @param params The params for the request
28
+ * @param params.siteId The site ID
29
+ * @param params.userId The user ID
30
+ * @returns A single User
31
+ */
32
+ static async getOne(
33
+ client: Client,
34
+ { userId, siteId }: { siteId: string; userId: string }
35
+ ) {
36
+ const res = await Membership.getOne(client, { userId, siteId });
37
+ const user = ResponseWrapper<typeof res.data>(res);
38
+ return new MembershipWrapper(client, siteId, user);
39
+ }
40
+
41
+ /**
42
+ * Get a list of Users
43
+ * @param client The Webflow client
44
+ * @param params The params for the request
45
+ * @param params.siteId The site ID
46
+ * @param params.limit The number of items to return (optional)
47
+ * @param params.offset The number of items to skip (optional)
48
+ * @returns A list of Users
49
+ */
50
+ static async list(
51
+ client: Client,
52
+ { siteId, limit, offset }: { siteId: string } & PaginationFilter
53
+ ) {
54
+ const res = await Membership.list(client, { siteId, limit, offset });
55
+ const users = res.data.users.map(
56
+ (u) => new MembershipWrapper(client, siteId, u)
57
+ );
58
+ return ResponseWrapper<typeof users>(res, users);
59
+ }
60
+
61
+ /**
62
+ * Update a User
63
+ * @param client The Webflow client
64
+ * @param params The params for the request
65
+ * @param params.siteId The site ID
66
+ * @param params.userId The user ID
67
+ * @param params.data The data to update
68
+ * @returns The updated User
69
+ */
70
+ static async update(
71
+ client: Client,
72
+ { userId, siteId, data }: { userId: string; siteId: string; data: any }
73
+ ) {
74
+ const res = await Membership.update(client, { userId, siteId, data });
75
+ const user = ResponseWrapper<typeof res.data>(res);
76
+ return new MembershipWrapper(client, siteId, user);
77
+ }
78
+
79
+ /**
80
+ * Invite a User to a site
81
+ * @param client The Webflow client
82
+ * @param params The params for the request
83
+ * @param params.siteId The site ID
84
+ * @param params.email The email address of the user to invite
85
+ * @returns The newly created User
86
+ */
87
+ static async invite(
88
+ client: Client,
89
+ { siteId, email }: { siteId: string; email: string }
90
+ ) {
91
+ const res = await Membership.invite(client, { siteId, email });
92
+ return ResponseWrapper<typeof res.data>(res);
93
+ }
94
+
95
+ /**
96
+ * Remove a User
97
+ * @param client The Webflow client
98
+ * @param params The params for the request
99
+ * @param params.siteId The site ID
100
+ * @param params.userId The user ID
101
+ * @returns The result of the remove
102
+ */
103
+ static async remove(
104
+ client: Client,
105
+ { siteId, userId }: { siteId: string; userId: string }
106
+ ) {
107
+ const res = await Membership.remove(client, { userId, siteId });
108
+ return ResponseWrapper<typeof res.data>(res);
109
+ }
110
+
111
+ /**************************************************************
112
+ * Instance Methods
113
+ **************************************************************/
114
+
115
+ /**
116
+ * Update a User
117
+ * @param data The data to update
118
+ * @returns The updated User
119
+ */
120
+ async update(data: any) {
121
+ return MembershipWrapper.update(this.client, {
122
+ siteId: this.siteId,
123
+ userId: this._id,
124
+ data,
125
+ });
126
+ }
127
+
128
+ /**
129
+ * Remove a User
130
+ * @returns The result of the remove
131
+ */
132
+ async remove() {
133
+ return MembershipWrapper.remove(this.client, {
134
+ siteId: this.siteId,
135
+ userId: this._id,
136
+ });
137
+ }
138
+ }
@@ -0,0 +1,25 @@
1
+ import { AxiosResponse } from "axios";
2
+
3
+ export type MetaResponse<T> = T & {
4
+ _meta: {
5
+ rateLimit: {
6
+ limit: number;
7
+ remaining: number;
8
+ };
9
+ };
10
+ };
11
+
12
+ /**
13
+ * Wraps an HTTP response with Webflow Rate Limiting information
14
+ * @param response The HTTP response
15
+ * @param data The data to use (defaults to response.data)
16
+ * @returns The response with Webflow Rate Limiting information
17
+ */
18
+ export function ResponseWrapper<T>(response: AxiosResponse, data?: T) {
19
+ const limit = parseInt(response.headers["x-ratelimit-limit"], 10);
20
+ const remaining = parseInt(response.headers["x-ratelimit-remaining"], 10);
21
+
22
+ const result: MetaResponse<T> = data || response.data;
23
+ result._meta = { rateLimit: { limit, remaining } };
24
+ return result;
25
+ }
@@ -0,0 +1,164 @@
1
+ import {
2
+ CreateWebhookParams,
3
+ CollectionWrapper,
4
+ ResponseWrapper,
5
+ WebhookWrapper,
6
+ } from ".";
7
+ import { Client, QueryString } from "../core";
8
+ import { Site } from "../api";
9
+
10
+ export class SiteWrapper implements Site.ISite {
11
+ lastPublished: string;
12
+ previewUrl: string;
13
+ createdOn: string;
14
+ shortName: string;
15
+ timezone: string;
16
+ database: string;
17
+ name: string;
18
+ _id: string;
19
+
20
+ constructor(private client: Client, site: Site.ISite) {
21
+ Object.assign(this, site);
22
+ }
23
+
24
+ /**************************************************************
25
+ * Static Methods
26
+ **************************************************************/
27
+
28
+ /**
29
+ * Get a single Site
30
+ * @param client The Webflow client
31
+ * @param params The Site information
32
+ * @param params.siteId The Site ID
33
+ * @returns The Site
34
+ */
35
+ static async getOne(client: Client, { siteId }: { siteId: string }) {
36
+ const res = await Site.getOne(client, { siteId });
37
+ const site = new SiteWrapper(client, res.data);
38
+ return ResponseWrapper<typeof site>(res, site);
39
+ }
40
+
41
+ /**
42
+ * Get a list of Sites available
43
+ * @param client The Webflow client
44
+ * @param params The query parameters (optional)
45
+ * @returns A list of Sites
46
+ */
47
+ static async list(client: Client, params?: QueryString) {
48
+ const res = await Site.list(client, params);
49
+ const sites = res.data.map((s) => new SiteWrapper(client, s));
50
+ return ResponseWrapper<typeof sites>(res, sites);
51
+ }
52
+
53
+ /**
54
+ * Get a list of Domains for a Site
55
+ * @param client The Webflow client
56
+ * @param params The Site information
57
+ * @param params.siteId The Site ID
58
+ * @returns A list of Domains
59
+ */
60
+ static async domains(client: Client, { siteId }: { siteId: string }) {
61
+ const res = await Site.domains(client, { siteId });
62
+ return ResponseWrapper<typeof res.data>(res, res.data);
63
+ }
64
+
65
+ /**
66
+ * Publish a Site
67
+ * @param client The Webflow client
68
+ * @param params The Site information
69
+ * @param params.siteId The Site ID
70
+ * @param params.domain The domains to publish
71
+ * @returns The result of the publish
72
+ */
73
+ static async publish(
74
+ client: Client,
75
+ { siteId, domains }: { siteId: string; domains: string[] }
76
+ ) {
77
+ const res = await Site.publish(client, { siteId, domains });
78
+ return ResponseWrapper<typeof res.data>(res);
79
+ }
80
+
81
+ /**************************************************************
82
+ * Instance Methods
83
+ **************************************************************/
84
+
85
+ /**
86
+ * Get a list of domains for a site
87
+ * @returns A list of domains
88
+ */
89
+ async domains() {
90
+ const res = await Site.domains(this.client, { siteId: this._id });
91
+ return ResponseWrapper<typeof res.data>(res);
92
+ }
93
+
94
+ /**
95
+ * Publish a site
96
+ * @param domains The domains to publish to
97
+ * @returns The publish result
98
+ */
99
+ async publishSite(domains: string[]) {
100
+ const res = await Site.publish(this.client, { siteId: this._id, domains });
101
+ return ResponseWrapper<typeof res.data>(res);
102
+ }
103
+
104
+ /**
105
+ * Get a single Collection
106
+ * @param params The params for the request
107
+ * @param params.collectionId The collection ID
108
+ * @returns A single Collection
109
+ */
110
+ async collection({ collectionId }: { collectionId: string }) {
111
+ return CollectionWrapper.getOne(this.client, { collectionId });
112
+ }
113
+
114
+ /**
115
+ * Get a list of Collections
116
+ * @returns A list of Collections
117
+ */
118
+ async collections() {
119
+ return CollectionWrapper.list(this.client, { siteId: this._id });
120
+ }
121
+
122
+ /**
123
+ * Get a single Webhook
124
+ * @param params The params for the request
125
+ * @param params.webhookId The webhook ID
126
+ * @returns A single Webhook
127
+ */
128
+ async webhook({ webhookId }: { webhookId: string }) {
129
+ return WebhookWrapper.getOne(this.client, { siteId: this._id, webhookId });
130
+ }
131
+
132
+ /**
133
+ * Get a list of Webhooks
134
+ * @param params The query string parameters (optional)
135
+ * @returns A list of Webhooks
136
+ */
137
+ async webhooks(params?: QueryString) {
138
+ return WebhookWrapper.list(this.client, { siteId: this._id }, params);
139
+ }
140
+
141
+ /**
142
+ * Remove a Webhook
143
+ * @param params The query string parameters (optional)
144
+ * @param params.webhookId The Webhook ID
145
+ * @returns The result of the removal
146
+ */
147
+ async removeWebhook({ webhookId }: { webhookId: string }) {
148
+ return WebhookWrapper.remove(this.client, { siteId: this._id, webhookId });
149
+ }
150
+
151
+ /**
152
+ * Create a new Webhook
153
+ * @param params1 The params for the request
154
+ * @param params1.url The URL to send the webhook to
155
+ * @param params1.triggerType The event to trigger the webhook
156
+ * @param params1.filter The filter to apply to the webhook (optional: form_submission only)
157
+ * @param params The query string parameters (optional)
158
+ * @returns The created webhook
159
+ */
160
+ async createWebhook({ triggerType, filter, url }: CreateWebhookParams) {
161
+ const _params = { url, siteId: this._id, triggerType, filter };
162
+ return WebhookWrapper.create(this.client, _params);
163
+ }
164
+ }
@@ -0,0 +1,116 @@
1
+ import { ResponseWrapper } from ".";
2
+ import { Client, QueryString } from "../core";
3
+ import { Webhook } from "../api";
4
+
5
+ export type CreateWebhookParams = {
6
+ url: string;
7
+ siteId: string;
8
+ triggerType: string;
9
+ filter?: Webhook.Filter;
10
+ };
11
+
12
+ export class WebhookWrapper implements Webhook.IWebhook {
13
+ triggerType: Webhook.TriggerType;
14
+ triggerId: string;
15
+ createdOn: string;
16
+ lastUsed?: string;
17
+ site: string;
18
+ _id: string;
19
+ filter?: {
20
+ name: string;
21
+ };
22
+
23
+ constructor(private client: Client, webhook: Webhook.IWebhook) {
24
+ Object.assign(this, webhook);
25
+ }
26
+
27
+ /**************************************************************
28
+ * Static Methods
29
+ **************************************************************/
30
+
31
+ /**
32
+ * Get a Webhook
33
+ * @param client The Webflow client
34
+ * @param params The Webhook params
35
+ * @param params.siteId The Site ID
36
+ * @param params.webhookId The Webhook ID
37
+ * @returns The Webhook
38
+ */
39
+ static async getOne(
40
+ client: Client,
41
+ { siteId, webhookId }: { siteId: string; webhookId: string }
42
+ ) {
43
+ const res = await Webhook.getOne(client, { siteId, webhookId });
44
+ const webhook = new WebhookWrapper(client, res.data);
45
+ return ResponseWrapper<typeof webhook>(res, webhook);
46
+ }
47
+
48
+ /**
49
+ * List Webhooks
50
+ * @param client The Webflow client
51
+ * @param param1 The Webhook params
52
+ * @param param1.siteId The Site ID
53
+ * @param params Query string params (optional)
54
+ * @returns A list of Webhooks
55
+ */
56
+ static async list(
57
+ client: Client,
58
+ { siteId }: { siteId: string },
59
+ params?: QueryString
60
+ ) {
61
+ const res = await Webhook.list(client, { siteId }, params);
62
+ const webhooks = res.data.map((w) => new WebhookWrapper(client, w));
63
+ return ResponseWrapper<typeof webhooks>(res, webhooks);
64
+ }
65
+
66
+ /**
67
+ * Remove a Webhook
68
+ * @param client The Webflow client
69
+ * @param params The Webhook params
70
+ * @param params.siteId The Site ID
71
+ * @param params.webhookId The Webhook ID
72
+ * @returns The result of the removal
73
+ */
74
+ static async remove(
75
+ client: Client,
76
+ { siteId, webhookId }: { siteId: string; webhookId: string }
77
+ ) {
78
+ const res = await Webhook.remove(client, { siteId, webhookId });
79
+ return ResponseWrapper<typeof res.data>(res);
80
+ }
81
+
82
+ /**
83
+ * Create a Webhook
84
+ * @param client The Webflow client
85
+ * @param param1 The Webhook params
86
+ * @param param1.siteId The Site ID
87
+ * @param param1.url The URL to send the Webhook to
88
+ * @param param1.triggerType The event to trigger the Webhook
89
+ * @param param1.filter The filter to use (optional: form_submission only)
90
+ * @returns The created Webhook
91
+ */
92
+ static async create(
93
+ client: Client,
94
+ { triggerType, siteId, filter, url }: CreateWebhookParams
95
+ ) {
96
+ const args = { triggerType, siteId, filter, url };
97
+ const res = await Webhook.create(client, args);
98
+ const _webhook = new WebhookWrapper(client, res.data);
99
+ return ResponseWrapper<typeof _webhook>(res, _webhook);
100
+ }
101
+
102
+ /**************************************************************
103
+ * Instance Methods
104
+ **************************************************************/
105
+
106
+ /**
107
+ * Remove a Webhook
108
+ * @returns The result of the removal
109
+ */
110
+ async remove() {
111
+ return WebhookWrapper.remove(this.client, {
112
+ webhookId: this._id,
113
+ siteId: this.site,
114
+ });
115
+ }
116
+ }