@dxos/plugin-observability 0.9.1-staging.ee54ba693a → 0.11.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.
- package/dist/lib/ObservabilityPlugin.mjs +48 -0
- package/dist/lib/ObservabilityPlugin.mjs.map +1 -0
- package/dist/lib/ObservabilityPlugin.node.mjs +14 -0
- package/dist/lib/ObservabilityPlugin.node.mjs.map +1 -0
- package/dist/lib/ObservabilityPlugin.workerd.mjs +14 -0
- package/dist/lib/ObservabilityPlugin.workerd.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +12 -0
- package/dist/lib/capabilities.mjs.map +1 -0
- package/dist/lib/chunk-ObservabilitySettings.mjs +41 -0
- package/dist/lib/chunk-ObservabilitySettings.mjs.map +1 -0
- package/dist/lib/chunk-client-ready.mjs +99 -0
- package/dist/lib/chunk-client-ready.mjs.map +1 -0
- package/dist/lib/{neutral/chunk-PZDS6BXC.mjs → chunk-meta.mjs} +14 -23
- package/dist/lib/chunk-meta.mjs.map +1 -0
- package/dist/lib/chunk-operation-handler.mjs +11 -0
- package/dist/lib/chunk-operation-handler.mjs.map +1 -0
- package/dist/lib/chunk-privacy-notice.mjs +41 -0
- package/dist/lib/chunk-privacy-notice.mjs.map +1 -0
- package/dist/lib/chunk-react-surface.mjs +17 -0
- package/dist/lib/chunk-react-surface.mjs.map +1 -0
- package/dist/lib/chunk-send-event.mjs +14 -0
- package/dist/lib/chunk-send-event.mjs.map +1 -0
- package/dist/lib/chunk-settings.mjs +23 -0
- package/dist/lib/chunk-settings.mjs.map +1 -0
- package/dist/lib/chunk-state.mjs +25 -0
- package/dist/lib/chunk-state.mjs.map +1 -0
- package/dist/lib/chunk-toggle.mjs +31 -0
- package/dist/lib/chunk-toggle.mjs.map +1 -0
- package/dist/lib/chunk-types.mjs +89 -0
- package/dist/lib/chunk-types.mjs.map +1 -0
- package/dist/lib/containers.mjs +7 -0
- package/dist/lib/containers.mjs.map +1 -0
- package/dist/lib/index.mjs +3 -0
- package/dist/lib/meta.mjs +2 -0
- package/dist/lib/operations.mjs +7 -0
- package/dist/lib/operations.mjs.map +1 -0
- package/dist/lib/plugin.mjs +9 -0
- package/dist/lib/plugin.mjs.map +1 -0
- package/dist/lib/translations.mjs +16 -0
- package/dist/lib/translations.mjs.map +1 -0
- package/dist/lib/types.mjs +2 -0
- package/dist/types/src/capabilities/client-ready.d.ts +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/privacy-notice.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/state.d.ts +1 -1
- package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.d.ts +5 -3
- package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.d.ts.map +1 -1
- package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.stories.d.ts +6 -1
- package/dist/types/src/containers/ObservabilitySettings/ObservabilitySettings.stories.d.ts.map +1 -1
- package/dist/types/src/types/ObservabilityCapabilities.d.ts +1 -1
- package/dist/types/src/types/ObservabilityCapabilities.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +32 -32
- package/src/capabilities/react-surface.ts +25 -0
- package/src/containers/ObservabilitySettings/ObservabilitySettings.stories.tsx +29 -7
- package/src/containers/ObservabilitySettings/ObservabilitySettings.tsx +16 -6
- package/src/types/ObservabilityCapabilities.ts +1 -1
- package/dist/lib/neutral/ObservabilityPlugin.mjs +0 -63
- package/dist/lib/neutral/ObservabilityPlugin.mjs.map +0 -7
- package/dist/lib/neutral/ObservabilityPlugin.node.mjs +0 -22
- package/dist/lib/neutral/ObservabilityPlugin.node.mjs.map +0 -7
- package/dist/lib/neutral/ObservabilityPlugin.workerd.mjs +0 -22
- package/dist/lib/neutral/ObservabilityPlugin.workerd.mjs.map +0 -7
- package/dist/lib/neutral/ObservabilitySettings-6CEN3VYH.mjs +0 -31
- package/dist/lib/neutral/ObservabilitySettings-6CEN3VYH.mjs.map +0 -7
- package/dist/lib/neutral/capabilities/index.mjs +0 -19
- package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PGTCGVCX.mjs +0 -8
- package/dist/lib/neutral/chunk-PGTCGVCX.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PZDS6BXC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-QR2GBZZK.mjs +0 -109
- package/dist/lib/neutral/chunk-QR2GBZZK.mjs.map +0 -7
- package/dist/lib/neutral/client-ready-DN3L5DIM.mjs +0 -50
- package/dist/lib/neutral/client-ready-DN3L5DIM.mjs.map +0 -7
- package/dist/lib/neutral/containers/index.mjs +0 -9
- package/dist/lib/neutral/containers/index.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -18
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/meta.mjs +0 -8
- package/dist/lib/neutral/meta.mjs.map +0 -7
- package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs +0 -13
- package/dist/lib/neutral/operation-handler-4WWRXOHR.mjs.map +0 -7
- package/dist/lib/neutral/operations/index.mjs +0 -8
- package/dist/lib/neutral/operations/index.mjs.map +0 -7
- package/dist/lib/neutral/plugin.mjs +0 -16
- package/dist/lib/neutral/plugin.mjs.map +0 -7
- package/dist/lib/neutral/privacy-notice-I5PEPWGW.mjs +0 -66
- package/dist/lib/neutral/privacy-notice-I5PEPWGW.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-GX2JB3AY.mjs +0 -35
- package/dist/lib/neutral/react-surface-GX2JB3AY.mjs.map +0 -7
- package/dist/lib/neutral/send-event-B6HNLGKK.mjs +0 -20
- package/dist/lib/neutral/send-event-B6HNLGKK.mjs.map +0 -7
- package/dist/lib/neutral/settings-647UAWX4.mjs +0 -30
- package/dist/lib/neutral/settings-647UAWX4.mjs.map +0 -7
- package/dist/lib/neutral/state-WZ55UZ6I.mjs +0 -27
- package/dist/lib/neutral/state-WZ55UZ6I.mjs.map +0 -7
- package/dist/lib/neutral/toggle-76BUKEAI.mjs +0 -45
- package/dist/lib/neutral/toggle-76BUKEAI.mjs.map +0 -7
- package/dist/lib/neutral/translations.mjs +0 -25
- package/dist/lib/neutral/translations.mjs.map +0 -7
- package/dist/lib/neutral/types/index.mjs +0 -14
- package/dist/lib/neutral/types/index.mjs.map +0 -7
- package/src/capabilities/react-surface.tsx +0 -35
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ActivationEvent, ActivationEvents, Capability, Plugin } from "@dxos/app-framework";
|
|
2
|
+
import { meta } from "#meta";
|
|
3
|
+
import { AppActivationEvents, AppPlugin } from "@dxos/app-toolkit";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { ClientReady, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyNotice, ReactSurface } from "#capabilities";
|
|
6
|
+
import { translations } from "#translations";
|
|
7
|
+
import { ObservabilityCapabilities, ObservabilityEvents } from "#types";
|
|
8
|
+
//#region src/ObservabilityPlugin.ts
|
|
9
|
+
var ObservabilityPlugin = Plugin.define(meta).pipe(AppPlugin.addSurfaceModule({ activate: ReactSurface }), AppPlugin.addTranslationsModule({ translations }), Plugin.addModule(({ observability }) => ({
|
|
10
|
+
id: "observability",
|
|
11
|
+
activatesOn: ActivationEvents.Startup,
|
|
12
|
+
activate: () => Effect.gen(function* () {
|
|
13
|
+
const obs = yield* Effect.tryPromise(() => observability());
|
|
14
|
+
return Capability.contributes(ObservabilityCapabilities.Observability, obs);
|
|
15
|
+
})
|
|
16
|
+
})), Plugin.addModule({
|
|
17
|
+
activatesOn: AppActivationEvents.SetupSettings,
|
|
18
|
+
activate: ObservabilitySettings
|
|
19
|
+
}), Plugin.addModule(({ namespace }) => ({
|
|
20
|
+
id: Capability.getModuleTag(ObservabilityState),
|
|
21
|
+
activatesOn: ActivationEvents.Startup,
|
|
22
|
+
firesAfterActivation: [ObservabilityEvents.StateReady],
|
|
23
|
+
activate: () => ObservabilityState({ namespace })
|
|
24
|
+
})), Plugin.addModule(({ namespace }) => ({
|
|
25
|
+
id: "namespace",
|
|
26
|
+
activatesOn: ActivationEvents.Startup,
|
|
27
|
+
activate: () => Effect.succeed(Capability.contributes(ObservabilityCapabilities.Namespace, namespace))
|
|
28
|
+
})), Plugin.addModule(({ downloadLogs }) => ({
|
|
29
|
+
id: "log-downloader",
|
|
30
|
+
activatesOn: ActivationEvents.Startup,
|
|
31
|
+
activate: () => Effect.succeed(downloadLogs !== void 0 ? Capability.contributes(ObservabilityCapabilities.LogDownloader, downloadLogs) : [])
|
|
32
|
+
})), AppPlugin.addOperationHandlerModule({ activate: OperationHandler }), Plugin.addModule({
|
|
33
|
+
activatesOn: ActivationEvent.make("org.dxos.plugin.client.event.identityCreated"),
|
|
34
|
+
activate: PrivacyNotice
|
|
35
|
+
}), Plugin.addModule(({ namespace, observability }) => ({
|
|
36
|
+
id: Capability.getModuleTag(ClientReady),
|
|
37
|
+
activatesOn: ActivationEvent.allOf(ActivationEvents.ProcessManagerReady, ObservabilityEvents.StateReady, ObservabilityEvents.ClientReadyEvent),
|
|
38
|
+
activate: () => Effect.gen(function* () {
|
|
39
|
+
return yield* ClientReady({
|
|
40
|
+
namespace,
|
|
41
|
+
observability: yield* Effect.tryPromise(() => observability())
|
|
42
|
+
});
|
|
43
|
+
})
|
|
44
|
+
})), Plugin.make);
|
|
45
|
+
//#endregion
|
|
46
|
+
export { ObservabilityPlugin, ObservabilityPlugin as default };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=ObservabilityPlugin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservabilityPlugin.mjs","names":[],"sources":["../../src/ObservabilityPlugin.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { ActivationEvent, ActivationEvents, Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { type Observability } from '@dxos/observability';\n\nimport {\n ClientReady,\n ObservabilitySettings,\n ObservabilityState,\n OperationHandler,\n PrivacyNotice,\n ReactSurface,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { ObservabilityCapabilities, ObservabilityEvents } from '#types';\n\nexport type ObservabilityPluginOptions = {\n namespace: string;\n observability: () => Promise<Observability.Observability>;\n /**\n * Optional callback invoked by the help/feedback UI to download captured logs.\n * When omitted the \"Download logs\" action is hidden.\n */\n downloadLogs?: () => void | Promise<void>;\n};\n\nexport const ObservabilityPlugin = Plugin.define<ObservabilityPluginOptions>(meta).pipe(\n AppPlugin.addSurfaceModule({ activate: ReactSurface }),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.addModule(({ observability }) => ({\n id: 'observability',\n activatesOn: ActivationEvents.Startup,\n activate: () =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n return Capability.contributes(ObservabilityCapabilities.Observability, obs);\n }),\n })),\n Plugin.addModule({\n activatesOn: AppActivationEvents.SetupSettings,\n activate: ObservabilitySettings,\n }),\n Plugin.addModule(({ namespace }) => ({\n id: Capability.getModuleTag(ObservabilityState),\n activatesOn: ActivationEvents.Startup,\n firesAfterActivation: [ObservabilityEvents.StateReady],\n activate: () => ObservabilityState({ namespace }),\n })),\n Plugin.addModule(({ namespace }) => ({\n id: 'namespace',\n activatesOn: ActivationEvents.Startup,\n activate: () => Effect.succeed(Capability.contributes(ObservabilityCapabilities.Namespace, namespace)),\n })),\n Plugin.addModule(({ downloadLogs }) => ({\n id: 'log-downloader',\n activatesOn: ActivationEvents.Startup,\n activate: () =>\n Effect.succeed(\n downloadLogs !== undefined ? Capability.contributes(ObservabilityCapabilities.LogDownloader, downloadLogs) : [],\n ),\n })),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n Plugin.addModule({\n activatesOn: ActivationEvent.make('org.dxos.plugin.client.event.identityCreated'),\n activate: PrivacyNotice,\n }),\n Plugin.addModule(({ namespace, observability }) => ({\n id: Capability.getModuleTag(ClientReady),\n activatesOn: ActivationEvent.allOf(\n ActivationEvents.ProcessManagerReady,\n ObservabilityEvents.StateReady,\n ObservabilityEvents.ClientReadyEvent,\n ),\n activate: () =>\n Effect.gen(function* () {\n const obs = yield* Effect.tryPromise(() => observability());\n return yield* ClientReady({ namespace, observability: obs });\n }),\n })),\n Plugin.make,\n);\n\nexport default ObservabilityPlugin;\n"],"mappings":";;;;;;;;AAgCA,IAAa,sBAAsB,OAAO,OAAmC,IAAI,CAAC,CAAC,KACjF,UAAU,iBAAiB,EAAE,UAAU,aAAa,CAAC,GACrD,UAAU,sBAAsB,EAAE,aAAa,CAAC,GAChD,OAAO,WAAW,EAAE,qBAAqB;CACvC,IAAI;CACJ,aAAa,iBAAiB;CAC9B,gBACE,OAAO,IAAI,aAAa;EACtB,MAAM,MAAM,OAAO,OAAO,iBAAiB,cAAc,CAAC;EAC1D,OAAO,WAAW,YAAY,0BAA0B,eAAe,GAAG;CAC5E,CAAC;AACL,EAAE,GACF,OAAO,UAAU;CACf,aAAa,oBAAoB;CACjC,UAAU;AACZ,CAAC,GACD,OAAO,WAAW,EAAE,iBAAiB;CACnC,IAAI,WAAW,aAAa,kBAAkB;CAC9C,aAAa,iBAAiB;CAC9B,sBAAsB,CAAC,oBAAoB,UAAU;CACrD,gBAAgB,mBAAmB,EAAE,UAAU,CAAC;AAClD,EAAE,GACF,OAAO,WAAW,EAAE,iBAAiB;CACnC,IAAI;CACJ,aAAa,iBAAiB;CAC9B,gBAAgB,OAAO,QAAQ,WAAW,YAAY,0BAA0B,WAAW,SAAS,CAAC;AACvG,EAAE,GACF,OAAO,WAAW,EAAE,oBAAoB;CACtC,IAAI;CACJ,aAAa,iBAAiB;CAC9B,gBACE,OAAO,QACL,iBAAiB,KAAA,IAAY,WAAW,YAAY,0BAA0B,eAAe,YAAY,IAAI,CAAC,CAChH;AACJ,EAAE,GACF,UAAU,0BAA0B,EAAE,UAAU,iBAAiB,CAAC,GAClE,OAAO,UAAU;CACf,aAAa,gBAAgB,KAAK,8CAA8C;CAChF,UAAU;AACZ,CAAC,GACD,OAAO,WAAW,EAAE,WAAW,qBAAqB;CAClD,IAAI,WAAW,aAAa,WAAW;CACvC,aAAa,gBAAgB,MAC3B,iBAAiB,qBACjB,oBAAoB,YACpB,oBAAoB,gBACtB;CACA,gBACE,OAAO,IAAI,aAAa;EAEtB,OAAO,OAAO,YAAY;GAAE;GAAW,eAAe,OADnC,OAAO,iBAAiB,cAAc,CAAC;EACA,CAAC;CAC7D,CAAC;AACL,EAAE,GACF,OAAO,IACT"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Capabilities, Capability, Plugin } from "@dxos/app-framework";
|
|
2
|
+
import { meta } from "#meta";
|
|
3
|
+
import { AppPlugin } from "@dxos/app-toolkit";
|
|
4
|
+
import { Operation, OperationHandlerSet } from "@dxos/compute";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import { ObservabilityOperation } from "#types";
|
|
7
|
+
//#region src/ObservabilityPlugin.node.ts
|
|
8
|
+
var ObservabilityPlugin = Plugin.define(meta).pipe(AppPlugin.addOperationHandlerModule({ activate: Capability.lazy("OperationHandler", () => Promise.resolve({ default: Capability.makeModule(Effect.fnUntraced(function* () {
|
|
9
|
+
return Capability.contributes(Capabilities.OperationHandler, OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)));
|
|
10
|
+
})) })) }), Plugin.make);
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ObservabilityPlugin, ObservabilityPlugin as default };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=ObservabilityPlugin.node.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservabilityPlugin.node.mjs","names":[],"sources":["../../src/ObservabilityPlugin.node.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability, Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Operation, OperationHandlerSet } from '@dxos/compute';\n\nimport { meta } from '#meta';\nimport { ObservabilityOperation } from '#types';\n\n// TODO(wittjosiah): Hook up.\nexport const ObservabilityPlugin = Plugin.define(meta).pipe(\n AppPlugin.addOperationHandlerModule({\n activate: Capability.lazy('OperationHandler', () =>\n Promise.resolve({\n default: Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(\n Capabilities.OperationHandler,\n OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)),\n );\n }),\n ),\n }),\n ),\n }),\n Plugin.make,\n);\n\nexport default ObservabilityPlugin;\n"],"mappings":";;;;;;;AAcA,IAAa,sBAAsB,OAAO,OAAO,IAAI,CAAC,CAAC,KACrD,UAAU,0BAA0B,EAClC,UAAU,WAAW,KAAK,0BACxB,QAAQ,QAAQ,EACd,SAAS,WAAW,WAClB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAChB,aAAa,kBACb,oBAAoB,KAAK,UAAU,YAAY,uBAAuB,iBAAiB,OAAO,IAAI,CAAC,CACrG;AACF,CAAC,CACH,EACF,CAAC,CACH,EACF,CAAC,GACD,OAAO,IACT"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Capabilities, Capability, Plugin } from "@dxos/app-framework";
|
|
2
|
+
import { meta } from "#meta";
|
|
3
|
+
import { AppPlugin } from "@dxos/app-toolkit";
|
|
4
|
+
import { Operation, OperationHandlerSet } from "@dxos/compute";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import { ObservabilityOperation } from "#types";
|
|
7
|
+
//#region src/ObservabilityPlugin.workerd.ts
|
|
8
|
+
var ObservabilityPlugin = Plugin.define(meta).pipe(AppPlugin.addOperationHandlerModule({ activate: Capability.lazy("OperationHandler", () => Promise.resolve({ default: Capability.makeModule(Effect.fnUntraced(function* () {
|
|
9
|
+
return Capability.contributes(Capabilities.OperationHandler, OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)));
|
|
10
|
+
})) })) }), Plugin.make);
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ObservabilityPlugin, ObservabilityPlugin as default };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=ObservabilityPlugin.workerd.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservabilityPlugin.workerd.mjs","names":[],"sources":["../../src/ObservabilityPlugin.workerd.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability, Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Operation, OperationHandlerSet } from '@dxos/compute';\n\nimport { meta } from '#meta';\nimport { ObservabilityOperation } from '#types';\n\nexport const ObservabilityPlugin = Plugin.define(meta).pipe(\n AppPlugin.addOperationHandlerModule({\n activate: Capability.lazy('OperationHandler', () =>\n Promise.resolve({\n default: Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(\n Capabilities.OperationHandler,\n OperationHandlerSet.make(Operation.withHandler(ObservabilityOperation.SendEvent, () => Effect.void)),\n );\n }),\n ),\n }),\n ),\n }),\n Plugin.make,\n);\n\nexport default ObservabilityPlugin;\n"],"mappings":";;;;;;;AAaA,IAAa,sBAAsB,OAAO,OAAO,IAAI,CAAC,CAAC,KACrD,UAAU,0BAA0B,EAClC,UAAU,WAAW,KAAK,0BACxB,QAAQ,QAAQ,EACd,SAAS,WAAW,WAClB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAChB,aAAa,kBACb,oBAAoB,KAAK,UAAU,YAAY,uBAAuB,iBAAiB,OAAO,IAAI,CAAC,CACrG;AACF,CAAC,CACH,EACF,CAAC,CACH,EACF,CAAC,GACD,OAAO,IACT"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Capability } from "@dxos/app-framework";
|
|
2
|
+
//#region src/capabilities/index.ts
|
|
3
|
+
var ClientReady = Capability.lazy("ClientReady", () => import("./chunk-client-ready.mjs"));
|
|
4
|
+
var PrivacyNotice = Capability.lazy("PrivacyNotice", () => import("./chunk-privacy-notice.mjs"));
|
|
5
|
+
var OperationHandler = Capability.lazy("OperationHandler", () => import("./chunk-operation-handler.mjs"));
|
|
6
|
+
var ReactSurface = Capability.lazy("ReactSurface", () => import("./chunk-react-surface.mjs"));
|
|
7
|
+
var ObservabilitySettings = Capability.lazy("ObservabilitySettings", () => import("./chunk-settings.mjs"));
|
|
8
|
+
var ObservabilityState = Capability.lazy("ObservabilityState", () => import("./chunk-state.mjs"));
|
|
9
|
+
//#endregion
|
|
10
|
+
export { ClientReady, ObservabilitySettings, ObservabilityState, OperationHandler, PrivacyNotice, ReactSurface };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=capabilities.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.mjs","names":[],"sources":["../../src/capabilities/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nimport type { ClientReadyOptions } from './client-ready';\n\nexport const ClientReady = Capability.lazy<ClientReadyOptions>('ClientReady', () => import('./client-ready'));\nexport const PrivacyNotice = Capability.lazy('PrivacyNotice', () => import('./privacy-notice'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const ObservabilitySettings = Capability.lazy('ObservabilitySettings', () => import('./settings'));\nexport const ObservabilityState = Capability.lazy('ObservabilityState', () => import('./state'));\n"],"mappings":";;AASA,IAAa,cAAc,WAAW,KAAyB,qBAAqB,OAAO,2BAAiB;AAC5G,IAAa,gBAAgB,WAAW,KAAK,uBAAuB,OAAO,6BAAmB;AAC9F,IAAa,mBAAmB,WAAW,KACzC,0BACM,OAAO,gCACf;AACA,IAAa,eAAe,WAAW,KAAK,sBAAsB,OAAO,4BAAkB;AAC3F,IAAa,wBAAwB,WAAW,KAAK,+BAA+B,OAAO,uBAAa;AACxG,IAAa,qBAAqB,WAAW,KAAK,4BAA4B,OAAO,oBAAU"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { meta } from "#meta";
|
|
2
|
+
import { ObservabilityOperation, Settings } from "#types";
|
|
3
|
+
import "react";
|
|
4
|
+
import { useOperationInvoker, useSettingsState } from "@dxos/app-framework/ui";
|
|
5
|
+
import { Message, useTranslation } from "@dxos/react-ui";
|
|
6
|
+
import { Form } from "@dxos/react-ui-form";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region src/containers/ObservabilitySettings/ObservabilitySettings.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Edits are routed through {@link ObservabilityOperation.Toggle} rather than written to the atom
|
|
11
|
+
* directly, so enabling/disabling observability takes effect on the running services.
|
|
12
|
+
*/
|
|
13
|
+
var ObservabilitySettings = ({ subject }) => {
|
|
14
|
+
const { t } = useTranslation(meta.profile.key);
|
|
15
|
+
const { settings } = useSettingsState(subject.atom);
|
|
16
|
+
const { invokePromise } = useOperationInvoker();
|
|
17
|
+
return /* @__PURE__ */ jsx(Form.Root, {
|
|
18
|
+
schema: Settings.Settings,
|
|
19
|
+
values: settings,
|
|
20
|
+
variant: "settings",
|
|
21
|
+
onValuesChanged: (values) => void invokePromise(ObservabilityOperation.Toggle, { state: {
|
|
22
|
+
...settings,
|
|
23
|
+
...values
|
|
24
|
+
}.enabled }),
|
|
25
|
+
children: /* @__PURE__ */ jsx(Form.Viewport, {
|
|
26
|
+
scroll: true,
|
|
27
|
+
children: /* @__PURE__ */ jsx(Form.Content, { children: /* @__PURE__ */ jsxs(Form.Section, {
|
|
28
|
+
title: meta.profile.name ?? meta.profile.key,
|
|
29
|
+
children: [/* @__PURE__ */ jsx(Message.Root, {
|
|
30
|
+
valence: "info",
|
|
31
|
+
children: /* @__PURE__ */ jsx(Message.Body, { children: t("observability.description") })
|
|
32
|
+
}), /* @__PURE__ */ jsx(Form.FieldSet, {})]
|
|
33
|
+
}) })
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
ObservabilitySettings.displayName = "ObservabilitySettings";
|
|
38
|
+
//#endregion
|
|
39
|
+
export { ObservabilitySettings as default };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=chunk-ObservabilitySettings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-ObservabilitySettings.mjs","names":[],"sources":["../../src/containers/ObservabilitySettings/ObservabilitySettings.tsx"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useOperationInvoker, useSettingsState } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Message, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { ObservabilityOperation, Settings } from '#types';\n\nexport type ObservabilitySettingsProps = AppSurface.SettingsData;\n\n/**\n * Edits are routed through {@link ObservabilityOperation.Toggle} rather than written to the atom\n * directly, so enabling/disabling observability takes effect on the running services.\n */\nexport const ObservabilitySettings = ({ subject }: ObservabilitySettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n const { settings } = useSettingsState<Settings.Settings>(subject.atom);\n const { invokePromise } = useOperationInvoker();\n\n return (\n <Form.Root\n schema={Settings.Settings}\n values={settings}\n variant='settings'\n onValuesChanged={(values) =>\n void invokePromise(ObservabilityOperation.Toggle, { state: { ...settings, ...values }.enabled })\n }\n >\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={meta.profile.name ?? meta.profile.key}>\n <Message.Root valence='info'>\n <Message.Body>{t('observability.description')}</Message.Body>\n </Message.Root>\n <Form.FieldSet />\n </Form.Section>\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\nObservabilitySettings.displayName = 'ObservabilitySettings';\n"],"mappings":";;;;;;;;;;;;AAoBA,IAAa,yBAAyB,EAAE,cAA0C;CAChF,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,EAAE,aAAa,iBAAoC,QAAQ,IAAI;CACrE,MAAM,EAAE,kBAAkB,oBAAoB;CAE9C,OACE,oBAAC,KAAK,MAAN;EACE,QAAQ,SAAS;EACjB,QAAQ;EACR,SAAQ;EACR,kBAAkB,WAChB,KAAK,cAAc,uBAAuB,QAAQ,EAAE,OAAO;GAAE,GAAG;GAAU,GAAG;EAAO,EAAE,QAAQ,CAAC;YAGjG,oBAAC,KAAK,UAAN;GAAe,QAAA;aACb,oBAAC,KAAK,SAAN,EAAA,UACE,qBAAC,KAAK,SAAN;IAAc,OAAO,KAAK,QAAQ,QAAQ,KAAK,QAAQ;cAAvD,CACE,oBAAC,QAAQ,MAAT;KAAc,SAAQ;eACpB,oBAAC,QAAQ,MAAT,EAAA,UAAe,EAAE,2BAA2B,EAAgB,CAAA;IAChD,CAAA,GACd,oBAAC,KAAK,UAAN,CAAgB,CAAA,CACJ;MACF,CAAA;EACD,CAAA;CACN,CAAA;AAEf;AAEA,sBAAsB,cAAc"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { ObservabilityCapabilities, ObservabilityOperation } from "#types";
|
|
4
|
+
import { log } from "@dxos/log";
|
|
5
|
+
import { ObservabilityProvider } from "@dxos/observability";
|
|
6
|
+
//#region src/capabilities/client-ready.ts
|
|
7
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-observability/src/capabilities/client-ready.ts";
|
|
8
|
+
var client_ready_default = Capability.makeModule(Effect.fnUntraced(function* ({ observability }) {
|
|
9
|
+
const manager = yield* Capability.get(Capabilities.PluginManager);
|
|
10
|
+
const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
|
|
11
|
+
const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);
|
|
12
|
+
const enabledPlugins = manager.getEnabled();
|
|
13
|
+
log("client-ready: tagging enabled plugins", { count: enabledPlugins.length }, {
|
|
14
|
+
"~LogMeta": "~LogMeta",
|
|
15
|
+
F: __dxlog_file,
|
|
16
|
+
L: 26,
|
|
17
|
+
S: this
|
|
18
|
+
});
|
|
19
|
+
for (const plugin of enabledPlugins) observability.setTags({ [`pluginEnabled-${plugin}`]: "true" }, "errors");
|
|
20
|
+
log("client-ready: sending page.load event", void 0, {
|
|
21
|
+
"~LogMeta": "~LogMeta",
|
|
22
|
+
F: __dxlog_file,
|
|
23
|
+
L: 31,
|
|
24
|
+
S: this
|
|
25
|
+
});
|
|
26
|
+
yield* Effect.tryPromise(() => invokePromise(ObservabilityOperation.SendEvent, {
|
|
27
|
+
name: "page.load",
|
|
28
|
+
properties: { loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart }
|
|
29
|
+
}));
|
|
30
|
+
log("client-ready: page.load event sent", void 0, {
|
|
31
|
+
"~LogMeta": "~LogMeta",
|
|
32
|
+
F: __dxlog_file,
|
|
33
|
+
L: 41,
|
|
34
|
+
S: this
|
|
35
|
+
});
|
|
36
|
+
log("client-ready: adding identity data provider", void 0, {
|
|
37
|
+
"~LogMeta": "~LogMeta",
|
|
38
|
+
F: __dxlog_file,
|
|
39
|
+
L: 47,
|
|
40
|
+
S: this
|
|
41
|
+
});
|
|
42
|
+
yield* observability.addDataProvider(ObservabilityProvider.Client.identityProvider(client.services.services));
|
|
43
|
+
log("client-ready: identity data provider added", void 0, {
|
|
44
|
+
"~LogMeta": "~LogMeta",
|
|
45
|
+
F: __dxlog_file,
|
|
46
|
+
L: 49,
|
|
47
|
+
S: this
|
|
48
|
+
});
|
|
49
|
+
log("client-ready: adding network metrics data provider", void 0, {
|
|
50
|
+
"~LogMeta": "~LogMeta",
|
|
51
|
+
F: __dxlog_file,
|
|
52
|
+
L: 51,
|
|
53
|
+
S: this
|
|
54
|
+
});
|
|
55
|
+
yield* observability.addDataProvider(ObservabilityProvider.Client.networkMetricsProvider(client.services.services));
|
|
56
|
+
log("client-ready: network metrics data provider added", void 0, {
|
|
57
|
+
"~LogMeta": "~LogMeta",
|
|
58
|
+
F: __dxlog_file,
|
|
59
|
+
L: 53,
|
|
60
|
+
S: this
|
|
61
|
+
});
|
|
62
|
+
log("client-ready: adding runtime metrics data provider", void 0, {
|
|
63
|
+
"~LogMeta": "~LogMeta",
|
|
64
|
+
F: __dxlog_file,
|
|
65
|
+
L: 55,
|
|
66
|
+
S: this
|
|
67
|
+
});
|
|
68
|
+
yield* observability.addDataProvider(ObservabilityProvider.Client.runtimeMetricsProvider(client.services.services));
|
|
69
|
+
log("client-ready: runtime metrics data provider added", void 0, {
|
|
70
|
+
"~LogMeta": "~LogMeta",
|
|
71
|
+
F: __dxlog_file,
|
|
72
|
+
L: 57,
|
|
73
|
+
S: this
|
|
74
|
+
});
|
|
75
|
+
log("client-ready: adding space metrics data provider", void 0, {
|
|
76
|
+
"~LogMeta": "~LogMeta",
|
|
77
|
+
F: __dxlog_file,
|
|
78
|
+
L: 59,
|
|
79
|
+
S: this
|
|
80
|
+
});
|
|
81
|
+
yield* observability.addDataProvider(ObservabilityProvider.Client.spacesMetricsProvider(client));
|
|
82
|
+
log("client-ready: space metrics data provider added", void 0, {
|
|
83
|
+
"~LogMeta": "~LogMeta",
|
|
84
|
+
F: __dxlog_file,
|
|
85
|
+
L: 61,
|
|
86
|
+
S: this
|
|
87
|
+
});
|
|
88
|
+
log("client-ready: contributing observability capability", void 0, {
|
|
89
|
+
"~LogMeta": "~LogMeta",
|
|
90
|
+
F: __dxlog_file,
|
|
91
|
+
L: 63,
|
|
92
|
+
S: this
|
|
93
|
+
});
|
|
94
|
+
return Capability.contributes(ObservabilityCapabilities.Observability, observability, () => observability.close());
|
|
95
|
+
}));
|
|
96
|
+
//#endregion
|
|
97
|
+
export { client_ready_default as default };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=chunk-client-ready.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-client-ready.mjs","names":[],"sources":["../../src/capabilities/client-ready.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\nimport { type Observability, ObservabilityProvider } from '@dxos/observability';\n\nimport { ObservabilityCapabilities, ObservabilityOperation } from '#types';\n\nexport type ClientReadyOptions = {\n namespace: string;\n observability: Observability.Observability;\n};\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* ({ observability }: ClientReadyOptions) {\n const manager = yield* Capability.get(Capabilities.PluginManager);\n const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);\n const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);\n\n // Ensure errors are tagged with enabled plugins to help with reproductions.\n const enabledPlugins = manager.getEnabled();\n log('client-ready: tagging enabled plugins', { count: enabledPlugins.length });\n for (const plugin of enabledPlugins) {\n observability.setTags({ [`pluginEnabled-${plugin}`]: 'true' }, 'errors');\n }\n\n log('client-ready: sending page.load event');\n yield* Effect.tryPromise(() =>\n invokePromise(ObservabilityOperation.SendEvent, {\n name: 'page.load',\n properties: {\n // TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?\n loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart,\n },\n }),\n );\n log('client-ready: page.load event sent');\n\n // Each provider is logged individually because some provider setups perform\n // RPC calls (e.g. runtimeMetricsProvider awaits SystemService.getPlatform());\n // a hung worker pipe surfaces as a missing \"added\" log, so the last\n // \"adding ...\" line points to the stall.\n log('client-ready: adding identity data provider');\n yield* observability.addDataProvider(ObservabilityProvider.Client.identityProvider(client.services.services));\n log('client-ready: identity data provider added');\n\n log('client-ready: adding network metrics data provider');\n yield* observability.addDataProvider(ObservabilityProvider.Client.networkMetricsProvider(client.services.services));\n log('client-ready: network metrics data provider added');\n\n log('client-ready: adding runtime metrics data provider');\n yield* observability.addDataProvider(ObservabilityProvider.Client.runtimeMetricsProvider(client.services.services));\n log('client-ready: runtime metrics data provider added');\n\n log('client-ready: adding space metrics data provider');\n yield* observability.addDataProvider(ObservabilityProvider.Client.spacesMetricsProvider(client));\n log('client-ready: space metrics data provider added');\n\n log('client-ready: contributing observability capability');\n return Capability.contributes(ObservabilityCapabilities.Observability, observability, () => observability.close());\n }),\n);\n"],"mappings":";;;;;;;AAiBA,IAAA,uBAAe,WAAW,WACxB,OAAO,WAAW,WAAW,EAAE,iBAAqC;CAClE,MAAM,UAAU,OAAO,WAAW,IAAI,aAAa,aAAa;CAChE,MAAM,EAAE,kBAAkB,OAAO,WAAW,IAAI,aAAa,gBAAgB;CAC7E,MAAM,SAAS,OAAO,WAAW,IAAI,0BAA0B,gBAAgB;CAG/E,MAAM,iBAAiB,QAAQ,WAAW;CAC1C,IAAI,yCAAyC,EAAE,OAAO,eAAe,OAAO,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAC7E,KAAK,MAAM,UAAU,gBACnB,cAAc,QAAQ,GAAG,iBAAiB,WAAW,OAAO,GAAG,QAAQ;CAGzE,IAAI,yCAAsC,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAC3C,OAAO,OAAO,iBACZ,cAAc,uBAAuB,WAAW;EAC9C,MAAM;EACN,YAAY,EAEV,cAAc,OAAO,YAAY,OAAO,eAAe,OAAO,YAAY,OAAO,eACnF;CACF,CAAC,CACH;CACA,IAAI,sCAAmC,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAMxC,IAAI,+CAA4C,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACjD,OAAO,cAAc,gBAAgB,sBAAsB,OAAO,iBAAiB,OAAO,SAAS,QAAQ,CAAC;CAC5G,IAAI,8CAA2C,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAEhD,IAAI,sDAAmD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACxD,OAAO,cAAc,gBAAgB,sBAAsB,OAAO,uBAAuB,OAAO,SAAS,QAAQ,CAAC;CAClH,IAAI,qDAAkD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAEvD,IAAI,sDAAmD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACxD,OAAO,cAAc,gBAAgB,sBAAsB,OAAO,uBAAuB,OAAO,SAAS,QAAQ,CAAC;CAClH,IAAI,qDAAkD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAEvD,IAAI,oDAAiD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACtD,OAAO,cAAc,gBAAgB,sBAAsB,OAAO,sBAAsB,MAAM,CAAC;CAC/F,IAAI,mDAAgD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CAErD,IAAI,uDAAoD,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACzD,OAAO,WAAW,YAAY,0BAA0B,eAAe,qBAAqB,cAAc,MAAM,CAAC;AACnH,CAAC,CACH"}
|
|
@@ -1,31 +1,22 @@
|
|
|
1
|
-
// src/meta.ts
|
|
2
1
|
import { Plugin } from "@dxos/app-framework";
|
|
3
|
-
|
|
4
|
-
// dx.config.ts
|
|
5
2
|
import { Config2 } from "@dxos/app-framework/config";
|
|
6
3
|
import { trim } from "@dxos/util";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
//#region dx.config.ts
|
|
5
|
+
var dx_config_default = Config2.make({ plugin: {
|
|
6
|
+
key: "org.dxos.plugin.observability",
|
|
7
|
+
name: "Telemetry",
|
|
8
|
+
author: "DXOS",
|
|
9
|
+
description: trim`
|
|
13
10
|
Application observability and telemetry collection for monitoring performance and usage patterns.
|
|
14
11
|
Track metrics, logs, and traces for system health and analytics.
|
|
15
12
|
`,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
]
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// src/meta.ts
|
|
13
|
+
icon: { key: "ph--eye--regular" },
|
|
14
|
+
tags: ["system"]
|
|
15
|
+
} });
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/meta.ts
|
|
26
18
|
var meta = Plugin.getMetaFromConfig(dx_config_default);
|
|
19
|
+
//#endregion
|
|
20
|
+
export { meta as t };
|
|
27
21
|
|
|
28
|
-
|
|
29
|
-
meta
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=chunk-PZDS6BXC.mjs.map
|
|
22
|
+
//# sourceMappingURL=chunk-meta.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-meta.mjs","names":[],"sources":["../../dx.config.ts","../../src/meta.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.observability',\n name: 'Telemetry',\n author: 'DXOS',\n description: trim`\n Application observability and telemetry collection for monitoring performance and usage patterns.\n Track metrics, logs, and traces for system health and analytics.\n `,\n icon: { key: 'ph--eye--regular' },\n tags: ['system'],\n },\n});\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n"],"mappings":";;;;AAOA,IAAA,oBAAe,QAAQ,KAAK,EAC1B,QAAQ;CACN,KAAK;CACL,MAAM;CACN,QAAQ;CACR,aAAa,IAAI;;;;CAIjB,MAAM,EAAE,KAAK,mBAAmB;CAChC,MAAM,CAAC,QAAQ;AACjB,EACF,CAAC;;;ACXD,IAAa,OAAO,OAAO,kBAAkB,iBAAM"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { ObservabilityOperationHandlerSet } from "#operations";
|
|
4
|
+
//#region src/capabilities/operation-handler.ts
|
|
5
|
+
var operation_handler_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
6
|
+
return Capability.contributes(Capabilities.OperationHandler, ObservabilityOperationHandlerSet);
|
|
7
|
+
}));
|
|
8
|
+
//#endregion
|
|
9
|
+
export { operation_handler_default as default };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=chunk-operation-handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-operation-handler.mjs","names":[],"sources":["../../src/capabilities/operation-handler.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nimport { ObservabilityOperationHandlerSet } from '#operations';\n\nexport default Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(Capabilities.OperationHandler, ObservabilityOperationHandlerSet);\n }),\n);\n"],"mappings":";;;;AAWA,IAAA,4BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAAY,aAAa,kBAAkB,gCAAgC;AAC/F,CAAC,CACH"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
2
|
+
import { meta } from "#meta";
|
|
3
|
+
import { LayoutOperation, SettingsOperation } from "@dxos/app-toolkit";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { ObservabilityCapabilities } from "#types";
|
|
6
|
+
//#region src/capabilities/privacy-notice.ts
|
|
7
|
+
/**
|
|
8
|
+
* Shows the privacy notice toast once when an identity is first created.
|
|
9
|
+
* Activates on `ClientEvents.IdentityCreated` — which only fires for genuinely
|
|
10
|
+
* new identities, not for recovered or joined ones — so no HALO device-count
|
|
11
|
+
* checks or session-storage flags are needed.
|
|
12
|
+
*/
|
|
13
|
+
var privacy_notice_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
14
|
+
const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
|
|
15
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
16
|
+
const stateAtom = yield* Capability.get(ObservabilityCapabilities.State);
|
|
17
|
+
const environment = (yield* Capability.get(ObservabilityCapabilities.ClientCapability))?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
|
|
18
|
+
const notify = environment && environment !== "ci" && !environment.endsWith(".local") && !environment.endsWith(".lan");
|
|
19
|
+
if (!registry.get(stateAtom).notified && notify) {
|
|
20
|
+
yield* Effect.tryPromise(() => invokePromise(LayoutOperation.AddToast, {
|
|
21
|
+
id: `${meta.profile.key}.notice`,
|
|
22
|
+
title: ["observability-toast.label", { ns: meta.profile.key }],
|
|
23
|
+
description: ["observability-toast.description", { ns: meta.profile.key }],
|
|
24
|
+
duration: Infinity,
|
|
25
|
+
icon: "ph--info--regular",
|
|
26
|
+
actionLabel: ["observability-toast-action.label", { ns: meta.profile.key }],
|
|
27
|
+
actionAlt: ["observability-toast-action.alt", { ns: meta.profile.key }],
|
|
28
|
+
closeLabel: ["observability-toast-close.label", { ns: meta.profile.key }],
|
|
29
|
+
onAction: () => invokePromise(SettingsOperation.Open, { plugin: meta.profile.key })
|
|
30
|
+
}));
|
|
31
|
+
registry.set(stateAtom, {
|
|
32
|
+
...registry.get(stateAtom),
|
|
33
|
+
notified: true
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return [];
|
|
37
|
+
}));
|
|
38
|
+
//#endregion
|
|
39
|
+
export { privacy_notice_default as default };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=chunk-privacy-notice.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-privacy-notice.mjs","names":[],"sources":["../../src/capabilities/privacy-notice.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { LayoutOperation, SettingsOperation } from '@dxos/app-toolkit';\n\nimport { meta } from '#meta';\nimport { ObservabilityCapabilities } from '#types';\n\n/**\n * Shows the privacy notice toast once when an identity is first created.\n * Activates on `ClientEvents.IdentityCreated` — which only fires for genuinely\n * new identities, not for recovered or joined ones — so no HALO device-count\n * checks or session-storage flags are needed.\n */\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const stateAtom = yield* Capability.get(ObservabilityCapabilities.State);\n const client = yield* Capability.get(ObservabilityCapabilities.ClientCapability);\n\n const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;\n const notify =\n environment && environment !== 'ci' && !environment.endsWith('.local') && !environment.endsWith('.lan');\n\n const state = registry.get(stateAtom);\n if (!state.notified && notify) {\n yield* Effect.tryPromise(() =>\n invokePromise(LayoutOperation.AddToast, {\n id: `${meta.profile.key}.notice`,\n title: ['observability-toast.label', { ns: meta.profile.key }],\n description: ['observability-toast.description', { ns: meta.profile.key }],\n duration: Infinity,\n icon: 'ph--info--regular',\n actionLabel: ['observability-toast-action.label', { ns: meta.profile.key }],\n actionAlt: ['observability-toast-action.alt', { ns: meta.profile.key }],\n closeLabel: ['observability-toast-close.label', { ns: meta.profile.key }],\n onAction: () => invokePromise(SettingsOperation.Open, { plugin: meta.profile.key }),\n }),\n );\n registry.set(stateAtom, { ...registry.get(stateAtom), notified: true });\n }\n\n return [];\n }),\n);\n"],"mappings":";;;;;;;;;;;;AAkBA,IAAA,yBAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,MAAM,EAAE,kBAAkB,OAAO,WAAW,IAAI,aAAa,gBAAgB;CAC7E,MAAM,WAAW,OAAO,WAAW,IAAI,aAAa,YAAY;CAChE,MAAM,YAAY,OAAO,WAAW,IAAI,0BAA0B,KAAK;CAGvE,MAAM,eAAc,OAFE,WAAW,IAAI,0BAA0B,gBAAgB,EAAA,EAEnD,QAAQ,OAAO,SAAS,KAAK,KAAK;CAC9D,MAAM,SACJ,eAAe,gBAAgB,QAAQ,CAAC,YAAY,SAAS,QAAQ,KAAK,CAAC,YAAY,SAAS,MAAM;CAGxG,IAAI,CADU,SAAS,IAAI,SACtB,CAAA,CAAM,YAAY,QAAQ;EAC7B,OAAO,OAAO,iBACZ,cAAc,gBAAgB,UAAU;GACtC,IAAI,GAAG,KAAK,QAAQ,IAAI;GACxB,OAAO,CAAC,6BAA6B,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GAC7D,aAAa,CAAC,mCAAmC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GACzE,UAAU;GACV,MAAM;GACN,aAAa,CAAC,oCAAoC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GAC1E,WAAW,CAAC,kCAAkC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GACtE,YAAY,CAAC,mCAAmC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;GACxE,gBAAgB,cAAc,kBAAkB,MAAM,EAAE,QAAQ,KAAK,QAAQ,IAAI,CAAC;EACpF,CAAC,CACH;EACA,SAAS,IAAI,WAAW;GAAE,GAAG,SAAS,IAAI,SAAS;GAAG,UAAU;EAAK,CAAC;CACxE;CAEA,OAAO,CAAC;AACV,CAAC,CACH"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
2
|
+
import { meta } from "#meta";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import { Surface } from "@dxos/app-framework/ui";
|
|
5
|
+
import { AppSurface } from "@dxos/app-toolkit/ui";
|
|
6
|
+
import { ObservabilitySettings } from "#containers";
|
|
7
|
+
//#region src/capabilities/react-surface.ts
|
|
8
|
+
var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.ReactSurface, [Surface.create({
|
|
9
|
+
id: "root",
|
|
10
|
+
filter: AppSurface.settings(AppSurface.Article, meta.profile.key),
|
|
11
|
+
component: ObservabilitySettings,
|
|
12
|
+
props: ({ data: { subject } }) => ({ subject })
|
|
13
|
+
})])));
|
|
14
|
+
//#endregion
|
|
15
|
+
export { react_surface_default as default };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=chunk-react-surface.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-react-surface.mjs","names":[],"sources":["../../src/capabilities/react-surface.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\n\nimport { ObservabilitySettings } from '#containers';\nimport { meta } from '#meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: 'root',\n filter: AppSurface.settings(AppSurface.Article, meta.profile.key),\n component: ObservabilitySettings,\n props: ({ data: { subject } }) => ({ subject }),\n }),\n ]),\n ),\n);\n"],"mappings":";;;;;;;AAaA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,YAAY,aAAa,cAAc,CAChD,QAAQ,OAAO;CACb,IAAI;CACJ,QAAQ,WAAW,SAAS,WAAW,SAAS,KAAK,QAAQ,GAAG;CAChE,WAAW;CACX,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ;AAC/C,CAAC,CACH,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { r as SendEvent, s as Observability } from "./chunk-types.mjs";
|
|
2
|
+
import { Capability } from "@dxos/app-framework";
|
|
3
|
+
import { Operation } from "@dxos/compute";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
//#region src/operations/send-event.ts
|
|
6
|
+
var handler = SendEvent.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
|
|
7
|
+
const observability = yield* Capability.waitFor(Observability);
|
|
8
|
+
const properties = input.properties ?? {};
|
|
9
|
+
observability.events.captureEvent(input.name, properties);
|
|
10
|
+
})));
|
|
11
|
+
//#endregion
|
|
12
|
+
export { handler as default };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=chunk-send-event.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-send-event.mjs","names":[],"sources":["../../src/operations/send-event.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\n\nimport { ObservabilityCapabilities, ObservabilityOperation } from '../types';\n\nconst handler: Operation.WithHandler<typeof ObservabilityOperation.SendEvent> = ObservabilityOperation.SendEvent.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n // NOTE: This is to ensure that events fired before observability is ready are still sent.\n const observability = yield* Capability.waitFor(ObservabilityCapabilities.Observability);\n const properties = input.properties ?? {};\n observability.events.captureEvent(input.name, properties);\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAA,UAA2G,KAC/G,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAElC,MAAM,gBAAgB,OAAO,WAAW,QAAQ,aAAuC;CACvF,MAAM,aAAa,MAAM,cAAc,CAAC;CACxC,cAAc,OAAO,aAAa,MAAM,MAAM,UAAU;AAC1D,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Capability } from "@dxos/app-framework";
|
|
2
|
+
import { meta } from "#meta";
|
|
3
|
+
import { AppCapabilities } from "@dxos/app-toolkit";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { ObservabilityCapabilities, Settings } from "#types";
|
|
6
|
+
import { createKvsStore } from "@dxos/effect";
|
|
7
|
+
//#region src/capabilities/settings.ts
|
|
8
|
+
var settings_default = Capability.makeModule(() => Effect.sync(() => {
|
|
9
|
+
const settingsAtom = createKvsStore({
|
|
10
|
+
key: meta.profile.key,
|
|
11
|
+
schema: Settings.Settings,
|
|
12
|
+
defaultValue: () => ({ enabled: true })
|
|
13
|
+
});
|
|
14
|
+
return [Capability.contributes(ObservabilityCapabilities.Settings, settingsAtom), Capability.contributes(AppCapabilities.Settings, {
|
|
15
|
+
prefix: meta.profile.key,
|
|
16
|
+
schema: Settings.Settings,
|
|
17
|
+
atom: settingsAtom
|
|
18
|
+
})];
|
|
19
|
+
}));
|
|
20
|
+
//#endregion
|
|
21
|
+
export { settings_default as default };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=chunk-settings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-settings.mjs","names":[],"sources":["../../src/capabilities/settings.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { createKvsStore } from '@dxos/effect';\n\nimport { meta } from '#meta';\nimport { ObservabilityCapabilities, Settings } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.sync(() => {\n const settingsAtom = createKvsStore({\n key: meta.profile.key,\n schema: Settings.Settings,\n defaultValue: () => ({\n enabled: true,\n }),\n });\n\n return [\n Capability.contributes(ObservabilityCapabilities.Settings, settingsAtom),\n Capability.contributes(AppCapabilities.Settings, {\n prefix: meta.profile.key,\n schema: Settings.Settings,\n atom: settingsAtom,\n }),\n ];\n }),\n);\n"],"mappings":";;;;;;;AAaA,IAAA,mBAAe,WAAW,iBACxB,OAAO,WAAW;CAChB,MAAM,eAAe,eAAe;EAClC,KAAK,KAAK,QAAQ;EAClB,QAAQ,SAAS;EACjB,qBAAqB,EACnB,SAAS,KACX;CACF,CAAC;CAED,OAAO,CACL,WAAW,YAAY,0BAA0B,UAAU,YAAY,GACvE,WAAW,YAAY,gBAAgB,UAAU;EAC/C,QAAQ,KAAK,QAAQ;EACrB,QAAQ,SAAS;EACjB,MAAM;CACR,CAAC,CACH;AACF,CAAC,CACH"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
2
|
+
import { meta } from "#meta";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import { ObservabilityCapabilities } from "#types";
|
|
5
|
+
import { Observability } from "@dxos/observability";
|
|
6
|
+
import { createKvsStore } from "@dxos/effect";
|
|
7
|
+
//#region src/capabilities/state.ts
|
|
8
|
+
var state_default = Capability.makeModule(Effect.fnUntraced(function* ({ namespace }) {
|
|
9
|
+
const stateAtom = createKvsStore({
|
|
10
|
+
key: meta.profile.key,
|
|
11
|
+
schema: ObservabilityCapabilities.StateSchema,
|
|
12
|
+
defaultValue: () => ({})
|
|
13
|
+
});
|
|
14
|
+
const group = yield* Effect.tryPromise(() => Observability.getObservabilityGroup(namespace));
|
|
15
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
16
|
+
registry.set(stateAtom, {
|
|
17
|
+
...registry.get(stateAtom),
|
|
18
|
+
group
|
|
19
|
+
});
|
|
20
|
+
return Capability.contributes(ObservabilityCapabilities.State, stateAtom);
|
|
21
|
+
}));
|
|
22
|
+
//#endregion
|
|
23
|
+
export { state_default as default };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=chunk-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-state.mjs","names":[],"sources":["../../src/capabilities/state.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { createKvsStore } from '@dxos/effect';\nimport { Observability } from '@dxos/observability';\n\nimport { meta } from '#meta';\nimport { ObservabilityCapabilities } from '#types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* ({ namespace }: { namespace: string }) {\n const stateAtom = createKvsStore({\n key: meta.profile.key,\n schema: ObservabilityCapabilities.StateSchema,\n defaultValue: () => ({}),\n });\n\n // NOTE: Group is set at runtime, not persisted.\n const group = yield* Effect.tryPromise(() => Observability.getObservabilityGroup(namespace));\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n registry.set(stateAtom, { ...registry.get(stateAtom), group });\n\n return Capability.contributes(ObservabilityCapabilities.State, stateAtom);\n }),\n);\n"],"mappings":";;;;;;;AAaA,IAAA,gBAAe,WAAW,WACxB,OAAO,WAAW,WAAW,EAAE,aAAoC;CACjE,MAAM,YAAY,eAAe;EAC/B,KAAK,KAAK,QAAQ;EAClB,QAAQ,0BAA0B;EAClC,qBAAqB,CAAC;CACxB,CAAC;CAGD,MAAM,QAAQ,OAAO,OAAO,iBAAiB,cAAc,sBAAsB,SAAS,CAAC;CAC3F,MAAM,WAAW,OAAO,WAAW,IAAI,aAAa,YAAY;CAChE,SAAS,IAAI,WAAW;EAAE,GAAG,SAAS,IAAI,SAAS;EAAG;CAAM,CAAC;CAE7D,OAAO,WAAW,YAAY,0BAA0B,OAAO,SAAS;AAC1E,CAAC,CACH"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { i as Toggle, o as Namespace, s as Observability$1 } from "./chunk-types.mjs";
|
|
2
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
3
|
+
import { meta } from "#meta";
|
|
4
|
+
import { AppCapabilities } from "@dxos/app-toolkit";
|
|
5
|
+
import { Operation } from "@dxos/compute";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import { Observability } from "@dxos/observability";
|
|
8
|
+
//#region src/operations/toggle.ts
|
|
9
|
+
var handler = Toggle.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
|
|
10
|
+
const namespace = yield* Capability.get(Namespace);
|
|
11
|
+
const observability = yield* Capability.get(Observability$1);
|
|
12
|
+
const capabilities = yield* Capability.Service;
|
|
13
|
+
const registry = capabilities.get(Capabilities.AtomRegistry);
|
|
14
|
+
const settingsObj = capabilities.getAll(AppCapabilities.Settings).find((s) => s.prefix === meta.profile.key);
|
|
15
|
+
if (!settingsObj) return false;
|
|
16
|
+
const settings = registry.get(settingsObj.atom);
|
|
17
|
+
const newEnabled = input.state ?? !settings.enabled;
|
|
18
|
+
registry.set(settingsObj.atom, {
|
|
19
|
+
...settings,
|
|
20
|
+
enabled: newEnabled
|
|
21
|
+
});
|
|
22
|
+
observability.events.captureEvent("observability.toggle", { enabled: newEnabled });
|
|
23
|
+
if (newEnabled) yield* observability.enable();
|
|
24
|
+
else yield* observability.disable();
|
|
25
|
+
yield* Effect.promise(() => Observability.storeObservabilityDisabled(namespace, !newEnabled));
|
|
26
|
+
return newEnabled;
|
|
27
|
+
})));
|
|
28
|
+
//#endregion
|
|
29
|
+
export { handler as default };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=chunk-toggle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-toggle.mjs","names":[],"sources":["../../src/operations/toggle.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { Observability } from '@dxos/observability';\n\nimport { meta } from '#meta';\n\nimport { ObservabilityCapabilities, ObservabilityOperation, type Settings } from '../types';\n\nconst handler: Operation.WithHandler<typeof ObservabilityOperation.Toggle> = ObservabilityOperation.Toggle.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const namespace = yield* Capability.get(ObservabilityCapabilities.Namespace);\n const observability = yield* Capability.get(ObservabilityCapabilities.Observability);\n const capabilities = yield* Capability.Service;\n const registry = capabilities.get(Capabilities.AtomRegistry);\n const allSettings = capabilities.getAll(AppCapabilities.Settings);\n const settingsObj = allSettings.find((s: AppCapabilities.Settings) => s.prefix === meta.profile.key);\n if (!settingsObj) {\n return false;\n }\n const settings = registry.get(settingsObj.atom) as Settings.Settings;\n const newEnabled = input.state ?? !settings.enabled;\n registry.set(settingsObj.atom, { ...settings, enabled: newEnabled });\n observability.events.captureEvent('observability.toggle', {\n enabled: newEnabled,\n });\n\n if (newEnabled) {\n yield* observability.enable();\n } else {\n yield* observability.disable();\n }\n yield* Effect.promise(() => Observability.storeObservabilityDisabled(namespace, !newEnabled));\n return newEnabled;\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;;;;AAeA,IAAM,UAAA,OAAqG,KACzG,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAClC,MAAM,YAAY,OAAO,WAAW,IAAI,SAAmC;CAC3E,MAAM,gBAAgB,OAAO,WAAW,IAAI,eAAuC;CACnF,MAAM,eAAe,OAAO,WAAW;CACvC,MAAM,WAAW,aAAa,IAAI,aAAa,YAAY;CAE3D,MAAM,cADc,aAAa,OAAO,gBAAgB,QACpC,CAAA,CAAY,MAAM,MAAgC,EAAE,WAAW,KAAK,QAAQ,GAAG;CACnG,IAAI,CAAC,aACH,OAAO;CAET,MAAM,WAAW,SAAS,IAAI,YAAY,IAAI;CAC9C,MAAM,aAAa,MAAM,SAAS,CAAC,SAAS;CAC5C,SAAS,IAAI,YAAY,MAAM;EAAE,GAAG;EAAU,SAAS;CAAW,CAAC;CACnE,cAAc,OAAO,aAAa,wBAAwB,EACxD,SAAS,WACX,CAAC;CAED,IAAI,YACF,OAAO,cAAc,OAAO;MAE5B,OAAO,cAAc,QAAQ;CAE/B,OAAO,OAAO,cAAc,cAAc,2BAA2B,WAAW,CAAC,UAAU,CAAC;CAC5F,OAAO;AACT,CAAC,CACH,CACF"}
|