The full reading's M3: whoever knows the password made the account's codes
wait, and that wait refused the phrase's owner their reset too, so they were
held out of both without end. Codes now count per account and per way they
came (SecondFactorPath: after the password, after the phrase), each with
its own waits; a code accepted either way clears both.
Migration (module, Learn's and Todo's servers; Learn's device schema
rebuilds the server-only table):
DROP INDEX "second_factor_failures_person_idx";
ALTER TABLE "second_factor_failures" ADD COLUMN "path" text NOT NULL
DEFAULT 'password'::text;
CREATE UNIQUE INDEX "second_factor_failures_person_idx" ON
"second_factor_failures" USING btree ("authUserId", "path");
Existing rows are the password's, unique per account, so unique per
account and way too.
Also the hosts' generated future calls, for the pruning's doc comment the
lapsed resets' commit changed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
1119 lines
No EOL
31 KiB
JSON
1119 lines
No EOL
31 KiB
JSON
{
|
|
"__className__": "serverpod.DatabaseDefinition",
|
|
"schemaVersion": 2,
|
|
"moduleName": "halkyon_base",
|
|
"tables": [
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "account_deletion_notice",
|
|
"dartName": "AccountDeletionNotice",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "account",
|
|
"fieldName": "account",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "member",
|
|
"fieldName": "member",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "createdAt",
|
|
"fieldName": "createdAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "attempts",
|
|
"fieldName": "attempts",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"dartType": "int"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "lastAttemptAt",
|
|
"fieldName": "lastAttemptAt",
|
|
"columnType": 4,
|
|
"isNullable": true,
|
|
"dartType": "DateTime?"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "account_deletion_notice_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "account"
|
|
},
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "member"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "account_password",
|
|
"dartName": "AccountPassword",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "salt",
|
|
"fieldName": "salt",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "kdfAlgorithm",
|
|
"fieldName": "kdfAlgorithm",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "kdfOpsLimit",
|
|
"fieldName": "kdfOpsLimit",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"dartType": "int"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "kdfMemLimit",
|
|
"fieldName": "kdfMemLimit",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"dartType": "int"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "verifier",
|
|
"fieldName": "verifier",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "encryptionPublicKey",
|
|
"fieldName": "encryptionPublicKey",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "signingPublicKey",
|
|
"fieldName": "signingPublicKey",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "passwordKeysNonce",
|
|
"fieldName": "passwordKeysNonce",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "passwordKeysCipherText",
|
|
"fieldName": "passwordKeysCipherText",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "recoveryKeysNonce",
|
|
"fieldName": "recoveryKeysNonce",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "recoveryKeysCipherText",
|
|
"fieldName": "recoveryKeysCipherText",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "recoveryProofKey",
|
|
"fieldName": "recoveryProofKey",
|
|
"columnType": 5,
|
|
"isNullable": true,
|
|
"dartType": "dart:typed_data:ByteData?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "sessionEndedForProofsAt",
|
|
"fieldName": "sessionEndedForProofsAt",
|
|
"columnType": 4,
|
|
"isNullable": true,
|
|
"dartType": "DateTime?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "createdAt",
|
|
"fieldName": "createdAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "updatedAt",
|
|
"fieldName": "updatedAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "account_password_person_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "authUserId"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "account_reset",
|
|
"dartName": "AccountReset",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "kind",
|
|
"fieldName": "kind",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "protocol:AccountResetKind"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "takesEffectAt",
|
|
"fieldName": "takesEffectAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "createdAt",
|
|
"fieldName": "createdAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "account_reset_person_kind_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "authUserId"
|
|
},
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "kind"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "email_code_request",
|
|
"dartName": "EmailCodeRequest",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"columnDefault": "random_v7",
|
|
"dartType": "UuidValue?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "addressHash",
|
|
"fieldName": "addressHash",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "challengeId",
|
|
"fieldName": "challengeId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "switchChallengeId",
|
|
"fieldName": "switchChallengeId",
|
|
"columnType": 7,
|
|
"isNullable": true,
|
|
"dartType": "UuidValue?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "purpose",
|
|
"fieldName": "purpose",
|
|
"columnType": 0,
|
|
"isNullable": true,
|
|
"dartType": "protocol:EmailCodePurpose?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "createdAt",
|
|
"fieldName": "createdAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [
|
|
{
|
|
"__className__": "serverpod.ForeignKeyDefinition",
|
|
"constraintName": "email_code_request_fk_0",
|
|
"columns": [
|
|
"challengeId"
|
|
],
|
|
"referenceTable": "serverpod_auth_idp_secret_challenge",
|
|
"referenceTableSchema": "public",
|
|
"referenceColumns": [
|
|
"id"
|
|
],
|
|
"onUpdate": 3,
|
|
"onDelete": 4
|
|
},
|
|
{
|
|
"__className__": "serverpod.ForeignKeyDefinition",
|
|
"constraintName": "email_code_request_fk_1",
|
|
"columns": [
|
|
"switchChallengeId"
|
|
],
|
|
"referenceTable": "serverpod_auth_idp_secret_challenge",
|
|
"referenceTableSchema": "public",
|
|
"referenceColumns": [
|
|
"id"
|
|
],
|
|
"onUpdate": 3,
|
|
"onDelete": 4
|
|
}
|
|
],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "email_code_request_address_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "addressHash"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": false,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "email_identity",
|
|
"dartName": "EmailIdentity",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "addressHash",
|
|
"fieldName": "addressHash",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "createdAt",
|
|
"fieldName": "createdAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "email_identity_person_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "authUserId"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
},
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "email_identity_address_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "addressHash"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "public_profile",
|
|
"dartName": "PublicProfile",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "handle",
|
|
"fieldName": "handle",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "handleKey",
|
|
"fieldName": "handleKey",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "displayName",
|
|
"fieldName": "displayName",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "bio",
|
|
"fieldName": "bio",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "links",
|
|
"fieldName": "links",
|
|
"columnType": 8,
|
|
"isNullable": false,
|
|
"dartType": "List<String>"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "verifiedLinks",
|
|
"fieldName": "verifiedLinks",
|
|
"columnType": 8,
|
|
"isNullable": true,
|
|
"dartType": "List<String>?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "avatarHash",
|
|
"fieldName": "avatarHash",
|
|
"columnType": 0,
|
|
"isNullable": true,
|
|
"dartType": "String?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "firstPublishedAt",
|
|
"fieldName": "firstPublishedAt",
|
|
"columnType": 4,
|
|
"isNullable": true,
|
|
"dartType": "DateTime?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "updatedAt",
|
|
"fieldName": "updatedAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "public_profile_person_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "authUserId"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
},
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "public_profile_handle_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "handleKey"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "recovery_code",
|
|
"dartName": "RecoveryCode",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "hash",
|
|
"fieldName": "hash",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "recovery_code_person_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "authUserId"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": false,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "second_factor_failures",
|
|
"dartName": "SecondFactorFailures",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "path",
|
|
"fieldName": "path",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"columnDefault": "'password'",
|
|
"dartType": "protocol:SecondFactorPath"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "failures",
|
|
"fieldName": "failures",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"dartType": "int"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "waits",
|
|
"fieldName": "waits",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"dartType": "int"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "waitUntil",
|
|
"fieldName": "waitUntil",
|
|
"columnType": 4,
|
|
"isNullable": true,
|
|
"dartType": "DateTime?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "updatedAt",
|
|
"fieldName": "updatedAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "second_factor_failures_person_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "authUserId"
|
|
},
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "path"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "session_code_failures",
|
|
"dartName": "SessionCodeFailures",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "sessionId",
|
|
"fieldName": "sessionId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "failures",
|
|
"fieldName": "failures",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"dartType": "int"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "updatedAt",
|
|
"fieldName": "updatedAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "session_code_failures_session_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "sessionId"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "sessions_ended_notice",
|
|
"dartName": "SessionsEndedNotice",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"columnDefault": "serial",
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "account",
|
|
"fieldName": "account",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "member",
|
|
"fieldName": "member",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "endedBefore",
|
|
"fieldName": "endedBefore",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "keepSession",
|
|
"fieldName": "keepSession",
|
|
"columnType": 7,
|
|
"isNullable": true,
|
|
"dartType": "UuidValue?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "attempts",
|
|
"fieldName": "attempts",
|
|
"columnType": 6,
|
|
"isNullable": false,
|
|
"dartType": "int"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "lastAttemptAt",
|
|
"fieldName": "lastAttemptAt",
|
|
"columnType": 4,
|
|
"isNullable": true,
|
|
"dartType": "DateTime?"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "sessions_ended_notice_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "account"
|
|
},
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "member"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": true,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "sign_in_challenge",
|
|
"dartName": "SignInChallenge",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"columnDefault": "random_v7",
|
|
"dartType": "UuidValue?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": true,
|
|
"dartType": "UuidValue?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "purpose",
|
|
"fieldName": "purpose",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "protocol:SignInChallengePurpose"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "addressHash",
|
|
"fieldName": "addressHash",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "secret",
|
|
"fieldName": "secret",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "serverValue",
|
|
"fieldName": "serverValue",
|
|
"columnType": 0,
|
|
"isNullable": true,
|
|
"dartType": "String?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "createdAt",
|
|
"fieldName": "createdAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "sign_in_challenge_created_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "createdAt"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": false,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
},
|
|
{
|
|
"__className__": "serverpod.TableDefinition",
|
|
"name": "totp_authenticator",
|
|
"dartName": "TotpAuthenticator",
|
|
"module": "halkyon_base",
|
|
"schema": "public",
|
|
"columns": [
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "id",
|
|
"fieldName": "id",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"columnDefault": "random_v7",
|
|
"dartType": "UuidValue?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "authUserId",
|
|
"fieldName": "authUserId",
|
|
"columnType": 7,
|
|
"isNullable": false,
|
|
"dartType": "UuidValue"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "name",
|
|
"fieldName": "name",
|
|
"columnType": 0,
|
|
"isNullable": false,
|
|
"dartType": "String"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "secret",
|
|
"fieldName": "secret",
|
|
"columnType": 5,
|
|
"isNullable": false,
|
|
"dartType": "dart:typed_data:ByteData"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "confirmedAt",
|
|
"fieldName": "confirmedAt",
|
|
"columnType": 4,
|
|
"isNullable": true,
|
|
"dartType": "DateTime?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "lastStep",
|
|
"fieldName": "lastStep",
|
|
"columnType": 6,
|
|
"isNullable": true,
|
|
"dartType": "int?"
|
|
},
|
|
{
|
|
"__className__": "serverpod.ColumnDefinition",
|
|
"name": "createdAt",
|
|
"fieldName": "createdAt",
|
|
"columnType": 4,
|
|
"isNullable": false,
|
|
"dartType": "DateTime"
|
|
}
|
|
],
|
|
"foreignKeys": [],
|
|
"indexes": [
|
|
{
|
|
"__className__": "serverpod.IndexDefinition",
|
|
"indexName": "totp_authenticator_person_idx",
|
|
"elements": [
|
|
{
|
|
"__className__": "serverpod.IndexElementDefinition",
|
|
"type": 0,
|
|
"definition": "authUserId"
|
|
}
|
|
],
|
|
"type": "btree",
|
|
"isUnique": false,
|
|
"isPrimary": false
|
|
}
|
|
],
|
|
"managed": true
|
|
}
|
|
],
|
|
"installedModules": [
|
|
{
|
|
"__className__": "serverpod.DatabaseMigrationVersion",
|
|
"module": "serverpod",
|
|
"version": "20260824182259319"
|
|
},
|
|
{
|
|
"__className__": "serverpod.DatabaseMigrationVersion",
|
|
"module": "serverpod_auth_idp",
|
|
"version": "20260924105404509"
|
|
},
|
|
{
|
|
"__className__": "serverpod.DatabaseMigrationVersion",
|
|
"module": "serverpod_auth_core",
|
|
"version": "20260924105232991"
|
|
}
|
|
],
|
|
"migrationApiVersion": 1
|
|
} |