@webiny/mcp 6.0.0 → 6.1.0-beta.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.
- package/agents/claude.d.ts +2 -2
- package/agents/claude.js.map +1 -1
- package/agents/cline.d.ts +2 -2
- package/agents/cline.js.map +1 -1
- package/agents/copilot.d.ts +2 -2
- package/agents/copilot.js +1 -1
- package/agents/copilot.js.map +1 -1
- package/agents/cursor.d.ts +2 -2
- package/agents/cursor.js.map +1 -1
- package/agents/instructions.js +1 -1
- package/agents/instructions.js.map +1 -1
- package/agents/kiro.d.ts +15 -0
- package/agents/kiro.js +33 -0
- package/agents/kiro.js.map +1 -0
- package/agents/opencode.d.ts +22 -0
- package/agents/opencode.js +76 -0
- package/agents/opencode.js.map +1 -0
- package/agents/shared.d.ts +5 -5
- package/agents/shared.js +3 -3
- package/agents/shared.js.map +1 -1
- package/agents/windsurf.d.ts +2 -2
- package/agents/windsurf.js.map +1 -1
- package/bin.d.ts +2 -0
- package/bin.js +4 -0
- package/bin.js.map +1 -0
- package/cli/ConfigureMcp.d.ts +7 -14
- package/cli/ConfigureMcp.js +24 -52
- package/cli/ConfigureMcp.js.map +1 -1
- package/cli/McpServer.d.ts +3 -10
- package/cli/McpServer.js +83 -109
- package/cli/McpServer.js.map +1 -1
- package/cli.d.ts +1 -0
- package/cli.js +60 -0
- package/cli.js.map +1 -0
- package/index.d.ts +6 -1
- package/index.js +7 -1
- package/index.js.map +1 -1
- package/package.json +11 -23
- package/skills/admin/admin-architect/SKILL.md +389 -0
- package/skills/admin/ui-extensions/SKILL.md +268 -0
- package/skills/api/api-architect/SKILL.md +189 -0
- package/skills/api/custom-field-type/SKILL.md +263 -0
- package/skills/api/event-handler-pattern/SKILL.md +131 -0
- package/skills/{custom-graphql-api → api/graphql-api}/SKILL.md +3 -3
- package/skills/api/use-case-pattern/SKILL.md +102 -0
- package/skills/cli-extensions/SKILL.md +45 -47
- package/skills/configure-auth0/SKILL.md +4 -4
- package/skills/configure-okta/SKILL.md +3 -3
- package/skills/content-models/SKILL.md +197 -196
- package/skills/dependency-injection/SKILL.md +9 -219
- package/skills/full-stack-architect/SKILL.md +195 -0
- package/skills/generated/admin/SKILL.md +119 -0
- package/skills/generated/admin/aco/SKILL.md +28 -0
- package/skills/generated/admin/build-params/SKILL.md +33 -0
- package/skills/generated/admin/cms/SKILL.md +342 -0
- package/skills/generated/admin/configs/SKILL.md +23 -0
- package/skills/generated/admin/env-config/SKILL.md +30 -0
- package/skills/generated/admin/form/SKILL.md +88 -0
- package/skills/generated/admin/graphql-client/SKILL.md +23 -0
- package/skills/generated/admin/lexical/SKILL.md +105 -0
- package/skills/generated/admin/local-storage/SKILL.md +42 -0
- package/skills/generated/admin/router/SKILL.md +48 -0
- package/skills/generated/admin/security/SKILL.md +63 -0
- package/skills/generated/admin/tenancy/SKILL.md +64 -0
- package/skills/generated/admin/ui/SKILL.md +468 -0
- package/skills/generated/admin/website-builder/SKILL.md +318 -0
- package/skills/generated/api/SKILL.md +40 -0
- package/skills/generated/api/aco/SKILL.md +202 -0
- package/skills/generated/api/build-params/SKILL.md +31 -0
- package/skills/generated/api/cms/SKILL.md +646 -0
- package/skills/generated/api/event-publisher/SKILL.md +31 -0
- package/skills/generated/api/file-manager/SKILL.md +189 -0
- package/skills/generated/api/graphql/SKILL.md +61 -0
- package/skills/generated/api/key-value-store/SKILL.md +31 -0
- package/skills/generated/api/logger/SKILL.md +25 -0
- package/skills/generated/api/opensearch/SKILL.md +39 -0
- package/skills/generated/api/scheduler/SKILL.md +112 -0
- package/skills/generated/api/security/SKILL.md +317 -0
- package/skills/generated/api/system/SKILL.md +34 -0
- package/skills/generated/api/tasks/SKILL.md +31 -0
- package/skills/generated/api/tenancy/SKILL.md +124 -0
- package/skills/generated/api/tenant-manager/SKILL.md +34 -0
- package/skills/generated/api/website-builder/SKILL.md +356 -0
- package/skills/generated/cli/SKILL.md +28 -0
- package/skills/generated/cli/command/SKILL.md +24 -0
- package/skills/generated/extensions/SKILL.md +43 -0
- package/skills/generated/infra/SKILL.md +190 -0
- package/skills/infrastructure-extensions/SKILL.md +3 -2
- package/skills/local-development/SKILL.md +2 -28
- package/skills/project-structure/SKILL.md +78 -56
- package/skills/webiny-sdk/SKILL.md +77 -76
- package/skills/website-builder/SKILL.md +143 -149
- package/ui.d.ts +24 -0
- package/ui.js +31 -0
- package/ui.js.map +1 -0
- package/Extension.d.ts +0 -2
- package/Extension.js +0 -11
- package/Extension.js.map +0 -1
- package/skills/admin-ui-extensions/SKILL.md +0 -267
- package/skills/api-custom-feature/SKILL.md +0 -195
- package/skills/lifecycle-events/SKILL.md +0 -348
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: webiny-lifecycle-events
|
|
3
|
-
context: webiny-extensions
|
|
4
|
-
description: >
|
|
5
|
-
CMS entry lifecycle hooks and security event handlers.
|
|
6
|
-
Use this skill when the developer wants to intercept content entry operations
|
|
7
|
-
(create, update, delete, publish, unpublish), validate data before save, auto-calculate
|
|
8
|
-
fields, send notifications after operations, enforce security policies, sync with external
|
|
9
|
-
systems, or hook into API key updates. Covers before/after hooks, event filtering by modelId,
|
|
10
|
-
payload mutation, and the Logger/BuildParams DI services.
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Lifecycle Events
|
|
14
|
-
|
|
15
|
-
## TL;DR
|
|
16
|
-
|
|
17
|
-
Webiny fires lifecycle events before and after CMS entry operations (create, update, delete, publish, unpublish) and security operations (API key updates). You hook into these by implementing the corresponding `EventHandler.Interface`, filtering by `modelId`, and optionally mutating `payload.values` before data is saved. Register as `<Api.Extension>`.
|
|
18
|
-
|
|
19
|
-
## CMS Entry Lifecycle Events
|
|
20
|
-
|
|
21
|
-
### Available Hooks
|
|
22
|
-
|
|
23
|
-
| Hook | Import From | Fires When |
|
|
24
|
-
|---|---|---|
|
|
25
|
-
| `EntryBeforeCreateEventHandler` | `"webiny/api/cms/entry"` | Before a new entry is saved |
|
|
26
|
-
| `EntryAfterCreateEventHandler` | `"webiny/api/cms/entry"` | After a new entry is saved |
|
|
27
|
-
| `EntryBeforeUpdateEventHandler` | `"webiny/api/cms/entry"` | Before an existing entry is updated |
|
|
28
|
-
| `EntryAfterUpdateEventHandler` | `"webiny/api/cms/entry"` | After an existing entry is updated |
|
|
29
|
-
| `EntryBeforeDeleteEventHandler` | `"webiny/api/cms/entry"` | Before an entry is deleted |
|
|
30
|
-
| `EntryAfterDeleteEventHandler` | `"webiny/api/cms/entry"` | After an entry is deleted |
|
|
31
|
-
| `EntryBeforePublishEventHandler` | `"webiny/api/cms/entry"` | Before an entry is published |
|
|
32
|
-
| `EntryAfterPublishEventHandler` | `"webiny/api/cms/entry"` | After an entry is published |
|
|
33
|
-
|
|
34
|
-
### The Event Object
|
|
35
|
-
|
|
36
|
-
Every handler receives an `event` with:
|
|
37
|
-
|
|
38
|
-
- `event.modelId` -- The model ID string (e.g., `"contactSubmission"`)
|
|
39
|
-
- `event.payload` -- The entry data object
|
|
40
|
-
- `event.payload.values` -- The field values (can be mutated in `before` hooks)
|
|
41
|
-
|
|
42
|
-
### Pattern
|
|
43
|
-
|
|
44
|
-
```typescript
|
|
45
|
-
import { EntryBeforeCreateEventHandler as Handler } from "webiny/api/cms/entry";
|
|
46
|
-
|
|
47
|
-
class MyHookImpl implements Handler.Interface {
|
|
48
|
-
async handle(event: Handler.Event): Promise<void> {
|
|
49
|
-
const { payload, modelId } = event;
|
|
50
|
-
|
|
51
|
-
// 1. Filter by model -- handlers fire for ALL models
|
|
52
|
-
if (modelId !== "myTargetModel") {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// 2. Read values
|
|
57
|
-
const someField = payload.values?.someField as string;
|
|
58
|
-
|
|
59
|
-
// 3. Mutate values (before hooks only)
|
|
60
|
-
if (!payload.values) {
|
|
61
|
-
payload.values = {};
|
|
62
|
-
}
|
|
63
|
-
payload.values.computedField = "computed value";
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export default Handler.createImplementation({
|
|
68
|
-
implementation: MyHookImpl,
|
|
69
|
-
dependencies: []
|
|
70
|
-
});
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Register in `webiny.config.tsx`:
|
|
74
|
-
|
|
75
|
-
```tsx
|
|
76
|
-
<Api.Extension src={"/extensions/MyHook.ts"} />
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### When to Use Before vs After
|
|
80
|
-
|
|
81
|
-
| Use Case | Hook Type | Why |
|
|
82
|
-
|---|---|---|
|
|
83
|
-
| Validate data | `Before` | Reject or modify before persistence |
|
|
84
|
-
| Auto-calculate fields | `Before` | Set computed values before save |
|
|
85
|
-
| Send email notification | `After` | Ensure data is persisted first |
|
|
86
|
-
| Sync with external CRM | `After` | Side effect after successful save |
|
|
87
|
-
| Enforce security policies | `Before` | Block operations before they happen |
|
|
88
|
-
|
|
89
|
-
## Full Example: Email Classification Hook
|
|
90
|
-
|
|
91
|
-
This hook intercepts contact form submissions, checks the email domain, and automatically classifies it as "work" or "personal":
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
// extensions/contactSubmission/ContactSubmissionHook.ts
|
|
95
|
-
import { EntryBeforeCreateEventHandler as Handler } from "webiny/api/cms/entry";
|
|
96
|
-
import { Logger } from "webiny/api/logger";
|
|
97
|
-
|
|
98
|
-
const PERSONAL_EMAIL_DOMAINS = [
|
|
99
|
-
"gmail.com",
|
|
100
|
-
"yahoo.com",
|
|
101
|
-
"hotmail.com",
|
|
102
|
-
"outlook.com",
|
|
103
|
-
"aol.com",
|
|
104
|
-
"icloud.com",
|
|
105
|
-
"protonmail.com"
|
|
106
|
-
];
|
|
107
|
-
|
|
108
|
-
class ContactSubmissionHookImpl implements Handler.Interface {
|
|
109
|
-
public constructor(private logger: Logger.Interface) {}
|
|
110
|
-
|
|
111
|
-
public async handle(event: Handler.Event): Promise<void> {
|
|
112
|
-
const { payload, modelId } = event;
|
|
113
|
-
|
|
114
|
-
// Only run for Contact Submission entries
|
|
115
|
-
if (modelId !== "contactSubmission") {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
this.logger.info(`Processing contact submission for model: ${modelId}`);
|
|
120
|
-
|
|
121
|
-
const email = payload.values?.email as string;
|
|
122
|
-
if (!email) {
|
|
123
|
-
this.logger.warn("No email found in contact submission");
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Classify the email
|
|
128
|
-
const domain = email.split("@")[1]?.toLowerCase();
|
|
129
|
-
let type = "work";
|
|
130
|
-
if (domain && PERSONAL_EMAIL_DOMAINS.includes(domain)) {
|
|
131
|
-
type = "personal";
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
this.logger.info(`Classified email ${email} as ${type}`);
|
|
135
|
-
|
|
136
|
-
// Set the emailType field before the entry is saved
|
|
137
|
-
if (!payload.values) {
|
|
138
|
-
payload.values = {};
|
|
139
|
-
}
|
|
140
|
-
payload.values.emailType = type;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export default Handler.createImplementation({
|
|
145
|
-
implementation: ContactSubmissionHookImpl,
|
|
146
|
-
dependencies: [Logger]
|
|
147
|
-
});
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Security Lifecycle Events
|
|
151
|
-
|
|
152
|
-
### API Key After Update
|
|
153
|
-
|
|
154
|
-
```typescript
|
|
155
|
-
// extensions/MyApiKeyAfterUpdate.ts
|
|
156
|
-
import { ApiKeyAfterUpdateEventHandler } from "webiny/api/security/api-key";
|
|
157
|
-
import { Logger } from "webiny/api/logger";
|
|
158
|
-
import { BuildParams } from "webiny/api/build-params";
|
|
159
|
-
|
|
160
|
-
class MyApiKeyAfterUpdateImpl implements ApiKeyAfterUpdateEventHandler.Interface {
|
|
161
|
-
constructor(
|
|
162
|
-
private logger: Logger.Interface,
|
|
163
|
-
private buildParams: BuildParams.Interface
|
|
164
|
-
) {}
|
|
165
|
-
|
|
166
|
-
async handle() {
|
|
167
|
-
this.logger.warn("An API key was updated!");
|
|
168
|
-
|
|
169
|
-
const param1 = this.buildParams.get<string>("MY_CUSTOM_BUILD_PARAM");
|
|
170
|
-
console.log(`Build param 1: ${param1}`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
const MyApiKeyAfterUpdate = ApiKeyAfterUpdateEventHandler.createImplementation({
|
|
175
|
-
implementation: MyApiKeyAfterUpdateImpl,
|
|
176
|
-
dependencies: [Logger, BuildParams]
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
export default MyApiKeyAfterUpdate;
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
Register with a dedicated JSX element:
|
|
183
|
-
|
|
184
|
-
```tsx
|
|
185
|
-
<Security.ApiKey.AfterUpdate src={"/extensions/MyApiKeyAfterUpdate.ts"} />
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
## All Available Event Handlers
|
|
189
|
-
|
|
190
|
-
### `webiny/api/cms/entry`
|
|
191
|
-
|
|
192
|
-
| Handler | Fires When |
|
|
193
|
-
| --- | --- |
|
|
194
|
-
| `EntryBeforeCreateEventHandler` | Before a new entry is saved |
|
|
195
|
-
| `EntryAfterCreateEventHandler` | After a new entry is saved |
|
|
196
|
-
| `EntryRevisionBeforeCreateEventHandler` | Before a revision is created |
|
|
197
|
-
| `EntryRevisionAfterCreateEventHandler` | After a revision is created |
|
|
198
|
-
| `EntryBeforeUpdateEventHandler` | Before an entry is updated |
|
|
199
|
-
| `EntryAfterUpdateEventHandler` | After an entry is updated |
|
|
200
|
-
| `EntryBeforeDeleteEventHandler` | Before an entry is deleted |
|
|
201
|
-
| `EntryAfterDeleteEventHandler` | After an entry is deleted |
|
|
202
|
-
| `EntryRevisionBeforeDeleteEventHandler` | Before a revision is deleted |
|
|
203
|
-
| `EntryRevisionAfterDeleteEventHandler` | After a revision is deleted |
|
|
204
|
-
| `EntryBeforeDeleteMultipleEventHandler` | Before multiple entries are deleted |
|
|
205
|
-
| `EntryAfterDeleteMultipleEventHandler` | After multiple entries are deleted |
|
|
206
|
-
| `EntryBeforeMoveEventHandler` | Before an entry is moved |
|
|
207
|
-
| `EntryAfterMoveEventHandler` | After an entry is moved |
|
|
208
|
-
| `EntryBeforePublishEventHandler` | Before an entry is published |
|
|
209
|
-
| `EntryAfterPublishEventHandler` | After an entry is published |
|
|
210
|
-
| `EntryBeforeRepublishEventHandler` | Before an entry is republished |
|
|
211
|
-
| `EntryAfterRepublishEventHandler` | After an entry is republished |
|
|
212
|
-
| `EntryBeforeRestoreFromBinEventHandler` | Before an entry is restored from bin |
|
|
213
|
-
| `EntryAfterRestoreFromBinEventHandler` | After an entry is restored from bin |
|
|
214
|
-
| `EntryBeforeUnpublishEventHandler` | Before an entry is unpublished |
|
|
215
|
-
| `EntryAfterUnpublishEventHandler` | After an entry is unpublished |
|
|
216
|
-
|
|
217
|
-
### `webiny/api/cms/model`
|
|
218
|
-
|
|
219
|
-
| Handler | Fires When |
|
|
220
|
-
| --- | --- |
|
|
221
|
-
| `ModelBeforeCreateEventHandler` | Before a model is created |
|
|
222
|
-
| `ModelAfterCreateEventHandler` | After a model is created |
|
|
223
|
-
| `ModelBeforeCreateFromEventHandler` | Before a model is cloned |
|
|
224
|
-
| `ModelAfterCreateFromEventHandler` | After a model is cloned |
|
|
225
|
-
| `ModelBeforeUpdateEventHandler` | Before a model is updated |
|
|
226
|
-
| `ModelAfterUpdateEventHandler` | After a model is updated |
|
|
227
|
-
| `ModelBeforeDeleteEventHandler` | Before a model is deleted |
|
|
228
|
-
| `ModelAfterDeleteEventHandler` | After a model is deleted |
|
|
229
|
-
|
|
230
|
-
### `webiny/api/cms/group`
|
|
231
|
-
|
|
232
|
-
| Handler | Fires When |
|
|
233
|
-
| --- | --- |
|
|
234
|
-
| `GroupBeforeCreateEventHandler` | Before a group is created |
|
|
235
|
-
| `GroupAfterCreateEventHandler` | After a group is created |
|
|
236
|
-
| `GroupBeforeUpdateEventHandler` | Before a group is updated |
|
|
237
|
-
| `GroupAfterUpdateEventHandler` | After a group is updated |
|
|
238
|
-
| `GroupBeforeDeleteEventHandler` | Before a group is deleted |
|
|
239
|
-
| `GroupAfterDeleteEventHandler` | After a group is deleted |
|
|
240
|
-
|
|
241
|
-
### `webiny/api/security/authentication`
|
|
242
|
-
|
|
243
|
-
| Handler | Fires When |
|
|
244
|
-
| --- | --- |
|
|
245
|
-
| `BeforeAuthenticationEventHandler` | Before authentication |
|
|
246
|
-
| `AfterAuthenticationEventHandler` | After authentication |
|
|
247
|
-
|
|
248
|
-
### `webiny/api/security/api-key`
|
|
249
|
-
|
|
250
|
-
| Handler | Fires When |
|
|
251
|
-
| --- | --- |
|
|
252
|
-
| `ApiKeyBeforeCreateEventHandler` | Before an API key is created |
|
|
253
|
-
| `ApiKeyAfterCreateEventHandler` | After an API key is created |
|
|
254
|
-
| `ApiKeyBeforeDeleteEventHandler` | Before an API key is deleted |
|
|
255
|
-
| `ApiKeyAfterDeleteEventHandler` | After an API key is deleted |
|
|
256
|
-
| `ApiKeyBeforeUpdateEventHandler` | Before an API key is updated |
|
|
257
|
-
| `ApiKeyAfterUpdateEventHandler` | After an API key is updated |
|
|
258
|
-
|
|
259
|
-
### `webiny/api/security/role`
|
|
260
|
-
|
|
261
|
-
| Handler | Fires When |
|
|
262
|
-
| --- | --- |
|
|
263
|
-
| `RoleBeforeCreateEventHandler` | Before a role is created |
|
|
264
|
-
| `RoleAfterCreateEventHandler` | After a role is created |
|
|
265
|
-
| `RoleBeforeDeleteEventHandler` | Before a role is deleted |
|
|
266
|
-
| `RoleAfterDeleteEventHandler` | After a role is deleted |
|
|
267
|
-
| `RoleBeforeUpdateEventHandler` | Before a role is updated |
|
|
268
|
-
| `RoleAfterUpdateEventHandler` | After a role is updated |
|
|
269
|
-
|
|
270
|
-
### `webiny/api/security/user`
|
|
271
|
-
|
|
272
|
-
| Handler | Fires When |
|
|
273
|
-
| --- | --- |
|
|
274
|
-
| `UserBeforeCreateEventHandler` | Before a user is created |
|
|
275
|
-
| `UserAfterCreateEventHandler` | After a user is created |
|
|
276
|
-
| `UserBeforeDeleteEventHandler` | Before a user is deleted |
|
|
277
|
-
| `UserAfterDeleteEventHandler` | After a user is deleted |
|
|
278
|
-
| `UserBeforeUpdateEventHandler` | Before a user is updated |
|
|
279
|
-
| `UserAfterUpdateEventHandler` | After a user is updated |
|
|
280
|
-
|
|
281
|
-
### `webiny/api/tenancy`
|
|
282
|
-
|
|
283
|
-
| Handler | Fires When |
|
|
284
|
-
| --- | --- |
|
|
285
|
-
| `TenantBeforeCreateEventHandler` | Before a tenant is created |
|
|
286
|
-
| `TenantAfterCreateEventHandler` | After a tenant is created |
|
|
287
|
-
| `TenantBeforeUpdateEventHandler` | Before a tenant is updated |
|
|
288
|
-
| `TenantAfterUpdateEventHandler` | After a tenant is updated |
|
|
289
|
-
| `TenantBeforeDeleteEventHandler` | Before a tenant is deleted |
|
|
290
|
-
| `TenantAfterDeleteEventHandler` | After a tenant is deleted |
|
|
291
|
-
| `TenantInstalledEventHandler` | After a tenant is installed |
|
|
292
|
-
|
|
293
|
-
### `webiny/api/system`
|
|
294
|
-
|
|
295
|
-
| Handler | Fires When |
|
|
296
|
-
| --- | --- |
|
|
297
|
-
| `SystemInstalledEventHandler` | After the system is installed |
|
|
298
|
-
|
|
299
|
-
### `webiny/api/website-builder/page`
|
|
300
|
-
|
|
301
|
-
| Handler | Fires When |
|
|
302
|
-
| --- | --- |
|
|
303
|
-
| `PageBeforeCreateEventHandler` | Before a page is created |
|
|
304
|
-
| `PageAfterCreateEventHandler` | After a page is created |
|
|
305
|
-
| `PageBeforeCreateRevisionFromEventHandler` | Before a page revision is created |
|
|
306
|
-
| `PageAfterCreateRevisionFromEventHandler` | After a page revision is created |
|
|
307
|
-
| `PageBeforeDeleteEventHandler` | Before a page is deleted |
|
|
308
|
-
| `PageAfterDeleteEventHandler` | After a page is deleted |
|
|
309
|
-
| `PageBeforeDuplicateEventHandler` | Before a page is duplicated |
|
|
310
|
-
| `PageAfterDuplicateEventHandler` | After a page is duplicated |
|
|
311
|
-
| `PageBeforeMoveEventHandler` | Before a page is moved |
|
|
312
|
-
| `PageAfterMoveEventHandler` | After a page is moved |
|
|
313
|
-
| `PageBeforePublishEventHandler` | Before a page is published |
|
|
314
|
-
| `PageAfterPublishEventHandler` | After a page is published |
|
|
315
|
-
| `PageBeforeUnpublishEventHandler` | Before a page is unpublished |
|
|
316
|
-
| `PageAfterUnpublishEventHandler` | After a page is unpublished |
|
|
317
|
-
| `PageBeforeUpdateEventHandler` | Before a page is updated |
|
|
318
|
-
| `PageAfterUpdateEventHandler` | After a page is updated |
|
|
319
|
-
|
|
320
|
-
### `webiny/api/website-builder/redirect`
|
|
321
|
-
|
|
322
|
-
| Handler | Fires When |
|
|
323
|
-
| --- | --- |
|
|
324
|
-
| `RedirectBeforeCreateEventHandler` | Before a redirect is created |
|
|
325
|
-
| `RedirectAfterCreateEventHandler` | After a redirect is created |
|
|
326
|
-
| `RedirectBeforeDeleteEventHandler` | Before a redirect is deleted |
|
|
327
|
-
| `RedirectAfterDeleteEventHandler` | After a redirect is deleted |
|
|
328
|
-
| `RedirectBeforeMoveEventHandler` | Before a redirect is moved |
|
|
329
|
-
| `RedirectAfterMoveEventHandler` | After a redirect is moved |
|
|
330
|
-
| `RedirectBeforeUpdateEventHandler` | Before a redirect is updated |
|
|
331
|
-
| `RedirectAfterUpdateEventHandler` | After a redirect is updated |
|
|
332
|
-
|
|
333
|
-
## Quick Reference
|
|
334
|
-
|
|
335
|
-
```
|
|
336
|
-
CMS hooks import: import { EntryBeforeCreateEventHandler } from "webiny/api/cms/entry";
|
|
337
|
-
Security import: import { ApiKeyAfterUpdateEventHandler } from "webiny/api/security/api-key";
|
|
338
|
-
Event shape: event.modelId (string), event.payload (object), event.payload.values (object)
|
|
339
|
-
Export: Handler.createImplementation({ implementation, dependencies })
|
|
340
|
-
Register CMS: <Api.Extension src={"/extensions/MyHook.ts"} />
|
|
341
|
-
Register Security: <Security.ApiKey.AfterUpdate src={"/extensions/MyHook.ts"} />
|
|
342
|
-
Deploy: yarn webiny deploy api
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
## Related Skills
|
|
346
|
-
|
|
347
|
-
- `content-models` -- Define the models your hooks target
|
|
348
|
-
- `dependency-injection` -- Inject Logger, BuildParams, and other services into event handlers
|