@squide/firefly 13.3.0 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"FireflyRuntime.js","sources":["webpack://@squide/firefly/./src/FireflyRuntime.tsx"],"sourcesContent":["import type { RegisterRouteOptions, RuntimeOptions } from \"@squide/core\";\nimport { MswPlugin, MswPluginName } from \"@squide/msw\";\nimport { ReactRouterRuntime, type Route } from \"@squide/react-router\";\nimport type { RequestHandler } from \"msw\";\nimport { getAreModulesRegistered } from \"./AppRouterReducer.ts\";\nimport { type AppRouterStore, createAppRouterStore } from \"./AppRouterStore.ts\";\n\nexport interface FireflyRuntimeOptions extends RuntimeOptions {\n useMsw?: boolean;\n}\n\nexport class FireflyRuntime extends ReactRouterRuntime {\n readonly #appRouterStore: AppRouterStore;\n readonly #useMsw: boolean;\n\n constructor({ plugins, useMsw, ...options }: FireflyRuntimeOptions = {}) {\n if (useMsw) {\n super({\n plugins: [\n ...(plugins ?? []),\n runtime => new MswPlugin(runtime)\n ],\n ...options\n });\n\n this.#useMsw = true;\n } else {\n super({\n plugins,\n ...options\n });\n\n this.#useMsw = false;\n }\n\n this.#appRouterStore = createAppRouterStore(this._logger);\n }\n\n registerRequestHandlers(handlers: RequestHandler[]) {\n const mswPlugin = this.getPlugin(MswPluginName) as MswPlugin;\n\n if (!mswPlugin) {\n throw new Error(\"[squide] Cannot register the provided MSW request handlers because the runtime hasn't been initialized with MSW. Did you instanciate the FireflyRuntime with the \\\"useMsw\\\" option?\");\n }\n\n if (getAreModulesRegistered()) {\n throw new Error(\"[squide] Cannot register an MSW request handlers once the modules are registered. Are you trying to register an MSW request handler in a deferred registration function? Only navigation items can be registered in a deferred registration function.\");\n }\n\n mswPlugin.registerRequestHandlers(handlers);\n }\n\n // Must define a return type otherwise we get an \"error TS2742: The inferred type of 'requestHandlers' cannot be named\" error.\n get requestHandlers(): RequestHandler[] {\n const mswPlugin = this.getPlugin(MswPluginName) as MswPlugin;\n\n if (!mswPlugin) {\n throw new Error(\"[squide] Cannot retrieve MSW request handlers because the runtime hasn't been initialized with MSW. Did you instanciate the FireflyRuntime with the \\\"useMsw\\\" option?\");\n }\n\n return mswPlugin.requestHandlers;\n }\n\n registerRoute(route: Route, options: RegisterRouteOptions = {}) {\n if (getAreModulesRegistered()) {\n throw new Error(\"[squide] Cannot register a route once the modules are registered. Are you trying to register a route in a deferred registration function? Only navigation items can be registered in a deferred registration function.\");\n }\n\n super.registerRoute(route, options);\n }\n\n get appRouterStore() {\n return this.#appRouterStore;\n }\n\n get isMswEnabled() {\n return this.#useMsw;\n }\n}\n"],"names":["MswPlugin","MswPluginName","ReactRouterRuntime","getAreModulesRegistered","createAppRouterStore","FireflyRuntime","plugins","useMsw","options","runtime","handlers","mswPlugin","Error","route"],"mappings":";;;;;;;;;;;;;;AACuD;AACe;AAEN;AACgB;AAMzE,MAAMK,uBAAuBH,kBAAkBA;IACzC,eAAe,CAAiB;IAChC,OAAO,CAAU;IAE1B,YAAY,EAAEI,OAAO,EAAEC,MAAM,EAAE,GAAGC,SAAgC,GAAG,CAAC,CAAC,CAAE;QACrE,IAAID,QAAQ;YACR,KAAK,CAAC;gBACF,SAAS;uBACDD,WAAW,EAAE;oBACjBG,CAAAA,UAAW,IAAIT,SAASA,CAACS;iBAC5B;gBACD,GAAGD,OAAO;YACd;YAEA,IAAI,CAAC,OAAO,GAAG;QACnB,OAAO;YACH,KAAK,CAAC;gBACFF;gBACA,GAAGE,OAAO;YACd;YAEA,IAAI,CAAC,OAAO,GAAG;QACnB;QAEA,IAAI,CAAC,eAAe,GAAGJ,oBAAoBA,CAAC,IAAI,CAAC,OAAO;IAC5D;IAEA,wBAAwBM,QAA0B,EAAE;QAChD,MAAMC,YAAY,IAAI,CAAC,SAAS,CAACV,aAAaA;QAE9C,IAAI,CAACU,WAAW;YACZ,MAAM,IAAIC,MAAM;QACpB;QAEA,IAAIT,uBAAuBA,IAAI;YAC3B,MAAM,IAAIS,MAAM;QACpB;QAEAD,UAAU,uBAAuB,CAACD;IACtC;IAEA,8HAA8H;IAC9H,IAAI,kBAAoC;QACpC,MAAMC,YAAY,IAAI,CAAC,SAAS,CAACV,aAAaA;QAE9C,IAAI,CAACU,WAAW;YACZ,MAAM,IAAIC,MAAM;QACpB;QAEA,OAAOD,UAAU,eAAe;IACpC;IAEA,cAAcE,KAAY,EAAEL,UAAgC,CAAC,CAAC,EAAE;QAC5D,IAAIL,uBAAuBA,IAAI;YAC3B,MAAM,IAAIS,MAAM;QACpB;QAEA,KAAK,CAAC,cAAcC,OAAOL;IAC/B;IAEA,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,eAAe;IAC/B;IAEA,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,OAAO;IACvB;AACJ"}
1
+ {"version":3,"file":"FireflyRuntime.js","sources":["webpack://@squide/firefly/./src/FireflyRuntime.tsx"],"sourcesContent":["import type { RegisterRouteOptions, RuntimeMethodOptions, RuntimeOptions } from \"@squide/core\";\nimport { MswPlugin, MswPluginName } from \"@squide/msw\";\nimport { type IReactRouterRuntime, ReactRouterRuntime, ReactRouterRuntimeScope, type Route } from \"@squide/react-router\";\nimport type { Logger } from \"@workleap/logging\";\nimport type { RequestHandler } from \"msw\";\nimport { getAreModulesRegistered } from \"./AppRouterReducer.ts\";\nimport { type AppRouterStore, createAppRouterStore } from \"./AppRouterStore.ts\";\n\nexport interface FireflyRuntimeOptions extends RuntimeOptions {\n useMsw?: boolean;\n}\n\nexport interface RegisterRequestHandlersOptions extends RuntimeMethodOptions {}\n\nexport interface IFireflyRuntime extends IReactRouterRuntime {\n registerRequestHandlers: (handlers: RequestHandler[]) => void;\n get requestHandlers(): RequestHandler[];\n get appRouterStore(): AppRouterStore;\n get isMswEnabled(): boolean;\n}\n\nexport class FireflyRuntime extends ReactRouterRuntime implements IFireflyRuntime {\n protected _appRouterStore: AppRouterStore;\n protected _useMsw: boolean;\n\n constructor({ plugins, useMsw, ...options }: FireflyRuntimeOptions = {}) {\n if (useMsw) {\n super({\n plugins: [\n ...(plugins ?? []),\n runtime => new MswPlugin(runtime)\n ],\n ...options\n });\n\n this._useMsw = true;\n } else {\n super({\n plugins,\n ...options\n });\n\n this._useMsw = false;\n }\n\n this._appRouterStore = createAppRouterStore(this._logger);\n }\n\n registerRequestHandlers(handlers: RequestHandler[], options: RegisterRequestHandlersOptions = {}) {\n const logger = this._getLogger(options);\n const mswPlugin = this.getPlugin(MswPluginName) as MswPlugin;\n\n if (!mswPlugin) {\n throw new Error(\"[squide] Cannot register the provided MSW request handlers because the runtime hasn't been initialized with MSW. Did you instanciate the FireflyRuntime with the \\\"useMsw\\\" option?\");\n }\n\n if (getAreModulesRegistered()) {\n throw new Error(\"[squide] Cannot register an MSW request handlers once the modules are registered. Are you trying to register an MSW request handler in a deferred registration function? Only navigation items can be registered in a deferred registration function.\");\n }\n\n mswPlugin.registerRequestHandlers(handlers, {\n logger\n });\n }\n\n // Must define a return type otherwise we get an \"error TS2742: The inferred type of 'requestHandlers' cannot be named\" error.\n get requestHandlers(): RequestHandler[] {\n const mswPlugin = this.getPlugin(MswPluginName) as MswPlugin;\n\n if (!mswPlugin) {\n throw new Error(\"[squide] Cannot retrieve MSW request handlers because the runtime hasn't been initialized with MSW. Did you instanciate the FireflyRuntime with the \\\"useMsw\\\" option?\");\n }\n\n return mswPlugin.requestHandlers;\n }\n\n registerRoute(route: Route, options: RegisterRouteOptions = {}) {\n if (getAreModulesRegistered()) {\n throw new Error(\"[squide] Cannot register a route once the modules are registered. Are you trying to register a route in a deferred registration function? Only navigation items can be registered in a deferred registration function.\");\n }\n\n super.registerRoute(route, options);\n }\n\n get appRouterStore() {\n return this._appRouterStore;\n }\n\n get isMswEnabled() {\n return this._useMsw;\n }\n\n startScope(logger: Logger): FireflyRuntime {\n return (new FireflyRuntimeScope(this, logger) as unknown) as FireflyRuntime;\n }\n}\n\nexport class FireflyRuntimeScope<TRuntime extends FireflyRuntime = FireflyRuntime> extends ReactRouterRuntimeScope<TRuntime> implements IFireflyRuntime {\n registerRequestHandlers(handlers: RequestHandler[], options: RegisterRequestHandlersOptions = {}) {\n this._runtime.registerRequestHandlers(handlers, {\n ...options,\n logger: this._getLogger(options)\n });\n }\n\n get requestHandlers(): RequestHandler[] {\n return this._runtime.requestHandlers;\n }\n\n get appRouterStore() {\n return this._runtime.appRouterStore;\n }\n\n get isMswEnabled() {\n return this._runtime.isMswEnabled;\n }\n}\n"],"names":["MswPlugin","MswPluginName","ReactRouterRuntime","ReactRouterRuntimeScope","getAreModulesRegistered","createAppRouterStore","FireflyRuntime","plugins","useMsw","options","runtime","handlers","logger","mswPlugin","Error","route","FireflyRuntimeScope"],"mappings":";;;;;;;;;;;;;;AACuD;AACkE;AAGzD;AACgB;AAezE,MAAMM,uBAAuBJ,kBAAkBA;IACxC,gBAAgC;IAChC,QAAiB;IAE3B,YAAY,EAAEK,OAAO,EAAEC,MAAM,EAAE,GAAGC,SAAgC,GAAG,CAAC,CAAC,CAAE;QACrE,IAAID,QAAQ;YACR,KAAK,CAAC;gBACF,SAAS;uBACDD,WAAW,EAAE;oBACjBG,CAAAA,UAAW,IAAIV,SAASA,CAACU;iBAC5B;gBACD,GAAGD,OAAO;YACd;YAEA,IAAI,CAAC,OAAO,GAAG;QACnB,OAAO;YACH,KAAK,CAAC;gBACFF;gBACA,GAAGE,OAAO;YACd;YAEA,IAAI,CAAC,OAAO,GAAG;QACnB;QAEA,IAAI,CAAC,eAAe,GAAGJ,oBAAoBA,CAAC,IAAI,CAAC,OAAO;IAC5D;IAEA,wBAAwBM,QAA0B,EAAEF,UAA0C,CAAC,CAAC,EAAE;QAC9F,MAAMG,SAAS,IAAI,CAAC,UAAU,CAACH;QAC/B,MAAMI,YAAY,IAAI,CAAC,SAAS,CAACZ,aAAaA;QAE9C,IAAI,CAACY,WAAW;YACZ,MAAM,IAAIC,MAAM;QACpB;QAEA,IAAIV,uBAAuBA,IAAI;YAC3B,MAAM,IAAIU,MAAM;QACpB;QAEAD,UAAU,uBAAuB,CAACF,UAAU;YACxCC;QACJ;IACJ;IAEA,8HAA8H;IAC9H,IAAI,kBAAoC;QACpC,MAAMC,YAAY,IAAI,CAAC,SAAS,CAACZ,aAAaA;QAE9C,IAAI,CAACY,WAAW;YACZ,MAAM,IAAIC,MAAM;QACpB;QAEA,OAAOD,UAAU,eAAe;IACpC;IAEA,cAAcE,KAAY,EAAEN,UAAgC,CAAC,CAAC,EAAE;QAC5D,IAAIL,uBAAuBA,IAAI;YAC3B,MAAM,IAAIU,MAAM;QACpB;QAEA,KAAK,CAAC,cAAcC,OAAON;IAC/B;IAEA,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,eAAe;IAC/B;IAEA,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,WAAWG,MAAc,EAAkB;QACvC,OAAQ,IAAII,oBAAoB,IAAI,EAAEJ;IAC1C;AACJ;AAEO,MAAMI,4BAA8Eb,uBAAuBA;IAC9G,wBAAwBQ,QAA0B,EAAEF,UAA0C,CAAC,CAAC,EAAE;QAC9F,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAACE,UAAU;YAC5C,GAAGF,OAAO;YACV,QAAQ,IAAI,CAAC,UAAU,CAACA;QAC5B;IACJ;IAEA,IAAI,kBAAoC;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe;IACxC;IAEA,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc;IACvC;IAEA,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;IACrC;AACJ"}
@@ -1,5 +1,5 @@
1
1
  import type { Span } from "@opentelemetry/api";
