Skip to content

Commit d919ef0

Browse files
committed
Deduplicate complex event payloads
Signed-off-by: MattIPv4 <[email protected]>
1 parent b535a19 commit d919ef0

File tree

2 files changed

+19
-22
lines changed

2 files changed

+19
-22
lines changed

packages/shared/src/open-feature.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -251,11 +251,13 @@ export abstract class OpenFeatureCommonAPI<
251251
.initialize(domain ? (this._domainScopedContext.get(domain) ?? this._context) : this._context)
252252
.then(() => {
253253
wrapper.status = this._statusEnumType.READY;
254+
const payload = { clientName: domain, domain, providerName: wrapper.provider.metadata.name };
255+
254256
// fetch the most recent event emitters, some may have been added during init
255257
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
256-
emitter?.emit(AllProviderEvents.Ready, { clientName: domain, domain, providerName: wrapper.provider.metadata.name });
258+
emitter?.emit(AllProviderEvents.Ready, { ...payload });
257259
});
258-
this._apiEmitter?.emit(AllProviderEvents.Ready, { clientName: domain, domain, providerName: wrapper.provider.metadata.name });
260+
this._apiEmitter?.emit(AllProviderEvents.Ready, { ...payload });
259261
})
260262
.catch((error) => {
261263
// if this is a fatal error, transition to FATAL status
@@ -264,20 +266,19 @@ export abstract class OpenFeatureCommonAPI<
264266
} else {
265267
wrapper.status = this._statusEnumType.ERROR;
266268
}
267-
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
268-
emitter?.emit(AllProviderEvents.Error, {
269-
clientName: domain,
270-
domain,
271-
providerName: wrapper.provider.metadata.name,
272-
message: error?.message,
273-
});
274-
});
275-
this._apiEmitter?.emit(AllProviderEvents.Error, {
269+
const payload = {
276270
clientName: domain,
277271
domain,
278272
providerName: wrapper.provider.metadata.name,
279273
message: error?.message,
274+
};
275+
276+
// fetch the most recent event emitters, some may have been added during init
277+
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
278+
emitter?.emit(AllProviderEvents.Error, { ...payload });
280279
});
280+
this._apiEmitter?.emit(AllProviderEvents.Error, { ...payload });
281+
281282
// rethrow after emitting error events, so that public methods can control error handling
282283
throw error;
283284
})

packages/web/src/open-feature.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -282,21 +282,17 @@ export class OpenFeatureAPI
282282
: this._defaultProvider;
283283
if (wrapper) {
284284
wrapper.status = this._statusEnumType.ERROR;
285-
const providerName = wrapper.provider?.metadata?.name || 'unnamed-provider';
286-
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
287-
emitter?.emit(ProviderEvents.Error, {
288-
clientName: domain,
289-
domain,
290-
providerName,
291-
message: `Error validating context during setProvider: ${validateContextError instanceof Error ? validateContextError.message : String(validateContextError)}`,
292-
});
293-
});
294-
this._apiEmitter?.emit(ProviderEvents.Error, {
285+
const payload = {
295286
clientName: domain,
296287
domain,
297-
providerName,
288+
providerName: wrapper.provider?.metadata?.name || 'unnamed-provider',
298289
message: `Error validating context during setProvider: ${validateContextError instanceof Error ? validateContextError.message : String(validateContextError)}`,
290+
};
291+
292+
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
293+
emitter?.emit(ProviderEvents.Error, { ...payload });
299294
});
295+
this._apiEmitter?.emit(ProviderEvents.Error, { ...payload });
300296
this._logger.error('Error validating context during setProvider:', validateContextError);
301297
}
302298
}

0 commit comments

Comments
 (0)