Skip to content

Commit 6ad68a7

Browse files
author
John Agan
committed
added entries for the users-api
1 parent d7f7927 commit 6ad68a7

File tree

4 files changed

+172
-33
lines changed

4 files changed

+172
-33
lines changed

.editorconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[*]
2+
max_line_length = 80

index.d.ts

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,37 @@ declare class Webflow {
7272
query?: Webflow.WebflowQueryArg
7373
): Promise<Webflow.WebflowApiModel.Collection>;
7474

75+
// Users
76+
users(
77+
data: {
78+
siteId: string;
79+
},
80+
query?: Webflow.WebflowQueryArg
81+
): Promise<Webflow.WebflowApiModel.User[]>;
82+
83+
user(
84+
data: {
85+
siteId: string;
86+
userId: string;
87+
},
88+
query?: Webflow.WebflowQueryArg
89+
): Promise<Webflow.WebflowApiModel.User>;
90+
91+
updateUser(
92+
data: { siteId: string; userId: string } & Record<string, any>,
93+
query?: Webflow.WebflowQueryArg
94+
): Promise<Webflow.WebflowApiModel.User>;
95+
96+
removeUser(
97+
data: { siteId: string; userId: string },
98+
query?: Webflow.WebflowQueryArg
99+
): Promise<{ deleted: number }>;
100+
101+
inviteUser(
102+
data: { siteId: string; email: string },
103+
query?: Webflow.WebflowQueryArg
104+
): Promise<Webflow.WebflowApiModel.User>;
105+
75106
// Items
76107

77108
items(
@@ -213,6 +244,14 @@ declare namespace Webflow {
213244
name: string;
214245
}
215246

247+
interface User {
248+
_id: string;
249+
lastUpdated: string;
250+
createdOn: string;
251+
emailVerified: boolean;
252+
fields: object;
253+
}
254+
216255
/**
217256
* https://developers.webflow.com/?javascript#collections
218257
*/
@@ -301,7 +340,7 @@ declare namespace Webflow {
301340
rateLimit: {
302341
limit: number;
303342
remaining: number;
304-
}
343+
};
305344
}
306345

307346
interface ItemsResponse {

src/ResponseWrapper.js

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,28 @@ export default class ResponseWrapper {
3737

3838
items: this.api.items.bind(this.api, { collectionId: collection._id }),
3939
item(first, ...rest) {
40-
return this.api.item({ ...first, collectionId: collection._id }, ...rest);
40+
return this.api.item(
41+
{ ...first, collectionId: collection._id },
42+
...rest
43+
);
4144
},
4245
createItem(first, ...rest) {
43-
return this.api.createItem({ ...first, collectionId: collection._id }, ...rest);
46+
return this.api.createItem(
47+
{ ...first, collectionId: collection._id },
48+
...rest
49+
);
4450
},
4551
updateItem(first, ...rest) {
46-
return this.api.updateItem({ ...first, collectionId: collection._id }, ...rest);
52+
return this.api.updateItem(
53+
{ ...first, collectionId: collection._id },
54+
...rest
55+
);
4756
},
4857
removeItem(first, ...rest) {
49-
return this.api.removeItem({ ...first, collectionId: collection._id }, ...rest);
58+
return this.api.removeItem(
59+
{ ...first, collectionId: collection._id },
60+
...rest
61+
);
5062
},
5163
};
5264
}
@@ -56,17 +68,39 @@ export default class ResponseWrapper {
5668
...item,
5769

5870
update(first, ...rest) {
59-
return this.api.updateItem({ ...first, collectionId, itemId: item._id }, ...rest);
71+
return this.api.updateItem(
72+
{ ...first, collectionId, itemId: item._id },
73+
...rest
74+
);
75+
},
76+
remove: this.api.updateItem.bind(this.api, {
77+
collectionId,
78+
itemId: item._id,
79+
}),
80+
};
81+
}
82+
83+
user(user, siteId) {
84+
return {
85+
...user,
86+
87+
update(first, ...rest) {
88+
return this.api.updateUser({ ...first, siteId }, ...rest);
89+
},
90+
remove(first, ...rest) {
91+
return this.api.removeUser({ ...first, siteId }, ...rest);
6092
},
61-
remove: this.api.updateItem.bind(this.api, { collectionId, itemId: item._id }),
6293
};
6394
}
6495

