@_nazmiforreal/flutter-ota 0.1.26 → 0.1.28

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 (259) hide show
  1. package/README.md +112 -18
  2. package/bin/flutter-ota-linux-x64 +0 -0
  3. package/bin/flutter-ota.js +12 -11
  4. package/dart-src/packages/cli-tools/README.md +146 -2
  5. package/dart-src/packages/cli-tools/lib/flutter_ota_kit_cli.dart +46 -13
  6. package/dart-src/packages/cli-tools/lib/src/backend.dart +6 -6
  7. package/dart-src/packages/cli-tools/lib/src/commands/build.dart +2 -0
  8. package/dart-src/packages/cli-tools/lib/src/commands/bundle.dart +7 -7
  9. package/dart-src/packages/cli-tools/lib/src/commands/deploy.dart +4 -1
  10. package/dart-src/packages/cli-tools/lib/src/commands/init.dart +36 -8
  11. package/dart-src/packages/cli-tools/lib/src/commands/pocketbase.dart +1 -1
  12. package/dart-src/packages/cli-tools/lib/src/commands/rollback.dart +1 -1
  13. package/dart-src/packages/cli-tools/lib/src/config.dart +5 -5
  14. package/dart-src/packages/cli-tools/lib/src/operations.dart +2 -2
  15. package/dart-src/packages/cli-tools/pubspec.yaml +8 -21
  16. package/dart-src/packages/cli-tools/test/backends_test.dart +3 -3
  17. package/dart-src/packages/cli-tools/test/cli_test.dart +1 -1
  18. package/dart-src/packages/cli-tools/test/mocks/mock_aws_s3_client.dart +2 -2
  19. package/dart-src/packages/cli-tools/test/mocks/mock_d1_client.dart +2 -2
  20. package/dart-src/packages/cli-tools/test/mocks/mock_pocketbase_client.dart +4 -1
  21. package/dart-src/packages/cli-tools/test/mocks/mock_postgres_client.dart +2 -2
  22. package/dart-src/packages/cli-tools/test/pocketbase_smoke_test.dart +1 -1
  23. package/dart-src/root/README.md +334 -0
  24. package/dart-src/root/analysis_options.yaml +21 -0
  25. package/dart-src/root/android/build.gradle +116 -0
  26. package/dart-src/root/android/consumer-rules.pro +23 -0
  27. package/dart-src/root/android/settings.gradle +1 -0
  28. package/dart-src/root/android/src/main/AndroidManifest.xml +21 -0
  29. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/ApplyResult.kt +52 -0
  30. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/BlacklistStore.kt +154 -0
  31. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/BootDiagnosticStore.kt +150 -0
  32. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/CrashGuard.kt +271 -0
  33. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/FlutterPatcherApplication.kt +201 -0
  34. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/FlutterPatcherAutoInitProvider.kt +93 -0
  35. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/FlutterPatcherPlugin.kt +245 -0
  36. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/LoaderHook.kt +298 -0
  37. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/PatchManager.kt +1579 -0
  38. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/PatcherConfig.kt +173 -0
  39. package/dart-src/root/android/src/main/kotlin/com/flutter_patcher/flutter_patcher/SignatureVerifier.kt +177 -0
  40. package/dart-src/root/android/src/test/kotlin/com/flutter_patcher/flutter_patcher/CrashGuardTest.kt +61 -0
  41. package/dart-src/root/android/src/test/kotlin/com/flutter_patcher/flutter_patcher/LoaderHookTest.kt +25 -0
  42. package/dart-src/root/android/src/test/kotlin/com/flutter_patcher/flutter_patcher/PatchManagerTest.kt +401 -0
  43. package/dart-src/root/android/src/test/kotlin/com/flutter_patcher/flutter_patcher/PatcherConfigTest.kt +30 -0
  44. package/dart-src/root/bin/pack.dart +182 -0
  45. package/dart-src/root/lib/flutter_ota_kit.dart +1170 -0
  46. package/dart-src/root/lib/src/app_version_resolver.dart +36 -0
  47. package/dart-src/root/lib/src/aws_update_source.dart +97 -0
  48. package/dart-src/root/lib/src/blacklist.dart +54 -0
  49. package/dart-src/root/lib/src/boot_diagnostic.dart +138 -0
  50. package/dart-src/root/lib/src/cloudflare_update_source.dart +97 -0
  51. package/dart-src/root/lib/src/flutter_ota_app.dart +69 -0
  52. package/dart-src/root/lib/src/io.dart +48 -0
  53. package/dart-src/root/lib/src/io_stub.dart +19 -0
  54. package/dart-src/root/lib/src/ota_progress_overlay.dart +1186 -0
  55. package/dart-src/root/lib/src/pack/pack.dart +434 -0
  56. package/dart-src/root/lib/src/patch_info.dart +12 -0
  57. package/dart-src/root/lib/src/patcher_channel.dart +160 -0
  58. package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/aws_database.dart +1 -1
  59. package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/aws_s3_client.dart +1 -1
  60. package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/aws_storage.dart +1 -1
  61. package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/aws_storage_profile.dart +1 -1
  62. package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/with_cloudfront_signed_url.dart +1 -1
  63. package/dart-src/root/lib/src/pkg/client/flutter_ota_kit_client.dart +1 -0
  64. package/dart-src/root/lib/src/pkg/client/src/server_update_source.dart +46 -0
  65. package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/cloudflare_worker_database.dart +1 -1
  66. package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/d1_build_where.dart +1 -1
  67. package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/d1_bundle_mapper.dart +3 -3
  68. package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/d1_database.dart +1 -1
  69. package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/d1_database_plugin.dart +2 -2
  70. package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/r2_s3_client.dart +1 -1
  71. package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/r2_storage.dart +1 -1
  72. package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/r2_storage_profile.dart +1 -1
  73. package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/status.dart +1 -1
  74. package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/flutter_ota_kit_plugin_core.dart +1 -1
  75. package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/create_blob_database_plugin.dart +1 -1
  76. package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/filter_compatible_app_versions.dart +1 -1
  77. package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/get_update_info.dart +1 -1
  78. package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/request_update_bundle_state.dart +1 -1
  79. package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/resolve_update_info_from_bundles.dart +1 -1
  80. package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/types.dart +2 -2
  81. package/dart-src/{plugins/pocketbase/lib → root/lib/src/pkg/pocketbase}/src/pocketbase_bundle_mapper.dart +2 -2
  82. package/dart-src/{plugins/pocketbase/lib → root/lib/src/pkg/pocketbase}/src/pocketbase_database.dart +26 -15
  83. package/dart-src/{plugins/pocketbase/lib → root/lib/src/pkg/pocketbase}/src/pocketbase_storage.dart +1 -1
  84. package/dart-src/{plugins/postgres/lib → root/lib/src/pkg/postgres}/src/postgres_bundle_mapper.dart +2 -2
  85. package/dart-src/{plugins/postgres/lib → root/lib/src/pkg/postgres}/src/postgres_database.dart +2 -2
  86. package/dart-src/{plugins/postgres/lib → root/lib/src/pkg/postgres}/src/postgres_get_update_info.dart +2 -2
  87. package/dart-src/{plugins/postgres/lib → root/lib/src/pkg/postgres}/src/postgres_storage.dart +1 -1
  88. package/dart-src/{plugins/postgres/lib → root/lib/src/pkg/postgres}/src/postgres_types.dart +1 -1
  89. package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_bundle_mapper.dart +2 -2
  90. package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_database.dart +2 -2
  91. package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_edge_function_database.dart +1 -1
  92. package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_edge_function_storage.dart +1 -1
  93. package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_storage.dart +1 -1
  94. package/dart-src/root/lib/src/pocketbase_update_source.dart +107 -0
  95. package/dart-src/root/lib/src/postgres_update_source.dart +95 -0
  96. package/dart-src/root/lib/src/shared_update_check.dart +131 -0
  97. package/dart-src/root/lib/src/supabase_update_source.dart +93 -0
  98. package/dart-src/root/pubspec.yaml +54 -0
  99. package/package.json +1 -1
  100. package/scripts/postinstall.js +17 -13
  101. package/scripts/vendor.sh +22 -7
  102. package/dart-src/packages/core/CHANGELOG.md +0 -21
  103. package/dart-src/packages/core/README.md +0 -23
  104. package/dart-src/packages/core/example/lib/main.dart +0 -69
  105. package/dart-src/packages/core/pubspec.yaml +0 -13
  106. package/dart-src/packages/core/test/rollout_test.dart +0 -135
  107. package/dart-src/packages/core/test/semver_test.dart +0 -55
  108. package/dart-src/packages/core/test/semver_vectors.json +0 -1
  109. package/dart-src/packages/core/test/types_test.dart +0 -131
  110. package/dart-src/packages/core/test/uuid_test.dart +0 -40
  111. package/dart-src/packages/core/tool/dbg.dart +0 -7
  112. package/dart-src/plugins/aws/.gitkeep +0 -0
  113. package/dart-src/plugins/aws/CHANGELOG.md +0 -23
  114. package/dart-src/plugins/aws/LICENSE +0 -21
  115. package/dart-src/plugins/aws/README.md +0 -28
  116. package/dart-src/plugins/aws/example/lib/main.dart +0 -60
  117. package/dart-src/plugins/aws/pubspec.yaml +0 -30
  118. package/dart-src/plugins/aws/test/aws_database_test.dart +0 -161
  119. package/dart-src/plugins/aws/test/aws_storage_test.dart +0 -73
  120. package/dart-src/plugins/aws/test/mock_aws_s3_client.dart +0 -78
  121. package/dart-src/plugins/cloudflare/.gitkeep +0 -0
  122. package/dart-src/plugins/cloudflare/CHANGELOG.md +0 -23
  123. package/dart-src/plugins/cloudflare/LICENSE +0 -21
  124. package/dart-src/plugins/cloudflare/README.md +0 -25
  125. package/dart-src/plugins/cloudflare/example/lib/main.dart +0 -62
  126. package/dart-src/plugins/cloudflare/migrations/0001_hot-updater_init.sql +0 -16
  127. package/dart-src/plugins/cloudflare/migrations/0002_hot-updater_0.13.0.sql +0 -8
  128. package/dart-src/plugins/cloudflare/migrations/0003_hot-updater_0.18.0.sql +0 -38
  129. package/dart-src/plugins/cloudflare/migrations/0004_hot-updater_0.29.0.sql +0 -11
  130. package/dart-src/plugins/cloudflare/migrations/0005_hot-updater_0.31.0.sql +0 -24
  131. package/dart-src/plugins/cloudflare/pubspec.yaml +0 -28
  132. package/dart-src/plugins/cloudflare/sql/bundles.sql +0 -42
  133. package/dart-src/plugins/cloudflare/test/cloudflare_worker_database_test.dart +0 -126
  134. package/dart-src/plugins/cloudflare/test/d1_bundle_mapper_test.dart +0 -106
  135. package/dart-src/plugins/cloudflare/test/d1_database_test.dart +0 -200
  136. package/dart-src/plugins/cloudflare/test/mock_d1_client.dart +0 -261
  137. package/dart-src/plugins/cloudflare/test/mock_r2_client.dart +0 -78
  138. package/dart-src/plugins/cloudflare/test/r2_storage_test.dart +0 -74
  139. package/dart-src/plugins/plugin-core/CHANGELOG.md +0 -20
  140. package/dart-src/plugins/plugin-core/LICENSE +0 -21
  141. package/dart-src/plugins/plugin-core/README.md +0 -21
  142. package/dart-src/plugins/plugin-core/example/lib/main.dart +0 -61
  143. package/dart-src/plugins/plugin-core/pubspec.yaml +0 -23
  144. package/dart-src/plugins/plugin-core/test/asset_storage_layout_test.dart +0 -170
  145. package/dart-src/plugins/plugin-core/test/bundle_unit_of_work_store_test.dart +0 -74
  146. package/dart-src/plugins/plugin-core/test/bundle_unit_of_work_test.dart +0 -345
  147. package/dart-src/plugins/plugin-core/test/create_blob_database_plugin_test.dart +0 -843
  148. package/dart-src/plugins/plugin-core/test/create_database_plugin_test.dart +0 -298
  149. package/dart-src/plugins/plugin-core/test/create_storage_plugin_test.dart +0 -195
  150. package/dart-src/plugins/plugin-core/test/generate_min_bundle_id_test.dart +0 -56
  151. package/dart-src/plugins/plugin-core/test/get_update_info_test.dart +0 -1589
  152. package/dart-src/plugins/plugin-core/test/helpers_test.dart +0 -283
  153. package/dart-src/plugins/plugin-core/test/query_bundles_test.dart +0 -202
  154. package/dart-src/plugins/plugin-core/test/request_update_bundle_state_test.dart +0 -86
  155. package/dart-src/plugins/plugin-core/test/uuidv7_test.dart +0 -88
  156. package/dart-src/plugins/pocketbase/CHANGELOG.md +0 -23
  157. package/dart-src/plugins/pocketbase/LICENSE +0 -21
  158. package/dart-src/plugins/pocketbase/README.md +0 -54
  159. package/dart-src/plugins/pocketbase/example/lib/main.dart +0 -62
  160. package/dart-src/plugins/pocketbase/pubspec.yaml +0 -26
  161. package/dart-src/plugins/pocketbase/test/pb_uri_test.dart +0 -12
  162. package/dart-src/plugins/postgres/.gitkeep +0 -0
  163. package/dart-src/plugins/postgres/CHANGELOG.md +0 -23
  164. package/dart-src/plugins/postgres/LICENSE +0 -21
  165. package/dart-src/plugins/postgres/README.md +0 -29
  166. package/dart-src/plugins/postgres/example/lib/main.dart +0 -67
  167. package/dart-src/plugins/postgres/pubspec.yaml +0 -26
  168. package/dart-src/plugins/postgres/sql/bundles.sql +0 -45
  169. package/dart-src/plugins/postgres/sql/get_target_app_version_list.sql +0 -21
  170. package/dart-src/plugins/postgres/sql/get_update_info.spec.ts +0 -171
  171. package/dart-src/plugins/postgres/sql/get_update_info_by_app_version.sql +0 -126
  172. package/dart-src/plugins/postgres/sql/get_update_info_by_fingerprint_hash.sql +0 -125
  173. package/dart-src/plugins/postgres/sql/hash_user_id.sql +0 -30
  174. package/dart-src/plugins/postgres/sql/is_device_eligible.sql +0 -237
  175. package/dart-src/plugins/postgres/sql/prepareSql.ts +0 -11
  176. package/dart-src/plugins/postgres/test/mock_postgres_client.dart +0 -320
  177. package/dart-src/plugins/postgres/test/postgres_bundle_mapper_test.dart +0 -139
  178. package/dart-src/plugins/postgres/test/postgres_database_test.dart +0 -210
  179. package/dart-src/plugins/postgres/test/postgres_storage_runtime_test.dart +0 -60
  180. package/dart-src/plugins/supabase/CHANGELOG.md +0 -24
  181. package/dart-src/plugins/supabase/LICENSE +0 -21
  182. package/dart-src/plugins/supabase/README.md +0 -53
  183. package/dart-src/plugins/supabase/example/lib/main.dart +0 -63
  184. package/dart-src/plugins/supabase/pubspec.yaml +0 -27
  185. package/dart-src/plugins/supabase/supabase/edge-functions/index.ts +0 -44
  186. package/dart-src/plugins/supabase/supabase/edge-functions/runtime.docker.integration.spec.ts +0 -968
  187. package/dart-src/plugins/supabase/supabase/migrations/20250103114225_init.sql +0 -232
  188. package/dart-src/plugins/supabase/supabase/migrations/20250314000000_hot-updater_0.13.0.sql +0 -137
  189. package/dart-src/plugins/supabase/supabase/migrations/20250516000000_hot-updater_0.18.0.sql +0 -206
  190. package/dart-src/plugins/supabase/supabase/migrations/20251014000000_hot-updater_0.21.0.sql +0 -186
  191. package/dart-src/plugins/supabase/supabase/migrations/20260401000000_hot-updater_0.29.0.sql +0 -505
  192. package/dart-src/plugins/supabase/supabase/migrations/20260414000000_hot-updater_0.30.0.sql +0 -50
  193. package/dart-src/plugins/supabase/supabase/migrations/20260422000000_hot-updater_0.31.0.sql +0 -20
  194. package/dart-src/plugins/supabase/supabase/migrations/20260520014100_hot-updater_rls.sql +0 -75
  195. package/dart-src/plugins/supabase/test/mock_supabase_client.dart +0 -654
  196. package/dart-src/plugins/supabase/test/supabase_bundle_mapper_test.dart +0 -115
  197. package/dart-src/plugins/supabase/test/supabase_database_test.dart +0 -198
  198. package/dart-src/plugins/supabase/test/supabase_storage_test.dart +0 -168
  199. /package/dart-src/{packages/core → root}/LICENSE +0 -0
  200. /package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/flutter_ota_kit_aws.dart +0 -0
  201. /package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/aws_cloudfront_client.dart +0 -0
  202. /package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/aws_cloudfront_signer.dart +0 -0
  203. /package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/aws_config.dart +0 -0
  204. /package/dart-src/{plugins/aws/lib → root/lib/src/pkg/aws}/src/aws_ssm_client.dart +0 -0
  205. /package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/flutter_ota_kit_cloudflare.dart +0 -0
  206. /package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/d1_client.dart +0 -0
  207. /package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/d1_config.dart +0 -0
  208. /package/dart-src/{plugins/cloudflare/lib → root/lib/src/pkg/cloudflare}/src/r2_config.dart +0 -0
  209. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/flutter_ota_kit_core.dart +0 -0
  210. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/app_update_info.dart +0 -0
  211. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/bundle.dart +0 -0
  212. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/bundle_artifacts.dart +0 -0
  213. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/bundle_patch_artifact.dart +0 -0
  214. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/changed_asset.dart +0 -0
  215. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/get_bundles_args.dart +0 -0
  216. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/metadata.dart +0 -0
  217. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/patch_info.dart +0 -0
  218. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/platform.dart +0 -0
  219. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/rollout.dart +0 -0
  220. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/semver.dart +0 -0
  221. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/semver_range.dart +0 -0
  222. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/semver_version.dart +0 -0
  223. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/strategy.dart +0 -0
  224. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/update_bundle_params.dart +0 -0
  225. /package/dart-src/{packages/core/lib → root/lib/src/pkg/core}/src/uuid.dart +0 -0
  226. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/asset_storage_layout.dart +0 -0
  227. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/bundle_helpers.dart +0 -0
  228. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/bundle_storage_layout.dart +0 -0
  229. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/bundle_unit_of_work.dart +0 -0
  230. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/bundle_unit_of_work_store.dart +0 -0
  231. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/calculate_pagination.dart +0 -0
  232. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/compression_format.dart +0 -0
  233. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/content_addressed_assets.dart +0 -0
  234. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/create_database_plugin.dart +0 -0
  235. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/create_storage_key_builder.dart +0 -0
  236. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/create_storage_plugin.dart +0 -0
  237. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/generate_min_bundle_id.dart +0 -0
  238. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/is_object.dart +0 -0
  239. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/legacy_asset_storage_layout.dart +0 -0
  240. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/paginate_bundles.dart +0 -0
  241. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/parse_storage_uri.dart +0 -0
  242. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/query_bundles.dart +0 -0
  243. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/storage_helpers.dart +0 -0
  244. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/storage_profile.dart +0 -0
  245. /package/dart-src/{plugins/plugin-core/lib → root/lib/src/pkg/plugin_core}/src/uuidv7.dart +0 -0
  246. /package/dart-src/{plugins/pocketbase/lib → root/lib/src/pkg/pocketbase}/flutter_ota_kit_pocketbase.dart +0 -0
  247. /package/dart-src/{plugins/pocketbase/lib → root/lib/src/pkg/pocketbase}/src/pocketbase_client.dart +0 -0
  248. /package/dart-src/{plugins/pocketbase/lib → root/lib/src/pkg/pocketbase}/src/pocketbase_config.dart +0 -0
  249. /package/dart-src/{plugins/postgres/lib → root/lib/src/pkg/postgres}/flutter_ota_kit_postgres.dart +0 -0
  250. /package/dart-src/{plugins/postgres/lib → root/lib/src/pkg/postgres}/src/postgres_client.dart +0 -0
  251. /package/dart-src/{plugins/postgres/lib → root/lib/src/pkg/postgres}/src/postgres_config.dart +0 -0
  252. /package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/edge.dart +0 -0
  253. /package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/flutter_ota_kit_supabase.dart +0 -0
  254. /package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/error_message.dart +0 -0
  255. /package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_client_adapter.dart +0 -0
  256. /package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_client_http.dart +0 -0
  257. /package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_config.dart +0 -0
  258. /package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/supabase_signed_url_batcher.dart +0 -0
  259. /package/dart-src/{plugins/supabase/lib → root/lib/src/pkg/supabase}/src/types.dart +0 -0
