@_nazmiforreal/flutter-ota 0.1.12 → 0.1.13

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 (176) hide show
  1. package/README.md +1 -1
  2. package/bin/flutter-ota-linux-x64 +0 -0
  3. package/dart-src/packages/cli-tools/.dart_tool/package_config.json +46 -76
  4. package/dart-src/packages/cli-tools/.dart_tool/package_graph.json +140 -166
  5. package/dart-src/packages/cli-tools/README.md +1 -1
  6. package/dart-src/packages/cli-tools/lib/flutter_ota_kit_cli.dart +30 -17
  7. package/dart-src/packages/cli-tools/lib/src/backend.dart +30 -31
  8. package/dart-src/packages/cli-tools/lib/src/cli_base.dart +3 -1
  9. package/dart-src/packages/cli-tools/lib/src/commands/build.dart +44 -43
  10. package/dart-src/packages/cli-tools/lib/src/commands/bundle.dart +265 -239
  11. package/dart-src/packages/cli-tools/lib/src/commands/channel.dart +75 -66
  12. package/dart-src/packages/cli-tools/lib/src/commands/config_command.dart +39 -35
  13. package/dart-src/packages/cli-tools/lib/src/commands/console.dart +30 -27
  14. package/dart-src/packages/cli-tools/lib/src/commands/deploy.dart +88 -72
  15. package/dart-src/packages/cli-tools/lib/src/commands/doctor.dart +66 -29
  16. package/dart-src/packages/cli-tools/lib/src/commands/fingerprint.dart +10 -6
  17. package/dart-src/packages/cli-tools/lib/src/commands/init.dart +290 -181
  18. package/dart-src/packages/cli-tools/lib/src/commands/keys.dart +24 -23
  19. package/dart-src/packages/cli-tools/lib/src/commands/migrate.dart +111 -97
  20. package/dart-src/packages/cli-tools/lib/src/commands/pocketbase.dart +237 -0
  21. package/dart-src/packages/cli-tools/lib/src/commands/rollback.dart +43 -34
  22. package/dart-src/packages/cli-tools/lib/src/commands/storage.dart +57 -53
  23. package/dart-src/packages/cli-tools/lib/src/config.dart +227 -93
  24. package/dart-src/packages/cli-tools/lib/src/operations.dart +9 -8
  25. package/dart-src/packages/cli-tools/lib/src/pack.dart +26 -25
  26. package/dart-src/packages/cli-tools/lib/src/pocketbase/data_bootstrap.dart +39 -0
  27. package/dart-src/packages/cli-tools/lib/src/pocketbase/hooks/bundles.pb.js +56 -0
  28. package/dart-src/packages/cli-tools/lib/src/pocketbase/installer.dart +189 -0
  29. package/dart-src/packages/cli-tools/lib/src/pocketbase/process_manager.dart +123 -0
  30. package/dart-src/packages/cli-tools/lib/src/pocketbase/schema_installer.dart +237 -0
  31. package/dart-src/packages/cli-tools/lib/src/runner.dart +36 -15
  32. package/dart-src/packages/cli-tools/lib/src/sign.dart +13 -5
  33. package/dart-src/packages/cli-tools/lib/src/ui/ui.dart +10 -13
  34. package/dart-src/packages/cli-tools/lib/src/util.dart +3 -1
  35. package/dart-src/packages/cli-tools/pubspec.lock +69 -116
  36. package/dart-src/packages/cli-tools/pubspec.yaml +25 -7
  37. package/dart-src/packages/cli-tools/test/backends_test.dart +62 -32
  38. package/dart-src/packages/cli-tools/test/build_pack_test.dart +4 -4
  39. package/dart-src/packages/cli-tools/test/cli_test.dart +89 -42
  40. package/dart-src/packages/cli-tools/test/mocks/mock_aws_s3_client.dart +8 -13
  41. package/dart-src/packages/cli-tools/test/mocks/mock_d1_client.dart +23 -18
  42. package/dart-src/packages/cli-tools/test/mocks/mock_pocketbase_client.dart +197 -0
  43. package/dart-src/packages/cli-tools/test/mocks/mock_postgres_client.dart +70 -46
  44. package/dart-src/packages/cli-tools/test/pocketbase_installer_test.dart +72 -0
  45. package/dart-src/packages/cli-tools/test/pocketbase_schema_test.dart +107 -0
  46. package/dart-src/packages/cli-tools/test/pocketbase_smoke_test.dart +59 -0
  47. package/dart-src/packages/core/README.md +2 -2
  48. package/dart-src/packages/core/example/lib/main.dart +69 -0
  49. package/dart-src/packages/core/lib/flutter_ota_kit_core.dart +1 -1
  50. package/dart-src/packages/core/lib/src/app_update_info.dart +17 -15
  51. package/dart-src/packages/core/lib/src/bundle.dart +102 -94
  52. package/dart-src/packages/core/lib/src/bundle_artifacts.dart +1 -2
  53. package/dart-src/packages/core/lib/src/bundle_patch_artifact.dart +15 -16
  54. package/dart-src/packages/core/lib/src/changed_asset.dart +24 -22
  55. package/dart-src/packages/core/lib/src/get_bundles_args.dart +13 -13
  56. package/dart-src/packages/core/lib/src/metadata.dart +9 -7
  57. package/dart-src/packages/core/lib/src/patch_info.dart +8 -7
  58. package/dart-src/packages/core/lib/src/platform.dart +4 -3
  59. package/dart-src/packages/core/lib/src/rollout.dart +14 -11
  60. package/dart-src/packages/core/lib/src/semver_range.dart +49 -39
  61. package/dart-src/packages/core/lib/src/semver_version.dart +8 -7
  62. package/dart-src/packages/core/lib/src/status.dart +4 -3
  63. package/dart-src/packages/core/lib/src/update_bundle_params.dart +7 -7
  64. package/dart-src/packages/core/lib/src/uuid.dart +1 -2
  65. package/dart-src/packages/core/pubspec.yaml +6 -7
  66. package/dart-src/packages/core/test/rollout_test.dart +15 -8
  67. package/dart-src/packages/core/test/semver_test.dart +5 -2
  68. package/dart-src/packages/core/test/types_test.dart +26 -24
  69. package/dart-src/packages/core/test/uuid_test.dart +3 -1
  70. package/dart-src/packages/core/tool/dbg.dart +1 -0
  71. package/dart-src/plugins/aws/CHANGELOG.md +6 -0
  72. package/dart-src/plugins/aws/example/lib/main.dart +60 -0
  73. package/dart-src/plugins/aws/lib/flutter_ota_kit_aws.dart +5 -1
  74. package/dart-src/plugins/aws/lib/src/aws_cloudfront_client.dart +11 -16
  75. package/dart-src/plugins/aws/lib/src/aws_cloudfront_signer.dart +7 -2
  76. package/dart-src/plugins/aws/lib/src/aws_database.dart +14 -18
  77. package/dart-src/plugins/aws/lib/src/aws_s3_client.dart +23 -18
  78. package/dart-src/plugins/aws/lib/src/aws_ssm_client.dart +5 -4
  79. package/dart-src/plugins/aws/lib/src/aws_storage.dart +2 -3
  80. package/dart-src/plugins/aws/lib/src/aws_storage_profile.dart +10 -16
  81. package/dart-src/plugins/aws/lib/src/with_cloudfront_signed_url.dart +6 -9
  82. package/dart-src/plugins/aws/pubspec.yaml +15 -10
  83. package/dart-src/plugins/aws/test/aws_database_test.dart +51 -57
  84. package/dart-src/plugins/aws/test/mock_aws_s3_client.dart +8 -13
  85. package/dart-src/plugins/cloudflare/CHANGELOG.md +7 -0
  86. package/dart-src/plugins/cloudflare/example/lib/main.dart +62 -0
  87. package/dart-src/plugins/cloudflare/lib/flutter_ota_kit_cloudflare.dart +4 -2
  88. package/dart-src/plugins/cloudflare/lib/src/cloudflare_worker_database.dart +3 -3
  89. package/dart-src/plugins/cloudflare/lib/src/d1_build_where.dart +3 -2
  90. package/dart-src/plugins/cloudflare/lib/src/d1_bundle_mapper.dart +24 -27
  91. package/dart-src/plugins/cloudflare/lib/src/d1_database_plugin.dart +22 -30
  92. package/dart-src/plugins/cloudflare/lib/src/r2_config.dart +1 -1
  93. package/dart-src/plugins/cloudflare/lib/src/r2_s3_client.dart +21 -29
  94. package/dart-src/plugins/cloudflare/lib/src/r2_storage.dart +7 -7
  95. package/dart-src/plugins/cloudflare/lib/src/r2_storage_profile.dart +7 -15
  96. package/dart-src/plugins/cloudflare/pubspec.yaml +14 -9
  97. package/dart-src/plugins/cloudflare/test/cloudflare_worker_database_test.dart +46 -42
  98. package/dart-src/plugins/cloudflare/test/d1_database_test.dart +100 -90
  99. package/dart-src/plugins/cloudflare/test/mock_d1_client.dart +23 -18
  100. package/dart-src/plugins/cloudflare/test/mock_r2_client.dart +8 -13
  101. package/dart-src/plugins/cloudflare/test/r2_storage_test.dart +1 -4
  102. package/dart-src/plugins/plugin-core/CHANGELOG.md +16 -0
  103. package/dart-src/plugins/plugin-core/example/lib/main.dart +61 -0
  104. package/dart-src/plugins/plugin-core/lib/flutter_ota_kit_plugin_core.dart +3 -7
  105. package/dart-src/plugins/plugin-core/lib/src/asset_storage_layout.dart +5 -5
  106. package/dart-src/plugins/plugin-core/lib/src/bundle_helpers.dart +23 -0
  107. package/dart-src/plugins/plugin-core/lib/src/bundle_storage_layout.dart +16 -10
  108. package/dart-src/plugins/plugin-core/lib/src/bundle_unit_of_work.dart +31 -26
  109. package/dart-src/plugins/plugin-core/lib/src/calculate_pagination.dart +5 -1
  110. package/dart-src/plugins/plugin-core/lib/src/content_addressed_assets.dart +1 -1
  111. package/dart-src/plugins/plugin-core/lib/src/create_blob_database_plugin.dart +78 -71
  112. package/dart-src/plugins/plugin-core/lib/src/create_database_plugin.dart +56 -35
  113. package/dart-src/plugins/plugin-core/lib/src/create_storage_plugin.dart +10 -13
  114. package/dart-src/plugins/plugin-core/lib/src/paginate_bundles.dart +30 -17
  115. package/dart-src/plugins/plugin-core/lib/src/parse_storage_uri.dart +3 -1
  116. package/dart-src/plugins/plugin-core/lib/src/query_bundles.dart +5 -3
  117. package/dart-src/plugins/plugin-core/lib/src/request_update_bundle_state.dart +2 -4
  118. package/dart-src/plugins/plugin-core/lib/src/storage_helpers.dart +18 -0
  119. package/dart-src/plugins/plugin-core/lib/src/types.dart +7 -6
  120. package/dart-src/plugins/plugin-core/pubspec.yaml +12 -9
  121. package/dart-src/plugins/plugin-core/test/asset_storage_layout_test.dart +13 -9
  122. package/dart-src/plugins/plugin-core/test/bundle_unit_of_work_test.dart +28 -15
  123. package/dart-src/plugins/plugin-core/test/create_blob_database_plugin_test.dart +254 -122
  124. package/dart-src/plugins/plugin-core/test/create_database_plugin_test.dart +36 -32
  125. package/dart-src/plugins/plugin-core/test/create_storage_plugin_test.dart +18 -15
  126. package/dart-src/plugins/plugin-core/test/generate_min_bundle_id_test.dart +8 -3
  127. package/dart-src/plugins/plugin-core/test/get_update_info_test.dart +682 -693
  128. package/dart-src/plugins/plugin-core/test/helpers_test.dart +45 -21
  129. package/dart-src/plugins/plugin-core/test/query_bundles_test.dart +76 -13
  130. package/dart-src/plugins/plugin-core/test/uuidv7_test.dart +20 -9
  131. package/dart-src/plugins/pocketbase/CHANGELOG.md +8 -0
  132. package/dart-src/plugins/pocketbase/LICENSE +21 -0
  133. package/dart-src/plugins/pocketbase/README.md +54 -0
  134. package/dart-src/plugins/pocketbase/example/lib/main.dart +62 -0
  135. package/dart-src/plugins/pocketbase/lib/flutter_ota_kit_pocketbase.dart +28 -0
  136. package/dart-src/plugins/pocketbase/lib/src/pocketbase_bundle_mapper.dart +121 -0
  137. package/dart-src/plugins/pocketbase/lib/src/pocketbase_client.dart +349 -0
  138. package/dart-src/plugins/pocketbase/lib/src/pocketbase_config.dart +61 -0
  139. package/dart-src/plugins/pocketbase/lib/src/pocketbase_database.dart +278 -0
  140. package/dart-src/plugins/pocketbase/lib/src/pocketbase_storage.dart +255 -0
  141. package/dart-src/plugins/pocketbase/pubspec.yaml +26 -0
  142. package/dart-src/plugins/pocketbase/test/pb_uri_test.dart +12 -0
  143. package/dart-src/plugins/postgres/CHANGELOG.md +6 -0
  144. package/dart-src/plugins/postgres/example/lib/main.dart +67 -0
  145. package/dart-src/plugins/postgres/lib/flutter_ota_kit_postgres.dart +3 -6
  146. package/dart-src/plugins/postgres/lib/src/postgres_bundle_mapper.dart +32 -52
  147. package/dart-src/plugins/postgres/lib/src/postgres_config.dart +3 -1
  148. package/dart-src/plugins/postgres/lib/src/postgres_database.dart +28 -38
  149. package/dart-src/plugins/postgres/lib/src/postgres_get_update_info.dart +16 -14
  150. package/dart-src/plugins/postgres/lib/src/postgres_storage.dart +26 -14
  151. package/dart-src/plugins/postgres/lib/src/postgres_types.dart +27 -28
  152. package/dart-src/plugins/postgres/pubspec.yaml +14 -9
  153. package/dart-src/plugins/postgres/test/mock_postgres_client.dart +62 -39
  154. package/dart-src/plugins/postgres/test/postgres_bundle_mapper_test.dart +3 -4
  155. package/dart-src/plugins/postgres/test/postgres_database_test.dart +102 -73
  156. package/dart-src/plugins/postgres/test/postgres_storage_runtime_test.dart +60 -0
  157. package/dart-src/plugins/supabase/CHANGELOG.md +17 -0
  158. package/dart-src/plugins/supabase/README.md +2 -2
  159. package/dart-src/plugins/supabase/example/lib/main.dart +63 -0
  160. package/dart-src/plugins/supabase/lib/flutter_ota_kit_supabase.dart +2 -0
  161. package/dart-src/plugins/supabase/lib/src/error_message.dart +11 -0
  162. package/dart-src/plugins/supabase/lib/src/supabase_bundle_mapper.dart +34 -58
  163. package/dart-src/plugins/supabase/lib/src/supabase_client_adapter.dart +3 -13
  164. package/dart-src/plugins/supabase/lib/src/supabase_client_http.dart +34 -52
  165. package/dart-src/plugins/supabase/lib/src/supabase_database.dart +38 -30
  166. package/dart-src/plugins/supabase/lib/src/supabase_edge_function_storage.dart +21 -29
  167. package/dart-src/plugins/supabase/lib/src/supabase_signed_url_batcher.dart +7 -19
  168. package/dart-src/plugins/supabase/lib/src/supabase_storage.dart +18 -29
  169. package/dart-src/plugins/supabase/lib/src/types.dart +26 -26
  170. package/dart-src/plugins/supabase/pubspec.yaml +14 -9
  171. package/dart-src/plugins/supabase/test/mock_supabase_client.dart +57 -57
  172. package/dart-src/plugins/supabase/test/supabase_bundle_mapper_test.dart +30 -27
  173. package/dart-src/plugins/supabase/test/supabase_database_test.dart +26 -35
  174. package/dart-src/plugins/supabase/test/supabase_storage_test.dart +27 -34
  175. package/package.json +3 -3
  176. package/scripts/vendor.sh +1 -1