2
- import type { RootLogger } from "@workleap/logging";
2
+ import type { Logger } from "@workleap/logging";
3
3
  export type ActiveSpanId = string;
4
4
  export interface ActiveSpan {
5
5
  id: ActiveSpanId;
@@ -9,4 +9,4 @@ export interface ActiveSpan {
9
9
  export declare function registerActiveSpanStack(): void;
10
10
  export declare function setActiveSpan(name: string, span: Span): ActiveSpan;
11
11
  export declare function popActiveSpan(span: ActiveSpan): void;
12
- export declare function createOverrideFetchRequestSpanWithActiveSpanContext(logger: RootLogger): (span: Span, request: Request | RequestInit) => true | undefined;
12
+ export declare function createOverrideFetchRequestSpanWithActiveSpanContext(logger: Logger): (span: Span, request: Request | RequestInit) => true | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"honeycomb/activeSpan.js","sources":["webpack://@squide/firefly/./src/honeycomb/activeSpan.ts"],"sourcesContent":["import type { Span } from \"@opentelemetry/api\";\nimport { isPlainObject } from \"@squide/core\";\nimport type { RootLogger } from \"@workleap/logging\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { createTraceContextId } from \"./createTraceContextId.ts\";\n\nexport type ActiveSpanId = string;\n\nexport interface ActiveSpan {\n id: ActiveSpanId;\n name: string;\n instance: Span;\n}\n\n// Using a stack because we want a Last In First Out implementation for this.\n// https://github.com/open-telemetry/opentelemetry-js/issues/5084\n// https://github.com/open-telemetry/opentelemetry-js/issues/3558#issuecomment-1760680244\nclass ActiveSpanStack {\n readonly #stack: ActiveSpan[] = [];\n\n push(span: ActiveSpan) {\n this.#stack.push(span);\n }\n\n pop(span: ActiveSpan) {\n const head = this.#stack.pop();\n\n if (!head) {\n throw new Error(\"[squide] Unexpected pop, the active Honeycomb span stack is empty.\");\n }\n\n if (head.id !== span.id) {\n throw new Error(`[squide] The active Honeycomb span is not the expected span. Expected to pop span with name and id \"${span.name} / ${span.id}\" but found \"${head.name} / ${head.id}\". Did you forget to end an active span?`);\n }\n\n return head;\n }\n\n peek() {\n if (this.#stack.length === 0) {\n return undefined;\n }\n\n return this.#stack[this.#stack.length - 1];\n }\n}\n\nconst GlobalActiveSpanStackVariableName = \"__SQUIDE_HONEYCOMB_ACTIVE_SPAN_STACK__\";\n\nexport function registerActiveSpanStack() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (globalThis[GlobalActiveSpanStackVariableName]) {\n throw new Error(`[squide] An ActiveSpanStack instance has already been registered to globalThis.${GlobalActiveSpanStackVariableName}. Did you register the Honeycomb instrumentation twice?`);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n globalThis[GlobalActiveSpanStackVariableName] = new ActiveSpanStack();\n}\n\nfunction getActiveSpanStack() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis[GlobalActiveSpanStackVariableName] as ActiveSpanStack;\n}\n\nfunction getActiveSpan() {\n const stack = getActiveSpanStack();\n\n if (stack) {\n return stack.peek();\n }\n}\n\nexport function setActiveSpan(name: string, span: Span) {\n const activeSpan: ActiveSpan = {\n id: uuidv4(),\n name: name,\n instance: span\n };\n\n const stack = getActiveSpanStack();\n\n if (stack) {\n stack.push(activeSpan);\n }\n\n return activeSpan;\n}\n\nexport function popActiveSpan(span: ActiveSpan) {\n const stack = getActiveSpanStack();\n\n if (stack) {\n stack.pop(span);\n }\n}\n\nexport function createOverrideFetchRequestSpanWithActiveSpanContext(logger: RootLogger) {\n return (span: Span, request: Request | RequestInit) => {\n const activeSpan = getActiveSpan();\n\n if (activeSpan) {\n const activeSpanContext = activeSpan.instance.spanContext();\n const requestSpanContext = span.spanContext();\n\n if (activeSpanContext) {\n logger\n .withText(\"[squide] Found a Honeycomb active context to apply to the following fetch request:\")\n .withLineChange()\n .withText(\"Request span context:\")\n .withObject(requestSpanContext)\n .withLineChange()\n .withText(\"Active span context:\")\n .withObject(activeSpanContext)\n .withLineChange()\n .withText(\"Request:\")\n .withObject(request)\n .debug();\n\n span.setAttribute(\"trace.trace_id\", activeSpanContext.traceId);\n span.setAttribute(\"trace.parent_id\", activeSpanContext.spanId);\n\n const traceParent = createTraceContextId(activeSpanContext.traceId, requestSpanContext.spanId, requestSpanContext.traceFlags);\n\n if (request instanceof Request) {\n request.headers.set(\"traceparent\", traceParent);\n } else if (isPlainObject(request.headers)) {\n request.headers[\"traceparent\"] = traceParent;\n }\n\n // Indicates to not propagate the requests to the subsequent hooks.\n return true;\n }\n }\n };\n}\n"],"names":["isPlainObject","v4","uuidv4","createTraceContextId","ActiveSpanStack","span","head","Error","undefined","GlobalActiveSpanStackVariableName","registerActiveSpanStack","globalThis","getActiveSpanStack","getActiveSpan","stack","setActiveSpan","name","activeSpan","popActiveSpan","createOverrideFetchRequestSpanWithActiveSpanContext","logger","request","activeSpanContext","requestSpanContext","traceParent","Request"],"mappings":";;;;;;;;;;;AAC6C;AAET;AAC6B;AAUjE,6EAA6E;AAC7E,iEAAiE;AACjE,yFAAyF;AACzF,MAAMI;IACO,MAAM,GAAiB,EAAE,CAAC;IAEnC,KAAKC,IAAgB,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAACA;IACrB;IAEA,IAAIA,IAAgB,EAAE;QAClB,MAAMC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG;QAE5B,IAAI,CAACA,MAAM;YACP,MAAM,IAAIC,MAAM;QACpB;QAEA,IAAID,KAAK,EAAE,KAAKD,KAAK,EAAE,EAAE;YACrB,MAAM,IAAIE,MAAM,CAAC,oGAAoG,EAAEF,KAAK,IAAI,CAAC,GAAG,EAAEA,KAAK,EAAE,CAAC,aAAa,EAAEC,KAAK,IAAI,CAAC,GAAG,EAAEA,KAAK,EAAE,CAAC,wCAAwC,CAAC;QACjO;QAEA,OAAOA;IACX;IAEA,OAAO;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG;YAC1B,OAAOE;QACX;QAEA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;IAC9C;AACJ;AAEA,MAAMC,oCAAoC;AAEnC,SAASC;IACZ,6DAA6D;IAC7D,aAAa;IACb,IAAIC,UAAU,CAACF,kCAAkC,EAAE;QAC/C,MAAM,IAAIF,MAAM,CAAC,+EAA+E,EAAEE,kCAAkC,uDAAuD,CAAC;IAChM;IAEA,6DAA6D;IAC7D,aAAa;IACbE,UAAU,CAACF,kCAAkC,GAAG,IAAIL;AACxD;AAEA,SAASQ;IACL,6DAA6D;IAC7D,aAAa;IACb,OAAOD,UAAU,CAACF,kCAAkC;AACxD;AAEA,SAASI;IACL,MAAMC,QAAQF;IAEd,IAAIE,OAAO;QACP,OAAOA,MAAM,IAAI;IACrB;AACJ;AAEO,SAASC,cAAcC,IAAY,EAAEX,IAAU;IAClD,MAAMY,aAAyB;QAC3B,IAAIf,EAAMA;QACV,MAAMc;QACN,UAAUX;IACd;IAEA,MAAMS,QAAQF;IAEd,IAAIE,OAAO;QACPA,MAAM,IAAI,CAACG;IACf;IAEA,OAAOA;AACX;AAEO,SAASC,cAAcb,IAAgB;IAC1C,MAAMS,QAAQF;IAEd,IAAIE,OAAO;QACPA,MAAM,GAAG,CAACT;IACd;AACJ;AAEO,SAASc,oDAAoDC,MAAkB;IAClF,OAAO,CAACf,MAAYgB;QAChB,MAAMJ,aAAaJ;QAEnB,IAAII,YAAY;YACZ,MAAMK,oBAAoBL,WAAW,QAAQ,CAAC,WAAW;YACzD,MAAMM,qBAAqBlB,KAAK,WAAW;YAE3C,IAAIiB,mBAAmB;gBACnBF,OACK,QAAQ,CAAC,sFACT,cAAc,GACd,QAAQ,CAAC,yBACT,UAAU,CAACG,oBACX,cAAc,GACd,QAAQ,CAAC,wBACT,UAAU,CAACD,mBACX,cAAc,GACd,QAAQ,CAAC,YACT,UAAU,CAACD,SACX,KAAK;gBAEVhB,KAAK,YAAY,CAAC,kBAAkBiB,kBAAkB,OAAO;gBAC7DjB,KAAK,YAAY,CAAC,mBAAmBiB,kBAAkB,MAAM;gBAE7D,MAAME,cAAcrB,oBAAoBA,CAACmB,kBAAkB,OAAO,EAAEC,mBAAmB,MAAM,EAAEA,mBAAmB,UAAU;gBAE5H,IAAIF,mBAAmBI,SAAS;oBAC5BJ,QAAQ,OAAO,CAAC,GAAG,CAAC,eAAeG;gBACvC,OAAO,IAAIxB,aAAaA,CAACqB,QAAQ,OAAO,GAAG;oBACvCA,QAAQ,OAAO,CAAC,cAAc,GAAGG;gBACrC;gBAEA,mEAAmE;gBACnE,OAAO;YACX;QACJ;IACJ;AACJ"}
1
+ {"version":3,"file":"honeycomb/activeSpan.js","sources":["webpack://@squide/firefly/./src/honeycomb/activeSpan.ts"],"sourcesContent":["import type { Span } from \"@opentelemetry/api\";\nimport { isPlainObject } from \"@squide/core\";\nimport type { Logger } from \"@workleap/logging\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { createTraceContextId } from \"./createTraceContextId.ts\";\n\nexport type ActiveSpanId = string;\n\nexport interface ActiveSpan {\n id: ActiveSpanId;\n name: string;\n instance: Span;\n}\n\n// Using a stack because we want a Last In First Out implementation for this.\n// https://github.com/open-telemetry/opentelemetry-js/issues/5084\n// https://github.com/open-telemetry/opentelemetry-js/issues/3558#issuecomment-1760680244\nclass ActiveSpanStack {\n readonly #stack: ActiveSpan[] = [];\n\n push(span: ActiveSpan) {\n this.#stack.push(span);\n }\n\n pop(span: ActiveSpan) {\n const head = this.#stack.pop();\n\n if (!head) {\n throw new Error(\"[squide] Unexpected pop, the active Honeycomb span stack is empty.\");\n }\n\n if (head.id !== span.id) {\n throw new Error(`[squide] The active Honeycomb span is not the expected span. Expected to pop span with name and id \"${span.name} / ${span.id}\" but found \"${head.name} / ${head.id}\". Did you forget to end an active span?`);\n }\n\n return head;\n }\n\n peek() {\n if (this.#stack.length === 0) {\n return undefined;\n }\n\n return this.#stack[this.#stack.length - 1];\n }\n}\n\nconst GlobalActiveSpanStackVariableName = \"__SQUIDE_HONEYCOMB_ACTIVE_SPAN_STACK__\";\n\nexport function registerActiveSpanStack() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (globalThis[GlobalActiveSpanStackVariableName]) {\n throw new Error(`[squide] An ActiveSpanStack instance has already been registered to globalThis.${GlobalActiveSpanStackVariableName}. Did you register the Honeycomb instrumentation twice?`);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n globalThis[GlobalActiveSpanStackVariableName] = new ActiveSpanStack();\n}\n\nfunction getActiveSpanStack() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis[GlobalActiveSpanStackVariableName] as ActiveSpanStack;\n}\n\nfunction getActiveSpan() {\n const stack = getActiveSpanStack();\n\n if (stack) {\n return stack.peek();\n }\n}\n\nexport function setActiveSpan(name: string, span: Span) {\n const activeSpan: ActiveSpan = {\n id: uuidv4(),\n name: name,\n instance: span\n };\n\n const stack = getActiveSpanStack();\n\n if (stack) {\n stack.push(activeSpan);\n }\n\n return activeSpan;\n}\n\nexport function popActiveSpan(span: ActiveSpan) {\n const stack = getActiveSpanStack();\n\n if (stack) {\n stack.pop(span);\n }\n}\n\nexport function createOverrideFetchRequestSpanWithActiveSpanContext(logger: Logger) {\n return (span: Span, request: Request | RequestInit) => {\n const activeSpan = getActiveSpan();\n\n if (activeSpan) {\n const activeSpanContext = activeSpan.instance.spanContext();\n const requestSpanContext = span.spanContext();\n\n if (activeSpanContext) {\n logger\n .withText(\"[squide] Found a Honeycomb active context to apply to the following fetch request:\")\n .withLineChange()\n .withText(\"Request span context:\")\n .withObject(requestSpanContext)\n .withLineChange()\n .withText(\"Active span context:\")\n .withObject(activeSpanContext)\n .withLineChange()\n .withText(\"Request:\")\n .withObject(request)\n .debug();\n\n span.setAttribute(\"trace.trace_id\", activeSpanContext.traceId);\n span.setAttribute(\"trace.parent_id\", activeSpanContext.spanId);\n\n const traceParent = createTraceContextId(activeSpanContext.traceId, requestSpanContext.spanId, requestSpanContext.traceFlags);\n\n if (request instanceof Request) {\n request.headers.set(\"traceparent\", traceParent);\n } else if (isPlainObject(request.headers)) {\n request.headers[\"traceparent\"] = traceParent;\n }\n\n // Indicates to not propagate the requests to the subsequent hooks.\n return true;\n }\n }\n };\n}\n"],"names":["isPlainObject","v4","uuidv4","createTraceContextId","ActiveSpanStack","span","head","Error","undefined","GlobalActiveSpanStackVariableName","registerActiveSpanStack","globalThis","getActiveSpanStack","getActiveSpan","stack","setActiveSpan","name","activeSpan","popActiveSpan","createOverrideFetchRequestSpanWithActiveSpanContext","logger","request","activeSpanContext","requestSpanContext","traceParent","Request"],"mappings":";;;;;;;;;;;AAC6C;AAET;AAC6B;AAUjE,6EAA6E;AAC7E,iEAAiE;AACjE,yFAAyF;AACzF,MAAMI;IACO,MAAM,GAAiB,EAAE,CAAC;IAEnC,KAAKC,IAAgB,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAACA;IACrB;IAEA,IAAIA,IAAgB,EAAE;QAClB,MAAMC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG;QAE5B,IAAI,CAACA,MAAM;YACP,MAAM,IAAIC,MAAM;QACpB;QAEA,IAAID,KAAK,EAAE,KAAKD,KAAK,EAAE,EAAE;YACrB,MAAM,IAAIE,MAAM,CAAC,oGAAoG,EAAEF,KAAK,IAAI,CAAC,GAAG,EAAEA,KAAK,EAAE,CAAC,aAAa,EAAEC,KAAK,IAAI,CAAC,GAAG,EAAEA,KAAK,EAAE,CAAC,wCAAwC,CAAC;QACjO;QAEA,OAAOA;IACX;IAEA,OAAO;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG;YAC1B,OAAOE;QACX;QAEA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;IAC9C;AACJ;AAEA,MAAMC,oCAAoC;AAEnC,SAASC;IACZ,6DAA6D;IAC7D,aAAa;IACb,IAAIC,UAAU,CAACF,kCAAkC,EAAE;QAC/C,MAAM,IAAIF,MAAM,CAAC,+EAA+E,EAAEE,kCAAkC,uDAAuD,CAAC;IAChM;IAEA,6DAA6D;IAC7D,aAAa;IACbE,UAAU,CAACF,kCAAkC,GAAG,IAAIL;AACxD;AAEA,SAASQ;IACL,6DAA6D;IAC7D,aAAa;IACb,OAAOD,UAAU,CAACF,kCAAkC;AACxD;AAEA,SAASI;IACL,MAAMC,QAAQF;IAEd,IAAIE,OAAO;QACP,OAAOA,MAAM,IAAI;IACrB;AACJ;AAEO,SAASC,cAAcC,IAAY,EAAEX,IAAU;IAClD,MAAMY,aAAyB;QAC3B,IAAIf,EAAMA;QACV,MAAMc;QACN,UAAUX;IACd;IAEA,MAAMS,QAAQF;IAEd,IAAIE,OAAO;QACPA,MAAM,IAAI,CAACG;IACf;IAEA,OAAOA;AACX;AAEO,SAASC,cAAcb,IAAgB;IAC1C,MAAMS,QAAQF;IAEd,IAAIE,OAAO;QACPA,MAAM,GAAG,CAACT;IACd;AACJ;AAEO,SAASc,oDAAoDC,MAAc;IAC9E,OAAO,CAACf,MAAYgB;QAChB,MAAMJ,aAAaJ;QAEnB,IAAII,YAAY;YACZ,MAAMK,oBAAoBL,WAAW,QAAQ,CAAC,WAAW;YACzD,MAAMM,qBAAqBlB,KAAK,WAAW;YAE3C,IAAIiB,mBAAmB;gBACnBF,OACK,QAAQ,CAAC,sFACT,cAAc,GACd,QAAQ,CAAC,yBACT,UAAU,CAACG,oBACX,cAAc,GACd,QAAQ,CAAC,wBACT,UAAU,CAACD,mBACX,cAAc,GACd,QAAQ,CAAC,YACT,UAAU,CAACD,SACX,KAAK;gBAEVhB,KAAK,YAAY,CAAC,kBAAkBiB,kBAAkB,OAAO;gBAC7DjB,KAAK,YAAY,CAAC,mBAAmBiB,kBAAkB,MAAM;gBAE7D,MAAME,cAAcrB,oBAAoBA,CAACmB,kBAAkB,OAAO,EAAEC,mBAAmB,MAAM,EAAEA,mBAAmB,UAAU;gBAE5H,IAAIF,mBAAmBI,SAAS;oBAC5BJ,QAAQ,OAAO,CAAC,GAAG,CAAC,eAAeG;gBACvC,OAAO,IAAIxB,aAAaA,CAACqB,QAAQ,OAAO,GAAG;oBACvCA,QAAQ,OAAO,CAAC,cAAc,GAAGG;gBACrC;gBAEA,mEAAmE;gBACnE,OAAO;YACX;QACJ;IACJ;AACJ"}
@@ -47,10 +47,15 @@ function reduceDataFetchEvents(runtime, onDataFetchStarted, onDataReady, onPubli
47
47
  }, {
48
48
  once: true
49
49
  });
