@wordrhyme/plugin 0.1.0-alpha.5 → 0.1.0-alpha.6
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/dist/artifact.d.ts +1 -1
- package/dist/artifact.js +1 -1
- package/dist/{chunk-ZUBFLOKU.js → chunk-O4AYK3YP.js} +5 -2
- package/dist/chunk-O4AYK3YP.js.map +1 -0
- package/dist/{chunk-QNCOGISF.js → chunk-T7PQB64I.js} +46 -1
- package/dist/chunk-T7PQB64I.js.map +1 -0
- package/dist/{client-WXWbuuvd.d.ts → client-BJju2aT7.d.ts} +1 -1
- package/dist/client.d.ts +2 -2
- package/dist/client.js +1 -1
- package/dist/{entity-extensions-B5BbZH-m.d.ts → entity-extensions-D09rvNgi.d.ts} +2 -2
- package/dist/index.d.ts +346 -7
- package/dist/index.js +370 -1
- package/dist/index.js.map +1 -1
- package/dist/{manifest-CPSCN_Ft.d.ts → manifest-zSGjFCcJ.d.ts} +17 -0
- package/dist/react.d.ts +1 -1
- package/dist/server.d.ts +4 -4
- package/dist/server.js +1 -1
- package/dist/trpc.d.ts +1 -1
- package/dist/trpc.js +1 -1
- package/dist/{types-8P7XyoyQ.d.ts → types-oPAs313y.d.ts} +221 -1
- package/package.json +1 -1
- package/dist/chunk-QNCOGISF.js.map +0 -1
- package/dist/chunk-ZUBFLOKU.js.map +0 -1
package/dist/artifact.d.ts
CHANGED
package/dist/artifact.js
CHANGED
|
@@ -84,6 +84,7 @@ var defaultPermissions = {
|
|
|
84
84
|
};
|
|
85
85
|
var defaultSettings = {
|
|
86
86
|
get: async () => null,
|
|
87
|
+
has: async () => false,
|
|
87
88
|
set: async () => {
|
|
88
89
|
throw new Error("Settings capability not available");
|
|
89
90
|
},
|
|
@@ -141,7 +142,9 @@ function createPluginContext(partial) {
|
|
|
141
142
|
queue: partial.queue,
|
|
142
143
|
usage: partial.usage,
|
|
143
144
|
entityExtensions: partial.entityExtensions,
|
|
144
|
-
crudExtensions: partial.crudExtensions
|
|
145
|
+
crudExtensions: partial.crudExtensions,
|
|
146
|
+
ai: partial.ai,
|
|
147
|
+
aiRuntime: partial.aiRuntime
|
|
145
148
|
};
|
|
146
149
|
}
|
|
147
150
|
|
|
@@ -150,4 +153,4 @@ export {
|
|
|
150
153
|
pluginProcedure,
|
|
151
154
|
createPluginContext
|
|
152
155
|
};
|
|
153
|
-
//# sourceMappingURL=chunk-
|
|
156
|
+
//# sourceMappingURL=chunk-O4AYK3YP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/trpc.ts"],"sourcesContent":["import { initTRPC, TRPCError } from \"@trpc/server\";\nimport type { PluginContext, PluginPermissionCapability, PluginScopedDb, PluginSettingsCapability } from \"./types\";\n\n/**\n * tRPC builders for plugins\n *\n * Plugins use these to define their API routes, just like a normal tRPC project.\n */\nconst t = initTRPC.context<PluginContext>().meta<Record<string, unknown>>().create();\n\nconst ANONYMOUS_ROLE = \"anonymous\";\n\nfunction allowsAnonymousAccess(meta: unknown): boolean {\n if (!meta || typeof meta !== \"object\") return false;\n\n const metaRecord = meta as Record<string, unknown>;\n const permission = metaRecord[\"permission\"];\n if (permission && typeof permission === \"object\") {\n const permissionRecord = permission as Record<string, unknown>;\n if (permissionRecord[\"anonymous\"] === true) return true;\n }\n\n if (metaRecord[\"anonymous\"] === true) return true;\n\n const access = metaRecord[\"access\"];\n if (access === \"anonymous\") return true;\n\n if (access && typeof access === \"object\") {\n const accessRecord = access as Record<string, unknown>;\n return (\n accessRecord[\"anonymous\"] === true ||\n accessRecord[\"allowAnonymous\"] === true ||\n accessRecord[\"mode\"] === \"anonymous\"\n );\n }\n\n return false;\n}\n\nfunction injectAnonymousRole(target: Record<string, unknown>) {\n const roles = Array.isArray(target[\"userRoles\"]) ? [...(target[\"userRoles\"] as string[])] : [];\n if (!roles.includes(ANONYMOUS_ROLE)) {\n roles.push(ANONYMOUS_ROLE);\n }\n target[\"userRoles\"] = roles;\n if (!target[\"userRole\"]) {\n target[\"userRole\"] = ANONYMOUS_ROLE;\n }\n}\n\nfunction isTrustedSystemContext(ctxRecord: Record<string, unknown>): boolean {\n if (ctxRecord[\"isSystemContext\"] === true || ctxRecord[\"actorType\"] === \"system\") {\n return true;\n }\n\n if (ctxRecord[\"invoker\"] === \"scheduler\") {\n return true;\n }\n\n const principal = ctxRecord[\"principal\"];\n return (\n principal !== null &&\n typeof principal === \"object\" &&\n (principal as Record<string, unknown>)[\"kind\"] === \"system\"\n );\n}\n\ntype PluginProcedureMiddleware = (opts: any) => Promise<any>;\n\nconst pluginProcedureBase = t.procedure.use(async (opts) => {\n const ctxRecord = (opts.ctx as Record<string, unknown> | undefined) ?? {};\n const shouldEnforcePluginAccess = ctxRecord[\"__enforcePluginAccess\"] === true;\n const isAnonymousRequest = !ctxRecord[\"userId\"];\n\n if (shouldEnforcePluginAccess && isAnonymousRequest && !isTrustedSystemContext(ctxRecord)) {\n if (!allowsAnonymousAccess(opts.meta)) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"Authentication required\",\n });\n }\n\n injectAnonymousRole(ctxRecord);\n\n const requestContextRef = ctxRecord[\"__requestContextRef\"];\n if (requestContextRef && typeof requestContextRef === \"object\") {\n injectAnonymousRole(requestContextRef as Record<string, unknown>);\n }\n }\n\n const pluginProcedureMiddlewares = ((opts.ctx as Record<string, unknown> | undefined)?.[\n \"__pluginProcedureMiddlewares\"\n ] ?? []) as PluginProcedureMiddleware[];\n\n const run = (index: number, accumulatedOverrides: Record<string, unknown>) => {\n if (index >= pluginProcedureMiddlewares.length) {\n return opts.next(accumulatedOverrides as any);\n }\n\n const middleware = pluginProcedureMiddlewares[index]!;\n return middleware({\n ...opts,\n ...accumulatedOverrides,\n next: (nextOverrides?: Record<string, unknown>) =>\n run(index + 1, {\n ...accumulatedOverrides,\n ...(nextOverrides ?? {}),\n }),\n });\n };\n\n return run(0, {});\n});\n\n/**\n * Plugin router builder\n *\n * @example\n * ```ts\n * import { pluginRouter, pluginProcedure } from '@wordrhyme/plugin';\n *\n * export const router = pluginRouter({\n * hello: pluginProcedure.query(() => 'Hello from plugin!'),\n * });\n * ```\n */\nexport const pluginRouter = t.router;\n\n/**\n * Plugin procedure builder (with context)\n *\n * Use this to define procedures that have access to PluginContext.\n */\nexport const pluginProcedure = pluginProcedureBase;\n\n/**\n * Default no-op permission capability (for standalone plugin development)\n */\nconst defaultPermissions: PluginPermissionCapability = {\n can: async () => false,\n require: async () => {\n throw new Error(\"Permission capability not available\");\n },\n hasDeclared: () => false,\n};\n\n/**\n * Default no-op settings capability (for standalone plugin development)\n */\nconst defaultSettings: PluginSettingsCapability = {\n get: async () => null,\n has: async () => false,\n set: async () => {\n throw new Error(\"Settings capability not available\");\n },\n delete: async () => {\n throw new Error(\"Settings capability not available\");\n },\n list: async () => [],\n isFeatureEnabled: async () => false,\n};\n\nconst defaultDb = new Proxy({} as PluginScopedDb, {\n get() {\n throw new Error(\"Database capability not available in this standalone plugin context\");\n },\n});\n\n/**\n * Create plugin context (used by Core to inject context)\n *\n * This is called by PluginManager when invoking plugin handlers.\n */\nexport function createPluginContext(partial: Partial<PluginContext> & { pluginId: string }): PluginContext {\n return {\n pluginId: partial.pluginId,\n organizationId: partial.organizationId,\n originalOrganizationId: partial.originalOrganizationId,\n userId: partial.userId,\n user: partial.user,\n requestId: partial.requestId,\n userRole: partial.userRole,\n userRoles: partial.userRoles,\n currentTeamId: partial.currentTeamId,\n locale: partial.locale,\n timezone: partial.timezone,\n clientTimeZone: partial.clientTimeZone,\n resolveDateRange: partial.resolveDateRange,\n actorType: partial.actorType,\n apiTokenId: partial.apiTokenId,\n apiTokenScopes: partial.apiTokenScopes,\n isSystemContext: partial.isSystemContext,\n principal: partial.principal,\n invoker: partial.invoker,\n logger: partial.logger ?? {\n info: (msg, meta) => console.log(`[${partial.pluginId}]`, msg, meta),\n warn: (msg, meta) => console.warn(`[${partial.pluginId}]`, msg, meta),\n error: (msg, meta) => console.error(`[${partial.pluginId}]`, msg, meta),\n debug: (msg, meta) => console.debug(`[${partial.pluginId}]`, msg, meta),\n },\n permissions: partial.permissions ?? defaultPermissions,\n plugins: partial.plugins,\n db: partial.db ?? defaultDb,\n organizationProvisioning: partial.organizationProvisioning,\n tx: partial.tx,\n settings: partial.settings ?? defaultSettings,\n currency: partial.currency,\n hooks: partial.hooks,\n metrics: partial.metrics,\n trace: partial.trace,\n media: partial.media,\n storage: partial.storage,\n notifications: partial.notifications,\n queue: partial.queue,\n usage: partial.usage,\n entityExtensions: partial.entityExtensions,\n crudExtensions: partial.crudExtensions,\n ai: partial.ai,\n aiRuntime: partial.aiRuntime,\n };\n}\n\n// Re-export tRPC types for convenience\nexport type { inferRouterInputs, inferRouterOutputs } from \"@trpc/server\";\n"],"mappings":"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","names":[]}
|
|
@@ -521,6 +521,51 @@ var pluginManifestSchema = z.object({
|
|
|
521
521
|
artifacts: z.object({
|
|
522
522
|
write: z.boolean().optional()
|
|
523
523
|
}).optional(),
|
|
524
|
+
/**
|
|
525
|
+
* Agent capability (AI Action Gateway, Phase 0 spike).
|
|
526
|
+
* Static whitelist declarations reconciled by the Host at load time:
|
|
527
|
+
* - `runtime: true` — this plugin hosts the agent runtime and may read
|
|
528
|
+
* the Core agent tool registry (gated capability injection).
|
|
529
|
+
* - `tools` — tools this plugin contributes to the AI Tool Catalog.
|
|
530
|
+
* Declaration only; undeclared tools never become visible.
|
|
531
|
+
*/
|
|
532
|
+
agent: z.object({
|
|
533
|
+
runtime: z.boolean().optional(),
|
|
534
|
+
/** Governed action invoker access (ActionInvokerCapability, ctx.actions). */
|
|
535
|
+
invoker: z.boolean().optional(),
|
|
536
|
+
tools: z.array(z.object({
|
|
537
|
+
id: z.string().min(1).regex(
|
|
538
|
+
/^[a-z0-9-]+(\.[a-z0-9-]+)*$/,
|
|
539
|
+
'tool id must be lowercase dot-separated (e.g., "canvas.add-node")'
|
|
540
|
+
),
|
|
541
|
+
title: z.string().min(1),
|
|
542
|
+
summary: z.string().optional()
|
|
543
|
+
})).optional()
|
|
544
|
+
}).optional(),
|
|
545
|
+
/** Governed AI generation metadata and the reserved official Runtime boundary. */
|
|
546
|
+
ai: z.object({
|
|
547
|
+
aliases: z.array(z.object({
|
|
548
|
+
id: z.string().min(1).max(80).regex(
|
|
549
|
+
/^[a-z0-9][a-z0-9._-]{0,79}$/,
|
|
550
|
+
"AI alias must be lowercase and may contain dots, underscores, or hyphens"
|
|
551
|
+
),
|
|
552
|
+
name: z.string().min(1).max(80),
|
|
553
|
+
description: z.string().max(240).optional()
|
|
554
|
+
})).superRefine((aliases, ctx) => {
|
|
555
|
+
const seen = /* @__PURE__ */ new Set();
|
|
556
|
+
for (const [index, alias] of aliases.entries()) {
|
|
557
|
+
if (seen.has(alias.id)) {
|
|
558
|
+
ctx.addIssue({
|
|
559
|
+
code: "custom",
|
|
560
|
+
message: `duplicate AI alias: ${alias.id}`,
|
|
561
|
+
path: [index, "id"]
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
seen.add(alias.id);
|
|
565
|
+
}
|
|
566
|
+
}).optional(),
|
|
567
|
+
provider: z.boolean().optional()
|
|
568
|
+
}).optional(),
|
|
524
569
|
provides: z.array(z.string()).optional(),
|
|
525
570
|
// e.g., ["logger-adapter", "cache-adapter"]
|
|
526
571
|
billing: z.object({
|
|
@@ -691,4 +736,4 @@ export {
|
|
|
691
736
|
webSurfaceSchema,
|
|
692
737
|
pluginManifestSchema
|
|
693
738
|
};
|
|
694
|
-
//# sourceMappingURL=chunk-
|
|
739
|
+
//# sourceMappingURL=chunk-T7PQB64I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/manifest.ts"],"sourcesContent":["import { z } from 'zod';\n\n// ========== Notification Schema Components ==========\n\n/**\n * Aggregation Strategy - how to group notifications from plugins\n */\nexport const aggregationStrategySchema = z.enum(['none', 'by_target', 'by_actor', 'by_type']);\nexport type AggregationStrategy = z.infer<typeof aggregationStrategySchema>;\n\n/**\n * Notification Category - determines retention policy and view strategy\n */\nexport const notificationCategorySchema = z.enum(['system', 'collaboration', 'social']);\nexport type NotificationCategory = z.infer<typeof notificationCategorySchema>;\n\n/**\n * Plugin Notification Type - declares a type of notification the plugin can send\n */\nexport const notificationTypeSchema = z.object({\n id: z.string().min(1).regex(/^[a-z0-9_]+$/, 'type id must be lowercase alphanumeric with underscores'),\n category: notificationCategorySchema,\n aggregation: aggregationStrategySchema.default('none'),\n i18n: z.record(\n z.string(), // locale key (e.g., 'en-US', 'zh-CN')\n z.object({\n title: z.string().min(1),\n description: z.string().optional(),\n })\n ),\n});\nexport type PluginNotificationType = z.infer<typeof notificationTypeSchema>;\n\n/**\n * Notification Webhooks - async callbacks for notification events\n */\nexport const notificationWebhooksSchema = z.object({\n onClicked: z.string().url().optional(),\n onArchived: z.string().url().optional(),\n}).optional();\n\n/**\n * Notification Rate Limit - plugin-declared limits (platform may enforce lower)\n */\nexport const notificationRateLimitSchema = z.object({\n maxPerMinute: z.number().int().positive().max(10000).default(100),\n maxPerHour: z.number().int().positive().max(20000).default(1000),\n maxPerDay: z.number().int().positive().max(100000).default(10000),\n}).partial();\n\n/**\n * Notification Permission Types\n */\nexport const notificationPermissionSchema = z.enum([\n 'notification:send',\n 'notification:send:batch',\n 'notification:read:own',\n]);\n\n/**\n * Plugin Notifications Configuration\n */\nexport const notificationsConfigSchema = z.object({\n types: z.array(notificationTypeSchema).min(1),\n permissions: z.array(notificationPermissionSchema).optional(),\n rateLimit: notificationRateLimitSchema.optional(),\n webhooks: notificationWebhooksSchema,\n}).optional();\n\n// ========== Admin Extension Schema (Slot & Fill) ==========\n\nexport const permissionDeclarationSchema = z.union([\n z.string().min(1),\n z.object({\n action: z.string().min(1),\n subject: z.string().min(1),\n anonymous: z.boolean().optional(),\n }),\n]);\n\nexport const navTargetSchema = z.object({\n slot: z.literal('nav.sidebar'),\n path: z.string(),\n icon: z.string().optional(),\n order: z.number().optional(),\n permission: permissionDeclarationSchema.optional(),\n /** @deprecated Use permission instead. */\n requiredPermission: z.string().optional(),\n parent: z.string().optional(),\n});\n\nexport const navGroupTargetSchema = z.object({\n slot: z.literal('nav.sidebar.group'),\n path: z.string().optional(),\n icon: z.string().optional(),\n order: z.number().optional(),\n});\n\nexport const routeTargetSchema = z.object({\n slot: z.literal('plugin.route'),\n path: z.string(),\n order: z.number().optional(),\n params: z.record(z.string(), z.string()).optional(),\n});\n\nexport const settingsTargetSchema = z.object({\n slot: z.literal('settings.plugin'),\n category: z.string().optional(),\n order: z.number().optional(),\n visibility: z.enum(['platform', 'all']).optional(),\n});\n\nexport const dashboardTargetSchema = z.object({\n slot: z.enum(['dashboard.widgets', 'dashboard.overview']),\n order: z.number().optional(),\n colSpan: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),\n});\n\nexport const genericTargetSchema = z.object({\n slot: z.string(),\n order: z.number().optional(),\n});\n\nexport const targetSchema = z.union([\n navTargetSchema,\n navGroupTargetSchema,\n routeTargetSchema,\n settingsTargetSchema,\n dashboardTargetSchema,\n genericTargetSchema,\n]);\n\nexport const adminExtensionSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n icon: z.string().optional(),\n targets: z.array(targetSchema).min(1),\n});\n\nexport const adminSlotPropSchema = z.union([\n z.string().min(1),\n z.object({\n name: z.string().min(1),\n type: z.string().optional(),\n required: z.boolean().optional(),\n description: z.string().optional(),\n }).passthrough(),\n]);\n\nexport const adminSlotSchema = z.object({\n slot: z.string().min(1),\n description: z.string().optional(),\n props: z.array(adminSlotPropSchema).optional(),\n}).passthrough();\n\nexport const adminTourPlacementSchema = z.enum([\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'auto',\n 'center',\n]);\nexport type AdminTourPlacement = z.infer<typeof adminTourPlacementSchema>;\n\nexport const adminTourStepSchema = z.object({\n target: z.string().min(1),\n title: z.string().min(1).optional(),\n titleKey: z.string().min(1).optional(),\n content: z.string().min(1).optional(),\n contentKey: z.string().min(1).optional(),\n placement: adminTourPlacementSchema.optional(),\n}).refine((step) => Boolean(step.content || step.contentKey), {\n message: 'admin tour step must define content or contentKey',\n path: ['content'],\n});\nexport type AdminTourStep = z.infer<typeof adminTourStepSchema>;\n\nexport const adminTourSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1).optional(),\n labelKey: z.string().min(1).optional(),\n routePatterns: z.array(z.string().min(1)).optional(),\n order: z.number().optional(),\n steps: z.array(adminTourStepSchema).min(1),\n});\nexport type AdminTour = z.infer<typeof adminTourSchema>;\n\nexport const pluginI18nSchema = z.record(\n z.string().min(1),\n z.record(z.string().min(1), z.string())\n);\n\n// ========== Entity Extension Schema ==========\n\nconst extensionTargetPluginIdSchema = z.string()\n .min(1)\n .max(160)\n .regex(/^[a-z0-9-]+(\\.[a-z0-9-]+)+$/, 'target pluginId must be reverse-domain format');\n\nconst crudIdSchema = z.string()\n .min(1)\n .max(80)\n .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, 'crud id must be an identifier');\n\nconst entityNameSchema = z.string()\n .min(1)\n .max(160)\n .regex(/^[a-z0-9-]+(\\.[a-z0-9-]+)+$/, 'entity must be dot-separated (e.g., \"shop.store\")');\n\nconst extensionFieldNameSchema = z.string()\n .min(1)\n .max(80)\n .regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, 'field must be an identifier');\n\nexport const entityExtensionFieldTypeSchema = z.enum([\n 'text',\n 'number',\n 'boolean',\n 'date',\n 'datetime',\n 'select',\n 'ref',\n 'json',\n]);\n\nexport const entityExtensionRefSchema = z.object({\n entity: entityNameSchema,\n display: z.string().min(1).optional(),\n changed: z.string().min(1).optional(),\n}).passthrough();\n\nexport const autoCrudFieldOptionSchema = z.object({\n label: z.string().min(1),\n value: z.string().min(1),\n searchText: z.union([\n z.string().min(1),\n z.array(z.string().min(1)),\n ]).optional(),\n count: z.number().optional(),\n disabled: z.boolean().optional(),\n}).passthrough();\n\nexport const autoCrudDataSourceSchema = z.string().min(1);\n\nexport const autoCrudFieldConfigSchema = z.object({\n label: z.string().min(1).optional(),\n enum: z.array(autoCrudFieldOptionSchema).optional(),\n dataSource: autoCrudDataSourceSchema.optional(),\n hidden: z.boolean().optional(),\n table: z.union([z.literal(false), z.record(z.string(), z.unknown())]).optional(),\n filter: z.union([z.literal(false), z.record(z.string(), z.unknown())]).optional(),\n form: z.union([z.literal(false), z.record(z.string(), z.unknown())]).optional(),\n search: z.boolean().optional(),\n}).passthrough();\n\nexport const entityExtensionOwnedFieldSchema = autoCrudFieldConfigSchema.extend({\n label: z.string().min(1),\n type: entityExtensionFieldTypeSchema,\n ref: entityExtensionRefSchema.optional(),\n});\n\nexport const entityExtensionFieldSchema = z.union([\n entityExtensionOwnedFieldSchema,\n autoCrudFieldConfigSchema,\n]);\n\nexport const autoCrudActionZoneSchema = z.enum(['toolbar', 'row', 'batch']);\n\nexport const autoCrudActionSchema = z.object({\n type: z.enum([\n 'create',\n 'import',\n 'export',\n 'view',\n 'edit',\n 'copy',\n 'delete',\n 'batchUpdate',\n 'custom',\n ]),\n id: z.string().min(1).optional(),\n label: z.string().min(1).optional(),\n component: z.string().min(1).optional(),\n onClick: z.string().min(1).optional(),\n order: z.number().optional(),\n hidden: z.boolean().optional(),\n position: z.enum(['start', 'end']).optional(),\n variant: z.enum(['default', 'destructive']).optional(),\n}).passthrough();\n\nexport const autoCrudActionsSchema = z.object({\n toolbar: z.array(autoCrudActionSchema).optional(),\n row: z.array(autoCrudActionSchema).optional(),\n batch: z.array(autoCrudActionSchema).optional(),\n}).passthrough();\n\nexport const entityExtensionCrudConfigSchema = z.object({\n fields: z.record(extensionFieldNameSchema, entityExtensionFieldSchema).optional(),\n actions: autoCrudActionsSchema.optional(),\n}).passthrough();\n\nexport const entityExtensionSlotSchema = z.object({\n slot: z.string().min(1),\n component: z.string().min(1),\n order: z.number().optional(),\n label: z.string().optional(),\n}).passthrough();\n\nconst entityExtensionBaseSchema = z.object({\n fields: z.record(\n crudIdSchema,\n z.record(extensionFieldNameSchema, entityExtensionFieldSchema),\n ).optional(),\n slots: z.array(entityExtensionSlotSchema).optional(),\n hide: z.record(crudIdSchema, z.array(extensionFieldNameSchema)).optional(),\n}).passthrough();\n\nexport const entityExtensionSchema = entityExtensionBaseSchema.superRefine((extension, ctx) => {\n const reservedKeys = new Set(['fields', 'slots', 'hide']);\n for (const [key, value] of Object.entries(extension)) {\n if (reservedKeys.has(key)) continue;\n if (typeof value !== 'object' || value === null || Array.isArray(value)) continue;\n\n const record = value as Record<string, unknown>;\n if (!('fields' in record) && !('actions' in record)) continue;\n\n const parsed = entityExtensionCrudConfigSchema.safeParse(value);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n ...issue,\n path: [key, ...issue.path],\n });\n }\n }\n }\n});\n\nexport const entityExtensionUseSchema = z.object({\n pluginId: z.string().regex(/^[a-z0-9-]+(\\.[a-z0-9-]+)+$/, 'pluginId must be reverse-domain format'),\n targetId: z.string().min(1).max(240),\n field: extensionFieldNameSchema,\n required: z.boolean().optional(),\n}).passthrough();\n\nexport const pluginUsesSchema = z.object({\n extensions: z.array(entityExtensionUseSchema).optional(),\n}).passthrough();\n\n// ========== Web Surface Schema ==========\n\nexport const webSsrContractVersionSchema = z.union([z.literal(1), z.literal('1')]);\n\nexport const webPluginRouteSchema = z.object({\n id: z.string().min(1).optional(),\n path: z.string().min(1).regex(/^\\//, 'web route path must start with /'),\n handler: z.string().min(1).optional(),\n component: z.string().min(1),\n permission: permissionDeclarationSchema.optional(),\n order: z.number().optional(),\n}).passthrough();\n\nexport const webExtensionTargetSchema = z.object({\n pluginId: extensionTargetPluginIdSchema,\n slot: z.string().min(1),\n permission: permissionDeclarationSchema.optional(),\n order: z.number().optional(),\n}).passthrough();\n\nexport const webExtensionQuerySchema = z.object({\n id: z.string().min(1),\n procedure: z.string().min(1),\n inputFrom: z.enum(['slotProps', 'static']).optional(),\n staticInput: z.record(z.string(), z.unknown()).optional(),\n}).passthrough();\n\nexport const webExtensionSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1).optional(),\n component: z.string().min(1),\n expose: z.string().min(1).optional(),\n permission: permissionDeclarationSchema.optional(),\n targets: z.array(webExtensionTargetSchema).min(1),\n queries: z.array(webExtensionQuerySchema).optional(),\n}).passthrough();\n\nexport const webDesignBlockSchema = z.object({\n id: z.string().min(1),\n component: z.string().min(1),\n title: z.string().min(1).optional(),\n /** @deprecated Use title instead. */\n label: z.string().min(1).optional(),\n category: z.string().min(1).optional(),\n icon: z.string().min(1).optional(),\n defaultProps: z.record(z.string(), z.unknown()).optional(),\n previewProps: z.record(z.string(), z.unknown()).optional(),\n propsSchema: z.record(z.string(), z.unknown()).optional(),\n settingsSchema: z.record(z.string(), z.unknown()).optional(),\n designable: z.object({\n resource: z.record(z.string(), z.unknown()).optional(),\n behavior: z.record(z.string(), z.unknown()).optional(),\n }).optional(),\n previewImage: z.string().min(1).optional(),\n order: z.number().optional(),\n}).passthrough().superRefine((block, ctx) => {\n if ('schema' in block) {\n ctx.addIssue({\n code: 'custom',\n path: ['schema'],\n message: 'web.design.blocks[] must not declare platform schema; use propsSchema/settingsSchema for configuration metadata',\n });\n }\n\n if (!block.title && !block.label) {\n ctx.addIssue({\n code: 'custom',\n path: ['title'],\n message: 'web.design.blocks[] must define title or label',\n });\n }\n});\n\nexport const webDesignSlotSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1).optional(),\n scope: z.enum(['site', 'route', 'template', 'entity']).optional(),\n routeId: z.string().min(1).optional(),\n templateId: z.string().min(1).optional(),\n acceptedBlocks: z.array(z.string().min(1)).optional(),\n order: z.number().optional(),\n}).passthrough();\n\nexport const webDesignTemplateSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1).optional(),\n routeId: z.string().min(1).optional(),\n entityType: z.string().min(1).optional(),\n component: z.string().min(1),\n slots: z.array(z.string().min(1)).optional(),\n order: z.number().optional(),\n}).passthrough();\n\nexport const webDesignDataSourceSchema = z.object({\n id: z.string().min(1),\n title: z.string().min(1).optional(),\n /** @deprecated Use title instead. */\n label: z.string().min(1).optional(),\n permission: permissionDeclarationSchema.optional(),\n inputSchema: z.record(z.string(), z.unknown()).optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n order: z.number().optional(),\n}).passthrough().superRefine((dataSource, ctx) => {\n if (!dataSource.title && !dataSource.label) {\n ctx.addIssue({\n code: 'custom',\n path: ['title'],\n message: 'web.design.dataSources[] must define title or label',\n });\n }\n});\n\nexport const webDesignActionSchema = z.object({\n id: z.string().min(1),\n title: z.string().min(1).optional(),\n /** @deprecated Use title instead. */\n label: z.string().min(1).optional(),\n permission: permissionDeclarationSchema.optional(),\n inputSchema: z.record(z.string(), z.unknown()).optional(),\n order: z.number().optional(),\n}).passthrough().superRefine((action, ctx) => {\n if (!action.title && !action.label) {\n ctx.addIssue({\n code: 'custom',\n path: ['title'],\n message: 'web.design.actions[] must define title or label',\n });\n }\n});\n\nexport const webDesignSurfaceSchema = z.object({\n editorEntry: z.string().min(1).optional(),\n previewEntry: z.string().min(1).optional(),\n blocks: z.array(webDesignBlockSchema).optional(),\n slots: z.array(webDesignSlotSchema).optional(),\n templates: z.array(webDesignTemplateSchema).optional(),\n dataSources: z.array(webDesignDataSourceSchema).optional(),\n actions: z.array(webDesignActionSchema).optional(),\n}).superRefine((design, ctx) => {\n const hasDesignSurface = Boolean(\n design.blocks?.length\n || design.slots?.length\n || design.templates?.length\n || design.dataSources?.length\n || design.actions?.length\n );\n if (!hasDesignSurface) {\n ctx.addIssue({\n code: 'custom',\n path: [],\n message: 'web.design must declare at least one block, slot, template, dataSource, or action',\n });\n }\n});\n\nexport const webSurfaceSchema = z.object({\n ssrContractVersion: webSsrContractVersionSchema.optional(),\n serverEntry: z.string().min(1).optional(),\n clientEntry: z.string().min(1).optional(),\n remoteEntry: z.string().min(1).optional(),\n devRemoteEntry: z.string().min(1).optional(),\n moduleName: z.string().min(1).optional(),\n exposes: z.record(z.string(), z.string()).optional(),\n routes: z.array(webPluginRouteSchema).optional(),\n fills: z.never().optional(),\n extensions: z.array(webExtensionSchema).optional(),\n design: webDesignSurfaceSchema.optional(),\n /** @deprecated Use serverEntry/clientEntry plus routes[].handler/component. */\n entry: z.string().optional(),\n /** @deprecated Use routes[].component. */\n components: z.array(z.string()).optional(),\n}).superRefine((web, ctx) => {\n const hasRoutes = Boolean(web.routes?.length);\n const hasExtensions = Boolean(web.extensions?.length);\n const usesSsrSurface = Boolean(\n web.ssrContractVersion\n || web.serverEntry\n || web.clientEntry\n || hasRoutes\n );\n const usesRemoteSurface = Boolean(\n web.remoteEntry\n || web.devRemoteEntry\n || web.moduleName\n || web.exposes\n || hasExtensions\n );\n if (!usesSsrSurface && !usesRemoteSurface) return;\n\n if (hasRoutes && !web.ssrContractVersion) {\n ctx.addIssue({\n code: 'custom',\n path: ['ssrContractVersion'],\n message: 'web.ssrContractVersion is required for SSR web surface',\n });\n }\n if (hasRoutes && !web.serverEntry) {\n ctx.addIssue({\n code: 'custom',\n path: ['serverEntry'],\n message: 'web.serverEntry is required for SSR web surface',\n });\n }\n if (hasRoutes && !web.clientEntry) {\n ctx.addIssue({\n code: 'custom',\n path: ['clientEntry'],\n message: 'web.clientEntry is required for SSR web surface',\n });\n }\n if (hasExtensions && !web.remoteEntry) {\n ctx.addIssue({\n code: 'custom',\n path: ['remoteEntry'],\n message: 'web.remoteEntry is required when web.extensions are declared',\n });\n }\n for (const [index, route] of (web.routes ?? []).entries()) {\n if (!route.id) {\n ctx.addIssue({\n code: 'custom',\n path: ['routes', index, 'id'],\n message: 'web.routes[].id is required for SSR web surface',\n });\n }\n if (!route.handler) {\n ctx.addIssue({\n code: 'custom',\n path: ['routes', index, 'handler'],\n message: 'web.routes[].handler is required for SSR web surface',\n });\n }\n if (!route.permission) {\n ctx.addIssue({\n code: 'custom',\n path: ['routes', index, 'permission'],\n message: 'web.routes[].permission is required for SSR web surface',\n });\n }\n }\n});\n\n// ========== Main Plugin Manifest Schema ==========\n\n/**\n * Plugin Manifest Schema - Validated at plugin load time\n *\n * This is the authoritative schema for manifest.json files.\n */\nexport const pluginManifestSchema = z.object({\n // === Identity ===\n pluginId: z.string().regex(/^[a-z0-9-]+(\\.[a-z0-9-]+)+$/, 'pluginId must be reverse-domain format (e.g., com.vendor.plugin-name)'),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+/, 'version must be semver format'),\n name: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n vendor: z.string().min(1).max(100),\n private: z.boolean().optional(),\n type: z.enum(['backend', 'frontend', 'full', 'extension', 'integration', 'feature']).optional(),\n\n // === UI Translations ===\n // Locale -> { key: translated text }. Stored under namespace `plugin.{pluginId}`.\n i18n: pluginI18nSchema.optional(),\n\n // === Runtime ===\n runtime: z.enum(['node']).default('node'),\n\n // Note: surfaces is auto-generated from server/admin/web presence\n // Used by plugin marketplace for filtering\n\n // === Compatibility ===\n engines: z.object({\n wordrhyme: z.string(), // semver range, e.g., \"^0.1.0\"\n node: z.string().optional(), // e.g., \">=20.0.0\"\n }),\n\n // === Capabilities Declared ===\n capabilities: z.object({\n ui: z.object({\n adminPage: z.boolean().optional(),\n webPage: z.boolean().optional(),\n webTheme: z.boolean().optional(),\n webDesigner: z.boolean().optional(),\n settingsTab: z.boolean().optional(),\n }).optional(),\n storage: z.object({\n provider: z.boolean().optional(),\n }).optional(),\n artifacts: z.object({\n write: z.boolean().optional(),\n }).optional(),\n /**\n * Agent capability (AI Action Gateway, Phase 0 spike).\n * Static whitelist declarations reconciled by the Host at load time:\n * - `runtime: true` — this plugin hosts the agent runtime and may read\n * the Core agent tool registry (gated capability injection).\n * - `tools` — tools this plugin contributes to the AI Tool Catalog.\n * Declaration only; undeclared tools never become visible.\n */\n agent: z.object({\n runtime: z.boolean().optional(),\n /** Governed action invoker access (ActionInvokerCapability, ctx.actions). */\n invoker: z.boolean().optional(),\n tools: z.array(z.object({\n id: z.string().min(1).regex(\n /^[a-z0-9-]+(\\.[a-z0-9-]+)*$/,\n 'tool id must be lowercase dot-separated (e.g., \"canvas.add-node\")'\n ),\n title: z.string().min(1),\n summary: z.string().optional(),\n })).optional(),\n }).optional(),\n /** Governed AI generation metadata and the reserved official Runtime boundary. */\n ai: z.object({\n aliases: z.array(z.object({\n id: z.string().min(1).max(80).regex(\n /^[a-z0-9][a-z0-9._-]{0,79}$/,\n 'AI alias must be lowercase and may contain dots, underscores, or hyphens'\n ),\n name: z.string().min(1).max(80),\n description: z.string().max(240).optional(),\n })).superRefine((aliases, ctx) => {\n const seen = new Set<string>();\n for (const [index, alias] of aliases.entries()) {\n if (seen.has(alias.id)) {\n ctx.addIssue({\n code: 'custom',\n message: `duplicate AI alias: ${alias.id}`,\n path: [index, 'id'],\n });\n }\n seen.add(alias.id);\n }\n }).optional(),\n provider: z.boolean().optional(),\n }).optional(),\n provides: z.array(z.string()).optional(), // e.g., [\"logger-adapter\", \"cache-adapter\"]\n billing: z.object({\n subjects: z.array(z.object({\n subject: z.string().min(1).regex(\n /^[a-z0-9-]+(\\.[a-z0-9-]+)+\\.[a-zA-Z0-9_]+$/,\n 'subject must be dot-separated (e.g., \"com.vendor.plugin.apiCalls\")'\n ),\n type: z.enum(['boolean', 'metered']),\n unit: z.string().optional(),\n description: z.string().optional(),\n })).optional(),\n procedures: z.record(z.string(), z.string()).optional(),\n }).optional(),\n }).optional(),\n\n // === Exports ===\n exports: z.object({\n loggerAdapter: z.string().optional(), // e.g., \"./dist/logger-adapter.js\"\n cacheAdapter: z.string().optional(),\n }).optional(),\n\n // === Permissions Defined ===\n permissions: z.object({\n definitions: z.array(z.object({\n key: z.string().regex(/^[a-z0-9_.]+$/, 'Permission key must be lowercase with dots/underscores'),\n description: z.string().optional(),\n })).optional(),\n required: z.array(z.string()).optional(),\n /**\n * Quick-select action groups for the permission configuration UI.\n * Keyed by CASL subject name. Each subject can have multiple groups,\n * and groups may overlap (same action in multiple groups).\n *\n * @example\n * ```json\n * {\n * \"Article\": [\n * { \"key\": \"editor\", \"label\": \"Editor\", \"actions\": [\"create\", \"update\"] },\n * { \"key\": \"full\", \"label\": \"Full Access\", \"actions\": [\"create\", \"update\", \"delete\", \"publish\"] }\n * ]\n * }\n * ```\n */\n actionGroups: z.record(\n z.string(), // subject name\n z.array(z.object({\n key: z.string().min(1),\n label: z.string().min(1),\n actions: z.array(z.string().min(1)).min(1),\n })),\n ).optional(),\n }).optional(),\n\n // === Server Entry ===\n server: z.object({\n entry: z.string(), // e.g., \"./dist/server/index.js\"\n router: z.boolean().optional(), // Exports tRPC router\n nestModule: z.string().optional(), // NestJS module for advanced plugins, e.g., \"./dist/server/hello.module.js\"\n fastifyRoutes: z.string().optional(), // Fastify route registrar, e.g., \"./dist/server/http/routes.js\"\n publicServices: z.array(z.object({\n name: z.string().min(1).max(80).regex(/^[a-z0-9-]+$/),\n mountPath: z.string().regex(/^\\/api\\/[a-z0-9/-]+$/),\n methods: z.array(z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])).min(1),\n auth: z.enum(['public', 'bearer', 'session', 'user']).default('public'),\n maxBodyBytes: z.number().int().positive().max(100 * 1024 * 1024).default(1024 * 1024),\n })).optional(),\n trustedApiTokenProxy: z.object({\n invoker: z.string().min(1),\n paths: z.array(z.string().min(1)).min(1),\n }).optional(),\n hooks: z.array(z.enum(['onInstall', 'onEnable', 'onDisable', 'onUninstall'])).optional(),\n }).optional(),\n\n // === Admin UI Entry ===\n admin: z.object({\n remoteEntry: z.string(), // e.g., \"./dist/admin/remoteEntry.js\"\n devRemoteEntry: z.string().optional(), // Dev mode: e.g., \"http://localhost:3010/remoteEntry.js\"\n moduleName: z.string().optional(), // MF2.0 module name\n exposes: z.record(z.string(), z.string()).optional(),\n extensions: z.array(adminExtensionSchema).optional(),\n slots: z.array(adminSlotSchema).optional(),\n tours: z.array(adminTourSchema).optional(),\n /** @deprecated Use slots instead. */\n extensionSlots: z.array(adminSlotSchema).optional(),\n /** @deprecated Use extensions[] instead */\n menus: z.array(z.object({\n label: z.string(),\n icon: z.string().optional(),\n path: z.string(),\n order: z.number().optional(),\n parentId: z.string().optional(),\n permission: permissionDeclarationSchema.optional(),\n /** @deprecated Use permission instead. */\n requiredPermission: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })).optional(),\n }).optional(),\n\n // === Web UI Entry ===\n web: webSurfaceSchema.optional(),\n\n // === Dependencies ===\n dependencies: z.array(z.string()).optional(), // Other plugin IDs\n conflicts: z.array(z.string()).optional(), // Conflicting plugin IDs\n peerDependencies: z.record(z.string(), z.string()).optional(), // e.g., { react: \"^18.0.0\" }\n compatibilityMode: z.enum(['strict', 'lenient', 'fallback']).optional(),\n\n // === Entity Extensions ===\n extends: z.record(extensionTargetPluginIdSchema, entityExtensionSchema).optional(),\n uses: pluginUsesSchema.optional(),\n\n // === Data Retention ===\n dataRetention: z.object({\n onDisable: z.enum(['retain']).optional(),\n onUninstall: z.enum(['delete', 'archive', 'retain']).optional(),\n tables: z.array(z.string()).optional(),\n }).optional(),\n\n // === Infrastructure (Tenant Config Delegation) ===\n infrastructure: z.object({\n tenantOverride: z.boolean(),\n riskLevel: z.enum(['high', 'medium', 'low']),\n sensitiveFields: z.array(z.string()).default([]),\n }).optional(),\n\n // === Notifications ===\n notifications: notificationsConfigSchema,\n});\n\nexport type PluginManifest = z.infer<typeof pluginManifestSchema>;\nexport type AdminSlotProp = z.infer<typeof adminSlotPropSchema>;\nexport type AdminSlot = z.infer<typeof adminSlotSchema>;\nexport type EntityExtensionFieldType = z.infer<typeof entityExtensionFieldTypeSchema>;\nexport type EntityExtensionField = z.infer<typeof entityExtensionFieldSchema>;\nexport type AutoCrudActionZone = z.infer<typeof autoCrudActionZoneSchema>;\nexport type AutoCrudAction = z.infer<typeof autoCrudActionSchema>;\nexport type AutoCrudActions = z.infer<typeof autoCrudActionsSchema>;\nexport type EntityExtensionCrudConfig = z.infer<typeof entityExtensionCrudConfigSchema>;\nexport type EntityExtensionSlot = z.infer<typeof entityExtensionSlotSchema>;\nexport type EntityExtension = z.infer<typeof entityExtensionSchema>;\nexport type EntityExtensionUse = z.infer<typeof entityExtensionUseSchema>;\nexport type WebSsrContractVersion = z.infer<typeof webSsrContractVersionSchema>;\nexport type WebPluginRoute = z.infer<typeof webPluginRouteSchema>;\nexport type WebExtensionTarget = z.infer<typeof webExtensionTargetSchema>;\nexport type WebExtensionQuery = z.infer<typeof webExtensionQuerySchema>;\nexport type WebExtension = z.infer<typeof webExtensionSchema>;\nexport type WebDesignBlock = z.infer<typeof webDesignBlockSchema>;\nexport type WebDesignSlot = z.infer<typeof webDesignSlotSchema>;\nexport type WebDesignTemplate = z.infer<typeof webDesignTemplateSchema>;\nexport type WebDesignDataSource = z.infer<typeof webDesignDataSourceSchema>;\nexport type WebDesignAction = z.infer<typeof webDesignActionSchema>;\nexport type WebDesignSurface = z.infer<typeof webDesignSurfaceSchema>;\nexport type WebSurface = z.infer<typeof webSurfaceSchema>;\n\n/**\n * Plugin Surface Type - Auto-generated from manifest configuration\n *\n * Indicates on which surfaces this plugin runs:\n * - 'server': Has server-side logic (backend API, database, queue jobs, etc.)\n * - 'admin': Has admin UI components (management dashboard)\n * - 'web': Has frontend/customer-facing UI (public website, user portal)\n */\nexport type PluginSurface = 'server' | 'admin' | 'web';\n\n/**\n * Get plugin surfaces from manifest\n *\n * Auto-generates surfaces array based on which sections are present.\n * Used by plugin marketplace for filtering and display.\n *\n * @param manifest - Plugin manifest\n * @returns Array of surfaces, e.g., ['server', 'admin']\n *\n * @example\n * // Full-stack plugin\n * getPluginSurfaces(manifest) // ['server', 'admin', 'web']\n *\n * // Backend-only plugin (e.g., LBAC, payment gateway)\n * getPluginSurfaces(manifest) // ['server']\n *\n * // Frontend-only plugin (e.g., theme, widget)\n * getPluginSurfaces(manifest) // ['admin', 'web']\n */\nexport function getPluginSurfaces(manifest: PluginManifest): PluginSurface[] {\n const surfaces: PluginSurface[] = [];\n\n if (manifest.server) {\n surfaces.push('server');\n }\n\n if (manifest.admin) {\n surfaces.push('admin');\n }\n\n if (manifest.web) {\n surfaces.push('web');\n }\n\n return surfaces;\n}\n\n/**\n * Check if plugin has specific surface\n *\n * @param manifest - Plugin manifest\n * @param surface - Surface to check\n * @returns true if plugin has this surface\n */\nexport function hasSurface(manifest: PluginManifest, surface: PluginSurface): boolean {\n return getPluginSurfaces(manifest).includes(surface);\n}\n\n/**\n * Get plugin type for backwards compatibility\n *\n * @deprecated Use getPluginSurfaces() instead for more granular control\n * @param manifest - Plugin manifest\n * @returns Plugin type classification\n */\nexport function getPluginType(manifest: PluginManifest): 'backend' | 'frontend' | 'full' {\n const surfaces = getPluginSurfaces(manifest);\n const hasServer = surfaces.includes('server');\n const hasUI = surfaces.includes('admin') || surfaces.includes('web');\n\n if (hasServer && hasUI) return 'full';\n if (hasServer) return 'backend';\n return 'frontend';\n}\n\n/**\n * Plugin Status - Runtime state of a plugin\n */\nexport type PluginStatus = 'enabled' | 'disabled' | 'crashed' | 'invalid' | 'archived' | 'uninstalled';\n\n/**\n * Plugin Capabilities - What the plugin declared it needs\n */\nexport interface PluginCapabilities {\n ui?: {\n adminPage?: boolean;\n webPage?: boolean;\n webTheme?: boolean;\n webDesigner?: boolean;\n settingsTab?: boolean;\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { D as DashboardTarget, G as GenericTarget, a as NavTarget, S as SettingsTarget, b as SlotContext, T as Target, U as UIExtensionDef, d as dashboardExtension, e as defineExtension, m as multiSlotExtension, n as navExtension, s as settingsExtension } from './client-
|
|
2
|
-
export { d as AggregationStrategy, l as PluginCapabilities, P as PluginManifest, m as PluginNotificationType, n as PluginStatus, z as adminExtensionSchema, L as dashboardTargetSchema, T as navTargetSchema, V as pluginManifestSchema, Z as settingsTargetSchema, _ as targetSchema } from './manifest-
|
|
1
|
+
export { D as DashboardTarget, G as GenericTarget, a as NavTarget, S as SettingsTarget, b as SlotContext, T as Target, U as UIExtensionDef, d as dashboardExtension, e as defineExtension, m as multiSlotExtension, n as navExtension, s as settingsExtension } from './client-BJju2aT7.js';
|
|
2
|
+
export { d as AggregationStrategy, l as PluginCapabilities, P as PluginManifest, m as PluginNotificationType, n as PluginStatus, z as adminExtensionSchema, L as dashboardTargetSchema, T as navTargetSchema, V as pluginManifestSchema, Z as settingsTargetSchema, _ as targetSchema } from './manifest-zSGjFCcJ.js';
|
|
3
3
|
import 'zod';
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as EntityExtensionFieldType, a as EntityExtensionField } from './manifest-
|
|
2
|
-
import { H as HookContext, a as PluginContext, b as HookHandlerOptions } from './types-
|
|
1
|
+
import { E as EntityExtensionFieldType, a as EntityExtensionField } from './manifest-zSGjFCcJ.js';
|
|
2
|
+
import { H as HookContext, a as PluginContext, b as HookHandlerOptions } from './types-oPAs313y.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Projection customization hook for entity extension values.
|