@@ -37,8 +37,7 @@ List<Bundle> getRequestUpdateBundleSeeds(Map<String, Object?>? context) {
37
37
  RequestUpdateBundleResolver createRequestUpdateBundleResolver(
38
38
  Map<String, Object?>? context,
39
39
  ) {
40
- final unitOfWork =
41
- getRequestBundleUnitOfWork(context) ?? BundleUnitOfWork();
40
+ final unitOfWork = getRequestBundleUnitOfWork(context) ?? BundleUnitOfWork();
42
41
  return _RequestUpdateBundleResolverImpl(unitOfWork);
43
42
  }
44
43
 
@@ -57,6 +56,5 @@ class _RequestUpdateBundleResolverImpl implements RequestUpdateBundleResolver {
57
56
  Future<Bundle?> getById(
58
57
  String bundleId,
59
58
  Future<Bundle?> Function() loadBundleById,
60
- ) =>
61
- _unitOfWork.getById(bundleId, loadBundleById);
59
+ ) => _unitOfWork.getById(bundleId, loadBundleById);
62
60
  }
@@ -0,0 +1,18 @@
1
+ /// Throws [ArgumentError] if the bucket parsed from a storage URI does not
2
+ /// match the configured bucket. Shared by every S3-compatible storage profile
3
+ /// (R2, AWS S3, …) so the check lives in exactly one place.
4
+ void ensureExpectedBucket(String bucket, String bucketName) {
5
+ if (bucket != bucketName) {
6
+ throw ArgumentError(
7
+ 'Bucket name mismatch: expected "$bucketName", but found "$bucket".',
8
+ );
9
+ }
10
+ }
11
+
12
+ /// Matches the `update.json` manifest key layout
13
+ /// `{channel}/{platform}/{version|fingerprintHash}/update.json`.
14
+ /// Shared by the blob-database plugins (AWS S3 + the blob-database factory)
15
+ /// so the pattern is defined exactly once.
16
+ final RegExp updateJsonKeyRegex = RegExp(
17
+ r'^[^/]+/(?:ios|android)/[^/]+/update\.json$',
18
+ );
@@ -86,10 +86,7 @@ class DatabaseBundleQueryWhere {
86
86
  }
