@_nazmiforreal/flutter-ota 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +13 -13
  2. package/bin/{flutter-patcher-linux-x64 → flutter-ota-linux-x64} +0 -0
  3. package/bin/{flutter-patcher.js → flutter-ota.js} +4 -4
  4. package/dart-src/packages/cli-tools/bin/{flutter_patcher.dart → flutter_ota_kit.dart} +2 -2
  5. package/dart-src/packages/cli-tools/lib/{flutter_patcher_cli.dart → flutter_ota_kit_cli.dart} +5 -3
  6. package/dart-src/packages/cli-tools/lib/src/backend.dart +6 -25
  7. package/dart-src/packages/cli-tools/lib/src/cli_base.dart +10 -4
  8. package/dart-src/packages/cli-tools/lib/src/commands/build.dart +5 -3
  9. package/dart-src/packages/cli-tools/lib/src/commands/bundle.dart +279 -10
  10. package/dart-src/packages/cli-tools/lib/src/commands/channel.dart +7 -7
  11. package/dart-src/packages/cli-tools/lib/src/commands/config_command.dart +5 -5
  12. package/dart-src/packages/cli-tools/lib/src/commands/console.dart +4 -4
  13. package/dart-src/packages/cli-tools/lib/src/commands/deploy.dart +4 -4
  14. package/dart-src/packages/cli-tools/lib/src/commands/doctor.dart +3 -3
  15. package/dart-src/packages/cli-tools/lib/src/commands/fingerprint.dart +1 -1
  16. package/dart-src/packages/cli-tools/lib/src/commands/init.dart +294 -45
  17. package/dart-src/packages/cli-tools/lib/src/commands/keys.dart +1 -1
  18. package/dart-src/packages/cli-tools/lib/src/commands/migrate.dart +59 -24
  19. package/dart-src/packages/cli-tools/lib/src/commands/rollback.dart +5 -5
  20. package/dart-src/packages/cli-tools/lib/src/commands/storage.dart +117 -0
  21. package/dart-src/packages/cli-tools/lib/src/config.dart +29 -78
  22. package/dart-src/packages/cli-tools/lib/src/operations.dart +4 -4
  23. package/dart-src/packages/cli-tools/lib/src/pack.dart +12 -6
  24. package/dart-src/packages/cli-tools/lib/src/runner.dart +21 -3
  25. package/dart-src/packages/cli-tools/lib/src/ui/ui.dart +2 -2
  26. package/dart-src/packages/cli-tools/lib/src/verbose.dart +3 -0
  27. package/dart-src/packages/cli-tools/migrations/aws/README.md +7 -0
  28. package/dart-src/packages/cli-tools/migrations/postgres/bundles.sql +45 -0
  29. package/dart-src/packages/cli-tools/migrations/postgres/get_target_app_version_list.sql +21 -0
  30. package/dart-src/packages/cli-tools/migrations/postgres/get_update_info_by_app_version.sql +126 -0
  31. package/dart-src/packages/cli-tools/migrations/postgres/get_update_info_by_fingerprint_hash.sql +125 -0
  32. package/dart-src/packages/cli-tools/migrations/postgres/hash_user_id.sql +30 -0
  33. package/dart-src/packages/cli-tools/migrations/postgres/is_device_eligible.sql +237 -0
  34. package/dart-src/packages/cli-tools/migrations/supabase/20260520014100_hot-updater_rls.sql +11 -0
  35. package/dart-src/packages/cli-tools/pubspec.yaml +8 -10
  36. package/dart-src/packages/cli-tools/test/backends_test.dart +4 -4
  37. package/dart-src/packages/cli-tools/test/build_pack_test.dart +1 -1
  38. package/dart-src/packages/cli-tools/test/cli_test.dart +3 -3
  39. package/dart-src/packages/cli-tools/test/mocks/mock_aws_s3_client.dart +2 -2
  40. package/dart-src/packages/cli-tools/test/mocks/mock_d1_client.dart +2 -2
  41. package/dart-src/packages/cli-tools/test/mocks/mock_postgres_client.dart +7 -7
  42. package/dart-src/packages/core/lib/{flutter_patcher_core.dart → flutter_ota_kit_core.dart} +1 -1
  43. package/dart-src/packages/core/pubspec.yaml +2 -2
  44. package/dart-src/packages/core/test/rollout_test.dart +1 -1
  45. package/dart-src/packages/core/test/semver_test.dart +1 -1
  46. package/dart-src/packages/core/test/types_test.dart +2 -2
  47. package/dart-src/packages/core/test/uuid_test.dart +1 -1
  48. package/dart-src/packages/core/tool/dbg.dart +1 -1
  49. package/dart-src/plugins/aws/lib/{flutter_patcher_aws.dart → flutter_ota_kit_aws.dart} +0 -2
  50. package/dart-src/plugins/aws/lib/src/aws_cloudfront_client.dart +1 -1
  51. package/dart-src/plugins/aws/lib/src/aws_database.dart +1 -1
  52. package/dart-src/plugins/aws/lib/src/aws_s3_client.dart +1 -1
  53. package/dart-src/plugins/aws/lib/src/aws_storage.dart +1 -1
  54. package/dart-src/plugins/aws/lib/src/aws_storage_profile.dart +25 -3
  55. package/dart-src/plugins/aws/lib/src/with_cloudfront_signed_url.dart +1 -1
  56. package/dart-src/plugins/aws/pubspec.yaml +4 -4
  57. package/dart-src/plugins/aws/test/aws_database_test.dart +3 -3
  58. package/dart-src/plugins/aws/test/aws_storage_test.dart +2 -2
  59. package/dart-src/plugins/aws/test/mock_aws_s3_client.dart +2 -2
  60. package/dart-src/plugins/cloudflare/lib/src/cloudflare_worker_database.dart +1 -1
  61. package/dart-src/plugins/cloudflare/lib/src/d1_build_where.dart +1 -1
  62. package/dart-src/plugins/cloudflare/lib/src/d1_bundle_mapper.dart +1 -1
  63. package/dart-src/plugins/cloudflare/lib/src/d1_database.dart +1 -1
  64. package/dart-src/plugins/cloudflare/lib/src/d1_database_plugin.dart +2 -2
  65. package/dart-src/plugins/cloudflare/lib/src/r2_s3_client.dart +1 -1
  66. package/dart-src/plugins/cloudflare/lib/src/r2_storage.dart +1 -1
  67. package/dart-src/plugins/cloudflare/lib/src/r2_storage_profile.dart +1 -1
  68. package/dart-src/plugins/cloudflare/pubspec.yaml +4 -4
  69. package/dart-src/plugins/cloudflare/test/cloudflare_worker_database_test.dart +2 -2
  70. package/dart-src/plugins/cloudflare/test/d1_bundle_mapper_test.dart +2 -2
  71. package/dart-src/plugins/cloudflare/test/d1_database_test.dart +2 -2
  72. package/dart-src/plugins/cloudflare/test/mock_d1_client.dart +2 -2
  73. package/dart-src/plugins/cloudflare/test/mock_r2_client.dart +2 -2
  74. package/dart-src/plugins/cloudflare/test/r2_storage_test.dart +2 -2
  75. package/dart-src/plugins/plugin-core/lib/{flutter_patcher_plugin_core.dart → flutter_ota_kit_plugin_core.dart} +1 -1
  76. package/dart-src/plugins/plugin-core/lib/src/create_blob_database_plugin.dart +1 -1
  77. package/dart-src/plugins/plugin-core/lib/src/filter_compatible_app_versions.dart +1 -1
  78. package/dart-src/plugins/plugin-core/lib/src/get_update_info.dart +1 -1
  79. package/dart-src/plugins/plugin-core/lib/src/request_update_bundle_state.dart +1 -1
  80. package/dart-src/plugins/plugin-core/lib/src/resolve_update_info_from_bundles.dart +1 -1
  81. package/dart-src/plugins/plugin-core/lib/src/types.dart +2 -2
  82. package/dart-src/plugins/plugin-core/pubspec.yaml +3 -3
  83. package/dart-src/plugins/plugin-core/test/asset_storage_layout_test.dart +3 -3
  84. package/dart-src/plugins/plugin-core/test/bundle_unit_of_work_store_test.dart +2 -2
  85. package/dart-src/plugins/plugin-core/test/bundle_unit_of_work_test.dart +2 -2
  86. package/dart-src/plugins/plugin-core/test/create_blob_database_plugin_test.dart +2 -2
  87. package/dart-src/plugins/plugin-core/test/create_database_plugin_test.dart +5 -5
  88. package/dart-src/plugins/plugin-core/test/create_storage_plugin_test.dart +2 -2
  89. package/dart-src/plugins/plugin-core/test/generate_min_bundle_id_test.dart +2 -2
  90. package/dart-src/plugins/plugin-core/test/get_update_info_test.dart +2 -2
  91. package/dart-src/plugins/plugin-core/test/helpers_test.dart +2 -2
  92. package/dart-src/plugins/plugin-core/test/query_bundles_test.dart +2 -2
  93. package/dart-src/plugins/plugin-core/test/request_update_bundle_state_test.dart +3 -3
  94. package/dart-src/plugins/plugin-core/test/uuidv7_test.dart +1 -1
  95. package/dart-src/plugins/postgres/lib/{flutter_patcher_postgres.dart → flutter_ota_kit_postgres.dart} +1 -1
  96. package/dart-src/plugins/postgres/lib/src/postgres_bundle_mapper.dart +1 -1
  97. package/dart-src/plugins/postgres/lib/src/postgres_database.dart +2 -2
  98. package/dart-src/plugins/postgres/lib/src/postgres_get_update_info.dart +2 -2
  99. package/dart-src/plugins/postgres/lib/src/postgres_storage.dart +9 -9
  100. package/dart-src/plugins/postgres/lib/src/postgres_types.dart +1 -1
  101. package/dart-src/plugins/postgres/pubspec.yaml +4 -4
  102. package/dart-src/plugins/postgres/test/mock_postgres_client.dart +2 -2
  103. package/dart-src/plugins/postgres/test/postgres_bundle_mapper_test.dart +2 -2
  104. package/dart-src/plugins/postgres/test/postgres_database_test.dart +2 -2
  105. package/dart-src/plugins/supabase/lib/edge.dart +1 -1
  106. package/dart-src/plugins/supabase/lib/{flutter_patcher_supabase.dart → flutter_ota_kit_supabase.dart} +1 -1
  107. package/dart-src/plugins/supabase/lib/src/supabase_bundle_mapper.dart +1 -1
  108. package/dart-src/plugins/supabase/lib/src/supabase_client_http.dart +5 -1
  109. package/dart-src/plugins/supabase/lib/src/supabase_database.dart +2 -2
  110. package/dart-src/plugins/supabase/lib/src/supabase_edge_function_database.dart +1 -1
  111. package/dart-src/plugins/supabase/lib/src/supabase_edge_function_storage.dart +1 -1
  112. package/dart-src/plugins/supabase/lib/src/supabase_storage.dart +2 -5
  113. package/dart-src/plugins/supabase/pubspec.yaml +4 -4
  114. package/dart-src/plugins/supabase/test/mock_supabase_client.dart +5 -5
  115. package/dart-src/plugins/supabase/test/supabase_bundle_mapper_test.dart +3 -3
  116. package/dart-src/plugins/supabase/test/supabase_database_test.dart +3 -3
  117. package/dart-src/plugins/supabase/test/supabase_storage_test.dart +2 -2
  118. package/migrations/aws/README.md +7 -0
  119. package/migrations/cloudflare/0001_hot-updater_init.sql +16 -0
  120. package/migrations/cloudflare/0002_hot-updater_0.13.0.sql +8 -0
  121. package/migrations/cloudflare/0003_hot-updater_0.18.0.sql +38 -0
  122. package/migrations/cloudflare/0004_hot-updater_0.29.0.sql +11 -0
  123. package/migrations/cloudflare/0005_hot-updater_0.31.0.sql +24 -0
  124. package/migrations/cloudflare/bundles.sql +42 -0
  125. package/migrations/postgres/bundles.sql +45 -0
  126. package/migrations/postgres/get_target_app_version_list.sql +21 -0
  127. package/migrations/postgres/get_update_info_by_app_version.sql +126 -0
  128. package/migrations/postgres/get_update_info_by_fingerprint_hash.sql +125 -0
  129. package/migrations/postgres/hash_user_id.sql +30 -0
  130. package/migrations/postgres/is_device_eligible.sql +237 -0
  131. package/package.json +4 -4
  132. package/scripts/postinstall.js +15 -15
  133. package/scripts/vendor.sh +1 -1
  134. package/dart-src/packages/cli-tools/.dart_tool/package_config.json +0 -496
  135. package/dart-src/packages/cli-tools/.dart_tool/package_graph.json +0 -743
  136. package/dart-src/packages/cli-tools/pubspec.lock +0 -638
  137. package/dart-src/packages/cli-tools/test/standalone_backend_test.dart +0 -315
  138. package/dart-src/plugins/aws/lib/src/aws_lambda_edge_storage.dart +0 -72
  139. package/dart-src/plugins/aws/test/aws_lambda_edge_storage_test.dart +0 -190
  140. package/dart-src/plugins/standalone/.gitkeep +0 -0
  141. package/dart-src/plugins/standalone/lib/flutter_patcher_standalone.dart +0 -12
  142. package/dart-src/plugins/standalone/lib/src/standalone_config.dart +0 -107
  143. package/dart-src/plugins/standalone/lib/src/standalone_database.dart +0 -233
  144. package/dart-src/plugins/standalone/lib/src/standalone_storage.dart +0 -175
  145. package/dart-src/plugins/standalone/pubspec.yaml +0 -18
  146. package/dart-src/plugins/standalone/test/standalone_test.dart +0 -264
  147. /package/dart-src/plugins/cloudflare/lib/{flutter_patcher_cloudflare.dart → flutter_ota_kit_cloudflare.dart} +0 -0
