@rs-native-kit/version-check 0.1.2

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 (371) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +256 -0
  3. package/VersionCheck.podspec +20 -0
  4. package/android/build.gradle +56 -0
  5. package/android/src/main/AndroidManifest.xml +9 -0
  6. package/android/src/main/java/com/rsnativekit/versioncheck/SecureStorageCipher.kt +57 -0
  7. package/android/src/main/java/com/rsnativekit/versioncheck/VersionCheckHeadlessTaskService.kt +31 -0
  8. package/android/src/main/java/com/rsnativekit/versioncheck/VersionCheckModule.kt +215 -0
  9. package/android/src/main/java/com/rsnativekit/versioncheck/VersionCheckPackage.kt +31 -0
  10. package/android/src/main/java/com/rsnativekit/versioncheck/VersionCheckWorker.kt +29 -0
  11. package/ios/PlatformBridge/Ed25519Verifier.swift +19 -0
  12. package/ios/VersionCheck.h +5 -0
  13. package/ios/VersionCheck.mm +278 -0
  14. package/lib/module/data/cache/MemoryCacheStore.js +30 -0
  15. package/lib/module/data/cache/MemoryCacheStore.js.map +1 -0
  16. package/lib/module/data/cache/PersistentCacheStore.js +56 -0
  17. package/lib/module/data/cache/PersistentCacheStore.js.map +1 -0
  18. package/lib/module/data/config/ConfigCache.js +29 -0
  19. package/lib/module/data/config/ConfigCache.js.map +1 -0
  20. package/lib/module/data/config/ConfigDocumentValidator.js +185 -0
  21. package/lib/module/data/config/ConfigDocumentValidator.js.map +1 -0
  22. package/lib/module/data/config/ConfigLoader.js +82 -0
  23. package/lib/module/data/config/ConfigLoader.js.map +1 -0
  24. package/lib/module/data/config/ConfigProvider.js +58 -0
  25. package/lib/module/data/config/ConfigProvider.js.map +1 -0
  26. package/lib/module/data/config/ConfigResolutionPipeline.js +268 -0
  27. package/lib/module/data/config/ConfigResolutionPipeline.js.map +1 -0
  28. package/lib/module/data/config/ConfigValidator.js +69 -0
  29. package/lib/module/data/config/ConfigValidator.js.map +1 -0
  30. package/lib/module/data/config/SignatureVerifier.js +80 -0
  31. package/lib/module/data/config/SignatureVerifier.js.map +1 -0
  32. package/lib/module/data/config/canonicalize.js +88 -0
  33. package/lib/module/data/config/canonicalize.js.map +1 -0
  34. package/lib/module/data/config/sources/EnvironmentOverrideSource.js +20 -0
  35. package/lib/module/data/config/sources/EnvironmentOverrideSource.js.map +1 -0
  36. package/lib/module/data/config/sources/LocalConfigSource.js +22 -0
  37. package/lib/module/data/config/sources/LocalConfigSource.js.map +1 -0
  38. package/lib/module/data/config/sources/RemoteConfigSource.js +38 -0
  39. package/lib/module/data/config/sources/RemoteConfigSource.js.map +1 -0
  40. package/lib/module/data/providers/amazon/AmazonAppstoreProvider.js +13 -0
  41. package/lib/module/data/providers/amazon/AmazonAppstoreProvider.js.map +1 -0
  42. package/lib/module/data/providers/apple/AppleStoreProvider.js +67 -0
  43. package/lib/module/data/providers/apple/AppleStoreProvider.js.map +1 -0
  44. package/lib/module/data/providers/custom-api/CustomApiProvider.js +51 -0
  45. package/lib/module/data/providers/custom-api/CustomApiProvider.js.map +1 -0
  46. package/lib/module/data/providers/firebase-remote-config/FirebaseRemoteConfigProvider.js +13 -0
  47. package/lib/module/data/providers/firebase-remote-config/FirebaseRemoteConfigProvider.js.map +1 -0
  48. package/lib/module/data/providers/google-play/GooglePlayProvider.js +62 -0
  49. package/lib/module/data/providers/google-play/GooglePlayProvider.js.map +1 -0
  50. package/lib/module/data/providers/huawei/HuaweiAppGalleryProvider.js +18 -0
  51. package/lib/module/data/providers/huawei/HuaweiAppGalleryProvider.js.map +1 -0
  52. package/lib/module/data/repositories/VersionRepositoryImpl.js +69 -0
  53. package/lib/module/data/repositories/VersionRepositoryImpl.js.map +1 -0
  54. package/lib/module/di/container.js +80 -0
  55. package/lib/module/di/container.js.map +1 -0
  56. package/lib/module/domain/IVersionManagerCore.js +4 -0
  57. package/lib/module/domain/IVersionManagerCore.js.map +1 -0
  58. package/lib/module/domain/VersionManagerCore.js +276 -0
  59. package/lib/module/domain/VersionManagerCore.js.map +1 -0
  60. package/lib/module/domain/engines/decision/DecisionEngine.js +40 -0
  61. package/lib/module/domain/engines/decision/DecisionEngine.js.map +1 -0
  62. package/lib/module/domain/engines/policy/IUpdatePolicyEngine.js +4 -0
  63. package/lib/module/domain/engines/policy/IUpdatePolicyEngine.js.map +1 -0
  64. package/lib/module/domain/engines/policy/PolicyEngine.js +42 -0
  65. package/lib/module/domain/engines/policy/PolicyEngine.js.map +1 -0
  66. package/lib/module/domain/engines/semver/IVersionComparator.js +4 -0
  67. package/lib/module/domain/engines/semver/IVersionComparator.js.map +1 -0
  68. package/lib/module/domain/engines/semver/SemVerEngine.js +176 -0
  69. package/lib/module/domain/engines/semver/SemVerEngine.js.map +1 -0
  70. package/lib/module/domain/errors/VersionManagerException.js +104 -0
  71. package/lib/module/domain/errors/VersionManagerException.js.map +1 -0
  72. package/lib/module/domain/models/ActionPlan.js +9 -0
  73. package/lib/module/domain/models/ActionPlan.js.map +1 -0
  74. package/lib/module/domain/models/ConfigDocument.js +4 -0
  75. package/lib/module/domain/models/ConfigDocument.js.map +1 -0
  76. package/lib/module/domain/models/Events.js +4 -0
  77. package/lib/module/domain/models/Events.js.map +1 -0
  78. package/lib/module/domain/models/LifecycleState.js +29 -0
  79. package/lib/module/domain/models/LifecycleState.js.map +1 -0
  80. package/lib/module/domain/models/ParsedVersion.js +2 -0
  81. package/lib/module/domain/models/ParsedVersion.js.map +1 -0
  82. package/lib/module/domain/models/PlatformId.js +2 -0
  83. package/lib/module/domain/models/PlatformId.js.map +1 -0
  84. package/lib/module/domain/models/PublicApiOptions.js +2 -0
  85. package/lib/module/domain/models/PublicApiOptions.js.map +1 -0
  86. package/lib/module/domain/models/RemoteVersionInfo.js +4 -0
  87. package/lib/module/domain/models/RemoteVersionInfo.js.map +1 -0
  88. package/lib/module/domain/models/StoreLookup.js +2 -0
  89. package/lib/module/domain/models/StoreLookup.js.map +1 -0
  90. package/lib/module/domain/models/Unsubscribe.js +2 -0
  91. package/lib/module/domain/models/Unsubscribe.js.map +1 -0
  92. package/lib/module/domain/models/UpdateInfo.js +4 -0
  93. package/lib/module/domain/models/UpdateInfo.js.map +1 -0
  94. package/lib/module/domain/models/VersionManagerOptions.js +4 -0
  95. package/lib/module/domain/models/VersionManagerOptions.js.map +1 -0
  96. package/lib/module/domain/ports/ICacheStore.js +2 -0
  97. package/lib/module/domain/ports/ICacheStore.js.map +1 -0
  98. package/lib/module/domain/ports/IClock.js +2 -0
  99. package/lib/module/domain/ports/IClock.js.map +1 -0
  100. package/lib/module/domain/ports/IConfigProvider.js +4 -0
  101. package/lib/module/domain/ports/IConfigProvider.js.map +1 -0
  102. package/lib/module/domain/ports/IConfigSources.js +4 -0
  103. package/lib/module/domain/ports/IConfigSources.js.map +1 -0
  104. package/lib/module/domain/ports/IPlatformBridge.js +4 -0
  105. package/lib/module/domain/ports/IPlatformBridge.js.map +1 -0
  106. package/lib/module/domain/ports/IStoreProvider.js +4 -0
  107. package/lib/module/domain/ports/IStoreProvider.js.map +1 -0
  108. package/lib/module/domain/ports/IVersionRepository.js +4 -0
  109. package/lib/module/domain/ports/IVersionRepository.js.map +1 -0
  110. package/lib/module/domain/statemachine/LifecycleStateMachine.js +55 -0
  111. package/lib/module/domain/statemachine/LifecycleStateMachine.js.map +1 -0
  112. package/lib/module/domain/usecases/CheckForUpdatesUseCase.js +31 -0
  113. package/lib/module/domain/usecases/CheckForUpdatesUseCase.js.map +1 -0
  114. package/lib/module/domain/usecases/ForceTriggerUpdateUseCase.js +20 -0
  115. package/lib/module/domain/usecases/ForceTriggerUpdateUseCase.js.map +1 -0
  116. package/lib/module/domain/usecases/ResetIgnoredVersionsUseCase.js +24 -0
  117. package/lib/module/domain/usecases/ResetIgnoredVersionsUseCase.js.map +1 -0
  118. package/lib/module/index.js +10 -0
  119. package/lib/module/index.js.map +1 -0
  120. package/lib/module/package.json +1 -0
  121. package/lib/module/platform/contracts/IPlatformBridge.js +2 -0
  122. package/lib/module/platform/contracts/IPlatformBridge.js.map +1 -0
  123. package/lib/module/platform/createPlatformBridge.js +17 -0
  124. package/lib/module/platform/createPlatformBridge.js.map +1 -0
  125. package/lib/module/platform/createPlatformBridge.native.js +9 -0
  126. package/lib/module/platform/createPlatformBridge.native.js.map +1 -0
  127. package/lib/module/platform/native/NativePlatformBridge.js +143 -0
  128. package/lib/module/platform/native/NativePlatformBridge.js.map +1 -0
  129. package/lib/module/platform/native/NativeVersionCheck.js +33 -0
  130. package/lib/module/platform/native/NativeVersionCheck.js.map +1 -0
  131. package/lib/module/platform/web/WebPlatformBridge.js +228 -0
  132. package/lib/module/platform/web/WebPlatformBridge.js.map +1 -0
  133. package/lib/module/presentation/components/ForceUpdateScreen.js +68 -0
  134. package/lib/module/presentation/components/ForceUpdateScreen.js.map +1 -0
  135. package/lib/module/presentation/components/OptionalUpdateBanner.js +69 -0
  136. package/lib/module/presentation/components/OptionalUpdateBanner.js.map +1 -0
  137. package/lib/module/presentation/components/SoftUpdateDialog.js +101 -0
  138. package/lib/module/presentation/components/SoftUpdateDialog.js.map +1 -0
  139. package/lib/module/presentation/hooks/VersionManagerProvider.js +18 -0
  140. package/lib/module/presentation/hooks/VersionManagerProvider.js.map +1 -0
  141. package/lib/module/presentation/hooks/context.js +5 -0
  142. package/lib/module/presentation/hooks/context.js.map +1 -0
  143. package/lib/module/presentation/hooks/useUpdateState.js +26 -0
  144. package/lib/module/presentation/hooks/useUpdateState.js.map +1 -0
  145. package/lib/module/presentation/hooks/useVersionManager.js +33 -0
  146. package/lib/module/presentation/hooks/useVersionManager.js.map +1 -0
  147. package/lib/module/presentation/state/VersionManagerStore.js +47 -0
  148. package/lib/module/presentation/state/VersionManagerStore.js.map +1 -0
  149. package/lib/module/publicApi.js +114 -0
  150. package/lib/module/publicApi.js.map +1 -0
  151. package/lib/module/shared/eventbus/EventBus.js +34 -0
  152. package/lib/module/shared/eventbus/EventBus.js.map +1 -0
  153. package/lib/module/shared/logging/Logger.js +56 -0
  154. package/lib/module/shared/logging/Logger.js.map +1 -0
  155. package/lib/module/ui.js +13 -0
  156. package/lib/module/ui.js.map +1 -0
  157. package/lib/typescript/package.json +1 -0
  158. package/lib/typescript/src/data/cache/MemoryCacheStore.d.ts +12 -0
  159. package/lib/typescript/src/data/cache/MemoryCacheStore.d.ts.map +1 -0
  160. package/lib/typescript/src/data/cache/PersistentCacheStore.d.ts +14 -0
  161. package/lib/typescript/src/data/cache/PersistentCacheStore.d.ts.map +1 -0
  162. package/lib/typescript/src/data/config/ConfigCache.d.ts +15 -0
  163. package/lib/typescript/src/data/config/ConfigCache.d.ts.map +1 -0
  164. package/lib/typescript/src/data/config/ConfigDocumentValidator.d.ts +20 -0
  165. package/lib/typescript/src/data/config/ConfigDocumentValidator.d.ts.map +1 -0
  166. package/lib/typescript/src/data/config/ConfigLoader.d.ts +28 -0
  167. package/lib/typescript/src/data/config/ConfigLoader.d.ts.map +1 -0
  168. package/lib/typescript/src/data/config/ConfigProvider.d.ts +30 -0
  169. package/lib/typescript/src/data/config/ConfigProvider.d.ts.map +1 -0
  170. package/lib/typescript/src/data/config/ConfigResolutionPipeline.d.ts +49 -0
  171. package/lib/typescript/src/data/config/ConfigResolutionPipeline.d.ts.map +1 -0
  172. package/lib/typescript/src/data/config/ConfigValidator.d.ts +10 -0
  173. package/lib/typescript/src/data/config/ConfigValidator.d.ts.map +1 -0
  174. package/lib/typescript/src/data/config/SignatureVerifier.d.ts +16 -0
  175. package/lib/typescript/src/data/config/SignatureVerifier.d.ts.map +1 -0
  176. package/lib/typescript/src/data/config/canonicalize.d.ts +13 -0
  177. package/lib/typescript/src/data/config/canonicalize.d.ts.map +1 -0
  178. package/lib/typescript/src/data/config/sources/EnvironmentOverrideSource.d.ts +17 -0
  179. package/lib/typescript/src/data/config/sources/EnvironmentOverrideSource.d.ts.map +1 -0
  180. package/lib/typescript/src/data/config/sources/LocalConfigSource.d.ts +19 -0
  181. package/lib/typescript/src/data/config/sources/LocalConfigSource.d.ts.map +1 -0
  182. package/lib/typescript/src/data/config/sources/RemoteConfigSource.d.ts +10 -0
  183. package/lib/typescript/src/data/config/sources/RemoteConfigSource.d.ts.map +1 -0
  184. package/lib/typescript/src/data/providers/amazon/AmazonAppstoreProvider.d.ts +9 -0
  185. package/lib/typescript/src/data/providers/amazon/AmazonAppstoreProvider.d.ts.map +1 -0
  186. package/lib/typescript/src/data/providers/apple/AppleStoreProvider.d.ts +19 -0
  187. package/lib/typescript/src/data/providers/apple/AppleStoreProvider.d.ts.map +1 -0
  188. package/lib/typescript/src/data/providers/custom-api/CustomApiProvider.d.ts +14 -0
  189. package/lib/typescript/src/data/providers/custom-api/CustomApiProvider.d.ts.map +1 -0
  190. package/lib/typescript/src/data/providers/firebase-remote-config/FirebaseRemoteConfigProvider.d.ts +9 -0
  191. package/lib/typescript/src/data/providers/firebase-remote-config/FirebaseRemoteConfigProvider.d.ts.map +1 -0
  192. package/lib/typescript/src/data/providers/google-play/GooglePlayProvider.d.ts +22 -0
  193. package/lib/typescript/src/data/providers/google-play/GooglePlayProvider.d.ts.map +1 -0
  194. package/lib/typescript/src/data/providers/huawei/HuaweiAppGalleryProvider.d.ts +14 -0
  195. package/lib/typescript/src/data/providers/huawei/HuaweiAppGalleryProvider.d.ts.map +1 -0
  196. package/lib/typescript/src/data/repositories/VersionRepositoryImpl.d.ts +23 -0
  197. package/lib/typescript/src/data/repositories/VersionRepositoryImpl.d.ts.map +1 -0
  198. package/lib/typescript/src/di/container.d.ts +12 -0
  199. package/lib/typescript/src/di/container.d.ts.map +1 -0
  200. package/lib/typescript/src/domain/IVersionManagerCore.d.ts +30 -0
  201. package/lib/typescript/src/domain/IVersionManagerCore.d.ts.map +1 -0
  202. package/lib/typescript/src/domain/VersionManagerCore.d.ts +94 -0
  203. package/lib/typescript/src/domain/VersionManagerCore.d.ts.map +1 -0
  204. package/lib/typescript/src/domain/engines/decision/DecisionEngine.d.ts +16 -0
  205. package/lib/typescript/src/domain/engines/decision/DecisionEngine.d.ts.map +1 -0
  206. package/lib/typescript/src/domain/engines/policy/IUpdatePolicyEngine.d.ts +17 -0
  207. package/lib/typescript/src/domain/engines/policy/IUpdatePolicyEngine.d.ts.map +1 -0
  208. package/lib/typescript/src/domain/engines/policy/PolicyEngine.d.ts +16 -0
  209. package/lib/typescript/src/domain/engines/policy/PolicyEngine.d.ts.map +1 -0
  210. package/lib/typescript/src/domain/engines/semver/IVersionComparator.d.ts +7 -0
  211. package/lib/typescript/src/domain/engines/semver/IVersionComparator.d.ts.map +1 -0
  212. package/lib/typescript/src/domain/engines/semver/SemVerEngine.d.ts +11 -0
  213. package/lib/typescript/src/domain/engines/semver/SemVerEngine.d.ts.map +1 -0
  214. package/lib/typescript/src/domain/errors/VersionManagerException.d.ts +97 -0
  215. package/lib/typescript/src/domain/errors/VersionManagerException.d.ts.map +1 -0
  216. package/lib/typescript/src/domain/models/ActionPlan.d.ts +15 -0
  217. package/lib/typescript/src/domain/models/ActionPlan.d.ts.map +1 -0
  218. package/lib/typescript/src/domain/models/ConfigDocument.d.ts +86 -0
  219. package/lib/typescript/src/domain/models/ConfigDocument.d.ts.map +1 -0
  220. package/lib/typescript/src/domain/models/Events.d.ts +39 -0
  221. package/lib/typescript/src/domain/models/Events.d.ts.map +1 -0
  222. package/lib/typescript/src/domain/models/LifecycleState.d.ts +18 -0
  223. package/lib/typescript/src/domain/models/LifecycleState.d.ts.map +1 -0
  224. package/lib/typescript/src/domain/models/ParsedVersion.d.ts +9 -0
  225. package/lib/typescript/src/domain/models/ParsedVersion.d.ts.map +1 -0
  226. package/lib/typescript/src/domain/models/PlatformId.d.ts +3 -0
  227. package/lib/typescript/src/domain/models/PlatformId.d.ts.map +1 -0
  228. package/lib/typescript/src/domain/models/PublicApiOptions.d.ts +13 -0
  229. package/lib/typescript/src/domain/models/PublicApiOptions.d.ts.map +1 -0
  230. package/lib/typescript/src/domain/models/RemoteVersionInfo.d.ts +21 -0
  231. package/lib/typescript/src/domain/models/RemoteVersionInfo.d.ts.map +1 -0
  232. package/lib/typescript/src/domain/models/StoreLookup.d.ts +12 -0
  233. package/lib/typescript/src/domain/models/StoreLookup.d.ts.map +1 -0
  234. package/lib/typescript/src/domain/models/Unsubscribe.d.ts +2 -0
  235. package/lib/typescript/src/domain/models/Unsubscribe.d.ts.map +1 -0
  236. package/lib/typescript/src/domain/models/UpdateInfo.d.ts +11 -0
  237. package/lib/typescript/src/domain/models/UpdateInfo.d.ts.map +1 -0
  238. package/lib/typescript/src/domain/models/VersionManagerOptions.d.ts +149 -0
  239. package/lib/typescript/src/domain/models/VersionManagerOptions.d.ts.map +1 -0
  240. package/lib/typescript/src/domain/ports/ICacheStore.d.ts +6 -0
  241. package/lib/typescript/src/domain/ports/ICacheStore.d.ts.map +1 -0
  242. package/lib/typescript/src/domain/ports/IClock.d.ts +4 -0
  243. package/lib/typescript/src/domain/ports/IClock.d.ts.map +1 -0
  244. package/lib/typescript/src/domain/ports/IConfigProvider.d.ts +11 -0
  245. package/lib/typescript/src/domain/ports/IConfigProvider.d.ts.map +1 -0
  246. package/lib/typescript/src/domain/ports/IConfigSources.d.ts +25 -0
  247. package/lib/typescript/src/domain/ports/IConfigSources.d.ts.map +1 -0
  248. package/lib/typescript/src/domain/ports/IPlatformBridge.d.ts +77 -0
  249. package/lib/typescript/src/domain/ports/IPlatformBridge.d.ts.map +1 -0
  250. package/lib/typescript/src/domain/ports/IStoreProvider.d.ts +7 -0
  251. package/lib/typescript/src/domain/ports/IStoreProvider.d.ts.map +1 -0
  252. package/lib/typescript/src/domain/ports/IVersionRepository.d.ts +8 -0
  253. package/lib/typescript/src/domain/ports/IVersionRepository.d.ts.map +1 -0
  254. package/lib/typescript/src/domain/statemachine/LifecycleStateMachine.d.ts +25 -0
  255. package/lib/typescript/src/domain/statemachine/LifecycleStateMachine.d.ts.map +1 -0
  256. package/lib/typescript/src/domain/usecases/CheckForUpdatesUseCase.d.ts +30 -0
  257. package/lib/typescript/src/domain/usecases/CheckForUpdatesUseCase.d.ts.map +1 -0
  258. package/lib/typescript/src/domain/usecases/ForceTriggerUpdateUseCase.d.ts +17 -0
  259. package/lib/typescript/src/domain/usecases/ForceTriggerUpdateUseCase.d.ts.map +1 -0
  260. package/lib/typescript/src/domain/usecases/ResetIgnoredVersionsUseCase.d.ts +7 -0
  261. package/lib/typescript/src/domain/usecases/ResetIgnoredVersionsUseCase.d.ts.map +1 -0
  262. package/lib/typescript/src/index.d.ts +17 -0
  263. package/lib/typescript/src/index.d.ts.map +1 -0
  264. package/lib/typescript/src/platform/contracts/IPlatformBridge.d.ts +2 -0
  265. package/lib/typescript/src/platform/contracts/IPlatformBridge.d.ts.map +1 -0
  266. package/lib/typescript/src/platform/createPlatformBridge.d.ts +12 -0
  267. package/lib/typescript/src/platform/createPlatformBridge.d.ts.map +1 -0
  268. package/lib/typescript/src/platform/createPlatformBridge.native.d.ts +4 -0
  269. package/lib/typescript/src/platform/createPlatformBridge.native.d.ts.map +1 -0
  270. package/lib/typescript/src/platform/native/NativePlatformBridge.d.ts +17 -0
  271. package/lib/typescript/src/platform/native/NativePlatformBridge.d.ts.map +1 -0
  272. package/lib/typescript/src/platform/native/NativeVersionCheck.d.ts +45 -0
  273. package/lib/typescript/src/platform/native/NativeVersionCheck.d.ts.map +1 -0
  274. package/lib/typescript/src/platform/web/WebPlatformBridge.d.ts +17 -0
  275. package/lib/typescript/src/platform/web/WebPlatformBridge.d.ts.map +1 -0
  276. package/lib/typescript/src/presentation/components/ForceUpdateScreen.d.ts +12 -0
  277. package/lib/typescript/src/presentation/components/ForceUpdateScreen.d.ts.map +1 -0
  278. package/lib/typescript/src/presentation/components/OptionalUpdateBanner.d.ts +12 -0
  279. package/lib/typescript/src/presentation/components/OptionalUpdateBanner.d.ts.map +1 -0
  280. package/lib/typescript/src/presentation/components/SoftUpdateDialog.d.ts +14 -0
  281. package/lib/typescript/src/presentation/components/SoftUpdateDialog.d.ts.map +1 -0
  282. package/lib/typescript/src/presentation/hooks/VersionManagerProvider.d.ts +9 -0
  283. package/lib/typescript/src/presentation/hooks/VersionManagerProvider.d.ts.map +1 -0
  284. package/lib/typescript/src/presentation/hooks/context.d.ts +3 -0
  285. package/lib/typescript/src/presentation/hooks/context.d.ts.map +1 -0
  286. package/lib/typescript/src/presentation/hooks/useUpdateState.d.ts +17 -0
  287. package/lib/typescript/src/presentation/hooks/useUpdateState.d.ts.map +1 -0
  288. package/lib/typescript/src/presentation/hooks/useVersionManager.d.ts +22 -0
  289. package/lib/typescript/src/presentation/hooks/useVersionManager.d.ts.map +1 -0
  290. package/lib/typescript/src/presentation/state/VersionManagerStore.d.ts +28 -0
  291. package/lib/typescript/src/presentation/state/VersionManagerStore.d.ts.map +1 -0
  292. package/lib/typescript/src/publicApi.d.ts +24 -0
  293. package/lib/typescript/src/publicApi.d.ts.map +1 -0
  294. package/lib/typescript/src/shared/eventbus/EventBus.d.ts +21 -0
  295. package/lib/typescript/src/shared/eventbus/EventBus.d.ts.map +1 -0
  296. package/lib/typescript/src/shared/logging/Logger.d.ts +17 -0
  297. package/lib/typescript/src/shared/logging/Logger.d.ts.map +1 -0
  298. package/lib/typescript/src/ui.d.ts +15 -0
  299. package/lib/typescript/src/ui.d.ts.map +1 -0
  300. package/package.json +192 -0
  301. package/src/data/cache/MemoryCacheStore.ts +36 -0
  302. package/src/data/cache/PersistentCacheStore.ts +63 -0
  303. package/src/data/config/ConfigCache.ts +30 -0
  304. package/src/data/config/ConfigDocumentValidator.ts +309 -0
  305. package/src/data/config/ConfigLoader.ts +105 -0
  306. package/src/data/config/ConfigProvider.ts +84 -0
  307. package/src/data/config/ConfigResolutionPipeline.ts +424 -0
  308. package/src/data/config/ConfigValidator.ts +79 -0
  309. package/src/data/config/SignatureVerifier.ts +90 -0
  310. package/src/data/config/canonicalize.ts +111 -0
  311. package/src/data/config/sources/EnvironmentOverrideSource.ts +22 -0
  312. package/src/data/config/sources/LocalConfigSource.ts +24 -0
  313. package/src/data/config/sources/RemoteConfigSource.ts +41 -0
  314. package/src/data/providers/amazon/AmazonAppstoreProvider.ts +16 -0
  315. package/src/data/providers/apple/AppleStoreProvider.ts +94 -0
  316. package/src/data/providers/custom-api/CustomApiProvider.ts +75 -0
  317. package/src/data/providers/firebase-remote-config/FirebaseRemoteConfigProvider.ts +16 -0
  318. package/src/data/providers/google-play/GooglePlayProvider.ts +75 -0
  319. package/src/data/providers/huawei/HuaweiAppGalleryProvider.ts +21 -0
  320. package/src/data/repositories/VersionRepositoryImpl.ts +90 -0
  321. package/src/di/container.ts +128 -0
  322. package/src/domain/IVersionManagerCore.ts +54 -0
  323. package/src/domain/VersionManagerCore.ts +425 -0
  324. package/src/domain/engines/decision/DecisionEngine.ts +47 -0
  325. package/src/domain/engines/policy/IUpdatePolicyEngine.ts +18 -0
  326. package/src/domain/engines/policy/PolicyEngine.ts +60 -0
  327. package/src/domain/engines/semver/IVersionComparator.ts +7 -0
  328. package/src/domain/engines/semver/SemVerEngine.ts +200 -0
  329. package/src/domain/errors/VersionManagerException.ts +166 -0
  330. package/src/domain/models/ActionPlan.ts +17 -0
  331. package/src/domain/models/ConfigDocument.ts +97 -0
  332. package/src/domain/models/Events.ts +48 -0
  333. package/src/domain/models/LifecycleState.ts +50 -0
  334. package/src/domain/models/ParsedVersion.ts +8 -0
  335. package/src/domain/models/PlatformId.ts +9 -0
  336. package/src/domain/models/PublicApiOptions.ts +14 -0
  337. package/src/domain/models/RemoteVersionInfo.ts +23 -0
  338. package/src/domain/models/StoreLookup.ts +12 -0
  339. package/src/domain/models/Unsubscribe.ts +1 -0
  340. package/src/domain/models/UpdateInfo.ts +11 -0
  341. package/src/domain/models/VersionManagerOptions.ts +150 -0
  342. package/src/domain/ports/ICacheStore.ts +5 -0
  343. package/src/domain/ports/IClock.ts +3 -0
  344. package/src/domain/ports/IConfigProvider.ts +18 -0
  345. package/src/domain/ports/IConfigSources.ts +44 -0
  346. package/src/domain/ports/IPlatformBridge.ts +97 -0
  347. package/src/domain/ports/IStoreProvider.ts +12 -0
  348. package/src/domain/ports/IVersionRepository.ts +14 -0
  349. package/src/domain/statemachine/LifecycleStateMachine.ts +76 -0
  350. package/src/domain/usecases/CheckForUpdatesUseCase.ts +63 -0
  351. package/src/domain/usecases/ForceTriggerUpdateUseCase.ts +35 -0
  352. package/src/domain/usecases/ResetIgnoredVersionsUseCase.ts +26 -0
  353. package/src/index.tsx +84 -0
  354. package/src/platform/contracts/IPlatformBridge.ts +14 -0
  355. package/src/platform/createPlatformBridge.native.ts +7 -0
  356. package/src/platform/createPlatformBridge.ts +15 -0
  357. package/src/platform/native/NativePlatformBridge.ts +179 -0
  358. package/src/platform/native/NativeVersionCheck.ts +64 -0
  359. package/src/platform/web/WebPlatformBridge.ts +347 -0
  360. package/src/presentation/components/ForceUpdateScreen.tsx +64 -0
  361. package/src/presentation/components/OptionalUpdateBanner.tsx +53 -0
  362. package/src/presentation/components/SoftUpdateDialog.tsx +84 -0
  363. package/src/presentation/hooks/VersionManagerProvider.tsx +23 -0
  364. package/src/presentation/hooks/context.ts +6 -0
  365. package/src/presentation/hooks/useUpdateState.ts +50 -0
  366. package/src/presentation/hooks/useVersionManager.ts +68 -0
  367. package/src/presentation/state/VersionManagerStore.ts +72 -0
  368. package/src/publicApi.ts +126 -0
  369. package/src/shared/eventbus/EventBus.ts +56 -0
  370. package/src/shared/logging/Logger.ts +70 -0
  371. package/src/ui.tsx +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigCache.d.ts","sourceRoot":"","sources":["../../../../../src/data/config/ConfigCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAC9F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAI3E;;;;GAIG;AACH,qBAAa,WAAY,YAAW,YAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,gBAAgB;IAEhD,YAAY,IAAI,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAY5D,YAAY,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxE"}
