@@ -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 ) {
@@ -264,8 +295,12 @@ function mapRows(rows, columns) {
264295 } ) ;
265296}
266297
267- async function openRawDatabaseFromEnvoy ( handle , actorId ) {
268- const nativeDb = await openDatabaseFromEnvoy ( handle , actorId ) ;
298+ async function openRawDatabaseFromEnvoy ( handle , actorId , preloadedEntries ) {
299+ const nativeDb = await openDatabaseFromEnvoy (
300+ handle ,
301+ actorId ,
302+ preloadedEntries ,
303+ ) ;
269304 let closed = false ;
270305
271306 const ensureOpen = ( ) => {
@@ -330,7 +365,7 @@ function handleEvent(event, config, wrappedHandle) {
330365 event . actorId ,
331366 event . generation ,
332367 actorConfig ,
333- null , // preloadedKv
368+ decodePreloadedKv ( event . preloadedKv ) ,
334369 ) ,
335370 ) . then (
336371 async ( ) => {
0 commit comments