@happyvertical/smrt-core 0.55.24 → 0.56.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/agents/collection-reads.md +6 -3
  2. package/agents/generators.md +53 -0
  3. package/agents/object-runtime.md +3 -0
  4. package/agents/recipes.md +7 -4
  5. package/dist/browser.d.ts +2 -0
  6. package/dist/browser.d.ts.map +1 -1
  7. package/dist/browser.js +3 -1
  8. package/dist/collection.d.ts +4 -0
  9. package/dist/collection.d.ts.map +1 -1
  10. package/dist/collection.js +19 -9
  11. package/dist/collection.js.map +1 -1
  12. package/dist/consumer-plugin/hosted-sti-collections.d.ts.map +1 -1
  13. package/dist/consumer-plugin/hosted-sti-collections.js +4 -2
  14. package/dist/consumer-plugin/hosted-sti-collections.js.map +1 -1
  15. package/dist/cookbook/engine/commands.d.ts.map +1 -1
  16. package/dist/cookbook/engine/commands.js +12 -0
  17. package/dist/cookbook/engine/commands.js.map +1 -1
  18. package/dist/cookbook/engine/defaults.d.ts.map +1 -1
  19. package/dist/cookbook/engine/defaults.js +8 -0
  20. package/dist/cookbook/engine/defaults.js.map +1 -1
  21. package/dist/cookbook/engine/document.d.ts +4 -0
  22. package/dist/cookbook/engine/document.d.ts.map +1 -1
  23. package/dist/cookbook/engine/document.js +11 -3
  24. package/dist/cookbook/engine/document.js.map +1 -1
  25. package/dist/cookbook/engine/engine.d.ts.map +1 -1
  26. package/dist/cookbook/engine/engine.js +3 -1
  27. package/dist/cookbook/engine/engine.js.map +1 -1
  28. package/dist/cookbook/engine/schemas.d.ts.map +1 -1
  29. package/dist/cookbook/engine/schemas.js +8 -0
  30. package/dist/cookbook/engine/schemas.js.map +1 -1
  31. package/dist/cookbook/engine/types.d.ts +5 -1
  32. package/dist/cookbook/engine/types.d.ts.map +1 -1
  33. package/dist/cookbook/engine/types.js.map +1 -1
  34. package/dist/decorators/index.d.ts +2 -0
  35. package/dist/decorators/index.d.ts.map +1 -1
  36. package/dist/decorators/index.js.map +1 -1
  37. package/dist/generators/index.d.ts +1 -0
  38. package/dist/generators/index.d.ts.map +1 -1
  39. package/dist/generators/index.js +2 -1
  40. package/dist/generators/mcp-runtime-template.d.ts +3 -0
  41. package/dist/generators/mcp-runtime-template.d.ts.map +1 -1
  42. package/dist/generators/mcp-runtime-template.js +30 -4
  43. package/dist/generators/mcp-runtime-template.js.map +1 -1
  44. package/dist/generators/mcp.d.ts +5 -0
  45. package/dist/generators/mcp.d.ts.map +1 -1
  46. package/dist/generators/mcp.js +82 -9
  47. package/dist/generators/mcp.js.map +1 -1
  48. package/dist/generators/preflight-route.d.ts.map +1 -1
  49. package/dist/generators/preflight-route.js +3 -1
  50. package/dist/generators/preflight-route.js.map +1 -1
  51. package/dist/generators/rest.d.ts.map +1 -1
  52. package/dist/generators/rest.js +5 -0
  53. package/dist/generators/rest.js.map +1 -1
  54. package/dist/generators/swagger.d.ts.map +1 -1
  55. package/dist/generators/swagger.js +3 -1
  56. package/dist/generators/swagger.js.map +1 -1
  57. package/dist/generators.js +2 -1
  58. package/dist/index.d.ts +1 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +3 -1
  61. package/dist/manifest/browser-capability.generated.js +34 -5
  62. package/dist/manifest/browser-capability.generated.js.map +1 -1
  63. package/dist/manifest/index.js +1 -1
  64. package/dist/manifest/static-manifest.d.ts.map +1 -1
  65. package/dist/manifest/static-manifest.js +9 -1
  66. package/dist/manifest/static-manifest.js.map +1 -1
  67. package/dist/manifest/store.js +1 -1
  68. package/dist/manifest/store.js.map +1 -1
  69. package/dist/manifest.json +9 -1
  70. package/dist/mcp-serializer.d.ts +38 -0
  71. package/dist/mcp-serializer.d.ts.map +1 -0
  72. package/dist/mcp-serializer.js +60 -0
  73. package/dist/mcp-serializer.js.map +1 -0
  74. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/index.js +34 -0
  75. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/index.js.map +1 -0
  76. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/errors.js +343 -0
  77. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/errors.js.map +1 -0
  78. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/get-format.js +109 -0
  79. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/get-format.js.map +1 -0
  80. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/package-json-reader.js +102 -0
  81. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/package-json-reader.js.map +1 -0
  82. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/resolve.js +673 -0
  83. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/resolve.js.map +1 -0
  84. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/utils.js +32 -0
  85. package/dist/node_modules/.pnpm/import-meta-resolve@4.2.0/node_modules/import-meta-resolve/lib/utils.js.map +1 -0
  86. package/dist/object.d.ts +2 -0
  87. package/dist/object.d.ts.map +1 -1
  88. package/dist/object.js +51 -0
  89. package/dist/object.js.map +1 -1
  90. package/dist/operation-permission.d.ts +10 -0
  91. package/dist/operation-permission.d.ts.map +1 -0
  92. package/dist/operation-permission.js +36 -0
  93. package/dist/operation-permission.js.map +1 -0
  94. package/dist/registry/class-registration.d.ts.map +1 -1
  95. package/dist/registry/class-registration.js +12 -0
  96. package/dist/registry/class-registration.js.map +1 -1
  97. package/dist/registry/types.d.ts +18 -3
  98. package/dist/registry/types.d.ts.map +1 -1
  99. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  100. package/dist/scanner/manifest-generator.js +47 -0
  101. package/dist/scanner/manifest-generator.js.map +1 -1
  102. package/dist/scanner/types.d.ts +5 -0
  103. package/dist/scanner/types.d.ts.map +1 -1
  104. package/dist/scanner/types.js.map +1 -1
  105. package/dist/smrt-knowledge.json +18 -11
  106. package/dist/utils/import-project-vite.js +1 -1
  107. package/dist/utils/import-workspace-module.js +1 -1
  108. package/dist/vite-plugin/api-client-entries.d.ts.map +1 -1
  109. package/dist/vite-plugin/api-client-entries.js +1 -0
  110. package/dist/vite-plugin/api-client-entries.js.map +1 -1
  111. package/dist/vite-plugin/dev-plane-route.js +1 -1
  112. package/dist/vite-plugin/import-build-aware.js +1 -1
  113. package/dist/vite-plugin/index.js +1 -1
  114. package/dist/vite-plugin/resources-route.js +1 -1
  115. package/dist/vite-plugin/sveltekit-generator.d.ts +0 -4
  116. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
  117. package/dist/vite-plugin/sveltekit-generator.js +37 -25
  118. package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
  119. package/package.json +16 -10
