webflow-api 1.3.0 → 1.3.1

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 (54) hide show
  1. package/dist/api/collection.d.ts +112 -0
  2. package/dist/api/collection.js +94 -0
  3. package/dist/api/index.d.ts +7 -0
  4. package/dist/api/index.js +23 -0
  5. package/dist/api/item.d.ts +177 -0
  6. package/dist/api/item.js +151 -0
  7. package/dist/api/meta.d.ts +53 -0
  8. package/dist/api/meta.js +25 -0
  9. package/dist/api/oauth.d.ts +71 -0
  10. package/dist/api/oauth.js +71 -0
  11. package/dist/api/site.d.ts +140 -0
  12. package/dist/api/site.js +137 -0
  13. package/dist/api/user.d.ts +143 -0
  14. package/dist/api/user.js +119 -0
  15. package/dist/api/webhook.d.ts +102 -0
  16. package/dist/api/webhook.js +80 -0
  17. package/dist/core/error.d.ts +21 -0
  18. package/dist/core/error.js +30 -0
  19. package/dist/core/index.d.ts +3 -0
  20. package/dist/core/index.js +19 -0
  21. package/dist/core/response.d.ts +32 -0
  22. package/dist/core/response.js +26 -0
  23. package/dist/core/webflow.d.ts +390 -0
  24. package/dist/core/webflow.js +518 -0
  25. package/dist/index.d.ts +2 -0
  26. package/package.json +7 -1
  27. package/yarn.lock +2840 -0
  28. package/.eslintrc +0 -31
  29. package/.github/workflows/code-quality.yml +0 -102
  30. package/.github/workflows/npm-publish.yml +0 -21
  31. package/.github/workflows/semgrep.yml +0 -24
  32. package/.prettierignore +0 -5
  33. package/.prettierrc +0 -6
  34. package/jest.config.js +0 -17
  35. package/tests/api/collection.test.ts +0 -147
  36. package/tests/api/item.test.ts +0 -180
  37. package/tests/api/meta.test.ts +0 -38
  38. package/tests/api/oauth.test.ts +0 -44
  39. package/tests/api/site.test.ts +0 -202
  40. package/tests/api/user.test.ts +0 -139
  41. package/tests/api/webhook.test.ts +0 -82
  42. package/tests/core/error.test.ts +0 -19
  43. package/tests/core/response.test.ts +0 -36
  44. package/tests/core/webflow.test.ts +0 -540
  45. package/tests/fixtures/collection.fixture.ts +0 -374
  46. package/tests/fixtures/index.ts +0 -7
  47. package/tests/fixtures/item.fixture.ts +0 -193
  48. package/tests/fixtures/meta.fixture.ts +0 -34
  49. package/tests/fixtures/oauth.fixture.ts +0 -38
  50. package/tests/fixtures/site.fixture.ts +0 -78
  51. package/tests/fixtures/user.fixture.ts +0 -175
  52. package/tests/fixtures/webhook.fixture.ts +0 -69
  53. package/tsconfig.eslint.json +0 -7
  54. package/tsconfig.json +0 -14
