@velocms/plugin-sdk 1.0.0-alpha.2

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.
@@ -0,0 +1,318 @@
1
+ export { A as AfterMemberSignupPayload, a as AfterMemberUpdatePayload, b as AfterOrderCreatePayload, c as AfterPageCreatePayload, d as AfterPagePublishPayload, e as AfterPageUpdatePayload, f as AfterPostCreatePayload, g as AfterPostDeletePayload, h as AfterPostPublishPayload, i as AfterPostUpdatePayload, j as AfterProductCreatePayload, B as BeforeMemberDeletePayload, k as BeforePostPublishPayload, l as BeforePostPublishResult, C as ContextLogger, m as ContextSettings, n as ContextTenant, E as EventBusContext, o as EventName, H as HookContext, p as HookMember, q as HookName, r as HookPayloadMap, s as HookPost, O as OnAppStartPayload, t as OnDailySchedulePayload, P as PageHookData, u as PluginEventName, v as PluginEventPayload, S as SystemEventName, w as SystemEventPayloadMap } from './context-BCzNwlqR.cjs';
2
+
3
+ /**
4
+ * Plugin Capabilities
5
+ *
6
+ * Capabilities follow the principle of least privilege. Declare only the
7
+ * capabilities your plugin actually needs — the VeloCMS review team will
8
+ * reject plugins with unnecessary permissions.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * capabilities: {
13
+ * content: { read: true },
14
+ * network: true,
15
+ * network_allowlist: ["api.example.com"],
16
+ * }
17
+ * ```
18
+ */
19
+ /**
20
+ * Content access capabilities.
21
+ *
22
+ * `read` — read published + draft posts, pages, media metadata.
23
+ * `write` — create and update posts and pages.
24
+ * `delete` — delete posts, pages, and media.
25
+ */
26
+ interface ContentCapabilities {
27
+ /** Read posts, pages, media metadata */
28
+ read?: boolean;
29
+ /** Create and update posts and pages */
30
+ write?: boolean;
31
+ /** Delete posts, pages, and media */
32
+ delete?: boolean;
33
+ }
34
+ /**
35
+ * Member access capabilities.
36
+ *
37
+ * `read` — read subscriber list (email redacted by default unless `read_pii` is true).
38
+ * `write` — create and update member records.
39
+ * `read_pii` — access raw member email addresses. Requires manual review justification.
40
+ */
41
+ interface MemberCapabilities {
42
+ /** Read subscriber list (email redacted unless read_pii = true) */
43
+ read?: boolean;
44
+ /** Create and update member records */
45
+ write?: boolean;
46
+ /** Access raw member email addresses — requires review justification */
47
+ read_pii?: boolean;
48
+ }
49
+ /**
50
+ * Commerce capabilities.
51
+ *
52
+ * Requires the tenant to have commerce enabled.
53
+ */
54
+ interface CommerceCapabilities {
55
+ /** Read products and orders */
56
+ read?: boolean;
57
+ /** Create and update products, process orders */
58
+ write?: boolean;
59
+ }
60
+ /**
61
+ * Database schema capabilities.
62
+ *
63
+ * `read` — introspect collection schemas.
64
+ * `modify` — add custom fields or collections. Requires architect review.
65
+ */
66
+ interface SchemaCapabilities {
67
+ /** Read collection schemas */
68
+ read?: boolean;
69
+ /** Modify schemas — add fields or collections. HIGH RISK. Requires review. */
70
+ modify?: boolean;
71
+ }
72
+ /**
73
+ * Full capabilities declaration.
74
+ *
75
+ * All fields are optional — omit capabilities your plugin does not use.
76
+ */
77
+ interface PluginCapabilities {
78
+ /** Content access */
79
+ content?: ContentCapabilities;
80
+ /** Member access */
81
+ members?: MemberCapabilities;
82
+ /** Commerce access */
83
+ commerce?: CommerceCapabilities;
84
+ /** Schema introspection/modification */
85
+ schema?: SchemaCapabilities;
86
+ /**
87
+ * External HTTP requests.
88
+ * If true, plugin can call any URL in `network_allowlist`.
89
+ * Network calls outside the allowlist are blocked at runtime.
90
+ */
91
+ network?: boolean;
92
+ /**
93
+ * Allowlisted domains for network access.
94
+ * Format: "hostname.tld" (no protocol, no path, no wildcards).
95
+ * Example: ["api.sendgrid.com", "hooks.slack.com"]
96
+ */
97
+ network_allowlist?: string[];
98
+ /** Send emails via the tenant's configured email provider */
99
+ email?: boolean;
100
+ /** UI integration points */
101
+ ui?: {
102
+ /** Inject a persistent sidebar widget */
103
+ sidebar?: boolean;
104
+ /** Inject toolbar items or panel tabs in the post editor */
105
+ post_editor?: boolean;
106
+ /** Add stat cards to the admin dashboard */
107
+ dashboard?: boolean;
108
+ /** Add a section to the admin settings page */
109
+ settings?: boolean;
110
+ };
111
+ /**
112
+ * Event bus subscription capability. (Phase 2.A)
113
+ *
114
+ * Declare which system events your plugin subscribes to and whether it
115
+ * emits custom events. The VeloCMS runtime will only inject ctx.events
116
+ * when this field is present.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * capabilities: {
121
+ * events: {
122
+ * subscribe: ["post.published", "member.subscribed"],
123
+ * emit_custom: true,
124
+ * }
125
+ * }
126
+ * ```
127
+ */
128
+ events?: {
129
+ /**
130
+ * List of system event names the plugin subscribes to.
131
+ * Import `SystemEventName` from `@velocms/plugin-sdk` for the full catalog.
132
+ */
133
+ subscribe?: string[];
134
+ /**
135
+ * If true, the plugin may call `ctx.events.emit()` to broadcast custom events.
136
+ * Defaults to false. Requires `name` to follow "@org/slug" format for namespace enforcement.
137
+ */
138
+ emit_custom?: boolean;
139
+ };
140
+ }
141
+
142
+ /**
143
+ * Plugin Manifest
144
+ *
145
+ * Every plugin must export a `manifest` object conforming to this interface.
146
+ * The manifest is validated by the VeloCMS review pipeline before a plugin
147
+ * is accepted into the marketplace.
148
+ *
149
+ * @see https://velocms.org/developers/sdk#manifest
150
+ */
151
+
152
+ /**
153
+ * Plugin type classification.
154
+ *
155
+ * - `block` — a content block renderable in the page builder and post editor.
156
+ * - `integration` — connects VeloCMS to an external service via hooks.
157
+ * - `widget` — a UI widget injected into the admin dashboard or sidebar.
158
+ */
159
+ type PluginType = "block" | "integration" | "widget";
160
+ /**
161
+ * Pricing model for the plugin.
162
+ *
163
+ * - `free` — no charge to install.
164
+ * - `paid` — one-time purchase via Stripe on the developer's connected account.
165
+ * - `subscription` — recurring subscription billed monthly.
166
+ */
167
+ type PricingModel = "free" | "paid" | "subscription";
168
+ /**
169
+ * Plugin pricing declaration.
170
+ *
171
+ * For paid and subscription plugins, the `price_usd` is the amount charged to
172
+ * the tenant. VeloCMS retains 20% platform fee; developers receive 80%.
173
+ */
174
+ interface PluginPricing {
175
+ /** Pricing model */
176
+ model: PricingModel;
177
+ /**
178
+ * Price in USD cents (e.g. 999 = $9.99).
179
+ * Required when model is "paid" or "subscription".
180
+ */
181
+ price_usd?: number;
182
+ /**
183
+ * Stripe Price ID on the developer's connected account.
184
+ * Required when model is "paid" or "subscription".
185
+ */
186
+ stripe_price_id?: string;
187
+ }
188
+ /**
189
+ * Entry points for the plugin bundle.
190
+ *
191
+ * All paths are relative to the plugin root (e.g. `./dist/runtime.js`).
192
+ */
193
+ interface PluginEntry {
194
+ /** Server-side runtime — executed in the V8 isolate sandbox on hook invocations. Required. */
195
+ runtime: string;
196
+ /** Admin UI component — loaded only in the admin dashboard. Optional. */
197
+ admin?: string;
198
+ /** Named block exports — required when plugin type is "block". */
199
+ blocks?: Record<string, {
200
+ /** Path to the React component file */
201
+ component: string;
202
+ /** Path to the JSON schema for block props */
203
+ schema: string;
204
+ }>;
205
+ }
206
+ /**
207
+ * Author information.
208
+ */
209
+ interface PluginAuthor {
210
+ /** Author or organization name */
211
+ name: string;
212
+ /** Contact email for security disclosures */
213
+ email: string;
214
+ /** Author website or profile URL */
215
+ url?: string;
216
+ }
217
+ /**
218
+ * Repository information.
219
+ */
220
+ interface PluginRepository {
221
+ type: "git";
222
+ url: string;
223
+ }
224
+ /**
225
+ * Engine compatibility requirements.
226
+ *
227
+ * The `velocms` field is a semver range string. The review pipeline checks
228
+ * compatibility against the current VeloCMS version.
229
+ *
230
+ * @example
231
+ * ```typescript
232
+ * engines: { velocms: ">=1.0.0" }
233
+ * // or range:
234
+ * engines: { velocms: ">=1.0.0 <2.0.0" }
235
+ * // or caret:
236
+ * engines: { velocms: "^1.0.0" }
237
+ * ```
238
+ */
239
+ interface PluginEngines {
240
+ /** Supported VeloCMS semver range */
241
+ velocms: string;
242
+ }
243
+ /**
244
+ * VeloCMS Plugin Manifest v2
245
+ *
246
+ * This is the canonical shape of a plugin manifest. Export this as
247
+ * a named `manifest` const from your plugin's entry file.
248
+ *
249
+ * @example
250
+ * ```typescript
251
+ * import type { PluginManifest } from "@velocms/plugin-sdk";
252
+ *
253
+ * export const manifest: PluginManifest = {
254
+ * $schema: "https://velocms.org/schemas/plugin-v2.json",
255
+ * name: "@myorg/word-counter-pro",
256
+ * displayName: "Word Counter Pro",
257
+ * version: "1.0.0",
258
+ * description: "Counts words and sets reading time estimates on every post.",
259
+ * author: { name: "My Org", email: "plugins@myorg.com" },
260
+ * type: "integration",
261
+ * category: "writing",
262
+ * icon: "./icon.png",
263
+ * engines: { velocms: ">=1.0.0" },
264
+ * capabilities: { content: { read: true } },
265
+ * pricing: { model: "free" },
266
+ * entry: { runtime: "./dist/runtime.js" },
267
+ * permissions_displayed_to_user: ["Read your posts and pages"],
268
+ * };
269
+ * ```
270
+ */
271
+ interface PluginManifest {
272
+ /** Schema identifier — must be "https://velocms.org/schemas/plugin-v2.json" */
273
+ $schema: "https://velocms.org/schemas/plugin-v2.json";
274
+ /**
275
+ * Scoped package name in "@author/plugin-slug" format.
276
+ * Must be unique across the VeloCMS marketplace.
277
+ */
278
+ name: string;
279
+ /** Human-readable plugin name shown in the marketplace */
280
+ displayName: string;
281
+ /** Semantic version string (e.g. "1.0.0", "2.1.3-beta.1") */
282
+ version: string;
283
+ /** Short description of what the plugin does (max 300 characters) */
284
+ description: string;
285
+ /** Author information */
286
+ author: PluginAuthor;
287
+ /** Plugin homepage URL */
288
+ homepage?: string;
289
+ /** Source code repository */
290
+ repository?: PluginRepository;
291
+ /** Plugin type classification */
292
+ type: PluginType;
293
+ /**
294
+ * Category for marketplace browsing.
295
+ * Examples: "analytics", "seo", "writing", "commerce", "social"
296
+ */
297
+ category: string;
298
+ /** Relative path to a 128x128 PNG icon file */
299
+ icon: string;
300
+ /** Supported VeloCMS versions */
301
+ engines: PluginEngines;
302
+ /** Capabilities the plugin requires (declare only what you use) */
303
+ capabilities: PluginCapabilities;
304
+ /** Pricing model */
305
+ pricing: PluginPricing;
306
+ /** Entry point file paths */
307
+ entry: PluginEntry;
308
+ /**
309
+ * Human-readable permission descriptions shown in the install modal.
310
+ * One sentence per item, written for a non-technical audience.
311
+ * Example: ["Read your posts and pages", "Make HTTP requests to Slack"]
312
+ */
313
+ permissions_displayed_to_user: string[];
314
+ /** SPDX license identifier (e.g. "MIT", "Apache-2.0"). Defaults to "proprietary". */
315
+ license?: string;
316
+ }
317
+
318
+ export type { CommerceCapabilities, ContentCapabilities, MemberCapabilities, PluginAuthor, PluginCapabilities, PluginEngines, PluginEntry, PluginManifest, PluginPricing, PluginRepository, PluginType, PricingModel, SchemaCapabilities };
@@ -0,0 +1,318 @@
1
+ export { A as AfterMemberSignupPayload, a as AfterMemberUpdatePayload, b as AfterOrderCreatePayload, c as AfterPageCreatePayload, d as AfterPagePublishPayload, e as AfterPageUpdatePayload, f as AfterPostCreatePayload, g as AfterPostDeletePayload, h as AfterPostPublishPayload, i as AfterPostUpdatePayload, j as AfterProductCreatePayload, B as BeforeMemberDeletePayload, k as BeforePostPublishPayload, l as BeforePostPublishResult, C as ContextLogger, m as ContextSettings, n as ContextTenant, E as EventBusContext, o as EventName, H as HookContext, p as HookMember, q as HookName, r as HookPayloadMap, s as HookPost, O as OnAppStartPayload, t as OnDailySchedulePayload, P as PageHookData, u as PluginEventName, v as PluginEventPayload, S as SystemEventName, w as SystemEventPayloadMap } from './context-BCzNwlqR.js';
2
+
3
+ /**
4
+ * Plugin Capabilities
5
+ *
6
+ * Capabilities follow the principle of least privilege. Declare only the
7
+ * capabilities your plugin actually needs — the VeloCMS review team will
8
+ * reject plugins with unnecessary permissions.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * capabilities: {
13
+ * content: { read: true },
14
+ * network: true,
15
+ * network_allowlist: ["api.example.com"],
16
+ * }
17
+ * ```
18
+ */
19
+ /**
20
+ * Content access capabilities.
21
+ *
22
+ * `read` — read published + draft posts, pages, media metadata.
23
+ * `write` — create and update posts and pages.
24
+ * `delete` — delete posts, pages, and media.
25
+ */
26
+ interface ContentCapabilities {
27
+ /** Read posts, pages, media metadata */
28
+ read?: boolean;
29
+ /** Create and update posts and pages */
30
+ write?: boolean;
31
+ /** Delete posts, pages, and media */
32
+ delete?: boolean;
33
+ }
34
+ /**
35
+ * Member access capabilities.
36
+ *
37
+ * `read` — read subscriber list (email redacted by default unless `read_pii` is true).
38
+ * `write` — create and update member records.
39
+ * `read_pii` — access raw member email addresses. Requires manual review justification.
40
+ */
41
+ interface MemberCapabilities {
42
+ /** Read subscriber list (email redacted unless read_pii = true) */
43
+ read?: boolean;
44
+ /** Create and update member records */
45
+ write?: boolean;
46
+ /** Access raw member email addresses — requires review justification */
47
+ read_pii?: boolean;
48
+ }
49
+ /**
50
+ * Commerce capabilities.
51
+ *
52
+ * Requires the tenant to have commerce enabled.
53
+ */
54
+ interface CommerceCapabilities {
55
+ /** Read products and orders */
56
+ read?: boolean;
57
+ /** Create and update products, process orders */
58
+ write?: boolean;
59
+ }
60
+ /**
61
+ * Database schema capabilities.
62
+ *
63
+ * `read` — introspect collection schemas.
64
+ * `modify` — add custom fields or collections. Requires architect review.
65
+ */
66
+ interface SchemaCapabilities {
67
+ /** Read collection schemas */
68
+ read?: boolean;
69
+ /** Modify schemas — add fields or collections. HIGH RISK. Requires review. */
70
+ modify?: boolean;
71
+ }
72
+ /**
73
+ * Full capabilities declaration.
74
+ *
75
+ * All fields are optional — omit capabilities your plugin does not use.
76
+ */
77
+ interface PluginCapabilities {
78
+ /** Content access */
79
+ content?: ContentCapabilities;
80
+ /** Member access */
81
+ members?: MemberCapabilities;
82
+ /** Commerce access */
83
+ commerce?: CommerceCapabilities;
84
+ /** Schema introspection/modification */
85
+ schema?: SchemaCapabilities;
86
+ /**
87
+ * External HTTP requests.
88
+ * If true, plugin can call any URL in `network_allowlist`.
89
+ * Network calls outside the allowlist are blocked at runtime.
90
+ */
91
+ network?: boolean;
92
+ /**
93
+ * Allowlisted domains for network access.
94
+ * Format: "hostname.tld" (no protocol, no path, no wildcards).
95
+ * Example: ["api.sendgrid.com", "hooks.slack.com"]
96
+ */
97
+ network_allowlist?: string[];
98
+ /** Send emails via the tenant's configured email provider */
99
+ email?: boolean;
100
+ /** UI integration points */
101
+ ui?: {
102
+ /** Inject a persistent sidebar widget */
103
+ sidebar?: boolean;
104
+ /** Inject toolbar items or panel tabs in the post editor */
105
+ post_editor?: boolean;
106
+ /** Add stat cards to the admin dashboard */
107
+ dashboard?: boolean;
108
+ /** Add a section to the admin settings page */
109
+ settings?: boolean;
110
+ };
111
+ /**
112
+ * Event bus subscription capability. (Phase 2.A)
113
+ *
114
+ * Declare which system events your plugin subscribes to and whether it
115
+ * emits custom events. The VeloCMS runtime will only inject ctx.events
116
+ * when this field is present.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * capabilities: {
121
+ * events: {
122
+ * subscribe: ["post.published", "member.subscribed"],
123
+ * emit_custom: true,
124
+ * }
125
+ * }
126
+ * ```
127
+ */
128
+ events?: {
129
+ /**
130
+ * List of system event names the plugin subscribes to.
131
+ * Import `SystemEventName` from `@velocms/plugin-sdk` for the full catalog.
132
+ */
133
+ subscribe?: string[];
134
+ /**
135
+ * If true, the plugin may call `ctx.events.emit()` to broadcast custom events.
136
+ * Defaults to false. Requires `name` to follow "@org/slug" format for namespace enforcement.
137
+ */
138
+ emit_custom?: boolean;
139
+ };
140
+ }
141
+
142
+ /**
143
+ * Plugin Manifest
144
+ *
145
+ * Every plugin must export a `manifest` object conforming to this interface.
146
+ * The manifest is validated by the VeloCMS review pipeline before a plugin
147
+ * is accepted into the marketplace.
148
+ *
149
+ * @see https://velocms.org/developers/sdk#manifest
150
+ */
151
+
152
+ /**
153
+ * Plugin type classification.
154
+ *
155
+ * - `block` — a content block renderable in the page builder and post editor.
156
+ * - `integration` — connects VeloCMS to an external service via hooks.
157
+ * - `widget` — a UI widget injected into the admin dashboard or sidebar.
158
+ */
159
+ type PluginType = "block" | "integration" | "widget";
160
+ /**
161
+ * Pricing model for the plugin.
162
+ *
163
+ * - `free` — no charge to install.
164
+ * - `paid` — one-time purchase via Stripe on the developer's connected account.
165
+ * - `subscription` — recurring subscription billed monthly.
166
+ */
167
+ type PricingModel = "free" | "paid" | "subscription";
168
+ /**
169
+ * Plugin pricing declaration.
170
+ *
171
+ * For paid and subscription plugins, the `price_usd` is the amount charged to
172
+ * the tenant. VeloCMS retains 20% platform fee; developers receive 80%.
173
+ */
174
+ interface PluginPricing {
175
+ /** Pricing model */
176
+ model: PricingModel;
177
+ /**
178
+ * Price in USD cents (e.g. 999 = $9.99).
179
+ * Required when model is "paid" or "subscription".
180
+ */
181
+ price_usd?: number;
182
+ /**
183
+ * Stripe Price ID on the developer's connected account.
184
+ * Required when model is "paid" or "subscription".
185
+ */
186
+ stripe_price_id?: string;
187
+ }
188
+ /**
189
+ * Entry points for the plugin bundle.
190
+ *
191
+ * All paths are relative to the plugin root (e.g. `./dist/runtime.js`).
192
+ */
193
+ interface PluginEntry {
194
+ /** Server-side runtime — executed in the V8 isolate sandbox on hook invocations. Required. */
195
+ runtime: string;
196
+ /** Admin UI component — loaded only in the admin dashboard. Optional. */
197
+ admin?: string;
198
+ /** Named block exports — required when plugin type is "block". */
199
+ blocks?: Record<string, {
200
+ /** Path to the React component file */
201
+ component: string;
202
+ /** Path to the JSON schema for block props */
203
+ schema: string;
204
+ }>;
205
+ }
206
+ /**
207
+ * Author information.
208
+ */
209
+ interface PluginAuthor {
210
+ /** Author or organization name */
211
+ name: string;
212
+ /** Contact email for security disclosures */
213
+ email: string;
214
+ /** Author website or profile URL */
215
+ url?: string;
216
+ }
217
+ /**
218
+ * Repository information.
219
+ */
220
+ interface PluginRepository {
221
+ type: "git";
222
+ url: string;
223
+ }
224
+ /**
225
+ * Engine compatibility requirements.
226
+ *
227
+ * The `velocms` field is a semver range string. The review pipeline checks
228
+ * compatibility against the current VeloCMS version.
229
+ *
230
+ * @example
231
+ * ```typescript
232
+ * engines: { velocms: ">=1.0.0" }
233
+ * // or range:
234
+ * engines: { velocms: ">=1.0.0 <2.0.0" }
235
+ * // or caret:
236
+ * engines: { velocms: "^1.0.0" }
237
+ * ```
238
+ */
239
+ interface PluginEngines {
240
+ /** Supported VeloCMS semver range */
241
+ velocms: string;
242
+ }
243
+ /**
244
+ * VeloCMS Plugin Manifest v2
245
+ *
246
+ * This is the canonical shape of a plugin manifest. Export this as
247
+ * a named `manifest` const from your plugin's entry file.
248
+ *
249
+ * @example
250
+ * ```typescript
251
+ * import type { PluginManifest } from "@velocms/plugin-sdk";
252
+ *
253
+ * export const manifest: PluginManifest = {
254
+ * $schema: "https://velocms.org/schemas/plugin-v2.json",
255
+ * name: "@myorg/word-counter-pro",
256
+ * displayName: "Word Counter Pro",
257
+ * version: "1.0.0",
258
+ * description: "Counts words and sets reading time estimates on every post.",
259
+ * author: { name: "My Org", email: "plugins@myorg.com" },
260
+ * type: "integration",
261
+ * category: "writing",
262
+ * icon: "./icon.png",
263
+ * engines: { velocms: ">=1.0.0" },
264
+ * capabilities: { content: { read: true } },
265
+ * pricing: { model: "free" },
266
+ * entry: { runtime: "./dist/runtime.js" },
267
+ * permissions_displayed_to_user: ["Read your posts and pages"],
268
+ * };
269
+ * ```
270
+ */
271
+ interface PluginManifest {
272
+ /** Schema identifier — must be "https://velocms.org/schemas/plugin-v2.json" */
273
+ $schema: "https://velocms.org/schemas/plugin-v2.json";
274
+ /**
275
+ * Scoped package name in "@author/plugin-slug" format.
276
+ * Must be unique across the VeloCMS marketplace.
277
+ */
278
+ name: string;
279
+ /** Human-readable plugin name shown in the marketplace */
280
+ displayName: string;
281
+ /** Semantic version string (e.g. "1.0.0", "2.1.3-beta.1") */
282
+ version: string;
283
+ /** Short description of what the plugin does (max 300 characters) */
284
+ description: string;
285
+ /** Author information */
286
+ author: PluginAuthor;
287
+ /** Plugin homepage URL */
288
+ homepage?: string;
289
+ /** Source code repository */
290
+ repository?: PluginRepository;
291
+ /** Plugin type classification */
292
+ type: PluginType;
293
+ /**
294
+ * Category for marketplace browsing.
295
+ * Examples: "analytics", "seo", "writing", "commerce", "social"
296
+ */
297
+ category: string;
298
+ /** Relative path to a 128x128 PNG icon file */
299
+ icon: string;
300
+ /** Supported VeloCMS versions */
301
+ engines: PluginEngines;
302
+ /** Capabilities the plugin requires (declare only what you use) */
303
+ capabilities: PluginCapabilities;
304
+ /** Pricing model */
305
+ pricing: PluginPricing;
306
+ /** Entry point file paths */
307
+ entry: PluginEntry;
308
+ /**
309
+ * Human-readable permission descriptions shown in the install modal.
310
+ * One sentence per item, written for a non-technical audience.
311
+ * Example: ["Read your posts and pages", "Make HTTP requests to Slack"]
312
+ */
313
+ permissions_displayed_to_user: string[];
314
+ /** SPDX license identifier (e.g. "MIT", "Apache-2.0"). Defaults to "proprietary". */
315
+ license?: string;
316
+ }
317
+
318
+ export type { CommerceCapabilities, ContentCapabilities, MemberCapabilities, PluginAuthor, PluginCapabilities, PluginEngines, PluginEntry, PluginManifest, PluginPricing, PluginRepository, PluginType, PricingModel, SchemaCapabilities };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}