@happyvertical/smrt-core 0.56.0 → 0.56.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/AGENTS.md +6 -0
  2. package/agents/browser-entry.md +5 -0
  3. package/agents/generators.md +61 -0
  4. package/agents/object-runtime.md +17 -0
  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/cookbook/engine/commands.d.ts.map +1 -1
  9. package/dist/cookbook/engine/commands.js +12 -0
  10. package/dist/cookbook/engine/commands.js.map +1 -1
  11. package/dist/cookbook/engine/defaults.d.ts.map +1 -1
  12. package/dist/cookbook/engine/defaults.js +8 -0
  13. package/dist/cookbook/engine/defaults.js.map +1 -1
  14. package/dist/cookbook/engine/document.d.ts +4 -0
  15. package/dist/cookbook/engine/document.d.ts.map +1 -1
  16. package/dist/cookbook/engine/document.js +11 -3
  17. package/dist/cookbook/engine/document.js.map +1 -1
  18. package/dist/cookbook/engine/engine.d.ts.map +1 -1
  19. package/dist/cookbook/engine/engine.js +3 -1
  20. package/dist/cookbook/engine/engine.js.map +1 -1
  21. package/dist/cookbook/engine/schemas.d.ts.map +1 -1
  22. package/dist/cookbook/engine/schemas.js +8 -0
  23. package/dist/cookbook/engine/schemas.js.map +1 -1
  24. package/dist/cookbook/engine/types.d.ts +5 -1
  25. package/dist/cookbook/engine/types.d.ts.map +1 -1
  26. package/dist/cookbook/engine/types.js.map +1 -1
  27. package/dist/generators/index.d.ts +1 -0
  28. package/dist/generators/index.d.ts.map +1 -1
  29. package/dist/generators/index.js +2 -1
  30. package/dist/generators/mcp-runtime-template.d.ts +3 -0
  31. package/dist/generators/mcp-runtime-template.d.ts.map +1 -1
  32. package/dist/generators/mcp-runtime-template.js +30 -4
  33. package/dist/generators/mcp-runtime-template.js.map +1 -1
  34. package/dist/generators/mcp.d.ts +5 -0
  35. package/dist/generators/mcp.d.ts.map +1 -1
  36. package/dist/generators/mcp.js +78 -7
  37. package/dist/generators/mcp.js.map +1 -1
  38. package/dist/generators.js +2 -1
  39. package/dist/index.d.ts +1 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3 -1
  42. package/dist/interceptors.d.ts +7 -0
  43. package/dist/interceptors.d.ts.map +1 -1
  44. package/dist/interceptors.js +15 -1
  45. package/dist/interceptors.js.map +1 -1
  46. package/dist/manifest/browser-capability.generated.d.ts.map +1 -1
  47. package/dist/manifest/browser-capability.generated.js +47 -5
  48. package/dist/manifest/browser-capability.generated.js.map +1 -1
  49. package/dist/manifest/index.js +1 -1
  50. package/dist/manifest/manifest-loader.d.ts.map +1 -1
  51. package/dist/manifest/manifest-loader.js +1 -2
  52. package/dist/manifest/manifest-loader.js.map +1 -1
  53. package/dist/manifest/static-manifest.js +1 -1
  54. package/dist/manifest/static-manifest.js.map +1 -1
  55. package/dist/manifest/store.js +1 -1
  56. package/dist/manifest.json +1 -1
  57. package/dist/mcp-serializer.d.ts +38 -0
  58. package/dist/mcp-serializer.d.ts.map +1 -0
  59. package/dist/mcp-serializer.js +60 -0
  60. package/dist/mcp-serializer.js.map +1 -0
  61. package/dist/object.d.ts +1 -0
  62. package/dist/object.d.ts.map +1 -1
  63. package/dist/object.js +44 -13
  64. package/dist/object.js.map +1 -1
  65. package/dist/registry/collection-exposure.d.ts +99 -0
  66. package/dist/registry/collection-exposure.d.ts.map +1 -0
  67. package/dist/registry/collection-exposure.js +135 -0
  68. package/dist/registry/collection-exposure.js.map +1 -0
  69. package/dist/registry/types.d.ts +13 -0
  70. package/dist/registry/types.d.ts.map +1 -1
  71. package/dist/registry.d.ts +8 -1
  72. package/dist/registry.d.ts.map +1 -1
  73. package/dist/registry.js +76 -3
  74. package/dist/registry.js.map +1 -1
  75. package/dist/scanner/manifest-generator.d.ts +14 -0
  76. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  77. package/dist/scanner/manifest-generator.js +66 -13
  78. package/dist/scanner/manifest-generator.js.map +1 -1
  79. package/dist/smrt-knowledge.json +13 -11
  80. package/dist/utils/import-project-vite.js +1 -1
  81. package/dist/utils/import-workspace-module.js +1 -1
  82. package/dist/utils/sha256.js +2 -2
  83. package/dist/vite-plugin/dev-plane-route.js +1 -1
  84. package/dist/vite-plugin/import-build-aware.js +1 -1
  85. package/dist/vite-plugin/index.js +2 -2
  86. package/dist/vite-plugin/resources-route.js +1 -1
  87. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
  88. package/dist/vite-plugin/sveltekit-generator.js +5 -1
  89. package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
  90. package/package.json +16 -10
  91. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_md.js +0 -169
  92. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_md.js.map +0 -1
  93. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_u64.js +0 -13
  94. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_u64.js.map +0 -1
  95. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/sha2.js +0 -198
  96. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/sha2.js.map +0 -1
  97. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/utils.js +0 -243
  98. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/utils.js.map +0 -1
  99. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +0 -51
  100. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js.map +0 -1
  101. package/dist/node_modules/.pnpm/brace-expansion@5.0.11/node_modules/brace-expansion/dist/esm/index.js +0 -202
  102. package/dist/node_modules/.pnpm/brace-expansion@5.0.11/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
  103. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js +0 -10
  104. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +0 -1
  105. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js +0 -514
  106. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js.map +0 -1
  107. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js +0 -124
  108. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js.map +0 -1
  109. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js +0 -21
  110. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js.map +0 -1
  111. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js +0 -629
  112. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js.map +0 -1
  113. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js +0 -28
  114. package/dist/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js.map +0 -1