@@ -1,232 +0,0 @@
1
- -- HotUpdater.bundles
2
-
3
- DO $$ BEGIN
4
- CREATE TYPE platforms AS ENUM ('ios', 'android');
5
- EXCEPTION
6
- WHEN duplicate_object THEN NULL;
7
- END $$;
8
-
9
- CREATE TABLE IF NOT EXISTS bundles (
10
- id uuid PRIMARY KEY,
11
- platform platforms NOT NULL,
12
- target_app_version text NOT NULL,
13
- should_force_update boolean NOT NULL,
14
- enabled boolean NOT NULL,
15
- file_url text NOT NULL,
16
- file_hash text NOT NULL,
17
- git_commit_hash text,
18
- message text
19
- );
20
-
21
- CREATE INDEX IF NOT EXISTS bundles_target_app_version_idx ON bundles(target_app_version);
22
-
23
-
24
- -- HotUpdater.get_update_info
25
-
26
- CREATE OR REPLACE FUNCTION get_update_info (
27
- app_platform platforms,
28
- app_version text,
29
- bundle_id uuid
30
- )
31
- RETURNS TABLE (
32
- id uuid,
33
- should_force_update boolean,
34
- file_url text,
35
- file_hash text,
36
- status text
37
- )
38
- LANGUAGE plpgsql
39
- AS
40
- $$
41
- DECLARE
42
- NIL_UUID CONSTANT uuid := '00000000-0000-0000-0000-000000000000';
43
- BEGIN
44
- RETURN QUERY
45
- WITH rollback_candidate AS (
46
- SELECT
47
- b.id,
48
- -- If status is 'ROLLBACK', should_force_update is always TRUE
49
- TRUE AS should_force_update,
50
- b.file_url,
51
- b.file_hash,
52
- 'ROLLBACK' AS status
53
- FROM bundles b
54
- WHERE b.enabled = TRUE
55
- AND b.platform = app_platform
56
- AND b.id < bundle_id
57
- ORDER BY b.id DESC
58
- LIMIT 1
59
- ),
60
- update_candidate AS (
61
- SELECT
62
- b.id,
63
- b.should_force_update,
64
- b.file_url,
65
- b.file_hash,
66
- 'UPDATE' AS status
67
- FROM bundles b
68
- WHERE b.enabled = TRUE
69
- AND b.platform = app_platform
70
- AND b.id >= bundle_id
71
- AND semver_satisfies(b.target_app_version, app_version)
72
- ORDER BY b.id DESC
73
- LIMIT 1
74
- ),
75
- final_result AS (
76
- SELECT *
77
- FROM update_candidate
78
-
79
- UNION ALL
80
-
81
- SELECT *
82
- FROM rollback_candidate
83
- WHERE NOT EXISTS (SELECT 1 FROM update_candidate)
84
- )
85
- SELECT *
86
- FROM final_result WHERE final_result.id != bundle_id
87
-
88
- UNION ALL
89
- /*
90
- When there are no final results and bundle_id != NIL_UUID,
91
- add one fallback row.
92
- This fallback row is also ROLLBACK so shouldForceUpdate = TRUE.
93
- */
94
- SELECT
95
- NIL_UUID AS id,
96
- TRUE AS should_force_update, -- Always TRUE
97
- NULL AS file_url,
98
- NULL AS file_hash,
99
- 'ROLLBACK' AS status
100
- WHERE (SELECT COUNT(*) FROM final_result) = 0
101
- AND bundle_id != NIL_UUID;
102
-
103
- END;
104
- $$;
105
-
106
- -- HotUpdater.semver_satisfies
107
-
108
- CREATE OR REPLACE FUNCTION semver_satisfies(range_expression TEXT, version TEXT)
109
- RETURNS BOOLEAN AS $$
110
- DECLARE
111
- version_parts TEXT[];
112
- version_major INT;
113
- version_minor INT;
114
- version_patch INT;
115
- satisfies BOOLEAN := FALSE;
116
- BEGIN
117
- -- Split the version into major, minor, and patch
118
- version_parts := string_to_array(version, '.');
119
- version_major := version_parts[1]::INT;
120
- version_minor := version_parts[2]::INT;
121
- version_patch := version_parts[3]::INT;
122
-
123
- -- Parse range expression and evaluate
124
- IF range_expression ~ '^\d+\.\d+\.\d+$' THEN
125
- -- Exact match
126
- satisfies := (range_expression = version);
127
-
128
- ELSIF range_expression = '*' THEN
129
- -- Matches any version
130
- satisfies := TRUE;
131
-
132
- ELSIF range_expression ~ '^\d+\.x\.x$' THEN
133
- -- Matches major.x.x
134
- DECLARE
135
- major_range INT := split_part(range_expression, '.', 1)::INT;
136
- BEGIN
137
- satisfies := (version_major = major_range);
138
- END;
139
-
140
- ELSIF range_expression ~ '^\d+\.\d+\.x$' THEN
141
- -- Matches major.minor.x
142
- DECLARE
143
- major_range INT := split_part(range_expression, '.', 1)::INT;
144
- minor_range INT := split_part(range_expression, '.', 2)::INT;
145
- BEGIN
146
- satisfies := (version_major = major_range AND version_minor = minor_range);
147
- END;
148
-
149
- ELSIF range_expression ~ '^\d+\.\d+$' THEN
150
- -- Matches major.minor
151
- DECLARE
152
- major_range INT := split_part(range_expression, '.', 1)::INT;
153
- minor_range INT := split_part(range_expression, '.', 2)::INT;
154
- BEGIN
155
- satisfies := (version_major = major_range AND version_minor = minor_range);
156
- END;
157
-
158
- ELSIF range_expression ~ '^\d+\.\d+\.\d+ - \d+\.\d+\.\d+$' THEN
159
- -- Matches range e.g., 1.2.3 - 1.2.7
160
- DECLARE
161
- lower_bound TEXT := split_part(range_expression, ' - ', 1);
162
- upper_bound TEXT := split_part(range_expression, ' - ', 2);
163
- BEGIN
164
- satisfies := (version >= lower_bound AND version <= upper_bound);
165
- END;
166
-
167
- ELSIF range_expression ~ '^>=\d+\.\d+\.\d+ <\d+\.\d+\.\d+$' THEN
168
- -- Matches range with inequalities
169
- DECLARE
170
- lower_bound TEXT := regexp_replace(range_expression, '>=([\d\.]+) <.*', '\1');
171
- upper_bound TEXT := regexp_replace(range_expression, '.*<([\d\.]+)', '\1');
172
- BEGIN
173
- satisfies := (version >= lower_bound AND version < upper_bound);
174
- END;
175
-
176
- ELSIF range_expression ~ '^~\d+\.\d+\.\d+$' THEN
177
- -- Matches ~1.2.3 (>=1.2.3 <1.3.0)
178
- DECLARE
179
- lower_bound TEXT := regexp_replace(range_expression, '~', '');
180
- upper_bound_major INT := split_part(lower_bound, '.', 1)::INT;
181
- upper_bound_minor INT := split_part(lower_bound, '.', 2)::INT + 1;
182
- upper_bound TEXT := upper_bound_major || '.' || upper_bound_minor || '.0';
183
- BEGIN
184
- satisfies := (version >= lower_bound AND version < upper_bound);
185
- END;
186
-
187
- ELSIF range_expression ~ '^\^\d+\.\d+\.\d+$' THEN
188
- -- Matches ^1.2.3 (>=1.2.3 <2.0.0)
189
- DECLARE
190
- lower_bound TEXT := regexp_replace(range_expression, '\^', '');
191
- upper_bound_major INT := split_part(lower_bound, '.', 1)::INT + 1;
192
- upper_bound TEXT := upper_bound_major || '.0.0';
193
- BEGIN
194
- satisfies := (version >= lower_bound AND version < upper_bound);
195
- END;
196
-
197
- -- [Added] 1) Single major version pattern '^(\d+)$'
198
- ELSIF range_expression ~ '^\d+$' THEN
199
- /*
200
- e.g.) "1" is interpreted as (>=1.0.0 <2.0.0) in semver range
201
- "2" would be interpreted as (>=2.0.0 <3.0.0)
202
- */
203
- DECLARE
204
- major_range INT := range_expression::INT;
205
- lower_bound TEXT := major_range || '.0.0';
206
- upper_bound TEXT := (major_range + 1) || '.0.0';
207
- BEGIN
208
- satisfies := (version >= lower_bound AND version < upper_bound);
209
- END;
210
-
211
- -- [Added] 2) major.x pattern '^(\d+)\.x$'
212
- ELSIF range_expression ~ '^\d+\.x$' THEN
213
- /*
214
- e.g.) "2.x" => as long as major=2 matches, any minor and patch is OK
215
- effectively works like (>=2.0.0 <3.0.0)
216
- */
217
- DECLARE
218
- major_range INT := split_part(range_expression, '.', 1)::INT;
219
- lower_bound TEXT := major_range || '.0.0';
220
- upper_bound TEXT := (major_range + 1) || '.0.0';
221
- BEGIN
222
- satisfies := (version >= lower_bound AND version < upper_bound);
223
- END;
224
-
225
- ELSE
226
- RAISE EXCEPTION 'Unsupported range expression: %', range_expression;
227
- END IF;
228
-
229
- RETURN satisfies;
230
- END;
231
- $$ LANGUAGE plpgsql;
232
-
@@ -1,137 +0,0 @@
1
- -- HotUpdater.semver_satisfies
2
- DROP FUNCTION IF EXISTS semver_satisfies;
3
-
4
- -- HotUpdater.get_update_info
5
- DROP FUNCTION IF EXISTS get_update_info;
6
-
7
- -- HotUpdater.get_update_info
8
- CREATE OR REPLACE FUNCTION get_update_info (
9
- app_platform platforms,
10
- app_version text,
11
- bundle_id uuid,
12
- min_bundle_id uuid,
13
- target_channel text,
14
- target_app_version_list text[]
15
- )
16
- RETURNS TABLE (
17
- id uuid,
18
- should_force_update boolean,
19
- message text,
20
- status text
21
- )
22
- LANGUAGE plpgsql
23
- AS
24
- $$
25
- DECLARE
26
- NIL_UUID CONSTANT uuid := '00000000-0000-0000-0000-000000000000';
27
- BEGIN
28
- RETURN QUERY
29
- WITH update_candidate AS (
30
- SELECT
31
- b.id,
32
- b.should_force_update,
33
- b.message,
34
- 'UPDATE' AS status
35
- FROM bundles b
36
- WHERE b.enabled = TRUE
37
- AND b.platform = app_platform
38
- AND b.id >= bundle_id
39
- AND b.id > min_bundle_id
40
- AND b.target_app_version IN (SELECT unnest(target_app_version_list))
41
- AND b.channel = target_channel
42
- ORDER BY b.id DESC
43
- LIMIT 1
44
- ),
45
- rollback_candidate AS (
46
- SELECT
47
- b.id,
48
- TRUE AS should_force_update,
49
- b.message,
50
- 'ROLLBACK' AS status
51
- FROM bundles b
52
- WHERE b.enabled = TRUE
53
- AND b.platform = app_platform
54
- AND b.id < bundle_id
55
- AND b.id > min_bundle_id
56
- ORDER BY b.id DESC
57
- LIMIT 1
58
- ),
59
- final_result AS (
60
- SELECT * FROM update_candidate
61
- UNION ALL
62
- SELECT * FROM rollback_candidate
63
- WHERE NOT EXISTS (SELECT 1 FROM update_candidate)
64
- )
65
- SELECT *
66
- FROM final_result
67
- WHERE final_result.id != bundle_id
68
-
69
- UNION ALL
70
-
71
- SELECT
72
- NIL_UUID AS id,
73
- TRUE AS should_force_update,
74
- NULL AS message,
75
- 'ROLLBACK' AS status
76
- WHERE (SELECT COUNT(*) FROM final_result) = 0
77
- AND bundle_id != NIL_UUID
78
- AND bundle_id > min_bundle_id
79
- AND NOT EXISTS (
80
- SELECT 1
81
- FROM bundles b
82
- WHERE b.id = bundle_id
83
- AND b.enabled = TRUE
84
- AND b.platform = app_platform
85
- );
86
- END;
87
- $$;
88
-
89
- -- HotUpdater.bundles
90
- ALTER TABLE bundles
91
- ADD COLUMN IF NOT EXISTS channel text NOT NULL DEFAULT 'production';
92
-
93
- DO $$ BEGIN
94
- ALTER TABLE bundles DROP COLUMN file_url;
95
- EXCEPTION
96
- WHEN undefined_column THEN NULL;
97
- END $$;
98
-
99
- -- HotUpdater.get_target_app_version_list
100
-
101
- CREATE OR REPLACE FUNCTION get_target_app_version_list (
102
- app_platform platforms,
103
- min_bundle_id uuid
104
- )
105
- RETURNS TABLE (
106
- target_app_version text
107
- )
108
- LANGUAGE plpgsql
109
- AS
110
- $$
111
- BEGIN
112
- RETURN QUERY
113
- SELECT b.target_app_version
114
- FROM bundles b
115
- WHERE b.platform = app_platform
116
- AND b.id >= min_bundle_id
117
- GROUP BY b.target_app_version;
118
- END;
119
- $$;
120
-
121
- -- HotUpdater.get_channels
122
- CREATE OR REPLACE FUNCTION get_channels ()
123
- RETURNS TABLE (
124
- channel text
125
- )
126
- LANGUAGE plpgsql
127
- AS
128
- $$
129
- BEGIN
130
- RETURN QUERY
131
- SELECT b.channel
132
- FROM bundles b
133
- GROUP BY b.channel;
134
- END;
135
- $$;
136
-
137
- CREATE INDEX IF NOT EXISTS bundles_channel_idx ON bundles(channel);
@@ -1,206 +0,0 @@
1
-
2
- ALTER TABLE bundles ADD COLUMN IF NOT EXISTS fingerprint_hash text;
3
- ALTER TABLE bundles ADD COLUMN IF NOT EXISTS metadata JSONB DEFAULT '{}'::jsonb;
4
-
5
- ALTER TABLE bundles ADD COLUMN IF NOT EXISTS storage_uri TEXT;
6
-
7
- UPDATE bundles
8
- SET storage_uri = 'supabase-storage://%%BUCKET_NAME%%/' || id || '/bundle.zip'
9
- WHERE storage_uri IS NULL;
10
-
11
- DO $$ BEGIN
12
- ALTER TABLE bundles ALTER COLUMN storage_uri SET NOT NULL;
13
- EXCEPTION
14
- WHEN null_value_not_allowed THEN NULL;
15
- END $$;
16
- DO $$ BEGIN
17
- ALTER TABLE bundles ALTER COLUMN target_app_version DROP NOT NULL;
18
- EXCEPTION
19
- WHEN null_value_not_allowed THEN NULL;
20
- END $$;
21
-
22
- DO $$ BEGIN
23
- ALTER TABLE bundles ADD CONSTRAINT check_version_or_fingerprint CHECK (
24
- (target_app_version IS NOT NULL) OR (fingerprint_hash IS NOT NULL)
25
- );
26
- EXCEPTION
27
- WHEN duplicate_object THEN NULL;
28
- END $$;
29
-
30
- CREATE INDEX IF NOT EXISTS bundles_fingerprint_hash_idx ON bundles(fingerprint_hash);
31
-
32
- DROP FUNCTION IF EXISTS get_update_info;
33
-
34
- -- HotUpdater.get_update_info
35
- CREATE OR REPLACE FUNCTION get_update_info_by_fingerprint_hash (
36
- app_platform platforms,
37
- bundle_id uuid,
38
- min_bundle_id uuid,
39
- target_channel text,
40
- target_fingerprint_hash text
41
- )
42
- RETURNS TABLE (
43
- id uuid,
44
- should_force_update boolean,
45
- message text,
46
- status text,
47
- storage_uri text
48
- )
49
- LANGUAGE plpgsql
50
- AS
51
- $$
52
- DECLARE
53
- NIL_UUID CONSTANT uuid := '00000000-0000-0000-0000-000000000000';
54
- BEGIN
55
- RETURN QUERY
56
- WITH update_candidate AS (
57
- SELECT
58
- b.id,
59
- b.should_force_update,
60
- b.message,
61
- 'UPDATE' AS status,
62
- b.storage_uri
63
- FROM bundles b
64
- WHERE b.enabled = TRUE
65
- AND b.platform = app_platform
66
- AND b.id >= bundle_id
67
- AND b.id > min_bundle_id
68
- AND b.channel = target_channel
69
- AND b.fingerprint_hash = target_fingerprint_hash
70
- ORDER BY b.id DESC
71
- LIMIT 1
72
- ),
73
- rollback_candidate AS (
74
- SELECT
75
- b.id,
76
- TRUE AS should_force_update,
77
- b.message,
78
- 'ROLLBACK' AS status,
79
- b.storage_uri
80
- FROM bundles b
81
- WHERE b.enabled = TRUE
82
- AND b.platform = app_platform
83
- AND b.id < bundle_id
84
- AND b.id > min_bundle_id
85
- AND b.channel = target_channel
86
- AND b.fingerprint_hash = target_fingerprint_hash
87
- ORDER BY b.id DESC
88
- LIMIT 1
89
- ),
90
- final_result AS (
91
- SELECT * FROM update_candidate
92
- UNION ALL
93
- SELECT * FROM rollback_candidate
94
- WHERE NOT EXISTS (SELECT 1 FROM update_candidate)
95
- )
96
- SELECT *
97
- FROM final_result
98
- WHERE final_result.id != bundle_id
99
-
100
- UNION ALL
101
-
102
- SELECT
103
- NIL_UUID AS id,
104
- TRUE AS should_force_update,
105
- NULL AS message,
106
- 'ROLLBACK' AS status,
107
- NULL AS storage_uri
108
- WHERE (SELECT COUNT(*) FROM final_result) = 0
109
- AND bundle_id != NIL_UUID
110
- AND bundle_id > min_bundle_id
111
- AND NOT EXISTS (
112
- SELECT 1
113
- FROM bundles b
114
- WHERE b.id = bundle_id
115
- AND b.enabled = TRUE
116
- AND b.platform = app_platform
117
- );
118
- END;
119
- $$;
120
-
121
-
122
- -- HotUpdater.get_update_info
123
- CREATE OR REPLACE FUNCTION get_update_info_by_app_version (
124
- app_platform platforms,
125
- app_version text,
126
- bundle_id uuid,
127
- min_bundle_id uuid,
128
- target_channel text,
129
- target_app_version_list text[]
130
- )
131
- RETURNS TABLE (
132
- id uuid,
133
- should_force_update boolean,
134
- message text,
135
- status text,
136
- storage_uri text
137
- )
138
- LANGUAGE plpgsql
139
- AS
140
- $$
141
- DECLARE
142
- NIL_UUID CONSTANT uuid := '00000000-0000-0000-0000-000000000000';
143
- BEGIN
144
- RETURN QUERY
145
- WITH update_candidate AS (
146
- SELECT
147
- b.id,
148
- b.should_force_update,
149
- b.message,
150
- 'UPDATE' AS status,
151
- b.storage_uri
152
- FROM bundles b
153
- WHERE b.enabled = TRUE
154
- AND b.platform = app_platform
155
- AND b.id >= bundle_id
156
- AND b.id > min_bundle_id
157
- AND b.target_app_version IN (SELECT unnest(target_app_version_list))
158
- AND b.channel = target_channel
159
- ORDER BY b.id DESC
160
- LIMIT 1
161
- ),
162
- rollback_candidate AS (
163
- SELECT
164
- b.id,
165
- TRUE AS should_force_update,
166
- b.message,
167
- 'ROLLBACK' AS status,
168
- b.storage_uri
169
- FROM bundles b
170
- WHERE b.enabled = TRUE
171
- AND b.platform = app_platform
172
- AND b.id < bundle_id
173
- AND b.id > min_bundle_id
174
- ORDER BY b.id DESC
175
- LIMIT 1
176
- ),
177
- final_result AS (
178
- SELECT * FROM update_candidate
179
- UNION ALL
180
- SELECT * FROM rollback_candidate
181
- WHERE NOT EXISTS (SELECT 1 FROM update_candidate)
182
- )
183
- SELECT *
184
- FROM final_result
185
- WHERE final_result.id != bundle_id
186
-
187
- UNION ALL
188
-
189
- SELECT
190
- NIL_UUID AS id,
191
- TRUE AS should_force_update,
192
- NULL AS message,
193
- 'ROLLBACK' AS status,
194
- NULL AS storage_uri
195
- WHERE (SELECT COUNT(*) FROM final_result) = 0
196
- AND bundle_id != NIL_UUID
197
- AND bundle_id > min_bundle_id
198
- AND NOT EXISTS (
199
- SELECT 1
200
- FROM bundles b
201
- WHERE b.id = bundle_id
202
- AND b.enabled = TRUE
203
- AND b.platform = app_platform
204
- );
205
- END;
206
- $$;