87
87
 
88
88
  class DatabaseBundleQueryOrder {
89
- const DatabaseBundleQueryOrder({
90
- this.field = 'id',
91
- this.direction = 'desc',
92
- });
89
+ const DatabaseBundleQueryOrder({this.field = 'id', this.direction = 'desc'});
93
90
 
94
91
  final String field;
95
92
  final String direction;
@@ -141,9 +138,13 @@ abstract class DatabasePlugin {
141
138
  Future<UpdateInfo?> getUpdateInfo(GetBundlesArgs args);
142
139
 
143
140
  Future<Paginated<List<Bundle>>> getBundles(
144
- DatabaseBundleQueryOptions options);
141
+ DatabaseBundleQueryOptions options,
142
+ );
145
143
 
146
- Future<void> updateBundle(String targetBundleId, Map<String, Object?> newBundle);
144
+ Future<void> updateBundle(
145
+ String targetBundleId,
146
+ Map<String, Object?> newBundle,
147
+ );
147
148
 
148
149
  Future<void> appendBundle(Bundle insertBundle);
149
150
 
@@ -1,20 +1,23 @@
1
1
  name: flutter_ota_kit_plugin_core
2
2
  description: Plugin core abstractions for flutter_ota_kit — database, storage, and build interfaces.
3
- version: 0.0.1
4
- publish_to: https://pub.dev
5
- homepage: https://github.com/HYPER12755/flutter_ota_kit
6
- repository: https://github.com/HYPER12755/flutter_ota_kit
7
- issue_tracker: https://github.com/HYPER12755/flutter_ota_kit/issues
8
- documentation: https://github.com/HYPER12755/flutter_ota_kit#readme
3
+ version: 0.0.3
4
+ homepage: https://github.com/HYPER12755/flutter-ota-kit
5
+ repository: https://github.com/HYPER12755/flutter-ota-kit
6
+ issue_tracker: https://github.com/HYPER12755/flutter-ota-kit/issues
7
+ documentation: https://github.com/HYPER12755/flutter-ota-kit#readme
9
8
  license: MIT
10
9
 
11
10
  environment:
12
- sdk: ">=3.3.0 <4.0.0"
11
+ sdk: ">=3.13.2 <4.0.0"
13
12
 
14
13
  dependencies:
15
- flutter_ota_kit_core: ^0.1.0
16
- mime: ^1.0.0
14
+ flutter_ota_kit_core: ^0.1.1
15
+ mime: ^2.0.0
17
16
 
18
17
  dev_dependencies:
19
18
  test: ^1.25.0
20
19
  lints: ^5.1.0
20
+
21
+ dependency_overrides:
22
+ flutter_ota_kit_core:
23
+ path: ../../packages/core
@@ -17,13 +17,15 @@ void main() {
17
17
  );
18
18
  });