@@ -2,10 +2,11 @@ import { PRIVATE_READ_CACHE_CONTROL, canonicalReadRepresentation, computeBodyEta
2
2
  import { CRUD_OPERATIONS, SMRT_CUSTOM_ACTION_ERROR_METADATA_KEY, buildCustomActionInputSchema, buildCustomActionInvocationArgs, classifyMethodWireability, classifyParameterWireability, coerceCustomActionArgument, createClassNamePredicate, createManifestClassNamePredicate, customActionParameterInputName, declaredTypeAcceptsDate, declaresRuntimeRestRoute, declaresRuntimeRestRouteShape, isCrudOperation, isCrudToolAction, normalizeCustomActionFailure, queryStringDecoderFor, readMethodDecoratorConfig, resolveApiMethodExposure, resolveCustomActionMetadata, resolveDeclaredScopeMismatch, resolveEffectiveActionMetadata, toCustomActionBoolean, toCustomActionDate, toCustomActionNumber } from "./generators/custom-action.js";
3
3
  import { DEFAULT_EVENTS_HEARTBEAT_MS, DEFAULT_EVENTS_MAX_SUBSCRIBERS, DEFAULT_EVENTS_RETRY_AFTER_SECONDS, buildChangeEventStream, changeEventSubscribersAtCapacity, eventStreamCapacityExceededResponse, normalizeEventsMaxSubscribers, signalVisibleToTenant, tryReserveChangeEventSubscriberSlot } from "./generators/events-route.js";
4
4
  import { runWithTenantGate, setTenantEntryPointRunner } from "./generators/tenant-gate.js";
5
+ import { fieldTypeToJsonSchema } from "./generators/tool-schema.js";
5
6
  import { MCPGenerator, MCP_STABLE_CATALOG_TTL_MS, resolveMCPToolListCacheHint, sortMCPTools } from "./generators/mcp.js";
6
7
  import { PLAYBOOK_PREFLIGHT_CAPABILITY, PLAYBOOK_PREFLIGHT_ROUTE_SEGMENT, handlePlaybookPreflightRoute, isApiActionEnabledForObject, isRestActionRoutable, isRestRoutePublic, resolveRegisteredObjectName, restFieldReadPermissions, restMethodForApiAction } from "./generators/preflight-route.js";
7
8
  import { normalizeTypedHttpError } from "./generators/typed-http-error.js";
8
9
  import { APIGenerator, computeRuntimeWebManifestHash, createRestServer, startRestServer } from "./generators/rest.js";
9
10
  import { generateOpenAPISpec, setupSwaggerUI } from "./generators/swagger.js";
10
11
  import "./generators/index.js";
11
- export { APIGenerator, CRUD_OPERATIONS, DEFAULT_EVENTS_HEARTBEAT_MS, DEFAULT_EVENTS_MAX_SUBSCRIBERS, DEFAULT_EVENTS_RETRY_AFTER_SECONDS, MCPGenerator, MCP_STABLE_CATALOG_TTL_MS, PLAYBOOK_PREFLIGHT_CAPABILITY, PLAYBOOK_PREFLIGHT_ROUTE_SEGMENT, PRIVATE_READ_CACHE_CONTROL, SMRT_CUSTOM_ACTION_ERROR_METADATA_KEY, buildChangeEventStream, buildCustomActionInputSchema, buildCustomActionInvocationArgs, canonicalReadRepresentation, changeEventSubscribersAtCapacity, classifyMethodWireability, classifyParameterWireability, coerceCustomActionArgument, computeBodyEtag, computeRuntimeWebManifestHash, computeTableVersionEtag, conditionalJsonResponse, createClassNamePredicate, createManifestClassNamePredicate, createRestServer, customActionParameterInputName, declaredTypeAcceptsDate, declaresRuntimeRestRoute, declaresRuntimeRestRouteShape, eventStreamCapacityExceededResponse, generateOpenAPISpec, handlePlaybookPreflightRoute, ifNoneMatchHasConcreteMatch, ifNoneMatchSatisfied, isApiActionEnabledForObject, isCrudOperation, isCrudToolAction, isRestActionRoutable, isRestRoutePublic, normalizeCustomActionFailure, normalizeEventsMaxSubscribers, normalizeTypedHttpError, queryStringDecoderFor, readMethodDecoratorConfig, resolveApiMethodExposure, resolveCustomActionMetadata, resolveDeclaredScopeMismatch, resolveEffectiveActionMetadata, resolveMCPToolListCacheHint, resolveReadCacheControl, resolveRegisteredObjectName, resolveTenantEtagDiscriminator, restFieldReadPermissions, restMethodForApiAction, runWithTenantGate, setTenantEntryPointRunner, setupSwaggerUI, signalVisibleToTenant, sortMCPTools, startRestServer, toCustomActionBoolean, toCustomActionDate, toCustomActionNumber, tryReserveChangeEventSubscriberSlot, versionConditionalResponse, warnIfSharedCacheNeutralized };
12
+ export { APIGenerator, CRUD_OPERATIONS, DEFAULT_EVENTS_HEARTBEAT_MS, DEFAULT_EVENTS_MAX_SUBSCRIBERS, DEFAULT_EVENTS_RETRY_AFTER_SECONDS, MCPGenerator, MCP_STABLE_CATALOG_TTL_MS, PLAYBOOK_PREFLIGHT_CAPABILITY, PLAYBOOK_PREFLIGHT_ROUTE_SEGMENT, PRIVATE_READ_CACHE_CONTROL, SMRT_CUSTOM_ACTION_ERROR_METADATA_KEY, buildChangeEventStream, buildCustomActionInputSchema, buildCustomActionInvocationArgs, canonicalReadRepresentation, changeEventSubscribersAtCapacity, classifyMethodWireability, classifyParameterWireability, coerceCustomActionArgument, computeBodyEtag, computeRuntimeWebManifestHash, computeTableVersionEtag, conditionalJsonResponse, createClassNamePredicate, createManifestClassNamePredicate, createRestServer, customActionParameterInputName, declaredTypeAcceptsDate, declaresRuntimeRestRoute, declaresRuntimeRestRouteShape, eventStreamCapacityExceededResponse, fieldTypeToJsonSchema, generateOpenAPISpec, handlePlaybookPreflightRoute, ifNoneMatchHasConcreteMatch, ifNoneMatchSatisfied, isApiActionEnabledForObject, isCrudOperation, isCrudToolAction, isRestActionRoutable, isRestRoutePublic, normalizeCustomActionFailure, normalizeEventsMaxSubscribers, normalizeTypedHttpError, queryStringDecoderFor, readMethodDecoratorConfig, resolveApiMethodExposure, resolveCustomActionMetadata, resolveDeclaredScopeMismatch, resolveEffectiveActionMetadata, resolveMCPToolListCacheHint, resolveReadCacheControl, resolveRegisteredObjectName, resolveTenantEtagDiscriminator, restFieldReadPermissions, restMethodForApiAction, runWithTenantGate, setTenantEntryPointRunner, setupSwaggerUI, signalVisibleToTenant, sortMCPTools, startRestServer, toCustomActionBoolean, toCustomActionDate, toCustomActionNumber, tryReserveChangeEventSubscriberSlot, versionConditionalResponse, warnIfSharedCacheNeutralized };
package/dist/index.d.ts CHANGED
@@ -67,6 +67,7 @@ export { deriveRecipeDemo, effectiveRecipeDemo, hasBrowserOption, isMockableProv
67
67
  export { buildConnectSection, buildGlossary, type ConnectSection, type ConnectSurface, createRecipeHelp, extractFieldRefs, findField, type GlossaryEntry, type HelpBlock, type HelpField, type HelpModel, helpToMarkdown, type Inline, parseHelp, type RecipeHelp, type RenderedHelp, type RenderHelpOptions, renderHelp, resolveHelp, validateHelp, } from "./recipe-help.js";
68
68
  export * from "./registry.js";
69
69
  export { smrt as smrtRegistry } from "./registry.js";
70
+ export { type CollectionWriteEscalation, type CrudVerb, exposedCrudVerbs, findCollectionWriteEscalations, inheritCollectionExposure, inheritedCollectionSurface, } from "./registry/collection-exposure.js";
70
71
  export type { RuntimeRegistrationOverride } from "./registry/runtime-overrides.js";
71
72
  export { POSTGRES_REVISION_GUARD_EXPRESSION, postgresRevisionCandidates, postgresRevisionCondition, } from "./revision-guard.js";
72
73
  export * from "./run-once.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,cAAc,qBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,cAAc,EACnB,gBAAgB,GACjB,MAAM,cAAW,CAAC;AAGnB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAe,CAAC;AAIvB,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,mCAAmC,EACxC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,8BAA8B,EAC9B,yBAAyB,EACzB,qCAAqC,EACrC,gCAAgC,EAChC,gCAAgC,EAChC,mBAAmB,EACnB,wBAAwB,EACxB,iCAAiC,EACjC,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,wBAAqB,CAAC;AAK7B,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,8BAA2B,CAAC;AAKnC,OAAO,EACL,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,qBAAkB,CAAC;AAE1B,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,sBAAmB,CAAC;AAE3B,cAAc,YAAS,CAAC;AACxB,cAAc,iBAAc,CAAC;AAE7B,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,+BAA+B,EAC/B,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,uBAAoB,CAAC;AAC5B,cAAc,2BAAwB,CAAC;AACvC,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,YAAY,GACb,MAAM,aAAU,CAAC;AAElB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAU,CAAC;AAGlC,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,iBAAc,CAAC;AAEtB,OAAO,EACL,KAAK,cAAc,EACnB,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,eAAe,GAChB,MAAM,eAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,gBAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAa,CAAC;AAC9C,OAAO,EACL,kCAAkC,EAClC,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,EAClC,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,+BAA4B,CAAC;AAGpC,OAAO,EACL,KAAK,sBAAsB,EAC3B,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,EACL,UAAU,EACV,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,UAAU,EACV,IAAI,EACJ,MAAM,EACN,KAAK,mBAAmB,EACxB,SAAS,EACT,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,uBAAoB,CAAC;AAE5B,cAAc,qBAAkB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,2BAAwB,CAAC;AAEhC,cAAc,uBAAoB,CAAC;AACnC,cAAc,aAAU,CAAC;AAEzB,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,gCAAgC,GACjC,MAAM,wBAAqB,CAAC;AAE7B,OAAO,EACL,+BAA+B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,kCAA+B,CAAC;AAEvC,cAAc,uBAAoB,CAAC;AACnC,OAAO,EAAE,KAAK,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAgB,CAAC;AAEtE,cAAc,mBAAgB,CAAC;AAC/B,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAY,CAAC;AACpB,cAAc,gBAAa,CAAC;AAG5B,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,kBAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,kBAAe,CAAC;AACvB,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,oBAAiB,CAAC;AAEzB,OAAO,EACL,uBAAuB,EACvB,KAAK,eAAe,EACpB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,qBAAkB,CAAC;AAE1B,cAAc,qBAAkB,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAqB,CAAC;AAEvD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,GACf,MAAM,wBAAqB,CAAC;AAC7B,cAAc,aAAU,CAAC;AACzB,OAAO,EACL,KAAK,wBAAwB,EAC7B,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,GACvC,MAAM,8BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,kCAAkC,GACnC,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,uBAAuB,GACxB,MAAM,wBAAqB,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,mBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,aAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,cAAc,GACpB,MAAM,kBAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACd,cAAc,EACd,KAAK,MAAM,EACX,SAAS,EACT,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,UAAU,EACV,WAAW,EACX,YAAY,GACb,MAAM,kBAAe,CAAC;AACvB,cAAc,eAAY,CAAC;AAC3B,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAY,CAAC;AAElD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,mCAAgC,CAAC;AACxC,YAAY,EAAE,2BAA2B,EAAE,MAAM,iCAA8B,CAAC;AAEhF,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,qBAAkB,CAAC;AAC1B,cAAc,eAAY,CAAC;AAE3B,cAAc,oBAAiB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAc,CAAC;AAIlE,OAAO,EACL,KAAK,oCAAoC,EACzC,6BAA6B,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,GAC7B,MAAM,uCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAA8B,CAAC;AAGtE,OAAO,EACL,KAAK,mBAAmB,EACxB,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,qBAAqB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,yBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,gBAAgB,GACtB,MAAM,iCAA8B,CAAC;AAEtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAgB,CAAC;AAEvD,cAAc,oBAAiB,CAAC;AAGhC,cAAc,iBAAc,CAAC;AAE7B,cAAc,mBAAgB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAgB,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAe,CAAC;AAEpD,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,uBAAoB,CAAC;AAE5B,cAAc,kBAAe,CAAC;AAE9B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAe,CAAC;AAG/D,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,yBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,EACL,cAAc,EACd,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,EACL,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,iBAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAgB,CAAC;AAE7C,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,YAAY,EACZ,2BAA2B,EAC3B,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,MAAM,EACN,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,4BAAyB,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -46,6 +46,7 @@ import { ContentHasher } from "./embeddings/hash.js";
46
46
  import { POSTGRES_REVISION_GUARD_EXPRESSION, postgresRevisionCandidates, postgresRevisionCondition } from "./revision-guard.js";
47
47
  import { executeToolCall, executeToolCalls, formatToolResults, validateToolCall } from "./tools/tool-executor.js";
48
48
  import { SmrtObject } from "./object.js";
49
+ import { exposedCrudVerbs, findCollectionWriteEscalations, inheritCollectionExposure, inheritedCollectionSurface } from "./registry/collection-exposure.js";
49
50
  import { isDatabaseInterface, resolveDatabase } from "./database.js";
50
51
  import { ObjectRegistry, smrt } from "./registry.js";
51
52
  import { auditChanges, auditSnapshot, getActiveAuditOptions, isAudited, requireAuditOptions, writeAudit } from "./audit.js";
@@ -68,6 +69,7 @@ import { CRUD_OPERATIONS, SMRT_CUSTOM_ACTION_ERROR_METADATA_KEY, buildCustomActi
68
69
  import { DEFAULT_EVENTS_HEARTBEAT_MS, DEFAULT_EVENTS_MAX_SUBSCRIBERS, DEFAULT_EVENTS_RETRY_AFTER_SECONDS, buildChangeEventStream, changeEventSubscribersAtCapacity, eventStreamCapacityExceededResponse, normalizeEventsMaxSubscribers, signalVisibleToTenant, tryReserveChangeEventSubscriberSlot } from "./generators/events-route.js";
69
70
  import { DEFAULT_DISPLAY_LABEL_FIELDS, FIELD_UI_FORMATS, FIELD_UI_FORMAT_TYPES, FIELD_UI_WIDGETS, FIELD_UI_WIDGET_TYPES, RELATIONSHIP_ROLES, describeDisplayLabel, displayLabelFieldProblem, findSelectorFor, isFieldUIFormat, isFieldUIWidget, isRelationshipRole, resolveDisplayLabelField } from "./ui-metadata.js";
70
71
  import { runWithTenantGate, setTenantEntryPointRunner } from "./generators/tenant-gate.js";
72
+ import { fieldTypeToJsonSchema } from "./generators/tool-schema.js";
71
73
  import { MCPGenerator, MCP_STABLE_CATALOG_TTL_MS, resolveMCPToolListCacheHint, sortMCPTools } from "./generators/mcp.js";
72
74
  import { PLAYBOOK_PREFLIGHT_CAPABILITY, PLAYBOOK_PREFLIGHT_ROUTE_SEGMENT, handlePlaybookPreflightRoute, isApiActionEnabledForObject, isRestActionRoutable, isRestRoutePublic, resolveRegisteredObjectName, restFieldReadPermissions, restMethodForApiAction } from "./generators/preflight-route.js";
73
75
  import { MAX_SYNC_APPLY_BATCH_SIZE, SYNC_APPLY_ROUTE_SEGMENTS, SYNC_APPLY_UUID_PATTERN, applySyncWritablePolicy, isStaleWrite, parseSyncApplyBatch, payloadMatchesRow, processSyncApplyBatch, validateSyncApplyItem } from "./sync/apply.js";
@@ -111,4 +113,4 @@ import "./system/index.js";
111
113
  import { getTestDatabase } from "./testing/database.js";
112
114
  import "./tools/index.js";
113
115
  import { smrtPlugin } from "./vite-plugin/index.js";
114
- export { AGENT_SURFACE_HASH_PREFIX, AIError, APIGenerator, AiUsageCollector, AiUsagePersistenceHandler, BOOTED_PROVENANCE, CACHE_INVALIDATION_CHANNEL, CHANGE_FEED_CREDENTIAL_TABLES, CHANGE_FEED_INTERCEPTOR_NAME, CHANGE_FEED_TABLE, CHANGE_SIGNAL_CHANNEL, CRUD_OPERATIONS, ConfigurationError, ContentHasher, CosineSimilarity, DEFAULT_AI_COST_RATES, DEFAULT_CHANGES_LIMIT, DEFAULT_DATA_QUERY_PAGE_LIMIT, DEFAULT_DATA_QUERY_RESULT_BYTES, DEFAULT_DISPLAY_LABEL_FIELDS, DEFAULT_EMBEDDING_CONFIG, DEFAULT_EVENTS_HEARTBEAT_MS, DEFAULT_EVENTS_MAX_SUBSCRIBERS, DEFAULT_EVENTS_RETRY_AFTER_SECONDS, DEFAULT_FACET_LIMIT, DEFAULT_LEARNING_CONFIG, DEFAULT_LIST_LIMIT, DEFAULT_LIST_ORDER_BY, DEFAULT_POSTGRES_TIMEOUTS, DEFAULT_RETENTION_POLICY, DIAGNOSTICS_DEFAULT_LIMIT, DataQueryValidationError, DatabaseError, Dispatch, DispatchBus, DispatchCollection, DispatchSubscription, DispatchSubscriptionCollection, EmbeddingProvider, EmbeddingStorage, EmbeddingUnavailableError, ErrorUtils, FIELD_UI_FORMATS, FIELD_UI_FORMAT_TYPES, FIELD_UI_WIDGETS, FIELD_UI_WIDGET_TYPES, FilesystemError, GlobalInterceptors, IN_LIST_CHUNK_SIZE, LearningMemory, LiveSchemaParityError, MAX_CHANGES_LIMIT, MAX_DATA_QUERY_CURSOR_LENGTH, MAX_DATA_QUERY_FACETS, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_FILTER_DEPTH, MAX_DATA_QUERY_IN_VALUES, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_PAGE_LIMIT, MAX_DATA_QUERY_REQUEST_BYTES, MAX_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_WARNINGS, MAX_FACET_FIELDS, MAX_FACET_LIMIT, MAX_LIST_LIMIT, MAX_STI_READ_SCOPE_TYPES, MAX_SYNC_APPLY_BATCH_SIZE, MCPGenerator, MCP_STABLE_CATALOG_TTL_MS, MOCK_PROVIDER_OPTION, MODULE_DOC_HASH_PREFIX, ManifestBuilder, ManifestGenerator, ManifestManager, MetricsAdapter, NetworkError, ObjectRegistry, PLAYBOOK_PREFLIGHT_CAPABILITY, PLAYBOOK_PREFLIGHT_ROUTE_SEGMENT, POSTGRES_REVISION_GUARD_EXPRESSION, POSTGRES_TIMEOUT_ENV_VARS, PRIVATE_READ_CACHE_CONTROL, PubSubAdapter, QueryBoundsError, QueryOrderByError, RECIPE_DEMO_MODES, RELATIONSHIP_ROLES, RUN_ONCE_CLAIMS_TABLE, RunOnceClaimError, RuntimeError, SMRT_COLLECTION_BASE_NAMES, SMRT_CUSTOM_ACTION_ERROR_METADATA_KEY, SMRT_SCHEMA_VERSION, SYNC_APPLY_ROUTE_SEGMENTS, SYNC_APPLY_UUID_PATTERN, SYSTEM_DIAGNOSTICS_TABLES, SYSTEM_TABLE_NAMES, SchemaComparer, SignalBus, SignalSanitizer, SmrtClass, SmrtCollection, SmrtError, SmrtHierarchical, SmrtJunction, SmrtJunctionBase, SmrtMCPServer, SmrtObject, SmrtPolymorphicAssociation, SmrtRecipe, TenantIsolationError, ValidationError, ValidationReport, ValidationUtils, appendChange, appendChanges, applyOneToManyChildAccessors, applyPendingDecoratorRegistrations, applyPostgresPermissions, applyPostgresRuntimeTimeouts, applySyncWritablePolicy, assertPlainJson, assertPostgresSystemTimestampsCurrent, assertScopedPackageName, auditChanges, auditSnapshot, broadcastCacheInvalidation, buildCascadePlan, buildChangeEventStream, buildConnectSection, buildCustomActionInputSchema, buildCustomActionInvocationArgs, buildDefaultListOrderBy, buildDomainKnowledgeManifest, buildGlossary, buildKnowledgeGraph, bumpChangeFeed, canonicalReadRepresentation, canonicalizeDataQuery, cascadeReferencesTo, changeEventSubscribersAtCapacity, checkKnowledgeGraphFreshness, checkLiveSchemaParity, childAccessorName, chunkArray, classifyDatabaseError, classifyDialectMessage, classifyMethodWireability, classifyParameterWireability, clearRetentionTasks, clone, coerceCustomActionArgument, collectForeignKeyOrphanCounts, computeBodyEtag, computeRuntimeWebManifestHash, computeTableVersionEtag, conditionalJsonResponse, config, convertTypeToJsonSchema, createClassNamePredicate, createDataQueryFingerprint, createDispatchBus, createFilesystemAdapter, createGeneratedCollectionAccess, createInterceptorContext, createMCPServer, createManifestClassNamePredicate, createQualifiedName, createRecipeHelp, createRestServer, createSmrtClient, createSmrtServer, crossPackageRef, customActionParameterInputName, declareChangeFeedSensitiveTable, declaredTypeAcceptsDate, declaresRuntimeRestRoute, declaresRuntimeRestRouteShape, deriveRecipeDemo, deriveRunOnceClaimKey, describeDisplayLabel, detectEngine, digestRunOnceContent, discoverKnowledgeArtifactPaths, discoverManifestEntry, discoverScopedPackageDirectories, displayLabelFieldProblem, drainChangeFeed, effectiveRecipeDemo, ensureBootstrapSystemTableCompatibility, ensureCacheInvalidationListener, ensureChangeFeedTable, ensureDeferredSystemTableCompatibility, ensureDispatchSubscriptionsSystemTableCompatibility, ensureDispatchSystemTableCompatibility, ensureJobEventsSystemTableCompatibility, ensureJobsSystemTableCompatibility, ensureLegacySystemTableCompatibility, ensureSystemTables, estimateAiUsageCost, eventStreamCapacityExceededResponse, executeCollectionReadPlan, executeDecision, executeToolCall, executeToolCalls, extractFieldRefs, field, filterVisibleChangeFeedEntries, findField, findManifestEntryByQualifiedName, findSelectorFor, foreignKey, formatToolResults, generateDDLForEngine, generateOpenAPISpec, generateSchemaDiff, generateToolFromMethod, generateToolManifest, getActiveAuditOptions, getAdapterInfo, getAuthorizedChangesSince, getAuthorizedTenantScopedChangesSince, getCacheGeneration, getChangeFeedSensitiveTables, getChangesSince, getClassConfigResolvers, getClassName, getConfigResolver, getDatabaseEngine, getManifest, getPackageFromQualifiedName, getRetentionTasks, getSQLFromDiff, getSystemTableShapes, getTableVersion, getTenantScopedChangesSince, getTestDatabase, handlePlaybookPreflightRoute, hasActionableChanges, hasBrowserOption, hasChangeFeedEntryVisibilityHook, hasChangeFeedTableAuthorizerHook, helpToMarkdown, ifNoneMatchHasConcreteMatch, ifNoneMatchSatisfied, importOptionalDependency, invalidateCollectionCache, isAbortedTransactionError, isAdvisoryOnlyChange, isApiActionEnabledForObject, isAudited, isChangeFeedDenyAll, isChangeFeedEntryVisible, isChangeFeedSensitiveTable, isCrudOperation, isCrudToolAction, isDatabaseInterface, isDeterministicDatabaseError, isEmbeddedDatabase, isFieldUIFormat, isFieldUIWidget, isFrameworkBaseClass, isFromPackage, isLazyConfigSentinel, isManualOrAdvisoryChange, isMockableProvider, isNotNullViolationError, isPostgresDatabase, isQualifiedName, isRelationshipRole, isRestActionRoutable, isRestRoutePublic, isScopedPackageName, isSensitiveConnectionParam, isServerProvider, isSmrtCollectionExtendsName, isStaleWrite, isTenantScopedClassResolved, isTransientDatabaseError, isType, isUniqueViolationError, isValid, listConfigResolvers, loadExternalManifest, loadExternalManifestSync, loadLocalTestManifestSync, loadManifestFromPathSync, manifest, manyToMany, meta, method, migratePostgresSystemTimestamps, normalizeCustomActionFailure, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema, normalizeEventsMaxSubscribers, normalizeOnDelete, normalizeTypedHttpError, oneToMany, parse, parseHelp, parseQualifiedName, parseSyncApplyBatch, payloadMatchesRow, planForeignKeyCreation, planPostgresPermissions, planPostgresSystemTimestampMigrations, postgresRevisionCandidates, postgresRevisionCondition, processSyncApplyBatch, pruneAiUsage, pruneChangeFeed, pruneExpiredContexts, pruneRunOnceClaims, publishArtifactFiles, publishAtomicArtifact, qualifiedNamesEqual, queryStringDecoderFor, readAgentModuleDocs, readDispatchHealth, readJobHealth, readMethodDecoratorConfig, readMigrationStatus, readPackageAgentDoc, readRecentChanges, readRegistryDrift, readScheduleHealth, readSystemDiagnostics, redactDatabaseUrl, redactDatabaseUrlsInText, registerChangeFeedWriter, registerCompatibleFieldDecorator, registerCompatibleMethodDecorator, registerConfigResolver, registerFilesystemAdapterFactory, registerOptionalDependency, registerRetentionTask, renderHelp, requireAuditOptions, resetChangeFeedWarnings, resetChangeSignals, resetCollectionCache, resetConfigResolvers, resetVerifiedTables, resolveAgentModuleDocPaths, resolveApiMethodExposure, resolveAuthorizedChangeFeedTables, resolveCustomActionMetadata, resolveDatabase, resolveDbCacheKey, resolveDeclaredScopeMismatch, resolveDispatchTenantId, resolveDispatchTenantScope, resolveDisplayLabelField, resolveEffectiveActionMetadata, resolveExistingRunOnceClaim, resolveFileKnowledgeConfig, resolveGetStringFilter, resolveHelp, resolveLazyConfig, resolveListLimit, resolveListOffset, resolveMCPToolListCacheHint, resolveOperationPermissionAlias, resolvePostgresTimeouts, resolveReadCacheControl, resolveRegisteredObjectName, resolveTenantEtagDiscriminator, restFieldReadPermissions, restMethodForApiAction, runCascadeDelete, runOnce, runRetentionSweep, runWithTenantGate, safeParse, safeStringify, sanitizeMessagePaths, setChangeFeedAuthorizer, setChangeFeedEntryVisibility, setDispatchTenantResolver, setTenantEntryPointRunner, setTenantScopedClassResolver, setupSwaggerUI, shouldIncludeMethod, signalVisibleToTenant, smrt, smrtPlugin, smrt as smrtRegistry, snapshotRegistry, sortMCPTools, stableStringify, startRestServer, staticManifest, stopCacheInvalidationListeners, stopChangeSignalListeners, stringify, subscribeToChangeSignals, tableExists, toCustomActionBoolean, toCustomActionDate, toCustomActionNumber, toSnakeCase, tryReserveChangeEventSubscriberSlot, unregisterChangeFeedWriter, unregisterConfigResolver, unregisterRetentionTask, usesEmbeddedRevisionFallback, validateHelp, validatePostgresPermissionContract, validateSyncApplyItem, validateToolCall, versionConditionalResponse, warnIfSharedCacheNeutralized, withAuditContext, withEmbeddedWriteQueue, withEmbeddedWriteTransaction, writeAudit };
116
+ export { AGENT_SURFACE_HASH_PREFIX, AIError, APIGenerator, AiUsageCollector, AiUsagePersistenceHandler, BOOTED_PROVENANCE, CACHE_INVALIDATION_CHANNEL, CHANGE_FEED_CREDENTIAL_TABLES, CHANGE_FEED_INTERCEPTOR_NAME, CHANGE_FEED_TABLE, CHANGE_SIGNAL_CHANNEL, CRUD_OPERATIONS, ConfigurationError, ContentHasher, CosineSimilarity, DEFAULT_AI_COST_RATES, DEFAULT_CHANGES_LIMIT, DEFAULT_DATA_QUERY_PAGE_LIMIT, DEFAULT_DATA_QUERY_RESULT_BYTES, DEFAULT_DISPLAY_LABEL_FIELDS, DEFAULT_EMBEDDING_CONFIG, DEFAULT_EVENTS_HEARTBEAT_MS, DEFAULT_EVENTS_MAX_SUBSCRIBERS, DEFAULT_EVENTS_RETRY_AFTER_SECONDS, DEFAULT_FACET_LIMIT, DEFAULT_LEARNING_CONFIG, DEFAULT_LIST_LIMIT, DEFAULT_LIST_ORDER_BY, DEFAULT_POSTGRES_TIMEOUTS, DEFAULT_RETENTION_POLICY, DIAGNOSTICS_DEFAULT_LIMIT, DataQueryValidationError, DatabaseError, Dispatch, DispatchBus, DispatchCollection, DispatchSubscription, DispatchSubscriptionCollection, EmbeddingProvider, EmbeddingStorage, EmbeddingUnavailableError, ErrorUtils, FIELD_UI_FORMATS, FIELD_UI_FORMAT_TYPES, FIELD_UI_WIDGETS, FIELD_UI_WIDGET_TYPES, FilesystemError, GlobalInterceptors, IN_LIST_CHUNK_SIZE, LearningMemory, LiveSchemaParityError, MAX_CHANGES_LIMIT, MAX_DATA_QUERY_CURSOR_LENGTH, MAX_DATA_QUERY_FACETS, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_FILTER_DEPTH, MAX_DATA_QUERY_IN_VALUES, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_PAGE_LIMIT, MAX_DATA_QUERY_REQUEST_BYTES, MAX_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_WARNINGS, MAX_FACET_FIELDS, MAX_FACET_LIMIT, MAX_LIST_LIMIT, MAX_STI_READ_SCOPE_TYPES, MAX_SYNC_APPLY_BATCH_SIZE, MCPGenerator, MCP_STABLE_CATALOG_TTL_MS, MOCK_PROVIDER_OPTION, MODULE_DOC_HASH_PREFIX, ManifestBuilder, ManifestGenerator, ManifestManager, MetricsAdapter, NetworkError, ObjectRegistry, PLAYBOOK_PREFLIGHT_CAPABILITY, PLAYBOOK_PREFLIGHT_ROUTE_SEGMENT, POSTGRES_REVISION_GUARD_EXPRESSION, POSTGRES_TIMEOUT_ENV_VARS, PRIVATE_READ_CACHE_CONTROL, PubSubAdapter, QueryBoundsError, QueryOrderByError, RECIPE_DEMO_MODES, RELATIONSHIP_ROLES, RUN_ONCE_CLAIMS_TABLE, RunOnceClaimError, RuntimeError, SMRT_COLLECTION_BASE_NAMES, SMRT_CUSTOM_ACTION_ERROR_METADATA_KEY, SMRT_SCHEMA_VERSION, SYNC_APPLY_ROUTE_SEGMENTS, SYNC_APPLY_UUID_PATTERN, SYSTEM_DIAGNOSTICS_TABLES, SYSTEM_TABLE_NAMES, SchemaComparer, SignalBus, SignalSanitizer, SmrtClass, SmrtCollection, SmrtError, SmrtHierarchical, SmrtJunction, SmrtJunctionBase, SmrtMCPServer, SmrtObject, SmrtPolymorphicAssociation, SmrtRecipe, TenantIsolationError, ValidationError, ValidationReport, ValidationUtils, appendChange, appendChanges, applyOneToManyChildAccessors, applyPendingDecoratorRegistrations, applyPostgresPermissions, applyPostgresRuntimeTimeouts, applySyncWritablePolicy, assertPlainJson, assertPostgresSystemTimestampsCurrent, assertScopedPackageName, auditChanges, auditSnapshot, broadcastCacheInvalidation, buildCascadePlan, buildChangeEventStream, buildConnectSection, buildCustomActionInputSchema, buildCustomActionInvocationArgs, buildDefaultListOrderBy, buildDomainKnowledgeManifest, buildGlossary, buildKnowledgeGraph, bumpChangeFeed, canonicalReadRepresentation, canonicalizeDataQuery, cascadeReferencesTo, changeEventSubscribersAtCapacity, checkKnowledgeGraphFreshness, checkLiveSchemaParity, childAccessorName, chunkArray, classifyDatabaseError, classifyDialectMessage, classifyMethodWireability, classifyParameterWireability, clearRetentionTasks, clone, coerceCustomActionArgument, collectForeignKeyOrphanCounts, computeBodyEtag, computeRuntimeWebManifestHash, computeTableVersionEtag, conditionalJsonResponse, config, convertTypeToJsonSchema, createClassNamePredicate, createDataQueryFingerprint, createDispatchBus, createFilesystemAdapter, createGeneratedCollectionAccess, createInterceptorContext, createMCPServer, createManifestClassNamePredicate, createQualifiedName, createRecipeHelp, createRestServer, createSmrtClient, createSmrtServer, crossPackageRef, customActionParameterInputName, declareChangeFeedSensitiveTable, declaredTypeAcceptsDate, declaresRuntimeRestRoute, declaresRuntimeRestRouteShape, deriveRecipeDemo, deriveRunOnceClaimKey, describeDisplayLabel, detectEngine, digestRunOnceContent, discoverKnowledgeArtifactPaths, discoverManifestEntry, discoverScopedPackageDirectories, displayLabelFieldProblem, drainChangeFeed, effectiveRecipeDemo, ensureBootstrapSystemTableCompatibility, ensureCacheInvalidationListener, ensureChangeFeedTable, ensureDeferredSystemTableCompatibility, ensureDispatchSubscriptionsSystemTableCompatibility, ensureDispatchSystemTableCompatibility, ensureJobEventsSystemTableCompatibility, ensureJobsSystemTableCompatibility, ensureLegacySystemTableCompatibility, ensureSystemTables, estimateAiUsageCost, eventStreamCapacityExceededResponse, executeCollectionReadPlan, executeDecision, executeToolCall, executeToolCalls, exposedCrudVerbs, extractFieldRefs, field, fieldTypeToJsonSchema, filterVisibleChangeFeedEntries, findCollectionWriteEscalations, findField, findManifestEntryByQualifiedName, findSelectorFor, foreignKey, formatToolResults, generateDDLForEngine, generateOpenAPISpec, generateSchemaDiff, generateToolFromMethod, generateToolManifest, getActiveAuditOptions, getAdapterInfo, getAuthorizedChangesSince, getAuthorizedTenantScopedChangesSince, getCacheGeneration, getChangeFeedSensitiveTables, getChangesSince, getClassConfigResolvers, getClassName, getConfigResolver, getDatabaseEngine, getManifest, getPackageFromQualifiedName, getRetentionTasks, getSQLFromDiff, getSystemTableShapes, getTableVersion, getTenantScopedChangesSince, getTestDatabase, handlePlaybookPreflightRoute, hasActionableChanges, hasBrowserOption, hasChangeFeedEntryVisibilityHook, hasChangeFeedTableAuthorizerHook, helpToMarkdown, ifNoneMatchHasConcreteMatch, ifNoneMatchSatisfied, importOptionalDependency, inheritCollectionExposure, inheritedCollectionSurface, invalidateCollectionCache, isAbortedTransactionError, isAdvisoryOnlyChange, isApiActionEnabledForObject, isAudited, isChangeFeedDenyAll, isChangeFeedEntryVisible, isChangeFeedSensitiveTable, isCrudOperation, isCrudToolAction, isDatabaseInterface, isDeterministicDatabaseError, isEmbeddedDatabase, isFieldUIFormat, isFieldUIWidget, isFrameworkBaseClass, isFromPackage, isLazyConfigSentinel, isManualOrAdvisoryChange, isMockableProvider, isNotNullViolationError, isPostgresDatabase, isQualifiedName, isRelationshipRole, isRestActionRoutable, isRestRoutePublic, isScopedPackageName, isSensitiveConnectionParam, isServerProvider, isSmrtCollectionExtendsName, isStaleWrite, isTenantScopedClassResolved, isTransientDatabaseError, isType, isUniqueViolationError, isValid, listConfigResolvers, loadExternalManifest, loadExternalManifestSync, loadLocalTestManifestSync, loadManifestFromPathSync, manifest, manyToMany, meta, method, migratePostgresSystemTimestamps, normalizeCustomActionFailure, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema, normalizeEventsMaxSubscribers, normalizeOnDelete, normalizeTypedHttpError, oneToMany, parse, parseHelp, parseQualifiedName, parseSyncApplyBatch, payloadMatchesRow, planForeignKeyCreation, planPostgresPermissions, planPostgresSystemTimestampMigrations, postgresRevisionCandidates, postgresRevisionCondition, processSyncApplyBatch, pruneAiUsage, pruneChangeFeed, pruneExpiredContexts, pruneRunOnceClaims, publishArtifactFiles, publishAtomicArtifact, qualifiedNamesEqual, queryStringDecoderFor, readAgentModuleDocs, readDispatchHealth, readJobHealth, readMethodDecoratorConfig, readMigrationStatus, readPackageAgentDoc, readRecentChanges, readRegistryDrift, readScheduleHealth, readSystemDiagnostics, redactDatabaseUrl, redactDatabaseUrlsInText, registerChangeFeedWriter, registerCompatibleFieldDecorator, registerCompatibleMethodDecorator, registerConfigResolver, registerFilesystemAdapterFactory, registerOptionalDependency, registerRetentionTask, renderHelp, requireAuditOptions, resetChangeFeedWarnings, resetChangeSignals, resetCollectionCache, resetConfigResolvers, resetVerifiedTables, resolveAgentModuleDocPaths, resolveApiMethodExposure, resolveAuthorizedChangeFeedTables, resolveCustomActionMetadata, resolveDatabase, resolveDbCacheKey, resolveDeclaredScopeMismatch, resolveDispatchTenantId, resolveDispatchTenantScope, resolveDisplayLabelField, resolveEffectiveActionMetadata, resolveExistingRunOnceClaim, resolveFileKnowledgeConfig, resolveGetStringFilter, resolveHelp, resolveLazyConfig, resolveListLimit, resolveListOffset, resolveMCPToolListCacheHint, resolveOperationPermissionAlias, resolvePostgresTimeouts, resolveReadCacheControl, resolveRegisteredObjectName, resolveTenantEtagDiscriminator, restFieldReadPermissions, restMethodForApiAction, runCascadeDelete, runOnce, runRetentionSweep, runWithTenantGate, safeParse, safeStringify, sanitizeMessagePaths, setChangeFeedAuthorizer, setChangeFeedEntryVisibility, setDispatchTenantResolver, setTenantEntryPointRunner, setTenantScopedClassResolver, setupSwaggerUI, shouldIncludeMethod, signalVisibleToTenant, smrt, smrtPlugin, smrt as smrtRegistry, snapshotRegistry, sortMCPTools, stableStringify, startRestServer, staticManifest, stopCacheInvalidationListeners, stopChangeSignalListeners, stringify, subscribeToChangeSignals, tableExists, toCustomActionBoolean, toCustomActionDate, toCustomActionNumber, toSnakeCase, tryReserveChangeEventSubscriberSlot, unregisterChangeFeedWriter, unregisterConfigResolver, unregisterRetentionTask, usesEmbeddedRevisionFallback, validateHelp, validatePostgresPermissionContract, validateSyncApplyItem, validateToolCall, versionConditionalResponse, warnIfSharedCacheNeutralized, withAuditContext, withEmbeddedWriteQueue, withEmbeddedWriteTransaction, writeAudit };
@@ -114,6 +114,11 @@ export interface QueryInterceptResult {
114
114
  * or return modified data to transform the operation.
115
115
  */
116
116
  export interface CollectionInterceptor {
117
+ /** Mandatory column predicates on persisted mutations. Owning policies only;
118
+ * callers cannot supply or override these through model patches/save options.
119
+ * Returning a predicate opts the model out of unguarded upsert fast paths.
120
+ */
121
+ writeGuard?(instance: SmrtObject, context: InterceptorContext): Record<string, unknown> | undefined;
117
122
  /** Opt in only when grouping before/persist/after phases is safe. */
118
123
  bulkMutation?: BulkMutationCapability;
119
124
  /** Unique identifier for this interceptor (for debugging/unregistration) */
@@ -288,6 +293,8 @@ export declare class GlobalInterceptors {
288
293
  * @internal Called by SmrtCollection.query()
289
294
  */
290
295
  static executeAfterQuery<T extends SmrtObject>(className: string, results: T[], context: InterceptorContext): Promise<T[]>;
296
+ /** Resolve mandatory predicates immediately before a database write. */
297
+ static executeWriteGuard(instance: SmrtObject, context: InterceptorContext): Record<string, unknown> | undefined;
291
298
  /** Whether every registered mutation interceptor consents to batching. */
292
299
  static supportsBulkMutation(className: string): boolean;
293
300
  /** Run the approved completion once per interceptor, preserving priority. */
@@ -1 +1 @@
1
- {"version":3,"file":"interceptors.d.ts","sourceRoot":"","sources":["../src/interceptors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,mCAAmC;IACnC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxD,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAC9D,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,iFAAiF;IACjF,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,UAAU,CAAC,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,kBAAkB,GAC1B,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;;;;;OAMG;IACH,SAAS,CAAC,CAAC,CAAC,SAAS,UAAU,EAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,kBAAkB,GAC1B,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;;OAMG;IACH,SAAS,CAAC,CACR,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,OAAO,EAAE,kBAAkB,GAEzB,MAAM,GACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,IAAI,GACJ,OAAO,CAAC,IAAI,CAAC,CAAC;IAElB;;;;;;OAMG;IACH,QAAQ,CAAC,CAAC,CAAC,SAAS,UAAU,EAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAClB,OAAO,EAAE,kBAAkB,GAC1B,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;;OAMG;IACH,WAAW,CAAC,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,kBAAkB,GAEzB,oBAAoB,GACpB,OAAO,CAAC,oBAAoB,CAAC,GAC7B,IAAI,GACJ,OAAO,CAAC,IAAI,CAAC,CAAC;IAElB;;;;;;OAMG;IACH,UAAU,CAAC,CAAC,CAAC,SAAS,UAAU,EAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,kBAAkB,GAC1B,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,UAAU,CAAC,CACT,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;OAIG;IACH,SAAS,CAAC,CACR,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;;OAKG;IACH,YAAY,CAAC,CACX,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,CACV,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,kBAAkB,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,OAAO,CAAC,MAAM,KAAK,YAAY,GAK9B;IAED;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,GAAG,IAAI;IAkBzD;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CACf,iBAAiB,EAAE,qBAAqB,GAAG,MAAM,GAChD,OAAO;IAaV;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,SAAS,qBAAqB,EAAE;IAIjD;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,OAAO;IAIjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAQ7B;;;OAGG;WACU,iBAAiB,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC;IAmBvB;;;OAGG;WACU,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAChD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAmBf;;;OAGG;WACU,gBAAgB,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAmB5C;;;OAGG;WACU,eAAe,CAAC,CAAC,SAAS,UAAU,EAC/C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAClB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAepB;;;OAGG;WACU,kBAAkB,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,oBAAoB,CAAC;IAsBhC;;;OAGG;WACU,iBAAiB,CAAC,CAAC,SAAS,UAAU,EACjD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAmBf,0EAA0E;IAC1E,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAYvD,6EAA6E;WAChE,gBAAgB,CAC3B,SAAS,EAAE,WAAW,GAAG,aAAa,EACtC,OAAO,EAAE,iBAAiB,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC;IAahB;;;OAGG;WACU,iBAAiB,CAC5B,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAQhB;;;OAGG;WACU,gBAAgB,CAC3B,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAQhB;;;OAGG;WACU,mBAAmB,CAC9B,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAQhB;;;OAGG;WACU,kBAAkB,CAC7B,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;CAOjB;AASD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GACb;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAIpD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAC1C,cAAc,CAAC,EAAE,MAAM,EACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,kBAAkB,CAAC,EAAE,MAAM,GAC1B,kBAAkB,CASpB"}
1
+ {"version":3,"file":"interceptors.d.ts","sourceRoot":"","sources":["../src/interceptors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,mCAAmC;IACnC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxD,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAC9D,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,iFAAiF;IACjF,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,UAAU,CAAC,CACT,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAEvC,qEAAqE;IACrE,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,UAAU,CAAC,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,kBAAkB,GAC1B,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;;;;;OAMG;IACH,SAAS,CAAC,CAAC,CAAC,SAAS,UAAU,EAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,kBAAkB,GAC1B,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;;OAMG;IACH,SAAS,CAAC,CACR,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,OAAO,EAAE,kBAAkB,GAEzB,MAAM,GACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,IAAI,GACJ,OAAO,CAAC,IAAI,CAAC,CAAC;IAElB;;;;;;OAMG;IACH,QAAQ,CAAC,CAAC,CAAC,SAAS,UAAU,EAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAClB,OAAO,EAAE,kBAAkB,GAC1B,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;;OAMG;IACH,WAAW,CAAC,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,kBAAkB,GAEzB,oBAAoB,GACpB,OAAO,CAAC,oBAAoB,CAAC,GAC7B,IAAI,GACJ,OAAO,CAAC,IAAI,CAAC,CAAC;IAElB;;;;;;OAMG;IACH,UAAU,CAAC,CAAC,CAAC,SAAS,UAAU,EAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,kBAAkB,GAC1B,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,UAAU,CAAC,CACT,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;OAIG;IACH,SAAS,CAAC,CACR,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;;OAKG;IACH,YAAY,CAAC,CACX,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,CACV,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,kBAAkB,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,OAAO,CAAC,MAAM,KAAK,YAAY,GAK9B;IAED;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,GAAG,IAAI;IAkBzD;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CACf,iBAAiB,EAAE,qBAAqB,GAAG,MAAM,GAChD,OAAO;IAaV;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,SAAS,qBAAqB,EAAE;IAIjD;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,OAAO;IAIjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAQ7B;;;OAGG;WACU,iBAAiB,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC;IAmBvB;;;OAGG;WACU,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAChD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAmBf;;;OAGG;WACU,gBAAgB,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAmB5C;;;OAGG;WACU,eAAe,CAAC,CAAC,SAAS,UAAU,EAC/C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAClB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAepB;;;OAGG;WACU,kBAAkB,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,oBAAoB,CAAC;IAsBhC;;;OAGG;WACU,iBAAiB,CAAC,CAAC,SAAS,UAAU,EACjD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAmBf,wEAAwE;IACxE,MAAM,CAAC,iBAAiB,CACtB,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAkBtC,0EAA0E;IAC1E,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAavD,6EAA6E;WAChE,gBAAgB,CAC3B,SAAS,EAAE,WAAW,GAAG,aAAa,EACtC,OAAO,EAAE,iBAAiB,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC;IAahB;;;OAGG;WACU,iBAAiB,CAC5B,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAQhB;;;OAGG;WACU,gBAAgB,CAC3B,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAQhB;;;OAGG;WACU,mBAAmB,CAC9B,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAQhB;;;OAGG;WACU,kBAAkB,CAC7B,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;CAOjB;AASD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GACb;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAIpD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAC1C,cAAc,CAAC,EAAE,MAAM,EACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,kBAAkB,CAAC,EAAE,MAAM,GAC1B,kBAAkB,CASpB"}
@@ -158,9 +158,23 @@ var GlobalInterceptors = class {
158
158
  }
159
159
  return result;
160
160
  }
161
+ /** Resolve mandatory predicates immediately before a database write. */
162
+ static executeWriteGuard(instance, context) {
163
+ let result;
164
+ for (const interceptor of this.interceptors) {
165
+ const guard = interceptor.writeGuard?.(instance, context);
166
+ if (!guard) continue;
167
+ result ??= {};
168
+ for (const [key, value] of Object.entries(guard)) {
169
+ if (Object.hasOwn(result, key) && JSON.stringify(result[key]) !== JSON.stringify(value)) throw new Error("Conflicting mandatory write predicates");
170
+ result[key] = value;
171
+ }
172
+ }
173
+ return result;
174
+ }
161
175
  /** Whether every registered mutation interceptor consents to batching. */
162
176
  static supportsBulkMutation(className) {
163
- return this.interceptors.every((interceptor) => !(interceptor.beforeSave || interceptor.afterSave || interceptor.beforeDelete || interceptor.afterDelete) || interceptor.bulkMutation?.compatible(className) === true);
177
+ return this.interceptors.every((interceptor) => !(interceptor.writeGuard || interceptor.beforeSave || interceptor.afterSave || interceptor.beforeDelete || interceptor.afterDelete) || interceptor.bulkMutation?.compatible(className) === true);
164
178
  }
165
179
  /** Run the approved completion once per interceptor, preserving priority. */
166
180
  static async executeBulkAfter(operation, entries) {
@@ -1 +1 @@
1
- {"version":3,"file":"interceptors.js","names":[],"sources":["../src/interceptors.ts"],"sourcesContent":["/**\n * Global Interceptors System for SMRT Collections and Objects\n *\n * Provides a plugin architecture for intercepting collection and object operations.\n * This enables external packages (like @happyvertical/smrt-tenancy) to register\n * interceptors without creating circular dependencies.\n *\n * Pattern: Static methods on GlobalInterceptors class with globalThis state\n * (matches ObjectRegistry pattern for cross-module state sharing)\n *\n * @example Basic interceptor registration\n * ```typescript\n * import { GlobalInterceptors } from '@happyvertical/smrt-core';\n *\n * // Register a beforeList interceptor\n * GlobalInterceptors.register({\n * beforeList(className, options) {\n * console.log(`Listing ${className}`);\n * return options; // Return modified options\n * }\n * });\n * ```\n *\n * @example Tenancy interceptor (from smrt-tenancy)\n * ```typescript\n * GlobalInterceptors.register({\n * beforeList(className, options, context) {\n * const tenantId = getCurrentTenantId();\n * if (tenantId && isTenantScoped(className)) {\n * return {\n * ...options,\n * where: { ...options.where, tenantId }\n * };\n * }\n * return options;\n * },\n * beforeSave(instance, context) {\n * // Validate tenant on save\n * }\n * });\n * ```\n *\n * @see https://github.com/happyvertical/smrt/issues/675\n */\n\nimport type { SmrtObject } from './object.js';\n\n/**\n * Context passed to interceptors with operation metadata\n */\nexport interface InterceptorContext {\n /** Name of the SMRT class being operated on */\n className: string;\n /** Exact registered identity when the simple class name is ambiguous. */\n qualifiedClassName?: string;\n /** Name of the collection (if applicable) */\n collectionName?: string;\n /** Timestamp of the operation */\n timestamp: Date;\n /** Operation type for debugging */\n operation: 'list' | 'get' | 'query' | 'save' | 'delete';\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/** One instance and its original context in a compatible bulk lifecycle. */\nexport interface BulkMutationEntry {\n instance: SmrtObject;\n context: InterceptorContext;\n}\n\n/**\n * Explicit consent to grouped persistence. Unknown mutation interceptors retain\n * the sequential lifecycle. Compatibility must not perform I/O or mutate state.\n * Before hooks must be pure apart from instance/context mutation: preparation\n * can discover an unsupported row shape and return to the ordinary lifecycle.\n */\nexport interface BulkMutationCapability {\n compatible(className: string): boolean;\n afterSave?(entries: BulkMutationEntry[]): Promise<void>;\n afterDelete?(entries: BulkMutationEntry[]): Promise<void>;\n}\n\n/**\n * Options for list operations\n */\nexport interface ListOptions {\n /** AND-only object or DNF (outer OR, inner AND) collection predicate. */\n where?: Record<string, unknown> | Record<string, unknown>[][];\n orderBy?: string | string[];\n limit?: number;\n offset?: number;\n select?: readonly string[];\n include?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Options for query operations (raw SQL)\n */\nexport interface QueryOptions {\n /** The raw SQL query */\n sql: string;\n /** Query parameters */\n params: unknown[];\n /** If true, allow raw SQL on tenant-scoped classes (requires explicit opt-in) */\n allowRawOnTenantScoped?: boolean;\n}\n\n/**\n * Result from query interceptor - can modify SQL or throw to block\n */\nexport interface QueryInterceptResult {\n sql: string;\n params: unknown[];\n}\n\n/**\n * Interface for collection/object interceptors\n *\n * All methods are optional. Return void to pass through unchanged,\n * or return modified data to transform the operation.\n */\nexport interface CollectionInterceptor {\n /** Opt in only when grouping before/persist/after phases is safe. */\n bulkMutation?: BulkMutationCapability;\n\n /** Unique identifier for this interceptor (for debugging/unregistration) */\n name?: string;\n\n /** Priority for execution order (higher = earlier). Default: 0 */\n priority?: number;\n\n /**\n * Called before list() operations\n * @param className - Name of the class being listed\n * @param options - List options (where, orderBy, limit, select, etc.)\n * @param context - Operation context\n * @returns Modified options or void to pass through\n */\n beforeList?(\n className: string,\n options: ListOptions,\n context: InterceptorContext,\n ): ListOptions | Promise<ListOptions> | void | Promise<void>;\n\n /**\n * Called after list() operations with results\n * @param className - Name of the class\n * @param results - Array of hydrated instances\n * @param context - Operation context\n * @returns Modified results or void to pass through\n */\n afterList?<T extends SmrtObject>(\n className: string,\n results: T[],\n context: InterceptorContext,\n ): T[] | Promise<T[]> | void | Promise<void>;\n\n /**\n * Called before get() operations\n * @param className - Name of the class\n * @param filter - ID, slug, or filter object\n * @param context - Operation context\n * @returns Modified filter or void to pass through\n */\n beforeGet?(\n className: string,\n filter: string | Record<string, unknown>,\n context: InterceptorContext,\n ):\n | string\n | Record<string, unknown>\n | Promise<string | Record<string, unknown>>\n | void\n | Promise<void>;\n\n /**\n * Called after get() operations with result\n * @param className - Name of the class\n * @param instance - Hydrated instance or null if not found\n * @param context - Operation context\n * @returns Modified instance, null, or void to pass through\n */\n afterGet?<T extends SmrtObject>(\n className: string,\n instance: T | null,\n context: InterceptorContext,\n ): T | null | Promise<T | null> | void | Promise<void>;\n\n /**\n * Called before query() operations (raw SQL)\n * @param className - Name of the class\n * @param options - Query options with SQL and params\n * @param context - Operation context\n * @returns Modified query options, or throw to block the query\n */\n beforeQuery?(\n className: string,\n options: QueryOptions,\n context: InterceptorContext,\n ):\n | QueryInterceptResult\n | Promise<QueryInterceptResult>\n | void\n | Promise<void>;\n\n /**\n * Called after query() operations with results\n * @param className - Name of the class\n * @param results - Array of hydrated instances\n * @param context - Operation context\n * @returns Modified results or void to pass through\n */\n afterQuery?<T extends SmrtObject>(\n className: string,\n results: T[],\n context: InterceptorContext,\n ): T[] | Promise<T[]> | void | Promise<void>;\n\n /**\n * Called before save() operations\n * @param instance - The object being saved\n * @param context - Operation context\n * @returns void (modify instance in place) or throw to block\n */\n beforeSave?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): void | Promise<void>;\n\n /**\n * Called after save() operations\n * @param instance - The saved object\n * @param context - Operation context\n */\n afterSave?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): void | Promise<void>;\n\n /**\n * Called before delete() operations\n * @param instance - The object being deleted\n * @param context - Operation context\n * @returns void or throw to block\n */\n beforeDelete?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): void | Promise<void>;\n\n /**\n * Called after delete() operations\n * @param instance - The deleted object\n * @param context - Operation context\n */\n afterDelete?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): void | Promise<void>;\n}\n\n/**\n * Extend globalThis to include interceptors state.\n * Using globalThis ensures all module instances share the same interceptors,\n * which is critical in monorepos where the same package can be loaded\n * from different paths.\n *\n * @see ObjectRegistry for similar pattern\n */\ndeclare global {\n // eslint-disable-next-line no-var\n var __smrtInterceptors: unknown[] | undefined;\n}\n\n/**\n * Global Interceptors Registry\n *\n * Manages collection/object interceptors for the SMRT framework.\n * External packages can register interceptors to hook into operations\n * without modifying core code.\n */\nexport class GlobalInterceptors {\n /**\n * Get the global interceptors array (lazy-initialized)\n */\n private static get interceptors(): CollectionInterceptor[] {\n if (!globalThis.__smrtInterceptors) {\n globalThis.__smrtInterceptors = [];\n }\n return globalThis.__smrtInterceptors as CollectionInterceptor[];\n }\n\n /**\n * Register an interceptor\n *\n * @param interceptor - The interceptor to register\n * @example\n * ```typescript\n * GlobalInterceptors.register({\n * name: 'tenancy',\n * priority: 100,\n * beforeList(className, options) {\n * // Add tenant filtering\n * return { ...options, where: { ...options.where, tenantId: 'xxx' } };\n * }\n * });\n * ```\n */\n static register(interceptor: CollectionInterceptor): void {\n // Check for duplicate by name\n if (interceptor.name) {\n const existing = this.interceptors.findIndex(\n (i) => i.name === interceptor.name,\n );\n if (existing >= 0) {\n // Replace existing interceptor with same name\n this.interceptors[existing] = interceptor;\n this.sortByPriority();\n return;\n }\n }\n\n this.interceptors.push(interceptor);\n this.sortByPriority();\n }\n\n /**\n * Unregister an interceptor by reference or name\n *\n * @param interceptorOrName - The interceptor instance or name to remove\n * @returns true if removed, false if not found\n */\n static unregister(\n interceptorOrName: CollectionInterceptor | string,\n ): boolean {\n const idx =\n typeof interceptorOrName === 'string'\n ? this.interceptors.findIndex((i) => i.name === interceptorOrName)\n : this.interceptors.indexOf(interceptorOrName);\n\n if (idx >= 0) {\n this.interceptors.splice(idx, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Clear all interceptors (useful for testing)\n */\n static clear(): void {\n globalThis.__smrtInterceptors = [];\n }\n\n /**\n * Get all registered interceptors (readonly)\n */\n static getAll(): readonly CollectionInterceptor[] {\n return [...this.interceptors];\n }\n\n /**\n * Check if any interceptors are registered\n */\n static hasInterceptors(): boolean {\n return this.interceptors.length > 0;\n }\n\n /**\n * Sort interceptors by priority (higher priority first)\n */\n private static sortByPriority(): void {\n this.interceptors.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Execution methods - called by SmrtCollection and SmrtObject\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Execute beforeList interceptors\n * @internal Called by SmrtCollection.list()\n */\n static async executeBeforeList(\n className: string,\n options: ListOptions,\n context: InterceptorContext,\n ): Promise<ListOptions> {\n let result = options;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeList) {\n const modified = await interceptor.beforeList(\n className,\n result,\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute afterList interceptors\n * @internal Called by SmrtCollection.list()\n */\n static async executeAfterList<T extends SmrtObject>(\n className: string,\n results: T[],\n context: InterceptorContext,\n ): Promise<T[]> {\n let result = results;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.afterList) {\n const modified = await interceptor.afterList(\n className,\n result,\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified as T[];\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute beforeGet interceptors\n * @internal Called by SmrtCollection.get()\n */\n static async executeBeforeGet(\n className: string,\n filter: string | Record<string, unknown>,\n context: InterceptorContext,\n ): Promise<string | Record<string, unknown>> {\n let result = filter;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeGet) {\n const modified = await interceptor.beforeGet(\n className,\n result,\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute afterGet interceptors\n * @internal Called by SmrtCollection.get()\n */\n static async executeAfterGet<T extends SmrtObject>(\n className: string,\n instance: T | null,\n context: InterceptorContext,\n ): Promise<T | null> {\n let result = instance;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.afterGet) {\n const modified = await interceptor.afterGet(className, result, context);\n if (modified !== undefined) {\n result = modified as T | null;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute beforeQuery interceptors\n * @internal Called by SmrtCollection.query()\n */\n static async executeBeforeQuery(\n className: string,\n options: QueryOptions,\n context: InterceptorContext,\n ): Promise<QueryInterceptResult> {\n let result: QueryInterceptResult = {\n sql: options.sql,\n params: options.params,\n };\n\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeQuery) {\n const modified = await interceptor.beforeQuery(\n className,\n { ...options, ...result },\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute afterQuery interceptors\n * @internal Called by SmrtCollection.query()\n */\n static async executeAfterQuery<T extends SmrtObject>(\n className: string,\n results: T[],\n context: InterceptorContext,\n ): Promise<T[]> {\n let result = results;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.afterQuery) {\n const modified = await interceptor.afterQuery(\n className,\n result,\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified as T[];\n }\n }\n }\n\n return result;\n }\n\n /** Whether every registered mutation interceptor consents to batching. */\n static supportsBulkMutation(className: string): boolean {\n return this.interceptors.every(\n (interceptor) =>\n !(\n interceptor.beforeSave ||\n interceptor.afterSave ||\n interceptor.beforeDelete ||\n interceptor.afterDelete\n ) || interceptor.bulkMutation?.compatible(className) === true,\n );\n }\n\n /** Run the approved completion once per interceptor, preserving priority. */\n static async executeBulkAfter(\n operation: 'afterSave' | 'afterDelete',\n entries: BulkMutationEntry[],\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n const bulk = interceptor.bulkMutation?.[operation];\n if (bulk) {\n await bulk(entries);\n } else {\n for (const { instance, context } of entries) {\n await interceptor[operation]?.(instance, context);\n }\n }\n }\n }\n\n /**\n * Execute beforeSave interceptors\n * @internal Called by SmrtObject.save()\n */\n static async executeBeforeSave(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeSave) {\n await interceptor.beforeSave(instance, context);\n }\n }\n }\n\n /**\n * Execute afterSave interceptors\n * @internal Called by SmrtObject.save()\n */\n static async executeAfterSave(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n if (interceptor.afterSave) {\n await interceptor.afterSave(instance, context);\n }\n }\n }\n\n /**\n * Execute beforeDelete interceptors\n * @internal Called by SmrtObject.delete()\n */\n static async executeBeforeDelete(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeDelete) {\n await interceptor.beforeDelete(instance, context);\n }\n }\n }\n\n /**\n * Execute afterDelete interceptors\n * @internal Called by SmrtObject.delete()\n */\n static async executeAfterDelete(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n if (interceptor.afterDelete) {\n await interceptor.afterDelete(instance, context);\n }\n }\n }\n}\n\n/**\n * Canonical UUID shape used by `SmrtCollection.get()` to decide whether a\n * string filter is an id or a slug.\n */\nconst GET_STRING_FILTER_UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Resolve a string filter to the WHERE shape `SmrtCollection.get()` gives it:\n * a UUID string becomes `{ id }`, anything else becomes the natural-key lookup\n * `{ slug, context: '' }`.\n *\n * This is the single source of truth for that string-filter contract. Any\n * `beforeGet` interceptor that rewrites a string filter into an object filter\n * MUST resolve it through this helper first — the tenancy interceptor used to\n * rewrite every string to `{ id: filter, tenantId }`, which broke get-by-slug\n * under an active tenant context (null on SQLite, a uuid cast error on\n * PostgreSQL native-uuid id columns). See #2365.\n *\n * @param filter - The string filter passed to `get()`\n * @returns The object filter `get()` would build for that string\n */\nexport function resolveGetStringFilter(\n filter: string,\n): { id: string } | { slug: string; context: string } {\n return GET_STRING_FILTER_UUID_PATTERN.test(filter)\n ? { id: filter }\n : { slug: filter, context: '' };\n}\n\n/**\n * Helper function to create an interceptor context\n * @internal\n */\nexport function createInterceptorContext(\n className: string,\n operation: InterceptorContext['operation'],\n collectionName?: string,\n metadata?: Record<string, unknown>,\n qualifiedClassName?: string,\n): InterceptorContext {\n return {\n className,\n collectionName,\n operation,\n timestamp: new Date(),\n metadata,\n qualifiedClassName,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"interceptors.js","names":[],"sources":["../src/interceptors.ts"],"sourcesContent":["/**\n * Global Interceptors System for SMRT Collections and Objects\n *\n * Provides a plugin architecture for intercepting collection and object operations.\n * This enables external packages (like @happyvertical/smrt-tenancy) to register\n * interceptors without creating circular dependencies.\n *\n * Pattern: Static methods on GlobalInterceptors class with globalThis state\n * (matches ObjectRegistry pattern for cross-module state sharing)\n *\n * @example Basic interceptor registration\n * ```typescript\n * import { GlobalInterceptors } from '@happyvertical/smrt-core';\n *\n * // Register a beforeList interceptor\n * GlobalInterceptors.register({\n * beforeList(className, options) {\n * console.log(`Listing ${className}`);\n * return options; // Return modified options\n * }\n * });\n * ```\n *\n * @example Tenancy interceptor (from smrt-tenancy)\n * ```typescript\n * GlobalInterceptors.register({\n * beforeList(className, options, context) {\n * const tenantId = getCurrentTenantId();\n * if (tenantId && isTenantScoped(className)) {\n * return {\n * ...options,\n * where: { ...options.where, tenantId }\n * };\n * }\n * return options;\n * },\n * beforeSave(instance, context) {\n * // Validate tenant on save\n * }\n * });\n * ```\n *\n * @see https://github.com/happyvertical/smrt/issues/675\n */\n\nimport type { SmrtObject } from './object.js';\n\n/**\n * Context passed to interceptors with operation metadata\n */\nexport interface InterceptorContext {\n /** Name of the SMRT class being operated on */\n className: string;\n /** Exact registered identity when the simple class name is ambiguous. */\n qualifiedClassName?: string;\n /** Name of the collection (if applicable) */\n collectionName?: string;\n /** Timestamp of the operation */\n timestamp: Date;\n /** Operation type for debugging */\n operation: 'list' | 'get' | 'query' | 'save' | 'delete';\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/** One instance and its original context in a compatible bulk lifecycle. */\nexport interface BulkMutationEntry {\n instance: SmrtObject;\n context: InterceptorContext;\n}\n\n/**\n * Explicit consent to grouped persistence. Unknown mutation interceptors retain\n * the sequential lifecycle. Compatibility must not perform I/O or mutate state.\n * Before hooks must be pure apart from instance/context mutation: preparation\n * can discover an unsupported row shape and return to the ordinary lifecycle.\n */\nexport interface BulkMutationCapability {\n compatible(className: string): boolean;\n afterSave?(entries: BulkMutationEntry[]): Promise<void>;\n afterDelete?(entries: BulkMutationEntry[]): Promise<void>;\n}\n\n/**\n * Options for list operations\n */\nexport interface ListOptions {\n /** AND-only object or DNF (outer OR, inner AND) collection predicate. */\n where?: Record<string, unknown> | Record<string, unknown>[][];\n orderBy?: string | string[];\n limit?: number;\n offset?: number;\n select?: readonly string[];\n include?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Options for query operations (raw SQL)\n */\nexport interface QueryOptions {\n /** The raw SQL query */\n sql: string;\n /** Query parameters */\n params: unknown[];\n /** If true, allow raw SQL on tenant-scoped classes (requires explicit opt-in) */\n allowRawOnTenantScoped?: boolean;\n}\n\n/**\n * Result from query interceptor - can modify SQL or throw to block\n */\nexport interface QueryInterceptResult {\n sql: string;\n params: unknown[];\n}\n\n/**\n * Interface for collection/object interceptors\n *\n * All methods are optional. Return void to pass through unchanged,\n * or return modified data to transform the operation.\n */\nexport interface CollectionInterceptor {\n /** Mandatory column predicates on persisted mutations. Owning policies only;\n * callers cannot supply or override these through model patches/save options.\n * Returning a predicate opts the model out of unguarded upsert fast paths.\n */\n writeGuard?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Record<string, unknown> | undefined;\n\n /** Opt in only when grouping before/persist/after phases is safe. */\n bulkMutation?: BulkMutationCapability;\n\n /** Unique identifier for this interceptor (for debugging/unregistration) */\n name?: string;\n\n /** Priority for execution order (higher = earlier). Default: 0 */\n priority?: number;\n\n /**\n * Called before list() operations\n * @param className - Name of the class being listed\n * @param options - List options (where, orderBy, limit, select, etc.)\n * @param context - Operation context\n * @returns Modified options or void to pass through\n */\n beforeList?(\n className: string,\n options: ListOptions,\n context: InterceptorContext,\n ): ListOptions | Promise<ListOptions> | void | Promise<void>;\n\n /**\n * Called after list() operations with results\n * @param className - Name of the class\n * @param results - Array of hydrated instances\n * @param context - Operation context\n * @returns Modified results or void to pass through\n */\n afterList?<T extends SmrtObject>(\n className: string,\n results: T[],\n context: InterceptorContext,\n ): T[] | Promise<T[]> | void | Promise<void>;\n\n /**\n * Called before get() operations\n * @param className - Name of the class\n * @param filter - ID, slug, or filter object\n * @param context - Operation context\n * @returns Modified filter or void to pass through\n */\n beforeGet?(\n className: string,\n filter: string | Record<string, unknown>,\n context: InterceptorContext,\n ):\n | string\n | Record<string, unknown>\n | Promise<string | Record<string, unknown>>\n | void\n | Promise<void>;\n\n /**\n * Called after get() operations with result\n * @param className - Name of the class\n * @param instance - Hydrated instance or null if not found\n * @param context - Operation context\n * @returns Modified instance, null, or void to pass through\n */\n afterGet?<T extends SmrtObject>(\n className: string,\n instance: T | null,\n context: InterceptorContext,\n ): T | null | Promise<T | null> | void | Promise<void>;\n\n /**\n * Called before query() operations (raw SQL)\n * @param className - Name of the class\n * @param options - Query options with SQL and params\n * @param context - Operation context\n * @returns Modified query options, or throw to block the query\n */\n beforeQuery?(\n className: string,\n options: QueryOptions,\n context: InterceptorContext,\n ):\n | QueryInterceptResult\n | Promise<QueryInterceptResult>\n | void\n | Promise<void>;\n\n /**\n * Called after query() operations with results\n * @param className - Name of the class\n * @param results - Array of hydrated instances\n * @param context - Operation context\n * @returns Modified results or void to pass through\n */\n afterQuery?<T extends SmrtObject>(\n className: string,\n results: T[],\n context: InterceptorContext,\n ): T[] | Promise<T[]> | void | Promise<void>;\n\n /**\n * Called before save() operations\n * @param instance - The object being saved\n * @param context - Operation context\n * @returns void (modify instance in place) or throw to block\n */\n beforeSave?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): void | Promise<void>;\n\n /**\n * Called after save() operations\n * @param instance - The saved object\n * @param context - Operation context\n */\n afterSave?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): void | Promise<void>;\n\n /**\n * Called before delete() operations\n * @param instance - The object being deleted\n * @param context - Operation context\n * @returns void or throw to block\n */\n beforeDelete?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): void | Promise<void>;\n\n /**\n * Called after delete() operations\n * @param instance - The deleted object\n * @param context - Operation context\n */\n afterDelete?(\n instance: SmrtObject,\n context: InterceptorContext,\n ): void | Promise<void>;\n}\n\n/**\n * Extend globalThis to include interceptors state.\n * Using globalThis ensures all module instances share the same interceptors,\n * which is critical in monorepos where the same package can be loaded\n * from different paths.\n *\n * @see ObjectRegistry for similar pattern\n */\ndeclare global {\n // eslint-disable-next-line no-var\n var __smrtInterceptors: unknown[] | undefined;\n}\n\n/**\n * Global Interceptors Registry\n *\n * Manages collection/object interceptors for the SMRT framework.\n * External packages can register interceptors to hook into operations\n * without modifying core code.\n */\nexport class GlobalInterceptors {\n /**\n * Get the global interceptors array (lazy-initialized)\n */\n private static get interceptors(): CollectionInterceptor[] {\n if (!globalThis.__smrtInterceptors) {\n globalThis.__smrtInterceptors = [];\n }\n return globalThis.__smrtInterceptors as CollectionInterceptor[];\n }\n\n /**\n * Register an interceptor\n *\n * @param interceptor - The interceptor to register\n * @example\n * ```typescript\n * GlobalInterceptors.register({\n * name: 'tenancy',\n * priority: 100,\n * beforeList(className, options) {\n * // Add tenant filtering\n * return { ...options, where: { ...options.where, tenantId: 'xxx' } };\n * }\n * });\n * ```\n */\n static register(interceptor: CollectionInterceptor): void {\n // Check for duplicate by name\n if (interceptor.name) {\n const existing = this.interceptors.findIndex(\n (i) => i.name === interceptor.name,\n );\n if (existing >= 0) {\n // Replace existing interceptor with same name\n this.interceptors[existing] = interceptor;\n this.sortByPriority();\n return;\n }\n }\n\n this.interceptors.push(interceptor);\n this.sortByPriority();\n }\n\n /**\n * Unregister an interceptor by reference or name\n *\n * @param interceptorOrName - The interceptor instance or name to remove\n * @returns true if removed, false if not found\n */\n static unregister(\n interceptorOrName: CollectionInterceptor | string,\n ): boolean {\n const idx =\n typeof interceptorOrName === 'string'\n ? this.interceptors.findIndex((i) => i.name === interceptorOrName)\n : this.interceptors.indexOf(interceptorOrName);\n\n if (idx >= 0) {\n this.interceptors.splice(idx, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Clear all interceptors (useful for testing)\n */\n static clear(): void {\n globalThis.__smrtInterceptors = [];\n }\n\n /**\n * Get all registered interceptors (readonly)\n */\n static getAll(): readonly CollectionInterceptor[] {\n return [...this.interceptors];\n }\n\n /**\n * Check if any interceptors are registered\n */\n static hasInterceptors(): boolean {\n return this.interceptors.length > 0;\n }\n\n /**\n * Sort interceptors by priority (higher priority first)\n */\n private static sortByPriority(): void {\n this.interceptors.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Execution methods - called by SmrtCollection and SmrtObject\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Execute beforeList interceptors\n * @internal Called by SmrtCollection.list()\n */\n static async executeBeforeList(\n className: string,\n options: ListOptions,\n context: InterceptorContext,\n ): Promise<ListOptions> {\n let result = options;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeList) {\n const modified = await interceptor.beforeList(\n className,\n result,\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute afterList interceptors\n * @internal Called by SmrtCollection.list()\n */\n static async executeAfterList<T extends SmrtObject>(\n className: string,\n results: T[],\n context: InterceptorContext,\n ): Promise<T[]> {\n let result = results;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.afterList) {\n const modified = await interceptor.afterList(\n className,\n result,\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified as T[];\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute beforeGet interceptors\n * @internal Called by SmrtCollection.get()\n */\n static async executeBeforeGet(\n className: string,\n filter: string | Record<string, unknown>,\n context: InterceptorContext,\n ): Promise<string | Record<string, unknown>> {\n let result = filter;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeGet) {\n const modified = await interceptor.beforeGet(\n className,\n result,\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute afterGet interceptors\n * @internal Called by SmrtCollection.get()\n */\n static async executeAfterGet<T extends SmrtObject>(\n className: string,\n instance: T | null,\n context: InterceptorContext,\n ): Promise<T | null> {\n let result = instance;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.afterGet) {\n const modified = await interceptor.afterGet(className, result, context);\n if (modified !== undefined) {\n result = modified as T | null;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute beforeQuery interceptors\n * @internal Called by SmrtCollection.query()\n */\n static async executeBeforeQuery(\n className: string,\n options: QueryOptions,\n context: InterceptorContext,\n ): Promise<QueryInterceptResult> {\n let result: QueryInterceptResult = {\n sql: options.sql,\n params: options.params,\n };\n\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeQuery) {\n const modified = await interceptor.beforeQuery(\n className,\n { ...options, ...result },\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Execute afterQuery interceptors\n * @internal Called by SmrtCollection.query()\n */\n static async executeAfterQuery<T extends SmrtObject>(\n className: string,\n results: T[],\n context: InterceptorContext,\n ): Promise<T[]> {\n let result = results;\n\n for (const interceptor of this.interceptors) {\n if (interceptor.afterQuery) {\n const modified = await interceptor.afterQuery(\n className,\n result,\n context,\n );\n if (modified !== undefined && modified !== null) {\n result = modified as T[];\n }\n }\n }\n\n return result;\n }\n\n /** Resolve mandatory predicates immediately before a database write. */\n static executeWriteGuard(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Record<string, unknown> | undefined {\n let result: Record<string, unknown> | undefined;\n for (const interceptor of this.interceptors) {\n const guard = interceptor.writeGuard?.(instance, context);\n if (!guard) continue;\n result ??= {};\n for (const [key, value] of Object.entries(guard)) {\n if (\n Object.hasOwn(result, key) &&\n JSON.stringify(result[key]) !== JSON.stringify(value)\n )\n throw new Error('Conflicting mandatory write predicates');\n result[key] = value;\n }\n }\n return result;\n }\n\n /** Whether every registered mutation interceptor consents to batching. */\n static supportsBulkMutation(className: string): boolean {\n return this.interceptors.every(\n (interceptor) =>\n !(\n interceptor.writeGuard ||\n interceptor.beforeSave ||\n interceptor.afterSave ||\n interceptor.beforeDelete ||\n interceptor.afterDelete\n ) || interceptor.bulkMutation?.compatible(className) === true,\n );\n }\n\n /** Run the approved completion once per interceptor, preserving priority. */\n static async executeBulkAfter(\n operation: 'afterSave' | 'afterDelete',\n entries: BulkMutationEntry[],\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n const bulk = interceptor.bulkMutation?.[operation];\n if (bulk) {\n await bulk(entries);\n } else {\n for (const { instance, context } of entries) {\n await interceptor[operation]?.(instance, context);\n }\n }\n }\n }\n\n /**\n * Execute beforeSave interceptors\n * @internal Called by SmrtObject.save()\n */\n static async executeBeforeSave(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeSave) {\n await interceptor.beforeSave(instance, context);\n }\n }\n }\n\n /**\n * Execute afterSave interceptors\n * @internal Called by SmrtObject.save()\n */\n static async executeAfterSave(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n if (interceptor.afterSave) {\n await interceptor.afterSave(instance, context);\n }\n }\n }\n\n /**\n * Execute beforeDelete interceptors\n * @internal Called by SmrtObject.delete()\n */\n static async executeBeforeDelete(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n if (interceptor.beforeDelete) {\n await interceptor.beforeDelete(instance, context);\n }\n }\n }\n\n /**\n * Execute afterDelete interceptors\n * @internal Called by SmrtObject.delete()\n */\n static async executeAfterDelete(\n instance: SmrtObject,\n context: InterceptorContext,\n ): Promise<void> {\n for (const interceptor of this.interceptors) {\n if (interceptor.afterDelete) {\n await interceptor.afterDelete(instance, context);\n }\n }\n }\n}\n\n/**\n * Canonical UUID shape used by `SmrtCollection.get()` to decide whether a\n * string filter is an id or a slug.\n */\nconst GET_STRING_FILTER_UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Resolve a string filter to the WHERE shape `SmrtCollection.get()` gives it:\n * a UUID string becomes `{ id }`, anything else becomes the natural-key lookup\n * `{ slug, context: '' }`.\n *\n * This is the single source of truth for that string-filter contract. Any\n * `beforeGet` interceptor that rewrites a string filter into an object filter\n * MUST resolve it through this helper first — the tenancy interceptor used to\n * rewrite every string to `{ id: filter, tenantId }`, which broke get-by-slug\n * under an active tenant context (null on SQLite, a uuid cast error on\n * PostgreSQL native-uuid id columns). See #2365.\n *\n * @param filter - The string filter passed to `get()`\n * @returns The object filter `get()` would build for that string\n */\nexport function resolveGetStringFilter(\n filter: string,\n): { id: string } | { slug: string; context: string } {\n return GET_STRING_FILTER_UUID_PATTERN.test(filter)\n ? { id: filter }\n : { slug: filter, context: '' };\n}\n\n/**\n * Helper function to create an interceptor context\n * @internal\n */\nexport function createInterceptorContext(\n className: string,\n operation: InterceptorContext['operation'],\n collectionName?: string,\n metadata?: Record<string, unknown>,\n qualifiedClassName?: string,\n): InterceptorContext {\n return {\n className,\n collectionName,\n operation,\n timestamp: new Date(),\n metadata,\n qualifiedClassName,\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser-capability.generated.d.ts","sourceRoot":"","sources":["../../src/manifest/browser-capability.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAiDzF,CAAC"}
1
+ {"version":3,"file":"browser-capability.generated.d.ts","sourceRoot":"","sources":["../../src/manifest/browser-capability.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAkDzF,CAAC"}
@@ -80,16 +80,25 @@ var PACKAGE_BROWSER_CAPABILITY = {
80
80
  "status": "server-only",
81
81
  "issues": [
82
82
  "#3615",
83
+ "#3616",
84
+ "#3617",
83
85
  "#3624",
86
+ "#3625",
84
87
  "#3626",
85
88
  "#3627"
86
89
  ],
87
90
  "reason": "@happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs",
88
91
  "via": [
92
+ "@happyvertical/smrt-agents",
89
93
  "@happyvertical/smrt-jobs",
90
94
  "@happyvertical/smrt-ledgers",
95
+ "@happyvertical/smrt-products",
96
+ "@happyvertical/smrt-profiles",
97
+ "@happyvertical/smrt-reports",
98
+ "@happyvertical/smrt-secrets",
91
99
  "@happyvertical/smrt-subscriptions",
92
- "@happyvertical/smrt-tenancy"
100
+ "@happyvertical/smrt-tenancy",
101
+ "@happyvertical/smrt-users"
93
102
  ]
94
103
  },
95
104
  "@happyvertical/smrt-content": {
@@ -121,6 +130,19 @@ var PACKAGE_BROWSER_CAPABILITY = {
121
130
  "issues": ["#3635"],
122
131
  "reason": "model roots import server-only helpers (manifest loader, route helpers, startRestServer) the browser entry deliberately omits; core's own graph reaches no Node-only module (#2838, held by the browser-boundary core-entry test)"
123
132
  },
133
+ "@happyvertical/smrt-education": {
134
+ "status": "server-only",
135
+ "issues": [
136
+ "#3617",
137
+ "#3624",
138
+ "#3626"
139
+ ],
140
+ "via": [
141
+ "@happyvertical/smrt-profiles",
142
+ "@happyvertical/smrt-tenancy",
143
+ "@happyvertical/smrt-users"
144
+ ]
145
+ },
124
146
  "@happyvertical/smrt-events": {
125
147
  "status": "server-only",
126
148
  "issues": [
@@ -140,17 +162,26 @@ var PACKAGE_BROWSER_CAPABILITY = {
140
162
  "status": "server-only",
141
163
  "issues": [
142
164
  "#3615",
165
+ "#3616",
166
+ "#3617",
143
167
  "#3624",
168
+ "#3625",
144
169
  "#3626",
145
170
  "#3627"
146
171
  ],
147
172
  "reason": "node:crypto",
148
173
  "via": [
174
+ "@happyvertical/smrt-agents",
149
175
  "@happyvertical/smrt-commerce",
150
176
  "@happyvertical/smrt-jobs",
151
177
  "@happyvertical/smrt-ledgers",
178
+ "@happyvertical/smrt-products",
179
+ "@happyvertical/smrt-profiles",
180
+ "@happyvertical/smrt-reports",
181
+ "@happyvertical/smrt-secrets",
152
182
  "@happyvertical/smrt-subscriptions",
153
- "@happyvertical/smrt-tenancy"
183
+ "@happyvertical/smrt-tenancy",
184
+ "@happyvertical/smrt-users"
154
185
  ]
155
186
  },
156
187
  "@happyvertical/smrt-facts": {
@@ -341,15 +372,18 @@ var PACKAGE_BROWSER_CAPABILITY = {
341
372
  "@happyvertical/smrt-projects": {
342
373
  "status": "server-only",
343
374
  "issues": [
375
+ "#3617",
344
376
  "#3624",
345
377
  "#3626",
346
378
  "#3627"
347
379
  ],
348
380
  "reason": "node:crypto/async_hooks; core migrations; repos and ai SDKs",
349
381
  "via": [
382
+ "@happyvertical/smrt-profiles",
350
383
  "@happyvertical/smrt-subscriptions",
351
384
  "@happyvertical/smrt-tenancy",
352
- "@happyvertical/smrt-timesheets"
385
+ "@happyvertical/smrt-timesheets",
386
+ "@happyvertical/smrt-users"
353
387
  ]
354
388
  },
355
389
  "@happyvertical/smrt-prompts": {
@@ -462,9 +496,17 @@ var PACKAGE_BROWSER_CAPABILITY = {
462
496
  },
463
497
  "@happyvertical/smrt-timesheets": {
464
498
  "status": "server-only",
465
- "issues": ["#3624"],
499
+ "issues": [
500
+ "#3617",
501
+ "#3624",
502
+ "#3626"
503
+ ],
466
504
  "reason": "node:crypto",
467
- "via": ["@happyvertical/smrt-tenancy"]
505
+ "via": [
506
+ "@happyvertical/smrt-profiles",
507
+ "@happyvertical/smrt-tenancy",
508
+ "@happyvertical/smrt-users"
509
+ ]
468
510
  },
469
511
  "@happyvertical/smrt-users": {
470
512
  "status": "server-only",
@@ -1 +1 @@
1
- {"version":3,"file":"browser-capability.generated.js","names":[],"sources":["../../src/manifest/browser-capability.generated.ts"],"sourcesContent":["/**\n * GENERATED by packages/bundle-gate (browser-capability.spec.ts); do not edit.\n * Regenerate with `UPDATE_BROWSER_CAPABILITY=1 pnpm --filter\n * @happyvertical/smrt-bundle-gate test` after the browser gate's\n * expected-failures list or a package's dependencies change (#3709).\n *\n * Per-package browser capability derived from the browser gate (#3621): a\n * package is `server-only` when it, or a workspace package it depends on,\n * is listed as an expected failure. The manifest build emits the entry for the\n * package being built as `browser`, and uses it to classify its recipes.\n */\nimport type { PackageBrowserCapability } from '@happyvertical/smrt-types';\n\n// biome-ignore format: generated file, keep the generator's layout\nexport const PACKAGE_BROWSER_CAPABILITY: Readonly<Record<string, PackageBrowserCapability>> = {\n \"@happyvertical/smrt-ads\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-agents\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\"],\"reason\":\"node:crypto in root; core migrations (node:os)\",\"via\":[\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-analytics\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-approvals\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-assets\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-chat\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"node:crypto + node:async_hooks\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-comments\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-commerce\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3624\",\"#3626\",\"#3627\"],\"reason\":\"@happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs\",\"via\":[\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-ledgers\",\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-content\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"node:crypto; documents/spider/files/images/ai SDK graph (crawlee, undici, googleapis, native addons); CJS parse error\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-core\": {\"status\":\"server-only\",\"issues\":[\"#3635\"],\"reason\":\"model roots import server-only helpers (manifest loader, route helpers, startRestServer) the browser entry deliberately omits; core's own graph reaches no Node-only module (#2838, held by the browser-boundary core-entry test)\"},\n \"@happyvertical/smrt-events\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\",\"#3627\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-places\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-expenses\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3624\",\"#3626\",\"#3627\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-commerce\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-ledgers\",\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-facts\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-features\": {\"status\":\"server-only\",\"issues\":[\"#3618\"],\"reason\":\"imports core utils/import-workspace-module (node:url, node:fs, node:path)\"},\n \"@happyvertical/smrt-fields\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3618\",\"#3624\",\"#3626\"],\"reason\":\"imports core utils/import-workspace-module (node:url, node:fs, node:path)\",\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-human-resources\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-images\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3628\"],\"reason\":\"sharp, node:fs/promises, node:crypto, resvg native addon\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-ingestion\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\"],\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-inventory\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-jobs\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3624\",\"#3627\"],\"reason\":\"worker_threads runner (the edge commerce inherits), node:events/crypto, bull/bullmq/cloud-tasks SDK graph\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-languages\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3618\",\"#3624\",\"#3627\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-features\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-ledgers\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3626\"],\"reason\":\"core migrations (node:os, node:crypto)\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-manufacturing\": {\"status\":\"server-only\",\"issues\":[\"#3616\",\"#3624\",\"#3626\"],\"via\":[\"@happyvertical/smrt-products\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-marketing\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-messages\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\",\"#3627\"],\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-personas\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\"],\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-places\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3627\"],\"reason\":\"geo -> cache -> redis, node:zlib; url-signature node:crypto\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-playbooks\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-preferences\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-products\": {\"status\":\"server-only\",\"issues\":[\"#3616\",\"#3624\",\"#3626\"],\"reason\":\"server bootstrap (startRestServer, express/cors), core generators/mcp\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-profiles\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"reason\":\"node:crypto in root; core migrations (node:os)\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-projects\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3626\",\"#3627\"],\"reason\":\"node:crypto/async_hooks; core migrations; repos and ai SDKs\",\"via\":[\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-timesheets\"]},\n \"@happyvertical/smrt-prompts\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-properties\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-reports\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3624\",\"#3625\",\"#3627\"],\"reason\":\"node:crypto/events; @happyvertical/sql root: the sync query builders it needs (validateColumnName, buildWhere, buildAggregate, bucketExpr, tableExists) have no browser-safe SDK entry\",\"via\":[\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-sales\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-secrets\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3627\"],\"reason\":\"@happyvertical/secrets (node:child_process, node:crypto) and sql\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-sites\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-social\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-content\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\",\"@happyvertical/smrt-video\",\"@happyvertical/smrt-voice\"]},\n \"@happyvertical/smrt-subscriptions\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3626\"],\"reason\":\"core migrations (node:crypto, node:os)\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-support\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"core migrations (node:os)\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-projects\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-timesheets\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-tags\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-tenancy\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"reason\":\"node:async_hooks\"},\n \"@happyvertical/smrt-timesheets\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-users\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"reason\":\"node:crypto/async_hooks; core migrations\",\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-video\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"documents/spider SDK graph; CJS parse error\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-content\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\",\"@happyvertical/smrt-voice\"]},\n \"@happyvertical/smrt-voice\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"documents/spider SDK graph; CJS parse error\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-content\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-webhooks\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3624\",\"#3627\",\"#3717\"],\"reason\":\"Intentionally server-only outbound delivery: node:crypto HMAC and node:https/dns/net pinned transport enforce signing and SSRF protection. Browser hosts use the separate /svelte admin export with authenticated server callbacks.\",\"via\":[\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-tenancy\"]},\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"browser-capability.generated.js","names":[],"sources":["../../src/manifest/browser-capability.generated.ts"],"sourcesContent":["/**\n * GENERATED by packages/bundle-gate (browser-capability.spec.ts); do not edit.\n * Regenerate with `UPDATE_BROWSER_CAPABILITY=1 pnpm --filter\n * @happyvertical/smrt-bundle-gate test` after the browser gate's\n * expected-failures list or a package's dependencies change (#3709).\n *\n * Per-package browser capability derived from the browser gate (#3621): a\n * package is `server-only` when it, or a workspace package it depends on,\n * is listed as an expected failure. The manifest build emits the entry for the\n * package being built as `browser`, and uses it to classify its recipes.\n */\nimport type { PackageBrowserCapability } from '@happyvertical/smrt-types';\n\n// biome-ignore format: generated file, keep the generator's layout\nexport const PACKAGE_BROWSER_CAPABILITY: Readonly<Record<string, PackageBrowserCapability>> = {\n \"@happyvertical/smrt-ads\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-agents\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\"],\"reason\":\"node:crypto in root; core migrations (node:os)\",\"via\":[\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-analytics\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-approvals\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-assets\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-chat\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"node:crypto + node:async_hooks\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-comments\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-commerce\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3616\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\"],\"reason\":\"@happyvertical/payments btcpay (node:crypto); core migrations (node:os). The jobs runner edge (#3615) is reported on smrt-jobs\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-ledgers\",\"@happyvertical/smrt-products\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-content\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"node:crypto; documents/spider/files/images/ai SDK graph (crawlee, undici, googleapis, native addons); CJS parse error\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-core\": {\"status\":\"server-only\",\"issues\":[\"#3635\"],\"reason\":\"model roots import server-only helpers (manifest loader, route helpers, startRestServer) the browser entry deliberately omits; core's own graph reaches no Node-only module (#2838, held by the browser-boundary core-entry test)\"},\n \"@happyvertical/smrt-education\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-events\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\",\"#3627\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-places\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-expenses\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3616\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-commerce\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-ledgers\",\"@happyvertical/smrt-products\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-facts\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-features\": {\"status\":\"server-only\",\"issues\":[\"#3618\"],\"reason\":\"imports core utils/import-workspace-module (node:url, node:fs, node:path)\"},\n \"@happyvertical/smrt-fields\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3618\",\"#3624\",\"#3626\"],\"reason\":\"imports core utils/import-workspace-module (node:url, node:fs, node:path)\",\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-human-resources\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-images\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3628\"],\"reason\":\"sharp, node:fs/promises, node:crypto, resvg native addon\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-ingestion\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\"],\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-inventory\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-jobs\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3624\",\"#3627\"],\"reason\":\"worker_threads runner (the edge commerce inherits), node:events/crypto, bull/bullmq/cloud-tasks SDK graph\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-languages\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3618\",\"#3624\",\"#3627\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-features\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-ledgers\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3626\"],\"reason\":\"core migrations (node:os, node:crypto)\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-manufacturing\": {\"status\":\"server-only\",\"issues\":[\"#3616\",\"#3624\",\"#3626\"],\"via\":[\"@happyvertical/smrt-products\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-marketing\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-messages\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\",\"#3627\"],\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-personas\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\"],\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-places\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3627\"],\"reason\":\"geo -> cache -> redis, node:zlib; url-signature node:crypto\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-playbooks\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-preferences\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-products\": {\"status\":\"server-only\",\"issues\":[\"#3616\",\"#3624\",\"#3626\"],\"reason\":\"server bootstrap (startRestServer, express/cors), core generators/mcp\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-profiles\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"reason\":\"node:crypto in root; core migrations (node:os)\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-projects\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\",\"#3627\"],\"reason\":\"node:crypto/async_hooks; core migrations; repos and ai SDKs\",\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-timesheets\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-prompts\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-properties\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-reports\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3624\",\"#3625\",\"#3627\"],\"reason\":\"node:crypto/events; @happyvertical/sql root: the sync query builders it needs (validateColumnName, buildWhere, buildAggregate, bucketExpr, tableExists) have no browser-safe SDK entry\",\"via\":[\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-sales\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-secrets\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3627\"],\"reason\":\"@happyvertical/secrets (node:child_process, node:crypto) and sql\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-sites\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-social\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-content\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\",\"@happyvertical/smrt-video\",\"@happyvertical/smrt-voice\"]},\n \"@happyvertical/smrt-subscriptions\": {\"status\":\"server-only\",\"issues\":[\"#3624\",\"#3626\"],\"reason\":\"core migrations (node:crypto, node:os)\",\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-support\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"core migrations (node:os)\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-projects\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-subscriptions\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-timesheets\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-tags\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"via\":[\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-tenancy\": {\"status\":\"server-only\",\"issues\":[\"#3624\"],\"reason\":\"node:async_hooks\"},\n \"@happyvertical/smrt-timesheets\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"reason\":\"node:crypto\",\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-users\": {\"status\":\"server-only\",\"issues\":[\"#3617\",\"#3624\",\"#3626\"],\"reason\":\"node:crypto/async_hooks; core migrations\",\"via\":[\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-tenancy\"]},\n \"@happyvertical/smrt-video\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"documents/spider SDK graph; CJS parse error\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-content\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\",\"@happyvertical/smrt-voice\"]},\n \"@happyvertical/smrt-voice\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3617\",\"#3624\",\"#3625\",\"#3626\",\"#3627\",\"#3628\"],\"reason\":\"documents/spider SDK graph; CJS parse error\",\"via\":[\"@happyvertical/smrt-agents\",\"@happyvertical/smrt-chat\",\"@happyvertical/smrt-content\",\"@happyvertical/smrt-images\",\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-profiles\",\"@happyvertical/smrt-reports\",\"@happyvertical/smrt-secrets\",\"@happyvertical/smrt-tenancy\",\"@happyvertical/smrt-users\"]},\n \"@happyvertical/smrt-webhooks\": {\"status\":\"server-only\",\"issues\":[\"#3615\",\"#3624\",\"#3627\",\"#3717\"],\"reason\":\"Intentionally server-only outbound delivery: node:crypto HMAC and node:https/dns/net pinned transport enforce signing and SSRF protection. Browser hosts use the separate /svelte admin export with authenticated server callbacks.\",\"via\":[\"@happyvertical/smrt-jobs\",\"@happyvertical/smrt-tenancy\"]},\n};\n"],"mappings":"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"}
@@ -3,8 +3,8 @@ import { ManifestGenerator } from "../scanner/manifest-generator.js";
3
3
  import { ManifestManager } from "./manager.js";
4
4
  import { ManifestBuilder } from "./generator.js";
5
5
  import { dirname, join } from "node:path";
6
- import { existsSync, readFileSync } from "node:fs";
7
6
  import { fileURLToPath } from "node:url";
7
+ import { existsSync, readFileSync } from "node:fs";
8
8
  //#region src/manifest/index.ts
9
9
  /**
10
10
  * Static manifest module for runtime use
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-loader.d.ts","sourceRoot":"","sources":["../../src/manifest/manifest-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest-loader.d.ts","sourceRoot":"","sources":["../../src/manifest/manifest-loader.ts"],"names":[],"mappings":"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"}