@@ -1,12 +1,12 @@
1
- name: flutter_patcher_plugin_core
2
- description: Plugin core abstractions for flutter_patcher — database, storage, and build interfaces.
1
+ name: flutter_ota_kit_plugin_core
2
+ description: Plugin core abstractions for flutter_ota_kit — database, storage, and build interfaces.
3
3
  version: 0.0.1
4
4
 
5
5
  environment:
6
6
  sdk: ">=3.3.0 <4.0.0"
7
7
 
8
8
  dependencies:
9
- flutter_patcher_core:
9
+ flutter_ota_kit_core:
10
10
  path: ../../packages/core
11
11
  mime: ^1.0.0
12
12
 
@@ -1,6 +1,6 @@
1
- import 'package:flutter_patcher_plugin_core/src/asset_storage_layout.dart';
2
- import 'package:flutter_patcher_plugin_core/src/bundle_storage_layout.dart';
3
- import 'package:flutter_patcher_plugin_core/src/legacy_asset_storage_layout.dart';
1
+ import 'package:flutter_ota_kit_plugin_core/src/asset_storage_layout.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/src/bundle_storage_layout.dart';
3
+ import 'package:flutter_ota_kit_plugin_core/src/legacy_asset_storage_layout.dart';
4
4
  import 'package:test/test.dart';