@@ -1,7 +1,7 @@
1
1
  import { dirname, extname, resolve } from "node:path";
2
+ import { fileURLToPath, pathToFileURL } from "node:url";
2
3
  import { existsSync } from "node:fs";
3
4
  import { createRequire } from "node:module";
4
- import { fileURLToPath, pathToFileURL } from "node:url";
5
5
  //#region src/vite-plugin/import-build-aware.ts
6
6
  /**
7
7
  * Import a module that exists in both source (`.ts`) and compiled (`.js`)
@@ -16,8 +16,8 @@ import { injectSvelteKitRegistration } from "./sveltekit-register-injection.js";
16
16
  import { assertSvelteKitRouteCoordinationComplete, contributeSvelteKitRoutes, expectedSvelteKitRouteOwners, markSvelteKitRouteParticipant } from "./sveltekit-route-coordinator.js";
17
17
  import { buildWorkerRegistration } from "./worker-registration.js";
18
18
  import { dirname, join, resolve } from "node:path";
19
- import { existsSync, readFileSync } from "node:fs";
20
19
  import { fileURLToPath } from "node:url";
20
+ import { existsSync, readFileSync } from "node:fs";
21
21
  //#region src/vite-plugin/index.ts
22
22
  /**
23
23
  * Vite plugin for automatic SMRT service generation
@@ -1,9 +1,9 @@
1
1
  import { AUTO_GENERATED_ROUTE_HEADER } from "./route-header.js";
2
2
  import { resolveSvelteKitConfigImport } from "./sveltekit-config-import.js";
3
3
  import { join } from "node:path";
4
+ import { pathToFileURL } from "node:url";
4
5
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
6
  import { createRequire } from "node:module";
6
- import { pathToFileURL } from "node:url";
7
7
  //#region src/vite-plugin/resources-route.ts
8
8
  /**
9
9
  * SvelteKit `_resources` route generation — CLI discovery endpoint (#2663;
@@ -1,7 +1,3 @@
1
- /**
2
- * SvelteKit route auto-generation from SMRT objects
3
- * Generates real TypeScript files in src/routes/api/ based on discovered SMRT objects
4
- */
5
1
  import type { DomainKnowledgeConfig } from '@happyvertical/smrt-types';
