@kb-labs/marketplace-api 2.110.0 → 2.112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -219,6 +219,7 @@ function registerPackagesRoutes(app) {
219
219
  required: ["path"],
220
220
  properties: {
221
221
  path: { type: "string", description: "Absolute path to local package" },
222
+ manifest: { type: "object", description: "Validated source manifest for packages generated before build" },
222
223
  ...scopeBodySchemaFragment
223
224
  }
224
225
  }
@@ -228,7 +229,7 @@ function registerPackagesRoutes(app) {
228
229
  const ctx = parseMutatingScope(body);
229
230
  const result = await app.observability.observeOperation(
230
231
  "marketplace.link",
231
- () => app.marketplace.link(ctx, body.path)
232
+ () => app.marketplace.link(ctx, body.path, body.manifest)
232
233
  );
233
234
  return reply.send(result);
234
235
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scope-parser.ts","../src/routes/packages.ts","../src/routes/workspace.ts","../src/routes/diagnostics.ts","../src/routes/index.ts","../src/server.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/marketplace-api/scope-parser\n *\n * Parses scope + projectRoot from HTTP request body/query into the\n * typed context shapes the marketplace service expects. Centralising this\n * logic guarantees the same validation rules (allowed values, required\n * fields, absolute paths, no traversal) are applied uniformly across routes.\n */\n\nimport * as path from 'node:path';\nimport type {\n ScopeContext,\n QueryScopeContext,\n MarketplaceScope,\n MarketplaceQueryScope,\n} from '@kb-labs/marketplace-contracts';\n\nconst MUTATING_SCOPES: readonly MarketplaceScope[] = ['platform', 'project'];\nconst QUERY_SCOPES: readonly MarketplaceQueryScope[] = ['platform', 'project', 'all'];\n\nexport class ScopeRequestError extends Error {\n readonly statusCode = 400;\n readonly code: string;\n constructor(code: string, message: string) {\n super(message);\n this.name = 'ScopeRequestError';\n this.code = code;\n }\n}\n\n/**\n * Extract a `ScopeContext` (mutating calls) from an untyped field map.\n * Server-side default is `platform` — glue layer for callers that don't\n * care about scope (e.g. health-check style tools).\n */\nexport function parseMutatingScope(input: Record<string, unknown> | undefined): ScopeContext {\n const rawScope = input?.scope;\n const scope = normalizeScope(rawScope, MUTATING_SCOPES, 'platform') as MarketplaceScope;\n const projectRoot = normalizeProjectRoot(input?.projectRoot, scope);\n return { scope, projectRoot };\n}\n\n/**\n * Extract a `QueryScopeContext` (read calls). Allows `scope: 'all'`.\n */\nexport function parseQueryScope(input: Record<string, unknown> | undefined): QueryScopeContext {\n const rawScope = input?.scope;\n const scope = normalizeScope(rawScope, QUERY_SCOPES, 'platform') as MarketplaceQueryScope;\n const projectRoot = normalizeProjectRoot(input?.projectRoot, scope);\n return { scope, projectRoot };\n}\n\nfunction normalizeScope<T extends string>(\n raw: unknown,\n allowed: readonly T[],\n fallback: T,\n): T {\n if (raw === undefined || raw === null || raw === '') {\n return fallback;\n }\n if (typeof raw !== 'string' || !allowed.includes(raw as T)) {\n throw new ScopeRequestError(\n 'SCOPE_INVALID',\n `scope must be one of: ${allowed.join(', ')} (got ${JSON.stringify(raw)})`,\n );\n }\n return raw as T;\n}\n\nfunction normalizeProjectRoot(\n raw: unknown,\n scope: MarketplaceScope | MarketplaceQueryScope,\n): string | undefined {\n if (raw === undefined || raw === null || raw === '') {\n // Required only for `project`. For `all`, if absent the service silently\n // degrades to platform-only — callers that want strictness should pass it.\n if (scope === 'project') {\n throw new ScopeRequestError(\n 'SCOPE_PROJECT_ROOT_REQUIRED',\n 'projectRoot is required when scope=\"project\"',\n );\n }\n return undefined;\n }\n if (typeof raw !== 'string') {\n throw new ScopeRequestError('SCOPE_PROJECT_ROOT_TYPE', 'projectRoot must be a string');\n }\n if (!path.isAbsolute(raw)) {\n throw new ScopeRequestError(\n 'SCOPE_PROJECT_ROOT_NOT_ABSOLUTE',\n `projectRoot must be absolute, got \"${raw}\"`,\n );\n }\n if (raw.includes('..')) {\n throw new ScopeRequestError(\n 'SCOPE_PROJECT_ROOT_TRAVERSAL',\n 'projectRoot must not contain \"..\" segments',\n );\n }\n return path.resolve(raw);\n}\n\n/** Fragment added to route body schemas so OpenAPI documents the scope fields. */\nexport const scopeBodySchemaFragment = {\n scope: { type: 'string', enum: MUTATING_SCOPES, description: 'Target scope. Default: platform.' },\n projectRoot: { type: 'string', description: 'Absolute project root (required when scope=\"project\").' },\n} as const;\n\nexport const queryScopeBodySchemaFragment = {\n scope: { type: 'string', enum: QUERY_SCOPES, description: 'Query scope. Default: platform.' },\n projectRoot: { type: 'string', description: 'Absolute project root (required when scope=\"project\", recommended for scope=\"all\").' },\n} as const;\n","/**\n * @module @kb-labs/marketplace-api/routes/packages\n * REST routes for marketplace packages (plugins, adapters, etc.).\n *\n * The URL surface is intentionally action-oriented (\"POST /packages/link\")\n * rather than resource-style (\"POST /packages/:id/link\"). Plugin IDs carry\n * `@` and `/` (`@kb-labs/demo-entry`), which round-trip badly through proxies\n * and API gateways as URL-encoded path segments. Every action takes its\n * target id from the request body instead, eliminating an entire class of\n * routing failures.\n *\n * GET /packages — list installed packages (query: scope, projectRoot, kind)\n * POST /packages/install — install package(s)\n * POST /packages/uninstall— uninstall package(s)\n * POST /packages/link — link a local path\n * POST /packages/unlink — unlink a package\n * POST /packages/enable — mark a package enabled\n * POST /packages/disable — mark a package disabled\n * POST /packages/update — update package(s) to latest\n */\n\nimport '../types.js';\nimport type { FastifyInstance } from 'fastify';\nimport type { EntityKind } from '@kb-labs/core-discovery';\nimport {\n parseMutatingScope,\n parseQueryScope,\n queryScopeBodySchemaFragment,\n scopeBodySchemaFragment,\n} from '../scope-parser.js';\n\nexport function registerPackagesRoutes(app: FastifyInstance): void {\n // GET /packages — list installed packages\n app.get('/packages', {\n schema: {\n tags: ['Marketplace'],\n summary: 'List installed packages',\n querystring: {\n type: 'object',\n properties: {\n kind: { type: 'string', description: 'Filter by entity kind (plugin, adapter, …)' },\n ...queryScopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n const ctx = parseQueryScope(query);\n const kind = typeof query.kind === 'string' ? (query.kind as EntityKind) : undefined;\n const entries = await app.observability.observeOperation(\n 'marketplace.list',\n () => app.marketplace.list(ctx, kind ? { kind } : undefined),\n );\n return reply.send({ entries, total: entries.length });\n });\n\n // POST /packages/install — install one or more packages\n app.post('/packages/install', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Install package(s)',\n body: {\n type: 'object',\n required: ['specs'],\n properties: {\n specs: { type: 'array', items: { type: 'string' }, description: 'Package specs (name, name@version, etc.)' },\n dev: { type: 'boolean', description: 'Install as dev dependency' },\n token: { type: 'string', description: 'Share token for private kb: packages (kbrt_...)' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { specs: string[]; dev?: boolean; token?: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n const result = await app.observability.observeOperation(\n 'marketplace.install',\n () => app.marketplace.install(ctx, body.specs, { dev: body.dev, shareToken: body.token }),\n );\n return reply.code(201).send(result);\n });\n\n // POST /packages/uninstall — uninstall one or more packages\n app.post('/packages/uninstall', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Uninstall package(s)',\n body: {\n type: 'object',\n required: ['packageIds'],\n properties: {\n packageIds: { type: 'array', items: { type: 'string' } },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { packageIds: string[] } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n await app.observability.observeOperation(\n 'marketplace.uninstall',\n () => app.marketplace.uninstall(ctx, body.packageIds),\n );\n return reply.code(204).send();\n });\n\n // POST /packages/enable — enable a package\n app.post('/packages/enable', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Enable a package',\n body: {\n type: 'object',\n required: ['packageId'],\n properties: {\n packageId: { type: 'string' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { packageId: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n await app.observability.observeOperation(\n 'marketplace.enable',\n () => app.marketplace.enable(ctx, body.packageId),\n );\n return reply.send({ id: body.packageId, enabled: true, scope: ctx.scope });\n });\n\n // POST /packages/disable — disable a package\n app.post('/packages/disable', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Disable a package',\n body: {\n type: 'object',\n required: ['packageId'],\n properties: {\n packageId: { type: 'string' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { packageId: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n await app.observability.observeOperation(\n 'marketplace.disable',\n () => app.marketplace.disable(ctx, body.packageId),\n );\n return reply.send({ id: body.packageId, enabled: false, scope: ctx.scope });\n });\n\n // POST /packages/update — update package(s) to latest version\n app.post('/packages/update', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Update package(s) to latest version',\n body: {\n type: 'object',\n properties: {\n packageIds: { type: 'array', items: { type: 'string' }, description: 'Specific ids to update; omit for \"all installed\"' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = (request.body ?? {}) as { packageIds?: string[] } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n const result = await app.observability.observeOperation(\n 'marketplace.update',\n () => app.marketplace.update(ctx, body.packageIds),\n );\n return reply.send(result);\n });\n\n // POST /packages/link — link a local path for development\n app.post('/packages/link', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Link a local package path for development',\n body: {\n type: 'object',\n required: ['path'],\n properties: {\n path: { type: 'string', description: 'Absolute path to local package' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { path: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n const result = await app.observability.observeOperation(\n 'marketplace.link',\n () => app.marketplace.link(ctx, body.path),\n );\n return reply.send(result);\n });\n\n // POST /packages/unlink — unlink a local package\n app.post('/packages/unlink', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Unlink a local package',\n body: {\n type: 'object',\n required: ['packageId'],\n properties: {\n packageId: { type: 'string' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { packageId: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n await app.observability.observeOperation(\n 'marketplace.unlink',\n () => app.marketplace.unlink(ctx, body.packageId),\n );\n return reply.code(204).send();\n });\n}\n","/**\n * @module @kb-labs/marketplace-api/routes/workspace\n * Workspace-level operations (not tied to a specific package).\n *\n * POST /workspace/sync — scan workspace and populate lock. Scope-bound:\n * globs resolve against the selected scope root and results land in that\n * scope's lock. Adapter entries are rejected in project scope by the core.\n */\n\nimport '../types.js';\nimport type { FastifyInstance } from 'fastify';\nimport { parseMutatingScope, scopeBodySchemaFragment } from '../scope-parser.js';\n\nexport function registerWorkspaceRoutes(app: FastifyInstance): void {\n // POST /workspace/sync — scan for plugins/adapters and populate lock\n app.post('/workspace/sync', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Sync workspace — scan for plugins/adapters and populate lock',\n body: {\n type: 'object',\n required: ['include'],\n properties: {\n include: {\n type: 'array',\n items: { type: 'string' },\n description: 'Glob patterns to scan (relative to the scope root)',\n },\n exclude: {\n type: 'array',\n items: { type: 'string' },\n description: 'Patterns to skip',\n },\n autoEnable: {\n type: 'boolean',\n description: 'Auto-enable newly discovered entries (default: false)',\n },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as {\n include: string[];\n exclude?: string[];\n autoEnable?: boolean;\n } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n const result = await app.observability.observeOperation(\n 'marketplace.sync',\n () => app.marketplace.sync(ctx, {\n include: body.include,\n exclude: body.exclude,\n autoEnable: body.autoEnable,\n }),\n );\n return reply.send(result);\n });\n}\n","/**\n * @module @kb-labs/marketplace-api/routes/diagnostics\n * Service-level diagnostic endpoints.\n *\n * GET /diagnostics — marketplace health report. Accepts scope + projectRoot\n * in query so callers can probe either scope's lock health.\n */\n\nimport '../types.js';\nimport type { FastifyInstance } from 'fastify';\nimport { parseMutatingScope, scopeBodySchemaFragment } from '../scope-parser.js';\n\nexport function registerDiagnosticsRoutes(app: FastifyInstance): void {\n app.get('/diagnostics', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Marketplace health and diagnostics report',\n querystring: {\n type: 'object',\n properties: scopeBodySchemaFragment,\n },\n },\n }, async (request, reply) => {\n const ctx = parseMutatingScope(request.query as Record<string, unknown>);\n const report = await app.observability.observeOperation(\n 'marketplace.doctor',\n () => app.marketplace.doctor(ctx),\n );\n return reply.send(report);\n });\n}\n","/**\n * @module @kb-labs/marketplace-api/routes\n * Register all marketplace API routes.\n */\n\nimport type { FastifyInstance } from 'fastify';\nimport { registerPackagesRoutes } from './packages.js';\nimport { registerWorkspaceRoutes } from './workspace.js';\nimport { registerDiagnosticsRoutes } from './diagnostics.js';\n\nexport async function registerRoutes(server: FastifyInstance): Promise<void> {\n await server.register(async (app) => {\n registerPackagesRoutes(app);\n registerWorkspaceRoutes(app);\n registerDiagnosticsRoutes(app);\n }, { prefix: '/api/v1/marketplace' });\n}\n","/**\n * @module @kb-labs/marketplace-api/server\n * Fastify server factory for marketplace service.\n */\n\nimport { type FastifyInstance } from 'fastify';\nimport {\n HttpObservabilityCollector,\n createDaemonServer,\n createServiceReadyResponse,\n type ObservabilityCollectorLike,\n} from '@kb-labs/shared-http';\nimport type { ILogger } from '@kb-labs/core-platform';\nimport type { ServiceHealthStatus, ObservabilityCheckStatus } from '@kb-labs/core-contracts';\nimport { registerRoutes } from './routes/index.js';\nimport type { MarketplaceService } from '@kb-labs/marketplace-core';\nimport { ScopeResolutionError, AdapterScopeError, InvalidEntityError } from '@kb-labs/marketplace-core';\nimport { PackageInstallError } from '@kb-labs/marketplace-npm';\nimport { ScopeRequestError } from './scope-parser.js';\n\nexport interface CreateServerOptions {\n service: MarketplaceService;\n logger?: ILogger;\n port?: number;\n host?: string;\n}\n\nfunction createFallbackLogger(): ILogger {\n const child = (_bindings: Record<string, unknown>): ILogger => createFallbackLogger();\n return {\n trace: () => {},\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n fatal: () => {},\n child,\n };\n}\n\n/**\n * Wraps HttpObservabilityCollector to satisfy ObservabilityCollectorLike.\n * The buildHealth() no-arg call from createDaemonServer routes uses a fixed\n * \"service registered\" check — the same information the original routes conveyed.\n */\nfunction wrapObservability(collector: HttpObservabilityCollector): ObservabilityCollectorLike {\n return {\n register: (server: FastifyInstance) => collector.register(server),\n buildDescribe: () => collector.buildDescribe(),\n renderPrometheusMetrics: (status: string, extra?: string[]) => collector.renderPrometheusMetrics(status as ServiceHealthStatus, extra),\n buildHealth: (_params?: Record<string, unknown>) =>\n collector.buildHealth({\n status: 'healthy' as ServiceHealthStatus,\n checks: [{ id: 'marketplace-service', status: 'ok' as ObservabilityCheckStatus, message: 'Marketplace service registered' }],\n meta: { serviceHealthEndpoint: '/health' },\n }),\n };\n}\n\nexport async function createServer(opts: CreateServerOptions): Promise<FastifyInstance> {\n const logger = opts.logger ?? createFallbackLogger();\n\n const collector = new HttpObservabilityCollector({\n serviceId: 'marketplace',\n serviceType: 'http-api',\n version: '0.1.0',\n logsSource: 'marketplace',\n });\n const observability = wrapObservability(collector);\n\n const server = await createDaemonServer({\n serviceId: 'marketplace',\n logger,\n observability,\n // Preserve the legacy /health contract { status:'ok', service, ts } (e2e MH-01/MH-02),\n // not the observability buildHealth() shape.\n healthResponse: () => ({ status: 'ok', service: 'marketplace', ts: Date.now() }),\n // /ready must return { ready, components } (createServiceReadyResponse shape),\n // not the bare buildHealth() payload — e2e MH-03/MH-04 assert body.ready and\n // body.components.marketplaceService.\n readyCheck: () =>\n createServiceReadyResponse({\n ready: true,\n components: { marketplaceService: { ready: true } },\n }),\n openapi: {\n title: 'KB Labs Marketplace',\n description: 'Unified marketplace for plugins, adapters, workflows, and more',\n },\n setErrorHandler: (app) => {\n // Scope-related errors → 400. All three share a `code` property so clients\n // can discriminate (SCOPE_INVALID, SCOPE_PROJECT_ROOT_REQUIRED,\n // SCOPE_PROJECT_EQUALS_PLATFORM, MARKETPLACE_ADAPTER_PROJECT_SCOPE, ...).\n app.setErrorHandler((err, _request, reply) => {\n if (\n err instanceof ScopeRequestError ||\n err instanceof ScopeResolutionError ||\n err instanceof AdapterScopeError\n ) {\n return reply.code(400).send({\n error: err.name,\n code: err.code,\n message: err.message,\n });\n }\n if (err instanceof InvalidEntityError) {\n return reply.code(422).send({\n error: err.name,\n code: err.code,\n message: err.message,\n });\n }\n if (err instanceof PackageInstallError) {\n const status = err.code === 'NOT_FOUND' ? 404 : 422;\n return reply.code(status).send({\n error: err.name,\n code: err.code,\n message: err.message,\n });\n }\n // Fallback to Fastify default behaviour.\n throw err;\n });\n },\n registerRoutes: async (app) => {\n // Decorate with service and observability instances before registering routes.\n app.decorate('marketplace', opts.service);\n app.decorate('observability', collector);\n\n await collector.observeOperation('marketplace.bootstrap', () => registerRoutes(app));\n },\n });\n\n return server;\n}\n"]}
1
+ {"version":3,"sources":["../src/scope-parser.ts","../src/routes/packages.ts","../src/routes/workspace.ts","../src/routes/diagnostics.ts","../src/routes/index.ts","../src/server.ts"],"names":[],"mappings":";;;;;;AAiBA,IAAM,eAAA,GAA+C,CAAC,UAAA,EAAY,SAAS,CAAA;AAC3E,IAAM,YAAA,GAAiD,CAAC,UAAA,EAAY,SAAA,EAAW,KAAK,CAAA;AAE7E,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM;AAAA,EAClC,UAAA,GAAa,GAAA;AAAA,EACb,IAAA;AAAA,EACT,WAAA,CAAY,MAAc,OAAA,EAAiB;AACzC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AACF,CAAA;AAOO,SAAS,mBAAmB,KAAA,EAA0D;AAC3F,EAAA,MAAM,WAAW,KAAA,EAAO,KAAA;AACxB,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,QAAA,EAAU,eAAA,EAAiB,UAAU,CAAA;AAClE,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,KAAK,CAAA;AAClE,EAAA,OAAO,EAAE,OAAO,WAAA,EAAY;AAC9B;AAKO,SAAS,gBAAgB,KAAA,EAA+D;AAC7F,EAAA,MAAM,WAAW,KAAA,EAAO,KAAA;AACxB,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,QAAA,EAAU,YAAA,EAAc,UAAU,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,KAAA,EAAO,WAAA,EAAa,KAAK,CAAA;AAClE,EAAA,OAAO,EAAE,OAAO,WAAA,EAAY;AAC9B;AAEA,SAAS,cAAA,CACP,GAAA,EACA,OAAA,EACA,QAAA,EACG;AACH,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,IAAA,IAAQ,QAAQ,EAAA,EAAI;AACnD,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAQ,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAI,iBAAA;AAAA,MACR,eAAA;AAAA,MACA,CAAA,sBAAA,EAAyB,QAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,MAAA,EAAS,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA;AAAA,KACzE;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,oBAAA,CACP,KACA,KAAA,EACoB;AACpB,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,IAAA,IAAQ,QAAQ,EAAA,EAAI;AAGnD,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,MAAM,IAAI,iBAAA;AAAA,QACR,6BAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,IAAI,iBAAA,CAAkB,yBAAA,EAA2B,8BAA8B,CAAA;AAAA,EACvF;AACA,EAAA,IAAI,CAAM,IAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,iBAAA;AAAA,MACR,iCAAA;AAAA,MACA,sCAAsC,GAAG,CAAA,CAAA;AAAA,KAC3C;AAAA,EACF;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,iBAAA;AAAA,MACR,8BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAY,aAAQ,GAAG,CAAA;AACzB;AAGO,IAAM,uBAAA,GAA0B;AAAA,EACrC,OAAO,EAAE,IAAA,EAAM,UAAU,IAAA,EAAM,eAAA,EAAiB,aAAa,kCAAA,EAAmC;AAAA,EAChG,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,wDAAA;AAC9C,CAAA;AAEO,IAAM,4BAAA,GAA+B;AAAA,EAC1C,OAAO,EAAE,IAAA,EAAM,UAAU,IAAA,EAAM,YAAA,EAAc,aAAa,iCAAA,EAAkC;AAAA,EAC5F,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,qFAAA;AAC9C,CAAA;;;AChFO,SAAS,uBAAuB,GAAA,EAA4B;AAEjE,EAAA,GAAA,CAAI,IAAI,WAAA,EAAa;AAAA,IACnB,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,yBAAA;AAAA,MACT,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,iDAAA,EAA6C;AAAA,UAClF,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,GAAA,GAAM,gBAAgB,KAAK,CAAA;AACjC,IAAA,MAAM,OAAO,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,GAAY,MAAM,IAAA,GAAsB,MAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,aAAA,CAAc,gBAAA;AAAA,MACtC,kBAAA;AAAA,MACA,MAAM,IAAI,WAAA,CAAY,IAAA,CAAK,KAAK,IAAA,GAAO,EAAE,IAAA,EAAK,GAAI,MAAS;AAAA,KAC7D;AACA,IAAA,OAAO,MAAM,IAAA,CAAK,EAAE,SAAS,KAAA,EAAO,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACtD,CAAC,CAAA;AAGD,EAAA,GAAA,CAAI,KAAK,mBAAA,EAAqB;AAAA,IAC5B,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,oBAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,OAAO,CAAA;AAAA,QAClB,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,0CAAA,EAA2C;AAAA,UAC3G,GAAA,EAAK,EAAE,IAAA,EAAM,SAAA,EAAW,aAAa,2BAAA,EAA4B;AAAA,UACjE,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,iDAAA,EAAkD;AAAA,UACxF,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,IAAA,MAAM,GAAA,GAAM,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,aAAA,CAAc,gBAAA;AAAA,MACrC,qBAAA;AAAA,MACA,MAAM,GAAA,CAAI,WAAA,CAAY,OAAA,CAAQ,KAAK,IAAA,CAAK,KAAA,EAAO,EAAE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,UAAA,EAAY,IAAA,CAAK,OAAO;AAAA,KAC1F;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,EACpC,CAAC,CAAA;AAGD,EAAA,GAAA,CAAI,KAAK,qBAAA,EAAuB;AAAA,IAC9B,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,sBAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,YAAY,CAAA;AAAA,QACvB,UAAA,EAAY;AAAA,UACV,UAAA,EAAY,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,UAAS,EAAE;AAAA,UACvD,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,IAAA,MAAM,GAAA,GAAM,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,IAAI,aAAA,CAAc,gBAAA;AAAA,MACtB,uBAAA;AAAA,MACA,MAAM,GAAA,CAAI,WAAA,CAAY,SAAA,CAAU,GAAA,EAAK,KAAK,UAAU;AAAA,KACtD;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,EAC9B,CAAC,CAAA;AAGD,EAAA,GAAA,CAAI,KAAK,kBAAA,EAAoB;AAAA,IAC3B,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,kBAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,WAAW,CAAA;AAAA,QACtB,UAAA,EAAY;AAAA,UACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,UAC5B,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,IAAA,MAAM,GAAA,GAAM,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,IAAI,aAAA,CAAc,gBAAA;AAAA,MACtB,oBAAA;AAAA,MACA,MAAM,GAAA,CAAI,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,KAAK,SAAS;AAAA,KAClD;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,EAAA,EAAI,IAAA,CAAK,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,CAAA;AAAA,EAC3E,CAAC,CAAA;AAGD,EAAA,GAAA,CAAI,KAAK,mBAAA,EAAqB;AAAA,IAC5B,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,mBAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,WAAW,CAAA;AAAA,QACtB,UAAA,EAAY;AAAA,UACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,UAC5B,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,IAAA,MAAM,GAAA,GAAM,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,IAAI,aAAA,CAAc,gBAAA;AAAA,MACtB,qBAAA;AAAA,MACA,MAAM,GAAA,CAAI,WAAA,CAAY,OAAA,CAAQ,GAAA,EAAK,KAAK,SAAS;AAAA,KACnD;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,EAAA,EAAI,IAAA,CAAK,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,CAAA;AAAA,EAC5E,CAAC,CAAA;AAGD,EAAA,GAAA,CAAI,KAAK,kBAAA,EAAoB;AAAA,IAC3B,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,qCAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,UAAA,EAAY,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS,EAAG,WAAA,EAAa,kDAAA,EAAmD;AAAA,UACxH,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,IAAA,GAAQ,OAAA,CAAQ,IAAA,IAAQ,EAAC;AAC/B,IAAA,MAAM,GAAA,GAAM,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,aAAA,CAAc,gBAAA;AAAA,MACrC,oBAAA;AAAA,MACA,MAAM,GAAA,CAAI,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,KAAK,UAAU;AAAA,KACnD;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,EAC1B,CAAC,CAAA;AAGD,EAAA,GAAA,CAAI,KAAK,gBAAA,EAAkB;AAAA,IACzB,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,2CAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,MAAM,CAAA;AAAA,QACjB,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,gCAAA,EAAiC;AAAA,UACtE,QAAA,EAAU,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,+DAAA,EAAgE;AAAA,UACzG,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,IAAA,MAAM,GAAA,GAAM,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,aAAA,CAAc,gBAAA;AAAA,MACrC,kBAAA;AAAA,MACA,MAAM,IAAI,WAAA,CAAY,IAAA,CAAK,KAAK,IAAA,CAAK,IAAA,EAAM,KAAK,QAAQ;AAAA,KAC1D;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,EAC1B,CAAC,CAAA;AAGD,EAAA,GAAA,CAAI,KAAK,kBAAA,EAAoB;AAAA,IAC3B,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,wBAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,WAAW,CAAA;AAAA,QACtB,UAAA,EAAY;AAAA,UACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,UAC5B,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,IAAA,MAAM,GAAA,GAAM,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,IAAI,aAAA,CAAc,gBAAA;AAAA,MACtB,oBAAA;AAAA,MACA,MAAM,GAAA,CAAI,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,KAAK,SAAS;AAAA,KAClD;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,EAC9B,CAAC,CAAA;AACH;;;ACpNO,SAAS,wBAAwB,GAAA,EAA4B;AAElE,EAAA,GAAA,CAAI,KAAK,iBAAA,EAAmB;AAAA,IAC1B,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,mEAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,SAAS,CAAA;AAAA,QACpB,UAAA,EAAY;AAAA,UACV,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,OAAA;AAAA,YACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,YACxB,WAAA,EAAa;AAAA,WACf;AAAA,UACA,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,OAAA;AAAA,YACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,YACxB,WAAA,EAAa;AAAA,WACf;AAAA,UACA,UAAA,EAAY;AAAA,YACV,IAAA,EAAM,SAAA;AAAA,YACN,WAAA,EAAa;AAAA,WACf;AAAA,UACA,GAAG;AAAA;AACL;AACF;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AAKrB,IAAA,MAAM,GAAA,GAAM,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,aAAA,CAAc,gBAAA;AAAA,MACrC,kBAAA;AAAA,MACA,MAAM,GAAA,CAAI,WAAA,CAAY,IAAA,CAAK,GAAA,EAAK;AAAA,QAC9B,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,YAAY,IAAA,CAAK;AAAA,OAClB;AAAA,KACH;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,EAC1B,CAAC,CAAA;AACH;;;AC9CO,SAAS,0BAA0B,GAAA,EAA4B;AACpE,EAAA,GAAA,CAAI,IAAI,cAAA,EAAgB;AAAA,IACtB,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,OAAA,EAAS,2CAAA;AAAA,MACT,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY;AAAA;AACd;AACF,GACF,EAAG,OAAO,OAAA,EAAS,KAAA,KAAU;AAC3B,IAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,OAAA,CAAQ,KAAgC,CAAA;AACvE,IAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,aAAA,CAAc,gBAAA;AAAA,MACrC,oBAAA;AAAA,MACA,MAAM,GAAA,CAAI,WAAA,CAAY,MAAA,CAAO,GAAG;AAAA,KAClC;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,EAC1B,CAAC,CAAA;AACH;;;ACpBA,eAAsB,eAAe,MAAA,EAAwC;AAC3E,EAAA,MAAM,MAAA,CAAO,QAAA,CAAS,OAAO,GAAA,KAAQ;AACnC,IAAA,sBAAA,CAAuB,GAAG,CAAA;AAC1B,IAAA,uBAAA,CAAwB,GAAG,CAAA;AAC3B,IAAA,yBAAA,CAA0B,GAAG,CAAA;AAAA,EAC/B,CAAA,EAAG,EAAE,MAAA,EAAQ,qBAAA,EAAuB,CAAA;AACtC;ACWA,SAAS,oBAAA,GAAgC;AACvC,EAAA,MAAM,KAAA,GAAQ,CAAC,SAAA,KAAgD,oBAAA,EAAqB;AACpF,EAAA,OAAO;AAAA,IACL,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,IACd,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,IACd,MAAM,MAAM;AAAA,IAAC,CAAA;AAAA,IACb,MAAM,MAAM;AAAA,IAAC,CAAA;AAAA,IACb,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,IACd,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,IACd;AAAA,GACF;AACF;AAOA,SAAS,kBAAkB,SAAA,EAAmE;AAC5F,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,CAAC,MAAA,KAA4B,SAAA,CAAU,SAAS,MAAM,CAAA;AAAA,IAChE,aAAA,EAAe,MAAM,SAAA,CAAU,aAAA,EAAc;AAAA,IAC7C,yBAAyB,CAAC,MAAA,EAAgB,UAAqB,SAAA,CAAU,uBAAA,CAAwB,QAA+B,KAAK,CAAA;AAAA,IACrI,WAAA,EAAa,CAAC,OAAA,KACZ,SAAA,CAAU,WAAA,CAAY;AAAA,MACpB,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ,CAAC,EAAE,EAAA,EAAI,uBAAuB,MAAA,EAAQ,IAAA,EAAkC,OAAA,EAAS,gCAAA,EAAkC,CAAA;AAAA,MAC3H,IAAA,EAAM,EAAE,qBAAA,EAAuB,SAAA;AAAU,KAC1C;AAAA,GACL;AACF;AAEA,eAAsB,aAAa,IAAA,EAAqD;AACtF,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,oBAAA,EAAqB;AAEnD,EAAA,MAAM,SAAA,GAAY,IAAI,0BAAA,CAA2B;AAAA,IAC/C,SAAA,EAAW,aAAA;AAAA,IACX,WAAA,EAAa,UAAA;AAAA,IACb,OAAA,EAAS,OAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACb,CAAA;AACD,EAAA,MAAM,aAAA,GAAgB,kBAAkB,SAAS,CAAA;AAEjD,EAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB;AAAA,IACtC,SAAA,EAAW,aAAA;AAAA,IACX,MAAA;AAAA,IACA,aAAA;AAAA;AAAA;AAAA,IAGA,cAAA,EAAgB,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAS,aAAA,EAAe,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA,IAI9E,UAAA,EAAY,MACV,0BAAA,CAA2B;AAAA,MACzB,KAAA,EAAO,IAAA;AAAA,MACP,YAAY,EAAE,kBAAA,EAAoB,EAAE,KAAA,EAAO,MAAK;AAAE,KACnD,CAAA;AAAA,IACH,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,qBAAA;AAAA,MACP,WAAA,EAAa;AAAA,KACf;AAAA,IACA,eAAA,EAAiB,CAAC,GAAA,KAAQ;AAIxB,MAAA,GAAA,CAAI,eAAA,CAAgB,CAAC,GAAA,EAAK,QAAA,EAAU,KAAA,KAAU;AAC5C,QAAA,IACE,GAAA,YAAe,iBAAA,IACf,GAAA,YAAe,oBAAA,IACf,eAAe,iBAAA,EACf;AACA,UAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,CAAK;AAAA,YAC1B,OAAO,GAAA,CAAI,IAAA;AAAA,YACX,MAAM,GAAA,CAAI,IAAA;AAAA,YACV,SAAS,GAAA,CAAI;AAAA,WACd,CAAA;AAAA,QACH;AACA,QAAA,IAAI,eAAe,kBAAA,EAAoB;AACrC,UAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,CAAK;AAAA,YAC1B,OAAO,GAAA,CAAI,IAAA;AAAA,YACX,MAAM,GAAA,CAAI,IAAA;AAAA,YACV,SAAS,GAAA,CAAI;AAAA,WACd,CAAA;AAAA,QACH;AACA,QAAA,IAAI,eAAe,mBAAA,EAAqB;AACtC,UAAA,MAAM,MAAA,GAAS,GAAA,CAAI,IAAA,KAAS,WAAA,GAAc,GAAA,GAAM,GAAA;AAChD,UAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,CAAE,IAAA,CAAK;AAAA,YAC7B,OAAO,GAAA,CAAI,IAAA;AAAA,YACX,MAAM,GAAA,CAAI,IAAA;AAAA,YACV,SAAS,GAAA,CAAI;AAAA,WACd,CAAA;AAAA,QACH;AAEA,QAAA,MAAM,GAAA;AAAA,MACR,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,cAAA,EAAgB,OAAO,GAAA,KAAQ;AAE7B,MAAA,GAAA,CAAI,QAAA,CAAS,aAAA,EAAe,IAAA,CAAK,OAAO,CAAA;AACxC,MAAA,GAAA,CAAI,QAAA,CAAS,iBAAiB,SAAS,CAAA;AAEvC,MAAA,MAAM,UAAU,gBAAA,CAAiB,uBAAA,EAAyB,MAAM,cAAA,CAAe,GAAG,CAAC,CAAA;AAAA,IACrF;AAAA,GACD,CAAA;AAED,EAAA,OAAO,MAAA;AACT","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/marketplace-api/scope-parser\n *\n * Parses scope + projectRoot from HTTP request body/query into the\n * typed context shapes the marketplace service expects. Centralising this\n * logic guarantees the same validation rules (allowed values, required\n * fields, absolute paths, no traversal) are applied uniformly across routes.\n */\n\nimport * as path from 'node:path';\nimport type {\n ScopeContext,\n QueryScopeContext,\n MarketplaceScope,\n MarketplaceQueryScope,\n} from '@kb-labs/marketplace-contracts';\n\nconst MUTATING_SCOPES: readonly MarketplaceScope[] = ['platform', 'project'];\nconst QUERY_SCOPES: readonly MarketplaceQueryScope[] = ['platform', 'project', 'all'];\n\nexport class ScopeRequestError extends Error {\n readonly statusCode = 400;\n readonly code: string;\n constructor(code: string, message: string) {\n super(message);\n this.name = 'ScopeRequestError';\n this.code = code;\n }\n}\n\n/**\n * Extract a `ScopeContext` (mutating calls) from an untyped field map.\n * Server-side default is `platform` — glue layer for callers that don't\n * care about scope (e.g. health-check style tools).\n */\nexport function parseMutatingScope(input: Record<string, unknown> | undefined): ScopeContext {\n const rawScope = input?.scope;\n const scope = normalizeScope(rawScope, MUTATING_SCOPES, 'platform') as MarketplaceScope;\n const projectRoot = normalizeProjectRoot(input?.projectRoot, scope);\n return { scope, projectRoot };\n}\n\n/**\n * Extract a `QueryScopeContext` (read calls). Allows `scope: 'all'`.\n */\nexport function parseQueryScope(input: Record<string, unknown> | undefined): QueryScopeContext {\n const rawScope = input?.scope;\n const scope = normalizeScope(rawScope, QUERY_SCOPES, 'platform') as MarketplaceQueryScope;\n const projectRoot = normalizeProjectRoot(input?.projectRoot, scope);\n return { scope, projectRoot };\n}\n\nfunction normalizeScope<T extends string>(\n raw: unknown,\n allowed: readonly T[],\n fallback: T,\n): T {\n if (raw === undefined || raw === null || raw === '') {\n return fallback;\n }\n if (typeof raw !== 'string' || !allowed.includes(raw as T)) {\n throw new ScopeRequestError(\n 'SCOPE_INVALID',\n `scope must be one of: ${allowed.join(', ')} (got ${JSON.stringify(raw)})`,\n );\n }\n return raw as T;\n}\n\nfunction normalizeProjectRoot(\n raw: unknown,\n scope: MarketplaceScope | MarketplaceQueryScope,\n): string | undefined {\n if (raw === undefined || raw === null || raw === '') {\n // Required only for `project`. For `all`, if absent the service silently\n // degrades to platform-only — callers that want strictness should pass it.\n if (scope === 'project') {\n throw new ScopeRequestError(\n 'SCOPE_PROJECT_ROOT_REQUIRED',\n 'projectRoot is required when scope=\"project\"',\n );\n }\n return undefined;\n }\n if (typeof raw !== 'string') {\n throw new ScopeRequestError('SCOPE_PROJECT_ROOT_TYPE', 'projectRoot must be a string');\n }\n if (!path.isAbsolute(raw)) {\n throw new ScopeRequestError(\n 'SCOPE_PROJECT_ROOT_NOT_ABSOLUTE',\n `projectRoot must be absolute, got \"${raw}\"`,\n );\n }\n if (raw.includes('..')) {\n throw new ScopeRequestError(\n 'SCOPE_PROJECT_ROOT_TRAVERSAL',\n 'projectRoot must not contain \"..\" segments',\n );\n }\n return path.resolve(raw);\n}\n\n/** Fragment added to route body schemas so OpenAPI documents the scope fields. */\nexport const scopeBodySchemaFragment = {\n scope: { type: 'string', enum: MUTATING_SCOPES, description: 'Target scope. Default: platform.' },\n projectRoot: { type: 'string', description: 'Absolute project root (required when scope=\"project\").' },\n} as const;\n\nexport const queryScopeBodySchemaFragment = {\n scope: { type: 'string', enum: QUERY_SCOPES, description: 'Query scope. Default: platform.' },\n projectRoot: { type: 'string', description: 'Absolute project root (required when scope=\"project\", recommended for scope=\"all\").' },\n} as const;\n","/**\n * @module @kb-labs/marketplace-api/routes/packages\n * REST routes for marketplace packages (plugins, adapters, etc.).\n *\n * The URL surface is intentionally action-oriented (\"POST /packages/link\")\n * rather than resource-style (\"POST /packages/:id/link\"). Plugin IDs carry\n * `@` and `/` (`@kb-labs/demo-entry`), which round-trip badly through proxies\n * and API gateways as URL-encoded path segments. Every action takes its\n * target id from the request body instead, eliminating an entire class of\n * routing failures.\n *\n * GET /packages — list installed packages (query: scope, projectRoot, kind)\n * POST /packages/install — install package(s)\n * POST /packages/uninstall— uninstall package(s)\n * POST /packages/link — link a local path\n * POST /packages/unlink — unlink a package\n * POST /packages/enable — mark a package enabled\n * POST /packages/disable — mark a package disabled\n * POST /packages/update — update package(s) to latest\n */\n\nimport '../types.js';\nimport type { FastifyInstance } from 'fastify';\nimport type { EntityKind } from '@kb-labs/core-discovery';\nimport {\n parseMutatingScope,\n parseQueryScope,\n queryScopeBodySchemaFragment,\n scopeBodySchemaFragment,\n} from '../scope-parser.js';\n\nexport function registerPackagesRoutes(app: FastifyInstance): void {\n // GET /packages — list installed packages\n app.get('/packages', {\n schema: {\n tags: ['Marketplace'],\n summary: 'List installed packages',\n querystring: {\n type: 'object',\n properties: {\n kind: { type: 'string', description: 'Filter by entity kind (plugin, adapter, …)' },\n ...queryScopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const query = request.query as Record<string, unknown>;\n const ctx = parseQueryScope(query);\n const kind = typeof query.kind === 'string' ? (query.kind as EntityKind) : undefined;\n const entries = await app.observability.observeOperation(\n 'marketplace.list',\n () => app.marketplace.list(ctx, kind ? { kind } : undefined),\n );\n return reply.send({ entries, total: entries.length });\n });\n\n // POST /packages/install — install one or more packages\n app.post('/packages/install', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Install package(s)',\n body: {\n type: 'object',\n required: ['specs'],\n properties: {\n specs: { type: 'array', items: { type: 'string' }, description: 'Package specs (name, name@version, etc.)' },\n dev: { type: 'boolean', description: 'Install as dev dependency' },\n token: { type: 'string', description: 'Share token for private kb: packages (kbrt_...)' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { specs: string[]; dev?: boolean; token?: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n const result = await app.observability.observeOperation(\n 'marketplace.install',\n () => app.marketplace.install(ctx, body.specs, { dev: body.dev, shareToken: body.token }),\n );\n return reply.code(201).send(result);\n });\n\n // POST /packages/uninstall — uninstall one or more packages\n app.post('/packages/uninstall', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Uninstall package(s)',\n body: {\n type: 'object',\n required: ['packageIds'],\n properties: {\n packageIds: { type: 'array', items: { type: 'string' } },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { packageIds: string[] } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n await app.observability.observeOperation(\n 'marketplace.uninstall',\n () => app.marketplace.uninstall(ctx, body.packageIds),\n );\n return reply.code(204).send();\n });\n\n // POST /packages/enable — enable a package\n app.post('/packages/enable', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Enable a package',\n body: {\n type: 'object',\n required: ['packageId'],\n properties: {\n packageId: { type: 'string' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { packageId: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n await app.observability.observeOperation(\n 'marketplace.enable',\n () => app.marketplace.enable(ctx, body.packageId),\n );\n return reply.send({ id: body.packageId, enabled: true, scope: ctx.scope });\n });\n\n // POST /packages/disable — disable a package\n app.post('/packages/disable', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Disable a package',\n body: {\n type: 'object',\n required: ['packageId'],\n properties: {\n packageId: { type: 'string' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { packageId: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n await app.observability.observeOperation(\n 'marketplace.disable',\n () => app.marketplace.disable(ctx, body.packageId),\n );\n return reply.send({ id: body.packageId, enabled: false, scope: ctx.scope });\n });\n\n // POST /packages/update — update package(s) to latest version\n app.post('/packages/update', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Update package(s) to latest version',\n body: {\n type: 'object',\n properties: {\n packageIds: { type: 'array', items: { type: 'string' }, description: 'Specific ids to update; omit for \"all installed\"' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = (request.body ?? {}) as { packageIds?: string[] } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n const result = await app.observability.observeOperation(\n 'marketplace.update',\n () => app.marketplace.update(ctx, body.packageIds),\n );\n return reply.send(result);\n });\n\n // POST /packages/link — link a local path for development\n app.post('/packages/link', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Link a local package path for development',\n body: {\n type: 'object',\n required: ['path'],\n properties: {\n path: { type: 'string', description: 'Absolute path to local package' },\n manifest: { type: 'object', description: 'Validated source manifest for packages generated before build' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { path: string; manifest?: unknown } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n const result = await app.observability.observeOperation(\n 'marketplace.link',\n () => app.marketplace.link(ctx, body.path, body.manifest),\n );\n return reply.send(result);\n });\n\n // POST /packages/unlink — unlink a local package\n app.post('/packages/unlink', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Unlink a local package',\n body: {\n type: 'object',\n required: ['packageId'],\n properties: {\n packageId: { type: 'string' },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as { packageId: string } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n await app.observability.observeOperation(\n 'marketplace.unlink',\n () => app.marketplace.unlink(ctx, body.packageId),\n );\n return reply.code(204).send();\n });\n}\n","/**\n * @module @kb-labs/marketplace-api/routes/workspace\n * Workspace-level operations (not tied to a specific package).\n *\n * POST /workspace/sync — scan workspace and populate lock. Scope-bound:\n * globs resolve against the selected scope root and results land in that\n * scope's lock. Adapter entries are rejected in project scope by the core.\n */\n\nimport '../types.js';\nimport type { FastifyInstance } from 'fastify';\nimport { parseMutatingScope, scopeBodySchemaFragment } from '../scope-parser.js';\n\nexport function registerWorkspaceRoutes(app: FastifyInstance): void {\n // POST /workspace/sync — scan for plugins/adapters and populate lock\n app.post('/workspace/sync', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Sync workspace — scan for plugins/adapters and populate lock',\n body: {\n type: 'object',\n required: ['include'],\n properties: {\n include: {\n type: 'array',\n items: { type: 'string' },\n description: 'Glob patterns to scan (relative to the scope root)',\n },\n exclude: {\n type: 'array',\n items: { type: 'string' },\n description: 'Patterns to skip',\n },\n autoEnable: {\n type: 'boolean',\n description: 'Auto-enable newly discovered entries (default: false)',\n },\n ...scopeBodySchemaFragment,\n },\n },\n },\n }, async (request, reply) => {\n const body = request.body as {\n include: string[];\n exclude?: string[];\n autoEnable?: boolean;\n } & Record<string, unknown>;\n const ctx = parseMutatingScope(body);\n const result = await app.observability.observeOperation(\n 'marketplace.sync',\n () => app.marketplace.sync(ctx, {\n include: body.include,\n exclude: body.exclude,\n autoEnable: body.autoEnable,\n }),\n );\n return reply.send(result);\n });\n}\n","/**\n * @module @kb-labs/marketplace-api/routes/diagnostics\n * Service-level diagnostic endpoints.\n *\n * GET /diagnostics — marketplace health report. Accepts scope + projectRoot\n * in query so callers can probe either scope's lock health.\n */\n\nimport '../types.js';\nimport type { FastifyInstance } from 'fastify';\nimport { parseMutatingScope, scopeBodySchemaFragment } from '../scope-parser.js';\n\nexport function registerDiagnosticsRoutes(app: FastifyInstance): void {\n app.get('/diagnostics', {\n schema: {\n tags: ['Marketplace'],\n summary: 'Marketplace health and diagnostics report',\n querystring: {\n type: 'object',\n properties: scopeBodySchemaFragment,\n },\n },\n }, async (request, reply) => {\n const ctx = parseMutatingScope(request.query as Record<string, unknown>);\n const report = await app.observability.observeOperation(\n 'marketplace.doctor',\n () => app.marketplace.doctor(ctx),\n );\n return reply.send(report);\n });\n}\n","/**\n * @module @kb-labs/marketplace-api/routes\n * Register all marketplace API routes.\n */\n\nimport type { FastifyInstance } from 'fastify';\nimport { registerPackagesRoutes } from './packages.js';\nimport { registerWorkspaceRoutes } from './workspace.js';\nimport { registerDiagnosticsRoutes } from './diagnostics.js';\n\nexport async function registerRoutes(server: FastifyInstance): Promise<void> {\n await server.register(async (app) => {\n registerPackagesRoutes(app);\n registerWorkspaceRoutes(app);\n registerDiagnosticsRoutes(app);\n }, { prefix: '/api/v1/marketplace' });\n}\n","/**\n * @module @kb-labs/marketplace-api/server\n * Fastify server factory for marketplace service.\n */\n\nimport { type FastifyInstance } from 'fastify';\nimport {\n HttpObservabilityCollector,\n createDaemonServer,\n createServiceReadyResponse,\n type ObservabilityCollectorLike,\n} from '@kb-labs/shared-http';\nimport type { ILogger } from '@kb-labs/core-platform';\nimport type { ServiceHealthStatus, ObservabilityCheckStatus } from '@kb-labs/core-contracts';\nimport { registerRoutes } from './routes/index.js';\nimport type { MarketplaceService } from '@kb-labs/marketplace-core';\nimport { ScopeResolutionError, AdapterScopeError, InvalidEntityError } from '@kb-labs/marketplace-core';\nimport { PackageInstallError } from '@kb-labs/marketplace-npm';\nimport { ScopeRequestError } from './scope-parser.js';\n\nexport interface CreateServerOptions {\n service: MarketplaceService;\n logger?: ILogger;\n port?: number;\n host?: string;\n}\n\nfunction createFallbackLogger(): ILogger {\n const child = (_bindings: Record<string, unknown>): ILogger => createFallbackLogger();\n return {\n trace: () => {},\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n fatal: () => {},\n child,\n };\n}\n\n/**\n * Wraps HttpObservabilityCollector to satisfy ObservabilityCollectorLike.\n * The buildHealth() no-arg call from createDaemonServer routes uses a fixed\n * \"service registered\" check — the same information the original routes conveyed.\n */\nfunction wrapObservability(collector: HttpObservabilityCollector): ObservabilityCollectorLike {\n return {\n register: (server: FastifyInstance) => collector.register(server),\n buildDescribe: () => collector.buildDescribe(),\n renderPrometheusMetrics: (status: string, extra?: string[]) => collector.renderPrometheusMetrics(status as ServiceHealthStatus, extra),\n buildHealth: (_params?: Record<string, unknown>) =>\n collector.buildHealth({\n status: 'healthy' as ServiceHealthStatus,\n checks: [{ id: 'marketplace-service', status: 'ok' as ObservabilityCheckStatus, message: 'Marketplace service registered' }],\n meta: { serviceHealthEndpoint: '/health' },\n }),\n };\n}\n\nexport async function createServer(opts: CreateServerOptions): Promise<FastifyInstance> {\n const logger = opts.logger ?? createFallbackLogger();\n\n const collector = new HttpObservabilityCollector({\n serviceId: 'marketplace',\n serviceType: 'http-api',\n version: '0.1.0',\n logsSource: 'marketplace',\n });\n const observability = wrapObservability(collector);\n\n const server = await createDaemonServer({\n serviceId: 'marketplace',\n logger,\n observability,\n // Preserve the legacy /health contract { status:'ok', service, ts } (e2e MH-01/MH-02),\n // not the observability buildHealth() shape.\n healthResponse: () => ({ status: 'ok', service: 'marketplace', ts: Date.now() }),\n // /ready must return { ready, components } (createServiceReadyResponse shape),\n // not the bare buildHealth() payload — e2e MH-03/MH-04 assert body.ready and\n // body.components.marketplaceService.\n readyCheck: () =>\n createServiceReadyResponse({\n ready: true,\n components: { marketplaceService: { ready: true } },\n }),\n openapi: {\n title: 'KB Labs Marketplace',\n description: 'Unified marketplace for plugins, adapters, workflows, and more',\n },\n setErrorHandler: (app) => {\n // Scope-related errors → 400. All three share a `code` property so clients\n // can discriminate (SCOPE_INVALID, SCOPE_PROJECT_ROOT_REQUIRED,\n // SCOPE_PROJECT_EQUALS_PLATFORM, MARKETPLACE_ADAPTER_PROJECT_SCOPE, ...).\n app.setErrorHandler((err, _request, reply) => {\n if (\n err instanceof ScopeRequestError ||\n err instanceof ScopeResolutionError ||\n err instanceof AdapterScopeError\n ) {\n return reply.code(400).send({\n error: err.name,\n code: err.code,\n message: err.message,\n });\n }\n if (err instanceof InvalidEntityError) {\n return reply.code(422).send({\n error: err.name,\n code: err.code,\n message: err.message,\n });\n }\n if (err instanceof PackageInstallError) {\n const status = err.code === 'NOT_FOUND' ? 404 : 422;\n return reply.code(status).send({\n error: err.name,\n code: err.code,\n message: err.message,\n });\n }\n // Fallback to Fastify default behaviour.\n throw err;\n });\n },\n registerRoutes: async (app) => {\n // Decorate with service and observability instances before registering routes.\n app.decorate('marketplace', opts.service);\n app.decorate('observability', collector);\n\n await collector.observeOperation('marketplace.bootstrap', () => registerRoutes(app));\n },\n });\n\n return server;\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kb-labs/marketplace-api",
3
3
  "description": "Fastify routes for KB Labs marketplace service",
4
- "version": "2.110.0",
4
+ "version": "2.112.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -26,13 +26,13 @@
26
26
  "dependencies": {
27
27
  "@fastify/swagger": ">=9.5.1",
28
28
  "@fastify/swagger-ui": "^5.2.0",
29
- "@kb-labs/core-contracts": "^2.110.0",
30
- "@kb-labs/core-discovery": "^2.110.0",
31
- "@kb-labs/core-platform": "^2.110.0",
32
- "@kb-labs/marketplace-contracts": "^2.110.0",
33
- "@kb-labs/marketplace-core": "^2.110.0",
34
- "@kb-labs/marketplace-npm": "^2.110.0",
35
- "@kb-labs/shared-http": "^2.110.0",
29
+ "@kb-labs/core-contracts": "^2.112.0",
30
+ "@kb-labs/core-discovery": "^2.112.0",
31
+ "@kb-labs/core-platform": "^2.112.0",
32
+ "@kb-labs/marketplace-contracts": "^2.112.0",
33
+ "@kb-labs/marketplace-core": "^2.112.0",
34
+ "@kb-labs/marketplace-npm": "^2.112.0",
35
+ "@kb-labs/shared-http": "^2.112.0",
36
36
  "fastify": "^5.8.5",
37
37
  "fastify-type-provider-zod": "^4.0.2",
38
38
  "zod": "^3.25.76"