@xemahq/biome-database-nest 0.6.2 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/nest/prisma-service-factory.d.ts +2 -0
- package/dist/lib/nest/prisma-service-factory.d.ts.map +1 -1
- package/dist/lib/nest/prisma-service-factory.js +12 -0
- package/dist/lib/nest/prisma-service-factory.js.map +1 -1
- package/dist/lib/tenant-isolation/tenant-isolation.extension.d.ts +7 -0
- package/dist/lib/tenant-isolation/tenant-isolation.extension.d.ts.map +1 -1
- package/dist/lib/tenant-isolation/tenant-isolation.extension.js +1 -0
- package/dist/lib/tenant-isolation/tenant-isolation.extension.js.map +1 -1
- package/dist/lib/tenant-isolation/unscoped-models.d.ts +38 -0
- package/dist/lib/tenant-isolation/unscoped-models.d.ts.map +1 -0
- package/dist/lib/tenant-isolation/unscoped-models.js +100 -0
- package/dist/lib/tenant-isolation/unscoped-models.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,8 @@ export { createBiomePrismaService, type BiomePrismaClient, type BiomePrismaClien
|
|
|
12
12
|
export { TenantIsolationMode, TENANT_ISOLATION_MODE_ENV_VAR, resolveTenantIsolationMode, } from './lib/tenant-isolation/tenant-isolation-mode';
|
|
13
13
|
export { TenantIsolationError, TenantIsolationViolationKind, formatTenantIsolationViolation, type TenantIsolationViolation, } from './lib/tenant-isolation/tenant-isolation-error';
|
|
14
14
|
export { PrismaModelOperation, scopeArgsToOrg, type OrgScopeOutcome, type OrgScopeRequest, } from './lib/tenant-isolation/org-scope';
|
|
15
|
-
export { DEFAULT_ORG_FIELD, collectOrgScopedModels, createTenantIsolationExtension, type CreateTenantIsolationExtensionOptions, type TenantIsolationExtensionDefinition, type TenantIsolationLogger, type TenantIsolationQueryContext, } from './lib/tenant-isolation/tenant-isolation.extension';
|
|
15
|
+
export { DEFAULT_ORG_FIELD, collectOrgScopedModels, createTenantIsolationExtension, readRuntimeModels, type CreateTenantIsolationExtensionOptions, type RuntimeDataModelField, type RuntimeDataModelModel, type TenantIsolationExtensionDefinition, type TenantIsolationLogger, type TenantIsolationQueryContext, } from './lib/tenant-isolation/tenant-isolation.extension';
|
|
16
|
+
export { assertUnscopedModelsDeclared, collectUnscopableModels, formatUnscopedModelReport, normalizeUnscopedModelDeclarations, UndeclaredUnscopedModelsError, type AssertUnscopedModelsOptions, type NormalizedUnscopedModelDeclaration, type UnscopedModelDeclaration, type UnscopedModelDeclarations, } from './lib/tenant-isolation/unscoped-models';
|
|
16
17
|
export { eraseOrgData, OrgErasureBlockedError, type EraseOrgDataOptions, type OrgErasureReport, } from './lib/tenant-isolation/org-erasure';
|
|
17
18
|
export { OrgErasureModule, OrgErasureController, ORG_ERASURE_RUNNER, ORG_DATA_ERASURE_CAPABILITY, ORG_ERASURE_ROUTE_PATH, type OrgErasureModuleOptions, type OrgErasureRunner, } from './lib/nest/org-erasure.module';
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,iCAAiC,EACjC,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,KAAK,2BAA2B,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,KAAK,4BAA4B,GAClC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,GACpC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,0BAA0B,GAChC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,eAAe,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,8BAA8B,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,+CAA+C,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,8BAA8B,EAC9B,KAAK,qCAAqC,EAC1C,KAAK,kCAAkC,EACvC,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,GACjC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,GACtB,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,iCAAiC,EACjC,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,KAAK,2BAA2B,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,KAAK,4BAA4B,GAClC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,GACpC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,0BAA0B,GAChC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,eAAe,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,8BAA8B,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,+CAA+C,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,8BAA8B,EAC9B,iBAAiB,EACjB,KAAK,qCAAqC,EAC1C,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,kCAAkC,EACvC,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,GACjC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,EACzB,kCAAkC,EAClC,6BAA6B,EAC7B,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACvC,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,GAC/B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,GACtB,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ORG_ERASURE_ROUTE_PATH = exports.ORG_DATA_ERASURE_CAPABILITY = exports.ORG_ERASURE_RUNNER = exports.OrgErasureController = exports.OrgErasureModule = exports.OrgErasureBlockedError = exports.eraseOrgData = exports.createTenantIsolationExtension = exports.collectOrgScopedModels = exports.DEFAULT_ORG_FIELD = exports.scopeArgsToOrg = exports.PrismaModelOperation = exports.formatTenantIsolationViolation = exports.TenantIsolationViolationKind = exports.TenantIsolationError = exports.resolveTenantIsolationMode = exports.TENANT_ISOLATION_MODE_ENV_VAR = exports.TenantIsolationMode = exports.createBiomePrismaService = exports.BIOME_DATABASE_READY = exports.BiomeDatabaseModule = exports.bootstrapBiomeDatabases = exports.ORG_DATABASE_POOL_SERVICE_NAME = exports.resolveControlPlaneBaseUrl = exports.fetchSystemDatabaseConfig = exports.createBiomePrismaAdapterFromEnv = exports.createBiomePrismaAdapter = exports.resolveBiomeDatabaseConfigFromEnv = exports.unwrapPlatformResponseEnvelope = exports.SCHEMA_ROLE_SUFFIX_LENGTH = exports.SCHEMA_ROLE_BASE_MAX_LENGTH = exports.SchemaRoleKind = exports.schemaRoleName = exports.schemaRoleBase = exports.rolesForSchema = exports.sanitizeIdentifierSegment = exports.sanitizeIdentifierChars = exports.POSTGRES_MAX_IDENTIFIER_LENGTH = exports.IDENTIFIER_HASH_LENGTH = exports.fitIdentifier = exports.composeIdentifier = exports.deriveBiomeSchemaName = exports.DEFAULT_BIOME_DB_KEY = void 0;
|
|
3
|
+
exports.ORG_ERASURE_ROUTE_PATH = exports.ORG_DATA_ERASURE_CAPABILITY = exports.ORG_ERASURE_RUNNER = exports.OrgErasureController = exports.OrgErasureModule = exports.OrgErasureBlockedError = exports.eraseOrgData = exports.UndeclaredUnscopedModelsError = exports.normalizeUnscopedModelDeclarations = exports.formatUnscopedModelReport = exports.collectUnscopableModels = exports.assertUnscopedModelsDeclared = exports.readRuntimeModels = exports.createTenantIsolationExtension = exports.collectOrgScopedModels = exports.DEFAULT_ORG_FIELD = exports.scopeArgsToOrg = exports.PrismaModelOperation = exports.formatTenantIsolationViolation = exports.TenantIsolationViolationKind = exports.TenantIsolationError = exports.resolveTenantIsolationMode = exports.TENANT_ISOLATION_MODE_ENV_VAR = exports.TenantIsolationMode = exports.createBiomePrismaService = exports.BIOME_DATABASE_READY = exports.BiomeDatabaseModule = exports.bootstrapBiomeDatabases = exports.ORG_DATABASE_POOL_SERVICE_NAME = exports.resolveControlPlaneBaseUrl = exports.fetchSystemDatabaseConfig = exports.createBiomePrismaAdapterFromEnv = exports.createBiomePrismaAdapter = exports.resolveBiomeDatabaseConfigFromEnv = exports.unwrapPlatformResponseEnvelope = exports.SCHEMA_ROLE_SUFFIX_LENGTH = exports.SCHEMA_ROLE_BASE_MAX_LENGTH = exports.SchemaRoleKind = exports.schemaRoleName = exports.schemaRoleBase = exports.rolesForSchema = exports.sanitizeIdentifierSegment = exports.sanitizeIdentifierChars = exports.POSTGRES_MAX_IDENTIFIER_LENGTH = exports.IDENTIFIER_HASH_LENGTH = exports.fitIdentifier = exports.composeIdentifier = exports.deriveBiomeSchemaName = exports.DEFAULT_BIOME_DB_KEY = void 0;
|
|
4
4
|
var schema_name_1 = require("./lib/schema-name");
|
|
5
5
|
Object.defineProperty(exports, "DEFAULT_BIOME_DB_KEY", { enumerable: true, get: function () { return schema_name_1.DEFAULT_BIOME_DB_KEY; } });
|
|
6
6
|
Object.defineProperty(exports, "deriveBiomeSchemaName", { enumerable: true, get: function () { return schema_name_1.deriveBiomeSchemaName; } });
|
|
@@ -52,6 +52,13 @@ var tenant_isolation_extension_1 = require("./lib/tenant-isolation/tenant-isolat
|
|
|
52
52
|
Object.defineProperty(exports, "DEFAULT_ORG_FIELD", { enumerable: true, get: function () { return tenant_isolation_extension_1.DEFAULT_ORG_FIELD; } });
|
|
53
53
|
Object.defineProperty(exports, "collectOrgScopedModels", { enumerable: true, get: function () { return tenant_isolation_extension_1.collectOrgScopedModels; } });
|
|
54
54
|
Object.defineProperty(exports, "createTenantIsolationExtension", { enumerable: true, get: function () { return tenant_isolation_extension_1.createTenantIsolationExtension; } });
|
|
55
|
+
Object.defineProperty(exports, "readRuntimeModels", { enumerable: true, get: function () { return tenant_isolation_extension_1.readRuntimeModels; } });
|
|
56
|
+
var unscoped_models_1 = require("./lib/tenant-isolation/unscoped-models");
|
|
57
|
+
Object.defineProperty(exports, "assertUnscopedModelsDeclared", { enumerable: true, get: function () { return unscoped_models_1.assertUnscopedModelsDeclared; } });
|
|
58
|
+
Object.defineProperty(exports, "collectUnscopableModels", { enumerable: true, get: function () { return unscoped_models_1.collectUnscopableModels; } });
|
|
59
|
+
Object.defineProperty(exports, "formatUnscopedModelReport", { enumerable: true, get: function () { return unscoped_models_1.formatUnscopedModelReport; } });
|
|
60
|
+
Object.defineProperty(exports, "normalizeUnscopedModelDeclarations", { enumerable: true, get: function () { return unscoped_models_1.normalizeUnscopedModelDeclarations; } });
|
|
61
|
+
Object.defineProperty(exports, "UndeclaredUnscopedModelsError", { enumerable: true, get: function () { return unscoped_models_1.UndeclaredUnscopedModelsError; } });
|
|
55
62
|
var org_erasure_1 = require("./lib/tenant-isolation/org-erasure");
|
|
56
63
|
Object.defineProperty(exports, "eraseOrgData", { enumerable: true, get: function () { return org_erasure_1.eraseOrgData; } });
|
|
57
64
|
Object.defineProperty(exports, "OrgErasureBlockedError", { enumerable: true, get: function () { return org_erasure_1.OrgErasureBlockedError; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iDAAgF;AAAvE,mHAAA,oBAAoB,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AACpD,+CAS0B;AARxB,+GAAA,iBAAiB,OAAA;AACjB,2GAAA,aAAa,OAAA;AACb,oHAAA,sBAAsB,OAAA;AACtB,4HAAA,8BAA8B,OAAA;AAC9B,qHAAA,uBAAuB,OAAA;AACvB,uHAAA,yBAAyB,OAAA;AAI3B,+CAQ0B;AAPxB,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,yHAAA,2BAA2B,OAAA;AAC3B,uHAAA,yBAAyB,OAAA;AAG3B,6DAAyE;AAAhE,mIAAA,8BAA8B,OAAA;AACvC,uCAGsB;AAFpB,2HAAA,iCAAiC,OAAA;AAGnC,yCAGuB;AAFrB,mHAAA,wBAAwB,OAAA;AACxB,0HAAA,+BAA+B,OAAA;AAEjC,mEAGoC;AAFlC,iIAAA,yBAAyB,OAAA;AAG3B,yEAIuC;AAHrC,qIAAA,0BAA0B,OAAA;AAC1B,yIAAA,8BAA8B,OAAA;AAGhC,6CAIyB;AAHvB,oHAAA,uBAAuB,OAAA;AAIzB,0EAI0C;AAHxC,4HAAA,mBAAmB,OAAA;AACnB,6HAAA,oBAAoB,OAAA;AAGtB,4EAQ2C;AAPzC,kIAAA,wBAAwB,OAAA;AAQ1B,sFAIsD;AAHpD,4HAAA,mBAAmB,OAAA;AACnB,sIAAA,6BAA6B,OAAA;AAC7B,mIAAA,0BAA0B,OAAA;AAE5B,wFAKuD;AAJrD,8HAAA,oBAAoB,OAAA;AACpB,sIAAA,4BAA4B,OAAA;AAC5B,wIAAA,8BAA8B,OAAA;AAGhC,8DAK0C;AAJxC,iHAAA,oBAAoB,OAAA;AACpB,2GAAA,cAAc,OAAA;AAIhB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iDAAgF;AAAvE,mHAAA,oBAAoB,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AACpD,+CAS0B;AARxB,+GAAA,iBAAiB,OAAA;AACjB,2GAAA,aAAa,OAAA;AACb,oHAAA,sBAAsB,OAAA;AACtB,4HAAA,8BAA8B,OAAA;AAC9B,qHAAA,uBAAuB,OAAA;AACvB,uHAAA,yBAAyB,OAAA;AAI3B,+CAQ0B;AAPxB,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,yHAAA,2BAA2B,OAAA;AAC3B,uHAAA,yBAAyB,OAAA;AAG3B,6DAAyE;AAAhE,mIAAA,8BAA8B,OAAA;AACvC,uCAGsB;AAFpB,2HAAA,iCAAiC,OAAA;AAGnC,yCAGuB;AAFrB,mHAAA,wBAAwB,OAAA;AACxB,0HAAA,+BAA+B,OAAA;AAEjC,mEAGoC;AAFlC,iIAAA,yBAAyB,OAAA;AAG3B,yEAIuC;AAHrC,qIAAA,0BAA0B,OAAA;AAC1B,yIAAA,8BAA8B,OAAA;AAGhC,6CAIyB;AAHvB,oHAAA,uBAAuB,OAAA;AAIzB,0EAI0C;AAHxC,4HAAA,mBAAmB,OAAA;AACnB,6HAAA,oBAAoB,OAAA;AAGtB,4EAQ2C;AAPzC,kIAAA,wBAAwB,OAAA;AAQ1B,sFAIsD;AAHpD,4HAAA,mBAAmB,OAAA;AACnB,sIAAA,6BAA6B,OAAA;AAC7B,mIAAA,0BAA0B,OAAA;AAE5B,wFAKuD;AAJrD,8HAAA,oBAAoB,OAAA;AACpB,sIAAA,4BAA4B,OAAA;AAC5B,wIAAA,8BAA8B,OAAA;AAGhC,8DAK0C;AAJxC,iHAAA,oBAAoB,OAAA;AACpB,2GAAA,cAAc,OAAA;AAIhB,gGAW2D;AAVzD,+HAAA,iBAAiB,OAAA;AACjB,oIAAA,sBAAsB,OAAA;AACtB,4IAAA,8BAA8B,OAAA;AAC9B,+HAAA,iBAAiB,OAAA;AAQnB,0EAUgD;AAT9C,+HAAA,4BAA4B,OAAA;AAC5B,0HAAA,uBAAuB,OAAA;AACvB,4HAAA,yBAAyB,OAAA;AACzB,qIAAA,kCAAkC,OAAA;AAClC,gIAAA,6BAA6B,OAAA;AAM/B,kEAK4C;AAJ1C,2GAAA,YAAY,OAAA;AACZ,qHAAA,sBAAsB,OAAA;AAIxB,oEAQuC;AAPrC,sHAAA,gBAAgB,OAAA;AAChB,0HAAA,oBAAoB,OAAA;AACpB,wHAAA,kBAAkB,OAAA;AAClB,iIAAA,2BAA2B,OAAA;AAC3B,4HAAA,sBAAsB,OAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { OnModuleDestroy, OnModuleInit, Type } from '@nestjs/common';
|
|
2
2
|
import { TenantIsolationMode } from '../tenant-isolation/tenant-isolation-mode';
|
|
3
|
+
import { type UnscopedModelDeclarations } from '../tenant-isolation/unscoped-models';
|
|
3
4
|
export type BiomePrismaClientCtor<TClient extends BiomePrismaClient> = new (...args: any[]) => TClient;
|
|
4
5
|
export interface BiomePrismaClient {
|
|
5
6
|
$connect(): Promise<void>;
|
|
@@ -9,6 +10,7 @@ export interface TenantIsolationServiceOptions {
|
|
|
9
10
|
readonly mode?: TenantIsolationMode;
|
|
10
11
|
readonly orgField?: string;
|
|
11
12
|
readonly exemptModels?: readonly string[];
|
|
13
|
+
readonly unscopedModels?: UnscopedModelDeclarations;
|
|
12
14
|
}
|
|
13
15
|
export interface CreateBiomePrismaServiceOptions {
|
|
14
16
|
readonly loggerContext?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-service-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/nest/prisma-service-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAK1E,OAAO,EACL,mBAAmB,EAEpB,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"prisma-service-factory.d.ts","sourceRoot":"","sources":["../../../src/lib/nest/prisma-service-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAK1E,OAAO,EACL,mBAAmB,EAEpB,MAAM,2CAA2C,CAAC;AAQnD,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,qCAAqC,CAAC;AAY7C,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,iBAAiB,IAAI,KAIrE,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC;AAGb,MAAM,WAAW,iBAAiB;IAChC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAGD,MAAM,WAAW,6BAA6B;IAK5C,QAAQ,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAEpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAK3B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IA0B1C,QAAQ,CAAC,cAAc,CAAC,EAAE,yBAAyB,CAAC;CACrD;AAGD,MAAM,WAAW,+BAA+B;IAE9C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,6BAA6B,CAAC;CAC1D;AAMD,MAAM,WAAW,eAAe,CAAC,OAAO;IAOtC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAM/B,QAAQ,IAAI,OAAO,CAAC;CACrB;AAGD,MAAM,MAAM,0BAA0B,CAAC,OAAO,IAAI,OAAO,GACvD,eAAe,CAAC,OAAO,CAAC,GACxB,YAAY,GACZ,eAAe,CAAC;AA2ElB,wBAAgB,wBAAwB,CAAC,OAAO,SAAS,iBAAiB,EACxE,gBAAgB,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAChD,sBAAsB,CAAC,EAAE,MAAM,GAAG,+BAA+B,GAChE,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAoL3C"}
|
|
@@ -15,6 +15,7 @@ const platform_common_1 = require("@xemahq/platform-common");
|
|
|
15
15
|
const adapter_1 = require("../adapter");
|
|
16
16
|
const tenant_isolation_mode_1 = require("../tenant-isolation/tenant-isolation-mode");
|
|
17
17
|
const tenant_isolation_extension_1 = require("../tenant-isolation/tenant-isolation.extension");
|
|
18
|
+
const unscoped_models_1 = require("../tenant-isolation/unscoped-models");
|
|
18
19
|
function lowerFirst(name) {
|
|
19
20
|
return name.length === 0
|
|
20
21
|
? name
|
|
@@ -35,6 +36,7 @@ function createBiomePrismaService(PrismaClientCtor, optionsOrLoggerContext) {
|
|
|
35
36
|
const tenantOptions = options.tenantIsolation ?? {};
|
|
36
37
|
const orgField = tenantOptions.orgField ?? tenant_isolation_extension_1.DEFAULT_ORG_FIELD;
|
|
37
38
|
const exemptModels = tenantOptions.exemptModels ?? [];
|
|
39
|
+
const unscopedModels = tenantOptions.unscopedModels ?? {};
|
|
38
40
|
let BiomePrismaService = class BiomePrismaService extends PrismaClientCtor {
|
|
39
41
|
biomePrismaLogger = new common_1.Logger(loggerContext);
|
|
40
42
|
constructor() {
|
|
@@ -55,6 +57,16 @@ function createBiomePrismaService(PrismaClientCtor, optionsOrLoggerContext) {
|
|
|
55
57
|
scopedModelsCache ??= (0, tenant_isolation_extension_1.collectOrgScopedModels)(raw, orgField, exemptModels);
|
|
56
58
|
return scopedModelsCache;
|
|
57
59
|
};
|
|
60
|
+
if (mode !== tenant_isolation_mode_1.TenantIsolationMode.Off) {
|
|
61
|
+
(0, unscoped_models_1.assertUnscopedModelsDeclared)({
|
|
62
|
+
models: (0, tenant_isolation_extension_1.readRuntimeModels)(raw),
|
|
63
|
+
orgField,
|
|
64
|
+
mode,
|
|
65
|
+
unscopedModels,
|
|
66
|
+
exemptModels,
|
|
67
|
+
logger: tenantLogger,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
58
70
|
const forOrg = (orgId) => {
|
|
59
71
|
if (typeof orgId !== 'string' || orgId === '') {
|
|
60
72
|
throw new Error('[tenant-isolation] forOrg requires a non-empty orgId. For a ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-service-factory.js","sourceRoot":"","sources":["../../../src/lib/nest/prisma-service-factory.ts"],"names":[],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"prisma-service-factory.js","sourceRoot":"","sources":["../../../src/lib/nest/prisma-service-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,13 @@ export interface TenantIsolationLogger {
|
|
|
4
4
|
warn(message: string): void;
|
|
5
5
|
debug(message: string): void;
|
|
6
6
|
}
|
|
7
|
+
export interface RuntimeDataModelField {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
}
|
|
10
|
+
export interface RuntimeDataModelModel {
|
|
11
|
+
readonly fields: readonly RuntimeDataModelField[];
|
|
12
|
+
}
|
|
13
|
+
export declare function readRuntimeModels(client: unknown): Readonly<Record<string, RuntimeDataModelModel>>;
|
|
7
14
|
export declare function collectOrgScopedModels(client: unknown, orgField: string, exemptModels: readonly string[]): ReadonlySet<string>;
|
|
8
15
|
export interface TenantIsolationQueryContext {
|
|
9
16
|
readonly model?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-isolation.extension.d.ts","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/tenant-isolation.extension.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAGzC,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;
|
|
1
|
+
{"version":3,"file":"tenant-isolation.extension.d.ts","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/tenant-isolation.extension.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAGzC,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACnD;AAaD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,GACd,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAUjD;AAUD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,WAAW,CAAC,MAAM,CAAC,CAoBrB;AAGD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,qCAAqC;IAEpD,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAMnC,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CACxC;AAGD,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,UAAU,EAAE;YACnB,cAAc,CAAC,GAAG,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;SACpE,CAAC;KACH,CAAC;CACH;AAYD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qCAAqC,GAC7C,kCAAkC,CAkEpC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEFAULT_ORG_FIELD = void 0;
|
|
4
|
+
exports.readRuntimeModels = readRuntimeModels;
|
|
4
5
|
exports.collectOrgScopedModels = collectOrgScopedModels;
|
|
5
6
|
exports.createTenantIsolationExtension = createTenantIsolationExtension;
|
|
6
7
|
const org_scope_1 = require("./org-scope");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-isolation.extension.js","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/tenant-isolation.extension.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tenant-isolation.extension.js","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/tenant-isolation.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { TenantIsolationMode } from './tenant-isolation-mode';
|
|
2
|
+
import type { TenantIsolationLogger } from './tenant-isolation.extension';
|
|
3
|
+
export interface UnscopedModelDeclaration {
|
|
4
|
+
readonly reason: string;
|
|
5
|
+
readonly fencedBy?: string;
|
|
6
|
+
}
|
|
7
|
+
export type UnscopedModelDeclarations = Readonly<Record<string, string | UnscopedModelDeclaration>>;
|
|
8
|
+
export interface NormalizedUnscopedModelDeclaration {
|
|
9
|
+
readonly model: string;
|
|
10
|
+
readonly reason: string;
|
|
11
|
+
readonly fencedBy?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class UndeclaredUnscopedModelsError extends Error {
|
|
14
|
+
readonly undeclared: readonly string[];
|
|
15
|
+
readonly staleDeclarations: readonly string[];
|
|
16
|
+
constructor(undeclared: readonly string[], staleDeclarations: readonly string[], orgField: string);
|
|
17
|
+
}
|
|
18
|
+
export declare function collectUnscopableModels(models: Readonly<Record<string, {
|
|
19
|
+
readonly fields: readonly {
|
|
20
|
+
readonly name: string;
|
|
21
|
+
}[];
|
|
22
|
+
}>>, orgField: string): readonly string[];
|
|
23
|
+
export declare function normalizeUnscopedModelDeclarations(declarations: UnscopedModelDeclarations): readonly NormalizedUnscopedModelDeclaration[];
|
|
24
|
+
export declare function formatUnscopedModelReport(undeclared: readonly string[], staleDeclarations: readonly string[], orgField: string, fatal: boolean): string;
|
|
25
|
+
export interface AssertUnscopedModelsOptions {
|
|
26
|
+
readonly models: Readonly<Record<string, {
|
|
27
|
+
readonly fields: readonly {
|
|
28
|
+
readonly name: string;
|
|
29
|
+
}[];
|
|
30
|
+
}>>;
|
|
31
|
+
readonly orgField: string;
|
|
32
|
+
readonly mode: TenantIsolationMode;
|
|
33
|
+
readonly unscopedModels: UnscopedModelDeclarations;
|
|
34
|
+
readonly exemptModels: readonly string[];
|
|
35
|
+
readonly logger: TenantIsolationLogger;
|
|
36
|
+
}
|
|
37
|
+
export declare function assertUnscopedModelsDeclared(options: AssertUnscopedModelsOptions): void;
|
|
38
|
+
//# sourceMappingURL=unscoped-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unscoped-models.d.ts","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/unscoped-models.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQ1E,MAAM,WAAW,wBAAwB;IAMvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAAC,CAClD,CAAC;AAGF,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAMD,qBAAa,6BAA8B,SAAQ,KAAK;IAEtD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;gBAG5C,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,iBAAiB,EAAE,SAAS,MAAM,EAAE,EACpC,QAAQ,EAAE,MAAM;CASnB;AAMD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAAC,EAC3F,QAAQ,EAAE,MAAM,GACf,SAAS,MAAM,EAAE,CAKnB;AAQD,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,yBAAyB,GACtC,SAAS,kCAAkC,EAAE,CA6B/C;AAGD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,iBAAiB,EAAE,SAAS,MAAM,EAAE,EACpC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,MAAM,CAgCR;AAED,MAAM,WAAW,2BAA2B;IAE1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CACvB,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,SAAS;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC,CAC1E,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAEnC,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC;IAEnD,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CACxC;AAiBD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,2BAA2B,GACnC,IAAI,CAgDN"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UndeclaredUnscopedModelsError = void 0;
|
|
4
|
+
exports.collectUnscopableModels = collectUnscopableModels;
|
|
5
|
+
exports.normalizeUnscopedModelDeclarations = normalizeUnscopedModelDeclarations;
|
|
6
|
+
exports.formatUnscopedModelReport = formatUnscopedModelReport;
|
|
7
|
+
exports.assertUnscopedModelsDeclared = assertUnscopedModelsDeclared;
|
|
8
|
+
const tenant_isolation_mode_1 = require("./tenant-isolation-mode");
|
|
9
|
+
class UndeclaredUnscopedModelsError extends Error {
|
|
10
|
+
undeclared;
|
|
11
|
+
staleDeclarations;
|
|
12
|
+
constructor(undeclared, staleDeclarations, orgField) {
|
|
13
|
+
super(formatUnscopedModelReport(undeclared, staleDeclarations, orgField, true));
|
|
14
|
+
this.name = 'UndeclaredUnscopedModelsError';
|
|
15
|
+
this.undeclared = undeclared;
|
|
16
|
+
this.staleDeclarations = staleDeclarations;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.UndeclaredUnscopedModelsError = UndeclaredUnscopedModelsError;
|
|
20
|
+
function collectUnscopableModels(models, orgField) {
|
|
21
|
+
return Object.entries(models)
|
|
22
|
+
.filter(([, model]) => !model.fields.some((f) => f.name === orgField))
|
|
23
|
+
.map(([name]) => name)
|
|
24
|
+
.sort();
|
|
25
|
+
}
|
|
26
|
+
function normalizeUnscopedModelDeclarations(declarations) {
|
|
27
|
+
return Object.entries(declarations).map(([model, value]) => {
|
|
28
|
+
const declaration = typeof value === 'string' ? { reason: value } : value;
|
|
29
|
+
if (declaration.reason.trim().length === 0) {
|
|
30
|
+
throw new Error(`[tenant-isolation] unscopedModels["${model}"] has a blank reason. ` +
|
|
31
|
+
'Every model with no org column must carry a written justification — ' +
|
|
32
|
+
'say whether it is genuinely global, or tenant-scoped-in-reality and ' +
|
|
33
|
+
'fenced by hand (then also set `fencedBy`).');
|
|
34
|
+
}
|
|
35
|
+
if (declaration.fencedBy !== undefined &&
|
|
36
|
+
declaration.fencedBy.trim().length === 0) {
|
|
37
|
+
throw new Error(`[tenant-isolation] unscopedModels["${model}"].fencedBy is blank. ` +
|
|
38
|
+
'Either describe the manual fence or omit the field entirely.');
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
model,
|
|
42
|
+
reason: declaration.reason,
|
|
43
|
+
...(declaration.fencedBy !== undefined
|
|
44
|
+
? { fencedBy: declaration.fencedBy }
|
|
45
|
+
: {}),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function formatUnscopedModelReport(undeclared, staleDeclarations, orgField, fatal) {
|
|
50
|
+
const lines = [
|
|
51
|
+
`[tenant-isolation] ${fatal ? 'REFUSING TO START' : 'UNDECLARED MODELS'} — ` +
|
|
52
|
+
`tenant isolation cannot scope every model in this schema.`,
|
|
53
|
+
];
|
|
54
|
+
if (undeclared.length > 0) {
|
|
55
|
+
lines.push(` ${undeclared.length} model(s) declare no "${orgField}" column and were ` +
|
|
56
|
+
`not declared in tenantIsolation.unscopedModels, so every query on them ` +
|
|
57
|
+
`runs UNSCOPED and enforcement silently does not apply:`, ` ${undeclared.join(', ')}`, ' For EACH one, decide which it is and record the decision:', ' - GENUINELY GLOBAL (platform catalog, kernel registry, bookkeeping) →', ' unscopedModels: { Foo: "global catalog; rows belong to no tenant" }', ' - TENANT-SCOPED via a foreign key (the dangerous case) → fence EVERY', ' query by hand through the owning relation, then record how:', ' unscopedModels: { Foo: { reason: "owned via barId -> Bar.orgId",', ' fencedBy: "bar: { orgId } on every query" } }', ' A model that carries the org column but must NOT be scoped belongs in', ' `exemptModels` instead — that is a different decision and stays separate.');
|
|
58
|
+
}
|
|
59
|
+
if (staleDeclarations.length > 0) {
|
|
60
|
+
lines.push(` ${staleDeclarations.length} declaration(s) no longer match a model ` +
|
|
61
|
+
`without "${orgField}" — the schema moved on and the justification is ` +
|
|
62
|
+
'now misleading. Remove them (or move them to `exemptModels` if the ' +
|
|
63
|
+
'model gained an org column but must stay unscoped):', ` ${staleDeclarations.join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
function assertUnscopedModelsDeclared(options) {
|
|
68
|
+
const { models, orgField, mode, unscopedModels, exemptModels, logger } = options;
|
|
69
|
+
if (mode === tenant_isolation_mode_1.TenantIsolationMode.Off) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const normalized = normalizeUnscopedModelDeclarations(unscopedModels);
|
|
73
|
+
const unscopable = new Set(collectUnscopableModels(models, orgField));
|
|
74
|
+
for (const { model } of normalized) {
|
|
75
|
+
if (!(model in models)) {
|
|
76
|
+
throw new Error(`[tenant-isolation] unscopedModels names unknown model "${model}" — ` +
|
|
77
|
+
`known models: ${Object.keys(models).join(', ')}.`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const declaredUnscoped = new Set(normalized.map((d) => d.model));
|
|
81
|
+
const inBoth = exemptModels.filter((m) => declaredUnscoped.has(m));
|
|
82
|
+
if (inBoth.length > 0) {
|
|
83
|
+
throw new Error(`[tenant-isolation] ${inBoth.join(', ')} appear in BOTH exemptModels and ` +
|
|
84
|
+
'unscopedModels. They answer different questions — exemptModels means ' +
|
|
85
|
+
`"declares ${orgField} but must not be auto-scoped"; unscopedModels ` +
|
|
86
|
+
`means "declares no ${orgField} at all". Pick the one that is true.`);
|
|
87
|
+
}
|
|
88
|
+
const undeclared = [...unscopable].filter((m) => !declaredUnscoped.has(m));
|
|
89
|
+
const stale = [...declaredUnscoped].filter((m) => !unscopable.has(m)).sort();
|
|
90
|
+
if (undeclared.length === 0 && stale.length === 0) {
|
|
91
|
+
logger.debug(`[tenant-isolation] ${unscopable.size} model(s) carry no "${orgField}" ` +
|
|
92
|
+
'column; all are declared in unscopedModels.');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (mode === tenant_isolation_mode_1.TenantIsolationMode.Enforce) {
|
|
96
|
+
throw new UndeclaredUnscopedModelsError(undeclared, stale, orgField);
|
|
97
|
+
}
|
|
98
|
+
logger.warn(formatUnscopedModelReport(undeclared, stale, orgField, false));
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=unscoped-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unscoped-models.js","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/unscoped-models.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/biome-database-nest",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "Layer 1 SDK that centralizes ALL database concerns for Xema biome services. Provides the single correct construction of a schema-qualified Prisma driver-adapter (the second-arg `{ schema }` that makes `@prisma/adapter-pg` qualify `biome_<id>.<table>` instead of `public.<table>`), the per-biome schema-naming convention, env/control-plane config resolution, and a boot-time bootstrap that creates the schema and runs migrations. Biomes carry zero DB boilerplate.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
|