50
- runtime.eventBus.addListener(PublicDataReadyEvent, ()=>{
50
+ runtime.eventBus.addListener(PublicDataReadyEvent, (payload)=>{
51
51
  onPublicDataReady();
52
52
  if (dataFetchState === "fetching-data") {
53
- dataFetchState = "public-data-ready";
53
+ if (payload && !payload.waitForProtectedData) {
54
+ dataFetchState = "data-ready";
55
+ onDataReady();
56
+ } else {
57
+ dataFetchState = "public-data-ready";
58
+ }
54
59
  } else if (dataFetchState === "protected-data-ready") {
55
60
  dataFetchState = "data-ready";
56
61
  onDataReady();
@@ -67,10 +72,15 @@ function reduceDataFetchEvents(runtime, onDataFetchStarted, onDataReady, onPubli
67
72
  }, {
68
73
  once: true
69
74
  });
70
- runtime.eventBus.addListener(ProtectedDataReadyEvent, ()=>{
75
+ runtime.eventBus.addListener(ProtectedDataReadyEvent, (payload)=>{
71
76
  onProtectedDataReady();
72
77
  if (dataFetchState === "fetching-data") {
73
- dataFetchState = "protected-data-ready";
78
+ if (payload && !payload.waitForPublicData) {
79
+ dataFetchState = "data-ready";
80
+ onDataReady();
81
+ } else {
82
+ dataFetchState = "protected-data-ready";
83
+ }
74
84
  } else if (dataFetchState === "public-data-ready") {
75
85
  dataFetchState = "data-ready";
76
86
  onDataReady();
@@ -300,7 +310,12 @@ function registerTrackingListeners(runtime) {
300
310
  queriesErrors.forEach((x)=>{
301
311
  traceError(dataFetchSpan.instance, x);
302
312
  });
303
- dataFetchSpan.instance.end();
313
+ endActiveSpan(dataFetchSpan);
314
+ // Global data fetch errors are unmanaged, which mean the host application bootstrapping flow
315
+ // will be aborted and a react-router error boundary will be rendered.
316
+ if (bootstrappingSpan) {
317
+ bootstrappingSpan.end();
318
+ }
304
319
  }
305
320
  };
306
321
  reduceDataFetchEvents(runtime, handleFetchDataStarted, handleDataReady, handlePublicDataFetchStarted, handlePublicDataReady, handleProtectedDataFetchStarted, handleProtectedDataReady, handleDataFetchFailed);
@@ -1 +1 @@
1
- {"version":3,"file":"honeycomb/registerHoneycombInstrumentation.js","sources":["webpack://@squide/firefly/./src/honeycomb/registerHoneycombInstrumentation.ts"],"sourcesContent":["import type { Span } from \"@opentelemetry/api\";\nimport {\n LocalModuleDeferredRegistrationFailedEvent,\n LocalModuleDeferredRegistrationUpdateFailedEvent,\n LocalModuleRegistrationFailedEvent,\n LocalModulesDeferredRegistrationCompletedEvent,\n type LocalModulesDeferredRegistrationCompletedEventPayload,\n LocalModulesDeferredRegistrationStartedEvent,\n type LocalModulesDeferredRegistrationStartedEventPayload,\n LocalModulesDeferredRegistrationsUpdateCompletedEvent,\n type LocalModulesDeferredRegistrationsUpdateCompletedEventPayload,\n LocalModulesDeferredRegistrationsUpdateStartedEvent,\n type LocalModulesDeferredRegistrationsUpdateStartedEventPayload,\n LocalModulesRegistrationCompletedEvent,\n type LocalModulesRegistrationCompletedEventPayload,\n LocalModulesRegistrationStartedEvent,\n type LocalModulesRegistrationStartedEventPayload,\n type ModuleRegistrationError\n} from \"@squide/core\";\nimport {\n DeferredRegistrationsUpdateCompletedEvent,\n DeferredRegistrationsUpdateStartedEvent,\n RemoteModuleDeferredRegistrationFailedEvent,\n RemoteModuleDeferredRegistrationUpdateFailedEvent,\n type RemoteModuleRegistrationError,\n RemoteModuleRegistrationFailedEvent,\n RemoteModulesDeferredRegistrationCompletedEvent,\n type RemoteModulesDeferredRegistrationCompletedEventPayload,\n RemoteModulesDeferredRegistrationStartedEvent,\n type RemoteModulesDeferredRegistrationStartedEventPayload,\n RemoteModulesDeferredRegistrationsUpdateCompletedEvent,\n type RemoteModulesDeferredRegistrationsUpdateCompletedEventPayload,\n RemoteModulesDeferredRegistrationsUpdateStartedEvent,\n type RemoteModulesDeferredRegistrationsUpdateStartedEventPayload,\n RemoteModulesRegistrationCompletedEvent,\n type RemoteModulesRegistrationCompletedEventPayload,\n RemoteModulesRegistrationStartedEvent,\n type RemoteModulesRegistrationStartedEventPayload\n} from \"@squide/module-federation\";\nimport { ApplicationBoostrappedEvent, ModulesReadyEvent, ModulesRegisteredEvent, MswReadyEvent, ProtectedDataReadyEvent, PublicDataReadyEvent } from \"../AppRouterReducer.ts\";\nimport type { FireflyRuntime } from \"../FireflyRuntime.tsx\";\nimport { ApplicationBootstrappingStartedEvent } from \"../initializeFirefly.ts\";\nimport { ProtectedDataFetchFailedEvent, ProtectedDataFetchStartedEvent } from \"../useProtectedDataQueries.ts\";\nimport { PublicDataFetchFailedEvent, PublicDataFetchStartedEvent } from \"../usePublicDataQueries.ts\";\nimport { type ActiveSpan, createOverrideFetchRequestSpanWithActiveSpanContext, registerActiveSpanStack } from \"./activeSpan.ts\";\nimport { getTracer } from \"./tracer.ts\";\nimport { endActiveSpan, startActiveChildSpan, startChildSpan, startSpan, traceError } from \"./utils.ts\";\n\n// TIPS:\n// To query those traces in Honeycomb, use the following query filter: \"root.name = squide-bootstrapping\".\n\ntype DataFetchState = \"none\" | \"fetching-data\" | \"public-data-ready\" | \"protected-data-ready\" | \"data-ready\" | \"data-fetch-failed\";\n\nexport function reduceDataFetchEvents(\n runtime: FireflyRuntime,\n onDataFetchStarted: () => void,\n onDataReady: () => void,\n onPublicDataFetchStarted: () => void,\n onPublicDataReady: () => void,\n onProtectedDataFetchStarted: () => void,\n onProtectedDataReady: () => void,\n onDataFetchFailed: (queriesErrors: Error[]) => void\n) {\n let dataFetchState: DataFetchState = \"none\";\n\n runtime.eventBus.addListener(PublicDataFetchStartedEvent, () => {\n if (dataFetchState === \"none\") {\n dataFetchState = \"fetching-data\";\n onDataFetchStarted();\n }\n\n onPublicDataFetchStarted();\n }, { once: true });\n\n runtime.eventBus.addListener(PublicDataReadyEvent, () => {\n onPublicDataReady();\n\n if (dataFetchState === \"fetching-data\") {\n dataFetchState = \"public-data-ready\";\n } else if (dataFetchState === \"protected-data-ready\") {\n dataFetchState = \"data-ready\";\n onDataReady();\n }\n }, { once: true });\n\n runtime.eventBus.addListener(ProtectedDataFetchStartedEvent, () => {\n if (dataFetchState === \"none\") {\n dataFetchState = \"fetching-data\";\n onDataFetchStarted();\n }\n\n onProtectedDataFetchStarted();\n }, { once: true });\n\n runtime.eventBus.addListener(ProtectedDataReadyEvent, () => {\n onProtectedDataReady();\n\n if (dataFetchState === \"fetching-data\") {\n dataFetchState = \"protected-data-ready\";\n } else if (dataFetchState === \"public-data-ready\") {\n dataFetchState = \"data-ready\";\n onDataReady();\n }\n }, { once: true });\n\n const handleDataFetchFailed = (payload: unknown) => {\n if (dataFetchState !== \"data-fetch-failed\") {\n dataFetchState = \"data-fetch-failed\";\n\n onDataFetchFailed(payload as Error[]);\n }\n };\n\n runtime.eventBus.addListener(PublicDataFetchFailedEvent, handleDataFetchFailed, { once: true });\n runtime.eventBus.addListener(ProtectedDataFetchFailedEvent, handleDataFetchFailed, { once: true });\n}\n\nfunction registerTrackingListeners(runtime: FireflyRuntime) {\n let bootstrappingSpan: Span;\n let localModuleRegistrationSpan: Span;\n let localModuleDeferredRegistrationSpan: Span;\n let remoteModuleRegistrationSpan: Span;\n let remoteModuleDeferredRegistrationSpan: Span;\n let dataFetchSpan: ActiveSpan;\n let deferredRegistrationsUpdateSpan: Span;\n let localModuleDeferredRegistrationsUpdateSpan: ActiveSpan;\n let remoteModuleDeferredRegistrationsUpdateSpan: ActiveSpan;\n\n runtime.eventBus.addListener(ApplicationBootstrappingStartedEvent, () => {\n bootstrappingSpan = startSpan((options, context) => getTracer().startSpan(\"squide-bootstrapping\", options, context));\n }, { once: true });\n\n runtime.eventBus.addListener(ApplicationBoostrappedEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.end();\n }\n }, { once: true });\n\n runtime.eventBus.addListener(MswReadyEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"msw-ready\");\n }\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.module_count\": (payload as LocalModulesRegistrationStartedEventPayload).moduleCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-registration-started\", attributes);\n }\n\n localModuleRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"local-module-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-registration-completed\", {\n \"app.squide.module_count\": (payload as LocalModulesRegistrationCompletedEventPayload).moduleCount\n });\n }\n\n if (localModuleRegistrationSpan) {\n localModuleRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleRegistrationSpan) {\n traceError(localModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationStartedEventPayload).registrationCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-deferred-registration-started\", attributes);\n }\n\n localModuleDeferredRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"local-module-deferred-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-deferred-registration-completed\", {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationCompletedEventPayload).registrationCount\n });\n }\n\n if (localModuleDeferredRegistrationSpan) {\n localModuleDeferredRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleDeferredRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleDeferredRegistrationSpan) {\n traceError(localModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(RemoteModulesRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.remote_count\": (payload as RemoteModulesRegistrationStartedEventPayload).remoteCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-registration-started\", attributes);\n }\n\n remoteModuleRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"remote-module-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(RemoteModulesRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-registration-completed\", {\n \"app.squide.remote_count\": (payload as RemoteModulesRegistrationCompletedEventPayload).remoteCount\n });\n }\n\n if (remoteModuleRegistrationSpan) {\n remoteModuleRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleRegistrationSpan) {\n traceError(remoteModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationStartedEventPayload).registrationCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-deferred-registration-started\", attributes);\n }\n\n remoteModuleDeferredRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"remote-module-deferred-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-deferred-registration-completed\", {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationCompletedEventPayload).registrationCount\n });\n }\n\n if (remoteModuleDeferredRegistrationSpan) {\n remoteModuleDeferredRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleDeferredRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleDeferredRegistrationSpan) {\n traceError(remoteModuleDeferredRegistrationSpan, registrationError);\n }\n });\n\n const handleFetchDataStarted = () => {\n dataFetchSpan = startActiveChildSpan(bootstrappingSpan, (options, context) => {\n const name = \"data-fetch\";\n const span = getTracer().startSpan(name, options, context);\n\n return {\n name,\n span\n };\n });\n };\n\n const handleDataReady = () => {\n if (dataFetchSpan) {\n endActiveSpan(dataFetchSpan);\n }\n };\n\n const handlePublicDataFetchStarted = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"public-data-fetch-started\");\n }\n };\n\n const handlePublicDataReady = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"public-data-ready\");\n }\n };\n\n const handleProtectedDataFetchStarted = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"protected-data-fetch-started\");\n }\n };\n\n const handleProtectedDataReady = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"protected-data-ready\");\n }\n };\n\n const handleDataFetchFailed = (queriesErrors: Error[]) => {\n if (dataFetchSpan) {\n queriesErrors.forEach(x => {\n traceError(dataFetchSpan.instance, x);\n });\n\n dataFetchSpan.instance.end();\n }\n };\n\n reduceDataFetchEvents(\n runtime,\n handleFetchDataStarted,\n handleDataReady,\n handlePublicDataFetchStarted,\n handlePublicDataReady,\n handleProtectedDataFetchStarted,\n handleProtectedDataReady,\n handleDataFetchFailed\n );\n\n runtime.eventBus.addListener(ModulesRegisteredEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"modules-registered\");\n }\n }, { once: true });\n\n runtime.eventBus.addListener(ModulesReadyEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"modules-ready\");\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(DeferredRegistrationsUpdateStartedEvent, () => {\n deferredRegistrationsUpdateSpan = startSpan((options, context) => getTracer().startSpan(\"squide-deferred-registrations-update\", options, context));\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(DeferredRegistrationsUpdateCompletedEvent, () => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.end();\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationsUpdateStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationsUpdateStartedEventPayload).registrationCount\n };\n\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"local-module-deferred-registrations-update-started\", attributes);\n }\n\n localModuleDeferredRegistrationsUpdateSpan = startActiveChildSpan(deferredRegistrationsUpdateSpan, (options, context) => {\n const name = \"local-module-deferred-registrations-update\";\n\n const span = getTracer().startSpan(name, {\n attributes,\n ...options\n }, context);\n\n return {\n name,\n span\n };\n });\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationsUpdateCompletedEvent, (payload: unknown) => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"local-module-deferred-registrations-update-completed\", {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationsUpdateCompletedEventPayload).registrationCount\n });\n }\n\n if (localModuleDeferredRegistrationsUpdateSpan) {\n endActiveSpan(localModuleDeferredRegistrationsUpdateSpan);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleDeferredRegistrationUpdateFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleDeferredRegistrationsUpdateSpan) {\n traceError(localModuleDeferredRegistrationsUpdateSpan.instance, registrationError);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationsUpdateStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationsUpdateStartedEventPayload).registrationCount\n };\n\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"remote-module-deferred-registrations-update-started\", attributes);\n }\n\n remoteModuleDeferredRegistrationsUpdateSpan = startActiveChildSpan(deferredRegistrationsUpdateSpan, (options, context) => {\n const name = \"remote-module-deferred-registrations-update\";\n\n const span = getTracer().startSpan(name, {\n attributes,\n ...options\n }, context);\n\n return {\n name,\n span\n };\n });\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationsUpdateCompletedEvent, (payload: unknown) => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"remote-module-deferred-registrations-update-completed\", {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationsUpdateCompletedEventPayload).registrationCount\n });\n }\n\n if (remoteModuleDeferredRegistrationsUpdateSpan) {\n endActiveSpan(remoteModuleDeferredRegistrationsUpdateSpan);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleDeferredRegistrationUpdateFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleDeferredRegistrationsUpdateSpan) {\n traceError(remoteModuleDeferredRegistrationsUpdateSpan.instance, registrationError);\n }\n });\n}\n\nfunction getRegisterFetchRequestHookFunction() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__;\n }\n\n // Fallback to fix an error. Will remove soon.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK;\n}\n\nexport function registerHoneycombInstrumentation(runtime: FireflyRuntime) {\n const registerFetchRequestHookFunction = getRegisterFetchRequestHookFunction();\n\n if (registerFetchRequestHookFunction) {\n registerActiveSpanStack();\n\n const activeSpanOverrideFunction = createOverrideFetchRequestSpanWithActiveSpanContext(runtime.logger);\n\n // Dynamically registering this request hook function to nest the HTTP requests\n // of squide bootstrapping under the appropriate Honeycomb span.\n registerFetchRequestHookFunction(activeSpanOverrideFunction);\n } else {\n runtime.logger.warning(\"[squide] Cannot register Honeycomb fetch request hook because \\\"globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__\\\" is not available. Honeycomb instrumentation is still functional but in degraded mode.\");\n }\n\n registerTrackingListeners(runtime);\n}\n"],"names":["LocalModuleDeferredRegistrationFailedEvent","LocalModuleDeferredRegistrationUpdateFailedEvent","LocalModuleRegistrationFailedEvent","LocalModulesDeferredRegistrationCompletedEvent","LocalModulesDeferredRegistrationStartedEvent","LocalModulesDeferredRegistrationsUpdateCompletedEvent","LocalModulesDeferredRegistrationsUpdateStartedEvent","LocalModulesRegistrationCompletedEvent","LocalModulesRegistrationStartedEvent","DeferredRegistrationsUpdateCompletedEvent","DeferredRegistrationsUpdateStartedEvent","RemoteModuleDeferredRegistrationFailedEvent","RemoteModuleDeferredRegistrationUpdateFailedEvent","RemoteModuleRegistrationFailedEvent","RemoteModulesDeferredRegistrationCompletedEvent","RemoteModulesDeferredRegistrationStartedEvent","RemoteModulesDeferredRegistrationsUpdateCompletedEvent","RemoteModulesDeferredRegistrationsUpdateStartedEvent","RemoteModulesRegistrationCompletedEvent","RemoteModulesRegistrationStartedEvent","ApplicationBoostrappedEvent","ModulesReadyEvent","ModulesRegisteredEvent","MswReadyEvent","ProtectedDataReadyEvent","PublicDataReadyEvent","ApplicationBootstrappingStartedEvent","ProtectedDataFetchFailedEvent","ProtectedDataFetchStartedEvent","PublicDataFetchFailedEvent","PublicDataFetchStartedEvent","createOverrideFetchRequestSpanWithActiveSpanContext","registerActiveSpanStack","getTracer","endActiveSpan","startActiveChildSpan","startChildSpan","startSpan","traceError","reduceDataFetchEvents","runtime","onDataFetchStarted","onDataReady","onPublicDataFetchStarted","onPublicDataReady","onProtectedDataFetchStarted","onProtectedDataReady","onDataFetchFailed","dataFetchState","handleDataFetchFailed","payload","registerTrackingListeners","bootstrappingSpan","localModuleRegistrationSpan","localModuleDeferredRegistrationSpan","remoteModuleRegistrationSpan","remoteModuleDeferredRegistrationSpan","dataFetchSpan","deferredRegistrationsUpdateSpan","localModuleDeferredRegistrationsUpdateSpan","remoteModuleDeferredRegistrationsUpdateSpan","options","context","attributes","registrationError","handleFetchDataStarted","name","span","handleDataReady","handlePublicDataFetchStarted","handlePublicDataReady","handleProtectedDataFetchStarted","handleProtectedDataReady","queriesErrors","x","getRegisterFetchRequestHookFunction","globalThis","registerHoneycombInstrumentation","registerFetchRequestHookFunction","activeSpanOverrideFunction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBsB;AAoBa;AAC2I;AAE/F;AAC+B;AACT;AAC2B;AACxF;AACgE;AAOjG,SAASuC,sBACZC,OAAuB,EACvBC,kBAA8B,EAC9BC,WAAuB,EACvBC,wBAAoC,EACpCC,iBAA6B,EAC7BC,2BAAuC,EACvCC,oBAAgC,EAChCC,iBAAmD;IAEnD,IAAIC,iBAAiC;IAErCR,QAAQ,QAAQ,CAAC,WAAW,CAACV,2BAA2BA,EAAE;QACtD,IAAIkB,mBAAmB,QAAQ;YAC3BA,iBAAiB;YACjBP;QACJ;QAEAE;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBH,QAAQ,QAAQ,CAAC,WAAW,CAACf,oBAAoBA,EAAE;QAC/CmB;QAEA,IAAII,mBAAmB,iBAAiB;YACpCA,iBAAiB;QACrB,OAAO,IAAIA,mBAAmB,wBAAwB;YAClDA,iBAAiB;YACjBN;QACJ;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBF,QAAQ,QAAQ,CAAC,WAAW,CAACZ,8BAA8BA,EAAE;QACzD,IAAIoB,mBAAmB,QAAQ;YAC3BA,iBAAiB;YACjBP;QACJ;QAEAI;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBL,QAAQ,QAAQ,CAAC,WAAW,CAAChB,uBAAuBA,EAAE;QAClDsB;QAEA,IAAIE,mBAAmB,iBAAiB;YACpCA,iBAAiB;QACrB,OAAO,IAAIA,mBAAmB,qBAAqB;YAC/CA,iBAAiB;YACjBN;QACJ;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhB,MAAMO,wBAAwB,CAACC;QAC3B,IAAIF,mBAAmB,qBAAqB;YACxCA,iBAAiB;YAEjBD,kBAAkBG;QACtB;IACJ;IAEAV,QAAQ,QAAQ,CAAC,WAAW,CAACX,0BAA0BA,EAAEoB,uBAAuB;QAAE,MAAM;IAAK;IAC7FT,QAAQ,QAAQ,CAAC,WAAW,CAACb,6BAA6BA,EAAEsB,uBAAuB;QAAE,MAAM;IAAK;AACpG;AAEA,SAASE,0BAA0BX,OAAuB;IACtD,IAAIY;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJpB,QAAQ,QAAQ,CAAC,WAAW,CAACd,oCAAoCA,EAAE;QAC/D0B,oBAAoBf,SAASA,CAAC,CAACwB,SAASC,UAAY7B,SAASA,GAAG,SAAS,CAAC,wBAAwB4B,SAASC;IAC/G,GAAG;QAAE,MAAM;IAAK;IAEhBtB,QAAQ,QAAQ,CAAC,WAAW,CAACpB,2BAA2BA,EAAE;QACtD,IAAIgC,mBAAmB;YACnBA,kBAAkB,GAAG;QACzB;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBZ,QAAQ,QAAQ,CAAC,WAAW,CAACjB,aAAaA,EAAE;QACxC,IAAI6B,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC;QAC/B;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBZ,QAAQ,QAAQ,CAAC,WAAW,CAAChC,oCAAoCA,EAAE,CAAC0C;QAChE,MAAMa,aAAa;YACf,2BAA4Bb,QAAwD,WAAW;QACnG;QAEA,IAAIE,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC,qCAAqCW;QACpE;QAEAV,8BAA8BjB,cAAcA,CAACgB,mBAAmB,CAACS,SAASC;YACtE,OAAO7B,SAASA,GAAG,SAAS,CAAC,6BAA6B;gBAAE,GAAG4B,OAAO;gBAAEE;YAAW,GAAGD;QAC1F;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBtB,QAAQ,QAAQ,CAAC,WAAW,CAACjC,sCAAsCA,EAAE,CAAC2C;QAClE,IAAIE,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC,uCAAuC;gBAC9D,2BAA4BF,QAA0D,WAAW;YACrG;QACJ;QAEA,IAAIG,6BAA6B;YAC7BA,4BAA4B,GAAG;QACnC;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhB,4BAA4B;IAC5Bb,QAAQ,QAAQ,CAAC,WAAW,CAACtC,kCAAkCA,EAAE,CAACgD;QAC9D,MAAMc,oBAAoBd;QAE1B,IAAIG,6BAA6B;YAC7Bf,UAAUA,CAACe,6BAA6BW;QAC5C;IACJ;IAEAxB,QAAQ,QAAQ,CAAC,WAAW,CAACpC,4CAA4CA,EAAE,CAAC8C;QACxE,MAAMa,aAAa;YACf,iCAAkCb,QAAgE,iBAAiB;QACvH;QAEA,IAAIE,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC,8CAA8CW;QAC7E;QAEAT,sCAAsClB,cAAcA,CAACgB,mBAAmB,CAACS,SAASC;YAC9E,OAAO7B,SAASA,GAAG,SAAS,CAAC,sCAAsC;gBAAE,GAAG4B,OAAO;gBAAEE;YAAW,GAAGD;QACnG;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBtB,QAAQ,QAAQ,CAAC,WAAW,CAACrC,8CAA8CA,EAAE,CAAC+C;QAC1E,IAAIE,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC,gDAAgD;gBACvE,iCAAkCF,QAAkE,iBAAiB;YACzH;QACJ;QAEA,IAAII,qCAAqC;YACrCA,oCAAoC,GAAG;QAC3C;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhB,4BAA4B;IAC5Bd,QAAQ,QAAQ,CAAC,WAAW,CAACxC,0CAA0CA,EAAE,CAACkD;QACtE,MAAMc,oBAAoBd;QAE1B,IAAII,qCAAqC;YACrChB,UAAUA,CAACe,6BAA6BW;QAC5C;IACJ;IAEAxB,QAAQ,QAAQ,CAAC,WAAW,CAACrB,qCAAqCA,EAAE,CAAC+B;QACjE,MAAMa,aAAa;YACf,2BAA4Bb,QAAyD,WAAW;QACpG;QAEA,IAAIE,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC,sCAAsCW;QACrE;QAEAR,+BAA+BnB,cAAcA,CAACgB,mBAAmB,CAACS,SAASC;YACvE,OAAO7B,SAASA,GAAG,SAAS,CAAC,8BAA8B;gBAAE,GAAG4B,OAAO;gBAAEE;YAAW,GAAGD;QAC3F;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBtB,QAAQ,QAAQ,CAAC,WAAW,CAACtB,uCAAuCA,EAAE,CAACgC;QACnE,IAAIE,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC,wCAAwC;gBAC/D,2BAA4BF,QAA2D,WAAW;YACtG;QACJ;QAEA,IAAIK,8BAA8B;YAC9BA,6BAA6B,GAAG;QACpC;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhB,4BAA4B;IAC5Bf,QAAQ,QAAQ,CAAC,WAAW,CAAC3B,mCAAmCA,EAAE,CAACqC;QAC/D,MAAMc,oBAAoBd;QAE1B,IAAIK,8BAA8B;YAC9BjB,UAAUA,CAACiB,8BAA8BS;QAC7C;IACJ;IAEAxB,QAAQ,QAAQ,CAAC,WAAW,CAACzB,6CAA6CA,EAAE,CAACmC;QACzE,MAAMa,aAAa;YACf,iCAAkCb,QAAiE,iBAAiB;QACxH;QAEA,IAAIE,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC,+CAA+CW;QAC9E;QAEAP,uCAAuCpB,cAAcA,CAACgB,mBAAmB,CAACS,SAASC;YAC/E,OAAO7B,SAASA,GAAG,SAAS,CAAC,uCAAuC;gBAAE,GAAG4B,OAAO;gBAAEE;YAAW,GAAGD;QACpG;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBtB,QAAQ,QAAQ,CAAC,WAAW,CAAC1B,+CAA+CA,EAAE,CAACoC;QAC3E,IAAIE,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC,iDAAiD;gBACxE,iCAAkCF,QAAmE,iBAAiB;YAC1H;QACJ;QAEA,IAAIM,sCAAsC;YACtCA,qCAAqC,GAAG;QAC5C;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhB,4BAA4B;IAC5BhB,QAAQ,QAAQ,CAAC,WAAW,CAAC7B,2CAA2CA,EAAE,CAACuC;QACvE,MAAMc,oBAAoBd;QAE1B,IAAIM,sCAAsC;YACtClB,UAAUA,CAACkB,sCAAsCQ;QACrD;IACJ;IAEA,MAAMC,yBAAyB;QAC3BR,gBAAgBtB,oBAAoBA,CAACiB,mBAAmB,CAACS,SAASC;YAC9D,MAAMI,OAAO;YACb,MAAMC,OAAOlC,SAASA,GAAG,SAAS,CAACiC,MAAML,SAASC;YAElD,OAAO;gBACHI;gBACAC;YACJ;QACJ;IACJ;IAEA,MAAMC,kBAAkB;QACpB,IAAIX,eAAe;YACfvB,aAAaA,CAACuB;QAClB;IACJ;IAEA,MAAMY,+BAA+B;QACjC,IAAIZ,eAAe;YACfA,cAAc,QAAQ,CAAC,QAAQ,CAAC;QACpC;IACJ;IAEA,MAAMa,wBAAwB;QAC1B,IAAIb,eAAe;YACfA,cAAc,QAAQ,CAAC,QAAQ,CAAC;QACpC;IACJ;IAEA,MAAMc,kCAAkC;QACpC,IAAId,eAAe;YACfA,cAAc,QAAQ,CAAC,QAAQ,CAAC;QACpC;IACJ;IAEA,MAAMe,2BAA2B;QAC7B,IAAIf,eAAe;YACfA,cAAc,QAAQ,CAAC,QAAQ,CAAC;QACpC;IACJ;IAEA,MAAMR,wBAAwB,CAACwB;QAC3B,IAAIhB,eAAe;YACfgB,cAAc,OAAO,CAACC,CAAAA;gBAClBpC,UAAUA,CAACmB,cAAc,QAAQ,EAAEiB;YACvC;YAEAjB,cAAc,QAAQ,CAAC,GAAG;QAC9B;IACJ;IAEAlB,sBACIC,SACAyB,wBACAG,iBACAC,8BACAC,uBACAC,iCACAC,0BACAvB;IAGJT,QAAQ,QAAQ,CAAC,WAAW,CAAClB,sBAAsBA,EAAE;QACjD,IAAI8B,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC;QAC/B;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhBZ,QAAQ,QAAQ,CAAC,WAAW,CAACnB,iBAAiBA,EAAE;QAC5C,IAAI+B,mBAAmB;YACnBA,kBAAkB,QAAQ,CAAC;QAC/B;IACJ,GAAG;QAAE,MAAM;IAAK;IAEhB,4BAA4B;IAC5BZ,QAAQ,QAAQ,CAAC,WAAW,CAAC9B,uCAAuCA,EAAE;QAClEgD,kCAAkCrB,SAASA,CAAC,CAACwB,SAASC,UAAY7B,SAASA,GAAG,SAAS,CAAC,wCAAwC4B,SAASC;IAC7I;IAEA,4BAA4B;IAC5BtB,QAAQ,QAAQ,CAAC,WAAW,CAAC/B,yCAAyCA,EAAE;QACpE,IAAIiD,iCAAiC;YACjCA,gCAAgC,GAAG;QACvC;IACJ;IAEA,4BAA4B;IAC5BlB,QAAQ,QAAQ,CAAC,WAAW,CAAClC,mDAAmDA,EAAE,CAAC4C;QAC/E,MAAMa,aAAa;YACf,iCAAkCb,QAAuE,iBAAiB;QAC9H;QAEA,IAAIQ,iCAAiC;YACjCA,gCAAgC,QAAQ,CAAC,sDAAsDK;QACnG;QAEAJ,6CAA6CxB,oBAAoBA,CAACuB,iCAAiC,CAACG,SAASC;YACzG,MAAMI,OAAO;YAEb,MAAMC,OAAOlC,SAASA,GAAG,SAAS,CAACiC,MAAM;gBACrCH;gBACA,GAAGF,OAAO;YACd,GAAGC;YAEH,OAAO;gBACHI;gBACAC;YACJ;QACJ;IACJ;IAEA,4BAA4B;IAC5B3B,QAAQ,QAAQ,CAAC,WAAW,CAACnC,qDAAqDA,EAAE,CAAC6C;QACjF,IAAIQ,iCAAiC;YACjCA,gCAAgC,QAAQ,CAAC,wDAAwD;gBAC7F,iCAAkCR,QAAyE,iBAAiB;YAChI;QACJ;QAEA,IAAIS,4CAA4C;YAC5CzB,aAAaA,CAACyB;QAClB;IACJ;IAEA,4BAA4B;IAC5BnB,QAAQ,QAAQ,CAAC,WAAW,CAACvC,gDAAgDA,EAAE,CAACiD;QAC5E,MAAMc,oBAAoBd;QAE1B,IAAIS,4CAA4C;YAC5CrB,UAAUA,CAACqB,2CAA2C,QAAQ,EAAEK;QACpE;IACJ;IAEA,4BAA4B;IAC5BxB,QAAQ,QAAQ,CAAC,WAAW,CAACvB,oDAAoDA,EAAE,CAACiC;QAChF,MAAMa,aAAa;YACf,iCAAkCb,QAAwE,iBAAiB;QAC/H;QAEA,IAAIQ,iCAAiC;YACjCA,gCAAgC,QAAQ,CAAC,uDAAuDK;QACpG;QAEAH,8CAA8CzB,oBAAoBA,CAACuB,iCAAiC,CAACG,SAASC;YAC1G,MAAMI,OAAO;YAEb,MAAMC,OAAOlC,SAASA,GAAG,SAAS,CAACiC,MAAM;gBACrCH;gBACA,GAAGF,OAAO;YACd,GAAGC;YAEH,OAAO;gBACHI;gBACAC;YACJ;QACJ;IACJ;IAEA,4BAA4B;IAC5B3B,QAAQ,QAAQ,CAAC,WAAW,CAACxB,sDAAsDA,EAAE,CAACkC;QAClF,IAAIQ,iCAAiC;YACjCA,gCAAgC,QAAQ,CAAC,yDAAyD;gBAC9F,iCAAkCR,QAA0E,iBAAiB;YACjI;QACJ;QAEA,IAAIU,6CAA6C;YAC7C1B,aAAaA,CAAC0B;QAClB;IACJ;IAEA,4BAA4B;IAC5BpB,QAAQ,QAAQ,CAAC,WAAW,CAAC5B,iDAAiDA,EAAE,CAACsC;QAC7E,MAAMc,oBAAoBd;QAE1B,IAAIU,6CAA6C;YAC7CtB,UAAUA,CAACsB,4CAA4C,QAAQ,EAAEI;QACrE;IACJ;AACJ;AAEA,SAASW;IACL,6DAA6D;IAC7D,aAAa;IACb,IAAIC,WAAW,qDAAqD,EAAE;QAClE,6DAA6D;QAC7D,aAAa;QACb,OAAOA,WAAW,qDAAqD;IAC3E;IAEA,8CAA8C;IAC9C,6DAA6D;IAC7D,aAAa;IACb,OAAOA,WAAW,mDAAmD;AACzE;AAEO,SAASC,iCAAiCrC,OAAuB;IACpE,MAAMsC,mCAAmCH;IAEzC,IAAIG,kCAAkC;QAClC9C,uBAAuBA;QAEvB,MAAM+C,6BAA6BhD,mDAAmDA,CAACS,QAAQ,MAAM;QAErG,+EAA+E;QAC/E,gEAAgE;QAChEsC,iCAAiCC;IACrC,OAAO;QACHvC,QAAQ,MAAM,CAAC,OAAO,CAAC;IAC3B;IAEAW,0BAA0BX;AAC9B"}
1
+ {"version":3,"file":"honeycomb/registerHoneycombInstrumentation.js","sources":["webpack://@squide/firefly/./src/honeycomb/registerHoneycombInstrumentation.ts"],"sourcesContent":["import type { Span } from \"@opentelemetry/api\";\nimport {\n LocalModuleDeferredRegistrationFailedEvent,\n LocalModuleDeferredRegistrationUpdateFailedEvent,\n LocalModuleRegistrationFailedEvent,\n LocalModulesDeferredRegistrationCompletedEvent,\n type LocalModulesDeferredRegistrationCompletedEventPayload,\n LocalModulesDeferredRegistrationStartedEvent,\n type LocalModulesDeferredRegistrationStartedEventPayload,\n LocalModulesDeferredRegistrationsUpdateCompletedEvent,\n type LocalModulesDeferredRegistrationsUpdateCompletedEventPayload,\n LocalModulesDeferredRegistrationsUpdateStartedEvent,\n type LocalModulesDeferredRegistrationsUpdateStartedEventPayload,\n LocalModulesRegistrationCompletedEvent,\n type LocalModulesRegistrationCompletedEventPayload,\n LocalModulesRegistrationStartedEvent,\n type LocalModulesRegistrationStartedEventPayload,\n type ModuleRegistrationError\n} from \"@squide/core\";\nimport {\n DeferredRegistrationsUpdateCompletedEvent,\n DeferredRegistrationsUpdateStartedEvent,\n RemoteModuleDeferredRegistrationFailedEvent,\n RemoteModuleDeferredRegistrationUpdateFailedEvent,\n type RemoteModuleRegistrationError,\n RemoteModuleRegistrationFailedEvent,\n RemoteModulesDeferredRegistrationCompletedEvent,\n type RemoteModulesDeferredRegistrationCompletedEventPayload,\n RemoteModulesDeferredRegistrationStartedEvent,\n type RemoteModulesDeferredRegistrationStartedEventPayload,\n RemoteModulesDeferredRegistrationsUpdateCompletedEvent,\n type RemoteModulesDeferredRegistrationsUpdateCompletedEventPayload,\n RemoteModulesDeferredRegistrationsUpdateStartedEvent,\n type RemoteModulesDeferredRegistrationsUpdateStartedEventPayload,\n RemoteModulesRegistrationCompletedEvent,\n type RemoteModulesRegistrationCompletedEventPayload,\n RemoteModulesRegistrationStartedEvent,\n type RemoteModulesRegistrationStartedEventPayload\n} from \"@squide/module-federation\";\nimport { ApplicationBoostrappedEvent, type AppRouterWaitState, ModulesReadyEvent, ModulesRegisteredEvent, MswReadyEvent, ProtectedDataReadyEvent, PublicDataReadyEvent } from \"../AppRouterReducer.ts\";\nimport type { FireflyRuntime } from \"../FireflyRuntime.tsx\";\nimport { ApplicationBootstrappingStartedEvent } from \"../initializeFirefly.ts\";\nimport { ProtectedDataFetchFailedEvent, ProtectedDataFetchStartedEvent } from \"../useProtectedDataQueries.ts\";\nimport { PublicDataFetchFailedEvent, PublicDataFetchStartedEvent } from \"../usePublicDataQueries.ts\";\nimport { type ActiveSpan, createOverrideFetchRequestSpanWithActiveSpanContext, registerActiveSpanStack } from \"./activeSpan.ts\";\nimport { getTracer } from \"./tracer.ts\";\nimport { endActiveSpan, startActiveChildSpan, startChildSpan, startSpan, traceError } from \"./utils.ts\";\n\n// TIPS:\n// To query those traces in Honeycomb, use the following query filter: \"root.name = squide-bootstrapping\".\n\ntype DataFetchState = \"none\" | \"fetching-data\" | \"public-data-ready\" | \"protected-data-ready\" | \"data-ready\" | \"data-fetch-failed\";\n\nexport function reduceDataFetchEvents(\n runtime: FireflyRuntime,\n onDataFetchStarted: () => void,\n onDataReady: () => void,\n onPublicDataFetchStarted: () => void,\n onPublicDataReady: () => void,\n onProtectedDataFetchStarted: () => void,\n onProtectedDataReady: () => void,\n onDataFetchFailed: (queriesErrors: Error[]) => void\n) {\n let dataFetchState: DataFetchState = \"none\";\n\n runtime.eventBus.addListener(PublicDataFetchStartedEvent, () => {\n if (dataFetchState === \"none\") {\n dataFetchState = \"fetching-data\";\n onDataFetchStarted();\n }\n\n onPublicDataFetchStarted();\n }, { once: true });\n\n runtime.eventBus.addListener(PublicDataReadyEvent, payload => {\n onPublicDataReady();\n\n if (dataFetchState === \"fetching-data\") {\n if (payload && !(payload as AppRouterWaitState).waitForProtectedData) {\n dataFetchState = \"data-ready\";\n onDataReady();\n } else {\n dataFetchState = \"public-data-ready\";\n }\n } else if (dataFetchState === \"protected-data-ready\") {\n dataFetchState = \"data-ready\";\n onDataReady();\n }\n }, { once: true });\n\n runtime.eventBus.addListener(ProtectedDataFetchStartedEvent, () => {\n if (dataFetchState === \"none\") {\n dataFetchState = \"fetching-data\";\n onDataFetchStarted();\n }\n\n onProtectedDataFetchStarted();\n }, { once: true });\n\n runtime.eventBus.addListener(ProtectedDataReadyEvent, payload => {\n onProtectedDataReady();\n\n if (dataFetchState === \"fetching-data\") {\n if (payload && !(payload as AppRouterWaitState).waitForPublicData) {\n dataFetchState = \"data-ready\";\n onDataReady();\n } else {\n dataFetchState = \"protected-data-ready\";\n }\n } else if (dataFetchState === \"public-data-ready\") {\n dataFetchState = \"data-ready\";\n onDataReady();\n }\n }, { once: true });\n\n const handleDataFetchFailed = (payload: unknown) => {\n if (dataFetchState !== \"data-fetch-failed\") {\n dataFetchState = \"data-fetch-failed\";\n\n onDataFetchFailed(payload as Error[]);\n }\n };\n\n runtime.eventBus.addListener(PublicDataFetchFailedEvent, handleDataFetchFailed, { once: true });\n runtime.eventBus.addListener(ProtectedDataFetchFailedEvent, handleDataFetchFailed, { once: true });\n}\n\nfunction registerTrackingListeners(runtime: FireflyRuntime) {\n let bootstrappingSpan: Span;\n let localModuleRegistrationSpan: Span;\n let localModuleDeferredRegistrationSpan: Span;\n let remoteModuleRegistrationSpan: Span;\n let remoteModuleDeferredRegistrationSpan: Span;\n let dataFetchSpan: ActiveSpan;\n let deferredRegistrationsUpdateSpan: Span;\n let localModuleDeferredRegistrationsUpdateSpan: ActiveSpan;\n let remoteModuleDeferredRegistrationsUpdateSpan: ActiveSpan;\n\n runtime.eventBus.addListener(ApplicationBootstrappingStartedEvent, () => {\n bootstrappingSpan = startSpan((options, context) => getTracer().startSpan(\"squide-bootstrapping\", options, context));\n }, { once: true });\n\n runtime.eventBus.addListener(ApplicationBoostrappedEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.end();\n }\n }, { once: true });\n\n runtime.eventBus.addListener(MswReadyEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"msw-ready\");\n }\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.module_count\": (payload as LocalModulesRegistrationStartedEventPayload).moduleCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-registration-started\", attributes);\n }\n\n localModuleRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"local-module-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-registration-completed\", {\n \"app.squide.module_count\": (payload as LocalModulesRegistrationCompletedEventPayload).moduleCount\n });\n }\n\n if (localModuleRegistrationSpan) {\n localModuleRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleRegistrationSpan) {\n traceError(localModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationStartedEventPayload).registrationCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-deferred-registration-started\", attributes);\n }\n\n localModuleDeferredRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"local-module-deferred-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"local-module-deferred-registration-completed\", {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationCompletedEventPayload).registrationCount\n });\n }\n\n if (localModuleDeferredRegistrationSpan) {\n localModuleDeferredRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleDeferredRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleDeferredRegistrationSpan) {\n traceError(localModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(RemoteModulesRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.remote_count\": (payload as RemoteModulesRegistrationStartedEventPayload).remoteCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-registration-started\", attributes);\n }\n\n remoteModuleRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"remote-module-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(RemoteModulesRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-registration-completed\", {\n \"app.squide.remote_count\": (payload as RemoteModulesRegistrationCompletedEventPayload).remoteCount\n });\n }\n\n if (remoteModuleRegistrationSpan) {\n remoteModuleRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleRegistrationSpan) {\n traceError(remoteModuleRegistrationSpan, registrationError);\n }\n });\n\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationStartedEventPayload).registrationCount\n };\n\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-deferred-registration-started\", attributes);\n }\n\n remoteModuleDeferredRegistrationSpan = startChildSpan(bootstrappingSpan, (options, context) => {\n return getTracer().startSpan(\"remote-module-deferred-registration\", { ...options, attributes }, context);\n });\n }, { once: true });\n\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationCompletedEvent, (payload: unknown) => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"remote-module-deferred-registration-completed\", {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationCompletedEventPayload).registrationCount\n });\n }\n\n if (remoteModuleDeferredRegistrationSpan) {\n remoteModuleDeferredRegistrationSpan.end();\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleDeferredRegistrationFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleDeferredRegistrationSpan) {\n traceError(remoteModuleDeferredRegistrationSpan, registrationError);\n }\n });\n\n const handleFetchDataStarted = () => {\n dataFetchSpan = startActiveChildSpan(bootstrappingSpan, (options, context) => {\n const name = \"data-fetch\";\n const span = getTracer().startSpan(name, options, context);\n\n return {\n name,\n span\n };\n });\n };\n\n const handleDataReady = () => {\n if (dataFetchSpan) {\n endActiveSpan(dataFetchSpan);\n }\n };\n\n const handlePublicDataFetchStarted = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"public-data-fetch-started\");\n }\n };\n\n const handlePublicDataReady = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"public-data-ready\");\n }\n };\n\n const handleProtectedDataFetchStarted = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"protected-data-fetch-started\");\n }\n };\n\n const handleProtectedDataReady = () => {\n if (dataFetchSpan) {\n dataFetchSpan.instance.addEvent(\"protected-data-ready\");\n }\n };\n\n const handleDataFetchFailed = (queriesErrors: Error[]) => {\n if (dataFetchSpan) {\n queriesErrors.forEach(x => {\n traceError(dataFetchSpan.instance, x);\n });\n\n endActiveSpan(dataFetchSpan);\n\n // Global data fetch errors are unmanaged, which mean the host application bootstrapping flow\n // will be aborted and a react-router error boundary will be rendered.\n if (bootstrappingSpan) {\n bootstrappingSpan.end();\n }\n }\n };\n\n reduceDataFetchEvents(\n runtime,\n handleFetchDataStarted,\n handleDataReady,\n handlePublicDataFetchStarted,\n handlePublicDataReady,\n handleProtectedDataFetchStarted,\n handleProtectedDataReady,\n handleDataFetchFailed\n );\n\n runtime.eventBus.addListener(ModulesRegisteredEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"modules-registered\");\n }\n }, { once: true });\n\n runtime.eventBus.addListener(ModulesReadyEvent, () => {\n if (bootstrappingSpan) {\n bootstrappingSpan.addEvent(\"modules-ready\");\n }\n }, { once: true });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(DeferredRegistrationsUpdateStartedEvent, () => {\n deferredRegistrationsUpdateSpan = startSpan((options, context) => getTracer().startSpan(\"squide-deferred-registrations-update\", options, context));\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(DeferredRegistrationsUpdateCompletedEvent, () => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.end();\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationsUpdateStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationsUpdateStartedEventPayload).registrationCount\n };\n\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"local-module-deferred-registrations-update-started\", attributes);\n }\n\n localModuleDeferredRegistrationsUpdateSpan = startActiveChildSpan(deferredRegistrationsUpdateSpan, (options, context) => {\n const name = \"local-module-deferred-registrations-update\";\n\n const span = getTracer().startSpan(name, {\n attributes,\n ...options\n }, context);\n\n return {\n name,\n span\n };\n });\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModulesDeferredRegistrationsUpdateCompletedEvent, (payload: unknown) => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"local-module-deferred-registrations-update-completed\", {\n \"app.squide.registration_count\": (payload as LocalModulesDeferredRegistrationsUpdateCompletedEventPayload).registrationCount\n });\n }\n\n if (localModuleDeferredRegistrationsUpdateSpan) {\n endActiveSpan(localModuleDeferredRegistrationsUpdateSpan);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(LocalModuleDeferredRegistrationUpdateFailedEvent, (payload: unknown) => {\n const registrationError = payload as ModuleRegistrationError;\n\n if (localModuleDeferredRegistrationsUpdateSpan) {\n traceError(localModuleDeferredRegistrationsUpdateSpan.instance, registrationError);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationsUpdateStartedEvent, (payload: unknown) => {\n const attributes = {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationsUpdateStartedEventPayload).registrationCount\n };\n\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"remote-module-deferred-registrations-update-started\", attributes);\n }\n\n remoteModuleDeferredRegistrationsUpdateSpan = startActiveChildSpan(deferredRegistrationsUpdateSpan, (options, context) => {\n const name = \"remote-module-deferred-registrations-update\";\n\n const span = getTracer().startSpan(name, {\n attributes,\n ...options\n }, context);\n\n return {\n name,\n span\n };\n });\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModulesDeferredRegistrationsUpdateCompletedEvent, (payload: unknown) => {\n if (deferredRegistrationsUpdateSpan) {\n deferredRegistrationsUpdateSpan.addEvent(\"remote-module-deferred-registrations-update-completed\", {\n \"app.squide.registration_count\": (payload as RemoteModulesDeferredRegistrationsUpdateCompletedEventPayload).registrationCount\n });\n }\n\n if (remoteModuleDeferredRegistrationsUpdateSpan) {\n endActiveSpan(remoteModuleDeferredRegistrationsUpdateSpan);\n }\n });\n\n // Can occur multiple times.\n runtime.eventBus.addListener(RemoteModuleDeferredRegistrationUpdateFailedEvent, (payload: unknown) => {\n const registrationError = payload as RemoteModuleRegistrationError;\n\n if (remoteModuleDeferredRegistrationsUpdateSpan) {\n traceError(remoteModuleDeferredRegistrationsUpdateSpan.instance, registrationError);\n }\n });\n}\n\nfunction getRegisterFetchRequestHookFunction() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__;\n }\n\n // Fallback to fix an error. Will remove soon.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK;\n}\n\nexport function registerHoneycombInstrumentation(runtime: FireflyRuntime) {\n const registerFetchRequestHookFunction = getRegisterFetchRequestHookFunction();\n\n if (registerFetchRequestHookFunction) {\n registerActiveSpanStack();\n\n const activeSpanOverrideFunction = createOverrideFetchRequestSpanWithActiveSpanContext(runtime.logger);\n\n // Dynamically registering this request hook function to nest the HTTP requests\n // of squide bootstrapping under the appropriate Honeycomb span.\n registerFetchRequestHookFunction(activeSpanOverrideFunction);\n } else {\n runtime.logger.warning(\"[squide] Cannot register Honeycomb fetch request hook because \\\"globalThis.__WLP_HONEYCOMB_REGISTER_DYNAMIC_FETCH_REQUEST_HOOK__\\\" is not available. Honeycomb instrumentation is still functional but in degraded mode.\");\n }\n\n registerTrackingListeners(runtime);\n}\n"],"names":["LocalModuleDeferredRegistrationFailedEvent","LocalModuleDeferredRegistrationUpdateFailedEvent","LocalModuleRegistrationFailedEvent","LocalModulesDeferredRegistrationCompletedEvent","LocalModulesDeferredRegistrationStartedEvent","LocalModulesDeferredRegistrationsUpdateCompletedEvent","LocalModulesDeferredRegistrationsUpdateStartedEvent","LocalModulesRegistrationCompletedEvent","LocalModulesRegistrationStartedEvent","DeferredRegistrationsUpdateCompletedEvent","DeferredRegistrationsUpdateStartedEvent","RemoteModuleDeferredRegistrationFailedEvent","RemoteModuleDeferredRegistrationUpdateFailedEvent","RemoteModuleRegistrationFailedEvent","RemoteModulesDeferredRegistrationCompletedEvent","RemoteModulesDeferredRegistrationStartedEvent","RemoteModulesDeferredRegistrationsUpdateCompletedEvent","RemoteModulesDeferredRegistrationsUpdateStartedEvent","RemoteModulesRegistrationCompletedEvent","RemoteModulesRegistrationStartedEvent","ApplicationBoostrappedEvent","ModulesReadyEvent","ModulesRegisteredEvent","MswReadyEvent","ProtectedDataReadyEvent","PublicDataReadyEvent","ApplicationBootstrappingStartedEvent","ProtectedDataFetchFailedEvent","ProtectedDataFetchStartedEvent","PublicDataFetchFailedEvent","PublicDataFetchStartedEvent","createOverrideFetchRequestSpanWithActiveSpanContext","registerActiveSpanStack","getTracer","endActiveSpan","startActiveChildSpan","startChildSpan","startSpan","traceError","reduceDataFetchEvents","runtime","onDataFetchStarted","onDataReady","onPublicDataFetchStarted","onPublicDataReady","onProtectedDataFetchStarted","onProtectedDataReady","onDataFetchFailed","dataFetchState","payload","handleDataFetchFailed","registerTrackingListeners","bootstrappingSpan","localModuleRegistrationSpan","localModuleDeferredRegistrationSpan","remoteModuleRegistrationSpan","remoteModuleDeferredRegistrationSpan","dataFetchSpan","deferredRegistrationsUpdateSpan","localModuleDeferredRegistrationsUpdateSpan","remoteModuleDeferredRegistrationsUpdateSpan","options","context","attributes","registrationError","handleFetchDataStarted","name","span","handleDataReady","handlePublicDataFetchStarted","handlePublicDataReady","handleProtectedDataFetchStarted","handleProtectedDataReady","queriesErrors","x","getRegisterFetchRequestHookFunction","globalThis","registerHoneycombInstrumentation","registerFetchRequestHookFunction","activeSpanOverrideFunction"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@squide/firefly",
3
3
  "author": "Workleap",
4
- "version": "13.3.0",
4
+ "version": "14.0.0",
5
5
  "description": "Helpers to facilitate the creation of an application with the Squide firefly technology stack.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -29,34 +29,34 @@
29
29
  ],
30
30
  "peerDependencies": {
31
31
  "@opentelemetry/api": "^1.9.0",
32
- "@tanstack/react-query": "^5.83.0",
33
- "msw": "^2.10.4",
32
+ "@tanstack/react-query": "^5.87.1",
33
+ "msw": "^2.11.1",
34
34
  "react": "^18.0.0 || ^19.0.0",
35
35
  "react-dom": "^18.0.0 || ^19.0.0",
36
- "react-router": "^7.7.0"
36
+ "react-router": "^7.8.2"
37
37
  },
38
38
  "dependencies": {
39
- "@workleap/logging": "^1.2.5",
40
- "uuid": "^11.1.0",
41
- "@squide/core": "5.7.0",
42
- "@squide/module-federation": "6.5.0",
43
- "@squide/react-router": "7.3.0",
44
- "@squide/msw": "3.5.0"
39
+ "@workleap/logging": "^1.3.0",
40
+ "uuid": "^12.0.0",
41
+ "@squide/core": "6.0.0",
42
+ "@squide/module-federation": "7.0.0",
43
+ "@squide/msw": "4.0.0",
44
+ "@squide/react-router": "8.0.0"
45
45
  },
46
46
  "devDependencies": {
47
- "@rsbuild/core": "1.4.7",
48
- "@rslib/core": "0.10.6",
47
+ "@rsbuild/core": "1.5.4",
48
+ "@rslib/core": "0.12.4",
49
49
  "@testing-library/react": "16.3.0",
50
- "@types/react": "19.1.8",
51
- "@types/react-dom": "19.1.6",
52
- "@typescript-eslint/parser": "8.37.0",
53
- "@vitejs/plugin-react": "4.6.0",
50
+ "@types/react": "19.1.12",
51
+ "@types/react-dom": "19.1.9",
52
+ "@typescript-eslint/parser": "8.42.0",
53
+ "@vitejs/plugin-react": "5.0.2",
54
54
  "@workleap/eslint-plugin": "3.5.0",
55
55
  "@workleap/rslib-configs": "1.1.0",
56
56
  "@workleap/typescript-configs": "3.0.4",
57
57
  "eslint": "8.57.0",
58
58
  "happy-dom": "18.0.1",
59
- "typescript": "5.8.3",
59
+ "typescript": "5.9.2",
60
60
  "vitest": "3.2.4"
61
61
  },
62
62
  "sideEffects": false,
@@ -9,10 +9,13 @@ import { isBootstrapping } from "./useIsBootstrapping.ts";
9
9
 
10
10
  export type ActiveRouteVisiblity = "unknown" | "public" | "protected";
11
11
 
12
- export interface AppRouterState {
12
+ export interface AppRouterWaitState {
13
13
  waitForMsw: boolean;
14
14
  waitForPublicData: boolean;
15
15
  waitForProtectedData: boolean;
16
+ }
17
+
18
+ export interface AppRouterState extends AppRouterWaitState {
16
19
  areModulesRegistered: boolean;
17
20
  areModulesReady: boolean;
18
21
  isMswReady: boolean;
@@ -54,6 +57,7 @@ export const ApplicationBoostrappedEvent = "squide-app-boostrapped";
54
57
 
55
58
  export interface AppRouterAction {
56
59
  type: AppRouterActionType;
60
+ payload?: unknown;
57
61
  }
58
62
 
59
63
  export type AppRouterDispatch = Dispatch<AppRouterAction>;
@@ -184,16 +188,11 @@ export function useModuleRegistrationStatusDispatcher(areModulesRegisteredValue:
184
188
  dispatch({ type: "modules-registered" });
185
189
 
186
190
  logger
187
- .withText("[squide]")
188
- .withText("Modules are registered", {
191
+ .withText("[squide] Modules are registered.", {
189
192
  style: {
190
- color: "white",
191
- backgroundColor: "green"
193
+ color: "green"
192
194
  }
193
195
  })
194
- .withText(".", {
195
- leadingSpace: false
196
- })
197
196
  .information();
198
197
 
199
198
  return true;
@@ -207,16 +206,11 @@ export function useModuleRegistrationStatusDispatcher(areModulesRegisteredValue:
207
206
  dispatch({ type: "modules-ready" });
208
207
 
209
208
  logger
210
- .withText("[squide]")
211
- .withText("Modules are ready", {
209
+ .withText("[squide] Modules are ready.", {
212
210
  style: {
213
- color: "white",
214
- backgroundColor: "green"
211
+ color: "green"
215
212
  }
216
213
  })
217
- .withText(".", {
218
- leadingSpace: false
219
- })
220
214
  .information();
221
215
 
222
216
  return true;
@@ -254,16 +248,11 @@ export function useMswStatusDispatcher(isMswReadyValue: boolean, dispatch: AppRo
254
248
  dispatch({ type: "msw-ready" });
255
249
 
256
250
  logger
257
- .withText("[squide]")
258
- .withText("MSW is ready", {
251
+ .withText("[squide] MSW is ready.", {
259
252
  style: {
260
- color: "white",
261
- backgroundColor: "green"
253
+ color: "green"
262
254
  }
263
255
  })
264
- .withText(".", {
265
- leadingSpace: false
266
- })
267
256
  .information();
268
257
 
269
258
  return true;
@@ -283,7 +272,7 @@ export function useMswStatusDispatcher(isMswReadyValue: boolean, dispatch: AppRo
283
272
  }, [isMswReadyValue, dispatchMswReady]);
284
273
  }
285
274
 
286
- export function useBootstrappingCompletedDispatcher(state: AppRouterState) {
275
+ function useBootstrappingCompletedDispatcher(waitState: AppRouterWaitState, state: AppRouterState) {
287
276
  const eventBus = useEventBus();
288
277
 
289
278
  const areModulesRegisteredValue = state.areModulesRegistered;
@@ -291,13 +280,13 @@ export function useBootstrappingCompletedDispatcher(state: AppRouterState) {
291
280
 
292
281
  useExecuteOnce(useCallback(() => {
293
282
  if (areModulesRegisteredValue && !isBoostrapping) {
294
- eventBus.dispatch(ApplicationBoostrappedEvent);
283
+ eventBus.dispatch(ApplicationBoostrappedEvent, waitState);
295
284
 
296
285
  return true;
297
286
  }
298
287
 
299
288
  return false;
300
- }, [areModulesRegisteredValue, isBoostrapping, eventBus]), true);
289
+ }, [areModulesRegisteredValue, isBoostrapping, waitState, eventBus]), true);
301
290
  }
302
291
 
303
292
  let dispatchProxyFactory: ((reactDispatch: AppRouterDispatch) => AppRouterDispatch) | undefined;
@@ -318,7 +307,7 @@ function useReducerDispatchProxy(reactDispatch: AppRouterDispatch) {
318
307
  }, [reactDispatch]);
319
308
  }
320
309
 
321
- function useEnhancedReducerDispatch(reducerDispatch: AppRouterDispatch) {
310
+ function useEnhancedReducerDispatch(waitState: AppRouterWaitState, reducerDispatch: AppRouterDispatch) {
322
311
  const logger = useLogger();
323
312
  const appRouterStore = useAppRouterStore();
324
313
  const eventBus = useEventBus();
@@ -329,11 +318,11 @@ function useEnhancedReducerDispatch(reducerDispatch: AppRouterDispatch) {
329
318
  .withObject(action)
330
319
  .debug();
331
320
 
332
- appRouterStore.dispatch(action);
333
- eventBus.dispatch(`squide-${action.type}`);
321
+ appRouterStore.dispatch({ ...action, payload: waitState });
322
+ eventBus.dispatch(`squide-${action.type}`, waitState);
334
323
 
335
324
  reducerDispatch(action);
336
- }, [reducerDispatch, logger, appRouterStore, eventBus]);
325
+ }, [waitState, reducerDispatch, logger, appRouterStore, eventBus]);
337
326
  }
338
327
 
339
328
  export function useAppRouterReducer(waitForPublicData: boolean, waitForProtectedData: boolean): [AppRouterState, AppRouterDispatch] {
@@ -341,56 +330,66 @@ export function useAppRouterReducer(waitForPublicData: boolean, waitForProtected
341
330
  const eventBus = useEventBus();
342
331
  const appRouterStore = useAppRouterStore();
343
332
 
333
+ const isMswEnabled = runtime.isMswEnabled;
334
+
344
335
  const areModulesInitiallyRegistered = getAreModulesRegistered();
345
336
  const areModulesInitiallyReady = getAreModulesReady();
346
337
  const isMswInitiallyReady = isMswReady();
347
338
 
339
+ const waitState = useMemo(() => ({
340
+ waitForMsw: isMswEnabled,
341
+ waitForPublicData,
342
+ waitForProtectedData
343
+ }), [isMswEnabled, waitForPublicData, waitForProtectedData]);
344
+
345
+ const initialState = useMemo(() => ({
346
+ waitForMsw: waitState.waitForMsw,
347
+ waitForPublicData: waitState.waitForPublicData,
348
+ waitForProtectedData: waitState.waitForProtectedData,
349
+ // When the modules registration functions are awaited, the event listeners are registered after the modules are registered.
350
+ areModulesRegistered: areModulesInitiallyRegistered,
351
+ areModulesReady: areModulesInitiallyReady,
352
+ isMswReady: isMswInitiallyReady,
353
+ isPublicDataReady: false,
354
+ isProtectedDataReady: false,
355
+ activeRouteVisibility: "unknown",
356
+ isUnauthorized: false
357
+ } satisfies AppRouterState), [waitState, areModulesInitiallyRegistered, areModulesInitiallyReady, isMswInitiallyReady]);
358
+
348
359
  // When modules are initially registered, the reducer action will never be dispatched, therefore the event would not be dispatched as well.
349
360
  // To ensure the bootstrapping events sequencing, the event is manually dispatched when the modules are initially registered.
350
361
  useExecuteOnce(useCallback(() => {
351
362
  if (areModulesInitiallyRegistered) {
352
- appRouterStore.dispatch({ type: "modules-registered" });
353
- eventBus.dispatch(ModulesRegisteredEvent);
363
+ appRouterStore.dispatch({ type: "modules-registered", payload: waitState });
364
+ eventBus.dispatch(ModulesRegisteredEvent, waitState);
354
365
  }
355
366
 
356
367
  return true;
357
- }, [areModulesInitiallyRegistered, appRouterStore, eventBus]), true);
368
+ }, [areModulesInitiallyRegistered, appRouterStore, eventBus, waitState]), true);
358
369
 
359
370
  // When modules are initially registered, the reducer action will never be dispatched, therefore the event would not be dispatched as well.
360
371
  // To ensure the bootstrapping events sequencing, the event is manually dispatched when the modules are initially registered.
361
372
  useExecuteOnce(useCallback(() => {
362
373
  if (areModulesInitiallyReady) {
363
- appRouterStore.dispatch({ type: "modules-ready" });
364
- eventBus.dispatch(ModulesReadyEvent);
374
+ appRouterStore.dispatch({ type: "modules-ready", payload: waitState });
375
+ eventBus.dispatch(ModulesReadyEvent, waitState);
365
376
  }
366
377
 
367
378
  return true;
368
- }, [areModulesInitiallyReady, appRouterStore, eventBus]), true);
379
+ }, [areModulesInitiallyReady, appRouterStore, eventBus, waitState]), true);
369
380
 
370
381
  // When modules are initially registered, the reducer action will never be dispatched, therefore the event would not be dispatched as well.
371
382
  // To ensure the bootstrapping events sequencing, the event is manually dispatched when the modules are initially registered.
372
383
  useExecuteOnce(useCallback(() => {
373
384
  if (isMswInitiallyReady) {
374
- appRouterStore.dispatch({ type: "msw-ready" });
375
- eventBus.dispatch(MswReadyEvent);
385
+ appRouterStore.dispatch({ type: "msw-ready", payload: waitState });
386
+ eventBus.dispatch(MswReadyEvent, waitState);
376
387
  }
377
388
 
378
389
  return true;
379
- }, [isMswInitiallyReady, appRouterStore, eventBus]), true);
390
+ }, [isMswInitiallyReady, appRouterStore, eventBus, waitState]), true);
380
391
 
381
- const [state, reactDispatch] = useReducer(reducer, {
382
- waitForMsw: runtime.isMswEnabled,
383
- waitForPublicData,
384
- waitForProtectedData,
385
- // When the modules registration functions are awaited, the event listeners are registered after the modules are registered.
386
- areModulesRegistered: areModulesInitiallyRegistered,
387
- areModulesReady: areModulesInitiallyReady,
388
- isMswReady: isMswInitiallyReady,
389
- isPublicDataReady: false,
390
- isProtectedDataReady: false,
391
- activeRouteVisibility: "unknown",
392
- isUnauthorized: false
393
- });
392
+ const [state, reactDispatch] = useReducer(reducer, initialState);
394
393
 
395
394
  const {
396
395
  areModulesRegistered: areModulesRegisteredValue,
@@ -401,11 +400,11 @@ export function useAppRouterReducer(waitForPublicData: boolean, waitForProtected
401
400
  // The dispatch proxy is strictly an utility allowing tests to mock the useReducer dispatch function. It's easier
402
401
  // than mocking the import from React.
403
402
  const dispatchProxy = useReducerDispatchProxy(reactDispatch);
404
- const dispatch = useEnhancedReducerDispatch(dispatchProxy);
403
+ const dispatch = useEnhancedReducerDispatch(waitState, dispatchProxy);
405
404
 
406
405
  useModuleRegistrationStatusDispatcher(areModulesRegisteredValue, areModulesReadyValue, dispatch);
407
406
  useMswStatusDispatcher(isMswReadyValue, dispatch);
408
- useBootstrappingCompletedDispatcher(state);
407
+ useBootstrappingCompletedDispatcher(waitState, state);
409
408
 
410
409
  return [state, dispatch];
411
410
  }
@@ -2,7 +2,7 @@
2
2
  // access to the state and ease the integration with third-party libraries such as the Platform Widgets.
3
3
  // Eventually, AppRouterReducer should be deprecated in favor of this new AppRouterStore.
4
4
 
5
- import type { RootLogger } from "@workleap/logging";
5
+ import type { Logger } from "@workleap/logging";
6
6
  import type { AppRouterAction, AppRouterState } from "./AppRouterReducer.ts";
7
7
 
8
8
  export type AppRouterStoreState = Omit<AppRouterState, "waitForMsw" | "waitForPublicData" | "waitForProtectedData">;
@@ -13,9 +13,9 @@ export class AppRouterStore {
13
13
  #state: AppRouterStoreState;
14
14
 
15
15
  readonly #listeners = new Set<AppRouterStoreListenerFunction>();
16
- readonly #logger: RootLogger;
16
+ readonly #logger: Logger;
17
17
 
18
- constructor(initialialState: AppRouterStoreState, logger: RootLogger) {
18
+ constructor(initialialState: AppRouterStoreState, logger: Logger) {
19
19
  this.#state = initialialState;
20
20
  this.#logger = logger;
21
21
  }
@@ -160,7 +160,7 @@ export class AppRouterStore {
160
160
  }
161
161
  }
162
162
 
163
- export function createAppRouterStore(logger: RootLogger) {
163
+ export function createAppRouterStore(logger: Logger) {
164
164
  const initialState: AppRouterStoreState = {
165
165
  areModulesRegistered: false,
166
166
  areModulesReady: false,