fix: resolve Prisma Query Engine runtime error in Docker
Critical fix for production deployment on Proxmox/Docker. Problem: - Runtime error: Prisma Client could not locate Query Engine for "debian-openssl-1.1.x" - Wrong binary target generated (Windows dll instead of Linux .so.node) - Wrong OpenSSL version (3.0.x instead of 1.1.x for Debian 11) Root cause: - Schema.prisma didn't specify binaryTargets - Prisma auto-detected Windows during local development - Debian 11 (bullseye) uses OpenSSL 1.1.x, not 3.0.x Solution: 1. Add binaryTargets to schema.prisma: - "debian-openssl-1.1.x" for Docker/Proxmox - "native" for local development 2. Fix Prisma folder permissions in Docker: - RUN chown -R nextjs:nodejs /app/prisma - Ensures Query Engine binary is readable by app user Changes: - prisma/schema.prisma: Add binaryTargets = ["debian-openssl-1.1.x", "native"] - keep-notes/Dockerfile: Add chown for /app/prisma folder Verification: ✓ libquery_engine-debian-openssl-1.1.x.so.node exists ✓ Permissions: nextjs:nodejs (readable) ✓ Prisma Client loads successfully in container Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
f5cda3843b
commit
dfa5f9611f
@ -54,7 +54,8 @@
|
|||||||
"mcp__context7__resolve-library-id",
|
"mcp__context7__resolve-library-id",
|
||||||
"mcp__web-search-prime__webSearchPrime",
|
"mcp__web-search-prime__webSearchPrime",
|
||||||
"mcp__context7__query-docs",
|
"mcp__context7__query-docs",
|
||||||
"Bash(docker logs:*)"
|
"Bash(docker logs:*)",
|
||||||
|
"Bash(docker run:*)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,6 +50,7 @@ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|||||||
|
|
||||||
# Copy Prisma schema, generated client, and Query Engine binaries
|
# Copy Prisma schema, generated client, and Query Engine binaries
|
||||||
COPY --from=builder /app/prisma ./prisma
|
COPY --from=builder /app/prisma ./prisma
|
||||||
|
RUN chown -R nextjs:nodejs /app/prisma
|
||||||
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma
|
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma
|
||||||
COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
|
COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
|
||||||
|
|
||||||
|
|||||||
1
keep-notes/prisma/client-generated/default.d.ts
vendored
Normal file
1
keep-notes/prisma/client-generated/default.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from "./index"
|
||||||
1
keep-notes/prisma/client-generated/default.js
Normal file
1
keep-notes/prisma/client-generated/default.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = { ...require('.') }
|
||||||
1
keep-notes/prisma/client-generated/edge.d.ts
vendored
Normal file
1
keep-notes/prisma/client-generated/edge.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from "./default"
|
||||||
345
keep-notes/prisma/client-generated/edge.js
Normal file
345
keep-notes/prisma/client-generated/edge.js
Normal file
File diff suppressed because one or more lines are too long
332
keep-notes/prisma/client-generated/index-browser.js
Normal file
332
keep-notes/prisma/client-generated/index-browser.js
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
|
||||||
|
const {
|
||||||
|
Decimal,
|
||||||
|
objectEnumValues,
|
||||||
|
makeStrictEnum,
|
||||||
|
Public,
|
||||||
|
getRuntime,
|
||||||
|
skip
|
||||||
|
} = require('./runtime/index-browser.js')
|
||||||
|
|
||||||
|
|
||||||
|
const Prisma = {}
|
||||||
|
|
||||||
|
exports.Prisma = Prisma
|
||||||
|
exports.$Enums = {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prisma Client JS version: 5.22.0
|
||||||
|
* Query Engine version: 605197351a3c8bdd595af2d2a9bc3025bca48ea2
|
||||||
|
*/
|
||||||
|
Prisma.prismaVersion = {
|
||||||
|
client: "5.22.0",
|
||||||
|
engine: "605197351a3c8bdd595af2d2a9bc3025bca48ea2"
|
||||||
|
}
|
||||||
|
|
||||||
|
Prisma.PrismaClientKnownRequestError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)};
|
||||||
|
Prisma.PrismaClientUnknownRequestError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.PrismaClientRustPanicError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.PrismaClientInitializationError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.PrismaClientValidationError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.NotFoundError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`NotFoundError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.Decimal = Decimal
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-export of sql-template-tag
|
||||||
|
*/
|
||||||
|
Prisma.sql = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.empty = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.join = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.raw = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.validator = Public.validator
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extensions
|
||||||
|
*/
|
||||||
|
Prisma.getExtensionContext = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.defineExtension = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shorthand utilities for JSON filtering
|
||||||
|
*/
|
||||||
|
Prisma.DbNull = objectEnumValues.instances.DbNull
|
||||||
|
Prisma.JsonNull = objectEnumValues.instances.JsonNull
|
||||||
|
Prisma.AnyNull = objectEnumValues.instances.AnyNull
|
||||||
|
|
||||||
|
Prisma.NullTypes = {
|
||||||
|
DbNull: objectEnumValues.classes.DbNull,
|
||||||
|
JsonNull: objectEnumValues.classes.JsonNull,
|
||||||
|
AnyNull: objectEnumValues.classes.AnyNull
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enums
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
|
||||||
|
Serializable: 'Serializable'
|
||||||
|
});
|
||||||
|
|
||||||
|
exports.Prisma.UserScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
name: 'name',
|
||||||
|
email: 'email',
|
||||||
|
emailVerified: 'emailVerified',
|
||||||
|
password: 'password',
|
||||||
|
role: 'role',
|
||||||
|
image: 'image',
|
||||||
|
theme: 'theme',
|
||||||
|
resetToken: 'resetToken',
|
||||||
|
resetTokenExpiry: 'resetTokenExpiry',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.AccountScalarFieldEnum = {
|
||||||
|
userId: 'userId',
|
||||||
|
type: 'type',
|
||||||
|
provider: 'provider',
|
||||||
|
providerAccountId: 'providerAccountId',
|
||||||
|
refresh_token: 'refresh_token',
|
||||||
|
access_token: 'access_token',
|
||||||
|
expires_at: 'expires_at',
|
||||||
|
token_type: 'token_type',
|
||||||
|
scope: 'scope',
|
||||||
|
id_token: 'id_token',
|
||||||
|
session_state: 'session_state',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.SessionScalarFieldEnum = {
|
||||||
|
sessionToken: 'sessionToken',
|
||||||
|
userId: 'userId',
|
||||||
|
expires: 'expires',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.VerificationTokenScalarFieldEnum = {
|
||||||
|
identifier: 'identifier',
|
||||||
|
token: 'token',
|
||||||
|
expires: 'expires'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.NotebookScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
name: 'name',
|
||||||
|
icon: 'icon',
|
||||||
|
color: 'color',
|
||||||
|
order: 'order',
|
||||||
|
userId: 'userId',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.LabelScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
name: 'name',
|
||||||
|
color: 'color',
|
||||||
|
notebookId: 'notebookId',
|
||||||
|
userId: 'userId',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.NoteScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
title: 'title',
|
||||||
|
content: 'content',
|
||||||
|
color: 'color',
|
||||||
|
isPinned: 'isPinned',
|
||||||
|
isArchived: 'isArchived',
|
||||||
|
type: 'type',
|
||||||
|
checkItems: 'checkItems',
|
||||||
|
labels: 'labels',
|
||||||
|
images: 'images',
|
||||||
|
links: 'links',
|
||||||
|
reminder: 'reminder',
|
||||||
|
isReminderDone: 'isReminderDone',
|
||||||
|
reminderRecurrence: 'reminderRecurrence',
|
||||||
|
reminderLocation: 'reminderLocation',
|
||||||
|
isMarkdown: 'isMarkdown',
|
||||||
|
size: 'size',
|
||||||
|
embedding: 'embedding',
|
||||||
|
sharedWith: 'sharedWith',
|
||||||
|
userId: 'userId',
|
||||||
|
order: 'order',
|
||||||
|
notebookId: 'notebookId',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt',
|
||||||
|
autoGenerated: 'autoGenerated',
|
||||||
|
aiProvider: 'aiProvider',
|
||||||
|
aiConfidence: 'aiConfidence',
|
||||||
|
language: 'language',
|
||||||
|
languageConfidence: 'languageConfidence',
|
||||||
|
lastAiAnalysis: 'lastAiAnalysis'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.NoteShareScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
noteId: 'noteId',
|
||||||
|
userId: 'userId',
|
||||||
|
sharedBy: 'sharedBy',
|
||||||
|
status: 'status',
|
||||||
|
permission: 'permission',
|
||||||
|
notifiedAt: 'notifiedAt',
|
||||||
|
respondedAt: 'respondedAt',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.SystemConfigScalarFieldEnum = {
|
||||||
|
key: 'key',
|
||||||
|
value: 'value'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.AiFeedbackScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
noteId: 'noteId',
|
||||||
|
userId: 'userId',
|
||||||
|
feedbackType: 'feedbackType',
|
||||||
|
feature: 'feature',
|
||||||
|
originalContent: 'originalContent',
|
||||||
|
correctedContent: 'correctedContent',
|
||||||
|
metadata: 'metadata',
|
||||||
|
createdAt: 'createdAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.MemoryEchoInsightScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
userId: 'userId',
|
||||||
|
note1Id: 'note1Id',
|
||||||
|
note2Id: 'note2Id',
|
||||||
|
similarityScore: 'similarityScore',
|
||||||
|
insight: 'insight',
|
||||||
|
insightDate: 'insightDate',
|
||||||
|
viewed: 'viewed',
|
||||||
|
feedback: 'feedback',
|
||||||
|
dismissed: 'dismissed'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.UserAISettingsScalarFieldEnum = {
|
||||||
|
userId: 'userId',
|
||||||
|
titleSuggestions: 'titleSuggestions',
|
||||||
|
semanticSearch: 'semanticSearch',
|
||||||
|
paragraphRefactor: 'paragraphRefactor',
|
||||||
|
memoryEcho: 'memoryEcho',
|
||||||
|
memoryEchoFrequency: 'memoryEchoFrequency',
|
||||||
|
aiProvider: 'aiProvider',
|
||||||
|
preferredLanguage: 'preferredLanguage',
|
||||||
|
fontSize: 'fontSize',
|
||||||
|
demoMode: 'demoMode'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.SortOrder = {
|
||||||
|
asc: 'asc',
|
||||||
|
desc: 'desc'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.NullsOrder = {
|
||||||
|
first: 'first',
|
||||||
|
last: 'last'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
exports.Prisma.ModelName = {
|
||||||
|
User: 'User',
|
||||||
|
Account: 'Account',
|
||||||
|
Session: 'Session',
|
||||||
|
VerificationToken: 'VerificationToken',
|
||||||
|
Notebook: 'Notebook',
|
||||||
|
Label: 'Label',
|
||||||
|
Note: 'Note',
|
||||||
|
NoteShare: 'NoteShare',
|
||||||
|
SystemConfig: 'SystemConfig',
|
||||||
|
AiFeedback: 'AiFeedback',
|
||||||
|
MemoryEchoInsight: 'MemoryEchoInsight',
|
||||||
|
UserAISettings: 'UserAISettings'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a stub Prisma Client that will error at runtime if called.
|
||||||
|
*/
|
||||||
|
class PrismaClient {
|
||||||
|
constructor() {
|
||||||
|
return new Proxy(this, {
|
||||||
|
get(target, prop) {
|
||||||
|
let message
|
||||||
|
const runtime = getRuntime()
|
||||||
|
if (runtime.isEdge) {
|
||||||
|
message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:
|
||||||
|
- Use Prisma Accelerate: https://pris.ly/d/accelerate
|
||||||
|
- Use Driver Adapters: https://pris.ly/d/driver-adapters
|
||||||
|
`;
|
||||||
|
} else {
|
||||||
|
message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'
|
||||||
|
}
|
||||||
|
|
||||||
|
message += `
|
||||||
|
If this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`
|
||||||
|
|
||||||
|
throw new Error(message)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.PrismaClient = PrismaClient
|
||||||
|
|
||||||
|
Object.assign(exports, Prisma)
|
||||||
23238
keep-notes/prisma/client-generated/index.d.ts
vendored
Normal file
23238
keep-notes/prisma/client-generated/index.d.ts
vendored
Normal file
File diff suppressed because it is too large
Load Diff
370
keep-notes/prisma/client-generated/index.js
Normal file
370
keep-notes/prisma/client-generated/index.js
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
97
keep-notes/prisma/client-generated/package.json
Normal file
97
keep-notes/prisma/client-generated/package.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"name": "prisma-client-62aaff0ff1302a5b1470021854f34bb9a9c1219fe39a7ee39aa626bd83e22eae",
|
||||||
|
"main": "index.js",
|
||||||
|
"types": "index.d.ts",
|
||||||
|
"browser": "index-browser.js",
|
||||||
|
"exports": {
|
||||||
|
"./package.json": "./package.json",
|
||||||
|
".": {
|
||||||
|
"require": {
|
||||||
|
"node": "./index.js",
|
||||||
|
"edge-light": "./wasm.js",
|
||||||
|
"workerd": "./wasm.js",
|
||||||
|
"worker": "./wasm.js",
|
||||||
|
"browser": "./index-browser.js",
|
||||||
|
"default": "./index.js"
|
||||||
|
},
|
||||||
|
"import": {
|
||||||
|
"node": "./index.js",
|
||||||
|
"edge-light": "./wasm.js",
|
||||||
|
"workerd": "./wasm.js",
|
||||||
|
"worker": "./wasm.js",
|
||||||
|
"browser": "./index-browser.js",
|
||||||
|
"default": "./index.js"
|
||||||
|
},
|
||||||
|
"default": "./index.js"
|
||||||
|
},
|
||||||
|
"./edge": {
|
||||||
|
"types": "./edge.d.ts",
|
||||||
|
"require": "./edge.js",
|
||||||
|
"import": "./edge.js",
|
||||||
|
"default": "./edge.js"
|
||||||
|
},
|
||||||
|
"./react-native": {
|
||||||
|
"types": "./react-native.d.ts",
|
||||||
|
"require": "./react-native.js",
|
||||||
|
"import": "./react-native.js",
|
||||||
|
"default": "./react-native.js"
|
||||||
|
},
|
||||||
|
"./extension": {
|
||||||
|
"types": "./extension.d.ts",
|
||||||
|
"require": "./extension.js",
|
||||||
|
"import": "./extension.js",
|
||||||
|
"default": "./extension.js"
|
||||||
|
},
|
||||||
|
"./index-browser": {
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"require": "./index-browser.js",
|
||||||
|
"import": "./index-browser.js",
|
||||||
|
"default": "./index-browser.js"
|
||||||
|
},
|
||||||
|
"./index": {
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"require": "./index.js",
|
||||||
|
"import": "./index.js",
|
||||||
|
"default": "./index.js"
|
||||||
|
},
|
||||||
|
"./wasm": {
|
||||||
|
"types": "./wasm.d.ts",
|
||||||
|
"require": "./wasm.js",
|
||||||
|
"import": "./wasm.js",
|
||||||
|
"default": "./wasm.js"
|
||||||
|
},
|
||||||
|
"./runtime/library": {
|
||||||
|
"types": "./runtime/library.d.ts",
|
||||||
|
"require": "./runtime/library.js",
|
||||||
|
"import": "./runtime/library.js",
|
||||||
|
"default": "./runtime/library.js"
|
||||||
|
},
|
||||||
|
"./runtime/binary": {
|
||||||
|
"types": "./runtime/binary.d.ts",
|
||||||
|
"require": "./runtime/binary.js",
|
||||||
|
"import": "./runtime/binary.js",
|
||||||
|
"default": "./runtime/binary.js"
|
||||||
|
},
|
||||||
|
"./generator-build": {
|
||||||
|
"require": "./generator-build/index.js",
|
||||||
|
"import": "./generator-build/index.js",
|
||||||
|
"default": "./generator-build/index.js"
|
||||||
|
},
|
||||||
|
"./sql": {
|
||||||
|
"require": {
|
||||||
|
"types": "./sql.d.ts",
|
||||||
|
"node": "./sql.js",
|
||||||
|
"default": "./sql.js"
|
||||||
|
},
|
||||||
|
"import": {
|
||||||
|
"types": "./sql.d.ts",
|
||||||
|
"node": "./sql.mjs",
|
||||||
|
"default": "./sql.mjs"
|
||||||
|
},
|
||||||
|
"default": "./sql.js"
|
||||||
|
},
|
||||||
|
"./*": "./*"
|
||||||
|
},
|
||||||
|
"version": "5.22.0",
|
||||||
|
"sideEffects": false
|
||||||
|
}
|
||||||
BIN
keep-notes/prisma/client-generated/query_engine-windows.dll.node
Normal file
BIN
keep-notes/prisma/client-generated/query_engine-windows.dll.node
Normal file
Binary file not shown.
31
keep-notes/prisma/client-generated/runtime/edge-esm.js
Normal file
31
keep-notes/prisma/client-generated/runtime/edge-esm.js
Normal file
File diff suppressed because one or more lines are too long
31
keep-notes/prisma/client-generated/runtime/edge.js
Normal file
31
keep-notes/prisma/client-generated/runtime/edge.js
Normal file
File diff suppressed because one or more lines are too long
365
keep-notes/prisma/client-generated/runtime/index-browser.d.ts
vendored
Normal file
365
keep-notes/prisma/client-generated/runtime/index-browser.d.ts
vendored
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
declare class AnyNull extends NullTypesEnumValue {
|
||||||
|
}
|
||||||
|
|
||||||
|
declare type Args<T, F extends Operation> = T extends {
|
||||||
|
[K: symbol]: {
|
||||||
|
types: {
|
||||||
|
operations: {
|
||||||
|
[K in F]: {
|
||||||
|
args: any;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} ? T[symbol]['types']['operations'][F]['args'] : any;
|
||||||
|
|
||||||
|
declare class DbNull extends NullTypesEnumValue {
|
||||||
|
}
|
||||||
|
|
||||||
|
export declare namespace Decimal {
|
||||||
|
export type Constructor = typeof Decimal;
|
||||||
|
export type Instance = Decimal;
|
||||||
|
export type Rounding = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
||||||
|
export type Modulo = Rounding | 9;
|
||||||
|
export type Value = string | number | Decimal;
|
||||||
|
|
||||||
|
// http://mikemcl.github.io/decimal.js/#constructor-properties
|
||||||
|
export interface Config {
|
||||||
|
precision?: number;
|
||||||
|
rounding?: Rounding;
|
||||||
|
toExpNeg?: number;
|
||||||
|
toExpPos?: number;
|
||||||
|
minE?: number;
|
||||||
|
maxE?: number;
|
||||||
|
crypto?: boolean;
|
||||||
|
modulo?: Modulo;
|
||||||
|
defaults?: boolean;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export declare class Decimal {
|
||||||
|
readonly d: number[];
|
||||||
|
readonly e: number;
|
||||||
|
readonly s: number;
|
||||||
|
|
||||||
|
constructor(n: Decimal.Value);
|
||||||
|
|
||||||
|
absoluteValue(): Decimal;
|
||||||
|
abs(): Decimal;
|
||||||
|
|
||||||
|
ceil(): Decimal;
|
||||||
|
|
||||||
|
clampedTo(min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||||
|
clamp(min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
comparedTo(n: Decimal.Value): number;
|
||||||
|
cmp(n: Decimal.Value): number;
|
||||||
|
|
||||||
|
cosine(): Decimal;
|
||||||
|
cos(): Decimal;
|
||||||
|
|
||||||
|
cubeRoot(): Decimal;
|
||||||
|
cbrt(): Decimal;
|
||||||
|
|
||||||
|
decimalPlaces(): number;
|
||||||
|
dp(): number;
|
||||||
|
|
||||||
|
dividedBy(n: Decimal.Value): Decimal;
|
||||||
|
div(n: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
dividedToIntegerBy(n: Decimal.Value): Decimal;
|
||||||
|
divToInt(n: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
equals(n: Decimal.Value): boolean;
|
||||||
|
eq(n: Decimal.Value): boolean;
|
||||||
|
|
||||||
|
floor(): Decimal;
|
||||||
|
|
||||||
|
greaterThan(n: Decimal.Value): boolean;
|
||||||
|
gt(n: Decimal.Value): boolean;
|
||||||
|
|
||||||
|
greaterThanOrEqualTo(n: Decimal.Value): boolean;
|
||||||
|
gte(n: Decimal.Value): boolean;
|
||||||
|
|
||||||
|
hyperbolicCosine(): Decimal;
|
||||||
|
cosh(): Decimal;
|
||||||
|
|
||||||
|
hyperbolicSine(): Decimal;
|
||||||
|
sinh(): Decimal;
|
||||||
|
|
||||||
|
hyperbolicTangent(): Decimal;
|
||||||
|
tanh(): Decimal;
|
||||||
|
|
||||||
|
inverseCosine(): Decimal;
|
||||||
|
acos(): Decimal;
|
||||||
|
|
||||||
|
inverseHyperbolicCosine(): Decimal;
|
||||||
|
acosh(): Decimal;
|
||||||
|
|
||||||
|
inverseHyperbolicSine(): Decimal;
|
||||||
|
asinh(): Decimal;
|
||||||
|
|
||||||
|
inverseHyperbolicTangent(): Decimal;
|
||||||
|
atanh(): Decimal;
|
||||||
|
|
||||||
|
inverseSine(): Decimal;
|
||||||
|
asin(): Decimal;
|
||||||
|
|
||||||
|
inverseTangent(): Decimal;
|
||||||
|
atan(): Decimal;
|
||||||
|
|
||||||
|
isFinite(): boolean;
|
||||||
|
|
||||||
|
isInteger(): boolean;
|
||||||
|
isInt(): boolean;
|
||||||
|
|
||||||
|
isNaN(): boolean;
|
||||||
|
|
||||||
|
isNegative(): boolean;
|
||||||
|
isNeg(): boolean;
|
||||||
|
|
||||||
|
isPositive(): boolean;
|
||||||
|
isPos(): boolean;
|
||||||
|
|
||||||
|
isZero(): boolean;
|
||||||
|
|
||||||
|
lessThan(n: Decimal.Value): boolean;
|
||||||
|
lt(n: Decimal.Value): boolean;
|
||||||
|
|
||||||
|
lessThanOrEqualTo(n: Decimal.Value): boolean;
|
||||||
|
lte(n: Decimal.Value): boolean;
|
||||||
|
|
||||||
|
logarithm(n?: Decimal.Value): Decimal;
|
||||||
|
log(n?: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
minus(n: Decimal.Value): Decimal;
|
||||||
|
sub(n: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
modulo(n: Decimal.Value): Decimal;
|
||||||
|
mod(n: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
naturalExponential(): Decimal;
|
||||||
|
exp(): Decimal;
|
||||||
|
|
||||||
|
naturalLogarithm(): Decimal;
|
||||||
|
ln(): Decimal;
|
||||||
|
|
||||||
|
negated(): Decimal;
|
||||||
|
neg(): Decimal;
|
||||||
|
|
||||||
|
plus(n: Decimal.Value): Decimal;
|
||||||
|
add(n: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
precision(includeZeros?: boolean): number;
|
||||||
|
sd(includeZeros?: boolean): number;
|
||||||
|
|
||||||
|
round(): Decimal;
|
||||||
|
|
||||||
|
sine() : Decimal;
|
||||||
|
sin() : Decimal;
|
||||||
|
|
||||||
|
squareRoot(): Decimal;
|
||||||
|
sqrt(): Decimal;
|
||||||
|
|
||||||
|
tangent() : Decimal;
|
||||||
|
tan() : Decimal;
|
||||||
|
|
||||||
|
times(n: Decimal.Value): Decimal;
|
||||||
|
mul(n: Decimal.Value) : Decimal;
|
||||||
|
|
||||||
|
toBinary(significantDigits?: number): string;
|
||||||
|
toBinary(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||||
|
|
||||||
|
toDecimalPlaces(decimalPlaces?: number): Decimal;
|
||||||
|
toDecimalPlaces(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;
|
||||||
|
toDP(decimalPlaces?: number): Decimal;
|
||||||
|
toDP(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;
|
||||||
|
|
||||||
|
toExponential(decimalPlaces?: number): string;
|
||||||
|
toExponential(decimalPlaces: number, rounding: Decimal.Rounding): string;
|
||||||
|
|
||||||
|
toFixed(decimalPlaces?: number): string;
|
||||||
|
toFixed(decimalPlaces: number, rounding: Decimal.Rounding): string;
|
||||||
|
|
||||||
|
toFraction(max_denominator?: Decimal.Value): Decimal[];
|
||||||
|
|
||||||
|
toHexadecimal(significantDigits?: number): string;
|
||||||
|
toHexadecimal(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||||
|
toHex(significantDigits?: number): string;
|
||||||
|
toHex(significantDigits: number, rounding?: Decimal.Rounding): string;
|
||||||
|
|
||||||
|
toJSON(): string;
|
||||||
|
|
||||||
|
toNearest(n: Decimal.Value, rounding?: Decimal.Rounding): Decimal;
|
||||||
|
|
||||||
|
toNumber(): number;
|
||||||
|
|
||||||
|
toOctal(significantDigits?: number): string;
|
||||||
|
toOctal(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||||
|
|
||||||
|
toPower(n: Decimal.Value): Decimal;
|
||||||
|
pow(n: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
toPrecision(significantDigits?: number): string;
|
||||||
|
toPrecision(significantDigits: number, rounding: Decimal.Rounding): string;
|
||||||
|
|
||||||
|
toSignificantDigits(significantDigits?: number): Decimal;
|
||||||
|
toSignificantDigits(significantDigits: number, rounding: Decimal.Rounding): Decimal;
|
||||||
|
toSD(significantDigits?: number): Decimal;
|
||||||
|
toSD(significantDigits: number, rounding: Decimal.Rounding): Decimal;
|
||||||
|
|
||||||
|
toString(): string;
|
||||||
|
|
||||||
|
truncated(): Decimal;
|
||||||
|
trunc(): Decimal;
|
||||||
|
|
||||||
|
valueOf(): string;
|
||||||
|
|
||||||
|
static abs(n: Decimal.Value): Decimal;
|
||||||
|
static acos(n: Decimal.Value): Decimal;
|
||||||
|
static acosh(n: Decimal.Value): Decimal;
|
||||||
|
static add(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||||
|
static asin(n: Decimal.Value): Decimal;
|
||||||
|
static asinh(n: Decimal.Value): Decimal;
|
||||||
|
static atan(n: Decimal.Value): Decimal;
|
||||||
|
static atanh(n: Decimal.Value): Decimal;
|
||||||
|
static atan2(y: Decimal.Value, x: Decimal.Value): Decimal;
|
||||||
|
static cbrt(n: Decimal.Value): Decimal;
|
||||||
|
static ceil(n: Decimal.Value): Decimal;
|
||||||
|
static clamp(n: Decimal.Value, min: Decimal.Value, max: Decimal.Value): Decimal;
|
||||||
|
static clone(object?: Decimal.Config): Decimal.Constructor;
|
||||||
|
static config(object: Decimal.Config): Decimal.Constructor;
|
||||||
|
static cos(n: Decimal.Value): Decimal;
|
||||||
|
static cosh(n: Decimal.Value): Decimal;
|
||||||
|
static div(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||||
|
static exp(n: Decimal.Value): Decimal;
|
||||||
|
static floor(n: Decimal.Value): Decimal;
|
||||||
|
static hypot(...n: Decimal.Value[]): Decimal;
|
||||||
|
static isDecimal(object: any): object is Decimal;
|
||||||
|
static ln(n: Decimal.Value): Decimal;
|
||||||
|
static log(n: Decimal.Value, base?: Decimal.Value): Decimal;
|
||||||
|
static log2(n: Decimal.Value): Decimal;
|
||||||
|
static log10(n: Decimal.Value): Decimal;
|
||||||
|
static max(...n: Decimal.Value[]): Decimal;
|
||||||
|
static min(...n: Decimal.Value[]): Decimal;
|
||||||
|
static mod(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||||
|
static mul(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||||
|
static noConflict(): Decimal.Constructor; // Browser only
|
||||||
|
static pow(base: Decimal.Value, exponent: Decimal.Value): Decimal;
|
||||||
|
static random(significantDigits?: number): Decimal;
|
||||||
|
static round(n: Decimal.Value): Decimal;
|
||||||
|
static set(object: Decimal.Config): Decimal.Constructor;
|
||||||
|
static sign(n: Decimal.Value): number;
|
||||||
|
static sin(n: Decimal.Value): Decimal;
|
||||||
|
static sinh(n: Decimal.Value): Decimal;
|
||||||
|
static sqrt(n: Decimal.Value): Decimal;
|
||||||
|
static sub(x: Decimal.Value, y: Decimal.Value): Decimal;
|
||||||
|
static sum(...n: Decimal.Value[]): Decimal;
|
||||||
|
static tan(n: Decimal.Value): Decimal;
|
||||||
|
static tanh(n: Decimal.Value): Decimal;
|
||||||
|
static trunc(n: Decimal.Value): Decimal;
|
||||||
|
|
||||||
|
static readonly default?: Decimal.Constructor;
|
||||||
|
static readonly Decimal?: Decimal.Constructor;
|
||||||
|
|
||||||
|
static readonly precision: number;
|
||||||
|
static readonly rounding: Decimal.Rounding;
|
||||||
|
static readonly toExpNeg: number;
|
||||||
|
static readonly toExpPos: number;
|
||||||
|
static readonly minE: number;
|
||||||
|
static readonly maxE: number;
|
||||||
|
static readonly crypto: boolean;
|
||||||
|
static readonly modulo: Decimal.Modulo;
|
||||||
|
|
||||||
|
static readonly ROUND_UP: 0;
|
||||||
|
static readonly ROUND_DOWN: 1;
|
||||||
|
static readonly ROUND_CEIL: 2;
|
||||||
|
static readonly ROUND_FLOOR: 3;
|
||||||
|
static readonly ROUND_HALF_UP: 4;
|
||||||
|
static readonly ROUND_HALF_DOWN: 5;
|
||||||
|
static readonly ROUND_HALF_EVEN: 6;
|
||||||
|
static readonly ROUND_HALF_CEIL: 7;
|
||||||
|
static readonly ROUND_HALF_FLOOR: 8;
|
||||||
|
static readonly EUCLID: 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare type Exact<A, W> = (A extends unknown ? (W extends A ? {
|
||||||
|
[K in keyof A]: Exact<A[K], W[K]>;
|
||||||
|
} : W) : never) | (A extends Narrowable ? A : never);
|
||||||
|
|
||||||
|
export declare function getRuntime(): GetRuntimeOutput;
|
||||||
|
|
||||||
|
declare type GetRuntimeOutput = {
|
||||||
|
id: Runtime;
|
||||||
|
prettyName: string;
|
||||||
|
isEdge: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
declare class JsonNull extends NullTypesEnumValue {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates more strict variant of an enum which, unlike regular enum,
|
||||||
|
* throws on non-existing property access. This can be useful in following situations:
|
||||||
|
* - we have an API, that accepts both `undefined` and `SomeEnumType` as an input
|
||||||
|
* - enum values are generated dynamically from DMMF.
|
||||||
|
*
|
||||||
|
* In that case, if using normal enums and no compile-time typechecking, using non-existing property
|
||||||
|
* will result in `undefined` value being used, which will be accepted. Using strict enum
|
||||||
|
* in this case will help to have a runtime exception, telling you that you are probably doing something wrong.
|
||||||
|
*
|
||||||
|
* Note: if you need to check for existence of a value in the enum you can still use either
|
||||||
|
* `in` operator or `hasOwnProperty` function.
|
||||||
|
*
|
||||||
|
* @param definition
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export declare function makeStrictEnum<T extends Record<PropertyKey, string | number>>(definition: T): T;
|
||||||
|
|
||||||
|
declare type Narrowable = string | number | bigint | boolean | [];
|
||||||
|
|
||||||
|
declare class NullTypesEnumValue extends ObjectEnumValue {
|
||||||
|
_getNamespace(): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class for unique values of object-valued enums.
|
||||||
|
*/
|
||||||
|
declare abstract class ObjectEnumValue {
|
||||||
|
constructor(arg?: symbol);
|
||||||
|
abstract _getNamespace(): string;
|
||||||
|
_getName(): string;
|
||||||
|
toString(): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export declare const objectEnumValues: {
|
||||||
|
classes: {
|
||||||
|
DbNull: typeof DbNull;
|
||||||
|
JsonNull: typeof JsonNull;
|
||||||
|
AnyNull: typeof AnyNull;
|
||||||
|
};
|
||||||
|
instances: {
|
||||||
|
DbNull: DbNull;
|
||||||
|
JsonNull: JsonNull;
|
||||||
|
AnyNull: AnyNull;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
declare type Operation = 'findFirst' | 'findFirstOrThrow' | 'findUnique' | 'findUniqueOrThrow' | 'findMany' | 'create' | 'createMany' | 'createManyAndReturn' | 'update' | 'updateMany' | 'upsert' | 'delete' | 'deleteMany' | 'aggregate' | 'count' | 'groupBy' | '$queryRaw' | '$executeRaw' | '$queryRawUnsafe' | '$executeRawUnsafe' | 'findRaw' | 'aggregateRaw' | '$runCommandRaw';
|
||||||
|
|
||||||
|
declare namespace Public {
|
||||||
|
export {
|
||||||
|
validator
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export { Public }
|
||||||
|
|
||||||
|
declare type Runtime = "edge-routine" | "workerd" | "deno" | "lagon" | "react-native" | "netlify" | "electron" | "node" | "bun" | "edge-light" | "fastly" | "unknown";
|
||||||
|
|
||||||
|
declare function validator<V>(): <S>(select: Exact<S, V>) => S;
|
||||||
|
|
||||||
|
declare function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation>(client: C, model: M, operation: O): <S>(select: Exact<S, Args<C[M], O>>) => S;
|
||||||
|
|
||||||
|
declare function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation, P extends keyof Args<C[M], O>>(client: C, model: M, operation: O, prop: P): <S>(select: Exact<S, Args<C[M], O>[P]>) => S;
|
||||||
|
|
||||||
|
export { }
|
||||||
13
keep-notes/prisma/client-generated/runtime/index-browser.js
Normal file
13
keep-notes/prisma/client-generated/runtime/index-browser.js
Normal file
File diff suppressed because one or more lines are too long
3403
keep-notes/prisma/client-generated/runtime/library.d.ts
vendored
Normal file
3403
keep-notes/prisma/client-generated/runtime/library.d.ts
vendored
Normal file
File diff suppressed because it is too large
Load Diff
143
keep-notes/prisma/client-generated/runtime/library.js
Normal file
143
keep-notes/prisma/client-generated/runtime/library.js
Normal file
File diff suppressed because one or more lines are too long
80
keep-notes/prisma/client-generated/runtime/react-native.js
vendored
Normal file
80
keep-notes/prisma/client-generated/runtime/react-native.js
vendored
Normal file
File diff suppressed because one or more lines are too long
32
keep-notes/prisma/client-generated/runtime/wasm.js
Normal file
32
keep-notes/prisma/client-generated/runtime/wasm.js
Normal file
File diff suppressed because one or more lines are too long
265
keep-notes/prisma/client-generated/schema.prisma
Normal file
265
keep-notes/prisma/client-generated/schema.prisma
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
// This is your Prisma schema file,
|
||||||
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||||
|
|
||||||
|
generator client {
|
||||||
|
provider = "prisma-client-js"
|
||||||
|
output = "./client-generated"
|
||||||
|
binaryTargets = ["debian-openssl-1.1.x", "native"]
|
||||||
|
}
|
||||||
|
|
||||||
|
datasource db {
|
||||||
|
provider = "sqlite"
|
||||||
|
url = env("DATABASE_URL")
|
||||||
|
}
|
||||||
|
|
||||||
|
model User {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String?
|
||||||
|
email String @unique
|
||||||
|
emailVerified DateTime?
|
||||||
|
password String? // Hashed password
|
||||||
|
role String @default("USER") // "USER" or "ADMIN"
|
||||||
|
image String?
|
||||||
|
theme String @default("light")
|
||||||
|
resetToken String? @unique
|
||||||
|
resetTokenExpiry DateTime?
|
||||||
|
accounts Account[]
|
||||||
|
sessions Session[]
|
||||||
|
notes Note[]
|
||||||
|
labels Label[]
|
||||||
|
notebooks Notebook[] // NEW: Relation to notebooks
|
||||||
|
receivedShares NoteShare[] @relation("ReceivedShares")
|
||||||
|
sentShares NoteShare[] @relation("SentShares")
|
||||||
|
|
||||||
|
// Phase 1 AI Relations
|
||||||
|
aiFeedback AiFeedback[]
|
||||||
|
aiSettings UserAISettings?
|
||||||
|
memoryEchoInsights MemoryEchoInsight[]
|
||||||
|
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
}
|
||||||
|
|
||||||
|
model Account {
|
||||||
|
userId String
|
||||||
|
type String
|
||||||
|
provider String
|
||||||
|
providerAccountId String
|
||||||
|
refresh_token String?
|
||||||
|
access_token String?
|
||||||
|
expires_at Int?
|
||||||
|
token_type String?
|
||||||
|
scope String?
|
||||||
|
id_token String?
|
||||||
|
session_state String?
|
||||||
|
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
|
@@id([provider, providerAccountId])
|
||||||
|
}
|
||||||
|
|
||||||
|
model Session {
|
||||||
|
sessionToken String @unique
|
||||||
|
userId String
|
||||||
|
expires DateTime
|
||||||
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
}
|
||||||
|
|
||||||
|
model VerificationToken {
|
||||||
|
identifier String
|
||||||
|
token String
|
||||||
|
expires DateTime
|
||||||
|
|
||||||
|
@@id([identifier, token])
|
||||||
|
}
|
||||||
|
|
||||||
|
// NEW: Notebook model for organizing notes
|
||||||
|
model Notebook {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
icon String? // Emoji or icon name
|
||||||
|
color String? // Hex color for personalization
|
||||||
|
order Int // Manual order for drag & drop
|
||||||
|
userId String
|
||||||
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
notes Note[] // Notes can belong to a notebook
|
||||||
|
labels Label[] // Labels are contextual to this notebook
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
@@index([userId, order])
|
||||||
|
@@index([userId])
|
||||||
|
}
|
||||||
|
|
||||||
|
model Label {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
color String @default("gray")
|
||||||
|
notebookId String? // TEMPORARY: Optional for migration, will be required later
|
||||||
|
notebook Notebook? @relation(fields: [notebookId], references: [id], onDelete: Cascade)
|
||||||
|
notes Note[] // NEW: Many-to-many relation with notes
|
||||||
|
userId String? // DEPRECATED: Kept for migration, will be removed after migration
|
||||||
|
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
@@unique([notebookId, name]) // NEW: Labels are unique within a notebook (ignored if notebookId is null)
|
||||||
|
@@index([notebookId])
|
||||||
|
@@index([userId]) // DEPRECATED: Keep for now, remove after migration
|
||||||
|
}
|
||||||
|
|
||||||
|
model Note {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
title String?
|
||||||
|
content String
|
||||||
|
color String @default("default")
|
||||||
|
isPinned Boolean @default(false)
|
||||||
|
isArchived Boolean @default(false)
|
||||||
|
type String @default("text") // "text" or "checklist"
|
||||||
|
checkItems String? // For checklist items stored as JSON string
|
||||||
|
labels String? // Array of label names stored as JSON string (DEPRECATED)
|
||||||
|
images String? // Array of image URLs stored as JSON string
|
||||||
|
links String? // Array of link metadata stored as JSON string
|
||||||
|
reminder DateTime? // Reminder date and time
|
||||||
|
isReminderDone Boolean @default(false)
|
||||||
|
reminderRecurrence String? // "none", "daily", "weekly", "monthly", "custom"
|
||||||
|
reminderLocation String? // Location for location-based reminders
|
||||||
|
isMarkdown Boolean @default(false) // Whether content uses Markdown
|
||||||
|
size String @default("small") // "small", "medium", "large"
|
||||||
|
embedding String? // Vector embeddings stored as JSON string for semantic search
|
||||||
|
sharedWith String? // Array of user IDs (collaborators) stored as JSON string
|
||||||
|
userId String? // Owner of the note
|
||||||
|
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
shares NoteShare[] // All share records for this note
|
||||||
|
order Int @default(0)
|
||||||
|
|
||||||
|
// NEW: Notebook relation (optional - null = "Notes générales" / Inbox)
|
||||||
|
notebookId String? // NULL = note is in general notes
|
||||||
|
notebook Notebook? @relation(fields: [notebookId], references: [id], onDelete: SetNull)
|
||||||
|
|
||||||
|
// NEW: Many-to-many relation with labels
|
||||||
|
labelRelations Label[] // Uses implicit _NoteToLabel junction table
|
||||||
|
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
// Phase 1 AI Extensions
|
||||||
|
autoGenerated Boolean? // True if title/content was AI-generated
|
||||||
|
aiProvider String? // 'openai' | 'ollama'
|
||||||
|
aiConfidence Int? // 0-100 (collected Phase 1, UI Phase 3)
|
||||||
|
language String? // ISO 639-1: 'fr', 'en', 'es', 'de', 'fa'
|
||||||
|
languageConfidence Float? // 0.0-1.0
|
||||||
|
lastAiAnalysis DateTime? // Timestamp of last AI analysis
|
||||||
|
|
||||||
|
// Relations for Phase 1 AI
|
||||||
|
aiFeedback AiFeedback[]
|
||||||
|
memoryEchoAsNote1 MemoryEchoInsight[] @relation("EchoNote1")
|
||||||
|
memoryEchoAsNote2 MemoryEchoInsight[] @relation("EchoNote2")
|
||||||
|
|
||||||
|
@@index([isPinned])
|
||||||
|
@@index([isArchived])
|
||||||
|
@@index([order])
|
||||||
|
@@index([reminder])
|
||||||
|
@@index([userId])
|
||||||
|
@@index([userId, notebookId]) // NEW: For filtering notes by notebook
|
||||||
|
}
|
||||||
|
|
||||||
|
model NoteShare {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
noteId String
|
||||||
|
note Note @relation(fields: [noteId], references: [id], onDelete: Cascade)
|
||||||
|
userId String
|
||||||
|
user User @relation("ReceivedShares", fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
sharedBy String // User ID who shared the note
|
||||||
|
sharer User @relation("SentShares", fields: [sharedBy], references: [id], onDelete: Cascade)
|
||||||
|
status String @default("pending") // "pending", "accepted", "declined", "removed"
|
||||||
|
permission String @default("view") // "view", "comment", "edit"
|
||||||
|
notifiedAt DateTime?
|
||||||
|
respondedAt DateTime?
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
@@unique([noteId, userId])
|
||||||
|
@@index([userId])
|
||||||
|
@@index([status])
|
||||||
|
@@index([sharedBy])
|
||||||
|
}
|
||||||
|
|
||||||
|
model SystemConfig {
|
||||||
|
key String @id
|
||||||
|
value String
|
||||||
|
}
|
||||||
|
|
||||||
|
// Phase 1 MVP AI Models
|
||||||
|
|
||||||
|
model AiFeedback {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
noteId String
|
||||||
|
userId String?
|
||||||
|
feedbackType String // 'thumbs_up' | 'thumbs_down' | 'correction'
|
||||||
|
feature String // 'title_suggestion' | 'memory_echo' | 'semantic_search' | 'paragraph_refactor'
|
||||||
|
originalContent String // JSON string of AI-generated content
|
||||||
|
correctedContent String? // User's modified version
|
||||||
|
metadata String? // JSON string for additional data (provider, model, timestamp)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
|
||||||
|
note Note @relation(fields: [noteId], references: [id], onDelete: Cascade)
|
||||||
|
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
|
@@index([noteId])
|
||||||
|
@@index([userId])
|
||||||
|
@@index([feature])
|
||||||
|
}
|
||||||
|
|
||||||
|
model MemoryEchoInsight {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
userId String?
|
||||||
|
note1Id String
|
||||||
|
note2Id String
|
||||||
|
similarityScore Float
|
||||||
|
insight String // AI-generated explanation of the connection
|
||||||
|
insightDate DateTime @default(now())
|
||||||
|
viewed Boolean @default(false)
|
||||||
|
feedback String? // 'thumbs_up' | 'thumbs_down'
|
||||||
|
dismissed Boolean @default(false) // User dismissed this connection
|
||||||
|
|
||||||
|
note1 Note @relation("EchoNote1", fields: [note1Id], references: [id], onDelete: Cascade)
|
||||||
|
note2 Note @relation("EchoNote2", fields: [note2Id], references: [id], onDelete: Cascade)
|
||||||
|
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
|
@@unique([userId, insightDate])
|
||||||
|
@@index([userId, insightDate])
|
||||||
|
@@index([userId, dismissed]) // For filtering dismissed connections
|
||||||
|
}
|
||||||
|
|
||||||
|
model UserAISettings {
|
||||||
|
userId String @id
|
||||||
|
|
||||||
|
// Feature Flags (granular ON/OFF)
|
||||||
|
titleSuggestions Boolean @default(true)
|
||||||
|
semanticSearch Boolean @default(true)
|
||||||
|
paragraphRefactor Boolean @default(true)
|
||||||
|
memoryEcho Boolean @default(true)
|
||||||
|
|
||||||
|
// Configuration
|
||||||
|
memoryEchoFrequency String @default("daily") // 'daily' | 'weekly' | 'custom'
|
||||||
|
aiProvider String @default("auto") // 'auto' | 'openai' | 'ollama'
|
||||||
|
preferredLanguage String @default("auto") // 'auto' | 'en' | 'fr' | 'es' | 'de' | 'fa' | 'it' | 'pt' | 'ru' | 'zh' | 'ja' | 'ko' | 'ar' | 'hi' | 'nl' | 'pl'
|
||||||
|
fontSize String @default("medium") // 'small' | 'medium' | 'large' | 'extra-large'
|
||||||
|
demoMode Boolean @default(false) // Demo mode for testing Memory Echo
|
||||||
|
|
||||||
|
// Relation
|
||||||
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
|
// Indexes for analytics
|
||||||
|
@@index([memoryEcho])
|
||||||
|
@@index([aiProvider])
|
||||||
|
@@index([memoryEchoFrequency])
|
||||||
|
@@index([preferredLanguage])
|
||||||
|
}
|
||||||
1
keep-notes/prisma/client-generated/wasm.d.ts
vendored
Normal file
1
keep-notes/prisma/client-generated/wasm.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from "./index"
|
||||||
332
keep-notes/prisma/client-generated/wasm.js
Normal file
332
keep-notes/prisma/client-generated/wasm.js
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
|
||||||
|
const {
|
||||||
|
Decimal,
|
||||||
|
objectEnumValues,
|
||||||
|
makeStrictEnum,
|
||||||
|
Public,
|
||||||
|
getRuntime,
|
||||||
|
skip
|
||||||
|
} = require('./runtime/index-browser.js')
|
||||||
|
|
||||||
|
|
||||||
|
const Prisma = {}
|
||||||
|
|
||||||
|
exports.Prisma = Prisma
|
||||||
|
exports.$Enums = {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prisma Client JS version: 5.22.0
|
||||||
|
* Query Engine version: 605197351a3c8bdd595af2d2a9bc3025bca48ea2
|
||||||
|
*/
|
||||||
|
Prisma.prismaVersion = {
|
||||||
|
client: "5.22.0",
|
||||||
|
engine: "605197351a3c8bdd595af2d2a9bc3025bca48ea2"
|
||||||
|
}
|
||||||
|
|
||||||
|
Prisma.PrismaClientKnownRequestError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)};
|
||||||
|
Prisma.PrismaClientUnknownRequestError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.PrismaClientRustPanicError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.PrismaClientInitializationError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.PrismaClientValidationError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.NotFoundError = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`NotFoundError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.Decimal = Decimal
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-export of sql-template-tag
|
||||||
|
*/
|
||||||
|
Prisma.sql = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.empty = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.join = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.raw = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.validator = Public.validator
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extensions
|
||||||
|
*/
|
||||||
|
Prisma.getExtensionContext = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
Prisma.defineExtension = () => {
|
||||||
|
const runtimeName = getRuntime().prettyName;
|
||||||
|
throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
||||||
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
||||||
|
)}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shorthand utilities for JSON filtering
|
||||||
|
*/
|
||||||
|
Prisma.DbNull = objectEnumValues.instances.DbNull
|
||||||
|
Prisma.JsonNull = objectEnumValues.instances.JsonNull
|
||||||
|
Prisma.AnyNull = objectEnumValues.instances.AnyNull
|
||||||
|
|
||||||
|
Prisma.NullTypes = {
|
||||||
|
DbNull: objectEnumValues.classes.DbNull,
|
||||||
|
JsonNull: objectEnumValues.classes.JsonNull,
|
||||||
|
AnyNull: objectEnumValues.classes.AnyNull
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enums
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
|
||||||
|
Serializable: 'Serializable'
|
||||||
|
});
|
||||||
|
|
||||||
|
exports.Prisma.UserScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
name: 'name',
|
||||||
|
email: 'email',
|
||||||
|
emailVerified: 'emailVerified',
|
||||||
|
password: 'password',
|
||||||
|
role: 'role',
|
||||||
|
image: 'image',
|
||||||
|
theme: 'theme',
|
||||||
|
resetToken: 'resetToken',
|
||||||
|
resetTokenExpiry: 'resetTokenExpiry',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.AccountScalarFieldEnum = {
|
||||||
|
userId: 'userId',
|
||||||
|
type: 'type',
|
||||||
|
provider: 'provider',
|
||||||
|
providerAccountId: 'providerAccountId',
|
||||||
|
refresh_token: 'refresh_token',
|
||||||
|
access_token: 'access_token',
|
||||||
|
expires_at: 'expires_at',
|
||||||
|
token_type: 'token_type',
|
||||||
|
scope: 'scope',
|
||||||
|
id_token: 'id_token',
|
||||||
|
session_state: 'session_state',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.SessionScalarFieldEnum = {
|
||||||
|
sessionToken: 'sessionToken',
|
||||||
|
userId: 'userId',
|
||||||
|
expires: 'expires',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.VerificationTokenScalarFieldEnum = {
|
||||||
|
identifier: 'identifier',
|
||||||
|
token: 'token',
|
||||||
|
expires: 'expires'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.NotebookScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
name: 'name',
|
||||||
|
icon: 'icon',
|
||||||
|
color: 'color',
|
||||||
|
order: 'order',
|
||||||
|
userId: 'userId',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.LabelScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
name: 'name',
|
||||||
|
color: 'color',
|
||||||
|
notebookId: 'notebookId',
|
||||||
|
userId: 'userId',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.NoteScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
title: 'title',
|
||||||
|
content: 'content',
|
||||||
|
color: 'color',
|
||||||
|
isPinned: 'isPinned',
|
||||||
|
isArchived: 'isArchived',
|
||||||
|
type: 'type',
|
||||||
|
checkItems: 'checkItems',
|
||||||
|
labels: 'labels',
|
||||||
|
images: 'images',
|
||||||
|
links: 'links',
|
||||||
|
reminder: 'reminder',
|
||||||
|
isReminderDone: 'isReminderDone',
|
||||||
|
reminderRecurrence: 'reminderRecurrence',
|
||||||
|
reminderLocation: 'reminderLocation',
|
||||||
|
isMarkdown: 'isMarkdown',
|
||||||
|
size: 'size',
|
||||||
|
embedding: 'embedding',
|
||||||
|
sharedWith: 'sharedWith',
|
||||||
|
userId: 'userId',
|
||||||
|
order: 'order',
|
||||||
|
notebookId: 'notebookId',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt',
|
||||||
|
autoGenerated: 'autoGenerated',
|
||||||
|
aiProvider: 'aiProvider',
|
||||||
|
aiConfidence: 'aiConfidence',
|
||||||
|
language: 'language',
|
||||||
|
languageConfidence: 'languageConfidence',
|
||||||
|
lastAiAnalysis: 'lastAiAnalysis'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.NoteShareScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
noteId: 'noteId',
|
||||||
|
userId: 'userId',
|
||||||
|
sharedBy: 'sharedBy',
|
||||||
|
status: 'status',
|
||||||
|
permission: 'permission',
|
||||||
|
notifiedAt: 'notifiedAt',
|
||||||
|
respondedAt: 'respondedAt',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.SystemConfigScalarFieldEnum = {
|
||||||
|
key: 'key',
|
||||||
|
value: 'value'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.AiFeedbackScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
noteId: 'noteId',
|
||||||
|
userId: 'userId',
|
||||||
|
feedbackType: 'feedbackType',
|
||||||
|
feature: 'feature',
|
||||||
|
originalContent: 'originalContent',
|
||||||
|
correctedContent: 'correctedContent',
|
||||||
|
metadata: 'metadata',
|
||||||
|
createdAt: 'createdAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.MemoryEchoInsightScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
userId: 'userId',
|
||||||
|
note1Id: 'note1Id',
|
||||||
|
note2Id: 'note2Id',
|
||||||
|
similarityScore: 'similarityScore',
|
||||||
|
insight: 'insight',
|
||||||
|
insightDate: 'insightDate',
|
||||||
|
viewed: 'viewed',
|
||||||
|
feedback: 'feedback',
|
||||||
|
dismissed: 'dismissed'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.UserAISettingsScalarFieldEnum = {
|
||||||
|
userId: 'userId',
|
||||||
|
titleSuggestions: 'titleSuggestions',
|
||||||
|
semanticSearch: 'semanticSearch',
|
||||||
|
paragraphRefactor: 'paragraphRefactor',
|
||||||
|
memoryEcho: 'memoryEcho',
|
||||||
|
memoryEchoFrequency: 'memoryEchoFrequency',
|
||||||
|
aiProvider: 'aiProvider',
|
||||||
|
preferredLanguage: 'preferredLanguage',
|
||||||
|
fontSize: 'fontSize',
|
||||||
|
demoMode: 'demoMode'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.SortOrder = {
|
||||||
|
asc: 'asc',
|
||||||
|
desc: 'desc'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.NullsOrder = {
|
||||||
|
first: 'first',
|
||||||
|
last: 'last'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
exports.Prisma.ModelName = {
|
||||||
|
User: 'User',
|
||||||
|
Account: 'Account',
|
||||||
|
Session: 'Session',
|
||||||
|
VerificationToken: 'VerificationToken',
|
||||||
|
Notebook: 'Notebook',
|
||||||
|
Label: 'Label',
|
||||||
|
Note: 'Note',
|
||||||
|
NoteShare: 'NoteShare',
|
||||||
|
SystemConfig: 'SystemConfig',
|
||||||
|
AiFeedback: 'AiFeedback',
|
||||||
|
MemoryEchoInsight: 'MemoryEchoInsight',
|
||||||
|
UserAISettings: 'UserAISettings'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a stub Prisma Client that will error at runtime if called.
|
||||||
|
*/
|
||||||
|
class PrismaClient {
|
||||||
|
constructor() {
|
||||||
|
return new Proxy(this, {
|
||||||
|
get(target, prop) {
|
||||||
|
let message
|
||||||
|
const runtime = getRuntime()
|
||||||
|
if (runtime.isEdge) {
|
||||||
|
message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:
|
||||||
|
- Use Prisma Accelerate: https://pris.ly/d/accelerate
|
||||||
|
- Use Driver Adapters: https://pris.ly/d/driver-adapters
|
||||||
|
`;
|
||||||
|
} else {
|
||||||
|
message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'
|
||||||
|
}
|
||||||
|
|
||||||
|
message += `
|
||||||
|
If this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`
|
||||||
|
|
||||||
|
throw new Error(message)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.PrismaClient = PrismaClient
|
||||||
|
|
||||||
|
Object.assign(exports, Prisma)
|
||||||
@ -4,6 +4,7 @@
|
|||||||
generator client {
|
generator client {
|
||||||
provider = "prisma-client-js"
|
provider = "prisma-client-js"
|
||||||
output = "./client-generated"
|
output = "./client-generated"
|
||||||
|
binaryTargets = ["debian-openssl-1.1.x", "native"]
|
||||||
}
|
}
|
||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user