webflow-api 1.1.1 → 1.2.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 (71) hide show
  1. package/README.md +12 -1
  2. package/dist/api/collection.d.ts +85 -24
  3. package/dist/api/collection.js +88 -29
  4. package/dist/api/index.d.ts +7 -7
  5. package/dist/api/index.js +9 -19
  6. package/dist/api/item.d.ts +141 -107
  7. package/dist/api/item.js +145 -125
  8. package/dist/api/meta.d.ts +16 -14
  9. package/dist/api/meta.js +20 -19
  10. package/dist/api/oauth.d.ts +38 -36
  11. package/dist/api/oauth.js +59 -59
  12. package/dist/api/site.d.ts +118 -43
  13. package/dist/api/site.js +131 -53
  14. package/dist/{wrapper/membership.d.ts → api/user.d.ts} +59 -33
  15. package/dist/api/user.js +103 -0
  16. package/dist/api/webhook.d.ts +77 -55
  17. package/dist/api/webhook.js +74 -61
  18. package/dist/core/error.d.ts +2 -0
  19. package/dist/core/error.js +8 -1
  20. package/dist/core/index.d.ts +2 -2
  21. package/dist/core/index.js +2 -2
  22. package/dist/core/response.d.ts +32 -0
  23. package/dist/core/response.js +26 -0
  24. package/dist/{webflow.d.ts → core/webflow.d.ts} +57 -52
  25. package/dist/{webflow.js → core/webflow.js} +102 -61
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.js +2 -2
  28. package/package.json +2 -4
  29. package/src/api/collection.ts +102 -35
  30. package/src/api/index.ts +7 -7
  31. package/src/api/item.ts +207 -176
  32. package/src/api/meta.ts +19 -18
  33. package/src/api/oauth.ts +62 -74
  34. package/src/api/site.ts +158 -55
  35. package/src/api/user.ts +152 -0
  36. package/src/api/webhook.ts +97 -80
  37. package/src/core/error.ts +8 -0
  38. package/src/core/index.ts +2 -2
  39. package/src/core/response.ts +50 -0
  40. package/src/{webflow.ts → core/webflow.ts} +132 -137
  41. package/src/index.ts +1 -1
  42. package/yarn.lock +0 -5
  43. package/dist/api/membership.d.ts +0 -91
  44. package/dist/api/membership.js +0 -80
  45. package/dist/core/client.d.ts +0 -40
  46. package/dist/core/client.js +0 -49
  47. package/dist/core/options.d.ts +0 -8
  48. package/dist/core/options.js +0 -5
  49. package/dist/wrapper/collection.d.ts +0 -85
  50. package/dist/wrapper/collection.js +0 -94
  51. package/dist/wrapper/index.d.ts +0 -6
  52. package/dist/wrapper/index.js +0 -22
  53. package/dist/wrapper/item.d.ts +0 -140
  54. package/dist/wrapper/item.js +0 -153
  55. package/dist/wrapper/membership.js +0 -106
  56. package/dist/wrapper/response.d.ts +0 -16
  57. package/dist/wrapper/response.js +0 -17
  58. package/dist/wrapper/site.d.ts +0 -119
  59. package/dist/wrapper/site.js +0 -136
  60. package/dist/wrapper/webhook.d.ts +0 -78
  61. package/dist/wrapper/webhook.js +0 -82
  62. package/src/api/membership.ts +0 -125
  63. package/src/core/client.ts +0 -76
  64. package/src/core/options.ts +0 -9
  65. package/src/wrapper/collection.ts +0 -115
  66. package/src/wrapper/index.ts +0 -6
  67. package/src/wrapper/item.ts +0 -218
  68. package/src/wrapper/membership.ts +0 -138
  69. package/src/wrapper/response.ts +0 -25
  70. package/src/wrapper/site.ts +0 -164
  71. package/src/wrapper/webhook.ts +0 -116
