|
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