|
15 | 15 | * limitations under the License.
|
16 | 16 | */
|
17 | 17 |
|
18 |
| -import { deleteDb, openDb } from 'idb'; |
| 18 | +import { deleteDB, openDB } from '@firebase/util'; |
19 | 19 |
|
20 | 20 | import { TokenDetails } from '../interfaces/token-details';
|
21 | 21 | import { arrayToBase64 } from './array-base64-translator';
|
@@ -88,83 +88,87 @@ export async function migrateOldDatabase(
|
88 | 88 |
|
89 | 89 | let tokenDetails: TokenDetails | null = null;
|
90 | 90 |
|
91 |
| - const db = await openDb(OLD_DB_NAME, OLD_DB_VERSION, async db => { |
92 |
| - if (db.oldVersion < 2) { |
93 |
| - // Database too old, skip migration. |
94 |
| - return; |
95 |
| - } |
96 |
| - |
97 |
| - if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) { |
98 |
| - // Database did not exist. Nothing to do. |
99 |
| - return; |
100 |
| - } |
101 |
| - |
102 |
| - const objectStore = db.transaction.objectStore(OLD_OBJECT_STORE_NAME); |
103 |
| - const value = await objectStore.index('fcmSenderId').get(senderId); |
104 |
| - await objectStore.clear(); |
| 91 | + const db = await openDB( |
| 92 | + OLD_DB_NAME, |
| 93 | + OLD_DB_VERSION, |
| 94 | + async (db, oldVersion, newVersion, upgradeTransaction) => { |
| 95 | + if (oldVersion < 2) { |
| 96 | + // Database too old, skip migration. |
| 97 | + return; |
| 98 | + } |
105 | 99 |
|
106 |
| - if (!value) { |
107 |
| - // No entry in the database, nothing to migrate. |
108 |
| - return; |
109 |
| - } |
| 100 | + if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) { |
| 101 | + // Database did not exist. Nothing to do. |
| 102 | + return; |
| 103 | + } |
110 | 104 |
|
111 |
| - if (db.oldVersion === 2) { |
112 |
| - const oldDetails = value as V2TokenDetails; |
| 105 | + const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME); |
| 106 | + const value = await objectStore.index('fcmSenderId').get(senderId); |
| 107 | + await objectStore.clear(); |
113 | 108 |
|
114 |
| - if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) { |
| 109 | + if (!value) { |
| 110 | + // No entry in the database, nothing to migrate. |
115 | 111 | return;
|
116 | 112 | }
|
117 | 113 |
|
118 |
| - tokenDetails = { |
119 |
| - token: oldDetails.fcmToken, |
120 |
| - createTime: oldDetails.createTime ?? Date.now(), |
121 |
| - subscriptionOptions: { |
122 |
| - auth: oldDetails.auth, |
123 |
| - p256dh: oldDetails.p256dh, |
124 |
| - endpoint: oldDetails.endpoint, |
125 |
| - swScope: oldDetails.swScope, |
126 |
| - vapidKey: |
127 |
| - typeof oldDetails.vapidKey === 'string' |
128 |
| - ? oldDetails.vapidKey |
129 |
| - : arrayToBase64(oldDetails.vapidKey) |
130 |
| - } |
131 |
| - }; |
132 |
| - } else if (db.oldVersion === 3) { |
133 |
| - const oldDetails = value as V3TokenDetails; |
134 |
| - |
135 |
| - tokenDetails = { |
136 |
| - token: oldDetails.fcmToken, |
137 |
| - createTime: oldDetails.createTime, |
138 |
| - subscriptionOptions: { |
139 |
| - auth: arrayToBase64(oldDetails.auth), |
140 |
| - p256dh: arrayToBase64(oldDetails.p256dh), |
141 |
| - endpoint: oldDetails.endpoint, |
142 |
| - swScope: oldDetails.swScope, |
143 |
| - vapidKey: arrayToBase64(oldDetails.vapidKey) |
144 |
| - } |
145 |
| - }; |
146 |
| - } else if (db.oldVersion === 4) { |
147 |
| - const oldDetails = value as V4TokenDetails; |
148 |
| - |
149 |
| - tokenDetails = { |
150 |
| - token: oldDetails.fcmToken, |
151 |
| - createTime: oldDetails.createTime, |
152 |
| - subscriptionOptions: { |
153 |
| - auth: arrayToBase64(oldDetails.auth), |
154 |
| - p256dh: arrayToBase64(oldDetails.p256dh), |
155 |
| - endpoint: oldDetails.endpoint, |
156 |
| - swScope: oldDetails.swScope, |
157 |
| - vapidKey: arrayToBase64(oldDetails.vapidKey) |
| 114 | + if (oldVersion === 2) { |
| 115 | + const oldDetails = value as V2TokenDetails; |
| 116 | + |
| 117 | + if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) { |
| 118 | + return; |
158 | 119 | }
|
159 |
| - }; |
| 120 | + |
| 121 | + tokenDetails = { |
| 122 | + token: oldDetails.fcmToken, |
| 123 | + createTime: oldDetails.createTime ?? Date.now(), |
| 124 | + subscriptionOptions: { |
| 125 | + auth: oldDetails.auth, |
| 126 | + p256dh: oldDetails.p256dh, |
| 127 | + endpoint: oldDetails.endpoint, |
| 128 | + swScope: oldDetails.swScope, |
| 129 | + vapidKey: |
| 130 | + typeof oldDetails.vapidKey === 'string' |
| 131 | + ? oldDetails.vapidKey |
| 132 | + : arrayToBase64(oldDetails.vapidKey) |
| 133 | + } |
| 134 | + }; |
| 135 | + } else if (oldVersion === 3) { |
| 136 | + const oldDetails = value as V3TokenDetails; |
| 137 | + |
| 138 | + tokenDetails = { |
| 139 | + token: oldDetails.fcmToken, |
| 140 | + createTime: oldDetails.createTime, |
| 141 | + subscriptionOptions: { |
| 142 | + auth: arrayToBase64(oldDetails.auth), |
| 143 | + p256dh: arrayToBase64(oldDetails.p256dh), |
| 144 | + endpoint: oldDetails.endpoint, |
| 145 | + swScope: oldDetails.swScope, |
| 146 | + vapidKey: arrayToBase64(oldDetails.vapidKey) |
| 147 | + } |
| 148 | + }; |
| 149 | + } else if (oldVersion === 4) { |
| 150 | + const oldDetails = value as V4TokenDetails; |
| 151 | + |
| 152 | + tokenDetails = { |
| 153 | + token: oldDetails.fcmToken, |
| 154 | + createTime: oldDetails.createTime, |
| 155 | + subscriptionOptions: { |
| 156 | + auth: arrayToBase64(oldDetails.auth), |
| 157 | + p256dh: arrayToBase64(oldDetails.p256dh), |
| 158 | + endpoint: oldDetails.endpoint, |
| 159 | + swScope: oldDetails.swScope, |
| 160 | + vapidKey: arrayToBase64(oldDetails.vapidKey) |
| 161 | + } |
| 162 | + }; |
| 163 | + } |
160 | 164 | }
|
161 |
| - }); |
| 165 | + ); |
162 | 166 | db.close();
|
163 | 167 |
|
164 | 168 | // Delete all old databases.
|
165 |
| - await deleteDb(OLD_DB_NAME); |
166 |
| - await deleteDb('fcm_vapid_details_db'); |
167 |
| - await deleteDb('undefined'); |
| 169 | + await deleteDB(OLD_DB_NAME); |
| 170 | + await deleteDB('fcm_vapid_details_db'); |
| 171 | + await deleteDB('undefined'); |
168 | 172 |
|
169 | 173 | return checkTokenDetails(tokenDetails) ? tokenDetails : null;
|
170 | 174 | }
|
|
0 commit comments