@@ -82,17 +82,13 @@ class GcfEvents {
8282 new FirestoreFirebaseEventAdapter ("google.firebase.analytics.log.v1.written" , FIREBASE_SERVICE )),
8383
8484 entry ("providers/google.firebase.database/eventTypes/ref.create" ,
85- new FirestoreFirebaseEventAdapter ("google.firebase.database.document.v1.created" ,
86- FIREBASE_DB_SERVICE )),
85+ new FirebaseDatabaseEventAdapter ("google.firebase.database.document.v1.created" )),
8786 entry ("providers/google.firebase.database/eventTypes/ref.write" ,
88- new FirestoreFirebaseEventAdapter ("google.firebase.database.document.v1.written" ,
89- FIREBASE_DB_SERVICE )),
87+ new FirebaseDatabaseEventAdapter ("google.firebase.database.document.v1.written" )),
9088 entry ("providers/google.firebase.database/eventTypes/ref.update" ,
91- new FirestoreFirebaseEventAdapter ("google.firebase.database.document.v1.updated" ,
92- FIREBASE_DB_SERVICE )),
89+ new FirebaseDatabaseEventAdapter ("google.firebase.database.document.v1.updated" )),
9390 entry ("providers/google.firebase.database/eventTypes/ref.delete" ,
94- new FirestoreFirebaseEventAdapter ("google.firebase.database.document.v1.deleted" ,
95- FIREBASE_DB_SERVICE )),
91+ new FirebaseDatabaseEventAdapter ("google.firebase.database.document.v1.deleted" )),
9692
9793 entry ("providers/cloud.pubsub/eventTypes/topic.publish" ,
9894 new PubSubEventAdapter (PUB_SUB_MESSAGE_PUBLISHED )),
@@ -172,6 +168,8 @@ private static class PubSubEventAdapter extends EventAdapter {
172168 @ Override
173169 String maybeReshapeData (Event legacyEvent , String jsonData ) {
174170 JsonObject jsonObject = GSON .fromJson (jsonData , JsonObject .class );
171+ jsonObject .addProperty ("messageId" , legacyEvent .getContext ().eventId ());
172+ jsonObject .addProperty ("publishTime" , legacyEvent .getContext ().timestamp ());
175173 JsonObject wrapped = new JsonObject ();
176174 wrapped .add ("message" , jsonObject );
177175 return GSON .toJson (wrapped );
@@ -232,6 +230,44 @@ String maybeReshapeData(Event legacyEvent, String jsonData) {
232230 }
233231 }
234232
233+ private static class FirebaseDatabaseEventAdapter extends EventAdapter {
234+ private static final Pattern FIREBASE_DB_RESOURCE_PATTERN =
235+ Pattern .compile ("^projects/_/(instances/[^/]+)/((documents|refs)/.+)$" );
236+
237+ FirebaseDatabaseEventAdapter (String cloudEventType ) {
238+ super (cloudEventType , FIREBASE_DB_SERVICE );
239+ }
240+
241+ @ Override
242+ SourceAndSubject convertResourceToSourceAndSubject (String resourceName , Event legacyEvent ) {
243+ Matcher matcher = FIREBASE_DB_RESOURCE_PATTERN .matcher (resourceName );
244+ String location = parseLocation (legacyEvent );
245+ if (matcher .matches () && location != null ) {
246+ String resource = String .format ("projects/_/locations/%s/%s" , location , matcher .group (1 ));
247+ String subject = matcher .group (2 );
248+ return SourceAndSubject .of (resource , subject );
249+ }
250+ return super .convertResourceToSourceAndSubject (resourceName , legacyEvent );
251+ }
252+
253+ private String parseLocation (Event legacyEvent ) {
254+ String domain = legacyEvent .getContext ().domain ();
255+ if (domain == null ) {
256+ return null ;
257+ }
258+ // The default location for firebaseio.com is us-central1
259+ if ("firebaseio.com" .equals (domain )) {
260+ return "us-central1" ;
261+ }
262+ // Otherwise the location can be inferred from the first subdomain
263+ String [] subdomains = domain .split ("\\ ." );
264+ if (subdomains .length > 1 ) {
265+ return subdomains [0 ];
266+ }
267+ return null ;
268+ }
269+ }
270+
235271 private static class FirebaseAuthEventAdapter extends EventAdapter {
236272 FirebaseAuthEventAdapter (String cloudEventType ) {
237273 super (cloudEventType , FIREBASE_AUTH_SERVICE );
0 commit comments