@@ -1,76 +0,0 @@
1
- import { Axios } from "axios";
2
- import { DEFAULT_HOST, USER_AGENT, Options, RequestError } from "../core";
3
-
4
- /**************************************************************
5
- * Types
6
- **************************************************************/
7
- export type QueryString = Record<string, any>;
8
- export type PaginationFilter = { limit?: number; offset?: number };
9
-
10
- /**************************************************************
11
- * Interfaces
12
- ************************************************************* */
13
- export interface PaginatedData {
14
- count: number;
15
- limit: number;
16
- offset: number;
17
- total: number;
18
- }
19
-
20
- export interface WebflowOptions {
21
- host?: string;
22
- token?: string;
23
- version?: string;
24
- headers?: Record<string, string>;
25
- }
26
-
27
- /**************************************************************
28
- * Classes
29
- **************************************************************/
30
- export class Client extends Axios {
31
- constructor({
32
- host = DEFAULT_HOST,
33
- headers = {},
34
- version,
35
- token,
36
- }: Options = {}) {
37
- super({
38
- transformRequest: [(data) => JSON.stringify(data)],
39
- baseURL: `https://api.${host}/`,
40
- headers: {
41
- "Content-Type": "application/json",
42
- "User-Agent": USER_AGENT,
43
- "Accept-Version": version,
44
- ...headers,
45
- },
46
- });
47
-
48
- if (token) this.token = token;
49
-
50
- // check for webflow errors
51
- this.defaults.transformResponse = [this.transformResponse];
52
- }
53
-
54
- /**
55
- * Transforms JSON response to an object
56
- * if the response is a Webflow error, it will throw an error
57
- * @param data JSON response
58
- * @returns response object
59
- */
60
- private transformResponse(data: any = {}) {
61
- // parse json if string
62
- if (String(data) === data) data = JSON.parse(data);
63
- if (data.err) throw new RequestError(data);
64
- return data;
65
- }
66
-
67
- // set the Authorization header
68
- set token(value: string) {
69
- this.defaults.headers["Authorization"] = `Bearer ${value}`;
70
- }
71
-
72
- // clear the Authorization header
73
- clearToken() {
74
- delete this.defaults.headers["Authorization"];
75
- }
76
- }
@@ -1,9 +0,0 @@
1
- export const DEFAULT_HOST = "webflow.com";
2
- export const USER_AGENT = "Webflow Javascript SDK / 1.0";
3
-
4
- export interface Options {
5
- host?: string;
6
- token?: string;
7
- version?: string;
8
- headers?: Record<string, string>;
9
- }
@@ -1,115 +0,0 @@
1
- import { ResponseWrapper, ItemWrapper } from ".";
2
- import { Client, QueryString } from "../core";
3
- import { Collection, Item } from "../api";
4
-
5
- export class CollectionWrapper implements Collection.ICollection {
6
- fields: Collection.CollectionField[];
7
- singularName: string;
8
- lastUpdated: string;
9
- createdOn: string;
10
- _id: string;
11
- name: string;
12
- slug: string;
13
-
14
- constructor(private client: Client, collection: Collection.ICollection) {
15
- Object.assign(this, collection);
16
- }
17
-
18
- /**************************************************************
19
- * Static Methods
20
- **************************************************************/
21
-
22
- /**
23
- * Get a single Collection
24
- * @param client The Webflow client
25
- * @param params The Collection information
26
- * @param params.collectionId The Collection ID
27
- * @returns A single Collection
28
- */
29
- static async getOne(
30
- client: Client,
31
- { collectionId }: { collectionId: string }
32
- ) {
33
- const res = await Collection.getOne(client, { collectionId });
34
- const collection = new CollectionWrapper(client, res.data);
35
- return ResponseWrapper<typeof collection>(res, collection);
36
- }
37
-
38
- /**
39
- * Get a list of Collections
40
- * @param client The Webflow client
41
- * @param params1 The Site information
42
- * @param params1.siteId The Site ID
43
- * @param params The query parameters (optional)
44
- * @returns A list of Collections
45
- */
46
- static async list(
47
- client: Client,
48
- { siteId }: { siteId: string },
49
- params?: QueryString
50
- ) {
51
- const res = await Collection.list(client, { siteId }, params);
52
- const collections = res.data.map((c) => new CollectionWrapper(client, c));
53
- return ResponseWrapper<typeof collections>(res, collections);
54
- }
55
-
56
- /**************************************************************
57
- * Instance Methods
58
- **************************************************************/
59
-
60
- /**
61
- * Get a single Item
62
- * @param params The params for the request
63
- * @param params.itemId The Item ID
64
- * @returns A single Item
65
- */
66
- async item({ itemId }: { itemId: string }) {
67
- return ItemWrapper.getOne(this.client, { itemId, collectionId: this._id });
68
- }
69
-
70
- /**
71
- * Get a list of Items
72
- * @param params The params for the request
73
- * @param params.limit The number of items to return (optional)
74
- * @param params.offset The number of items to skip (optional)
75
- * @returns A list of Items
76
- */
77
- async items(params?: QueryString) {
78
- return ItemWrapper.list(this.client, { collectionId: this._id, ...params });
79
- }
80
-
81
- /**
82
- * Remove a single Item
83
- * @param params The params for the request
84
- * @param params.itemId The Item ID
85
- * @returns The result from the removal
86
- */
87
- async removeItem({ itemId }: { itemId: string }) {
88
- return ItemWrapper.remove(this.client, { itemId, collectionId: this._id });
89
- }
90
-
91
- /**
92
- * Create a new Item
93
- * @param params The params for the request
94
- * @param params.fields The Item fields to create
95
- * @returns The created Item
96
- */
97
- async createItem(fields: any) {
98
- return ItemWrapper.create(this.client, { collectionId: this._id, fields });
99
- }
100
-
101
- /**
102
- * Update a single Item
103
- * @param params The params for the request
104
- * @param params.itemId The Item ID
105
- * @param params.fields The fields to update
106
- * @returns The updated Item
107
- */
108
- async updateItem({ itemId, fields }: { itemId: string; fields: any }) {
109
- return ItemWrapper.update(this.client, {
110
- collectionId: this._id,
111
- itemId,
112
- fields,
113
- });
114
- }
115
- }
@@ -1,6 +0,0 @@
1
- export * from "./membership";
2
- export * from "./collection";
3
- export * from "./response";
4
- export * from "./webhook";
5
- export * from "./site";
6
- export * from "./item";
@@ -1,218 +0,0 @@
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
- }
@@ -1,138 +0,0 @@
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
- }
@@ -1,25 +0,0 @@
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
- }