Skip to content

Commit 96f5f42

Browse files
committed
Deduplicate complex event payloads
Signed-off-by: MattIPv4 <me@mattcowley.co.uk>
1 parent cafd9df commit 96f5f42

File tree

2 files changed

+19
-30
lines changed

2 files changed

+19
-30
lines changed

packages/shared/src/open-feature.ts

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -252,19 +252,13 @@ export abstract class OpenFeatureCommonAPI<
252252
.initialize(domain ? (this._domainScopedContext.get(domain) ?? this._context) : this._context)
253253
.then(() => {
254254
wrapper.status = this._statusEnumType.READY;
255+
const payload = { clientName: domain, domain, providerName: wrapper.provider.metadata.name };
256+
255257
// fetch the most recent event emitters, some may have been added during init
256258
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
257-
emitter?.emit(AllProviderEvents.Ready, {
258-
clientName: domain,
259-
domain,
260-
providerName: wrapper.provider.metadata.name,
261-
});
262-
});
263-
this._apiEmitter?.emit(AllProviderEvents.Ready, {
264-
clientName: domain,
265-
domain,
266-
providerName: wrapper.provider.metadata.name,
259+
emitter?.emit(AllProviderEvents.Ready, { ...payload });
267260
});
261+
this._apiEmitter?.emit(AllProviderEvents.Ready, { ...payload });
268262
})
269263
.catch((error) => {
270264
// if this is a fatal error, transition to FATAL status
@@ -273,20 +267,19 @@ export abstract class OpenFeatureCommonAPI<
273267
} else {
274268
wrapper.status = this._statusEnumType.ERROR;
275269
}
276-
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
277-
emitter?.emit(AllProviderEvents.Error, {
278-
clientName: domain,
279-
domain,
280-
providerName: wrapper.provider.metadata.name,
281-
message: error?.message,
282-
});
283-
});
284-
this._apiEmitter?.emit(AllProviderEvents.Error, {
270+
const payload = {
285271
clientName: domain,
286272
domain,
287273
providerName: wrapper.provider.metadata.name,
288274
message: error?.message,
275+
};
276+
277+
// fetch the most recent event emitters, some may have been added during init
278+
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
279+
emitter?.emit(AllProviderEvents.Error, { ...payload });
289280
});
281+
this._apiEmitter?.emit(AllProviderEvents.Error, { ...payload });
282+
290283
// rethrow after emitting error events, so that public methods can control error handling
291284
throw error;
292285
})

packages/web/src/open-feature.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -276,21 +276,17 @@ export class OpenFeatureAPI
276276
const wrapper = domain ? this._domainScopedProviders.get(domain) : this._defaultProvider;
277277
if (wrapper) {
278278
wrapper.status = this._statusEnumType.ERROR;
279-
const providerName = wrapper.provider?.metadata?.name || 'unnamed-provider';
280-
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
281-
emitter?.emit(ProviderEvents.Error, {
282-
clientName: domain,
283-
domain,
284-
providerName,
285-
message: `Error validating context during setProvider: ${validateContextError instanceof Error ? validateContextError.message : String(validateContextError)}`,
286-
});
287-
});
288-
this._apiEmitter?.emit(ProviderEvents.Error, {
279+
const payload = {
289280
clientName: domain,
290281
domain,
291-
providerName,
282+
providerName: wrapper.provider?.metadata?.name || 'unnamed-provider',
292283
message: `Error validating context during setProvider: ${validateContextError instanceof Error ? validateContextError.message : String(validateContextError)}`,
284+
};
285+
286+
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
287+
emitter?.emit(ProviderEvents.Error, { ...payload });
293288
});
289+
this._apiEmitter?.emit(ProviderEvents.Error, { ...payload });
294290
this._logger.error('Error validating context during setProvider:', validateContextError);
295291
}
296292
}

0 commit comments

Comments
 (0)