5
5
 
6
6
  void main() {
@@ -1,5 +1,5 @@
1
- import 'package:flutter_patcher_plugin_core/src/bundle_unit_of_work.dart';
2
- import 'package:flutter_patcher_plugin_core/src/bundle_unit_of_work_store.dart';
1
+ import 'package:flutter_ota_kit_plugin_core/src/bundle_unit_of_work.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/src/bundle_unit_of_work_store.dart';
3
3
  import 'package:test/test.dart';
4
4
 
5
5
  void main() {
@@ -1,5 +1,5 @@
1
- import 'package:flutter_patcher_plugin_core/src/bundle_unit_of_work.dart';
2
- import 'package:flutter_patcher_plugin_core/src/types.dart';
1
+ import 'package:flutter_ota_kit_plugin_core/src/bundle_unit_of_work.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/src/types.dart';
3
3
  import 'package:test/test.dart';
4
4
 
5
5
  Bundle _bundle(String id, {
@@ -1,7 +1,7 @@
1
1
  import 'dart:convert';
2
2
 
3
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
4
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
3
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
4
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
5
5
  import 'package:test/test.dart';
6
6
 
7
7
  // ---------------------------------------------------------------------------
@@ -1,8 +1,8 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
2
- import 'package:flutter_patcher_plugin_core/src/bundle_unit_of_work.dart';
3
- import 'package:flutter_patcher_plugin_core/src/bundle_unit_of_work_store.dart';
4
- import 'package:flutter_patcher_plugin_core/src/create_database_plugin.dart';
5
- import 'package:flutter_patcher_plugin_core/src/types.dart';
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/src/bundle_unit_of_work.dart';
3
+ import 'package:flutter_ota_kit_plugin_core/src/bundle_unit_of_work_store.dart';
4
+ import 'package:flutter_ota_kit_plugin_core/src/create_database_plugin.dart';
5
+ import 'package:flutter_ota_kit_plugin_core/src/types.dart';
6
6
  import 'package:test/test.dart';
7
7
 
8
8
  class _MockDatabasePlugin extends AbstractDatabasePlugin {
@@ -1,5 +1,5 @@
1
- import 'package:flutter_patcher_plugin_core/src/create_storage_plugin.dart';
2
- import 'package:flutter_patcher_plugin_core/src/types.dart';
1
+ import 'package:flutter_ota_kit_plugin_core/src/create_storage_plugin.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/src/types.dart';
3
3
  import 'package:test/test.dart';
4
4
 
5
5
  class _MockNodeProfile implements NodeStorageProfile {
@@ -1,5 +1,5 @@
1
- import 'package:flutter_patcher_plugin_core/src/generate_min_bundle_id.dart';
2
- import 'package:flutter_patcher_plugin_core/src/uuidv7.dart';
1
+ import 'package:flutter_ota_kit_plugin_core/src/generate_min_bundle_id.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/src/uuidv7.dart';
3
3
  import 'package:test/test.dart';
4
4
 
5
5
  void main() {
@@ -1,5 +1,5 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
2
- import 'package:flutter_patcher_plugin_core/src/get_update_info.dart';
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/src/get_update_info.dart';
3
3
  import 'package:test/test.dart';
4
4
 
5
5
  const _defaultBundleMessage = 'hello';
@@ -1,6 +1,6 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart'
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart'
2
2
  show Bundle, BundleMetadata, Platform;
3
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
3
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
4
4
  import 'package:test/test.dart';
5
5
 
6
6
  void main() {
@@ -1,6 +1,6 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart'
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart'
2
2
  show Bundle, BundleMetadata, Platform;
3
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
3
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
4
4
  import 'package:test/test.dart';
5
5
 
6
6
  void main() {
@@ -1,6 +1,6 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
2
- import 'package:flutter_patcher_plugin_core/src/bundle_unit_of_work_store.dart';
3
- import 'package:flutter_patcher_plugin_core/src/request_update_bundle_state.dart';
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/src/bundle_unit_of_work_store.dart';
3
+ import 'package:flutter_ota_kit_plugin_core/src/request_update_bundle_state.dart';
4
4
  import 'package:test/test.dart';
5
5
 
6
6
  Bundle _bundle(String id) => Bundle(
@@ -1,4 +1,4 @@
1
- import 'package:flutter_patcher_plugin_core/src/uuidv7.dart';
1
+ import 'package:flutter_ota_kit_plugin_core/src/uuidv7.dart';
2
2
  import 'package:test/test.dart';
3
3
 
4
4
  void main() {
@@ -1,4 +1,4 @@
1
- /// flutter_patcher_postgres — Postgres backend plugin for flutter_patcher.
1
+ /// flutter_ota_kit_postgres — Postgres backend plugin for flutter_ota_kit.
2
2
  ///
3
3
  /// Faithful port of hot-updater `plugins/postgres`.
4
4
  library;
@@ -4,7 +4,7 @@ library;
4
4
 
5
5
  import 'dart:convert';
6
6
 
7
- import 'package:flutter_patcher_core/flutter_patcher_core.dart'
7
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart'
8
8
  show
9
9
  Bundle,
10
10
  BundleMetadata,
@@ -1,9 +1,9 @@
1
1
  /// Faithful port of hot-updater `plugins/postgres/src/postgres.ts`.
2
2
  library;
3
3
 
4
- import 'package:flutter_patcher_core/flutter_patcher_core.dart'
4
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart'
5
5
  show Bundle, UpdateInfo;
6
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart'
6
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart'
7
7
  show
8
8
  AbstractDatabasePlugin,
9
9
  BundleChange,
@@ -6,7 +6,7 @@
6
6
  /// installed (see `supabase/migrations` parity work / Phase 5).
7
7
  library;
8
8
 
9
- import 'package:flutter_patcher_core/flutter_patcher_core.dart'
9
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart'
10
10
  show
11
11
  FingerprintGetBundlesArgs,
12
12
  GetBundlesArgs,
@@ -14,7 +14,7 @@ import 'package:flutter_patcher_core/flutter_patcher_core.dart'
14
14
  UpdateInfo,
15
15
  UpdateStatus,
16
16
  UpdateStrategy;
17
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart'
17
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart'
18
18
  show filterCompatibleAppVersions;
19
19
 
20
20
  import 'postgres_client.dart';
@@ -2,7 +2,7 @@ import 'dart:convert';
2
2
  import 'dart:io';
3
3
  import 'dart:typed_data';
4
4
 
5
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
5
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
6
6
 
7
7
  import 'postgres_client.dart';
8
8
  import 'postgres_config.dart';
@@ -10,7 +10,7 @@ import 'postgres_config.dart';
10
10
  /// Configuration for the Postgres bytea storage plugin.
11
11
  ///
12
12
  /// Reuses the same [PostgresConfig] connection as the database plugin. Blob
13
- /// bytes are stored in a `flutter_patcher_storage(key text primary key, data
13
+ /// bytes are stored in a `flutter_ota_kit_storage(key text primary key, data
14
14
  /// bytea, content_type text)` table. Because Postgres cannot serve bytes over
15
15
  /// HTTP itself, [servingBaseUrl] may point at a thin proxy that reads from this
16
16
  /// table so device update-checks can download over HTTP (the CLI/console supply
@@ -89,7 +89,7 @@ class _PostgresNodeProfile implements NodeStorageProfile {
89
89
  final fullKey = _withBase(key);
90
90
  final bytes = await File(filePath).readAsBytes();
91
91
  await _client.execute(
92
- 'INSERT INTO flutter_patcher_storage (key, data, content_type) '
92
+ 'INSERT INTO flutter_ota_kit_storage (key, data, content_type) '
93
93
  'VALUES (@key, @data, @ct) '
94
94
  'ON CONFLICT (key) DO UPDATE SET data = EXCLUDED.data, content_type = EXCLUDED.content_type',
95
95
  {
@@ -105,7 +105,7 @@ class _PostgresNodeProfile implements NodeStorageProfile {
105
105
  Future<bool> exists(String storageUri) async {
106
106
  final key = _strip(storageUri, _servingBaseUrl);
107
107
  final rows = await _client.execute(
108
- 'SELECT 1 FROM flutter_patcher_storage WHERE key = @key',
108
+ 'SELECT 1 FROM flutter_ota_kit_storage WHERE key = @key',
109
109
  {'@key': key},
110
110
  );
111
111
  return rows.isNotEmpty;
@@ -114,7 +114,7 @@ class _PostgresNodeProfile implements NodeStorageProfile {
114
114
  @override
115
115
  Future<void> delete(String storageUri) async {
116
116
  await _client.execute(
117
- 'DELETE FROM flutter_patcher_storage WHERE key = @key',
117
+ 'DELETE FROM flutter_ota_kit_storage WHERE key = @key',
118
118
  {'@key': _strip(storageUri, _servingBaseUrl)},
119
119
  );
120
120
  }
@@ -123,7 +123,7 @@ class _PostgresNodeProfile implements NodeStorageProfile {
123
123
  Future<void> downloadFile(String storageUri, String filePath) async {
124
124
  final key = _strip(storageUri, _servingBaseUrl);
125
125
  final rows = await _client.execute(
126
- 'SELECT data FROM flutter_patcher_storage WHERE key = @key',
126
+ 'SELECT data FROM flutter_ota_kit_storage WHERE key = @key',
127
127
  {'@key': key},
128
128
  );
129
129
  if (rows.isEmpty) {
@@ -136,7 +136,7 @@ class _PostgresNodeProfile implements NodeStorageProfile {
136
136
  Future<List<StorageObject>> listObjects([String? prefix]) async {
137
137
  final fullPrefix = prefix == null ? null : _withBase(prefix);
138
138
  final rows = await _client.execute(
139
- 'SELECT key, octet_length(data) AS size FROM flutter_patcher_storage '
139
+ 'SELECT key, octet_length(data) AS size FROM flutter_ota_kit_storage '
140
140
  'WHERE key LIKE @prefix',
141
141
  {'@prefix': '${fullPrefix ?? ''}%'},
142
142
  );
@@ -154,7 +154,7 @@ class _PostgresNodeProfile implements NodeStorageProfile {
154
154
  Future<void> deleteObjects(List<String> keys) async {
155
155
  for (final k in keys) {
156
156
  await _client.execute(
157
- 'DELETE FROM flutter_patcher_storage WHERE key = @key',
157
+ 'DELETE FROM flutter_ota_kit_storage WHERE key = @key',
158
158
  {'@key': _strip(k, _servingBaseUrl)},
159
159
  );
160
160
  }
@@ -182,7 +182,7 @@ class _PostgresRuntimeProfile implements RuntimeStorageProfile {
182
182
  Future<String?> readText(String storageUri) async {
183
183
  final key = _strip(storageUri, _servingBaseUrl);
184
184
  final rows = await _client.execute(
185
- 'SELECT data FROM flutter_patcher_storage WHERE key = @key',
185
+ 'SELECT data FROM flutter_ota_kit_storage WHERE key = @key',
186
186
  {'@key': key},
187
187
  );
188
188
  if (rows.isEmpty) return null;
@@ -1,4 +1,4 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart'
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart'
2
2
  show Platform;
3
3
 
4
4
  /// Database row for the `bundles` table (snake_case columns).
@@ -1,5 +1,5 @@
1
- name: flutter_patcher_postgres
2
- description: Postgres plugin for flutter_patcher — database backend.
1
+ name: flutter_ota_kit_postgres
2
+ description: Postgres plugin for flutter_ota_kit — database backend.
3
3
  version: 0.1.0
4
4
  publish_to: none
5
5
 
@@ -7,9 +7,9 @@ environment:
7
7
  sdk: ">=3.3.0 <4.0.0"
8
8
 
9
9
  dependencies:
10
- flutter_patcher_core:
10
+ flutter_ota_kit_core:
11
11
  path: ../../packages/core
12
- flutter_patcher_plugin_core:
12
+ flutter_ota_kit_plugin_core:
13
13
  path: ../../plugins/plugin-core
14
14
  postgres: ^3.4.0
15
15
 
@@ -1,6 +1,6 @@
1
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
1
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
2
2
 
3
- import 'package:flutter_patcher_postgres/flutter_patcher_postgres.dart';
3
+ import 'package:flutter_ota_kit_postgres/flutter_ota_kit_postgres.dart';
4
4
 
5
5
  /// In-memory store backing [MockPostgresClient]. Mirrors the `bundles` and
6
6
  /// `bundle_patches` tables (snake_case row maps).
@@ -1,6 +1,6 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart'
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart'
2
2
  show Bundle, BundleMetadata, BundlePatchArtifact, Platform;
3
- import 'package:flutter_patcher_postgres/flutter_patcher_postgres.dart';
3
+ import 'package:flutter_ota_kit_postgres/flutter_ota_kit_postgres.dart';
4
4
  import 'package:test/test.dart';
5
5
 
6
6
  void main() {
@@ -1,4 +1,4 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart'
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart'
2
2
  show
3
3
  AppVersionGetBundlesArgs,
4
4
  Bundle,
@@ -7,7 +7,7 @@ import 'package:flutter_patcher_core/flutter_patcher_core.dart'
7
7
  UpdateInfo,
8
8
  UpdateStatus,
9
9
  nilUuid;
10
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart'
10
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart'
11
11
  show
12
12
  DatabaseBundleQueryOptions,
13
13
  DatabaseBundleQueryWhere,
@@ -1,4 +1,4 @@
1
- /// Edge-function entrypoint for flutter_patcher_supabase.
1
+ /// Edge-function entrypoint for flutter_ota_kit_supabase.
2
2
  ///
3
3
  /// Mirrors hot-updater's `plugins/supabase/src/edge.ts`: exposes only the
4
4
  /// edge-runnable variants (runtime-only database + storage plugins).
@@ -1,4 +1,4 @@
1
- /// flutter_patcher_supabase — Supabase backend for flutter_patcher.
1
+ /// flutter_ota_kit_supabase — Supabase backend for flutter_ota_kit.
2
2
  ///
3
3
  /// Faithful Dart translation of hot-updater's `plugins/supabase`:
4
4
  /// database + storage plugins (direct + edge-function variants) over the
@@ -3,7 +3,7 @@ library;
3
3
 
4
4
  import 'dart:convert';
5
5
 
6
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
6
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
7
7
 
8
8
  import 'types.dart';
9
9
 
@@ -285,7 +285,11 @@ class _StorageBucket implements SupabaseStorageBucketLike {
285
285
  return _MockSignedUrlListResult(
286
286
  body
287
287
  .map((e) => _MockSignedUrlResult(
288
- e['signedURL'] as String?,
288
+ // Supabase returns a relative path; make it absolute against
289
+ // the project base URL, matching [createSignedUrl].
290
+ e['signedURL'] == null
291
+ ? null
292
+ : '$_baseUrl/storage/v1${e['signedURL'] as String}',
289
293
  e['error'] as String?,
290
294
  ))
291
295
  .toList(),
@@ -3,8 +3,8 @@ library;
3
3
 
4
4
  import 'dart:convert';
5
5
 
6
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
7
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
6
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
7
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
8
8
 
9
9
  import 'supabase_bundle_mapper.dart';
10
10
  import 'supabase_client_adapter.dart';
@@ -1,7 +1,7 @@
1
1
  /// Faithful port of hot-updater `plugins/supabase/src/supabaseEdgeFunctionDatabase.ts`.
2
2
  library;
3
3
 
4
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
4
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
5
5
 
6
6
  import 'supabase_database.dart';
7
7
 
@@ -1,7 +1,7 @@
1
1
  /// Faithful port of hot-updater `plugins/supabase/src/supabaseEdgeFunctionStorage.ts`.
2
2
  library;
3
3
 
4
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
4
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
5
5
 
6
6
  import 'supabase_client_adapter.dart';
7
7
  import 'supabase_client_http.dart';
@@ -3,7 +3,7 @@ library;
3
3
 
4
4
  import 'dart:io' as io;
5
5
 
6
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
6
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
7
7
 
8
8
  import 'supabase_client_adapter.dart';
9
9
  import 'supabase_client_http.dart';
@@ -151,11 +151,8 @@ class NodeStorageProfileImpl implements NodeStorageProfile {
151
151
  }
152
152
 
153
153
  await verifySigned(bucket: bucket, key: storageKey);
154
- final fullPath = upload.data is Map
155
- ? (upload.data as Map)['fullPath'] as String?
156
- : null;
157
154
  return {
158
- 'storageUri': 'supabase-storage://${fullPath ?? storageKey}',
155
+ 'storageUri': 'supabase-storage://$bucketName/$storageKey',
159
156
  };
160
157
  }
161
158
 
@@ -1,5 +1,5 @@
1
- name: flutter_patcher_supabase
2
- description: Supabase plugin for flutter_patcher — database + storage backends.
1
+ name: flutter_ota_kit_supabase
2
+ description: Supabase plugin for flutter_ota_kit — database + storage backends.
3
3
  version: 0.1.0
4
4
  publish_to: none
5
5
 
@@ -7,9 +7,9 @@ environment:
7
7
  sdk: ">=3.3.0 <4.0.0"
8
8
 
9
9
  dependencies:
10
- flutter_patcher_core:
10
+ flutter_ota_kit_core:
11
11
  path: ../../packages/core
12
- flutter_patcher_plugin_core:
12
+ flutter_ota_kit_plugin_core:
13
13
  path: ../../plugins/plugin-core
14
14
  http: ^1.2.0
15
15
  supabase: ^2.14.0
@@ -6,12 +6,12 @@
6
6
  /// plugin, plus a configurable storage bucket used by the storage plugin.
7
7
  library;
8
8
 
9
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
10
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
9
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
10
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
11
11
 
12
- import 'package:flutter_patcher_supabase/src/supabase_bundle_mapper.dart';
13
- import 'package:flutter_patcher_supabase/src/supabase_client_adapter.dart';
14
- import 'package:flutter_patcher_supabase/src/types.dart';
12
+ import 'package:flutter_ota_kit_supabase/src/supabase_bundle_mapper.dart';
13
+ import 'package:flutter_ota_kit_supabase/src/supabase_client_adapter.dart';
14
+ import 'package:flutter_ota_kit_supabase/src/types.dart';
15
15
 
16
16
  // ---------------------------------------------------------------------------
17
17
  // In-memory row store
@@ -1,6 +1,6 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
2
- import 'package:flutter_patcher_supabase/src/supabase_bundle_mapper.dart';
3
- import 'package:flutter_patcher_supabase/src/types.dart';
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
2
+ import 'package:flutter_ota_kit_supabase/src/supabase_bundle_mapper.dart';
3
+ import 'package:flutter_ota_kit_supabase/src/types.dart';
4
4
  import 'package:test/test.dart';
5
5
 
6
6
  Bundle _makeBundle({List<BundlePatchArtifact> patches = const []}) => Bundle(
@@ -1,6 +1,6 @@
1
- import 'package:flutter_patcher_core/flutter_patcher_core.dart';
2
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
3
- import 'package:flutter_patcher_supabase/flutter_patcher_supabase.dart';
1
+ import 'package:flutter_ota_kit_core/flutter_ota_kit_core.dart';
2
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
3
+ import 'package:flutter_ota_kit_supabase/flutter_ota_kit_supabase.dart';
4
4
  import 'package:test/test.dart';
5
5
 
6
6
  import 'mock_supabase_client.dart';
@@ -1,7 +1,7 @@
1
1
  import 'dart:io' as io;
2
2
 
3
- import 'package:flutter_patcher_plugin_core/flutter_patcher_plugin_core.dart';
4
- import 'package:flutter_patcher_supabase/flutter_patcher_supabase.dart';
3
+ import 'package:flutter_ota_kit_plugin_core/flutter_ota_kit_plugin_core.dart';
4
+ import 'package:flutter_ota_kit_supabase/flutter_ota_kit_supabase.dart';
5
5
  import 'package:test/test.dart';
6
6
 
7
7
  import 'mock_supabase_client.dart';
@@ -0,0 +1,7 @@
1
+ # AWS migrations
2
+
3
+ The AWS backend stores bundle metadata as JSON in S3 (blob database), not in a
4
+ relational database. There are **no SQL migrations** to apply — the bucket and
5
+ object prefix are created on first `deploy`.
6
+
7
+ If you front downloads with CloudFront, provision the distribution separately.
@@ -0,0 +1,16 @@
1
+ -- Migration number: 0001 2025-01-27T08:37:50.374Z
2
+ -- HotUpdater.bundles
3
+
4
+ CREATE TABLE bundles (
5
+ id TEXT PRIMARY KEY,
6
+ platform TEXT NOT NULL CHECK (platform IN ('ios', 'android')),
7
+ target_app_version TEXT NOT NULL,
8
+ should_force_update INTEGER NOT NULL CHECK (should_force_update IN (0, 1)),
9
+ enabled INTEGER NOT NULL CHECK (enabled IN (0, 1)),
10
+ file_url TEXT NOT NULL,
11
+ file_hash TEXT NOT NULL,
12
+ git_commit_hash TEXT,
13
+ message TEXT
14
+ );
15
+
16
+ CREATE INDEX bundles_target_app_version_idx ON bundles(target_app_version);
@@ -0,0 +1,8 @@
1
+ -- Migration number: 0002 2025-03-07T16:25:12.486Z
2
+ -- HotUpdater.bundles
3
+
4
+ ALTER TABLE bundles
5
+ ADD COLUMN channel TEXT NOT NULL DEFAULT 'production';
6
+
7
+ ALTER TABLE bundles
8
+ DROP COLUMN file_url;
@@ -0,0 +1,38 @@
1
+ -- Migration number: 0003 2025-05-18T16:25:12.486Z
2
+ -- HotUpdater.bundles
3
+
4
+ ALTER TABLE bundles ADD COLUMN fingerprint_hash TEXT;
5
+ ALTER TABLE bundles ADD COLUMN storage_uri TEXT;
6
+ ALTER TABLE bundles ADD COLUMN metadata JSONB DEFAULT '{}';
7
+
8
+ UPDATE bundles
9
+ SET storage_uri = 'r2://%%BUCKET_NAME%%/' || id || '/bundle.zip'
10
+ WHERE storage_uri IS NULL;
11
+
12
+ CREATE TABLE bundles_temp (
13
+ id TEXT PRIMARY KEY,
14
+ platform TEXT NOT NULL,
15
+ should_force_update INTEGER NOT NULL,
16
+ enabled INTEGER NOT NULL,
17
+ file_hash TEXT NOT NULL,
18
+ git_commit_hash TEXT,
19
+ message TEXT,
20
+ channel TEXT NOT NULL DEFAULT 'production',
21
+ storage_uri TEXT NOT NULL,
22
+ target_app_version TEXT,
23
+ fingerprint_hash TEXT,
24
+ metadata JSONB DEFAULT '{}',
25
+ CHECK ((target_app_version IS NOT NULL) OR (fingerprint_hash IS NOT NULL))
26
+ );
27
+
28
+ INSERT INTO bundles_temp
29
+ SELECT id, platform, should_force_update, enabled, file_hash, git_commit_hash, message, channel, storage_uri, target_app_version, fingerprint_hash, metadata
30
+ FROM bundles;
31
+
32
+ DROP TABLE bundles;
33
+
34
+ ALTER TABLE bundles_temp RENAME TO bundles;
35
+
36
+ CREATE INDEX bundles_target_app_version_idx ON bundles(target_app_version);
37
+ CREATE INDEX bundles_fingerprint_hash_idx ON bundles(fingerprint_hash);
38
+ CREATE INDEX bundles_channel_idx ON bundles(channel);
@@ -0,0 +1,11 @@
1
+ -- Migration number: 0004 2025-12-21T00:00:00.000Z
2
+
3
+ -- HotUpdater.bundles
4
+
5
+ ALTER TABLE bundles ADD COLUMN rollout_cohort_count INTEGER DEFAULT 1000
6
+ CHECK (rollout_cohort_count >= 0 AND rollout_cohort_count <= 1000);
7
+
8
+ CREATE INDEX IF NOT EXISTS bundles_rollout_idx ON bundles(rollout_cohort_count);
9
+
10
+ -- SQLite doesn't have array type, store as JSON text
11
+ ALTER TABLE bundles ADD COLUMN target_cohorts TEXT;
@@ -0,0 +1,24 @@
1
+ -- Migration number: 0005 2026-04-22T00:00:00.000Z
2
+
3
+ -- HotUpdater.bundle_artifact_columns
4
+
5
+ ALTER TABLE bundles ADD COLUMN manifest_storage_uri TEXT;
6
+ ALTER TABLE bundles ADD COLUMN manifest_file_hash TEXT;
7
+ ALTER TABLE bundles ADD COLUMN asset_base_storage_uri TEXT;
8
+
9
+ CREATE TABLE bundle_patches (
10
+ id TEXT PRIMARY KEY,
11
+ bundle_id TEXT NOT NULL,
12
+ base_bundle_id TEXT NOT NULL,
13
+ base_file_hash TEXT NOT NULL,
14
+ patch_file_hash TEXT NOT NULL,
15
+ patch_storage_uri TEXT NOT NULL,
16
+ order_index INTEGER NOT NULL DEFAULT 0,
17
+ FOREIGN KEY (bundle_id) REFERENCES bundles(id) ON DELETE CASCADE,
18
+ FOREIGN KEY (base_bundle_id) REFERENCES bundles(id) ON DELETE CASCADE
19
+ );
20
+
21
+ CREATE INDEX IF NOT EXISTS bundle_patches_bundle_id_idx
22
+ ON bundle_patches(bundle_id);
23
+ CREATE INDEX IF NOT EXISTS bundle_patches_base_bundle_id_idx
24
+ ON bundle_patches(base_bundle_id);