Add proxy routing and sing-box support

This commit is contained in:
Fabian Freund
2026-05-22 18:16:31 +02:00
parent 51289f1266
commit a5974617aa
262 changed files with 32003 additions and 3962 deletions
@@ -563,11 +563,536 @@ i1.GeneratedColumn<int> _column_19(String aliasedName) =>
type: i1.DriftSqlType.int,
$customConstraints: '',
);
final class Schema6 extends i0.VersionedSchema {
Schema6({required super.database}) : super(version: 6);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
setting,
proxyProfile,
idxProxyProfileUpdatedAt,
proxyRoutingSetting,
iconCache,
onboarding,
riverpod,
toolbarButtonConfigs,
idxToolbarOrderKey,
searchTokens,
idxSearchTokensInsertedAt,
idxSearchTokensReservedAt,
];
late final Shape0 setting = Shape0(
source: i0.VersionedTable(
entityName: 'setting',
withoutRowId: false,
isStrict: true,
tableConstraints: [],
columns: [_column_0, _column_1, _column_2],
attachedDatabase: database,
),
alias: null,
);
late final Shape7 proxyProfile = Shape7(
source: i0.VersionedTable(
entityName: 'proxy_profile',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_20,
_column_21,
_column_22,
_column_23,
_column_24,
_column_25,
],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxProxyProfileUpdatedAt = i1.Index(
'idx_proxy_profile_updated_at',
'CREATE INDEX idx_proxy_profile_updated_at ON proxy_profile (updated_at)',
);
late final Shape8 proxyRoutingSetting = Shape8(
source: i0.VersionedTable(
entityName: 'proxy_routing_setting',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_26, _column_27, _column_28, _column_29],
attachedDatabase: database,
),
alias: null,
);
late final Shape1 iconCache = Shape1(
source: i0.VersionedTable(
entityName: 'icon_cache',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_3, _column_4, _column_5],
attachedDatabase: database,
),
alias: null,
);
late final Shape2 onboarding = Shape2(
source: i0.VersionedTable(
entityName: 'onboarding',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_6, _column_7],
attachedDatabase: database,
),
alias: null,
);
late final Shape3 riverpod = Shape3(
source: i0.VersionedTable(
entityName: 'riverpod',
withoutRowId: true,
isStrict: false,
tableConstraints: [],
columns: [_column_0, _column_8, _column_9, _column_10],
attachedDatabase: database,
),
alias: null,
);
late final Shape4 toolbarButtonConfigs = Shape4(
source: i0.VersionedTable(
entityName: 'toolbar_button_configs',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_11, _column_12, _column_13, _column_14],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxToolbarOrderKey = i1.Index(
'idx_toolbar_order_key',
'CREATE INDEX idx_toolbar_order_key ON toolbar_button_configs (order_key)',
);
late final Shape6 searchTokens = Shape6(
source: i0.VersionedTable(
entityName: 'search_tokens',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_15, _column_16, _column_17, _column_18, _column_19],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxSearchTokensInsertedAt = i1.Index(
'idx_search_tokens_inserted_at',
'CREATE INDEX idx_search_tokens_inserted_at ON search_tokens (inserted_at)',
);
final i1.Index idxSearchTokensReservedAt = i1.Index(
'idx_search_tokens_reserved_at',
'CREATE INDEX idx_search_tokens_reserved_at ON search_tokens (reserved_at)',
);
}
class Shape7 extends i0.VersionedTable {
Shape7({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<String> get id =>
columnsByName['id']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get name =>
columnsByName['name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get type =>
columnsByName['type']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get configJson =>
columnsByName['config_json']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get createdAt =>
columnsByName['created_at']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get updatedAt =>
columnsByName['updated_at']! as i1.GeneratedColumn<int>;
}
i1.GeneratedColumn<String> _column_20(String aliasedName) =>
i1.GeneratedColumn<String>(
'id',
aliasedName,
false,
type: i1.DriftSqlType.string,
$customConstraints: 'NOT NULL PRIMARY KEY',
);
i1.GeneratedColumn<String> _column_21(String aliasedName) =>
i1.GeneratedColumn<String>(
'name',
aliasedName,
false,
type: i1.DriftSqlType.string,
$customConstraints: 'NOT NULL',
);
i1.GeneratedColumn<String> _column_22(String aliasedName) =>
i1.GeneratedColumn<String>(
'type',
aliasedName,
false,
type: i1.DriftSqlType.string,
$customConstraints: 'NOT NULL',
);
i1.GeneratedColumn<String> _column_23(String aliasedName) =>
i1.GeneratedColumn<String>(
'config_json',
aliasedName,
false,
type: i1.DriftSqlType.string,
$customConstraints: 'NOT NULL',
);
i1.GeneratedColumn<int> _column_24(String aliasedName) =>
i1.GeneratedColumn<int>(
'created_at',
aliasedName,
false,
type: i1.DriftSqlType.int,
$customConstraints: 'NOT NULL DEFAULT CURRENT_TIMESTAMP',
defaultValue: const i1.CustomExpression('CURRENT_TIMESTAMP'),
);
i1.GeneratedColumn<int> _column_25(String aliasedName) =>
i1.GeneratedColumn<int>(
'updated_at',
aliasedName,
false,
type: i1.DriftSqlType.int,
$customConstraints: 'NOT NULL DEFAULT CURRENT_TIMESTAMP',
defaultValue: const i1.CustomExpression('CURRENT_TIMESTAMP'),
);
class Shape8 extends i0.VersionedTable {
Shape8({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<int> get id =>
columnsByName['id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get regularTabsMode =>
columnsByName['regular_tabs_mode']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get regularTabsProxyConnectionId =>
columnsByName['regular_tabs_proxy_connection_id']!
as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get privateTabsProxyConnectionId =>
columnsByName['private_tabs_proxy_connection_id']!
as i1.GeneratedColumn<String>;
}
i1.GeneratedColumn<int> _column_26(String aliasedName) =>
i1.GeneratedColumn<int>(
'id',
aliasedName,
false,
type: i1.DriftSqlType.int,
$customConstraints: 'NOT NULL PRIMARY KEY CHECK (id = 1)',
);
i1.GeneratedColumn<String> _column_27(String aliasedName) =>
i1.GeneratedColumn<String>(
'regular_tabs_mode',
aliasedName,
false,
type: i1.DriftSqlType.string,
$customConstraints: 'NOT NULL',
);
i1.GeneratedColumn<String> _column_28(String aliasedName) =>
i1.GeneratedColumn<String>(
'regular_tabs_proxy_connection_id',
aliasedName,
true,
type: i1.DriftSqlType.string,
$customConstraints: '',
);
i1.GeneratedColumn<String> _column_29(String aliasedName) =>
i1.GeneratedColumn<String>(
'private_tabs_proxy_connection_id',
aliasedName,
true,
type: i1.DriftSqlType.string,
$customConstraints: '',
);
final class Schema7 extends i0.VersionedSchema {
Schema7({required super.database}) : super(version: 7);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
setting,
proxyProfile,
idxProxyProfileUpdatedAt,
proxyRoutingSetting,
iconCache,
onboarding,
riverpod,
toolbarButtonConfigs,
idxToolbarOrderKey,
searchTokens,
idxSearchTokensInsertedAt,
idxSearchTokensReservedAt,
];
late final Shape0 setting = Shape0(
source: i0.VersionedTable(
entityName: 'setting',
withoutRowId: false,
isStrict: true,
tableConstraints: [],
columns: [_column_0, _column_1, _column_2],
attachedDatabase: database,
),
alias: null,
);
late final Shape9 proxyProfile = Shape9(
source: i0.VersionedTable(
entityName: 'proxy_profile',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_20,
_column_21,
_column_22,
_column_23,
_column_30,
_column_24,
_column_25,
],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxProxyProfileUpdatedAt = i1.Index(
'idx_proxy_profile_updated_at',
'CREATE INDEX idx_proxy_profile_updated_at ON proxy_profile (updated_at)',
);
late final Shape8 proxyRoutingSetting = Shape8(
source: i0.VersionedTable(
entityName: 'proxy_routing_setting',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_26, _column_27, _column_28, _column_29],
attachedDatabase: database,
),
alias: null,
);
late final Shape1 iconCache = Shape1(
source: i0.VersionedTable(
entityName: 'icon_cache',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_3, _column_4, _column_5],
attachedDatabase: database,
),
alias: null,
);
late final Shape2 onboarding = Shape2(
source: i0.VersionedTable(
entityName: 'onboarding',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_6, _column_7],
attachedDatabase: database,
),
alias: null,
);
late final Shape3 riverpod = Shape3(
source: i0.VersionedTable(
entityName: 'riverpod',
withoutRowId: true,
isStrict: false,
tableConstraints: [],
columns: [_column_0, _column_8, _column_9, _column_10],
attachedDatabase: database,
),
alias: null,
);
late final Shape4 toolbarButtonConfigs = Shape4(
source: i0.VersionedTable(
entityName: 'toolbar_button_configs',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_11, _column_12, _column_13, _column_14],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxToolbarOrderKey = i1.Index(
'idx_toolbar_order_key',
'CREATE INDEX idx_toolbar_order_key ON toolbar_button_configs (order_key)',
);
late final Shape6 searchTokens = Shape6(
source: i0.VersionedTable(
entityName: 'search_tokens',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_15, _column_16, _column_17, _column_18, _column_19],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxSearchTokensInsertedAt = i1.Index(
'idx_search_tokens_inserted_at',
'CREATE INDEX idx_search_tokens_inserted_at ON search_tokens (inserted_at)',
);
final i1.Index idxSearchTokensReservedAt = i1.Index(
'idx_search_tokens_reserved_at',
'CREATE INDEX idx_search_tokens_reserved_at ON search_tokens (reserved_at)',
);
}
class Shape9 extends i0.VersionedTable {
Shape9({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<String> get id =>
columnsByName['id']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get name =>
columnsByName['name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get type =>
columnsByName['type']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get configJson =>
columnsByName['config_json']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get dnsOverrideJson =>
columnsByName['dns_override_json']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get createdAt =>
columnsByName['created_at']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<int> get updatedAt =>
columnsByName['updated_at']! as i1.GeneratedColumn<int>;
}
i1.GeneratedColumn<String> _column_30(String aliasedName) =>
i1.GeneratedColumn<String>(
'dns_override_json',
aliasedName,
true,
type: i1.DriftSqlType.string,
$customConstraints: '',
);
final class Schema8 extends i0.VersionedSchema {
Schema8({required super.database}) : super(version: 8);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
setting,
proxyProfile,
idxProxyProfileUpdatedAt,
iconCache,
onboarding,
riverpod,
toolbarButtonConfigs,
idxToolbarOrderKey,
searchTokens,
idxSearchTokensInsertedAt,
idxSearchTokensReservedAt,
];
late final Shape0 setting = Shape0(
source: i0.VersionedTable(
entityName: 'setting',
withoutRowId: false,
isStrict: true,
tableConstraints: [],
columns: [_column_0, _column_1, _column_2],
attachedDatabase: database,
),
alias: null,
);
late final Shape9 proxyProfile = Shape9(
source: i0.VersionedTable(
entityName: 'proxy_profile',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_20,
_column_21,
_column_22,
_column_23,
_column_30,
_column_24,
_column_25,
],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxProxyProfileUpdatedAt = i1.Index(
'idx_proxy_profile_updated_at',
'CREATE INDEX idx_proxy_profile_updated_at ON proxy_profile (updated_at)',
);
late final Shape1 iconCache = Shape1(
source: i0.VersionedTable(
entityName: 'icon_cache',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_3, _column_4, _column_5],
attachedDatabase: database,
),
alias: null,
);
late final Shape2 onboarding = Shape2(
source: i0.VersionedTable(
entityName: 'onboarding',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_6, _column_7],
attachedDatabase: database,
),
alias: null,
);
late final Shape3 riverpod = Shape3(
source: i0.VersionedTable(
entityName: 'riverpod',
withoutRowId: true,
isStrict: false,
tableConstraints: [],
columns: [_column_0, _column_8, _column_9, _column_10],
attachedDatabase: database,
),
alias: null,
);
late final Shape4 toolbarButtonConfigs = Shape4(
source: i0.VersionedTable(
entityName: 'toolbar_button_configs',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_11, _column_12, _column_13, _column_14],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxToolbarOrderKey = i1.Index(
'idx_toolbar_order_key',
'CREATE INDEX idx_toolbar_order_key ON toolbar_button_configs (order_key)',
);
late final Shape6 searchTokens = Shape6(
source: i0.VersionedTable(
entityName: 'search_tokens',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [_column_15, _column_16, _column_17, _column_18, _column_19],
attachedDatabase: database,
),
alias: null,
);
final i1.Index idxSearchTokensInsertedAt = i1.Index(
'idx_search_tokens_inserted_at',
'CREATE INDEX idx_search_tokens_inserted_at ON search_tokens (inserted_at)',
);
final i1.Index idxSearchTokensReservedAt = i1.Index(
'idx_search_tokens_reserved_at',
'CREATE INDEX idx_search_tokens_reserved_at ON search_tokens (reserved_at)',
);
}
i0.MigrationStepWithVersion migrationSteps({
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
required Future<void> Function(i1.Migrator m, Schema8 schema) from7To8,
}) {
return (currentVersion, database) async {
switch (currentVersion) {
@@ -591,6 +1116,21 @@ i0.MigrationStepWithVersion migrationSteps({
final migrator = i1.Migrator(database, schema);
await from4To5(migrator, schema);
return 5;
case 5:
final schema = Schema6(database: database);
final migrator = i1.Migrator(database, schema);
await from5To6(migrator, schema);
return 6;
case 6:
final schema = Schema7(database: database);
final migrator = i1.Migrator(database, schema);
await from6To7(migrator, schema);
return 7;
case 7:
final schema = Schema8(database: database);
final migrator = i1.Migrator(database, schema);
await from7To8(migrator, schema);
return 8;
default:
throw ArgumentError.value('Unknown migration from $currentVersion');
}
@@ -602,11 +1142,17 @@ i1.OnUpgrade stepByStep({
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
required Future<void> Function(i1.Migrator m, Schema8 schema) from7To8,
}) => i0.VersionedSchema.stepByStepHelper(
step: migrationSteps(
from1To2: from1To2,
from2To3: from2To3,
from3To4: from3To4,
from4To5: from4To5,
from5To6: from5To6,
from6To7: from6To7,
from7To8: from7To8,
),
);