@@ -0,0 +1,20 @@
1
+ import type { BoundaryValidationResult, RawConfigDocument, SchemaValidationResult } from '../../domain/models/ConfigDocument';
2
+ import type { IConfigValidator } from '../../domain/ports/IConfigSources';
3
+ /** Doc 03 §2.2 — serialized document size cap, enforced before parsing even begins. */
4
+ export declare const CONFIG_ENVELOPE_MAX_BYTES: number;
5
+ /**
6
+ * Hand-rolled, zero-dependency structural validator (Prompt 1 §9.3 — no ajv) that walks
7
+ * a SignedConfigEnvelope against the JSON Schema in doc 03 §6: required-field presence,
8
+ * type checks, enum membership, and additionalProperties:false at every level (unknown
9
+ * fields are rejected, not silently ignored — §2.1's downgrade-attack rationale).
10
+ */
11
+ export declare class ConfigDocumentValidator implements IConfigValidator {
12
+ validateSchema(doc: RawConfigDocument): SchemaValidationResult;
13
+ validateBoundaries(doc: RawConfigDocument): BoundaryValidationResult;
14
+ private isValidSemVer;
15
+ private checkStoreShape;
16
+ private validatePayloadShape;
17
+ private requireField;
18
+ private checkAdditionalProperties;
19
+ }
20
+ //# sourceMappingURL=ConfigDocumentValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigDocumentValidator.d.ts","sourceRoot":"","sources":["../../../../../src/data/config/ConfigDocumentValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,uFAAuF;AACvF,eAAO,MAAM,yBAAyB,QAAY,CAAC;AAcnD;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D,cAAc,CAAC,GAAG,EAAE,iBAAiB,GAAG,sBAAsB;IA0E9D,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,wBAAwB;IAkHpE,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,yBAAyB;CAYlC"}
@@ -0,0 +1,28 @@
1
+ import type { ConfigLoadRequest } from '../../domain/models/ConfigDocument';
2
+ import type { IConfigProvider } from '../../domain/ports/IConfigProvider';
3
+ import type { Unsubscribe } from '../../domain/models/Unsubscribe';
4
+ import type { ResolvedVersionManagerConfig, VersionManagerOptions } from '../../domain/models/VersionManagerOptions';
5
+ import type { ConfigResolutionPipeline } from './ConfigResolutionPipeline';
6
+ /**
7
+ * Synchronous default-merge (doc 03 §4.2 tier 4 only). Kept as a plain function, not
8
+ * just a method on ConfigLoader, so the DI composition root (src/di/container.ts) can
9
+ * validate + resolve synchronously at configure()-time (doc 02 §1.3's fail-fast
10
+ * requirement) without awaiting a Promise, and so ConfigResolutionPipeline can call it
11
+ * as its always-valid tier-4 floor (doc 03 §7.2's termination guarantee).
12
+ */
13
+ export declare function resolveConfigSync(defaults: VersionManagerOptions): ResolvedVersionManagerConfig;
14
+ /**
15
+ * Doc 03 §0's IConfigProvider implementation — thin wrapper around
16
+ * ConfigResolutionPipeline that adds change-detection so subscribe() only fires when a
17
+ * later resolution actually differs from the last one (§4.4 hot-update contract).
18
+ */
19
+ export declare class ConfigLoader implements IConfigProvider {
20
+ private readonly pipeline?;
21
+ private readonly listeners;
22
+ private lastResolved;
23
+ constructor(pipeline?: ConfigResolutionPipeline | undefined);
24
+ resolve(defaults: VersionManagerOptions): Promise<ResolvedVersionManagerConfig>;
25
+ load(request: ConfigLoadRequest): Promise<ResolvedVersionManagerConfig>;
26
+ subscribe(listener: (config: ResolvedVersionManagerConfig) => void): Unsubscribe;
27
+ }
28
+ //# sourceMappingURL=ConfigLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../../../../src/data/config/ConfigLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EACV,4BAA4B,EAC5B,qBAAqB,EACtB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,qBAAqB,GAC9B,4BAA4B,CAsC9B;AAED;;;;GAIG;AACH,qBAAa,YAAa,YAAW,eAAe;IAMtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IALtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAEtB;IACJ,OAAO,CAAC,YAAY,CAA6C;gBAEpC,QAAQ,CAAC,EAAE,wBAAwB,YAAA;IAE1D,OAAO,CACX,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,4BAA4B,CAAC;IAelC,IAAI,CACR,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,4BAA4B,CAAC;IAIxC,SAAS,CACP,QAAQ,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,GACvD,WAAW;CAMf"}
@@ -0,0 +1,30 @@
1
+ import type { ConfigResolutionPipelineDeps } from './ConfigResolutionPipeline';
2
+ import type { ConfigLoadRequest } from '../../domain/models/ConfigDocument';
3
+ import type { IConfigProvider } from '../../domain/ports/IConfigProvider';
4
+ import type { Unsubscribe } from '../../domain/ports/IPlatformBridge';
5
+ import type { ResolvedVersionManagerConfig, VersionManagerOptions } from '../../domain/models/VersionManagerOptions';
6
+ export interface ConfigProviderDeps extends ConfigResolutionPipelineDeps {
7
+ /** Background remote-refresh cadence for subscribe() (doc 03 §4.4). 0/undefined disables polling — resolve() still works. */
8
+ readonly refreshIntervalMs?: number;
9
+ }
10
+ /**
11
+ * IConfigProvider adapter around ConfigResolutionPipeline — resolve()/load() delegate
12
+ * straight through, and subscribe() adds the doc 03 §4.4 "hot-update" behavior the raw
13
+ * pipeline doesn't provide on its own: a background poll that re-runs resolution and
14
+ * notifies listeners only when the resolved config actually changed.
15
+ */
16
+ export declare class ConfigProvider implements IConfigProvider {
17
+ private readonly pipeline;
18
+ private readonly refreshIntervalMs;
19
+ private readonly listeners;
20
+ private timer;
21
+ private lastConfig;
22
+ private lastOptions;
23
+ constructor(deps: ConfigProviderDeps);
24
+ resolve(defaults: VersionManagerOptions): Promise<ResolvedVersionManagerConfig>;
25
+ load(request: ConfigLoadRequest): Promise<ResolvedVersionManagerConfig>;
26
+ subscribe(listener: (config: ResolvedVersionManagerConfig) => void): Unsubscribe;
27
+ private ensurePolling;
28
+ private refresh;
29
+ }
30
+ //# sourceMappingURL=ConfigProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigProvider.d.ts","sourceRoot":"","sources":["../../../../../src/data/config/ConfigProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EACV,4BAA4B,EAC5B,qBAAqB,EACtB,MAAM,2CAA2C,CAAC;AAEnD,MAAM,WAAW,kBAAmB,SAAQ,4BAA4B;IACtE,6HAA6H;IAC7H,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAEtB;IACJ,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,WAAW,CAAsC;gBAE7C,IAAI,EAAE,kBAAkB;IAK9B,OAAO,CACX,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,4BAA4B,CAAC;IAOxC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAIvE,SAAS,CACP,QAAQ,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,GACvD,WAAW;IAYd,OAAO,CAAC,aAAa;YAOP,OAAO;CAatB"}
@@ -0,0 +1,49 @@
1
+ import type { ConfigTier } from '../../domain/models/ConfigDocument';
2
+ import type { VersionManagerException } from '../../domain/errors/VersionManagerException';
3
+ import type { IConfigCache, IConfigValidator, IEnvironmentOverrideSource, ILocalConfigSource, IRemoteConfigSource, ISignatureVerifier } from '../../domain/ports/IConfigSources';
4
+ import type { IClock } from '../../domain/ports/IClock';
5
+ import type { ResolvedVersionManagerConfig, VersionManagerOptions } from '../../domain/models/VersionManagerOptions';
6
+ export interface ConfigResolutionPipelineDeps {
7
+ readonly local: ILocalConfigSource;
8
+ readonly remote: IRemoteConfigSource;
9
+ readonly envOverrides: IEnvironmentOverrideSource;
10
+ readonly cache: IConfigCache;
11
+ readonly validator: IConfigValidator;
12
+ readonly signatureVerifier: ISignatureVerifier;
13
+ readonly clock: IClock;
14
+ /** §7.4 — default 5, configurable. */
15
+ readonly circuitBreakerThreshold?: number;
16
+ /** §7.4 cool-down window once the breaker trips. */
17
+ readonly circuitBreakerCooldownMs?: number;
18
+ readonly onError?: (error: VersionManagerException) => void;
19
+ }
20
+ export interface ConfigResolutionResult {
21
+ readonly config: ResolvedVersionManagerConfig;
22
+ readonly tier: ConfigTier;
23
+ }
24
+ /**
25
+ * Doc 03's ConfigResolutionPipeline — orchestrates §3.2 (schema -> boundary -> signature
26
+ * validation), §4.2 (per-field precedence merge, env > remote > local > default), §4.3
27
+ * (access path), §7.2 (cascading fallback), §7.3 (field vs whole-document fallback), and
28
+ * §7.4 (quarantine + circuit breaker). Lives in src/data/config/ per doc 03 §0.
29
+ */
30
+ export declare class ConfigResolutionPipeline {
31
+ private readonly deps;
32
+ private readonly quarantinedFingerprints;
33
+ private consecutiveRemoteFailures;
34
+ private circuitOpenUntil;
35
+ constructor(deps: ConfigResolutionPipelineDeps);
36
+ resolve(defaults: VersionManagerOptions): Promise<ConfigResolutionResult>;
37
+ private readLocal;
38
+ private readRemote;
39
+ private recordRemoteFailure;
40
+ /**
41
+ * §3.2 sequence: schema -> boundary -> canonicalize -> verify signature. Returns the
42
+ * validated payload (with any boundary-failed fields stripped per §7.3's field-level
43
+ * fallback) or null if the whole document must be rejected (schema failure or
44
+ * signature failure — §7.3's whole-document fallback).
45
+ */
46
+ private validateAndVerify;
47
+ private report;
48
+ }
49
+ //# sourceMappingURL=ConfigResolutionPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigResolutionPipeline.d.ts","sourceRoot":"","sources":["../../../../../src/data/config/ConfigResolutionPipeline.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,oCAAoC,CAAC;AAS5C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EACV,4BAA4B,EAC5B,qBAAqB,EACtB,MAAM,2CAA2C,CAAC;AAEnD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,0BAA0B,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED;;;;;GAKG;AACH,qBAAa,wBAAwB;IAKvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAqB;IAC7D,OAAO,CAAC,yBAAyB,CAAK;IACtC,OAAO,CAAC,gBAAgB,CAAK;gBAEA,IAAI,EAAE,4BAA4B;IAEzD,OAAO,CACX,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,sBAAsB,CAAC;YAmDpB,SAAS;YAUT,UAAU;IAoDxB,OAAO,CAAC,mBAAmB;IAS3B;;;;;OAKG;YACW,iBAAiB;IAiF/B,OAAO,CAAC,MAAM;CAYf"}
@@ -0,0 +1,10 @@
1
+ import type { VersionManagerOptions } from '../../domain/models/VersionManagerOptions';
2
+ /**
3
+ * Boundary validation (Prompt 3 §2.2) for the "default fallback" config tier — the
4
+ * VersionManagerOptions object passed to configure(). Full JSON-Schema structural
5
+ * validation and signature verification for local/remote config documents (Prompt 3
6
+ * §2.1, §3) are scoped to the not-yet-built config-document pipeline; see
7
+ * docs/architecture/03-configuration-system.md.
8
+ */
9
+ export declare function validateOptions(options: VersionManagerOptions): void;
10
+ //# sourceMappingURL=ConfigValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigValidator.d.ts","sourceRoot":"","sources":["../../../../../src/data/config/ConfigValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAEvF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAmEpE"}
@@ -0,0 +1,16 @@
1
+ import type { SignatureVerificationResult, SignedConfigEnvelope, TrustedKeySet } from '../../domain/models/ConfigDocument';
2
+ import type { ICryptoProvider } from '../../domain/ports/IPlatformBridge';
3
+ import type { ISignatureVerifier } from '../../domain/ports/IConfigSources';
4
+ /**
5
+ * Doc 03 §3.2/§3.4 — verification calls are implemented using OS-provided cryptography
6
+ * exclusively (iOS CryptoKit/Security.framework, Android java.security), reached through
7
+ * IPlatformBridge.crypto (ICryptoProvider) so this class never itself hand-rolls
8
+ * cryptographic primitives (Prompt 1 §9.3's zero-external-dependency constraint extends
9
+ * to "don't implement crypto in JS either" — only OS APIs are trusted for this).
10
+ */
11
+ export declare class SignatureVerifier implements ISignatureVerifier {
12
+ private readonly crypto?;
13
+ constructor(crypto?: ICryptoProvider | undefined);
14
+ verify(envelope: SignedConfigEnvelope, trustedKeys: TrustedKeySet): Promise<SignatureVerificationResult>;
15
+ }
16
+ //# sourceMappingURL=SignatureVerifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureVerifier.d.ts","sourceRoot":"","sources":["../../../../../src/data/config/SignatureVerifier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,2BAA2B,EAC3B,oBAAoB,EACpB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAQ5E;;;;;;GAMG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAP,MAAM,CAAC,EAAE,eAAe,YAAA;IAE/C,MAAM,CACV,QAAQ,EAAE,oBAAoB,EAC9B,WAAW,EAAE,aAAa,GACzB,OAAO,CAAC,2BAA2B,CAAC;CA6DxC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Hand-rolled canonicalizer (Prompt 1 §9.3 zero-dependency constraint), implementing the
3
+ * same principles as RFC 8785 (JSON Canonicalization Scheme) that doc 03 §3.3 calls for:
4
+ * recursive key sorting by UTF-16 code unit order, fixed number formatting, no
5
+ * insignificant whitespace. Signatures are computed/verified over this canonical byte
6
+ * form so that whitespace/key-order differences in transit never invalidate a
7
+ * legitimately signed document.
8
+ */
9
+ /** Canonical byte sequence (as a UTF-8 string) for the given JSON-compatible value. */
10
+ export declare function canonicalize(value: unknown): string;
11
+ /** Base64 encoding of the UTF-8 bytes of a string, without relying on Node's Buffer. */
12
+ export declare function utf8ToBase64(input: string): string;
13
+ //# sourceMappingURL=canonicalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonicalize.d.ts","sourceRoot":"","sources":["../../../../../src/data/config/canonicalize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyCH,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYlD"}
@@ -0,0 +1,17 @@
1
+ import type { VersionManagerConfigDocument } from '../../../domain/models/ConfigDocument';
2
+ import type { IEnvironmentOverrideSource } from '../../../domain/ports/IConfigSources';
3
+ /**
4
+ * Doc 03 §4 — "there is no OS process environment on a device"; this tier maps to
5
+ * build-time-injected constants and explicit runtime overrides, not `process.env` on a
6
+ * server. Build-time constants (Info.plist / BuildConfig fields) are app-specific and
7
+ * have no generic cross-platform read path from JS, so this implementation covers the
8
+ * "explicit configure({ configSources: { envOverrides } })" half of §4.1 tier 1 — the
9
+ * build-time-constant half is a per-app integration concern (documented, not a gap in
10
+ * this port's contract, which only promises "read whatever overrides are available").
11
+ */
12
+ export declare class EnvironmentOverrideSource implements IEnvironmentOverrideSource {
13
+ private readonly overrides;
14
+ constructor(overrides: Partial<VersionManagerConfigDocument> | undefined);
15
+ read(): Promise<Partial<VersionManagerConfigDocument>>;
16
+ }
17
+ //# sourceMappingURL=EnvironmentOverrideSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvironmentOverrideSource.d.ts","sourceRoot":"","sources":["../../../../../../src/data/config/sources/EnvironmentOverrideSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAEvF;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,YAAW,0BAA0B;IAExE,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EACxB,OAAO,CAAC,4BAA4B,CAAC,GAAG,SAAS;IAG/C,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;CAG7D"}
@@ -0,0 +1,19 @@
1
+ import type { RawConfigDocument, SignedConfigEnvelope } from '../../../domain/models/ConfigDocument';
2
+ import type { ILocalConfigSource } from '../../../domain/ports/IConfigSources';
3
+ /**
4
+ * Doc 03 §5.1 — the design calls for a native mmap reader (iOS Data(alwaysMapped),
5
+ * Android FileChannel.map) to avoid a double-copy when reading a bundled config asset.
6
+ * This implementation takes a documented, lower-risk equivalent instead: the host app
7
+ * imports its bundled config JSON via Metro/webpack's native JSON module support
8
+ * (`import localConfig from './vm-config.json'`) and passes the parsed envelope through
9
+ * `VersionManagerOptions.configSources.local`. Metro's JSON loader already avoids the
10
+ * page-cache -> native-heap -> JS-heap double copy for typical bundle sizes (the asset
11
+ * is compiled into the JS bundle itself), which satisfies §5.1's actual goal (avoid GC
12
+ * churn against the 5MB budget for a <=64KB document) without a dedicated native reader.
13
+ */
14
+ export declare class LocalConfigSource implements ILocalConfigSource {
15
+ private readonly envelope;
16
+ constructor(envelope: SignedConfigEnvelope | undefined);
17
+ read(): Promise<RawConfigDocument | null>;
18
+ }
19
+ //# sourceMappingURL=LocalConfigSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalConfigSource.d.ts","sourceRoot":"","sources":["../../../../../../src/data/config/sources/LocalConfigSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE/E;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,oBAAoB,GAAG,SAAS;IAEjE,IAAI,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAGhD"}
@@ -0,0 +1,10 @@
1
+ import type { FetchOptions, RawConfigDocument } from '../../../domain/models/ConfigDocument';
2
+ import type { IRemoteConfigSource } from '../../../domain/ports/IConfigSources';
3
+ import type { IHttpClient } from '../../../domain/ports/IPlatformBridge';
4
+ /** Doc 03 §4.3 — the remote-fetch tier, reached through the same IHttpClient port every other network call in this SDK uses. */
5
+ export declare class RemoteConfigSource implements IRemoteConfigSource {
6
+ private readonly http;
7
+ constructor(http: IHttpClient);
8
+ fetch(url: string, options: FetchOptions): Promise<RawConfigDocument>;
9
+ }
10
+ //# sourceMappingURL=RemoteConfigSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteConfigSource.d.ts","sourceRoot":"","sources":["../../../../../../src/data/config/sources/RemoteConfigSource.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEzE,gIAAgI;AAChI,qBAAa,kBAAmB,YAAW,mBAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,WAAW;IAExC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAyB5E"}
@@ -0,0 +1,9 @@
1
+ import type { StoreProviderId } from '../../../domain/models/PlatformId';
2
+ import type { StoreLookupResult } from '../../../domain/models/StoreLookup';
3
+ import type { IStoreProvider } from '../../../domain/ports/IStoreProvider';
4
+ /** Not yet implemented — see Prompt 11 in the design series. */
5
+ export declare class AmazonAppstoreProvider implements IStoreProvider {
6
+ readonly id: StoreProviderId;
7
+ fetchLatestVersionInfo(): Promise<StoreLookupResult>;
8
+ }
9
+ //# sourceMappingURL=AmazonAppstoreProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmazonAppstoreProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/data/providers/amazon/AmazonAppstoreProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,gEAAgE;AAChE,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAY;IAElC,sBAAsB,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAM3D"}
@@ -0,0 +1,19 @@
1
+ import type { StoreProviderId } from '../../../domain/models/PlatformId';
2
+ import type { StoreLookupRequest, StoreLookupResult } from '../../../domain/models/StoreLookup';
3
+ import type { IHttpClient } from '../../../domain/ports/IPlatformBridge';
4
+ import type { IStoreProvider } from '../../../domain/ports/IStoreProvider';
5
+ /**
6
+ * Real implementation against the public iTunes Lookup API (Prompt 10). Accepts either
7
+ * the numeric App Store Connect id (`id=`) or, when the app developer doesn't want to
8
+ * hardcode one, falls back to looking the app up by its own bundle id (`bundleId=`) —
9
+ * the iTunes Lookup API supports both query params equivalently.
10
+ */
11
+ export declare class AppleStoreProvider implements IStoreProvider {
12
+ private readonly http;
13
+ private readonly appStoreId?;
14
+ private readonly region;
15
+ readonly id: StoreProviderId;
16
+ constructor(http: IHttpClient, appStoreId?: string | undefined, region?: string);
17
+ fetchLatestVersionInfo(request: StoreLookupRequest): Promise<StoreLookupResult>;
18
+ }
19
+ //# sourceMappingURL=AppleStoreProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppleStoreProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/data/providers/apple/AppleStoreProvider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAc3E;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAIrD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAW;gBAGpB,IAAI,EAAE,WAAW,EACjB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,MAAM,GAAE,MAAa;IAGlC,sBAAsB,CAC1B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;CAmD9B"}
@@ -0,0 +1,14 @@
1
+ import type { StoreProviderId } from '../../../domain/models/PlatformId';
2
+ import type { StoreLookupRequest, StoreLookupResult } from '../../../domain/models/StoreLookup';
3
+ import type { IHttpClient } from '../../../domain/ports/IPlatformBridge';
4
+ import type { IStoreProvider } from '../../../domain/ports/IStoreProvider';
5
+ /** Generic enterprise/private-distribution provider (Prompt 12). */
6
+ export declare class CustomApiProvider implements IStoreProvider {
7
+ private readonly http;
8
+ private readonly url;
9
+ private readonly headers;
10
+ readonly id: StoreProviderId;
11
+ constructor(http: IHttpClient, url: string, headers?: Readonly<Record<string, string>>);
12
+ fetchLatestVersionInfo(request: StoreLookupRequest): Promise<StoreLookupResult>;
13
+ }
14
+ //# sourceMappingURL=CustomApiProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomApiProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/data/providers/custom-api/CustomApiProvider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAS3E,oEAAoE;AACpE,qBAAa,iBAAkB,YAAW,cAAc;IAIpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAY;gBAGrB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAG3D,sBAAsB,CAC1B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;CA2C9B"}
@@ -0,0 +1,9 @@
1
+ import type { StoreProviderId } from '../../../domain/models/PlatformId';
2
+ import type { StoreLookupResult } from '../../../domain/models/StoreLookup';
3
+ import type { IStoreProvider } from '../../../domain/ports/IStoreProvider';
4
+ /** Not yet implemented — see Prompt 13 in the design series. */
5
+ export declare class FirebaseRemoteConfigProvider implements IStoreProvider {
6
+ readonly id: StoreProviderId;
7
+ fetchLatestVersionInfo(): Promise<StoreLookupResult>;
8
+ }
9
+ //# sourceMappingURL=FirebaseRemoteConfigProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirebaseRemoteConfigProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/data/providers/firebase-remote-config/FirebaseRemoteConfigProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,gEAAgE;AAChE,qBAAa,4BAA6B,YAAW,cAAc;IACjE,QAAQ,CAAC,EAAE,EAAE,eAAe,CAA4B;IAElD,sBAAsB,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAM3D"}
@@ -0,0 +1,22 @@
1
+ import type { StoreProviderId } from '../../../domain/models/PlatformId';
2
+ import type { StoreLookupRequest, StoreLookupResult } from '../../../domain/models/StoreLookup';
3
+ import type { IHttpClient } from '../../../domain/ports/IPlatformBridge';
4
+ import type { IStoreProvider } from '../../../domain/ports/IStoreProvider';
5
+ /**
6
+ * Google Play has no public, unauthenticated lookup API (Prompt 10). This provider is a
7
+ * best-effort parser of the public store listing page's inline JSON blob. It is
8
+ * inherently fragile — Play Store markup can change without notice — and is offered as
9
+ * a pragmatic default; production deployments with a Google Play Developer API service
10
+ * account should prefer a IStoreProvider backed by that authenticated API instead.
11
+ *
12
+ * packageName is optional — on Android the app's own bundle id *is* its package name,
13
+ * so when it's not supplied explicitly this falls back to request.bundleId.
14
+ */
15
+ export declare class GooglePlayProvider implements IStoreProvider {
16
+ private readonly http;
17
+ private readonly packageName?;
18
+ readonly id: StoreProviderId;
19
+ constructor(http: IHttpClient, packageName?: string | undefined);
20
+ fetchLatestVersionInfo(request: StoreLookupRequest): Promise<StoreLookupResult>;
21
+ }
22
+ //# sourceMappingURL=GooglePlayProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GooglePlayProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/data/providers/google-play/GooglePlayProvider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAIrD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAJ/B,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAiB;gBAG1B,IAAI,EAAE,WAAW,EACjB,WAAW,CAAC,EAAE,MAAM,YAAA;IAGjC,sBAAsB,CAC1B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;CAqC9B"}
@@ -0,0 +1,14 @@
1
+ import type { StoreProviderId } from '../../../domain/models/PlatformId';
2
+ import type { StoreLookupResult } from '../../../domain/models/StoreLookup';
3
+ import type { IStoreProvider } from '../../../domain/ports/IStoreProvider';
4
+ /**
5
+ * Not yet implemented — Huawei AppGallery integration is designed in Prompt 11 of this
6
+ * series (AG Connect API parameters, error-code mapping) but not built in this pass.
7
+ * The file exists so the provider is independently importable/tree-shakeable
8
+ * (Prompt 1 §8) without pulling in Apple/Google/Custom code.
9
+ */
10
+ export declare class HuaweiAppGalleryProvider implements IStoreProvider {
11
+ readonly id: StoreProviderId;
12
+ fetchLatestVersionInfo(): Promise<StoreLookupResult>;
13
+ }
14
+ //# sourceMappingURL=HuaweiAppGalleryProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HuaweiAppGalleryProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/data/providers/huawei/HuaweiAppGalleryProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E;;;;;GAKG;AACH,qBAAa,wBAAyB,YAAW,cAAc;IAC7D,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAY;IAElC,sBAAsB,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAM3D"}
@@ -0,0 +1,23 @@
1
+ import type { RemoteVersionInfo, UserVersionDecision, VersionCheckRequest } from '../../domain/models/RemoteVersionInfo';
2
+ import type { ICacheStore } from '../../domain/ports/ICacheStore';
3
+ import type { IClock } from '../../domain/ports/IClock';
4
+ import type { IKeyValueStorage } from '../../domain/ports/IPlatformBridge';
5
+ import type { IStoreProvider } from '../../domain/ports/IStoreProvider';
6
+ import type { IVersionRepository } from '../../domain/ports/IVersionRepository';
7
+ /**
8
+ * Sequential fallback across registered providers (Prompt 14's simpler tier): the first
9
+ * provider to succeed wins. Only providers the host app actually registers via DI
10
+ * reach this list — nothing here imports a provider it doesn't need (Prompt 1 §8).
11
+ */
12
+ export declare class VersionRepositoryImpl implements IVersionRepository {
13
+ private readonly providers;
14
+ private readonly cache;
15
+ private readonly storage;
16
+ private readonly clock;
17
+ constructor(providers: readonly IStoreProvider[], cache: ICacheStore<RemoteVersionInfo>, storage: IKeyValueStorage, clock: IClock);
18
+ getRemoteVersionInfo(request: VersionCheckRequest): Promise<RemoteVersionInfo>;
19
+ getCachedVersionInfo(): Promise<RemoteVersionInfo | null>;
20
+ persistUserDecision(decision: UserVersionDecision): Promise<void>;
21
+ getUserDecision(): Promise<UserVersionDecision | null>;
22
+ }
23
+ //# sourceMappingURL=VersionRepositoryImpl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionRepositoryImpl.d.ts","sourceRoot":"","sources":["../../../../../src/data/repositories/VersionRepositoryImpl.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAKhF;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,kBAAkB;IAE5D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAHL,SAAS,EAAE,SAAS,cAAc,EAAE,EACpC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,EACrC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM;IAG1B,oBAAoB,CACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IAuCvB,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAIzD,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,eAAe,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;CAS7D"}
@@ -0,0 +1,12 @@
1
+ import type { VersionManagerOptions } from '../domain/models/VersionManagerOptions';
2
+ import type { IVersionManagerCore } from '../domain/IVersionManagerCore';
3
+ /**
4
+ * Composition root (Prompt 1 §1.3) — the only file in the codebase that imports both a
5
+ * port and its concrete adapter simultaneously. Only Apple/Google Play/Custom API
6
+ * providers are wired here; Huawei/Amazon/Firebase Remote Config providers exist as
7
+ * independently importable files (Prompt 1 §8) but are intentionally not referenced
8
+ * from this file yet since their implementations are still stubs (see those files'
9
+ * doc comments) — wiring them here would defeat tree-shaking for no behavioral benefit.
10
+ */
11
+ export declare function createVersionManagerCore(options: VersionManagerOptions): IVersionManagerCore;
12
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../src/di/container.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,wCAAwC,CAAC;AAIhD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAIzE;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,qBAAqB,GAC7B,mBAAmB,CAsDrB"}
@@ -0,0 +1,30 @@
1
+ import type { ActionPlan } from './models/ActionPlan';
2
+ import type { StateChangedEvent, UpdateDetectedEvent, UserActionEvent, VersionManagerErrorEvent, VersionManagerEventMap } from './models/Events';
3
+ import type { LifecycleState } from './models/LifecycleState';
4
+ import type { CheckForUpdatesOptions, ForceTriggerOptions, ResetIgnoredVersionsOptions } from './models/PublicApiOptions';
5
+ import type { UpdateInfo } from './models/UpdateInfo';
6
+ import type { Unsubscribe } from './models/Unsubscribe';
7
+ /** Public event subscription surface (Prompt 2 §4.2). */
8
+ export interface IVersionManagerEvents {
9
+ on<K extends keyof VersionManagerEventMap>(event: K, handler: (payload: VersionManagerEventMap[K]) => void): Unsubscribe;
10
+ once<K extends keyof VersionManagerEventMap>(event: K, handler: (payload: VersionManagerEventMap[K]) => void): Unsubscribe;
11
+ off<K extends keyof VersionManagerEventMap>(event: K, handler: (payload: VersionManagerEventMap[K]) => void): void;
12
+ onUpdateDetected(handler: (e: UpdateDetectedEvent) => void): Unsubscribe;
13
+ onUserAction(handler: (e: UserActionEvent) => void): Unsubscribe;
14
+ onError(handler: (e: VersionManagerErrorEvent) => void): Unsubscribe;
15
+ onStateChanged(handler: (e: StateChangedEvent) => void): Unsubscribe;
16
+ }
17
+ /** The single class Domain exposes outward (Prompt 1 §3; full spec in Prompt 2). */
18
+ export interface IVersionManagerCore extends IVersionManagerEvents {
19
+ ready(): Promise<void>;
20
+ checkForUpdates(options?: CheckForUpdatesOptions): Promise<ActionPlan>;
21
+ forceTriggerUpdate(options?: ForceTriggerOptions): Promise<void>;
22
+ resetIgnoredVersions(options?: ResetIgnoredVersionsOptions): Promise<void>;
23
+ getCurrentState(): LifecycleState;
24
+ getUpdateInfo(): UpdateInfo | null;
25
+ isUpdateAvailable(): boolean;
26
+ getActionPlan(): ActionPlan | null;
27
+ getLastCheckedAt(): number | null;
28
+ dispose(): void;
29
+ }
30
+ //# sourceMappingURL=IVersionManagerCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IVersionManagerCore.d.ts","sourceRoot":"","sources":["../../../../src/domain/IVersionManagerCore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACvC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GACpD,WAAW,CAAC;IACf,IAAI,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACzC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GACpD,WAAW,CAAC;IACf,GAAG,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACxC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GACpD,IAAI,CAAC;IAER,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,mBAAmB,KAAK,IAAI,GAAG,WAAW,CAAC;IACzE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,GAAG,WAAW,CAAC;IACjE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,wBAAwB,KAAK,IAAI,GAAG,WAAW,CAAC;IACrE,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,iBAAiB,KAAK,IAAI,GAAG,WAAW,CAAC;CACtE;AAED,oFAAoF;AACpF,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACvE,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,oBAAoB,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3E,eAAe,IAAI,cAAc,CAAC;IAClC,aAAa,IAAI,UAAU,GAAG,IAAI,CAAC;IACnC,iBAAiB,IAAI,OAAO,CAAC;IAC7B,aAAa,IAAI,UAAU,GAAG,IAAI,CAAC;IACnC,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAAC;IAElC,OAAO,IAAI,IAAI,CAAC;CACjB"}
@@ -0,0 +1,94 @@
1
+ import type { DecisionEngine } from './engines/decision/DecisionEngine';
2
+ import type { IUpdatePolicyEngine } from './engines/policy/IUpdatePolicyEngine';
3
+ import type { IVersionComparator } from './engines/semver/IVersionComparator';
4
+ import type { ActionPlan } from './models/ActionPlan';
5
+ import type { StateChangedEvent, UpdateDetectedEvent, UserActionEvent, VersionManagerErrorEvent, VersionManagerEventMap } from './models/Events';
6
+ import { LifecycleState } from './models/LifecycleState';
7
+ import type { CheckForUpdatesOptions, ForceTriggerOptions, ResetIgnoredVersionsOptions } from './models/PublicApiOptions';
8
+ import type { ResolvedVersionManagerConfig } from './models/VersionManagerOptions';
9
+ import type { UpdateInfo } from './models/UpdateInfo';
10
+ import type { Unsubscribe } from './models/Unsubscribe';
11
+ import type { IVersionManagerCore } from './IVersionManagerCore';
12
+ import type { IClock } from './ports/IClock';
13
+ import type { IConfigProvider } from './ports/IConfigProvider';
14
+ import type { IPlatformBridge } from './ports/IPlatformBridge';
15
+ import type { IVersionRepository } from './ports/IVersionRepository';
16
+ import type { IEventBus } from '../shared/eventbus/EventBus';
17
+ import type { ILifecycleStateMachine } from './statemachine/LifecycleStateMachine';
18
+ import type { VersionManagerOptions } from './models/VersionManagerOptions';
19
+ export interface VersionManagerCoreDeps {
20
+ /** Tier-4-only synchronous resolution (doc 02 §1.3 fail-fast) — used to bootstrap
21
+ * before configProvider's full async pipeline (doc 03) resolves, and as the
22
+ * always-available fallback floor. */
23
+ readonly config: ResolvedVersionManagerConfig;
24
+ readonly rawOptions: VersionManagerOptions;
25
+ readonly platformBridge: IPlatformBridge;
26
+ readonly repository: IVersionRepository;
27
+ readonly comparator: IVersionComparator;
28
+ readonly policyEngine: IUpdatePolicyEngine;
29
+ readonly decisionEngine: DecisionEngine;
30
+ readonly eventBus: IEventBus<VersionManagerEventMap>;
31
+ readonly clock: IClock;
32
+ readonly stateMachine?: ILifecycleStateMachine;
33
+ /** Doc 03 full local/remote/env resolution pipeline — optional so tests/simple
34
+ * wiring can omit it and run on tier-4-only config, same as before this pass. */
35
+ readonly configProvider?: IConfigProvider;
36
+ }
37
+ /**
38
+ * The concrete IVersionManagerCore. Composed entirely from ports and other domain
39
+ * constructs (Prompt 1 §1.3) — every concrete adapter (repository impl, platform
40
+ * bridge impl) is injected by src/di/container.ts, never imported here directly.
41
+ */
42
+ export declare class VersionManagerCore implements IVersionManagerCore {
43
+ private readonly deps;
44
+ private readonly stateMachine;
45
+ private readonly checkUseCase;
46
+ private readonly resetUseCase;
47
+ private readonly forceUseCase;
48
+ private readonly readyPromise;
49
+ /**
50
+ * Mutable, doc 03 §4.4 "hot-update" target — starts at the tier-4-only sync
51
+ * resolution and is replaced (not merged in place — a fresh immutable object each
52
+ * time) once configProvider's full pipeline resolves, and again on every subsequent
53
+ * subscribe() notification. In-flight operations keep whatever reference they already
54
+ * captured; only the *next* operation observes an update, matching §4.4's guarantee.
55
+ */
56
+ private currentConfig;
57
+ private lastActionPlan;
58
+ private lastCheckedAt;
59
+ private inFlightCheck;
60
+ /**
61
+ * Non-persisted rollout bucket (0-99), stable for the process lifetime only.
62
+ * A device-stable bucket derived from a persisted installation id is Prompt 18
63
+ * scope — this is a documented simplification, not the final design.
64
+ */
65
+ private rolloutBucket;
66
+ constructor(deps: VersionManagerCoreDeps);
67
+ private initialize;
68
+ ready(): Promise<void>;
69
+ checkForUpdates(options?: CheckForUpdatesOptions): Promise<ActionPlan>;
70
+ private runCheck;
71
+ private runFallback;
72
+ private applyPlan;
73
+ private stateForActionType;
74
+ forceTriggerUpdate(_options?: ForceTriggerOptions): Promise<void>;
75
+ resetIgnoredVersions(options?: ResetIgnoredVersionsOptions): Promise<void>;
76
+ getCurrentState(): LifecycleState;
77
+ getUpdateInfo(): UpdateInfo | null;
78
+ isUpdateAvailable(): boolean;
79
+ getActionPlan(): ActionPlan | null;
80
+ getLastCheckedAt(): number | null;
81
+ on<K extends keyof VersionManagerEventMap>(event: K, handler: (payload: VersionManagerEventMap[K]) => void): Unsubscribe;
82
+ once<K extends keyof VersionManagerEventMap>(event: K, handler: (payload: VersionManagerEventMap[K]) => void): Unsubscribe;
83
+ off<K extends keyof VersionManagerEventMap>(event: K, handler: (payload: VersionManagerEventMap[K]) => void): void;
84
+ onUpdateDetected(handler: (e: UpdateDetectedEvent) => void): Unsubscribe;
85
+ onUserAction(handler: (e: UserActionEvent) => void): Unsubscribe;
86
+ onError(handler: (e: VersionManagerErrorEvent) => void): Unsubscribe;
87
+ onStateChanged(handler: (e: StateChangedEvent) => void): Unsubscribe;
88
+ dispose(): void;
89
+ private resolveCurrentVersion;
90
+ private getRolloutBucket;
91
+ private publishError;
92
+ private tryTransition;
93
+ }
94
+ //# sourceMappingURL=VersionManagerCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionManagerCore.d.ts","sourceRoot":"","sources":["../../../../src/domain/VersionManagerCore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { IClock } from '../../ports/IClock';
2
+ import { ActionType } from '../../models/ActionPlan';
3
+ import type { ActionPlan } from '../../models/ActionPlan';
4
+ import type { RemoteVersionInfo } from '../../models/RemoteVersionInfo';
5
+ /**
6
+ * Assembles the final ActionPlan (with a fully-populated UpdateInfo, when relevant)
7
+ * from a PolicyEngine classification. Kept separate from PolicyEngine per the Prompt 7
8
+ * Decision Engine split in docs/architecture/01 §5.3 — this is the orchestration step,
9
+ * not the rule evaluation step.
10
+ */
11
+ export declare class DecisionEngine {
12
+ private readonly clock;
13
+ constructor(clock: IClock);
14
+ buildActionPlan(actionType: ActionType, currentVersion: string, remote: RemoteVersionInfo | null): ActionPlan;
15
+ }
16
+ //# sourceMappingURL=DecisionEngine.d.ts.map