@env-hopper/backend-core 2.0.1-alpha → 2.0.1-alpha-20260224145405

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/index.d.ts +2059 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +2571 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +26 -11
  6. package/prisma/migrations/20250526183023_init/migration.sql +71 -0
  7. package/prisma/migrations/migration_lock.toml +3 -0
  8. package/prisma/schema.prisma +149 -0
  9. package/src/db/client.ts +42 -0
  10. package/src/db/index.ts +21 -0
  11. package/src/db/syncAppCatalog.ts +310 -0
  12. package/src/db/tableSyncMagazine.ts +32 -0
  13. package/src/db/tableSyncPrismaAdapter.ts +203 -0
  14. package/src/generated/prisma/client.d.ts +1 -0
  15. package/src/generated/prisma/client.js +4 -0
  16. package/src/generated/prisma/default.d.ts +1 -0
  17. package/src/generated/prisma/default.js +4 -0
  18. package/src/generated/prisma/edge.d.ts +1 -0
  19. package/src/generated/prisma/edge.js +227 -0
  20. package/src/generated/prisma/index-browser.js +214 -0
  21. package/src/generated/prisma/index.d.ts +4212 -0
  22. package/src/generated/prisma/index.js +248 -0
  23. package/src/generated/prisma/libquery_engine-darwin-arm64.dylib.node +0 -0
  24. package/src/generated/prisma/package.json +183 -0
  25. package/src/generated/prisma/query_engine_bg.js +2 -0
  26. package/src/generated/prisma/query_engine_bg.wasm +0 -0
  27. package/src/generated/prisma/runtime/edge-esm.js +34 -0
  28. package/src/generated/prisma/runtime/edge.js +34 -0
  29. package/src/generated/prisma/runtime/index-browser.d.ts +370 -0
  30. package/src/generated/prisma/runtime/index-browser.js +16 -0
  31. package/src/generated/prisma/runtime/library.d.ts +3982 -0
  32. package/src/generated/prisma/runtime/library.js +146 -0
  33. package/src/generated/prisma/runtime/react-native.js +83 -0
  34. package/src/generated/prisma/runtime/wasm-compiler-edge.js +84 -0
  35. package/src/generated/prisma/runtime/wasm-engine-edge.js +36 -0
  36. package/src/generated/prisma/schema.prisma +49 -0
  37. package/src/generated/prisma/wasm-edge-light-loader.mjs +4 -0
  38. package/src/generated/prisma/wasm-worker-loader.mjs +4 -0
  39. package/src/generated/prisma/wasm.d.ts +1 -0
  40. package/src/generated/prisma/wasm.js +234 -0
  41. package/src/index.ts +109 -1
  42. package/src/middleware/backendResolver.ts +49 -0
  43. package/src/middleware/createEhMiddleware.ts +171 -0
  44. package/src/middleware/database.ts +62 -0
  45. package/src/middleware/featureRegistry.ts +173 -0
  46. package/src/middleware/index.ts +43 -0
  47. package/src/middleware/types.ts +202 -0
  48. package/src/modules/admin/chat/createAdminChatHandler.ts +152 -0
  49. package/src/modules/admin/chat/createDatabaseTools.ts +261 -0
  50. package/src/modules/appCatalog/service.ts +130 -0
  51. package/src/modules/appCatalogAdmin/appCatalogAdminRouter.ts +187 -0
  52. package/src/modules/appCatalogAdmin/catalogBackupController.ts +213 -0
  53. package/src/modules/approvalMethod/approvalMethodRouter.ts +169 -0
  54. package/src/modules/approvalMethod/slugUtils.ts +17 -0
  55. package/src/modules/approvalMethod/syncApprovalMethods.ts +38 -0
  56. package/src/modules/assets/assetRestController.ts +271 -0
  57. package/src/modules/assets/assetUtils.ts +114 -0
  58. package/src/modules/assets/screenshotRestController.ts +195 -0
  59. package/src/modules/assets/screenshotRouter.ts +112 -0
  60. package/src/modules/assets/syncAssets.ts +277 -0
  61. package/src/modules/assets/upsertAsset.ts +46 -0
  62. package/src/modules/auth/auth.ts +51 -0
  63. package/src/modules/auth/authProviders.ts +40 -0
  64. package/src/modules/auth/authRouter.ts +75 -0
  65. package/src/modules/auth/authorizationUtils.ts +132 -0
  66. package/src/modules/auth/devMockUserUtils.ts +49 -0
  67. package/src/modules/auth/registerAuthRoutes.ts +33 -0
  68. package/src/modules/icons/iconRestController.ts +171 -0
  69. package/src/modules/icons/iconRouter.ts +180 -0
  70. package/src/modules/icons/iconService.ts +73 -0
  71. package/src/modules/icons/iconUtils.ts +46 -0
  72. package/src/prisma-json-types.d.ts +34 -0
  73. package/src/server/controller.ts +103 -44
  74. package/src/server/ehStaticControllerContract.ts +8 -1
  75. package/src/server/ehTrpcContext.ts +9 -6
  76. package/src/server/trpcSetup.ts +89 -0
  77. package/src/types/backend/api.ts +1 -14
  78. package/src/types/backend/companySpecificBackend.ts +17 -0
  79. package/src/types/common/appCatalogTypes.ts +56 -10
  80. package/src/types/common/approvalMethodTypes.ts +149 -0
  81. package/src/types/common/dataRootTypes.ts +72 -10
  82. package/src/types/index.ts +3 -0
  83. package/dist/esm/__tests__/dummy.test.d.ts +0 -1
  84. package/dist/esm/index.d.ts +0 -7
  85. package/dist/esm/index.js +0 -9
  86. package/dist/esm/index.js.map +0 -1
  87. package/dist/esm/server/controller.d.ts +0 -32
  88. package/dist/esm/server/controller.js +0 -35
  89. package/dist/esm/server/controller.js.map +0 -1
  90. package/dist/esm/server/db.d.ts +0 -2
  91. package/dist/esm/server/ehStaticControllerContract.d.ts +0 -9
  92. package/dist/esm/server/ehStaticControllerContract.js +0 -12
  93. package/dist/esm/server/ehStaticControllerContract.js.map +0 -1
  94. package/dist/esm/server/ehTrpcContext.d.ts +0 -8
  95. package/dist/esm/server/ehTrpcContext.js +0 -11
  96. package/dist/esm/server/ehTrpcContext.js.map +0 -1
  97. package/dist/esm/types/backend/api.d.ts +0 -71
  98. package/dist/esm/types/backend/common.d.ts +0 -9
  99. package/dist/esm/types/backend/dataSources.d.ts +0 -20
  100. package/dist/esm/types/backend/deployments.d.ts +0 -34
  101. package/dist/esm/types/common/app/appTypes.d.ts +0 -12
  102. package/dist/esm/types/common/app/ui/appUiTypes.d.ts +0 -10
  103. package/dist/esm/types/common/appCatalogTypes.d.ts +0 -16
  104. package/dist/esm/types/common/dataRootTypes.d.ts +0 -32
  105. package/dist/esm/types/common/env/envTypes.d.ts +0 -6
  106. package/dist/esm/types/common/resourceTypes.d.ts +0 -8
  107. package/dist/esm/types/common/sharedTypes.d.ts +0 -4
  108. package/dist/esm/types/index.d.ts +0 -11
  109. package/src/server/db.ts +0 -4