@@ -1,202 +0,0 @@
1
- import MockAdapter from "axios-mock-adapter";
2
- import axios from "axios";
3
- import { CollectionFixture, SiteFixture, WebhookFixture } from "../fixtures";
4
- import { Site, Collection, Webhook } from "../../src/api";
5
-
6
- describe("Sites", () => {
7
- const mock = new MockAdapter(axios);
8
- const client = axios.create();
9
- describe("Static Methods", () => {
10
- it("should respond with a list of sites", async () => {
11
- const { response } = SiteFixture.list;
12
- const path = "/sites";
13
-
14
- mock.onGet(path).reply(200, response);
15
- const { data } = await Site.list(client);
16
-
17
- expect(data).toBeDefined();
18
- expect(data.length).toBe(response.length);
19
- expect(data[0]).toMatchObject(response[0]);
20
- });
21
-
22
- it("should respond with a single site", async () => {
23
- const { parameters, response } = SiteFixture.getOne;
24
- const { siteId } = parameters;
25
- const path = `/sites/${siteId}`;
26
-
27
- mock.onGet(path).reply(200, response);
28
- const { data } = await Site.getOne(parameters, client);
29
-
30
- expect(data).toBeDefined();
31
- expect(data._id).toBe(siteId);
32
- });
33
-
34
- it("should respond with a list of domains", async () => {
35
- const { parameters, response } = SiteFixture.domains;
36
- const { siteId } = parameters;
37
- const path = `/sites/${siteId}/domains`;
38
-
39
- mock.onGet(path).reply(200, response);
40
- const { data } = await Site.domains(parameters, client);
41
-
42
- expect(data).toBeDefined();
43
- expect(data.length).toBe(response.length);
44
- expect(data[0]).toMatchObject(response[0]);
45
- });
46
-
47
- it("should publish a site", async () => {
48
- const { parameters, response } = SiteFixture.publish;
49
- const { siteId } = parameters;
50
- const path = `/sites/${siteId}/publish`;
51
-
52
- mock.onPost(path).reply(200, response);
53
- const { data } = await Site.publish(parameters, client);
54
-
55
- expect(data).toBeDefined();
56
- expect(data.queued).toBe(true);
57
- });
58
- });
59
-
60
- describe("Instance Methods", () => {
61
- const res = { data: {}, status: 200, statusText: "", headers: {}, config: {} };
62
- const site = new Site(client, res, SiteFixture.getOne.response);
63
-
64
- it("should respond with a list of collections", async () => {
65
- const { parameters, response } = CollectionFixture.list;
66
- const { siteId } = parameters;
67
-
68
- const path = `/sites/${siteId}/collections`;
69
- mock.onGet(path).reply(200, response);
70
- const spy = jest.spyOn(Collection, "list");
71
-
72
- const result = await site.collections();
73
-
74
- expect(spy).toHaveBeenCalledWith({ siteId }, client);
75
-
76
- expect(result).toBeDefined();
77
- expect(result.length).toBe(response.length);
78
-
79
- const [first] = result;
80
- expect(first._id).toBe(response[0]._id);
81
-
82
- // collection wrapper functions
83
- expect(typeof first.item).toBe("function");
84
- expect(typeof first.items).toBe("function");
85
- expect(typeof first.removeItem).toBe("function");
86
- expect(typeof first.createItem).toBe("function");
87
- expect(typeof first.updateItem).toBe("function");
88
- });
89
-
90
- it("should respond with a list of webhooks", async () => {
91
- const { parameters, response } = WebhookFixture.list;
92
- const { siteId } = parameters;
93
-
94
- const path = `/sites/${siteId}/webhooks`;
95
- mock.onGet(path).reply(200, response);
96
- const spy = jest.spyOn(Webhook, "list");
97
-
98
- const result = await site.webhooks();
99
-
100
- expect(spy).toHaveBeenCalledWith({ siteId }, client);
101
-
102
- expect(result).toBeDefined();
103
- expect(result.length).toBe(response.length);
104
-
105
- const [first] = result;
106
- expect(first._id).toBe(response[0]._id);
107
-
108
- // webhook wrapper functions
109
- expect(typeof first.remove).toBe("function");
110
- });
111
-
112
- it("should respond with a single webhook", async () => {
113
- const { parameters, response } = WebhookFixture.getOne;
114
- const { siteId, webhookId } = parameters;
115
-
116
- const path = `/sites/${siteId}/webhooks/${webhookId}`;
117
- mock.onGet(path).reply(200, response);
118
- const spy = jest.spyOn(Webhook, "getOne");
119
-
120
- const result = await site.webhook({ webhookId });
121
-
122
- expect(spy).toHaveBeenCalledWith({ siteId, webhookId }, client);
123
-
124
- expect(result).toBeDefined();
125
- expect(result._id).toBe(response._id);
126
-
127
- // webhook wrapper functions
128
- expect(typeof result.remove).toBe("function");
129
- });
130
-
131
- it("should create a webhook", async () => {
132
- const { parameters, response } = WebhookFixture.create;
133
- const { siteId } = parameters;
134
-
135
- const path = `/sites/${siteId}/webhooks`;
136
- const spy = jest.spyOn(Webhook, "create");
137
- mock.onPost(path).reply(200, response);
138
-
139
- const result = await site.createWebhook(parameters);
140
-
141
- expect(spy).toHaveBeenCalledWith(parameters, client);
142
-
143
- expect(result).toBeDefined();
144
- expect(result._id).toBe(response._id);
145
-
146
- // webhook wrapper functions
147
- expect(typeof result.remove).toBe("function");
148
- });
149
-
150
- it("should remove a webhook", async () => {
151
- const { parameters, response } = WebhookFixture.delete;
152
- const { siteId, webhookId } = parameters;
153
-
154
- const path = `/sites/${siteId}/webhooks/${webhookId}`;
155
- const spy = jest.spyOn(Webhook, "remove");
156
- mock.onDelete(path).reply(200, response);
157
-
158
- const result = await site.removeWebhook(parameters);
159
-
160
- expect(spy).toHaveBeenCalledWith(parameters, client);
161
-
162
- expect(result).toBeDefined();
163
- expect(result.deleted).toEqual(response.deleted);
164
- });
165
-
166
- it("should respond with a list of domains", async () => {
167
- const { parameters, response } = SiteFixture.domains;
168
- const { siteId } = parameters;
169
-
170
- const path = `/sites/${siteId}/domains`;
171
- const spy = jest.spyOn(Site, "domains");
172
- mock.onGet(path).reply(200, response);
173
-
174
- const result = await site.domains();
175
-
176
- expect(spy).toHaveBeenCalledWith(parameters, client);
177
-
178
- expect(result).toBeDefined();
179
- expect(result.length).toBe(response.length);
180
-
181
- const [first] = result;
182
- expect(first._id).toBe(response[0]._id);
183
- expect(first.name).toBe(response[0].name);
184
- });
185
-
186
- it("should publish a site", async () => {
187
- const { parameters, response } = SiteFixture.publish;
188
- const { siteId, domains } = parameters;
189
-
190
- const path = `/sites/${siteId}/publish`;
191
- const spy = jest.spyOn(Site, "publish");
192
- mock.onPost(path).reply(200, response);
193
-
194
- const result = await site.publishSite(domains);
195
-
196
- expect(spy).toHaveBeenCalledWith(parameters, client);
197
-
198
- expect(result).toBeDefined();
199
- expect(result.queued).toBe(true);
200
- });
201
- });
202
- });
@@ -1,139 +0,0 @@
1
- import MockAdapter from "axios-mock-adapter";
2
- import axios from "axios";
3
- import { UserFixture } from "../fixtures";
4
- import { User } from "../../src/api";
5
-
6
- describe("Users", () => {
7
- const mock = new MockAdapter(axios);
8
- const client = axios.create();
9
-
10
- describe("Static Methods", () => {
11
- it("should respond with a list of users", async () => {
12
- const { response, parameters } = UserFixture.list;
13
- const { siteId } = parameters;
14
- const path = `/sites/${siteId}/users`;
15
-
16
- mock.onGet(path).reply(200, response);
17
- const { data } = await User.list(parameters, client);
18
-
19
- expect(data).toBeDefined();
20
- expect(data.users.length).toBe(response.users.length);
21
- expect(data.users[0]).toMatchObject(response.users[0]);
22
- });
23
-
24
- it("should respond with a single user", async () => {
25
- const { response, parameters } = UserFixture.getOne;
26
- const { siteId, userId } = parameters;
27
- const path = `/sites/${siteId}/users/${userId}`;
28
-
29
- mock.onGet(path).reply(200, response);
30
- const { data } = await User.getOne(parameters, client);
31
-
32
- expect(data).toBeDefined();
33
- expect(data._id).toBe(response._id);
34
- });
35
-
36
- it("should invite a user", async () => {
37
- const { response, parameters } = UserFixture.invite;
38
- const { siteId } = parameters;
39
- const path = `/sites/${siteId}/users/invite`;
40
-
41
- mock.onPost(path).reply(200, response);
42
- const { data } = await User.invite(parameters, client);
43
-
44
- expect(data).toBeDefined();
45
- expect(data.data).toBeDefined();
46
- expect(data._id).toBe(response._id);
47
- expect(data.data).toMatchObject(response.data);
48
- });
49
-
50
- it("should update a user", async () => {
51
- const { response, parameters } = UserFixture.update;
52
- const { siteId, userId } = parameters;
53
- const path = `/sites/${siteId}/users/${userId}`;
54
-
55
- mock.onPatch(path).reply(200, response);
56
- const { data } = await User.update(parameters, client);
57
-
58
- expect(data).toBeDefined();
59
- expect(data._id).toBe(response._id);
60
- expect(data.data).toBeDefined();
61
- expect(data.data).toMatchObject(response.data);
62
- });
63
-
64
- it("should remove a user", async () => {
65
- const { response, parameters } = UserFixture.delete;
66
- const { siteId, userId } = parameters;
67
- const path = `/sites/${siteId}/users/${userId}`;
68
-
69
- mock.onDelete(path).reply(200, response);
70
- const { data } = await User.remove(parameters, client);
71
-
72
- expect(data).toBeDefined();
73
- expect(data.deleted).toBe(response.deleted);
74
- });
75
-
76
- it("should respond with a list of access groups", async () => {
77
- const { response, parameters } = UserFixture.accessGroups;
78
- const { siteId } = parameters;
79
- const path = `/sites/${siteId}/accessgroups`;
80
-
81
- mock.onGet(path).reply(200, response);
82
- const { data } = await User.accessGroups(parameters, client);
83
-
84
- expect(data).toBeDefined();
85
- expect(data.accessGroups.length).toBe(response.accessGroups.length);
86
- expect(data.accessGroups[0]).toMatchObject(response.accessGroups[0]);
87
- });
88
- });
89
-
90
- describe("Instance Methods", () => {
91
- const { parameters, response } = UserFixture.getOne;
92
- const res = {
93
- data: {},
94
- status: 200,
95
- statusText: "",
96
- headers: {},
97
- config: {},
98
- };
99
- const user = new User(client, res, response, { siteId: parameters.siteId });
100
-
101
- it("should update a user", async () => {
102
- const { response, parameters } = UserFixture.update;
103
- const { siteId, userId, data } = parameters;
104
-
105
- const path = `/sites/${siteId}/users/${userId}`;
106
- mock.onPatch(path).reply(200, response);
107
- const spy = jest.spyOn(User, "update");
108
-
109
- const result = await user.update(data);
110
-
111
- const _params = { data, siteId, userId };
112
- expect(spy).toHaveBeenCalledWith(_params, client);
113
-
114
- expect(result).toBeDefined();
115
- expect(result._id).toBe(response._id);
116
-
117
- expect(result.data).toBeDefined();
118
-
119
- // user wrapper functions
120
- expect(typeof result.update).toBe("function");
121
- expect(typeof result.remove).toBe("function");
122
- });
123
-
124
- it("should remove a user", async () => {
125
- const { response, parameters } = UserFixture.delete;
126
- const { siteId, userId } = parameters;
127
-
128
- const path = `/sites/${siteId}/users/${userId}`;
129
- mock.onDelete(path).reply(200, response);
130
- const spy = jest.spyOn(User, "remove");
131
-
132
- const result = await user.remove();
133
-
134
- expect(spy).toHaveBeenCalledWith({ siteId, userId }, client);
135
-
136
- expect(result).toBeDefined();
137
- });
138
- });
139
- });
@@ -1,82 +0,0 @@
1
- import MockAdapter from "axios-mock-adapter";
2
- import axios from "axios";
3
- import { WebhookFixture } from "../fixtures";
4
- import { Webhook } from "../../src/api";
5
-
6
- describe("Webhooks", () => {
7
- const mock = new MockAdapter(axios);
8
- const client = axios.create();
9
-
10
- describe("Static Methods", () => {
11
- it("should respond with a list of webhooks", async () => {
12
- const { parameters, response } = WebhookFixture.list;
13
- const { siteId } = parameters;
14
- const path = `/sites/${siteId}/webhooks`;
15
-
16
- mock.onGet(path).reply(200, response);
17
- const { data } = await Webhook.list(parameters, client);
18
-
19
- expect(data).toBeDefined();
20
- expect(data.length).toEqual(response.length);
21
- expect(data[0]).toEqual(response[0]);
22
- });
23
-
24
- it("should respond with a single webhook", async () => {
25
- const { parameters, response } = WebhookFixture.getOne;
26
- const { siteId, webhookId } = parameters;
27
-
28
- const path = `/sites/${siteId}/webhooks/${webhookId}`;
29
- mock.onGet(path).reply(200, response);
30
- const { data } = await Webhook.getOne(parameters, client);
31
-
32
- expect(data).toBeDefined();
33
- expect(data._id).toBe(response._id);
34
- });
35
-
36
- it("should create a webhook", async () => {
37
- const { parameters, response } = WebhookFixture.create;
38
- const { siteId } = parameters;
39
-
40
- const path = `/sites/${siteId}/webhooks`;
41
- mock.onPost(path).reply(200, response);
42
- const { data } = await Webhook.create(parameters, client);
43
-
44
- expect(data).toBeDefined();
45
- expect(data._id).toBe(response._id);
46
- });
47
-
48
- it("should remove a webhook", async () => {
49
- const { parameters, response } = WebhookFixture.delete;
50
- const { siteId, webhookId } = parameters;
51
-
52
- const path = `/sites/${siteId}/webhooks/${webhookId}`;
53
- mock.onDelete(path).reply(200, response);
54
- const { data } = await Webhook.remove(parameters, client);
55
-
56
- expect(data).toBeDefined();
57
- expect(data.deleted).toEqual(response.deleted);
58
- });
59
- });
60
-
61
- describe("Instance Methods", () => {
62
- const res = { data: {}, status: 200, statusText: "", headers: {}, config: {} };
63
- const webhook = new Webhook(client, res, WebhookFixture.getOne.response);
64
-
65
- it("should remove a webhook", async () => {
66
- const { parameters, response } = WebhookFixture.delete;
67
- const { siteId, webhookId } = parameters;
68
-
69
- const path = `/sites/${siteId}/webhooks/${webhookId}`;
70
- mock.onDelete(path).reply(200, response);
71
- const spy = jest.spyOn(Webhook, "remove");
72
-
73
- const result = await webhook.remove();
74
-
75
- const _params = { siteId, webhookId, params: undefined };
76
- expect(spy).toBeCalledWith(_params, client);
77
-
78
- expect(result).toBeDefined();
79
- expect(result.deleted).toBe(response.deleted);
80
- });
81
- });
82
- });
@@ -1,19 +0,0 @@
1
- import { ArgumentError, requireArgs } from "../../src/core/error";
2
- import MockAdapter from "axios-mock-adapter";
3
- import axios from "axios";
4
-
5
- describe("Error", () => {
6
- const mock = new MockAdapter(axios);
7
-
8
- it("should throw an ArgumentError", () => {
9
- expect(() => {
10
- throw new ArgumentError("name");
11
- }).toThrow("Argument 'name' is required but was not present");
12
- });
13
-
14
- it("should throw an ArgumentError for required args", () => {
15
- expect(() => {
16
- requireArgs({ name: undefined });
17
- }).toThrow("Argument 'name' is required but was not present");
18
- });
19
- });
@@ -1,36 +0,0 @@
1
- import axios, { AxiosResponse } from "axios";
2
- import { WebflowRecord, MetaResponse } from "../../src/core/response";
3
-
4
- describe("Response", () => {
5
- const client = axios.create();
6
- const response: AxiosResponse = {
7
- status: 200,
8
- statusText: "OK",
9
- headers: {
10
- "x-ratelimit-limit": "100",
11
- "x-ratelimit-remaining": "99",
12
- },
13
- config: {},
14
- data: {},
15
- };
16
-
17
- it("should create a MetaResponse", () => {
18
- const meta = new MetaResponse(response);
19
- expect(meta.rateLimit.limit).toBe(100);
20
- expect(meta.rateLimit.remaining).toBe(99);
21
- });
22
-
23
- it("should create a WebflowRecord", () => {
24
- const record = new WebflowRecord(client, response, { id: "123" });
25
-
26
- // confirm client
27
- expect(record.client).toBe(client);
28
-
29
- // confirm response
30
- expect(record.response).toBe(response);
31
-
32
- // confirm meta records
33
- expect(record._meta.rateLimit.limit).toBe(100);
34
- expect(record._meta.rateLimit.remaining).toBe(99);
35
- });
36
- });