Require encryption setup for synchronized offline mode - #60
Conversation
✅ Deploy Preview for rdlabo-ionic-angular-library ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
| /** Read-cache-only mode does not provision an encrypted native Outbox database. */ | ||
| createEncryptionKey?: never; |
There was a problem hiding this comment.
🔴 読み取りキャッシュ専用の設定でiOS/Androidの端末内データベースを開けなくなる
読み取りキャッシュ専用モードで暗号鍵の指定が禁止された(createEncryptionKey?: never at projects/kit/offline/src/lib/offline-provider.ts:53)ため、iOS/Androidの端末内データベースを初回に開く時点で鍵が用意できず、起動処理が失敗します。
Impact: 読み取りキャッシュ専用として導入しているアプリは、iOS/Androidで起動時にエラーとなりオフライン機能が全く使えなくなります。
ネイティブ端末ではモードに関わらず暗号化SQLiteが利用される仕組み
provideOffline のリポジトリ選択 (projects/kit/offline/src/lib/offline-provider.ts:100-103) は selectOfflineRepository (projects/kit/offline/src/lib/offline-repository.ts:197-203) を使い、プラットフォームが ios/android なら SqliteOfflineRepository を返します。モード判定は入りません。SqliteOfflineRepository.#open は createEncryptionKey をそのままドライバへ渡し (projects/kit/offline/src/lib/sqlite-offline-repository.ts:445-448)、初回オープン時に鍵が未取得だと Native offline storage requires a non-empty encryption key on first open を投げます (projects/kit/offline/src/lib/sqlite-offline-repository.ts:106-112)。readCacheOnly が抑止しているのは pull と enqueue のみです (projects/kit/offline/src/lib/offline-replica-pull.service.ts:48, projects/kit/offline/src/lib/offline-sync.service.ts:398)。実際 README の読み取りキャッシュ例は createEncryptionKey を渡しており (projects/kit/README.md:770-777)、この型変更でコンパイルも通らなくなります。
Prompt for agents
読み取りキャッシュ専用モード (ProvideReadCacheOfflineOptions) で createEncryptionKey を `never` として禁止しているが、iOS/Android では mode に関わらず SqliteOfflineRepository が選択され、暗号化SQLiteの初回オープンに鍵ファクトリが必須である。そのため readCacheOnly の製品はネイティブで初期化に失敗する(README のサンプルも createEncryptionKey を渡している)。対応案としては、(a) readCacheOnly でも createEncryptionKey を必須(もしくは任意)のままにする、または (b) readCacheOnly のときはネイティブでも暗号化不要な経路を用意する、のいずれか。型定義・README・テストを整合させること。
Was this helpful? React with 👍 or 👎 to provide feedback.
Summary
createEncryptionKeyat compile time for synchronized offline providersWhy
Native synchronized persistence cannot operate safely without its encryption-key factory. The previous optional property delayed a configuration error until the SQLite database opened at runtime. The mode-discriminated provider API now makes this requirement explicit for every product adopting the Kit.
Verification