1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414import { Request , Response , NextFunction } from 'express' ;
15- import { isBinaryCloudEvent , getBinaryCloudEventContext } from '../cloudevents' ;
15+ import {
16+ CE_SERVICE ,
17+ isBinaryCloudEvent ,
18+ getBinaryCloudEventContext ,
19+ EventConversionError ,
20+ } from '../cloudevents' ;
1621
17- const CE_TO_BACKGROUND_TYPE = new Map (
18- Object . entries ( {
19- 'google.cloud.pubsub.topic.v1.messagePublished' :
20- 'google.pubsub.topic.publish' ,
21- 'google.cloud.storage.object.v1.finalized' :
22- 'google.storage.object.finalize' ,
23- 'google.cloud.storage.object.v1.deleted' : 'google.storage.object.delete' ,
24- 'google.cloud.storage.object.v1.archived' : 'google.storage.object.archive' ,
25- 'google.cloud.storage.object.v1.metadataUpdated' :
26- 'google.storage.object.metadataUpdate' ,
27- 'google.cloud.firestore.document.v1.written' :
28- 'providers/cloud.firestore/eventTypes/document.write' ,
29- 'google.cloud.firestore.document.v1.created' :
30- 'providers/cloud.firestore/eventTypes/document.create' ,
31- 'google.cloud.firestore.document.v1.updated' :
32- 'providers/cloud.firestore/eventTypes/document.update' ,
33- 'google.cloud.firestore.document.v1.deleted' :
34- 'providers/cloud.firestore/eventTypes/document.delete' ,
35- 'google.firebase.auth.user.v1.created' :
36- 'providers/firebase.auth/eventTypes/user.create' ,
37- 'google.firebase.auth.user.v1.deleted' :
38- 'providers/firebase.auth/eventTypes/user.delete' ,
39- 'google.firebase.analytics.log.v1.written' :
40- 'providers/google.firebase.analytics/eventTypes/event.log' ,
41- 'google.firebase.database.document.v1.created' :
42- 'providers/google.firebase.database/eventTypes/ref.create' ,
43- 'google.firebase.database.document.v1.written' :
44- 'providers/google.firebase.database/eventTypes/ref.write' ,
45- 'google.firebase.database.document.v1.updated' :
46- 'providers/google.firebase.database/eventTypes/ref.update' ,
47- 'google.firebase.database.document.v1.deleted' :
48- 'providers/google.firebase.database/eventTypes/ref.delete' ,
49- } )
50- ) ;
51-
52- // CloudEvent service names.
53- const FIREBASE_AUTH_CE_SERVICE = 'firebaseauth.googleapis.com' ;
54- const PUBSUB_CE_SERVICE = 'pubsub.googleapis.com' ;
55- const STORAGE_CE_SERVICE = 'storage.googleapis.com' ;
22+ // Maps CloudEvent types to the equivalent GCF Event type
23+ export const CE_TO_BACKGROUND_TYPE : { [ k : string ] : string } = {
24+ 'google.cloud.pubsub.topic.v1.messagePublished' :
25+ 'google.pubsub.topic.publish' ,
26+ 'google.cloud.storage.object.v1.finalized' : 'google.storage.object.finalize' ,
27+ 'google.cloud.storage.object.v1.deleted' : 'google.storage.object.delete' ,
28+ 'google.cloud.storage.object.v1.archived' : 'google.storage.object.archive' ,
29+ 'google.cloud.storage.object.v1.metadataUpdated' :
30+ 'google.storage.object.metadataUpdate' ,
31+ 'google.cloud.firestore.document.v1.written' :
32+ 'providers/cloud.firestore/eventTypes/document.write' ,
33+ 'google.cloud.firestore.document.v1.created' :
34+ 'providers/cloud.firestore/eventTypes/document.create' ,
35+ 'google.cloud.firestore.document.v1.updated' :
36+ 'providers/cloud.firestore/eventTypes/document.update' ,
37+ 'google.cloud.firestore.document.v1.deleted' :
38+ 'providers/cloud.firestore/eventTypes/document.delete' ,
39+ 'google.firebase.auth.user.v1.created' :
40+ 'providers/firebase.auth/eventTypes/user.create' ,
41+ 'google.firebase.auth.user.v1.deleted' :
42+ 'providers/firebase.auth/eventTypes/user.delete' ,
43+ 'google.firebase.analytics.log.v1.written' :
44+ 'providers/google.firebase.analytics/eventTypes/event.log' ,
45+ 'google.firebase.database.document.v1.created' :
46+ 'providers/google.firebase.database/eventTypes/ref.create' ,
47+ 'google.firebase.database.document.v1.written' :
48+ 'providers/google.firebase.database/eventTypes/ref.write' ,
49+ 'google.firebase.database.document.v1.updated' :
50+ 'providers/google.firebase.database/eventTypes/ref.update' ,
51+ 'google.firebase.database.document.v1.deleted' :
52+ 'providers/google.firebase.database/eventTypes/ref.delete' ,
53+ } ;
5654
5755const PUBSUB_MESSAGE_TYPE =
5856 'type.googleapis.com/google.pubsub.v1.PubsubMessage' ;
@@ -62,11 +60,6 @@ const PUBSUB_MESSAGE_TYPE =
6260 */
6361const CE_SOURCE_REGEX = / \/ \/ ( [ ^ / ] + ) \/ ( .+ ) / ;
6462
65- /**
66- * Costom exception class to represent errors durring event converion.
67- */
68- export class EventConversionError extends Error { }
69-
7063/**
7164 * Is the given request a known CloudEvent that can be converted to a legacy event.
7265 * @param request express request object
@@ -75,7 +68,7 @@ export class EventConversionError extends Error {}
7568const isConvertableCloudEvent = ( request : Request ) : boolean => {
7669 if ( isBinaryCloudEvent ( request ) ) {
7770 const ceType = request . header ( 'ce-type' ) ;
78- return CE_TO_BACKGROUND_TYPE . has ( ceType ! ) ;
71+ return ! ! ceType && ceType in CE_TO_BACKGROUND_TYPE ;
7972 }
8073 return false ;
8174} ;
@@ -117,7 +110,7 @@ const marshallConvertableCloudEvent = (
117110 let resource : string | { [ key : string ] : string } = `${ name } /${ subject } ` ;
118111
119112 switch ( service ) {
120- case PUBSUB_CE_SERVICE :
113+ case CE_SERVICE . PUBSUB :
121114 // PubSub resource format
122115 resource = {
123116 service : service ,
@@ -129,7 +122,7 @@ const marshallConvertableCloudEvent = (
129122 data = data . message ;
130123 }
131124 break ;
132- case FIREBASE_AUTH_CE_SERVICE :
125+ case CE_SERVICE . FIREBASE_AUTH :
133126 // FirebaseAuth resource format
134127 resource = name ;
135128 if ( 'metadata' in data ) {
@@ -144,7 +137,7 @@ const marshallConvertableCloudEvent = (
144137 }
145138 }
146139 break ;
147- case STORAGE_CE_SERVICE :
140+ case CE_SERVICE . STORAGE :
148141 // CloudStorage resource format
149142 resource = {
150143 name : `${ name } /${ subject } ` ,
@@ -158,7 +151,7 @@ const marshallConvertableCloudEvent = (
158151 context : {
159152 eventId : ceContext . id ! ,
160153 timestamp : ceContext . time ! ,
161- eventType : CE_TO_BACKGROUND_TYPE . get ( ceContext . type ! ) ,
154+ eventType : CE_TO_BACKGROUND_TYPE [ ceContext . type ! ] ,
162155 resource,
163156 } ,
164157 data,
0 commit comments