@burdenoff/be-sdk 2026.703.1 → 2026.703.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.
@@ -1,5 +1,7 @@
1
1
  import { logger } from './chunk-CBZNP6RF.js';
2
2
  import { __name } from './chunk-XE4OXN2W.js';
3
+ import { PrismaPg } from '@prisma/adapter-pg';
4
+ import { Pool } from 'pg';
3
5
 
4
6
  // src/graph/utils/registry.ts
5
7
  var GraphRegistry = class {
@@ -367,6 +369,239 @@ function shouldSyncRelationship(relationshipType) {
367
369
  return config.enabled !== false;
368
370
  }
369
371
  __name(shouldSyncRelationship, "shouldSyncRelationship");
372
+ function createConnectionPool(config) {
373
+ const poolConfig = {
374
+ connectionString: config.databaseUrl,
375
+ max: config.maxConnections ?? 20,
376
+ idleTimeoutMillis: config.idleTimeoutMillis ?? 3e4,
377
+ connectionTimeoutMillis: config.connectionTimeoutMillis ?? 1e4
378
+ };
379
+ if (config.applicationName) {
380
+ poolConfig.application_name = config.applicationName;
381
+ }
382
+ if (config.statementTimeoutMillis != null && config.statementTimeoutMillis > 0) {
383
+ poolConfig.statement_timeout = config.statementTimeoutMillis;
384
+ }
385
+ if (config.idleInTransactionTimeoutMillis != null && config.idleInTransactionTimeoutMillis > 0) {
386
+ poolConfig.idle_in_transaction_session_timeout = config.idleInTransactionTimeoutMillis;
387
+ }
388
+ if (config.lockTimeoutMillis != null && config.lockTimeoutMillis > 0) {
389
+ poolConfig.lock_timeout = config.lockTimeoutMillis;
390
+ }
391
+ return new Pool(poolConfig);
392
+ }
393
+ __name(createConnectionPool, "createConnectionPool");
394
+ function ensureServiceApplicationName(productName) {
395
+ if (productName && !process.env["PGAPPNAME"]) {
396
+ process.env["PGAPPNAME"] = `svc=${productName}`;
397
+ }
398
+ }
399
+ __name(ensureServiceApplicationName, "ensureServiceApplicationName");
400
+ function createPrismaAdapter(pool) {
401
+ return new PrismaPg(pool);
402
+ }
403
+ __name(createPrismaAdapter, "createPrismaAdapter");
404
+ function configurePrismaLogging(client, config) {
405
+ const isDevelopment = process.env["NODE_ENV"] === "development";
406
+ const slowQueryThreshold = config.slowQueryThreshold ?? (isDevelopment ? 100 : 500);
407
+ if (config.enableQueryLogging ?? isDevelopment) {
408
+ client.$on("query", (e) => {
409
+ if ("query" in e && "duration" in e) {
410
+ if (e.duration > slowQueryThreshold) {
411
+ logger.warn("[Prisma] Slow query detected", {
412
+ query: e.query.substring(0, 200) + (e.query.length > 200 ? "..." : ""),
413
+ params: e.params,
414
+ duration: `${e.duration}ms`
415
+ });
416
+ } else {
417
+ logger.debug("[Prisma] Query", {
418
+ query: e.query.substring(0, 100) + (e.query.length > 100 ? "..." : ""),
419
+ duration: `${e.duration}ms`
420
+ });
421
+ }
422
+ }
423
+ });
424
+ }
425
+ client.$on("error", (e) => {
426
+ if ("message" in e) {
427
+ logger.error("[Prisma] Database error", {
428
+ message: e.message,
429
+ target: e.target
430
+ });
431
+ }
432
+ });
433
+ client.$on("warn", (e) => {
434
+ if ("message" in e) {
435
+ logger.warn("[Prisma] Database warning", {
436
+ message: e.message,
437
+ target: e.target
438
+ });
439
+ }
440
+ });
441
+ return client;
442
+ }
443
+ __name(configurePrismaLogging, "configurePrismaLogging");
444
+ var PrismaClientWrapper = class {
445
+ static {
446
+ __name(this, "PrismaClientWrapper");
447
+ }
448
+ client;
449
+ pool;
450
+ connectionState = {
451
+ isConnected: false,
452
+ attempts: 0
453
+ };
454
+ isDisconnecting = false;
455
+ constructor(client, pool, config) {
456
+ this.client = client;
457
+ this.pool = pool;
458
+ configurePrismaLogging(this.client, config);
459
+ }
460
+ /**
461
+ * Get the Prisma client instance
462
+ */
463
+ getClient() {
464
+ return this.client;
465
+ }
466
+ /**
467
+ * Get the connection pool
468
+ */
469
+ getPool() {
470
+ return this.pool;
471
+ }
472
+ /**
473
+ * Get connection state
474
+ */
475
+ getConnectionState() {
476
+ return {
477
+ ...this.connectionState
478
+ };
479
+ }
480
+ /**
481
+ * Connect to database with retry logic
482
+ */
483
+ async connect(retries = 5, delay = 1e3) {
484
+ if (this.connectionState.isConnected) {
485
+ logger.info("[Prisma] Already connected to database");
486
+ return;
487
+ }
488
+ for (let attempt = 1; attempt <= retries; attempt++) {
489
+ this.connectionState.attempts = attempt;
490
+ try {
491
+ await this.client.$connect();
492
+ this.connectionState.isConnected = true;
493
+ this.connectionState.lastConnectedAt = /* @__PURE__ */ new Date();
494
+ this.connectionState.lastError = void 0;
495
+ logger.info("[Prisma] Successfully connected to database");
496
+ return;
497
+ } catch (error) {
498
+ const errorMessage = error instanceof Error ? error.message : String(error);
499
+ this.connectionState.lastError = errorMessage;
500
+ logger.error(`[Prisma] Connection attempt ${attempt}/${retries} failed`, {
501
+ error: errorMessage
502
+ });
503
+ if (attempt === retries) {
504
+ logger.error("[Prisma] Max connection retries reached");
505
+ throw error;
506
+ }
507
+ const waitTime = delay * Math.pow(2, attempt - 1);
508
+ logger.info(`[Prisma] Retrying in ${waitTime}ms...`);
509
+ await new Promise((resolve) => setTimeout(resolve, waitTime));
510
+ }
511
+ }
512
+ }
513
+ /**
514
+ * Gracefully disconnect from database
515
+ */
516
+ async disconnect() {
517
+ if (this.isDisconnecting) {
518
+ logger.debug("[Prisma] Disconnect already in progress, skipping");
519
+ return;
520
+ }
521
+ if (!this.connectionState.isConnected) {
522
+ logger.info("[Prisma] Database already disconnected");
523
+ return;
524
+ }
525
+ this.isDisconnecting = true;
526
+ try {
527
+ await this.client.$disconnect();
528
+ await this.pool.end();
529
+ this.connectionState.isConnected = false;
530
+ logger.info("[Prisma] Successfully disconnected from database");
531
+ } catch (error) {
532
+ const errorMessage = error instanceof Error ? error.message : String(error);
533
+ if (errorMessage.includes("Called end on pool more than once")) {
534
+ logger.debug("[Prisma] Pool already ended, ignoring duplicate end call");
535
+ this.connectionState.isConnected = false;
536
+ return;
537
+ }
538
+ logger.error("[Prisma] Error disconnecting from database", {
539
+ error: errorMessage
540
+ });
541
+ throw error;
542
+ } finally {
543
+ this.isDisconnecting = false;
544
+ }
545
+ }
546
+ /**
547
+ * Register graceful shutdown handlers
548
+ */
549
+ registerShutdownHandlers() {
550
+ const shutdownHandler = /* @__PURE__ */ __name(async (signal) => {
551
+ logger.info(`[Prisma] Received ${signal}, starting graceful shutdown...`);
552
+ try {
553
+ await this.disconnect();
554
+ process.exit(0);
555
+ } catch (error) {
556
+ logger.error("[Prisma] Error during graceful shutdown", {
557
+ error: error instanceof Error ? error.message : String(error)
558
+ });
559
+ process.exit(1);
560
+ }
561
+ }, "shutdownHandler");
562
+ process.on("SIGINT", () => void shutdownHandler("SIGINT"));
563
+ process.on("SIGTERM", () => void shutdownHandler("SIGTERM"));
564
+ process.on("beforeExit", () => void this.disconnect());
565
+ }
566
+ };
567
+ function createPrismaClient(PrismaClientConstructor, config) {
568
+ const isDevelopment = process.env["NODE_ENV"] === "development";
569
+ const pool = createConnectionPool(config);
570
+ const adapter = createPrismaAdapter(pool);
571
+ const logLevels = config.logLevels ?? (isDevelopment ? [
572
+ {
573
+ emit: "event",
574
+ level: "query"
575
+ },
576
+ {
577
+ emit: "event",
578
+ level: "info"
579
+ },
580
+ {
581
+ emit: "event",
582
+ level: "warn"
583
+ },
584
+ {
585
+ emit: "event",
586
+ level: "error"
587
+ }
588
+ ] : [
589
+ {
590
+ emit: "event",
591
+ level: "warn"
592
+ },
593
+ {
594
+ emit: "event",
595
+ level: "error"
596
+ }
597
+ ]);
598
+ const client = new PrismaClientConstructor({
599
+ adapter,
600
+ log: logLevels
601
+ });
602
+ return new PrismaClientWrapper(client, pool, config);
603
+ }
604
+ __name(createPrismaClient, "createPrismaClient");
370
605
 
371
606
  // src/graph/middleware/prisma-extension.ts
372
607
  var defaultConfig = {
@@ -559,6 +794,6 @@ function addGraphExtension(baseClient, config) {
559
794
  }
560
795
  __name(addGraphExtension, "addGraphExtension");
561
796
 
562
- export { GraphRegistry, addGraphExtension, createEntityEvent, createRelationshipEvent, extractEntityTitle, extractMinimalFields, getCollectionForEntity, parseRelationship, shouldSyncEntity, shouldSyncRelationship };
563
- //# sourceMappingURL=chunk-5CESUKWC.js.map
564
- //# sourceMappingURL=chunk-5CESUKWC.js.map
797
+ export { GraphRegistry, PrismaClientWrapper, addGraphExtension, configurePrismaLogging, createConnectionPool, createEntityEvent, createPrismaAdapter, createPrismaClient, createRelationshipEvent, ensureServiceApplicationName, extractEntityTitle, extractMinimalFields, getCollectionForEntity, parseRelationship, shouldSyncEntity, shouldSyncRelationship };
798
+ //# sourceMappingURL=chunk-Q23NPVWQ.js.map
799
+ //# sourceMappingURL=chunk-Q23NPVWQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/graph/utils/registry.ts","../src/graph/utils/helpers.ts","../src/prisma/client.ts","../src/graph/middleware/prisma-extension.ts"],"names":["GraphRegistry","entityMappings","Map","relationshipMappings","registeredModules","Set","resolveFields","entityType","config","Array","isArray","fields","logger","warn","registerModule","moduleName","entities","relationships","has","info","entityCount","entityConfig","Object","entries","enabled","resolvedFields","resolvedConfig","set","relationshipCount","relationshipType","relationshipConfig","add","getEntityConfig","get","getRelationshipConfig","getAllEntityTypes","from","keys","getAllRelationshipTypes","getRegisteredModules","isEntityRegistered","isRelationshipRegistered","getOrganizationId","data","getOrgId","undefined","getWorkspaceId","getRbacConfig","rbac","resolveRbacMetadata","entityData","rbacConfig","name","extractName","identifier","extractIdentifier","parentResourceIdentifier","parentResourceField","resourceTypeName","createResource","getStats","collections","edgeTypes","values","collection","label","modules","size","clear","getRelationshipsForEntity","result","key","push","printStatus","stats","join","uuidv4","crypto","randomUUID","createEntityEvent","eventType","organizationId","entity","metadata","productSource","eventId","process","env","timestamp","Date","toISOString","userId","correlationId","createRelationshipEvent","relationship","id","to","type","extractMinimalFields","modelName","minimal","field","parseRelationship","String","fromField","extractMetadata","getCollectionForEntity","extractEntityTitle","extractTitle","shouldSyncEntity","shouldSyncRelationship","createConnectionPool","poolConfig","connectionString","databaseUrl","max","maxConnections","idleTimeoutMillis","connectionTimeoutMillis","applicationName","application_name","statementTimeoutMillis","statement_timeout","idleInTransactionTimeoutMillis","idle_in_transaction_session_timeout","lockTimeoutMillis","lock_timeout","Pool","ensureServiceApplicationName","productName","createPrismaAdapter","pool","PrismaPg","configurePrismaLogging","client","isDevelopment","slowQueryThreshold","enableQueryLogging","$on","e","duration","query","substring","length","params","debug","error","message","target","PrismaClientWrapper","connectionState","isConnected","attempts","isDisconnecting","getClient","getPool","getConnectionState","connect","retries","delay","attempt","$connect","lastConnectedAt","lastError","errorMessage","Error","waitTime","Math","pow","Promise","resolve","setTimeout","disconnect","$disconnect","end","includes","registerShutdownHandlers","shutdownHandler","signal","exit","on","createPrismaClient","PrismaClientConstructor","adapter","logLevels","emit","level","log","defaultConfig","monitoredOperations","extractEntityInfo","model","record","extractContext","args","actorId","workspaceId","emitEntityEvent","entityInfo","entityTypes","context","minimalData","orgId","rbacMetadata","hasName","eventEmitter","publishEntityEvent","catch","emitRelationshipEvents","fromId","relationshipKey","foreignKeyValue","targetType","polymorphicTypeField","description","relationType","addGraphExtension","baseClient","fullConfig","prismaClient","$extends","$allModels","create","update","delete","updateMany","deleteMany"],"mappings":"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","file":"chunk-Q23NPVWQ.js","sourcesContent":["/**\n * Graph Registry - Decentralized Graph Configuration System\n *\n * This registry allows each module to define its own graph configuration\n * without touching the central graph module. Modules register their entity\n * and relationship mappings, which are then used by the graph sync service.\n *\n * @module graph-registry\n * @category Graph\n */\nimport { logger } from '../../logger/index.js';\nimport type {\n EntityGraphConfig,\n ModuleGraphConfig,\n RelationshipGraphConfig,\n RegistryEntityRbacConfig,\n} from '../types.js';\n\n/**\n * Internal representation of entity config with resolved fields\n */\ninterface ResolvedEntityGraphConfig extends Omit<EntityGraphConfig, 'fields'> {\n fields: string[];\n getOrgId?: (data: Record<string, unknown>) => string | undefined;\n getWorkspaceId?: (data: Record<string, unknown>) => string | undefined;\n rbac?: RegistryEntityRbacConfig;\n}\n\n/**\n * Central registry for all graph configurations\n */\nexport class GraphRegistry {\n private static entityMappings: Map<string, ResolvedEntityGraphConfig> = new Map();\n private static relationshipMappings: Map<string, RelationshipGraphConfig> = new Map();\n private static registeredModules: Set<string> = new Set();\n\n /**\n * Resolve fields from entity configuration\n *\n * @param entityType - Name of the entity type\n * @param config - Entity configuration\n * @returns Resolved array of field names\n */\n private static resolveFields(entityType: string, config: EntityGraphConfig): string[] {\n if (Array.isArray(config.fields)) {\n return config.fields;\n }\n\n // Fallback: empty array if fields not configured\n logger.warn(`[GraphRegistry] No fields configuration for ${entityType}, using empty array`);\n return [];\n }\n\n /**\n * Register a module's graph configuration\n * @param config - Module graph configuration\n */\n static registerModule(config: ModuleGraphConfig): void {\n const { moduleName, entities, relationships } = config;\n\n if (this.registeredModules.has(moduleName)) {\n logger.warn(`[GraphRegistry] Module '${moduleName}' already registered, skipping`);\n return;\n }\n\n logger.info(`[GraphRegistry] Registering module: ${moduleName}`);\n\n // Register entities\n let entityCount = 0;\n for (const [entityType, entityConfig] of Object.entries(entities)) {\n if (entityConfig.enabled !== false) {\n // Resolve fields\n const resolvedFields = this.resolveFields(entityType, entityConfig);\n\n // Store resolved configuration\n const resolvedConfig: ResolvedEntityGraphConfig = {\n ...entityConfig,\n fields: resolvedFields,\n };\n\n this.entityMappings.set(entityType, resolvedConfig);\n entityCount++;\n }\n }\n\n // Register relationships\n let relationshipCount = 0;\n if (relationships) {\n for (const [relationshipType, relationshipConfig] of Object.entries(relationships)) {\n if (relationshipConfig.enabled !== false) {\n this.relationshipMappings.set(relationshipType, relationshipConfig);\n relationshipCount++;\n }\n }\n }\n\n this.registeredModules.add(moduleName);\n logger.info(\n `[GraphRegistry] ✅ Registered ${moduleName}: ${entityCount} entities, ${relationshipCount} relationships`\n );\n }\n\n /**\n * Get entity configuration by entity type\n * @param entityType - Entity type name (e.g., 'Calendar', 'Group')\n * @returns Entity configuration or undefined (with resolved fields)\n */\n static getEntityConfig(entityType: string): ResolvedEntityGraphConfig | undefined {\n return this.entityMappings.get(entityType);\n }\n\n /**\n * Get relationship configuration by relationship type\n * @param relationshipType - Relationship type name (e.g., 'EventAttendee', 'GroupMembership')\n * @returns Relationship configuration or undefined\n */\n static getRelationshipConfig(relationshipType: string): RelationshipGraphConfig | undefined {\n return this.relationshipMappings.get(relationshipType);\n }\n\n /**\n * Get all registered entity types\n * @returns Array of entity type names\n */\n static getAllEntityTypes(): string[] {\n return Array.from(this.entityMappings.keys());\n }\n\n /**\n * Get all registered relationship types\n * @returns Array of relationship type names\n */\n static getAllRelationshipTypes(): string[] {\n return Array.from(this.relationshipMappings.keys());\n }\n\n /**\n * Get all registered module names\n * @returns Array of module names\n */\n static getRegisteredModules(): string[] {\n return Array.from(this.registeredModules);\n }\n\n /**\n * Check if an entity type is registered\n * @param entityType - Entity type to check\n * @returns True if registered\n */\n static isEntityRegistered(entityType: string): boolean {\n return this.entityMappings.has(entityType);\n }\n\n /**\n * Check if a relationship type is registered\n * @param relationshipType - Relationship type to check\n * @returns True if registered\n */\n static isRelationshipRegistered(relationshipType: string): boolean {\n return this.relationshipMappings.has(relationshipType);\n }\n\n /**\n * Extract organization ID from entity data using configured mapping function\n * @param entityType - Entity type name\n * @param data - Entity data record\n * @returns Organization ID or undefined\n */\n static getOrganizationId(entityType: string, data: Record<string, unknown>): string | undefined {\n const config = this.entityMappings.get(entityType);\n if (!config || !config.getOrgId) {\n return undefined;\n }\n return config.getOrgId(data);\n }\n\n /**\n * Extract workspace ID from entity data using configured mapping function\n * @param entityType - Entity type name\n * @param data - Entity data record\n * @returns Workspace ID or undefined\n */\n static getWorkspaceId(entityType: string, data: Record<string, unknown>): string | undefined {\n const config = this.entityMappings.get(entityType);\n if (!config || !config.getWorkspaceId) {\n return undefined;\n }\n return config.getWorkspaceId(data);\n }\n\n /**\n * Get RBAC configuration for an entity type\n * Used by the Prisma graph extension to include RBAC metadata in entity events\n * @param entityType - Entity type name (e.g., 'Conversation', 'Agent')\n * @returns RBAC config or undefined if no RBAC is configured for this entity\n */\n static getRbacConfig(entityType: string): RegistryEntityRbacConfig | undefined {\n const config = this.entityMappings.get(entityType);\n return config?.rbac;\n }\n\n /**\n * Resolve RBAC event metadata from entity data\n * Converts the registry's function-based RBAC config into the flat metadata\n * structure expected by the RBAC consumer in the NATS event payload.\n * @param entityType - Entity type name\n * @param entityData - The entity data record\n * @returns RBAC metadata for the event or undefined\n */\n static resolveRbacMetadata(\n entityType: string,\n entityData: Record<string, unknown>\n ):\n | {\n resourceTypeName: string;\n name?: string;\n identifier?: string;\n parentResourceIdentifier?: string;\n createResource?: boolean;\n }\n | undefined {\n const rbacConfig = this.getRbacConfig(entityType);\n if (!rbacConfig) {\n return undefined;\n }\n\n const name = rbacConfig.extractName ? rbacConfig.extractName(entityData) : undefined;\n const identifier = rbacConfig.extractIdentifier ? rbacConfig.extractIdentifier(entityData) : undefined;\n const parentResourceIdentifier = rbacConfig.parentResourceField\n ? (entityData[rbacConfig.parentResourceField] as string | undefined)\n : undefined;\n\n return {\n resourceTypeName: rbacConfig.resourceTypeName,\n ...(name && { name }),\n ...(identifier && { identifier }),\n ...(parentResourceIdentifier && { parentResourceIdentifier }),\n ...(rbacConfig.createResource !== undefined && { createResource: rbacConfig.createResource }),\n };\n }\n\n /**\n * Get statistics about registered configurations\n * @returns Statistics object\n */\n static getStats(): {\n modules: number;\n entities: number;\n relationships: number;\n collections: Set<string>;\n edgeTypes: Set<string>;\n } {\n const collections = new Set<string>();\n const edgeTypes = new Set<string>();\n\n for (const config of this.entityMappings.values()) {\n collections.add(config.collection || 'product_entities');\n }\n\n for (const config of this.relationshipMappings.values()) {\n if (config.label) {\n edgeTypes.add(config.label);\n }\n }\n\n return {\n modules: this.registeredModules.size,\n entities: this.entityMappings.size,\n relationships: this.relationshipMappings.size,\n collections,\n edgeTypes,\n };\n }\n\n /**\n * Clear all registrations (for testing)\n */\n static clear(): void {\n this.entityMappings.clear();\n this.relationshipMappings.clear();\n this.registeredModules.clear();\n logger.info('[GraphRegistry] Cleared all registrations');\n }\n\n /**\n * Get all relationships where the given entity type is the \"from\" side\n * This is used for automatic relationship event emission when entities are created/updated\n * @param entityType - Entity type name (e.g., 'UniversalTag')\n * @returns Array of [relationshipKey, config] tuples\n */\n static getRelationshipsForEntity(entityType: string): Array<[string, RelationshipGraphConfig]> {\n const result: Array<[string, RelationshipGraphConfig]> = [];\n\n for (const [key, config] of this.relationshipMappings.entries()) {\n if (config.from === entityType) {\n result.push([key, config]);\n }\n }\n\n return result;\n }\n\n /**\n * Print registry status to console\n */\n static printStatus(): void {\n const stats = this.getStats();\n logger.info('');\n logger.info('📊 Graph Registry Status');\n logger.info('========================');\n logger.info(`Registered Modules: ${stats.modules}`);\n logger.info(`Total Entities: ${stats.entities}`);\n logger.info(`Total Relationships: ${stats.relationships}`);\n logger.info(`Vertex Collections: ${stats.collections.size}`);\n logger.info(`Edge Types: ${stats.edgeTypes.size}`);\n logger.info('');\n logger.info('Registered Modules:', this.getRegisteredModules().join(', '));\n logger.info('');\n }\n}\n","/**\n * Event Helpers - Registry-Based Graph Event Utilities\n *\n * This version uses the GraphRegistry to dynamically load entity and relationship\n * configurations from module-level graph.config.ts files.\n *\n * @module graph-helpers\n * @category Graph\n */\nimport { logger } from '../../logger/index.js';\nimport type { GraphEvent, GraphEventType } from '../types.js';\nimport { GraphRegistry } from './registry.js';\n\nconst uuidv4 = (): string => crypto.randomUUID();\n\n/**\n * Create an entity event for the graph\n */\nexport function createEntityEvent(\n eventType: GraphEventType,\n organizationId: string,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n metadata?: {\n userId?: string;\n correlationId?: string;\n workspaceId?: string;\n projectId?: string;\n },\n productSource?: string\n): GraphEvent {\n return {\n eventId: `evt_${uuidv4()}`,\n eventType,\n organizationId,\n productSource: productSource || process.env['PRODUCT_SOURCE'] || 'default',\n timestamp: new Date().toISOString(),\n entity,\n metadata: {\n userId: metadata?.userId,\n correlationId: metadata?.correlationId || `req_${uuidv4()}`,\n },\n };\n}\n\n/**\n * Create a relationship event for the graph\n */\nexport function createRelationshipEvent(\n eventType: GraphEventType,\n organizationId: string,\n relationship: {\n from: { id: string; type: string };\n to: { id: string; type: string };\n type: string;\n metadata: Record<string, unknown>;\n },\n metadata?: {\n userId?: string;\n correlationId?: string;\n },\n productSource?: string\n): GraphEvent {\n return {\n eventId: `evt_${uuidv4()}`,\n eventType,\n organizationId,\n productSource: productSource || process.env['PRODUCT_SOURCE'] || 'default',\n timestamp: new Date().toISOString(),\n entity: {\n id: `${relationship.from.id}_${relationship.to.id}`,\n type: relationship.type,\n data: {},\n },\n relationship,\n metadata: {\n userId: metadata?.userId,\n correlationId: metadata?.correlationId || `req_${uuidv4()}`,\n },\n };\n}\n\n/**\n * Extract minimal fields for syncing to graph (uses registry)\n *\n * @param modelName - Prisma model name (e.g., 'Calendar', 'Group')\n * @param entity - Full entity data from Prisma\n * @returns Minimal entity data for graph sync\n */\nexport function extractMinimalFields(modelName: string, entity: Record<string, unknown>): Record<string, unknown> {\n // Get entity config from registry\n const config = GraphRegistry.getEntityConfig(modelName);\n\n if (!config) {\n // Fallback: if entity not registered, just use id and workspaceID\n logger.warn(`[GraphHelpers] No graph config found for entity type: ${modelName}, using fallback`);\n const minimal: Record<string, unknown> = {};\n\n if (entity['id']) minimal['id'] = entity['id'];\n if (entity['workspaceID']) minimal['workspaceID'] = entity['workspaceID'];\n if (entity['workspaceId']) minimal['workspaceId'] = entity['workspaceId'];\n\n return minimal;\n }\n\n // Extract configured fields\n const minimal: Record<string, unknown> = {};\n\n for (const field of config.fields) {\n if (entity[field] !== undefined) {\n minimal[field] = entity[field];\n }\n }\n\n return minimal;\n}\n\n/**\n * Parse relationship from join table models (uses registry)\n *\n * @param modelName - Relationship model name (e.g., 'EventAttendee', 'GroupMembership')\n * @param relationship - Full relationship data from Prisma\n * @returns Parsed relationship with from/to/type/metadata\n */\nexport function parseRelationship(\n modelName: string,\n relationship: Record<string, unknown>\n): {\n from: { id: string; type: string };\n to: { id: string; type: string };\n relationshipType: string;\n metadata: Record<string, unknown>;\n} {\n // Get relationship config from registry\n const config = GraphRegistry.getRelationshipConfig(modelName);\n\n if (!config) {\n logger.warn(`[GraphHelpers] No graph config found for relationship type: ${modelName}, using fallback`);\n return {\n from: { id: 'unknown', type: 'Unknown' },\n to: { id: 'unknown', type: 'Unknown' },\n relationshipType: 'relates_to',\n metadata: {},\n };\n }\n\n // Extract relationship data using config\n return {\n from: {\n id: String(relationship[config.fromField] || 'unknown'),\n type: config.from,\n },\n to: {\n id: String(relationship[config.to] || 'unknown'),\n type: config.to,\n },\n relationshipType: config.label || 'relates_to',\n metadata: config.extractMetadata?.(relationship) ?? {},\n };\n}\n\n/**\n * Get the graph vertex label for an entity type (uses registry)\n *\n * @param entityType - Entity type name\n * @returns Collection name\n */\nexport function getCollectionForEntity(entityType: string): string {\n const config = GraphRegistry.getEntityConfig(entityType);\n\n if (!config) {\n // Default to product_entities if not registered\n return 'entity';\n }\n\n return config.collection || 'entity';\n}\n\n/**\n * Extract title from entity (uses registry or fallback)\n *\n * @param entityType - Entity type name\n * @param entity - Entity data\n * @returns Title string\n */\nexport function extractEntityTitle(entityType: string, entity: Record<string, unknown>): string {\n const config = GraphRegistry.getEntityConfig(entityType);\n\n // Use custom title extractor if provided\n if (config?.extractTitle) {\n return config.extractTitle(entity);\n }\n\n // Fallback: try common title fields\n return String(entity['name'] || entity['title'] || entity['email'] || entity['id'] || 'Untitled');\n}\n\n/**\n * Check if an entity type should be synced to the graph\n *\n * @param entityType - Entity type name\n * @returns True if entity should be synced\n */\nexport function shouldSyncEntity(entityType: string): boolean {\n const config = GraphRegistry.getEntityConfig(entityType);\n\n if (!config) {\n // If not registered, don't sync\n return false;\n }\n\n // Check if explicitly disabled\n return config.enabled !== false;\n}\n\n/**\n * Check if a relationship type should be synced to the graph\n *\n * @param relationshipType - Relationship type name\n * @returns True if relationship should be synced\n */\nexport function shouldSyncRelationship(relationshipType: string): boolean {\n const config = GraphRegistry.getRelationshipConfig(relationshipType);\n\n if (!config) {\n // If not registered, don't sync\n return false;\n }\n\n // Check if explicitly disabled\n return config.enabled !== false;\n}\n","/**\n * Prisma 7 Client Factory with PostgreSQL Adapter\n *\n * This module provides a generic factory for creating Prisma clients\n * configured with the PostgreSQL driver adapter as required by Prisma 7.\n *\n * Breaking Changes in Prisma 7:\n * - Must use database driver adapter (@prisma/adapter-pg for PostgreSQL)\n * - Datasource URL moved from schema.prisma to prisma.config.ts\n * - DMMF no longer available at runtime (use generator for build-time access)\n *\n * @module prisma/client\n */\n\nimport { PrismaPg } from '@prisma/adapter-pg';\nimport { Pool, type PoolConfig } from 'pg';\nimport { logger } from '../logger/index.js';\nimport type { PrismaClientConfig, ConnectionState } from './types.js';\n\n/**\n * Prisma event object types\n */\nexport interface PrismaQueryEvent {\n query: string;\n params: string;\n duration: number;\n target?: string;\n}\n\nexport interface PrismaLogEvent {\n message: string;\n target?: string;\n}\n\nexport type PrismaEvent = PrismaQueryEvent | PrismaLogEvent;\n\n/**\n * Transaction options for Prisma $transaction method\n */\nexport interface PrismaTransactionOptions {\n maxWait?: number;\n timeout?: number;\n isolationLevel?: string;\n}\n\n/**\n * Base Prisma client interface with required methods\n *\n * This interface defines the MINIMUM contract required for server bootstrapping.\n * It only includes methods actually used by the SDK's server module.\n *\n * Note: Service-specific model properties (e.g., universalTag, user, workspace, etc.)\n * and full method signatures should be accessed by casting to the service's\n * generated Prisma client type.\n *\n * @example\n * ```typescript\n * // In your service's context type:\n * import type { PrismaClient } from './generated/prisma/client.js';\n * import type { GraphQLContext } from '@burdenoff/be-sdk';\n *\n * export interface Context extends GraphQLContext {\n * db: PrismaClient;\n * }\n * ```\n */\nexport interface PrismaClientBase {\n /** Connect to the database */\n $connect(): Promise<void>;\n /** Disconnect from the database */\n $disconnect(): Promise<void>;\n /** Register event handlers for logging */\n $on(event: string, callback: (e: PrismaEvent) => void): void;\n /** Execute a raw SQL query */\n $queryRaw<T = unknown>(query: TemplateStringsArray, ...values: unknown[]): Promise<T>;\n}\n\n/**\n * Database client return type for getDb()\n *\n * Returns the service's PrismaClient type (T) with a `client` property\n * for backwards compatibility. All model access and typing comes from\n * the service's own generated Prisma types.\n *\n * @example\n * ```typescript\n * // In your service - import YOUR generated PrismaClient\n * import { PrismaClient } from './generated/prisma/client.js';\n * import { getDb } from '@burdenoff/be-sdk/prisma';\n *\n * // Pass your PrismaClient type for full type safety\n * const db = getDb<PrismaClient>();\n * const tags = await db.client.universalTag.findMany(); // Fully typed!\n * ```\n */\nexport type DatabaseReturnType<T extends PrismaClientBase = PrismaClientBase> = T & {\n /**\n * Client property for explicit model access.\n * This is the same as the db object itself, provided for API consistency.\n */\n client: T;\n};\n\n/**\n * Create a PostgreSQL connection pool.\n *\n * The base pool sizing (max / idle / connection timeout) is unchanged. The\n * optional tuning fields (`applicationName`, `statementTimeoutMillis`,\n * `idleInTransactionTimeoutMillis`, `lockTimeoutMillis`) are only attached to\n * the pool config when explicitly provided — when they are all unset, the\n * resulting pool is byte-for-byte identical to the previous behavior. This keeps\n * the change safe to roll out fleet-wide: `application_name` is pure diagnostic\n * metadata, and every DB-enforced timeout defaults to OFF (pg default).\n */\nexport function createConnectionPool(config: PrismaClientConfig): Pool {\n const poolConfig: PoolConfig = {\n connectionString: config.databaseUrl,\n max: config.maxConnections ?? 20,\n idleTimeoutMillis: config.idleTimeoutMillis ?? 30000,\n connectionTimeoutMillis: config.connectionTimeoutMillis ?? 10000,\n };\n\n // Diagnostic metadata only — no effect on query behavior.\n if (config.applicationName) {\n poolConfig.application_name = config.applicationName;\n }\n\n // DB-enforced safety timeouts — only applied when explicitly opted in, so the\n // default (unset) preserves the current no-server-timeout behavior exactly.\n if (config.statementTimeoutMillis != null && config.statementTimeoutMillis > 0) {\n poolConfig.statement_timeout = config.statementTimeoutMillis;\n }\n if (config.idleInTransactionTimeoutMillis != null && config.idleInTransactionTimeoutMillis > 0) {\n poolConfig.idle_in_transaction_session_timeout = config.idleInTransactionTimeoutMillis;\n }\n if (config.lockTimeoutMillis != null && config.lockTimeoutMillis > 0) {\n poolConfig.lock_timeout = config.lockTimeoutMillis;\n }\n\n return new Pool(poolConfig);\n}\n\n/**\n * Ensure a per-service Postgres `application_name` is set process-wide.\n *\n * node-postgres reads the libpq `PGAPPNAME` environment variable as the\n * `application_name` fallback for every Client/Pool it creates. Setting it here\n * guarantees per-service attribution in pg_stat_activity / pg_stat_statements for\n * ALL pools a service opens — including pools a service constructs itself (e.g.\n * via `createPrismaGraphIntegration`'s `createPrismaClient` closure) that bypass\n * `createConnectionPool`.\n *\n * Behavior-preserving: this is pure diagnostic metadata, it is only applied when\n * `PGAPPNAME` is not already set (so an explicit operator/env value wins), and an\n * explicit `application_name` in a pool config still takes precedence over the\n * env fallback.\n */\nexport function ensureServiceApplicationName(productName: string | undefined): void {\n if (productName && !process.env['PGAPPNAME']) {\n process.env['PGAPPNAME'] = `svc=${productName}`;\n }\n}\n\n/**\n * Create a Prisma PostgreSQL adapter\n */\nexport function createPrismaAdapter(pool: Pool): PrismaPg {\n return new PrismaPg(pool);\n}\n\n/**\n * Configure Prisma client logging\n */\nexport function configurePrismaLogging<T extends PrismaClientBase>(client: T, config: PrismaClientConfig): T {\n const isDevelopment = process.env['NODE_ENV'] === 'development';\n const slowQueryThreshold = config.slowQueryThreshold ?? (isDevelopment ? 100 : 500);\n\n // Query logging\n if (config.enableQueryLogging ?? isDevelopment) {\n client.$on('query', (e: PrismaEvent) => {\n if ('query' in e && 'duration' in e) {\n if (e.duration > slowQueryThreshold) {\n logger.warn('[Prisma] Slow query detected', {\n query: e.query.substring(0, 200) + (e.query.length > 200 ? '...' : ''),\n params: e.params,\n duration: `${e.duration}ms`,\n });\n } else {\n logger.debug('[Prisma] Query', {\n query: e.query.substring(0, 100) + (e.query.length > 100 ? '...' : ''),\n duration: `${e.duration}ms`,\n });\n }\n }\n });\n }\n\n // Error logging\n client.$on('error', (e: PrismaEvent) => {\n if ('message' in e) {\n logger.error('[Prisma] Database error', {\n message: e.message,\n target: e.target,\n });\n }\n });\n\n // Warning logging\n client.$on('warn', (e: PrismaEvent) => {\n if ('message' in e) {\n logger.warn('[Prisma] Database warning', {\n message: e.message,\n target: e.target,\n });\n }\n });\n\n return client;\n}\n\n/**\n * Prisma Client Wrapper with connection management\n */\nexport class PrismaClientWrapper<T extends PrismaClientBase> {\n private client: T;\n private pool: Pool;\n private connectionState: ConnectionState = {\n isConnected: false,\n attempts: 0,\n };\n private isDisconnecting = false;\n\n constructor(client: T, pool: Pool, config: PrismaClientConfig) {\n this.client = client;\n this.pool = pool;\n\n // Configure logging\n configurePrismaLogging(this.client, config);\n }\n\n /**\n * Get the Prisma client instance\n */\n public getClient(): T {\n return this.client;\n }\n\n /**\n * Get the connection pool\n */\n public getPool(): Pool {\n return this.pool;\n }\n\n /**\n * Get connection state\n */\n public getConnectionState(): ConnectionState {\n return { ...this.connectionState };\n }\n\n /**\n * Connect to database with retry logic\n */\n public async connect(retries = 5, delay = 1000): Promise<void> {\n if (this.connectionState.isConnected) {\n logger.info('[Prisma] Already connected to database');\n return;\n }\n\n for (let attempt = 1; attempt <= retries; attempt++) {\n this.connectionState.attempts = attempt;\n\n try {\n await this.client.$connect();\n this.connectionState.isConnected = true;\n this.connectionState.lastConnectedAt = new Date();\n this.connectionState.lastError = undefined;\n\n logger.info('[Prisma] Successfully connected to database');\n return;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.connectionState.lastError = errorMessage;\n\n logger.error(`[Prisma] Connection attempt ${attempt}/${retries} failed`, {\n error: errorMessage,\n });\n\n if (attempt === retries) {\n logger.error('[Prisma] Max connection retries reached');\n throw error;\n }\n\n // Exponential backoff\n const waitTime = delay * Math.pow(2, attempt - 1);\n logger.info(`[Prisma] Retrying in ${waitTime}ms...`);\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n }\n }\n }\n\n /**\n * Gracefully disconnect from database\n */\n public async disconnect(): Promise<void> {\n // Guard against multiple disconnect calls\n if (this.isDisconnecting) {\n logger.debug('[Prisma] Disconnect already in progress, skipping');\n return;\n }\n\n if (!this.connectionState.isConnected) {\n logger.info('[Prisma] Database already disconnected');\n return;\n }\n\n // Mark as disconnecting to prevent concurrent disconnect calls\n this.isDisconnecting = true;\n\n try {\n await this.client.$disconnect();\n await this.pool.end();\n this.connectionState.isConnected = false;\n\n logger.info('[Prisma] Successfully disconnected from database');\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Ignore \"Called end on pool more than once\" errors\n if (errorMessage.includes('Called end on pool more than once')) {\n logger.debug('[Prisma] Pool already ended, ignoring duplicate end call');\n this.connectionState.isConnected = false;\n return;\n }\n\n logger.error('[Prisma] Error disconnecting from database', {\n error: errorMessage,\n });\n throw error;\n } finally {\n this.isDisconnecting = false;\n }\n }\n\n /**\n * Register graceful shutdown handlers\n */\n public registerShutdownHandlers(): void {\n const shutdownHandler = async (signal: string): Promise<void> => {\n logger.info(`[Prisma] Received ${signal}, starting graceful shutdown...`);\n\n try {\n await this.disconnect();\n process.exit(0);\n } catch (error) {\n logger.error('[Prisma] Error during graceful shutdown', {\n error: error instanceof Error ? error.message : String(error),\n });\n process.exit(1);\n }\n };\n\n // Register shutdown handlers\n process.on('SIGINT', () => void shutdownHandler('SIGINT'));\n process.on('SIGTERM', () => void shutdownHandler('SIGTERM'));\n process.on('beforeExit', () => void this.disconnect());\n }\n}\n\n/**\n * Create a configured Prisma client wrapper\n *\n * @example\n * ```typescript\n * import { PrismaClient } from './generated/prisma/client.js';\n * import { createPrismaClient } from '@burdenoff/be-sdk';\n *\n * const wrapper = createPrismaClient(PrismaClient, {\n * databaseUrl: process.env.DATABASE_URL!,\n * });\n *\n * await wrapper.connect();\n * const prisma = wrapper.getClient();\n *\n * // Use prisma client\n * const users = await prisma.user.findMany();\n * ```\n */\n/**\n * Prisma log level options\n */\nexport type PrismaLogLevel = 'info' | 'query' | 'warn' | 'error';\n\n/**\n * Prisma log definition\n */\nexport interface PrismaLogDefinition {\n level: PrismaLogLevel;\n emit: 'stdout' | 'event';\n}\n\n/**\n * Prisma client constructor options\n */\nexport interface PrismaClientConstructorOptions {\n adapter: PrismaPg;\n log?: (PrismaLogLevel | PrismaLogDefinition)[];\n}\n\nexport function createPrismaClient<T extends PrismaClientBase>(\n PrismaClientConstructor: new (options: PrismaClientConstructorOptions) => T,\n config: PrismaClientConfig\n): PrismaClientWrapper<T> {\n const isDevelopment = process.env['NODE_ENV'] === 'development';\n\n // Create connection pool\n const pool = createConnectionPool(config);\n\n // Create adapter\n const adapter = createPrismaAdapter(pool);\n\n // Determine log levels\n const logLevels: PrismaLogDefinition[] =\n (config.logLevels as PrismaLogDefinition[] | undefined) ??\n (isDevelopment\n ? [\n { emit: 'event', level: 'query' },\n { emit: 'event', level: 'info' },\n { emit: 'event', level: 'warn' },\n { emit: 'event', level: 'error' },\n ]\n : [\n { emit: 'event', level: 'warn' },\n { emit: 'event', level: 'error' },\n ]);\n\n // Create Prisma client\n const client = new PrismaClientConstructor({\n adapter,\n log: logLevels,\n });\n\n // Create and return wrapper\n return new PrismaClientWrapper(client, pool, config);\n}\n","/**\n * Prisma Middleware for Graph Event Emission\n *\n * Automatically emits events to the graph event queue when entities are\n * created, updated, or deleted in PostgreSQL.\n *\n * This is a product-agnostic Prisma extension that can be used by any Burdenoff product.\n *\n * @module prisma-graph-extension\n * @category Graph\n */\nimport { logger } from '../../logger/index.js';\nimport { extractMinimalFields } from '../utils/helpers.js';\nimport { GraphRegistry } from '../utils/registry.js';\n\n/**\n * Event types for entity operations\n */\nexport type EntityEventType =\n | 'entity.created'\n | 'entity.updated'\n | 'entity.deleted'\n | 'relationship.created'\n | 'relationship.deleted';\n\n/**\n * RBAC metadata for entity events (resolved from graph config)\n */\nexport interface EntityEventRbacMetadata {\n resourceTypeName: string;\n name?: string;\n identifier?: string;\n parentResourceIdentifier?: string;\n createResource?: boolean;\n}\n\n/**\n * Event emitter interface - products must provide their own implementation\n */\nexport interface GraphEventEmitter {\n publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n actorId?: string;\n workspaceId?: string;\n },\n rbac?: EntityEventRbacMetadata\n ): Promise<void>;\n}\n\n/**\n * Configuration for graph middleware\n */\nexport interface GraphMiddlewareConfig {\n /** Whether middleware is enabled */\n enabled: boolean;\n /** Product name for event metadata */\n productName: string;\n /** Event emitter implementation */\n eventEmitter: GraphEventEmitter;\n /** Entity types to monitor (if empty, monitors all registered types) */\n entityTypes?: string[];\n /** Operations to monitor */\n monitoredOperations?: Array<'create' | 'update' | 'delete' | 'deleteMany' | 'updateMany'>;\n}\n\n/**\n * Default configuration\n */\nconst defaultConfig: {\n enabled: boolean;\n monitoredOperations: Array<'create' | 'update' | 'delete' | 'deleteMany' | 'updateMany'>;\n} = {\n enabled: true,\n monitoredOperations: ['create', 'update', 'delete', 'deleteMany', 'updateMany'],\n};\n\n/**\n * Extract entity information from Prisma result\n */\nfunction extractEntityInfo(\n model: string,\n result: unknown\n): { id: string; type: string; data: Record<string, unknown> } | null {\n if (!result || typeof result !== 'object') {\n return null;\n }\n\n const record = result as Record<string, unknown>;\n const id = record['id'] as string;\n\n if (!id) {\n return null;\n }\n\n return {\n id,\n type: model,\n data: record,\n };\n}\n\n/**\n * Extract organization and user context from Prisma arguments\n */\nfunction extractContext(args: unknown): {\n organizationId?: string;\n actorId?: string;\n workspaceId?: string;\n} {\n if (!args || typeof args !== 'object') {\n return {};\n }\n\n const data =\n (args as { data?: Record<string, unknown>; where?: Record<string, unknown> })['data'] ||\n (args as { where?: Record<string, unknown> })['where'];\n\n if (!data || typeof data !== 'object') {\n return {};\n }\n\n return {\n organizationId: data['organizationId'] as string | undefined,\n actorId:\n (data['actorId'] as string | undefined) ||\n (data['createdBy'] as string | undefined) ||\n (data['updatedBy'] as string | undefined) ||\n (data['userId'] as string | undefined),\n workspaceId: (data['workspaceId'] as string | undefined) || (data['workspaceID'] as string | undefined),\n };\n}\n\n/**\n * Emit event for entity operation\n */\nfunction emitEntityEvent(\n eventType: EntityEventType,\n model: string,\n result: unknown,\n args: unknown,\n config: GraphMiddlewareConfig\n): void {\n const entityInfo = extractEntityInfo(model, result);\n if (!entityInfo) {\n return;\n }\n\n // Check if this entity type is registered in the graph registry\n if (!GraphRegistry.isEntityRegistered(model)) {\n return;\n }\n\n // Check if we should monitor this entity type\n if (config.entityTypes && config.entityTypes.length > 0 && !config.entityTypes.includes(model)) {\n return;\n }\n\n const context = extractContext(args);\n const minimalData = extractMinimalFields(model, entityInfo.data);\n\n // Use GraphRegistry to extract organization and workspace IDs from entity data\n // This allows entity-specific field mappings (e.g., tenantId → organizationId)\n const orgId = GraphRegistry.getOrganizationId(model, entityInfo.data) || context.organizationId || 'unknown';\n const workspaceId = GraphRegistry.getWorkspaceId(model, entityInfo.data) || context.workspaceId;\n const actorId = context.actorId || 'unknown';\n\n // Resolve RBAC metadata from GraphRegistry (if entity has rbac config)\n const rbacMetadata = GraphRegistry.resolveRbacMetadata(model, entityInfo.data);\n\n if (rbacMetadata) {\n logger.debug(`[GraphMiddleware] Including RBAC metadata for ${model}`, {\n resourceTypeName: rbacMetadata.resourceTypeName,\n hasName: !!rbacMetadata.name,\n });\n }\n\n // Emit event (non-blocking) — includes RBAC metadata when configured\n config.eventEmitter\n .publishEntityEvent(\n eventType,\n {\n id: entityInfo.id,\n type: entityInfo.type,\n data: minimalData,\n },\n {\n productName: config.productName,\n organizationId: orgId,\n actorId,\n workspaceId,\n },\n rbacMetadata\n )\n .catch((error: unknown) => {\n logger.error('[GraphMiddleware] Failed to emit event:', error);\n });\n\n // After emitting entity event, check for relationship events\n // Only for create/update operations\n if (eventType === 'entity.created' || eventType === 'entity.updated') {\n emitRelationshipEvents(model, entityInfo.data, orgId, config);\n }\n}\n\n/**\n * Emit relationship events based on foreign key values\n * This automatically creates edges in the graph when entities with foreign keys are created/updated\n */\nfunction emitRelationshipEvents(\n entityType: string,\n entityData: Record<string, unknown>,\n organizationId: string,\n config: GraphMiddlewareConfig\n): void {\n // Get all relationships where this entity type is the \"from\" side\n const relationships = GraphRegistry.getRelationshipsForEntity(entityType);\n\n if (relationships.length === 0) {\n return;\n }\n\n const fromId = entityData['id'] as string;\n if (!fromId) {\n return;\n }\n\n // For each relationship, check if the foreign key field has a value\n for (const [relationshipKey, relationshipConfig] of relationships) {\n const foreignKeyValue = entityData[relationshipConfig.fromField] as string | null | undefined;\n\n // Skip if foreign key is null/undefined (no relationship)\n if (!foreignKeyValue) {\n continue;\n }\n\n // Handle polymorphic relationships\n let targetType = relationshipConfig.to;\n if (relationshipConfig.to === '*') {\n if (relationshipConfig.polymorphicTypeField) {\n targetType = entityData[relationshipConfig.polymorphicTypeField] as string;\n if (!targetType) {\n logger.warn(`[GraphMiddleware] Polymorphic relationship ${relationshipKey} has no type field value`);\n continue;\n }\n } else {\n logger.debug(`[GraphMiddleware] Skipping polymorphic relationship without type field: ${relationshipKey}`);\n continue;\n }\n }\n\n // Extract metadata if configured\n const metadata = relationshipConfig.extractMetadata\n ? relationshipConfig.extractMetadata(entityData)\n : { description: relationshipConfig.description };\n\n // Emit relationship.created event\n config.eventEmitter\n .publishEntityEvent(\n 'relationship.created',\n {\n id: `${fromId}_${foreignKeyValue}`,\n type: relationshipConfig.label,\n data: {\n from: {\n id: fromId,\n type: entityType,\n },\n to: {\n id: foreignKeyValue,\n type: targetType,\n },\n relationType: relationshipConfig.label,\n metadata,\n },\n },\n {\n productName: config.productName,\n organizationId,\n }\n )\n .catch((error: unknown) => {\n logger.error(`[GraphMiddleware] Failed to emit relationship event for ${relationshipKey}:`, error);\n });\n\n logger.debug(\n `[GraphMiddleware] Emitted relationship.created: ${relationshipConfig.label} (${entityType}:${fromId} -> ${targetType}:${foreignKeyValue})`\n );\n }\n}\n\n/**\n * Add graph extension to Prisma client for automatic event emission\n *\n * This function uses Prisma Client Extensions (Prisma 6+) to intercept\n * database operations and emit events to the graph event queue.\n *\n * @param baseClient - Base Prisma client instance\n * @param config - Configuration for the middleware\n * @returns Extended Prisma client with graph event emission\n *\n * @example\n * ```typescript\n * import { PrismaClient } from '@prisma/client';\n * import { addGraphExtension } from '@burdenoff/be-sdk/graph';\n * import { eventQueue } from './event-queue';\n *\n * const baseClient = new PrismaClient();\n * const client = addGraphExtension(baseClient, {\n * enabled: true,\n * productName: 'workspaces',\n * eventEmitter: eventQueue,\n * entityTypes: ['Project', 'Group', 'Workspace'], // Optional: monitor specific types\n * });\n * ```\n */\nexport function addGraphExtension<T>(baseClient: T, config: GraphMiddlewareConfig): T {\n const fullConfig = { ...defaultConfig, ...config };\n\n if (!fullConfig.enabled) {\n logger.info('[GraphMiddleware] Extension disabled by configuration');\n return baseClient;\n }\n\n // Type assertion for Prisma client\n const prismaClient = baseClient as { $extends: (args: unknown) => T };\n\n return prismaClient.$extends({\n query: {\n $allModels: {\n async create({\n model,\n args,\n query,\n }: {\n model: string;\n args: unknown;\n query: (args: unknown) => Promise<unknown>;\n }) {\n const result = await query(args);\n\n if (fullConfig.monitoredOperations?.includes('create')) {\n emitEntityEvent('entity.created', model, result, args, fullConfig);\n }\n\n return result;\n },\n\n async update({\n model,\n args,\n query,\n }: {\n model: string;\n args: unknown;\n query: (args: unknown) => Promise<unknown>;\n }) {\n const result = await query(args);\n\n if (fullConfig.monitoredOperations?.includes('update')) {\n emitEntityEvent('entity.updated', model, result, args, fullConfig);\n }\n\n return result;\n },\n\n async delete({\n model,\n args,\n query,\n }: {\n model: string;\n args: unknown;\n query: (args: unknown) => Promise<unknown>;\n }) {\n const result = await query(args);\n\n if (fullConfig.monitoredOperations?.includes('delete')) {\n emitEntityEvent('entity.deleted', model, result, args, fullConfig);\n }\n\n return result;\n },\n\n async updateMany({\n model,\n args,\n query,\n }: {\n model: string;\n args: unknown;\n query: (args: unknown) => Promise<unknown>;\n }) {\n const result = await query(args);\n\n if (fullConfig.monitoredOperations?.includes('updateMany')) {\n logger.info(`[GraphMiddleware] updateMany for ${model} (bulk operation not tracked individually)`);\n }\n\n return result;\n },\n\n async deleteMany({\n model,\n args,\n query,\n }: {\n model: string;\n args: unknown;\n query: (args: unknown) => Promise<unknown>;\n }) {\n const result = await query(args);\n\n if (fullConfig.monitoredOperations?.includes('deleteMany')) {\n logger.info(`[GraphMiddleware] deleteMany for ${model} (bulk operation not tracked individually)`);\n }\n\n return result;\n },\n },\n },\n });\n}\n"]}
@@ -52,6 +52,7 @@ type DatabaseReturnType<T extends PrismaClientBase = PrismaClientBase> = T & {
52
52
  client: T;
53
53
  };
54
54
  declare function createConnectionPool(config: PrismaClientConfig): Pool;
55
+ declare function ensureServiceApplicationName(productName: string | undefined): void;
55
56
  declare function createPrismaAdapter(pool: Pool): PrismaPg;
56
57
  declare function configurePrismaLogging<T extends PrismaClientBase>(client: T, config: PrismaClientConfig): T;
57
58
  declare class PrismaClientWrapper<T extends PrismaClientBase> {
@@ -78,4 +79,4 @@ interface PrismaClientConstructorOptions {
78
79
  }
79
80
  declare function createPrismaClient<T extends PrismaClientBase>(PrismaClientConstructor: new (options: PrismaClientConstructorOptions) => T, config: PrismaClientConfig): PrismaClientWrapper<T>;
80
81
 
81
- export { type ConnectionState as C, type DatabaseReturnType as D, type PrismaClientBase as P, type PrismaClientConstructorOptions as a, PrismaClientWrapper as b, type PrismaClientConfig as c, type DatabaseHealth as d, type PrismaEvent as e, type PrismaLogDefinition as f, type PrismaLogEvent as g, type PrismaLogLevel as h, type PrismaQueryEvent as i, type PrismaTransactionOptions as j, configurePrismaLogging as k, createConnectionPool as l, createPrismaAdapter as m, createPrismaClient as n };
82
+ export { type ConnectionState as C, type DatabaseReturnType as D, type PrismaClientBase as P, type PrismaClientConstructorOptions as a, PrismaClientWrapper as b, type PrismaClientConfig as c, type DatabaseHealth as d, type PrismaEvent as e, type PrismaLogDefinition as f, type PrismaLogEvent as g, type PrismaLogLevel as h, type PrismaQueryEvent as i, type PrismaTransactionOptions as j, configurePrismaLogging as k, createConnectionPool as l, createPrismaAdapter as m, createPrismaClient as n, ensureServiceApplicationName as o };
@@ -1,10 +1,10 @@
1
1
  import '../graphql-BRj5KPOL.js';
2
2
  import '../index-DDCOGyYh.js';
3
- export { A as AUDIT_FIELDS, C as CreateEdgeOptions, a as CreateNodeOptions, D as DefineEntityConfigOptions, b as DefineGraphConfigOptions, c as DefineRelationshipConfigOptions, E as EdgeDocument, d as EntityDefinition, e as EntityEventContext, f as EntityEventData, g as EntityEventHook, h as EntityFetcher, j as EntityGraphConfig, k as EntityRbacConfig, l as EntityVertex, m as ExtractedEntityData, n as ExtractedRelationshipData, F as FieldMapper, o as GenericEntityConfig, p as GenericEntityRbacConfig, q as GenericGraphConfig, r as GenericRelationshipConfig, s as GraphEdge, t as GraphEntityConfig, u as GraphEntityExport, v as GraphEvent, w as GraphEventOptions, x as GraphEventPublishOptions, y as GraphEventType, z as GraphEventsHelper, B as GraphEventsHelperConfig, H as GraphEventsPublisher, I as GraphExportResponse, J as GraphExportService, K as GraphExportServiceConfig, G as GraphModule, L as GraphNode, M as GraphRegistry, N as GraphRelationshipData, O as GraphRelationshipExport, P as GraphSchema, Q as GraphValidationError, R as GraphValidationResult, S as InitializeGraphOptions, T as ModuleGraph, U as ModuleGraphConfig, V as ModuleGraphDefinition, W as PrismaGraphIntegration, X as PrismaGraphIntegrationOptions, Y as ProductFacet, Z as QueryGraphOptions, _ as RelationshipDefinition, $ as RelationshipEventData, a0 as RelationshipExportData, a1 as RelationshipFetcher, a2 as RelationshipGraphConfig, a3 as SOFT_DELETE_FIELDS, a4 as STANDARD_FIELDS, a5 as SearchFacets, a6 as SearchFilters, a7 as SearchResponse, a8 as SearchResult, a9 as TENANT_FIELDS, aa as TraverseDirection, ab as TraverseOptions, ac as TraverseResult, ad as TypeFacet, ae as ValidationErrorType, af as createEntityEvent, ag as createGraphEventsHelper, ah as createGraphExportService, ai as createPrismaGraphIntegration, aj as createRelationshipEvent, ak as createRelationshipFromEntity, al as defineEntity, am as defineGraphConfig, an as defineModuleGraph, ao as defineRelationship, ap as extractEntityTitle, aq as extractMinimalFields, ar as getCollectionForEntity, as as getGraphEventsPublisher, at as getGraphStats, au as initializeGraph, av as isGraphInitialized, aw as parseRelationship, ax as shouldSyncEntity, ay as shouldSyncRelationship } from '../index-ClXI02GS.js';
3
+ export { A as AUDIT_FIELDS, C as CreateEdgeOptions, a as CreateNodeOptions, D as DefineEntityConfigOptions, b as DefineGraphConfigOptions, c as DefineRelationshipConfigOptions, E as EdgeDocument, d as EntityDefinition, e as EntityEventContext, f as EntityEventData, g as EntityEventHook, h as EntityFetcher, j as EntityGraphConfig, k as EntityRbacConfig, l as EntityVertex, m as ExtractedEntityData, n as ExtractedRelationshipData, F as FieldMapper, o as GenericEntityConfig, p as GenericEntityRbacConfig, q as GenericGraphConfig, r as GenericRelationshipConfig, s as GraphEdge, t as GraphEntityConfig, u as GraphEntityExport, v as GraphEvent, w as GraphEventOptions, x as GraphEventPublishOptions, y as GraphEventType, z as GraphEventsHelper, B as GraphEventsHelperConfig, H as GraphEventsPublisher, I as GraphExportResponse, J as GraphExportService, K as GraphExportServiceConfig, G as GraphModule, L as GraphNode, M as GraphRegistry, N as GraphRelationshipData, O as GraphRelationshipExport, P as GraphSchema, Q as GraphValidationError, R as GraphValidationResult, S as InitializeGraphOptions, T as ModuleGraph, U as ModuleGraphConfig, V as ModuleGraphDefinition, W as PrismaGraphIntegration, X as PrismaGraphIntegrationOptions, Y as ProductFacet, Z as QueryGraphOptions, _ as RelationshipDefinition, $ as RelationshipEventData, a0 as RelationshipExportData, a1 as RelationshipFetcher, a2 as RelationshipGraphConfig, a3 as SOFT_DELETE_FIELDS, a4 as STANDARD_FIELDS, a5 as SearchFacets, a6 as SearchFilters, a7 as SearchResponse, a8 as SearchResult, a9 as TENANT_FIELDS, aa as TraverseDirection, ab as TraverseOptions, ac as TraverseResult, ad as TypeFacet, ae as ValidationErrorType, af as createEntityEvent, ag as createGraphEventsHelper, ah as createGraphExportService, ai as createPrismaGraphIntegration, aj as createRelationshipEvent, ak as createRelationshipFromEntity, al as defineEntity, am as defineGraphConfig, an as defineModuleGraph, ao as defineRelationship, ap as extractEntityTitle, aq as extractMinimalFields, ar as getCollectionForEntity, as as getGraphEventsPublisher, at as getGraphStats, au as initializeGraph, av as isGraphInitialized, aw as parseRelationship, ax as shouldSyncEntity, ay as shouldSyncRelationship } from '../index-DvDoMbXM.js';
4
4
  export { E as EntityEventType, G as GraphEventEmitter, a as GraphMiddlewareConfig, b as addGraphExtension } from '../prisma-extension-krXnYnrN.js';
5
5
  import 'graphql-request';
6
6
  import '../layer-GNAVXBMf.js';
7
- import '../client-CSEnihJT.js';
7
+ import '../client-ODOgzzs0.js';
8
8
  import '@prisma/adapter-pg';
9
9
  import 'pg';
10
10
  import '../graph-emitter-r5TylDBm.js';
@@ -1,5 +1,5 @@
1
- export { AUDIT_FIELDS, GraphEventsPublisher, GraphExportService, GraphModule, SOFT_DELETE_FIELDS, STANDARD_FIELDS, TENANT_FIELDS, createGraphEventsHelper, createGraphExportService, createPrismaGraphIntegration, createRelationshipFromEntity, defineEntity, defineGraphConfig, defineModuleGraph, defineRelationship, getGraphEventsPublisher, getGraphStats, initializeGraph, isGraphInitialized } from '../chunk-Z2423JIB.js';
2
- export { GraphRegistry, addGraphExtension, createEntityEvent, createRelationshipEvent, extractEntityTitle, extractMinimalFields, getCollectionForEntity, parseRelationship, shouldSyncEntity, shouldSyncRelationship } from '../chunk-5CESUKWC.js';
1
+ export { AUDIT_FIELDS, GraphEventsPublisher, GraphExportService, GraphModule, SOFT_DELETE_FIELDS, STANDARD_FIELDS, TENANT_FIELDS, createGraphEventsHelper, createGraphExportService, createPrismaGraphIntegration, createRelationshipFromEntity, defineEntity, defineGraphConfig, defineModuleGraph, defineRelationship, getGraphEventsPublisher, getGraphStats, initializeGraph, isGraphInitialized } from '../chunk-P7SUUFEX.js';
2
+ export { GraphRegistry, addGraphExtension, createEntityEvent, createRelationshipEvent, extractEntityTitle, extractMinimalFields, getCollectionForEntity, parseRelationship, shouldSyncEntity, shouldSyncRelationship } from '../chunk-Q23NPVWQ.js';
3
3
  import '../chunk-H3AXO5SY.js';
4
4
  import '../chunk-OHEPNJ2X.js';
5
5
  import '../chunk-MQCVQCFA.js';
@@ -1,4 +1,4 @@
1
- import { P as PrismaClientBase, b as PrismaClientWrapper, c as PrismaClientConfig, a as PrismaClientConstructorOptions, D as DatabaseReturnType, d as DatabaseHealth, C as ConnectionState, e as PrismaEvent, f as PrismaLogDefinition, g as PrismaLogEvent, h as PrismaLogLevel, i as PrismaQueryEvent, j as PrismaTransactionOptions, k as configurePrismaLogging, l as createConnectionPool, m as createPrismaAdapter, n as createPrismaClient } from './client-CSEnihJT.js';
1
+ import { P as PrismaClientBase, b as PrismaClientWrapper, c as PrismaClientConfig, a as PrismaClientConstructorOptions, D as DatabaseReturnType, d as DatabaseHealth, C as ConnectionState, e as PrismaEvent, f as PrismaLogDefinition, g as PrismaLogEvent, h as PrismaLogLevel, i as PrismaQueryEvent, j as PrismaTransactionOptions, k as configurePrismaLogging, l as createConnectionPool, m as createPrismaAdapter, n as createPrismaClient, o as ensureServiceApplicationName } from './client-ODOgzzs0.js';
2
2
  import { G as GraphEventEmitter } from './prisma-extension-krXnYnrN.js';
3
3
 
4
4
  interface WorkspaceContext {
@@ -177,6 +177,7 @@ declare const index_createDatabaseClient: typeof createDatabaseClient;
177
177
  declare const index_createDatabaseClientFromEnv: typeof createDatabaseClientFromEnv;
178
178
  declare const index_createPrismaAdapter: typeof createPrismaAdapter;
179
179
  declare const index_createPrismaClient: typeof createPrismaClient;
180
+ declare const index_ensureServiceApplicationName: typeof ensureServiceApplicationName;
180
181
  declare const index_extractFieldsFromModel: typeof extractFieldsFromModel;
181
182
  declare const index_getAllModelNames: typeof getAllModelNames;
182
183
  declare const index_getDatabaseManager: typeof getDatabaseManager;
@@ -202,7 +203,7 @@ declare const index_toContextJson: typeof toContextJson;
202
203
  declare const index_withWorkspaceContext: typeof withWorkspaceContext;
203
204
  declare const index_withWorkspaceContextSync: typeof withWorkspaceContextSync;
204
205
  declare namespace index {
205
- export { index_ConnectionState as ConnectionState, type index_ContextFilterInput as ContextFilterInput, type index_DatabaseClient as DatabaseClient, type index_DatabaseClientConfig as DatabaseClientConfig, index_DatabaseHealth as DatabaseHealth, index_DatabaseReturnType as DatabaseReturnType, type index_FieldExtractionOptions as FieldExtractionOptions, type index_FieldExtractionResult as FieldExtractionResult, type index_InputJsonValue as InputJsonValue, type index_JsonValue as JsonValue, type index_ModelFieldsMap as ModelFieldsMap, type index_OperationContext as OperationContext, type index_PoolTuningEnv as PoolTuningEnv, index_PrismaClientBase as PrismaClientBase, index_PrismaClientConfig as PrismaClientConfig, index_PrismaClientConstructorOptions as PrismaClientConstructorOptions, index_PrismaClientWrapper as PrismaClientWrapper, index_PrismaEvent as PrismaEvent, type index_PrismaJsonFilter as PrismaJsonFilter, index_PrismaLogDefinition as PrismaLogDefinition, index_PrismaLogEvent as PrismaLogEvent, index_PrismaLogLevel as PrismaLogLevel, index_PrismaQueryEvent as PrismaQueryEvent, index_PrismaTransactionOptions as PrismaTransactionOptions, type index_WorkspaceContext as WorkspaceContext, type index_WorkspaceExtensionConfig as WorkspaceExtensionConfig, index_addWorkspaceExtension as addWorkspaceExtension, index_buildContextWhereClause as buildContextWhereClause, index_buildContextWhereConditions as buildContextWhereConditions, index_checkDatabaseHealth as checkDatabaseHealth, index_configurePrismaLogging as configurePrismaLogging, index_contextMatches as contextMatches, index_createConnectionPool as createConnectionPool, index_createContextFromSDK as createContextFromSDK, index_createDatabaseClient as createDatabaseClient, index_createDatabaseClientFromEnv as createDatabaseClientFromEnv, index_createPrismaAdapter as createPrismaAdapter, index_createPrismaClient as createPrismaClient, index_extractFieldsFromModel as extractFieldsFromModel, index_getAllModelNames as getAllModelNames, index_getDatabaseManager as getDatabaseManager, index_getDatabaseProductName as getDatabaseProductName, index_getDatabaseStats as getDatabaseStats, index_getDatabaseVersion as getDatabaseVersion, index_getDb as getDb, index_getModelFields as getModelFields, index_getWorkspaceContext as getWorkspaceContext, index_hasModel as hasModel, index_initializeDatabase as initializeDatabase, index_initializeDatabaseWithConfig as initializeDatabaseWithConfig, index_injectWhereWorkspaceId as injectWhereWorkspaceId, index_isDatabaseInitialized as isDatabaseInitialized, index_loadGeneratedFields as loadGeneratedFields, index_mergeContext as mergeContext, index_parseContext as parseContext, index_resetDatabaseManager as resetDatabaseManager, index_resolvePoolTuningFromEnv as resolvePoolTuningFromEnv, index_setWorkspaceContext as setWorkspaceContext, index_testConnection as testConnection, index_toContextJson as toContextJson, index_withWorkspaceContext as withWorkspaceContext, index_withWorkspaceContextSync as withWorkspaceContextSync };
206
+ export { index_ConnectionState as ConnectionState, type index_ContextFilterInput as ContextFilterInput, type index_DatabaseClient as DatabaseClient, type index_DatabaseClientConfig as DatabaseClientConfig, index_DatabaseHealth as DatabaseHealth, index_DatabaseReturnType as DatabaseReturnType, type index_FieldExtractionOptions as FieldExtractionOptions, type index_FieldExtractionResult as FieldExtractionResult, type index_InputJsonValue as InputJsonValue, type index_JsonValue as JsonValue, type index_ModelFieldsMap as ModelFieldsMap, type index_OperationContext as OperationContext, type index_PoolTuningEnv as PoolTuningEnv, index_PrismaClientBase as PrismaClientBase, index_PrismaClientConfig as PrismaClientConfig, index_PrismaClientConstructorOptions as PrismaClientConstructorOptions, index_PrismaClientWrapper as PrismaClientWrapper, index_PrismaEvent as PrismaEvent, type index_PrismaJsonFilter as PrismaJsonFilter, index_PrismaLogDefinition as PrismaLogDefinition, index_PrismaLogEvent as PrismaLogEvent, index_PrismaLogLevel as PrismaLogLevel, index_PrismaQueryEvent as PrismaQueryEvent, index_PrismaTransactionOptions as PrismaTransactionOptions, type index_WorkspaceContext as WorkspaceContext, type index_WorkspaceExtensionConfig as WorkspaceExtensionConfig, index_addWorkspaceExtension as addWorkspaceExtension, index_buildContextWhereClause as buildContextWhereClause, index_buildContextWhereConditions as buildContextWhereConditions, index_checkDatabaseHealth as checkDatabaseHealth, index_configurePrismaLogging as configurePrismaLogging, index_contextMatches as contextMatches, index_createConnectionPool as createConnectionPool, index_createContextFromSDK as createContextFromSDK, index_createDatabaseClient as createDatabaseClient, index_createDatabaseClientFromEnv as createDatabaseClientFromEnv, index_createPrismaAdapter as createPrismaAdapter, index_createPrismaClient as createPrismaClient, index_ensureServiceApplicationName as ensureServiceApplicationName, index_extractFieldsFromModel as extractFieldsFromModel, index_getAllModelNames as getAllModelNames, index_getDatabaseManager as getDatabaseManager, index_getDatabaseProductName as getDatabaseProductName, index_getDatabaseStats as getDatabaseStats, index_getDatabaseVersion as getDatabaseVersion, index_getDb as getDb, index_getModelFields as getModelFields, index_getWorkspaceContext as getWorkspaceContext, index_hasModel as hasModel, index_initializeDatabase as initializeDatabase, index_initializeDatabaseWithConfig as initializeDatabaseWithConfig, index_injectWhereWorkspaceId as injectWhereWorkspaceId, index_isDatabaseInitialized as isDatabaseInitialized, index_loadGeneratedFields as loadGeneratedFields, index_mergeContext as mergeContext, index_parseContext as parseContext, index_resetDatabaseManager as resetDatabaseManager, index_resolvePoolTuningFromEnv as resolvePoolTuningFromEnv, index_setWorkspaceContext as setWorkspaceContext, index_testConnection as testConnection, index_toContextJson as toContextJson, index_withWorkspaceContext as withWorkspaceContext, index_withWorkspaceContextSync as withWorkspaceContextSync };
206
207
  }
207
208
 
208
209
  export { isDatabaseInitialized as A, loadGeneratedFields as B, type ContextFilterInput as C, type DatabaseClient as D, mergeContext as E, type FieldExtractionOptions as F, parseContext as G, resetDatabaseManager as H, type InputJsonValue as I, type JsonValue as J, resolvePoolTuningFromEnv as K, setWorkspaceContext as L, type ModelFieldsMap as M, testConnection as N, type OperationContext as O, type PoolTuningEnv as P, toContextJson as Q, withWorkspaceContext as R, withWorkspaceContextSync as S, type WorkspaceContext as W, type DatabaseClientConfig as a, type FieldExtractionResult as b, type PrismaJsonFilter as c, type WorkspaceExtensionConfig as d, addWorkspaceExtension as e, buildContextWhereClause as f, buildContextWhereConditions as g, checkDatabaseHealth as h, index as i, contextMatches as j, createContextFromSDK as k, createDatabaseClient as l, createDatabaseClientFromEnv as m, extractFieldsFromModel as n, getAllModelNames as o, getDatabaseManager as p, getDatabaseProductName as q, getDatabaseStats as r, getDatabaseVersion as s, getDb as t, getModelFields as u, getWorkspaceContext as v, hasModel as w, initializeDatabase as x, initializeDatabaseWithConfig as y, injectWhereWorkspaceId as z };
@@ -1,6 +1,6 @@
1
1
  import { B as BurdenoffGraphQLClient } from './graphql-BRj5KPOL.js';
2
2
  import { S as SDKContext } from './index-DDCOGyYh.js';
3
- import { P as PrismaClientBase } from './client-CSEnihJT.js';
3
+ import { P as PrismaClientBase } from './client-ODOgzzs0.js';
4
4
  import { G as GraphEventEmitterImpl, E as EntityEventRbacMetadata } from './graph-emitter-r5TylDBm.js';
5
5
  import { G as GraphEventEmitter, E as EntityEventType, a as GraphMiddlewareConfig, b as addGraphExtension } from './prisma-extension-krXnYnrN.js';
6
6
 
package/dist/index.d.ts CHANGED
@@ -11,8 +11,8 @@ import { A as ActivityModule, U as UsageModule, T as TrackerModule } from './ind
11
11
  import { DatabaseConfig, DatabaseModule } from './database/index.js';
12
12
  import { E as EventsModule, I as IEventPublisher } from './index-B3ECnOLp.js';
13
13
  export { i as EventQueue } from './index-B3ECnOLp.js';
14
- import { G as GraphModule } from './index-ClXI02GS.js';
15
- export { i as Graph } from './index-ClXI02GS.js';
14
+ import { G as GraphModule } from './index-DvDoMbXM.js';
15
+ export { i as Graph } from './index-DvDoMbXM.js';
16
16
  import { B as BurdenoffGraphQLClient } from './graphql-BRj5KPOL.js';
17
17
  import { TemporalModule } from './temporal/index.js';
18
18
  export { TemporalClient, TemporalClientConfig, TemporalClientFactory, TemporalWorker, TemporalWorkerConfig, TemporalWorkerFactory, TemporalWorkerManager, WorkflowStartOptions } from './temporal/index.js';
@@ -23,7 +23,7 @@ export { i as Cache } from './index-DkObbJD_.js';
23
23
  export { i as Middleware } from './index-DSOpj8DI.js';
24
24
  export { i as Observability } from './index-4gKQKZ2B.js';
25
25
  export { i as GraphQL } from './index-joONjwLt.js';
26
- export { i as Prisma } from './index-aNMCLxlz.js';
26
+ export { i as Prisma } from './index-COyUmH7o.js';
27
27
  export { i as Utils } from './index-PaojfSdd.js';
28
28
  export { i as I18n, I as I18nCapableContext, T as Translator, c as createTranslator, g as getLanguage, a as getLocale, h as hasI18n, t } from './index-D4l1u8VR.js';
29
29
  export { i as Export } from './index-B4ciT3OZ.js';
@@ -37,10 +37,10 @@ export { i as FeatureFlags } from './index-BdPnlJ8_.js';
37
37
  export { i as Captcha, R as RecaptchaVerifyOptions, a as RecaptchaVerifyResult, b as isCaptchaEnabled, v as verifyCaptcha, c as verifyCaptchaIfEnabled } from './index-B70b5mYS.js';
38
38
  export { i as Platform } from './index-DgWLSDv2.js';
39
39
  export { C as CircuitBreakerConfig, h as DEFAULT_CIRCUIT_BREAKER_CONFIG, i as DEFAULT_GATEWAY_RETRY_CONFIG, D as DEFAULT_GATEWAY_ROUTING, b as DEFAULT_LAYER_RESOURCES, c as DEFAULT_LAYER_STREAMS, f as GatewayRequestHeaders, g as GatewayRetryConfig, G as GatewayRoutingConfig, L as LayerConfig, a as LayerFullConfig, d as LayerGatewayConfig, e as LayerResourceUrls, S as ServiceLayer } from './layer-GNAVXBMf.js';
40
- import './types-Bj1K2RtU.js';
40
+ import './types-CXVleyWq.js';
41
41
  import 'graphql';
42
42
  import 'graphql-yoga';
43
- import './client-CSEnihJT.js';
43
+ import './client-ODOgzzs0.js';
44
44
  import '@prisma/adapter-pg';
45
45
  import 'pg';
46
46
  import './types-C8TbSdEj.js';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { prisma_exports as Prisma } from './chunk-OWBJD3AS.js';
1
+ export { prisma_exports as Prisma } from './chunk-254FNUIC.js';
2
2
  export { RESOURCE_CAP_DEFAULTS, ResourceCapExceededError, ResourceCapsModule, getResourceCaps } from './chunk-VDDOGIWY.js';
3
3
  import './chunk-GTEMQXCA.js';
4
4
  export { sharing_exports as Sharing } from './chunk-XD5ZK727.js';
@@ -16,9 +16,9 @@ export { observability_exports as Observability } from './chunk-5LXDPGDH.js';
16
16
  export { platform_exports as Platform } from './chunk-UCLDHOZC.js';
17
17
  export { export_exports as Export } from './chunk-UJI2S556.js';
18
18
  export { feature_flags_exports as FeatureFlags } from './chunk-YEA4BZOL.js';
19
- import { GraphModule } from './chunk-Z2423JIB.js';
20
- export { graph_exports as Graph, GraphModule } from './chunk-Z2423JIB.js';
21
- import './chunk-5CESUKWC.js';
19
+ import { GraphModule } from './chunk-P7SUUFEX.js';
20
+ export { graph_exports as Graph, GraphModule } from './chunk-P7SUUFEX.js';
21
+ import './chunk-Q23NPVWQ.js';
22
22
  import { EventsModule } from './chunk-H3AXO5SY.js';
23
23
  export { event_queue_exports as EventQueue, EventsModule } from './chunk-H3AXO5SY.js';
24
24
  import './chunk-OHEPNJ2X.js';
@@ -1,5 +1,5 @@
1
- export { C as ContextFilterInput, D as DatabaseClient, a as DatabaseClientConfig, F as FieldExtractionOptions, b as FieldExtractionResult, I as InputJsonValue, J as JsonValue, M as ModelFieldsMap, O as OperationContext, P as PoolTuningEnv, c as PrismaJsonFilter, W as WorkspaceContext, d as WorkspaceExtensionConfig, e as addWorkspaceExtension, f as buildContextWhereClause, g as buildContextWhereConditions, h as checkDatabaseHealth, j as contextMatches, k as createContextFromSDK, l as createDatabaseClient, m as createDatabaseClientFromEnv, n as extractFieldsFromModel, o as getAllModelNames, p as getDatabaseManager, q as getDatabaseProductName, r as getDatabaseStats, s as getDatabaseVersion, t as getDb, u as getModelFields, v as getWorkspaceContext, w as hasModel, x as initializeDatabase, y as initializeDatabaseWithConfig, z as injectWhereWorkspaceId, A as isDatabaseInitialized, B as loadGeneratedFields, E as mergeContext, G as parseContext, H as resetDatabaseManager, K as resolvePoolTuningFromEnv, L as setWorkspaceContext, N as testConnection, Q as toContextJson, R as withWorkspaceContext, S as withWorkspaceContextSync } from '../index-aNMCLxlz.js';
2
- export { C as ConnectionState, d as DatabaseHealth, D as DatabaseReturnType, P as PrismaClientBase, c as PrismaClientConfig, a as PrismaClientConstructorOptions, b as PrismaClientWrapper, e as PrismaEvent, f as PrismaLogDefinition, g as PrismaLogEvent, h as PrismaLogLevel, i as PrismaQueryEvent, j as PrismaTransactionOptions, k as configurePrismaLogging, l as createConnectionPool, m as createPrismaAdapter, n as createPrismaClient } from '../client-CSEnihJT.js';
1
+ export { C as ContextFilterInput, D as DatabaseClient, a as DatabaseClientConfig, F as FieldExtractionOptions, b as FieldExtractionResult, I as InputJsonValue, J as JsonValue, M as ModelFieldsMap, O as OperationContext, P as PoolTuningEnv, c as PrismaJsonFilter, W as WorkspaceContext, d as WorkspaceExtensionConfig, e as addWorkspaceExtension, f as buildContextWhereClause, g as buildContextWhereConditions, h as checkDatabaseHealth, j as contextMatches, k as createContextFromSDK, l as createDatabaseClient, m as createDatabaseClientFromEnv, n as extractFieldsFromModel, o as getAllModelNames, p as getDatabaseManager, q as getDatabaseProductName, r as getDatabaseStats, s as getDatabaseVersion, t as getDb, u as getModelFields, v as getWorkspaceContext, w as hasModel, x as initializeDatabase, y as initializeDatabaseWithConfig, z as injectWhereWorkspaceId, A as isDatabaseInitialized, B as loadGeneratedFields, E as mergeContext, G as parseContext, H as resetDatabaseManager, K as resolvePoolTuningFromEnv, L as setWorkspaceContext, N as testConnection, Q as toContextJson, R as withWorkspaceContext, S as withWorkspaceContextSync } from '../index-COyUmH7o.js';
2
+ export { C as ConnectionState, d as DatabaseHealth, D as DatabaseReturnType, P as PrismaClientBase, c as PrismaClientConfig, a as PrismaClientConstructorOptions, b as PrismaClientWrapper, e as PrismaEvent, f as PrismaLogDefinition, g as PrismaLogEvent, h as PrismaLogLevel, i as PrismaQueryEvent, j as PrismaTransactionOptions, k as configurePrismaLogging, l as createConnectionPool, m as createPrismaAdapter, n as createPrismaClient, o as ensureServiceApplicationName } from '../client-ODOgzzs0.js';
3
3
  import '../prisma-extension-krXnYnrN.js';
4
4
  import '@prisma/adapter-pg';
5
5
  import 'pg';
@@ -1,6 +1,6 @@
1
- export { PrismaClientWrapper, buildContextWhereClause, buildContextWhereConditions, checkDatabaseHealth, configurePrismaLogging, contextMatches, createConnectionPool, createContextFromSDK, createDatabaseClient, createDatabaseClientFromEnv, createPrismaAdapter, createPrismaClient, extractFieldsFromModel, getAllModelNames, getDatabaseManager, getDatabaseProductName, getDatabaseStats, getDatabaseVersion, getDb, getModelFields, hasModel, initializeDatabase, initializeDatabaseWithConfig, isDatabaseInitialized, loadGeneratedFields, mergeContext, parseContext, resetDatabaseManager, resolvePoolTuningFromEnv, testConnection, toContextJson } from '../chunk-OWBJD3AS.js';
1
+ export { buildContextWhereClause, buildContextWhereConditions, checkDatabaseHealth, contextMatches, createContextFromSDK, createDatabaseClient, createDatabaseClientFromEnv, extractFieldsFromModel, getAllModelNames, getDatabaseManager, getDatabaseProductName, getDatabaseStats, getDatabaseVersion, getDb, getModelFields, hasModel, initializeDatabase, initializeDatabaseWithConfig, isDatabaseInitialized, loadGeneratedFields, mergeContext, parseContext, resetDatabaseManager, resolvePoolTuningFromEnv, testConnection, toContextJson } from '../chunk-254FNUIC.js';
2
2
  export { addWorkspaceExtension, getWorkspaceContext, injectWhereWorkspaceId, setWorkspaceContext, withWorkspaceContext, withWorkspaceContextSync } from '../chunk-GTEMQXCA.js';
3
- import '../chunk-5CESUKWC.js';
3
+ export { PrismaClientWrapper, configurePrismaLogging, createConnectionPool, createPrismaAdapter, createPrismaClient, ensureServiceApplicationName } from '../chunk-Q23NPVWQ.js';
4
4
  import '../chunk-OHEPNJ2X.js';
5
5
  import '../chunk-MQCVQCFA.js';
6
6
  import '../chunk-MHNA7IS7.js';