@@ -158,9 +158,40 @@ async function startEnvoy(config) {
158158/**
159159 * Open a native database backed by envoy KV.
160160 */
161- async function openDatabaseFromEnvoy ( handle , actorId ) {
161+ async function openDatabaseFromEnvoy ( handle , actorId , preloadedEntries ) {
162162 const rawHandle = handle . _raw || handle ;
163- return native . openDatabaseFromEnvoy ( rawHandle , actorId ) ;
163+ const nativePreloadedEntries = preloadedEntries
164+ ? preloadedEntries . map ( ( [ key , value ] ) => ( {
165+ key : Buffer . from ( key ) ,
166+ value : Buffer . from ( value ) ,
167+ } ) )
168+ : null ;
169+ return native . openDatabaseFromEnvoy (
170+ rawHandle ,
171+ actorId ,
172+ nativePreloadedEntries ,
173+ ) ;
174+ }
175+
176+ function decodePreloadedKv ( preloadedKv ) {
177+ if ( ! preloadedKv ) {
178+ return null ;
179+ }
180+
181+ const decodeBytes = ( value ) => Uint8Array . from ( Buffer . from ( value , "base64" ) ) ;
182+
183+ return {
184+ entries : ( preloadedKv . entries || [ ] ) . map ( ( entry ) => ( {
185+ key : decodeBytes ( entry . key ) ,
186+ value : decodeBytes ( entry . value ) ,
187+ metadata : {
188+ version : decodeBytes ( entry . metadata . version ) ,
189+ updateTs : entry . metadata . updateTs ,
190+ } ,
191+ } ) ) ,
192+ requestedGetKeys : ( preloadedKv . requestedGetKeys || [ ] ) . map ( decodeBytes ) ,
193+ requestedPrefixes : ( preloadedKv . requestedPrefixes || [ ] ) . map ( decodeBytes ) ,
194+ } ;
164195}
165196
166197function isPlainObject ( value ) {
@@ -278,8 +309,12 @@ async function wrapNativeStorageError(nativeDb, error) {
278309 ) ;
279310}
280311
281- async function openRawDatabaseFromEnvoy ( handle , actorId ) {
282- const nativeDb = await openDatabaseFromEnvoy ( handle , actorId ) ;
312+ async function openRawDatabaseFromEnvoy ( handle , actorId , preloadedEntries ) {
313+ const nativeDb = await openDatabaseFromEnvoy (
314+ handle ,
315+ actorId ,
316+ preloadedEntries ,
317+ ) ;
283318 let closed = false ;
284319
285320 const ensureOpen = ( ) => {
@@ -358,7 +393,7 @@ function handleEvent(event, config, wrappedHandle) {
358393 event . actorId ,
359394 event . generation ,
360395 actorConfig ,
361- null , // preloadedKv
396+ decodePreloadedKv ( event . preloadedKv ) ,
362397 ) ,
363398 ) . then (
364399 async ( ) => {
0 commit comments