19
19
 
20
- test('classifies non-/assets roots as legacy per-bundle file storage',
21
- () {
22
- expect(
23
- getAssetStorageLayout('s3://bucket/releases/bundle-id/files'),
24
- 'legacy-files',
25
- );
26
- });
20
+ test(
21
+ 'classifies non-/assets roots as legacy per-bundle file storage',
22
+ () {
23
+ expect(
24
+ getAssetStorageLayout('s3://bucket/releases/bundle-id/files'),
25
+ 'legacy-files',
26
+ );
27
+ },
28
+ );
27
29
  });
28
30
 
29
31
  group('getManifestAssetStoragePath', () {
@@ -78,8 +80,10 @@ void main() {
78
80
  group('isBrotliManifestAssetPath', () {
79
81
  test('matches index.*.bundle paths', () {
80
82
  expect(isBrotliManifestAssetPath('index.ios.bundle'), isTrue);
81
- expect(isBrotliManifestAssetPath('nested/index.android.bundle'),
82
- isTrue);
83
+ expect(
84
+ isBrotliManifestAssetPath('nested/index.android.bundle'),
85
+ isTrue,
86
+ );
83
87
  });
84
88
 
85
89
  test('rejects non-index bundle paths', () {
@@ -2,7 +2,8 @@ import 'package:flutter_ota_kit_plugin_core/src/bundle_unit_of_work.dart';
2
2
  import 'package:flutter_ota_kit_plugin_core/src/types.dart';
3
3
  import 'package:test/test.dart';
4
4
 
5
- Bundle _bundle(String id, {
5
+ Bundle _bundle(
6
+ String id, {
6
7
  String channel = 'production',
7
8
  Platform platform = Platform.android,
8
9
  bool enabled = true,
@@ -57,11 +58,17 @@ void main() {
57
58
  final b1 = _bundle('a');
58
59
  uow.markInsert(b1);
59
60
  // Seed with different data — insert should stay
60
- uow.seed([Bundle(
61
- id: 'a', platform: Platform.android, shouldForceUpdate: false,
62
- enabled: false, fileHash: 'other', storageUri: 'other',
63
- channel: 'production',
64
- )]);
61
+ uow.seed([
62
+ Bundle(
63
+ id: 'a',
64
+ platform: Platform.android,
65
+ shouldForceUpdate: false,
66
+ enabled: false,
67
+ fileHash: 'other',
68
+ storageUri: 'other',
69
+ channel: 'production',
70
+ ),
71
+ ]);
65
72
  final changed = uow.changedSets();
66
73
  expect(changed.length, 1);
67
74
  expect(changed.first.data.fileHash, 'hash_a'); // original insert
@@ -114,13 +121,15 @@ void main() {
114
121
  test('returns cached entry on second call', () {
115
122
  var loadCount = 0;
116
123
  uow.seed([_bundle('a')]);
117
- return uow.getById('a', () async {
118
- loadCount++;
119
- return _bundle('a');
120
- }).then((b) {
121
- expect(b, isNotNull);
122
- expect(loadCount, 0); // never called — seed provided it
123
- });
124
+ return uow
125
+ .getById('a', () async {
126
+ loadCount++;
127
+ return _bundle('a');
128
+ })
129
+ .then((b) {
130
+ expect(b, isNotNull);
131
+ expect(loadCount, 0); // never called — seed provided it
132
+ });
124
133
  });
125
134
 
126
135
  test('loads and caches missing entry', () async {
@@ -172,8 +181,12 @@ void main() {
172
181
  test('markUpdate on existing insert keeps insert', () {
173
182
  final b1 = _bundle('a');
174
183
  final b2 = Bundle(
175
- id: 'a', platform: Platform.android, shouldForceUpdate: false,
176
- enabled: false, fileHash: 'hash2', storageUri: 'uri2',
184
+ id: 'a',
185
+ platform: Platform.android,
186
+ shouldForceUpdate: false,
187
+ enabled: false,
188
+ fileHash: 'hash2',
189
+ storageUri: 'uri2',
177
190
  channel: 'production',
178
191
  );
179
192
  uow.markInsert(b1);