@@ -0,0 +1,203 @@
1
+ import { tableSync } from '@env-hopper/table-sync'
2
+ import type { Prisma, PrismaClient } from '@prisma/client'
3
+ import type * as runtime from '@prisma/client/runtime/library'
4
+ import { mapValues, omit, pick } from 'radashi'
5
+
6
+ export type ScalarKeys<TPrismaModelName extends Prisma.ModelName> =
7
+ keyof Prisma.TypeMap['model'][TPrismaModelName]['payload']['scalars']
8
+ export type ObjectKeys<TPrismaModelName extends Prisma.ModelName> =
9
+ keyof Prisma.TypeMap['model'][TPrismaModelName]['payload']['objects']
10
+
11
+ export type ScalarFilter<TPrismaModelName extends Prisma.ModelName> = Partial<
12
+ Prisma.TypeMap['model'][TPrismaModelName]['payload']['scalars']
13
+ >
14
+
15
+ export type GetOperationFns<TModel extends Prisma.ModelName> = {
16
+ [TOperation in keyof Prisma.TypeMap['model']['DbAppForCatalog']['operations']]: (
17
+ args: Prisma.TypeMap['model'][TModel]['operations'][TOperation]['args'],
18
+ ) => Promise<
19
+ Prisma.TypeMap['model'][TModel]['operations'][TOperation]['result']
20
+ >
21
+ }
22
+
23
+ export interface TableSyncParamsPrisma<
24
+ TPrismaClient extends PrismaClient,
25
+ TPrismaModelName extends Prisma.ModelName,
26
+ TUniqColumns extends ReadonlyArray<ScalarKeys<TPrismaModelName>>,
27
+ TRelationColumns extends ReadonlyArray<ObjectKeys<TPrismaModelName>>,
28
+ > {
29
+ id?: ScalarKeys<TPrismaModelName>
30
+ prisma: TPrismaClient
31
+ prismaModelName: TPrismaModelName
32
+ uniqColumns: TUniqColumns
33
+ relationColumns?: TRelationColumns
34
+ where?: ScalarFilter<TPrismaModelName>
35
+ upsertOnly?: boolean
36
+ }
37
+
38
+ function getPrismaModelOperations<
39
+ TPrismaClient extends Omit<PrismaClient, runtime.ITXClientDenyList>,
40
+ TPrismaModelName extends Prisma.ModelName,
41
+ >(prisma: TPrismaClient, prismaModelName: TPrismaModelName) {
42
+ const key = (prismaModelName.slice(0, 1).toLowerCase() +
43
+ prismaModelName.slice(1)) as keyof TPrismaClient
44
+ return prisma[key] as GetOperationFns<TPrismaModelName>
45
+ }
46
+
47
+ export type MakeTFromPrismaModel<TPrismaModelName extends Prisma.ModelName> =
48
+ NonNullable<
49
+ Prisma.TypeMap['model'][TPrismaModelName]['operations']['findUnique']['result']
50
+ >
51
+
52
+ export function tableSyncPrisma<
53
+ TPrismaClient extends PrismaClient,
54
+ TPrismaModelName extends Prisma.ModelName,
55
+ TUniqColumns extends ReadonlyArray<ScalarKeys<TPrismaModelName>>,
56
+ TRelationColumns extends ReadonlyArray<ObjectKeys<TPrismaModelName>>,
57
+ TId extends ScalarKeys<TPrismaModelName> = ScalarKeys<TPrismaModelName>,
58
+ >(
59
+ params: TableSyncParamsPrisma<
60
+ TPrismaClient,
61
+ TPrismaModelName,
62
+ TUniqColumns,
63
+ TRelationColumns
64
+ >,
65
+ ) {
66
+ const {
67
+ prisma,
68
+ prismaModelName,
69
+ uniqColumns,
70
+ where: whereGlobal,
71
+ upsertOnly,
72
+ } = params
73
+ const prismOperations = getPrismaModelOperations(prisma, prismaModelName)
74
+
75
+ const idColumn = (params.id ?? 'id') as TId
76
+ // @ts-ignore maybe someday later (never)
77
+ return tableSync<MakeTFromPrismaModel<TPrismaModelName>, TUniqColumns, TId>({
78
+ id: idColumn,
79
+ uniqColumns,
80
+ readAll: async () => {
81
+ const findManyArgs = whereGlobal
82
+ ? {
83
+ where: whereGlobal,
84
+ }
85
+ : {}
86
+ return (await prismOperations.findMany(findManyArgs)) as Array<
87
+ MakeTFromPrismaModel<TPrismaModelName>
88
+ >
89
+ },
90
+ writeAll: async (createData, update, deleteIds) => {
91
+ const prismaUniqKey = params.uniqColumns.join('_')
92
+ const relationColumnList =
93
+ params.relationColumns ?? ([] as Array<ObjectKeys<TPrismaModelName>>)
94
+
95
+ return prisma.$transaction(async (tx) => {
96
+ const txOps = getPrismaModelOperations(tx, prismaModelName)
97
+ for (const { data, where } of update) {
98
+ const uniqKeyWhere =
99
+ Object.keys(where).length > 1
100
+ ? {
101
+ [prismaUniqKey]: where,
102
+ }
103
+ : where
104
+
105
+ const dataScalar = omit(data, relationColumnList)
106
+ const dataRelations = mapValues(
107
+ pick(data, relationColumnList),
108
+ (value) => {
109
+ return {
110
+ set: value,
111
+ }
112
+ },
113
+ )
114
+
115
+ // @ts-expect-error This is too difficult for me to come up with right types
116
+ await txOps.update({
117
+ data: { ...dataScalar, ...dataRelations },
118
+ where: { ...uniqKeyWhere },
119
+ })
120
+ }
121
+
122
+ if (upsertOnly !== true) {
123
+ await txOps.deleteMany({
124
+ where: {
125
+ [idColumn]: {
126
+ in: deleteIds,
127
+ },
128
+ },
129
+ })
130
+ }
131
+
132
+ // Validate uniqueness of uniqColumns before creating records
133
+ const createDataMapped = createData.map((data) => {
134
+ // @ts-expect-error This is too difficult for me to come up with right types
135
+ const dataScalar = omit(data, relationColumnList)
136
+
137
+ // @ts-expect-error This is too difficult for me to come up with right types
138
+ const onlyRelationColumns = pick(data, relationColumnList)
139
+ const dataRelations = mapValues(onlyRelationColumns, (value) => {
140
+ return {
141
+ connect: value,
142
+ }
143
+ })
144
+
145
+ return { ...dataScalar, ...dataRelations }
146
+ })
147
+
148
+ // Check for duplicates in the data to be created
149
+ if (createDataMapped.length > 0) {
150
+ const uniqKeysInCreate = new Set<string>()
151
+ const duplicateKeys: Array<string> = []
152
+
153
+ for (const data of createDataMapped) {
154
+ const keyParts = params.uniqColumns.map((col) => {
155
+ const value = data[col as keyof typeof data]
156
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive: unique columns may be nullable in schemas
157
+ return value === null || value === undefined
158
+ ? 'null'
159
+ : String(value)
160
+ })
161
+ const key = keyParts.join(':')
162
+
163
+ if (uniqKeysInCreate.has(key)) {
164
+ duplicateKeys.push(key)
165
+ } else {
166
+ uniqKeysInCreate.add(key)
167
+ }
168
+ }
169
+
170
+ if (duplicateKeys.length > 0) {
171
+ const uniqColumnsStr = params.uniqColumns.join(', ')
172
+ throw new Error(
173
+ `Duplicate unique key values found in data to be created. ` +
174
+ `Model: ${prismaModelName}, Unique columns: [${uniqColumnsStr}], ` +
175
+ `Duplicate keys: [${duplicateKeys.join(', ')}]`,
176
+ )
177
+ }
178
+ }
179
+
180
+ const results: Array<MakeTFromPrismaModel<TPrismaModelName>> = []
181
+
182
+ if (relationColumnList.length === 0) {
183
+ // @ts-expect-error This is too difficult for me to come up with right types
184
+ const batchResult = await txOps.createManyAndReturn({
185
+ data: createDataMapped,
186
+ })
187
+
188
+ results.push(...batchResult)
189
+ } else {
190
+ for (const dataMappedElement of createDataMapped) {
191
+ // @ts-expect-error too difficult for me
192
+ const newVar = await txOps.create({
193
+ data: dataMappedElement,
194
+ })
195
+ results.push(newVar as MakeTFromPrismaModel<TPrismaModelName>)
196
+ }
197
+ }
198
+
199
+ return results
200
+ })
201
+ },
202
+ })
203
+ }
@@ -0,0 +1 @@
1
+ export * from "./index"
@@ -0,0 +1,4 @@
1
+
2
+ /* !!! This is code generated by Prisma. Do not edit directly. !!!
3
+ /* eslint-disable */
4
+ module.exports = { ...require('.') }
@@ -0,0 +1 @@
1
+ export * from "./index"
@@ -0,0 +1,4 @@
1
+
2
+ /* !!! This is code generated by Prisma. Do not edit directly. !!!
3
+ /* eslint-disable */
4
+ module.exports = { ...require('#main-entry-point') }
@@ -0,0 +1 @@
1
+ export * from "./default"
@@ -0,0 +1,227 @@
1
+
2
+ /* !!! This is code generated by Prisma. Do not edit directly. !!!
3
+ /* eslint-disable */
4
+
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+
7
+ const {
8
+ PrismaClientKnownRequestError,
9
+ PrismaClientUnknownRequestError,
10
+ PrismaClientRustPanicError,
11
+ PrismaClientInitializationError,
12
+ PrismaClientValidationError,
13
+ getPrismaClient,
14
+ sqltag,
15
+ empty,
16
+ join,
17
+ raw,
18
+ skip,
19
+ Decimal,
20
+ Debug,
21
+ objectEnumValues,
22
+ makeStrictEnum,
23
+ Extensions,
24
+ warnOnce,
25
+ defineDmmfProperty,
26
+ Public,
27
+ getRuntime,
28
+ createParam,
29
+ } = require('./runtime/edge.js')
30
+
31
+
32
+ const Prisma = {}
33
+
34
+ exports.Prisma = Prisma
35
+ exports.$Enums = {}
36
+
37
+ /**
38
+ * Prisma Client JS version: 6.17.0
39
+ * Query Engine version: c0aafc03b8ef6cdced8654b9a817999e02457d6a
40
+ */
41
+ Prisma.prismaVersion = {
42
+ client: "6.17.0",
43
+ engine: "c0aafc03b8ef6cdced8654b9a817999e02457d6a"
44
+ }
45
+
46
+ Prisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError;
47
+ Prisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError
48
+ Prisma.PrismaClientRustPanicError = PrismaClientRustPanicError
49
+ Prisma.PrismaClientInitializationError = PrismaClientInitializationError
50
+ Prisma.PrismaClientValidationError = PrismaClientValidationError
51
+ Prisma.Decimal = Decimal
52
+
53
+ /**
54
+ * Re-export of sql-template-tag
55
+ */
56
+ Prisma.sql = sqltag
57
+ Prisma.empty = empty
58
+ Prisma.join = join
59
+ Prisma.raw = raw
60
+ Prisma.validator = Public.validator
61
+
62
+ /**
63
+ * Extensions
64
+ */
65
+ Prisma.getExtensionContext = Extensions.getExtensionContext
66
+ Prisma.defineExtension = Extensions.defineExtension
67
+
68
+ /**
69
+ * Shorthand utilities for JSON filtering
70
+ */
71
+ Prisma.DbNull = objectEnumValues.instances.DbNull
72
+ Prisma.JsonNull = objectEnumValues.instances.JsonNull
73
+ Prisma.AnyNull = objectEnumValues.instances.AnyNull
74
+
75
+ Prisma.NullTypes = {
76
+ DbNull: objectEnumValues.classes.DbNull,
77
+ JsonNull: objectEnumValues.classes.JsonNull,
78
+ AnyNull: objectEnumValues.classes.AnyNull
79
+ }
80
+
81
+
82
+
83
+
84
+
85
+ /**
86
+ * Enums
87
+ */
88
+ exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
89
+ ReadUncommitted: 'ReadUncommitted',
90
+ ReadCommitted: 'ReadCommitted',
91
+ RepeatableRead: 'RepeatableRead',
92
+ Serializable: 'Serializable'
93
+ });
94
+
95
+ exports.Prisma.DbAppForCatalogScalarFieldEnum = {
96
+ id: 'id',
97
+ name: 'name',
98
+ description: 'description',
99
+ access: 'access',
100
+ teams: 'teams',
101
+ roles: 'roles',
102
+ approverName: 'approverName',
103
+ approverEmail: 'approverEmail',
104
+ notes: 'notes',
105
+ tags: 'tags',
106
+ appUrl: 'appUrl',
107
+ confluenceUrl: 'confluenceUrl',
108
+ createdAt: 'createdAt',
109
+ updatedAt: 'updatedAt'
110
+ };
111
+
112
+ exports.Prisma.IconScalarFieldEnum = {
113
+ id: 'id',
114
+ name: 'name',
115
+ svgContent: 'svgContent',
116
+ pngBase64: 'pngBase64',
117
+ createdAt: 'createdAt',
118
+ updatedAt: 'updatedAt'
119
+ };
120
+
121
+ exports.Prisma.SortOrder = {
122
+ asc: 'asc',
123
+ desc: 'desc'
124
+ };
125
+
126
+ exports.Prisma.JsonNullValueInput = {
127
+ JsonNull: Prisma.JsonNull
128
+ };
129
+
130
+ exports.Prisma.NullableJsonNullValueInput = {
131
+ DbNull: Prisma.DbNull,
132
+ JsonNull: Prisma.JsonNull
133
+ };
134
+
135
+ exports.Prisma.QueryMode = {
136
+ default: 'default',
137
+ insensitive: 'insensitive'
138
+ };
139
+
140
+ exports.Prisma.JsonNullValueFilter = {
141
+ DbNull: Prisma.DbNull,
142
+ JsonNull: Prisma.JsonNull,
143
+ AnyNull: Prisma.AnyNull
144
+ };
145
+
146
+ exports.Prisma.NullsOrder = {
147
+ first: 'first',
148
+ last: 'last'
149
+ };
150
+
151
+
152
+ exports.Prisma.ModelName = {
153
+ DbAppForCatalog: 'DbAppForCatalog',
154
+ Icon: 'Icon'
155
+ };
156
+ /**
157
+ * Create the Client
158
+ */
159
+ const config = {
160
+ "generator": {
161
+ "name": "client",
162
+ "provider": {
163
+ "fromEnvVar": null,
164
+ "value": "prisma-client-js"
165
+ },
166
+ "output": {
167
+ "value": "/Users/igolovin/src/umbrella/env-hopper/packages/backend-core/src/generated/prisma",
168
+ "fromEnvVar": null
169
+ },
170
+ "config": {
171
+ "engineType": "library"
172
+ },
173
+ "binaryTargets": [
174
+ {
175
+ "fromEnvVar": null,
176
+ "value": "darwin-arm64",
177
+ "native": true
178
+ }
179
+ ],
180
+ "previewFeatures": [],
181
+ "sourceFilePath": "/Users/igolovin/src/umbrella/env-hopper/packages/backend-core/prisma/schema.prisma",
182
+ "isCustomOutput": true
183
+ },
184
+ "relativeEnvPaths": {
185
+ "rootEnvPath": null
186
+ },
187
+ "relativePath": "../../../prisma",
188
+ "clientVersion": "6.17.0",
189
+ "engineVersion": "c0aafc03b8ef6cdced8654b9a817999e02457d6a",
190
+ "datasourceNames": [
191
+ "db"
192
+ ],
193
+ "activeProvider": "postgresql",
194
+ "postinstall": false,
195
+ "inlineDatasources": {
196
+ "db": {
197
+ "url": {
198
+ "fromEnvVar": "EH_CORE_DATABASE_URL",
199
+ "value": null
200
+ }
201
+ }
202
+ },
203
+ "inlineSchema": "// Prisma schema for backend-core library\n// Uses EH_CORE_DATABASE_URL environment variable\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"EH_CORE_DATABASE_URL\")\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ngenerator json {\n provider = \"prisma-json-types-generator\"\n}\n\nmodel DbAppForCatalog {\n id String @id @default(cuid())\n name String\n description String\n /// [AccessMethod]\n access Json\n teams String[] @default([])\n /// [AppRole]\n roles Json?\n approverName String?\n approverEmail String?\n notes String?\n tags String[] @default([])\n appUrl String?\n confluenceUrl String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([name])\n @@index([tags])\n}\n\nmodel Icon {\n id String @id @default(cuid())\n name String @unique\n svgContent String? @db.Text\n pngBase64 String? @db.Text\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([name])\n}\n",
204
+ "inlineSchemaHash": "b83fbbc0d3c25dcdf35d0f9145415f8093b7124bc747546875740feee17ef2de",
205
+ "copyEngine": true
206
+ }
207
+ config.dirname = '/'
208
+
209
+ config.runtimeDataModel = JSON.parse("{\"models\":{\"DbAppForCatalog\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"access\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Json\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false,\"documentation\":\"[AccessMethod]\"},{\"name\":\"teams\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roles\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Json\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false,\"documentation\":\"[AppRole]\"},{\"name\":\"approverName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"approverEmail\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"notes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tags\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"appUrl\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confluenceUrl\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Icon\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"cuid\",\"args\":[1]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"svgContent\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"Text\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pngBase64\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"Text\",[]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{},\"types\":{}}")
210
+ defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
211
+ config.engineWasm = undefined
212
+ config.compilerWasm = undefined
213
+
214
+ config.injectableEdgeEnv = () => ({
215
+ parsed: {
216
+ EH_CORE_DATABASE_URL: typeof globalThis !== 'undefined' && globalThis['EH_CORE_DATABASE_URL'] || typeof process !== 'undefined' && process.env && process.env.EH_CORE_DATABASE_URL || undefined
217
+ }
218
+ })
219
+
220
+ if (typeof globalThis !== 'undefined' && globalThis['DEBUG'] || typeof process !== 'undefined' && process.env && process.env.DEBUG || undefined) {
221
+ Debug.enable(typeof globalThis !== 'undefined' && globalThis['DEBUG'] || typeof process !== 'undefined' && process.env && process.env.DEBUG || undefined)
222
+ }
223
+
224
+ const PrismaClient = getPrismaClient(config)
225
+ exports.PrismaClient = PrismaClient
226
+ Object.assign(exports, Prisma)
227
+
@@ -0,0 +1,214 @@
1
+
2
+ /* !!! This is code generated by Prisma. Do not edit directly. !!!
3
+ /* eslint-disable */
4
+
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+
7
+ const {
8
+ Decimal,
9
+ objectEnumValues,
10
+ makeStrictEnum,
11
+ Public,
12
+ getRuntime,
13
+ skip
14
+ } = require('./runtime/index-browser.js')
15
+
16
+
17
+ const Prisma = {}
18
+
19
+ exports.Prisma = Prisma
20
+ exports.$Enums = {}
21
+
22
+ /**
23
+ * Prisma Client JS version: 6.17.0
24
+ * Query Engine version: c0aafc03b8ef6cdced8654b9a817999e02457d6a
25
+ */
26
+ Prisma.prismaVersion = {
27
+ client: "6.17.0",
28
+ engine: "c0aafc03b8ef6cdced8654b9a817999e02457d6a"
29
+ }
30
+
31
+ Prisma.PrismaClientKnownRequestError = () => {
32
+ const runtimeName = getRuntime().prettyName;
33
+ throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
34
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
35
+ )};
36
+ Prisma.PrismaClientUnknownRequestError = () => {
37
+ const runtimeName = getRuntime().prettyName;
38
+ throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
39
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
40
+ )}
41
+ Prisma.PrismaClientRustPanicError = () => {
42
+ const runtimeName = getRuntime().prettyName;
43
+ throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
44
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
45
+ )}
46
+ Prisma.PrismaClientInitializationError = () => {
47
+ const runtimeName = getRuntime().prettyName;
48
+ throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
49
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
50
+ )}
51
+ Prisma.PrismaClientValidationError = () => {
52
+ const runtimeName = getRuntime().prettyName;
53
+ throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
54
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
55
+ )}
56
+ Prisma.Decimal = Decimal
57
+
58
+ /**
59
+ * Re-export of sql-template-tag
60
+ */
61
+ Prisma.sql = () => {
62
+ const runtimeName = getRuntime().prettyName;
63
+ throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
64
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
65
+ )}
66
+ Prisma.empty = () => {
67
+ const runtimeName = getRuntime().prettyName;
68
+ throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
69
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
70
+ )}
71
+ Prisma.join = () => {
72
+ const runtimeName = getRuntime().prettyName;
73
+ throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
74
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
75
+ )}
76
+ Prisma.raw = () => {
77
+ const runtimeName = getRuntime().prettyName;
78
+ throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
79
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
80
+ )}
81
+ Prisma.validator = Public.validator
82
+
83
+ /**
84
+ * Extensions
85
+ */
86
+ Prisma.getExtensionContext = () => {
87
+ const runtimeName = getRuntime().prettyName;
88
+ throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
89
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
90
+ )}
91
+ Prisma.defineExtension = () => {
92
+ const runtimeName = getRuntime().prettyName;
93
+ throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
94
+ In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
95
+ )}
96
+
97
+ /**
98
+ * Shorthand utilities for JSON filtering
99
+ */
100
+ Prisma.DbNull = objectEnumValues.instances.DbNull
101
+ Prisma.JsonNull = objectEnumValues.instances.JsonNull
102
+ Prisma.AnyNull = objectEnumValues.instances.AnyNull
103
+
104
+ Prisma.NullTypes = {
105
+ DbNull: objectEnumValues.classes.DbNull,
106
+ JsonNull: objectEnumValues.classes.JsonNull,
107
+ AnyNull: objectEnumValues.classes.AnyNull
108
+ }
109
+
110
+
111
+
112
+ /**
113
+ * Enums
114
+ */
115
+
116
+ exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
117
+ ReadUncommitted: 'ReadUncommitted',
118
+ ReadCommitted: 'ReadCommitted',
119
+ RepeatableRead: 'RepeatableRead',
120
+ Serializable: 'Serializable'
121
+ });
122
+
123
+ exports.Prisma.DbAppForCatalogScalarFieldEnum = {
124
+ id: 'id',
125
+ name: 'name',
126
+ description: 'description',
127
+ access: 'access',
128
+ teams: 'teams',
129
+ roles: 'roles',
130
+ approverName: 'approverName',
131
+ approverEmail: 'approverEmail',
132
+ notes: 'notes',
133
+ tags: 'tags',
134
+ appUrl: 'appUrl',
135
+ confluenceUrl: 'confluenceUrl',
136
+ createdAt: 'createdAt',
137
+ updatedAt: 'updatedAt'
138
+ };
139
+
140
+ exports.Prisma.IconScalarFieldEnum = {
141
+ id: 'id',
142
+ name: 'name',
143
+ svgContent: 'svgContent',
144
+ pngBase64: 'pngBase64',
145
+ createdAt: 'createdAt',
146
+ updatedAt: 'updatedAt'
147
+ };
148
+
149
+ exports.Prisma.SortOrder = {
150
+ asc: 'asc',
151
+ desc: 'desc'
152
+ };
153
+
154
+ exports.Prisma.JsonNullValueInput = {
155
+ JsonNull: Prisma.JsonNull
156
+ };
157
+
158
+ exports.Prisma.NullableJsonNullValueInput = {
159
+ DbNull: Prisma.DbNull,
160
+ JsonNull: Prisma.JsonNull
161
+ };
162
+
163
+ exports.Prisma.QueryMode = {
164
+ default: 'default',
165
+ insensitive: 'insensitive'
166
+ };
167
+
168
+ exports.Prisma.JsonNullValueFilter = {
169
+ DbNull: Prisma.DbNull,
170
+ JsonNull: Prisma.JsonNull,
171
+ AnyNull: Prisma.AnyNull
172
+ };
173
+
174
+ exports.Prisma.NullsOrder = {
175
+ first: 'first',
176
+ last: 'last'
177
+ };
178
+
179
+
180
+ exports.Prisma.ModelName = {
181
+ DbAppForCatalog: 'DbAppForCatalog',
182
+ Icon: 'Icon'
183
+ };
184
+
185
+ /**
186
+ * This is a stub Prisma Client that will error at runtime if called.
187
+ */
188
+ class PrismaClient {
189
+ constructor() {
190
+ return new Proxy(this, {
191
+ get(target, prop) {
192
+ let message
193
+ const runtime = getRuntime()
194
+ if (runtime.isEdge) {
195
+ message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:
196
+ - Use Prisma Accelerate: https://pris.ly/d/accelerate
197
+ - Use Driver Adapters: https://pris.ly/d/driver-adapters
198
+ `;
199
+ } else {
200
+ message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'
201
+ }
202
+
203
+ message += `
204
+ If this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`
205
+
206
+ throw new Error(message)
207
+ }
208
+ })
209
+ }
210
+ }
211
+
212
+ exports.PrismaClient = PrismaClient
213
+
214
+ Object.assign(exports, Prisma)