6
2
  import { type ApiMethodExposure, type WireabilityOptions } from '../generators/custom-action.js';
7
3
  import type { ApiHttpMethod } from '../registry/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"sveltekit-generator.d.ts","sourceRoot":"","sources":["../../src/vite-plugin/sveltekit-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sveltekit-generator.d.ts","sourceRoot":"","sources":["../../src/vite-plugin/sveltekit-generator.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { MAX_LIST_LIMIT, buildDefaultListOrderBy } from "../query-bounds.js";
2
2
  import { isFrameworkBaseClass } from "../registry/framework-base-classes.js";
3
3
  import { generateConditionalGetRouteHelper } from "../generators/conditional-get.js";
4
4
  import { CRUD_OPERATIONS, createManifestClassNamePredicate, declaredTypeAcceptsDate, isCrudOperation, isFrameworkLifecycleMethod, queryStringDecoderFor, resolveApiMethodExposure, resolveCustomActionMetadata, resolveCustomActionNames, resolveDeclaredScopeMismatch, resolveEffectiveActionMetadata } from "../generators/custom-action.js";
5
+ import { resolveOperationPermissionAlias } from "../operation-permission.js";
5
6
  import { AUTO_GENERATED_ROUTE_HEADER } from "./route-header.js";
6
7
  import { assertSvelteKitConfigModuleNotReserved, generateCollectionAccessImports, resolveSvelteKitConfigImport } from "./sveltekit-config-import.js";
7
8
  import { generateChangesRoute } from "./changes-route.js";
@@ -12,9 +13,9 @@ import { canonicalSvelteKitPath } from "./sveltekit-path.js";
12
13
  import { collectSyncApplyTargets, generateSyncApplyRoute } from "./sync-apply-route.js";
13
14
  import { computeWebManifestHash, isCollectionManifestClass, orderedManifestObjectEntries, resolveCollectionItemObject, resolveCollectionItemTypeName } from "./web-collections.js";
14
15
  import { isAbsolute, join, relative, resolve, sep } from "node:path";
16
+ import { pathToFileURL } from "node:url";
15
17
  import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from "node:fs";
16
18
  import { createRequire } from "node:module";
17
- import { pathToFileURL } from "node:url";
18
19
  //#region src/vite-plugin/sveltekit-generator.ts
19
20
  /**
20
21
  * SvelteKit route auto-generation from SMRT objects
@@ -531,9 +532,8 @@ function resolveDefaultListOrderBy(objectDef) {
531
532
  * the `@TenantScoped` interceptors that auto-filter by tenant.
532
533
  *
533
534
  * `establishTenantContext` reads the canonical `locals.tenantId` set by the
534
- * smrt-users auth hook (with `user`/`session` fallbacks). It is a no-op when a
535
- * context is already active (e.g. an upstream tenancy handle) or when the
536
- * request carries no tenant (anonymous / global principal).
535
+ * smrt-users auth hook (with `user`/`session` fallbacks). An upstream context
536
+ * must identify the same tenant/user; conflicting authority fails closed.
537
537
  *
538
538
  * When no context could be established, an `optional`-mode read would otherwise
539
539
  * fall through the interceptor UNFILTERED and return rows from ALL tenants (the
@@ -545,17 +545,18 @@ function resolveDefaultListOrderBy(objectDef) {
545
545
  */
