Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
@Optional() @Inject(REMOTE_CONFIG_SETTINGS) settings:remoteConfig.Settings|null,
@Optional() @Inject(DEFAULT_CONFIG) defaultConfig:DefaultConfig|null,
private zone: NgZone
) {
const remoteConfig = of(undefined).pipe(
// @ts-ignore zapping in the UMD in the build script
switchMap(() => import('firebase/remote-config')),
map(() => _firebaseAppFactory(options, zone, nameOrConfig)),
map(app => app.remoteConfig()),
tap(rc => {
if (settings) { rc.settings = settings }
if (defaultConfig) { rc.defaultConfig = defaultConfig }
this.default$ = empty(); // once the SDK is loaded, we don't need our defaults anylonger
}),
runOutsideAngular(zone),
shareReplay(1)
);
const defaultToStartWith = Object.keys(defaultConfig || {}).reduce((c, k) => {
c[k] = new Value("default", defaultConfig![k].toString());
return c;
}, {} as {[key:string]: remoteConfig.Value});
const mapRemoteConfig = (rc: {[key:string]: Value | remoteConfig.Value}) => {
const keys = Object.keys(rc);
return keys.reduce((c, key, index) => {
const value = rc[key];
c[index] = new KeyedValue(key, value.getSource(), value.asString());
return c;
}, new Array(keys.length));
}
constructor(
analytics: AngularFireAnalytics,
zone: NgZone
) {
this.disposable = from(analytics.app).pipe(
// TODO can I hook into auth being loaded...
map(app => app.auth()),
switchMap(auth => auth ? new Observable(auth.onAuthStateChanged.bind(auth)) : empty()),
switchMap(user => analytics.setUserId(user ? user.uid : null!)),
runOutsideAngular(zone)
).subscribe();
}
constructor(
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
@Optional() @Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|null|undefined,
@Inject(PLATFORM_ID) platformId: Object,
zone: NgZone
) {
// @ts-ignore zapping in the UMD in the build script
const requireMessaging = from(import('firebase/messaging'));
this.messaging = requireMessaging.pipe(
map(() => _firebaseAppFactory(options, zone, nameOrConfig)),
map(app => app.messaging()),
runOutsideAngular(zone)
);
if (!isPlatformServer(platformId)) {
this.requestPermission = this.messaging.pipe(
switchMap(messaging => messaging.requestPermission()),
runOutsideAngular(zone)
);
} else {
this.requestPermission = throwError('Not available on server platform.');
}
this.getToken = this.messaging.pipe(
constructor(
@Inject(FIREBASE_OPTIONS) options:FirebaseOptions,
@Optional() @Inject(FIREBASE_APP_NAME) nameOrConfig:string|FirebaseAppConfig|null|undefined,
@Optional() @Inject(ANALYTICS_COLLECTION_ENABLED) analyticsCollectionEnabled:boolean|null,
zone: NgZone
) {
const analytics = of(undefined).pipe(
// @ts-ignore zapping in the UMD in the build script
switchMap(() => zone.runOutsideAngular(() => import('firebase/analytics'))),
map(() => _firebaseAppFactory(options, zone, nameOrConfig)),
map(app => app.analytics()),
tap(analytics => {
if (analyticsCollectionEnabled === false) { analytics.setAnalyticsCollectionEnabled(false) }
}),
runOutsideAngular(zone),
shareReplay(1)
);
return _lazySDKProxy(this, analytics, zone);
}
this.requestPermission = throwError('Not available on server platform.');
}
this.getToken = this.messaging.pipe(
switchMap(messaging => messaging.getToken()),
defaultIfEmpty(null),
runOutsideAngular(zone)
);
const tokenChanges = this.messaging.pipe(
switchMap(messaging => new Observable(messaging.onTokenRefresh.bind(messaging)).pipe(
switchMap(() => messaging.getToken())
)),
runOutsideAngular(zone)
);
this.tokenChanges = this.getToken.pipe(
concat(tokenChanges)
);
this.messages = this.messaging.pipe(
switchMap(messaging => new Observable(messaging.onMessage.bind(messaging))),
runOutsideAngular(zone)
);
this.requestToken = this.requestPermission.pipe(
catchError(() => of(null)),
mergeMap(() => this.tokenChanges)
);
this.deleteToken = (token: string) => this.messaging.pipe(
switchMap(messaging => messaging.deleteToken(token)),
defaultIfEmpty(false),
runOutsideAngular(zone)
);
}