6596
webhook(webhook, siteId) {
6697
return {
6798
...webhook,
6899

69-
remove: this.api.removeWebhook.bind(this.api, { siteId, webhookId: webhook._id }),
100+
remove: this.api.removeWebhook.bind(this.api, {
101+
siteId,
102+
webhookId: webhook._id,
103+
}),
70104
};
71105
}
72106
}

src/Webflow.js

Lines changed: 89 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ export default class Webflow {
6868
};
6969

7070
this.authenticatedFetch = (method, path, data, query) => {
71-
const queryString = query && !isObjectEmpty(query) ? `?${qs.stringify(query)}` : "";
71+
const queryString =
72+
query && !isObjectEmpty(query) ? `?${qs.stringify(query)}` : "";
7273

7374
const uri = `${this.endpoint}${path}${queryString}`;
7475
const opts = {
@@ -116,13 +117,17 @@ export default class Webflow {
116117
// Sites
117118

118119
sites(query = {}) {
119-
return this.get("/sites", query).then((sites) => sites.map((site) => this.responseWrapper.site(site)));
120+
return this.get("/sites", query).then((sites) =>
121+
sites.map((site) => this.responseWrapper.site(site))
122+
);
120123
}
121124

122125
site({ siteId }, query = {}) {
123126
if (!siteId) return Promise.reject(buildRequiredArgError("siteId"));
124127

125-
return this.get(`/sites/${siteId}`, query).then((site) => this.responseWrapper.site(site));
128+
return this.get(`/sites/${siteId}`, query).then((site) =>
129+
this.responseWrapper.site(site)
130+
);
126131
}
127132

128133
publishSite({ siteId, domains }) {
@@ -148,12 +153,15 @@ export default class Webflow {
148153
if (!siteId) return Promise.reject(buildRequiredArgError("siteId"));
149154

150155
return this.get(`/sites/${siteId}/collections`, query).then((collections) =>
151-
collections.map((collection) => this.responseWrapper.collection(collection))
156+
collections.map((collection) =>
157+
this.responseWrapper.collection(collection)
158+
)
152159
);
153160
}
154161

155162
collection({ collectionId }, query = {}) {
156-
if (!collectionId) return Promise.reject(buildRequiredArgError("collectionId"));
163+
if (!collectionId)
164+
return Promise.reject(buildRequiredArgError("collectionId"));
157165

158166
return this.get(`/collections/${collectionId}`, query).then((collection) =>
159167
this.responseWrapper.collection(collection)
@@ -163,56 +171,112 @@ export default class Webflow {
163171
// Items
164172

165173
items({ collectionId }, query = {}) {
166-
if (!collectionId) return Promise.reject(buildRequiredArgError("collectionId"));
174+
if (!collectionId)
175+
return Promise.reject(buildRequiredArgError("collectionId"));
167176

168-
return this.get(`/collections/${collectionId}/items`, query).then((res) => ({
169-
...res,
177+
return this.get(`/collections/${collectionId}/items`, query).then(
178+
(res) => ({
179+
...res,
170180

171-
items: res.items.map((item) => this.responseWrapper.item(item, collectionId)),
172-
}));
181+
items: res.items.map((item) =>
182+
this.responseWrapper.item(item, collectionId)
183+
),
184+
})
185+
);
173186
}
174187

175188
item({ collectionId, itemId }, query = {}) {
176-
if (!collectionId) return Promise.reject(buildRequiredArgError("collectionId"));
189+
if (!collectionId)
190+
return Promise.reject(buildRequiredArgError("collectionId"));
177191
if (!itemId) return Promise.reject(buildRequiredArgError("itemId"));
178192

179-
return this.get(`/collections/${collectionId}/items/${itemId}`, query).then((res) =>
180-
this.responseWrapper.item(res.items[0], collectionId)
193+
return this.get(`/collections/${collectionId}/items/${itemId}`, query).then(
194+
(res) => this.responseWrapper.item(res.items[0], collectionId)
181195
);
182196
}
183197

184198
createItem({ collectionId, ...data }, query = {}) {
185-
if (!collectionId) return Promise.reject(buildRequiredArgError("collectionId"));
199+
if (!collectionId)
200+
return Promise.reject(buildRequiredArgError("collectionId"));
186201

187-
return this.post(`/collections/${collectionId}/items`, data, query).then((item) =>
188-
this.responseWrapper.item(item, collectionId)
202+
return this.post(`/collections/${collectionId}/items`, data, query).then(
203+
(item) => this.responseWrapper.item(item, collectionId)
189204
);
190205
}
191206

192207
updateItem({ collectionId, itemId, ...data }, query = {}) {
193-
if (!collectionId) return Promise.reject(buildRequiredArgError("collectionId"));
208+
if (!collectionId)
209+
return Promise.reject(buildRequiredArgError("collectionId"));
194210
if (!itemId) return Promise.reject(buildRequiredArgError("itemId"));
195211

196-
return this.put(`/collections/${collectionId}/items/${itemId}`, data, query);
212+
return this.put(
213+
`/collections/${collectionId}/items/${itemId}`,
214+
data,
215+
query
216+
);
197217
}
198218

199219
removeItem({ collectionId, itemId }, query = {}) {
200-
if (!collectionId) return Promise.reject(buildRequiredArgError("collectionId"));
220+
if (!collectionId)
221+
return Promise.reject(buildRequiredArgError("collectionId"));
201222
if (!itemId) return Promise.reject(buildRequiredArgError("itemId"));
202223

203224
return this.delete(`/collections/${collectionId}/items/${itemId}`, query);
204225
}
205226

206227
patchItem({ collectionId, itemId, ...data }, query = {}) {
207-
if (!collectionId) return Promise.reject(buildRequiredArgError("collectionId"));
228+
if (!collectionId)
229+
return Promise.reject(buildRequiredArgError("collectionId"));
208230
if (!itemId) return Promise.reject(buildRequiredArgError("itemId"));
209231

210-
return this.patch(`/collections/${collectionId}/items/${itemId}`, data, query);
232+
return this.patch(
233+
`/collections/${collectionId}/items/${itemId}`,
234+
data,
235+
query
236+
);
237+
}
238+
239+
// Users
240+
241+
users({ siteId }, query = {}) {
242+
if (!siteId) return Promise.reject(buildRequiredArgError("siteId"));
243+
244+
return this.get(`/sites/${siteId}/users`, query).then((res) =>
245+
res.users.map((user) => this.responseWrapper.user(user))
246+
);
247+
}
248+
249+
user({ siteId, userId }, query = {}) {
250+
if (!siteId) return Promise.reject(buildRequiredArgError("siteId"));
251+
if (!userId) return Promise.reject(buildRequiredArgError("userId"));
252+
253+
return this.get(`/sites/${siteId}/users/${userId}`, query).then((user) =>
254+
this.responseWrapper.user(user, siteId)
255+
);
256+
}
257+
258+
updateUser({ siteId, userId, ...data }, query = {}) {
259+
if (!siteId) return Promise.reject(buildRequiredArgError("siteId"));
260+
if (!userId) return Promise.reject(buildRequiredArgError("userId"));
261+
262+
return this.patch(`/sites/${siteId}/users/${userId}`, data, query);
263+
}
264+
265+
inviteUser({ siteId, email }, query = {}) {
266+
if (!siteId) return Promise.reject(buildRequiredArgError("siteId"));
267+
if (!email) return Promise.reject(buildRequiredArgError("email"));
268+
269+
return this.post(`/sites/${siteId}/users/invite`, { email }, query).then(
270+
(user) => this.responseWrapper.user(user, siteId)
271+
);
211272
}
212273

213-
// Images
274+
removeUser({ siteId, userId }, query = {}) {
275+
if (!siteId) return Promise.reject(buildRequiredArgError("siteId"));
276+
if (!userId) return Promise.reject(buildRequiredArgError("userId"));
214277

215-
// TODO
278+
return this.delete(`/sites/${siteId}/users/${userId}`, query);
279+
}
216280

217281
// Webhooks
218282

@@ -228,8 +292,8 @@ export default class Webflow {
228292
if (!siteId) return Promise.reject(buildRequiredArgError("siteId"));
229293
if (!webhookId) return Promise.reject(buildRequiredArgError("webhookId"));
230294

231-
return this.get(`/sites/${siteId}/webhooks/${webhookId}`, query).then((webhook) =>
232-
this.responseWrapper.webhook(webhook, siteId)
295+
return this.get(`/sites/${siteId}/webhooks/${webhookId}`, query).then(
296+
(webhook) => this.responseWrapper.webhook(webhook, siteId)
233297
);
234298
}
235299

0 commit comments

Comments
 (0)