546
546
  function generateTenantContextHelper(requirePrincipal, includeReadScope) {
547
547
  return `
548
- import { ${includeReadScope ? "enterTenantContext, getCurrentTenant, hasTenantContext, isSuperAdminBypass, isTenancyEnabled" : "enterTenantContext, hasTenantContext"} } from '@happyvertical/smrt-tenancy';
548
+ import { ${includeReadScope ? "enterTenantContext, getCurrentTenant, hasTenantContext, isSuperAdminBypass, isTenancyEnabled" : "enterTenantContext, getCurrentTenant"} } from '@happyvertical/smrt-tenancy';
549
549
 
550
550
  function establishTenantContext(locals: unknown): void {
551
- if (hasTenantContext()) return;
552
551
  if (!locals || typeof locals !== 'object') return;
553
552
  const l = locals as Record<string, unknown>;
554
553
  const user = l.user as Record<string, unknown> | undefined;
555
554
  const session = l.session as Record<string, unknown> | undefined;
556
- const tenantId = l.tenantId ?? user?.tenantId ?? session?.tenantId;
557
- const userId = l.userId ?? user?.id ?? user?.userId ?? session?.userId;
558
- const rawPermissions = l.permissions;
555
+ const tenantContext = l.tenantContext as Record<string, unknown> | undefined;
556
+ const tenantId = l.tenantId ?? user?.tenantId ?? session?.tenantId ?? tenantContext?.tenantId;
557
+ const userId = l.userId ?? user?.id ?? user?.userId ?? session?.userId ?? tenantContext?.userId;
558
+ const rawPermissions =
559
+ l.permissions ?? l.permissionSet ?? l.smrtPermissions ?? tenantContext?.permissions;
559
560
  const permissions =
560
561
  rawPermissions instanceof Set && [...rawPermissions].every((value) => typeof value === 'string')
561
562
  ? rawPermissions
@@ -566,8 +567,20 @@ ${requirePrincipal ? ` if (
566
567
  typeof tenantId !== 'string' || !tenantId ||
567
568
  typeof userId !== 'string' || !userId ||
568
569
  !permissions
569
- ) return;
570
+ ) {
571
+ throw error(403, 'Authenticated principal context is incomplete');
572
+ }
570
573
  ` : ""}
574
+ const active = getCurrentTenant();
575
+ if (active) {
576
+ if (
577
+ (typeof tenantId === 'string' && tenantId && active.tenantId !== tenantId) ||
578
+ (${requirePrincipal ? "active.userId !== userId" : "typeof userId === 'string' && userId && active.userId && active.userId !== userId"})
579
+ ) {
580
+ throw error(403, 'Tenant context does not match authenticated principal');
581
+ }
582
+ ${requirePrincipal ? " enterTenantContext({ ...active, tenantId, userId, permissions });\n" : ""} return;
583
+ }
571
584
  if (typeof tenantId === 'string' && tenantId) {
572
585
  enterTenantContext(
573
586
  ${requirePrincipal ? "{ tenantId, userId, permissions }" : "{ tenantId }"},
@@ -1453,6 +1466,10 @@ function resolveStandardCrudActions(apiConfig) {
1453
1466
  * wrote its route file.
1454
1467
  */
1455
1468
  function resolveApiCustomActions(objectDef, manifest, objectIsCollectionClass, wireability = {}) {
1469
+ if (objectIsCollectionClass && manifest && resolveCollectionItemObject(manifest, objectDef)?.decoratorConfig?.abstract === true) return {
1470
+ exposed: [],
1471
+ rejected: []
1472
+ };
1456
1473
  const apiConfig = objectDef.decoratorConfig?.api;
1457
1474
  const isModelClassName = wireability.isModelClassName ?? createManifestClassNamePredicate(manifest);
1458
1475
  const exposed = [];
@@ -2009,7 +2026,7 @@ function generateActionRouteTemplate(projectRoot, routeDir, routeSpecs, objectDe
2009
2026
  const tenantScoped = isTenantScoped(objectDef) || routeSpecs.some((spec) => !!spec.lookupObjectDef && isTenantScoped(spec.lookupObjectDef));
2010
2027
  const principalContext = usesPrincipalContext(objectDef) || routeSpecs.some((spec) => !!spec.lookupObjectDef && usesPrincipalContext(spec.lookupObjectDef));
2011
2028
  const needsTenantContext = tenantScoped || principalContext;
2012
- const handlers = routeSpecs.map((spec) => generateActionRouteHandler(spec.lookupClassName, spec.actionName, spec.actionDef, spec.routeConfig, spec.hostType, tenantScoped, needsTenantContext, lookupModelType.typeName, hostModelType.typeName)).join("\n");
2029
+ const handlers = routeSpecs.map((spec) => generateActionRouteHandler(spec.lookupClassName, spec.actionName, spec.actionDef, spec.routeConfig, spec.hostType, tenantScoped, needsTenantContext, lookupModelType.typeName, hostModelType.typeName, resolveOperationPermissionAlias(objectDef.decoratorConfig, spec.actionName)?.action)).join("\n");
2013
2030
  return `${AUTO_GENERATED_ROUTE_HEADER}
