Pre-existing Identity crashes server
Related to https://gitlab.coko.foundation/ketida/ketida/-/issues/824
Attempting to insert a duplicate Identity into the Identity table crashes the app. I'm not 100% certain, but I believe I did this when I had logged out as duncanb.dev@gmail.com
and logged back in as admin@example.com
(perhaps the user email was cached somehow?).
Here are the logs leading up to the app crash:
ketida-dev-kit-server-1 | ############ WS HEARTBEAT ############
ketida-dev-kit-server-1 | current connected clients via WS are 0
ketida-dev-kit-server-1 | ########## WS HEARTBEAT END ##########
ketida-dev-kit-db-1 | 2023-12-12 12:21:20.462 UTC [5848] ERROR: duplicate key value violates unique constraint "unique_provider_email"
ketida-dev-kit-db-1 | 2023-12-12 12:21:20.462 UTC [5848] DETAIL: Key (provider, email)=(lulu, duncanb.dev@gmail.com) already exists.
ketida-dev-kit-db-1 | 2023-12-12 12:21:20.462 UTC [5848] STATEMENT: insert into "identities" ("created", "email", "id", "oauth_access_token", "oauth_access_token_expiration", "oauth_refresh_token", "oauth_refresh_token_expiration", "profile_data", "provider", "type", "updated", "user_id") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning "id"
ketida-dev-kit-server-1 | /home/node/server/node_modules/db-errors/lib/dbErrors.js:19
ketida-dev-kit-server-1 | return new result.node.error(result.args);
ketida-dev-kit-server-1 | ^
ketida-dev-kit-server-1 |
ketida-dev-kit-server-1 | UniqueViolationError: insert into "identities" ("created", "email", "id", "oauth_access_token", "oauth_access_token_expiration", "oauth_refresh_token", "oauth_refresh_token_expiration", "profile_data", "provider", "type", "updated", "user_id") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning "id" - duplicate key value violates unique constraint "unique_provider_email"
ketida-dev-kit-server-1 | at wrapError (/home/node/server/node_modules/db-errors/lib/dbErrors.js:19:14)
ketida-dev-kit-server-1 | at handleExecuteError (/home/node/server/node_modules/objection/lib/queryBuilder/QueryBuilder.js:1489:32)
ketida-dev-kit-server-1 | at QueryBuilder.execute (/home/node/server/node_modules/objection/lib/queryBuilder/QueryBuilder.js:670:20)
ketida-dev-kit-server-1 | at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
ketida-dev-kit-server-1 | nativeError: error: insert into "identities" ("created", "email", "id", "oauth_access_token", "oauth_access_token_expiration", "oauth_refresh_token", "oauth_refresh_token_expiration", "profile_data", "provider", "type", "updated", "user_id") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning "id" - duplicate key value violates unique constraint "unique_provider_email"
ketida-dev-kit-server-1 | at Function.value (/home/node/server/node_modules/knex/lib/util/make-knex.js:90:29)
ketida-dev-kit-server-1 | at buildKnexQuery (/home/node/server/node_modules/objection/lib/queryBuilder/QueryBuilder.js:1587:63)
ketida-dev-kit-server-1 | at doExecute (/home/node/server/node_modules/objection/lib/queryBuilder/QueryBuilder.js:1465:31)
ketida-dev-kit-server-1 | at QueryBuilder.execute (/home/node/server/node_modules/objection/lib/queryBuilder/QueryBuilder.js:667:28)
ketida-dev-kit-server-1 | at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
ketida-dev-kit-server-1 | length: 246,
ketida-dev-kit-server-1 | severity: 'ERROR',
ketida-dev-kit-server-1 | code: '23505',
ketida-dev-kit-server-1 | detail: 'Key (provider, email)=(lulu, duncanb.dev@gmail.com) already exists.',
ketida-dev-kit-server-1 | hint: undefined,
ketida-dev-kit-server-1 | position: undefined,
ketida-dev-kit-server-1 | internalPosition: undefined,
ketida-dev-kit-server-1 | internalQuery: undefined,
ketida-dev-kit-server-1 | where: undefined,
ketida-dev-kit-server-1 | schema: 'public',
ketida-dev-kit-server-1 | table: 'identities',
ketida-dev-kit-server-1 | column: undefined,
ketida-dev-kit-server-1 | dataType: undefined,
ketida-dev-kit-server-1 | constraint: 'unique_provider_email',
ketida-dev-kit-server-1 | file: 'nbtinsert.c',
ketida-dev-kit-server-1 | line: '663',
ketida-dev-kit-server-1 | routine: '_bt_check_unique',
ketida-dev-kit-server-1 | originalStack: 'error: insert into "identities" ("created", "email", "id", "oauth_access_token", "oauth_access_token_expiration", "oauth_refresh_token", "oauth_refresh_token_expiration", "profile_data", "provider", "type", "updated", "user_id") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning "id" - duplicate key value violates unique constraint "unique_provider_email"\n' +
ketida-dev-kit-server-1 | ' at Parser.parseErrorMessage (/home/node/server/node_modules/pg-protocol/dist/parser.js:287:98)\n' +
ketida-dev-kit-server-1 | ' at Parser.handlePacket (/home/node/server/node_modules/pg-protocol/dist/parser.js:126:29)\n' +
ketida-dev-kit-server-1 | ' at Parser.parse (/home/node/server/node_modules/pg-protocol/dist/parser.js:39:38)\n' +
ketida-dev-kit-server-1 | ' at Socket.<anonymous> (/home/node/server/node_modules/pg-protocol/dist/index.js:11:42)\n' +
ketida-dev-kit-server-1 | ' at Socket.emit (node:events:517:28)\n' +
ketida-dev-kit-server-1 | ' at Socket.emit (node:domain:489:12)\n' +
ketida-dev-kit-server-1 | ' at addChunk (node:internal/streams/readable:335:12)\n' +
ketida-dev-kit-server-1 | ' at readableAddChunk (node:internal/streams/readable:308:9)\n' +
ketida-dev-kit-server-1 | ' at Readable.push (node:internal/streams/readable:245:10)\n' +
ketida-dev-kit-server-1 | ' at TCP.onStreamRead (node:internal/stream_base_commons:190:23)'
ketida-dev-kit-server-1 | },
ketida-dev-kit-server-1 | client: 'postgres',
ketida-dev-kit-server-1 | table: 'identities',
ketida-dev-kit-server-1 | columns: [ 'provider', 'email' ],
ketida-dev-kit-server-1 | constraint: 'unique_provider_email',
ketida-dev-kit-server-1 | schema: undefined
ketida-dev-kit-server-1 | }
ketida-dev-kit-server-1 |
ketida-dev-kit-server-1 | Node.js v18.18.2
ketida-dev-kit-server-1 |
ketida-dev-kit-db-1 | 2023-12-12 12:21:20.487 UTC [5850] LOG: could not receive data from client: Connection reset by peer
ketida-dev-kit-server-1 | [nodemon] app crashed - waiting for file changes before starting...