@@ -159,9 +159,40 @@ async function startEnvoy(config) {
159159/**
160160 * Open a native database backed by envoy KV.
161161 */
162- async function openDatabaseFromEnvoy ( handle , actorId ) {
162+ async function openDatabaseFromEnvoy ( handle , actorId , preloadedEntries ) {
163163 const rawHandle = handle . _raw || handle ;
164- return native . openDatabaseFromEnvoy ( rawHandle , actorId ) ;
164+ const nativePreloadedEntries = preloadedEntries
165+ ? preloadedEntries . map ( ( [ key , value ] ) => ( {
166+ key : Buffer . from ( key ) ,
167+ value : Buffer . from ( value ) ,
168+ } ) )
169+ : null ;
170+ return native . openDatabaseFromEnvoy (
171+ rawHandle ,
172+ actorId ,
173+ nativePreloadedEntries ,
174+ ) ;
175+ }
176+
177+ function decodePreloadedKv ( preloadedKv ) {
178+ if ( ! preloadedKv ) {
179+ return null ;
180+ }
181+
182+ const decodeBytes = ( value ) => Uint8Array . from ( Buffer . from ( value , "base64" ) ) ;
183+
184+ return {
185+ entries : ( preloadedKv . entries || [ ] ) . map ( ( entry ) => ( {
186+ key : decodeBytes ( entry . key ) ,
187+ value : decodeBytes ( entry . value ) ,
188+ metadata : {
189+ version : decodeBytes ( entry . metadata . version ) ,
190+ updateTs : entry . metadata . updateTs ,
191+ } ,
192+ } ) ) ,
193+ requestedGetKeys : ( preloadedKv . requestedGetKeys || [ ] ) . map ( decodeBytes ) ,
194+ requestedPrefixes : ( preloadedKv . requestedPrefixes || [ ] ) . map ( decodeBytes ) ,
195+ } ;
165196}
166197
167198function isPlainObject ( value ) {
@@ -279,8 +310,12 @@ function wrapNativeStorageError(nativeDb, error) {
279310 ) ;
280311}
281312
282- async function openRawDatabaseFromEnvoy ( handle , actorId ) {
283- const nativeDb = await openDatabaseFromEnvoy ( handle , actorId ) ;
313+ async function openRawDatabaseFromEnvoy ( handle , actorId , preloadedEntries ) {
314+ const nativeDb = await openDatabaseFromEnvoy (
315+ handle ,
316+ actorId ,
317+ preloadedEntries ,
318+ ) ;
284319 let closed = false ;
285320
286321 const ensureOpen = ( ) => {
@@ -357,7 +392,7 @@ function handleEvent(event, config, wrappedHandle) {
357392 event . actorId ,
358393 event . generation ,
359394 actorConfig ,
360- null , // preloadedKv
395+ decodePreloadedKv ( event . preloadedKv ) ,
361396 ) ,
362397 ) . then (
363398 async ( ) => {
0 commit comments