2014
2031
  // DO NOT EDIT - changes will be overwritten
2015
2032
 
@@ -2018,11 +2035,15 @@ ${generateAuthGuardHelper(objectDef, semanticManifest, hostType === "collection"
2018
2035
  ${generateTypedRouteErrorHelper()}
2019
2036
  ${handlers}`;
2020
2037
  }
2021
- function generateActionRouteHandler(lookupClassName, actionName, actionDef, routeConfig, hostType, tenantScoped, needsTenantContext, lookupTypeName, hostTypeName) {
2038
+ function generateActionRouteHandler(lookupClassName, actionName, actionDef, routeConfig, hostType, tenantScoped, needsTenantContext, lookupTypeName, hostTypeName, permissionAction) {
2039
+ const successResponse = ` return json({
2040
+ action: '${actionName}',
2041
+ result: toPublicResult(result, publicJsonOptions),
2042
+ });`;
2022
2043
  const handlerName = routeConfig.method;
2023
2044
  const mutating = routeConfig.method !== "GET";
2024
2045
  const guardLines = [` requireRouteAuth(locals, ${mutating});`];
2025
- if (mutating) guardLines.push(` requireRoutePermission(locals, ${JSON.stringify(actionName)});`);
2046
+ if (mutating) guardLines.push(` requireRoutePermission(locals, ${JSON.stringify(permissionAction ?? actionName)});`);
2026
2047
  if (needsTenantContext) guardLines.push(" establishTenantContext(locals);");
2027
2048
  const authGuardLine = guardLines.join("\n");
2028
2049
  const needsRequest = actionDef.parameters.length > 0;
@@ -2055,10 +2076,7 @@ ${optionsLoad}${scopedOptions.source} let result: unknown;
2055
2076
  return json({ error: failure }, { status: failure.status });
2056
2077
  }
2057
2078
 
2058
- return json({
2059
- action: '${actionName}',
2060
- result: toPublicResult(result, publicJsonOptions),
2061
- });
2079
+ ${successResponse}
2062
2080
  };
2063
2081
  `;
2064
2082
  }
@@ -2086,10 +2104,7 @@ ${optionsLoad}${scopedOptions.source} const ClassRef = registered.constructor a
2086
2104
  return json({ error: failure }, { status: failure.status });
2087
2105
  }
2088
2106
 
2089
- return json({
2090
- action: '${actionName}',
2091
- result: toPublicResult(result, publicJsonOptions),
2092
- });
2107
+ ${successResponse}
2093
2108
  };
2094
2109
  `;
2095
2110
  }
@@ -2119,10 +2134,7 @@ ${optionsLoad} let result: unknown;
2119
2134
  return json({ error: failure }, { status: failure.status });
2120
2135
  }
2121
2136
 
2122
- return json({
2123
- action: '${actionName}',
2124
- result: toPublicResult(result, publicJsonOptions),
2125
- });
2137
+ ${successResponse}
2126
2138
  };
2127
2139
  `;
2128
2140
  }