@dxos/plugin-observability 0.7.4 → 0.7.5-feature-compute.4d9d99a
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/browser/chunk-BAU7OKYM.mjs +58 -0
- package/dist/lib/browser/chunk-BAU7OKYM.mjs.map +7 -0
- package/dist/lib/browser/chunk-BWEAT3RG.mjs +12 -0
- package/dist/lib/browser/chunk-BWEAT3RG.mjs.map +7 -0
- package/dist/lib/browser/chunk-H2SQZM4P.mjs +18 -0
- package/dist/lib/browser/chunk-H2SQZM4P.mjs.map +7 -0
- package/dist/lib/browser/chunk-K2Y64RO7.mjs +37 -0
- package/dist/lib/browser/chunk-K2Y64RO7.mjs.map +7 -0
- package/dist/lib/browser/client-ready-3J4QVJE6.mjs +104 -0
- package/dist/lib/browser/client-ready-3J4QVJE6.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +74 -200
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/intents-resolver-P36HTRAG.mjs +55 -0
- package/dist/lib/browser/intents-resolver-P36HTRAG.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-surface-MPOMS7ZD.mjs +26 -0
- package/dist/lib/browser/react-surface-MPOMS7ZD.mjs.map +7 -0
- package/dist/lib/browser/settings-T23OKKWF.mjs +25 -0
- package/dist/lib/browser/settings-T23OKKWF.mjs.map +7 -0
- package/dist/lib/browser/state-FQ6WMLXG.mjs +26 -0
- package/dist/lib/browser/state-FQ6WMLXG.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +10 -0
- package/dist/lib/node/chunk-44EFFE6E.cjs +38 -0
- package/dist/lib/node/chunk-44EFFE6E.cjs.map +7 -0
- package/dist/lib/node/chunk-GSKCHQV5.cjs +78 -0
- package/dist/lib/node/chunk-GSKCHQV5.cjs.map +7 -0
- package/dist/lib/node/{meta.cjs → chunk-HLDDHG6J.cjs} +12 -9
- package/dist/lib/node/chunk-HLDDHG6J.cjs.map +7 -0
- package/dist/lib/node/chunk-UYLJVCUK.cjs +65 -0
- package/dist/lib/node/chunk-UYLJVCUK.cjs.map +7 -0
- package/dist/lib/node/client-ready-UQHLLUQI.cjs +115 -0
- package/dist/lib/node/client-ready-UQHLLUQI.cjs.map +7 -0
- package/dist/lib/node/index.cjs +69 -193
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/intents-resolver-E7LSFPS6.cjs +66 -0
- package/dist/lib/node/intents-resolver-E7LSFPS6.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/react-surface-F77LLZIF.cjs +50 -0
- package/dist/lib/node/react-surface-F77LLZIF.cjs.map +7 -0
- package/dist/lib/node/settings-BUWSSDPF.cjs +39 -0
- package/dist/lib/node/settings-BUWSSDPF.cjs.map +7 -0
- package/dist/lib/node/state-NL2ZZN3S.cjs +40 -0
- package/dist/lib/node/state-NL2ZZN3S.cjs.map +7 -0
- package/dist/lib/node/types.cjs +32 -0
- package/dist/lib/node/types.cjs.map +7 -0
- package/dist/lib/node-esm/chunk-DF2CPSQB.mjs +59 -0
- package/dist/lib/node-esm/chunk-DF2CPSQB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-PZRWMBEG.mjs +38 -0
- package/dist/lib/node-esm/chunk-PZRWMBEG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SCQR7W6A.mjs +19 -0
- package/dist/lib/node-esm/chunk-SCQR7W6A.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YK5MJX7W.mjs +14 -0
- package/dist/lib/node-esm/chunk-YK5MJX7W.mjs.map +7 -0
- package/dist/lib/node-esm/client-ready-LPGIUDS2.mjs +105 -0
- package/dist/lib/node-esm/client-ready-LPGIUDS2.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +74 -200
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/intents-resolver-QDAK6TMP.mjs +56 -0
- package/dist/lib/node-esm/intents-resolver-QDAK6TMP.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-surface-MMGCSPXQ.mjs +27 -0
- package/dist/lib/node-esm/react-surface-MMGCSPXQ.mjs.map +7 -0
- package/dist/lib/node-esm/settings-WWUULM4T.mjs +26 -0
- package/dist/lib/node-esm/settings-WWUULM4T.mjs.map +7 -0
- package/dist/lib/node-esm/state-AM2ICAXU.mjs +27 -0
- package/dist/lib/node-esm/state-AM2ICAXU.mjs.map +7 -0
- package/dist/lib/node-esm/{meta.mjs → types.mjs} +5 -6
- package/dist/types/src/ObservabilityPlugin.d.ts +1 -11
- package/dist/types/src/ObservabilityPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +12 -0
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
- package/dist/types/src/capabilities/client-ready.d.ts +10 -0
- package/dist/types/src/capabilities/client-ready.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +16 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/intents-resolver.d.ts +7 -0
- package/dist/types/src/capabilities/intents-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +4 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings.d.ts +4 -0
- package/dist/types/src/capabilities/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +6 -0
- package/dist/types/src/capabilities/state.d.ts.map +1 -0
- package/dist/types/src/components/ObservabilitySettings.d.ts +5 -3
- package/dist/types/src/components/ObservabilitySettings.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +5 -0
- package/dist/types/src/events.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -12
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +47 -0
- package/dist/types/src/types.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +25 -25
- package/src/ObservabilityPlugin.ts +60 -0
- package/src/capabilities/capabilities.ts +22 -0
- package/src/capabilities/client-ready.ts +99 -0
- package/src/capabilities/index.ts +13 -0
- package/src/capabilities/intents-resolver.ts +53 -0
- package/src/capabilities/react-surface.tsx +26 -0
- package/src/capabilities/settings.ts +19 -0
- package/src/capabilities/state.ts +21 -0
- package/src/components/ObservabilitySettings.tsx +29 -31
- package/src/events.ts +14 -0
- package/src/index.ts +3 -4
- package/src/meta.ts +1 -14
- package/src/types.ts +54 -0
- package/dist/lib/browser/chunk-FO5EMZZO.mjs +0 -20
- package/dist/lib/browser/chunk-FO5EMZZO.mjs.map +0 -7
- package/dist/lib/browser/meta.mjs +0 -11
- package/dist/lib/node/chunk-RAB7T73W.cjs +0 -44
- package/dist/lib/node/chunk-RAB7T73W.cjs.map +0 -7
- package/dist/lib/node/meta.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-UVEE3XZO.mjs +0 -22
- package/dist/lib/node-esm/chunk-UVEE3XZO.mjs.map +0 -7
- package/src/ObservabilityPlugin.tsx +0 -221
- /package/dist/lib/browser/{meta.mjs.map → types.mjs.map} +0 -0
- /package/dist/lib/node-esm/{meta.mjs.map → types.mjs.map} +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import {
|
|
2
|
+
OBSERVABILITY_PLUGIN
|
|
3
|
+
} from "./chunk-BWEAT3RG.mjs";
|
|
4
|
+
|
|
5
|
+
// packages/plugins/plugin-observability/src/types.ts
|
|
6
|
+
import { S } from "@dxos/echo-schema";
|
|
7
|
+
var Email = S.String.pipe(S.nonEmptyString({
|
|
8
|
+
message: () => "Email is required."
|
|
9
|
+
}), S.pattern(/^(?!\.)(?!.*\.\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\.)+[A-Z]{2,}$/i, {
|
|
10
|
+
message: () => "Invalid email address."
|
|
11
|
+
}));
|
|
12
|
+
var nonEmpty = (field) => S.nonEmptyString({
|
|
13
|
+
message: () => `${field} is required.`
|
|
14
|
+
});
|
|
15
|
+
var maxLength = (field, length) => S.maxLength(length, {
|
|
16
|
+
message: () => `${field} is too long.`
|
|
17
|
+
});
|
|
18
|
+
var UserFeedback = S.Struct({
|
|
19
|
+
name: S.String.pipe(nonEmpty("Name"), maxLength("Name", 256)),
|
|
20
|
+
email: Email.pipe(maxLength("Email", 256)),
|
|
21
|
+
message: S.String.pipe(nonEmpty("Feedback"), maxLength("Feedback", 32768))
|
|
22
|
+
});
|
|
23
|
+
var OBSERVABILITY_ACTION = `${OBSERVABILITY_PLUGIN}/action`;
|
|
24
|
+
var ObservabilityAction;
|
|
25
|
+
(function(ObservabilityAction2) {
|
|
26
|
+
class Toggle extends S.TaggedClass()(`${OBSERVABILITY_ACTION}/toggle`, {
|
|
27
|
+
input: S.Struct({
|
|
28
|
+
state: S.optional(S.Boolean)
|
|
29
|
+
}),
|
|
30
|
+
output: S.Boolean
|
|
31
|
+
}) {
|
|
32
|
+
}
|
|
33
|
+
ObservabilityAction2.Toggle = Toggle;
|
|
34
|
+
class SendEvent extends S.TaggedClass()(`${OBSERVABILITY_ACTION}/send-event`, {
|
|
35
|
+
input: S.Struct({
|
|
36
|
+
name: S.String,
|
|
37
|
+
properties: S.optional(S.Object),
|
|
38
|
+
installationId: S.optional(S.String),
|
|
39
|
+
identityId: S.optional(S.String),
|
|
40
|
+
timestamp: S.optional(S.Date)
|
|
41
|
+
}),
|
|
42
|
+
output: S.Void
|
|
43
|
+
}) {
|
|
44
|
+
}
|
|
45
|
+
ObservabilityAction2.SendEvent = SendEvent;
|
|
46
|
+
class CaptureUserFeedback extends S.TaggedClass()(`${OBSERVABILITY_ACTION}/capture-feedback`, {
|
|
47
|
+
input: UserFeedback,
|
|
48
|
+
output: S.Void
|
|
49
|
+
}) {
|
|
50
|
+
}
|
|
51
|
+
ObservabilityAction2.CaptureUserFeedback = CaptureUserFeedback;
|
|
52
|
+
})(ObservabilityAction || (ObservabilityAction = {}));
|
|
53
|
+
|
|
54
|
+
export {
|
|
55
|
+
UserFeedback,
|
|
56
|
+
ObservabilityAction
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=chunk-BAU7OKYM.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\n\nimport { OBSERVABILITY_PLUGIN } from './meta';\n\nconst Email = S.String.pipe(\n S.nonEmptyString({ message: () => 'Email is required.' }),\n S.pattern(/^(?!\\.)(?!.*\\.\\.)([A-Z0-9_+-.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9-]*\\.)+[A-Z]{2,}$/i, {\n message: () => 'Invalid email address.',\n }),\n);\n\nconst nonEmpty = (field: string) => S.nonEmptyString({ message: () => `${field} is required.` });\nconst maxLength = (field: string, length: number) => S.maxLength(length, { message: () => `${field} is too long.` });\n\nexport const UserFeedback = S.Struct({\n name: S.String.pipe(nonEmpty('Name'), maxLength('Name', 256)),\n email: Email.pipe(maxLength('Email', 256)),\n message: S.String.pipe(nonEmpty('Feedback'), maxLength('Feedback', 32_768)),\n});\n\nexport type UserFeedback = S.Schema.Type<typeof UserFeedback>;\n\nconst OBSERVABILITY_ACTION = `${OBSERVABILITY_PLUGIN}/action`;\nexport namespace ObservabilityAction {\n export class Toggle extends S.TaggedClass<Toggle>()(`${OBSERVABILITY_ACTION}/toggle`, {\n input: S.Struct({\n state: S.optional(S.Boolean),\n }),\n output: S.Boolean,\n }) {}\n\n export class SendEvent extends S.TaggedClass<SendEvent>()(`${OBSERVABILITY_ACTION}/send-event`, {\n input: S.Struct({\n name: S.String,\n properties: S.optional(S.Object),\n installationId: S.optional(S.String),\n identityId: S.optional(S.String),\n timestamp: S.optional(S.Date),\n }),\n output: S.Void,\n }) {}\n\n export class CaptureUserFeedback extends S.TaggedClass<CaptureUserFeedback>()(\n `${OBSERVABILITY_ACTION}/capture-feedback`,\n {\n input: UserFeedback,\n output: S.Void,\n },\n ) {}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,SAASA,SAAS;AAIlB,IAAMC,QAAQC,EAAEC,OAAOC,KACrBF,EAAEG,eAAe;EAAEC,SAAS,MAAM;AAAqB,CAAA,GACvDJ,EAAEK,QAAQ,kFAAkF;EAC1FD,SAAS,MAAM;AACjB,CAAA,CAAA;AAGF,IAAME,WAAW,CAACC,UAAkBP,EAAEG,eAAe;EAAEC,SAAS,MAAM,GAAGG,KAAAA;AAAqB,CAAA;AAC9F,IAAMC,YAAY,CAACD,OAAeE,WAAmBT,EAAEQ,UAAUC,QAAQ;EAAEL,SAAS,MAAM,GAAGG,KAAAA;AAAqB,CAAA;AAE3G,IAAMG,eAAeV,EAAEW,OAAO;EACnCC,MAAMZ,EAAEC,OAAOC,KAAKI,SAAS,MAAA,GAASE,UAAU,QAAQ,GAAA,CAAA;EACxDK,OAAOd,MAAMG,KAAKM,UAAU,SAAS,GAAA,CAAA;EACrCJ,SAASJ,EAAEC,OAAOC,KAAKI,SAAS,UAAA,GAAaE,UAAU,YAAY,KAAA,CAAA;AACrE,CAAA;AAIA,IAAMM,uBAAuB,GAAGC,oBAAAA;;UACfC,sBAAAA;EACR,MAAMC,eAAejB,EAAEkB,YAAW,EAAW,GAAGJ,oBAAAA,WAA+B;IACpFK,OAAOnB,EAAEW,OAAO;MACdS,OAAOpB,EAAEqB,SAASrB,EAAEsB,OAAO;IAC7B,CAAA;IACAC,QAAQvB,EAAEsB;EACZ,CAAA,EAAA;EAAI;uBALSL,SAAAA;EAON,MAAMO,kBAAkBxB,EAAEkB,YAAW,EAAc,GAAGJ,oBAAAA,eAAmC;IAC9FK,OAAOnB,EAAEW,OAAO;MACdC,MAAMZ,EAAEC;MACRwB,YAAYzB,EAAEqB,SAASrB,EAAE0B,MAAM;MAC/BC,gBAAgB3B,EAAEqB,SAASrB,EAAEC,MAAM;MACnC2B,YAAY5B,EAAEqB,SAASrB,EAAEC,MAAM;MAC/B4B,WAAW7B,EAAEqB,SAASrB,EAAE8B,IAAI;IAC9B,CAAA;IACAP,QAAQvB,EAAE+B;EACZ,CAAA,EAAA;EAAI;uBATSP,YAAAA;EAWN,MAAMQ,4BAA4BhC,EAAEkB,YAAW,EACpD,GAAGJ,oBAAAA,qBACH;IACEK,OAAOT;IACPa,QAAQvB,EAAE+B;EACZ,CAAA,EAAA;EACC;uBANUC,sBAAAA;AAOf,GA1BiBhB,wBAAAA,sBAAAA,CAAAA,EAAAA;",
|
|
6
|
+
"names": ["S", "Email", "S", "String", "pipe", "nonEmptyString", "message", "pattern", "nonEmpty", "field", "maxLength", "length", "UserFeedback", "Struct", "name", "email", "OBSERVABILITY_ACTION", "OBSERVABILITY_PLUGIN", "ObservabilityAction", "Toggle", "TaggedClass", "input", "state", "optional", "Boolean", "output", "SendEvent", "properties", "Object", "installationId", "identityId", "timestamp", "Date", "Void", "CaptureUserFeedback"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// packages/plugins/plugin-observability/src/meta.ts
|
|
2
|
+
var OBSERVABILITY_PLUGIN = "dxos.org/plugin/observability";
|
|
3
|
+
var meta = {
|
|
4
|
+
id: OBSERVABILITY_PLUGIN,
|
|
5
|
+
name: "Telemetry"
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
OBSERVABILITY_PLUGIN,
|
|
10
|
+
meta
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=chunk-BWEAT3RG.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const OBSERVABILITY_PLUGIN = 'dxos.org/plugin/observability';\n\nexport const meta = {\n id: OBSERVABILITY_PLUGIN,\n name: 'Telemetry',\n} satisfies PluginMeta;\n"],
|
|
5
|
+
"mappings": ";AAMO,IAAMA,uBAAuB;AAE7B,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;AACR;",
|
|
6
|
+
"names": ["OBSERVABILITY_PLUGIN", "meta", "id", "name"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
OBSERVABILITY_PLUGIN
|
|
3
|
+
} from "./chunk-BWEAT3RG.mjs";
|
|
4
|
+
|
|
5
|
+
// packages/plugins/plugin-observability/src/capabilities/capabilities.ts
|
|
6
|
+
import { defineCapability } from "@dxos/app-framework";
|
|
7
|
+
var ObservabilityCapabilities;
|
|
8
|
+
(function(ObservabilityCapabilities2) {
|
|
9
|
+
ObservabilityCapabilities2.State = defineCapability(`${OBSERVABILITY_PLUGIN}/capability/state`);
|
|
10
|
+
ObservabilityCapabilities2.Observability = defineCapability(`${OBSERVABILITY_PLUGIN}/capability/observability`);
|
|
11
|
+
})(ObservabilityCapabilities || (ObservabilityCapabilities = {}));
|
|
12
|
+
var ClientCapability = defineCapability("dxos.org/plugin/client/capability/client");
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
ObservabilityCapabilities,
|
|
16
|
+
ClientCapability
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=chunk-H2SQZM4P.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/capabilities.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type Client } from '@dxos/client';\nimport { type Observability } from '@dxos/observability';\n\nimport { OBSERVABILITY_PLUGIN } from '../meta';\n\nexport namespace ObservabilityCapabilities {\n export type State = {\n group?: string;\n notified?: boolean;\n };\n export const State = defineCapability<State>(`${OBSERVABILITY_PLUGIN}/capability/state`);\n\n export const Observability = defineCapability<Observability>(`${OBSERVABILITY_PLUGIN}/capability/observability`);\n}\n\n// NOTE: This is cloned from the client plugin to avoid circular dependencies.\nexport const ClientCapability = defineCapability<Client>('dxos.org/plugin/client/capability/client');\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,SAASA,wBAAwB;;UAMhBC,4BAAAA;6BAKFC,QAAQC,iBAAwB,GAAGC,oBAAAA,mBAAuC;6BAE1EC,gBAAgBF,iBAAgC,GAAGC,oBAAAA,2BAA+C;AACjH,GARiBH,8BAAAA,4BAAAA,CAAAA,EAAAA;AAWV,IAAMK,mBAAmBH,iBAAyB,0CAAA;",
|
|
6
|
+
"names": ["defineCapability", "ObservabilityCapabilities", "State", "defineCapability", "OBSERVABILITY_PLUGIN", "Observability", "ClientCapability"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ObservabilityAction
|
|
3
|
+
} from "./chunk-BAU7OKYM.mjs";
|
|
4
|
+
import {
|
|
5
|
+
OBSERVABILITY_PLUGIN
|
|
6
|
+
} from "./chunk-BWEAT3RG.mjs";
|
|
7
|
+
|
|
8
|
+
// packages/plugins/plugin-observability/src/components/ObservabilitySettings.tsx
|
|
9
|
+
import React from "react";
|
|
10
|
+
import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
|
|
11
|
+
import { S } from "@dxos/echo-schema";
|
|
12
|
+
import { Input, Message, useTranslation } from "@dxos/react-ui";
|
|
13
|
+
import { DeprecatedFormInput } from "@dxos/react-ui-form";
|
|
14
|
+
var ObservabilitySettingsSchema = S.mutable(S.Struct({
|
|
15
|
+
enabled: S.Boolean
|
|
16
|
+
}));
|
|
17
|
+
var ObservabilitySettings = ({ settings }) => {
|
|
18
|
+
const { t } = useTranslation(OBSERVABILITY_PLUGIN);
|
|
19
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
20
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DeprecatedFormInput, {
|
|
21
|
+
label: t("observability enabled label"),
|
|
22
|
+
secondary: /* @__PURE__ */ React.createElement(Message.Root, {
|
|
23
|
+
valence: "info"
|
|
24
|
+
}, /* @__PURE__ */ React.createElement(Message.Body, null, t("observability description")))
|
|
25
|
+
}, /* @__PURE__ */ React.createElement(Input.Switch, {
|
|
26
|
+
checked: settings.enabled,
|
|
27
|
+
onCheckedChange: (checked) => dispatch(createIntent(ObservabilityAction.Toggle, {
|
|
28
|
+
state: !!checked
|
|
29
|
+
}))
|
|
30
|
+
})));
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export {
|
|
34
|
+
ObservabilitySettingsSchema,
|
|
35
|
+
ObservabilitySettings
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=chunk-K2Y64RO7.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/ObservabilitySettings.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\nimport { Input, Message, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction } from '../types';\n\nexport const ObservabilitySettingsSchema = S.mutable(\n S.Struct({\n enabled: S.Boolean,\n // TODO(wittjosiah): Separate settings for each observability feature.\n // metrics?: boolean;\n // telemetry?: boolean;\n // errors?: boolean;\n }),\n);\n\nexport type ObservabilitySettingsProps = S.Schema.Type<typeof ObservabilitySettingsSchema>;\n\nexport const ObservabilitySettings = ({ settings }: { settings: ObservabilitySettingsProps }) => {\n const { t } = useTranslation(OBSERVABILITY_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return (\n <>\n <DeprecatedFormInput\n label={t('observability enabled label')}\n secondary={\n <Message.Root valence='info'>\n <Message.Body>{t('observability description')}</Message.Body>\n </Message.Root>\n }\n >\n <Input.Switch\n checked={settings.enabled}\n onCheckedChange={(checked) => dispatch(createIntent(ObservabilityAction.Toggle, { state: !!checked }))}\n />\n </DeprecatedFormInput>\n </>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,2BAA2B;AAClD,SAASC,SAAS;AAClB,SAASC,OAAOC,SAASC,sBAAsB;AAC/C,SAASC,2BAA2B;AAK7B,IAAMC,8BAA8BC,EAAEC,QAC3CD,EAAEE,OAAO;EACPC,SAASH,EAAEI;AAKb,CAAA,CAAA;AAKK,IAAMC,wBAAwB,CAAC,EAAEC,SAAQ,MAA4C;AAC1F,QAAM,EAAEC,EAAC,IAAKC,eAAeC,oBAAAA;AAC7B,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,SACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACC,qBAAAA;IACCC,OAAOP,EAAE,6BAAA;IACTQ,WACE,sBAAA,cAACC,QAAQC,MAAI;MAACC,SAAQ;OACpB,sBAAA,cAACF,QAAQG,MAAI,MAAEZ,EAAE,2BAAA,CAAA,CAAA;KAIrB,sBAAA,cAACa,MAAMC,QAAM;IACXC,SAAShB,SAASH;IAClBoB,iBAAiB,CAACD,YAAYX,SAASa,aAAaC,oBAAoBC,QAAQ;MAAEC,OAAO,CAAC,CAACL;IAAQ,CAAA,CAAA;;AAK7G;",
|
|
6
|
+
"names": ["React", "createIntent", "useIntentDispatcher", "S", "Input", "Message", "useTranslation", "DeprecatedFormInput", "ObservabilitySettingsSchema", "S", "mutable", "Struct", "enabled", "Boolean", "ObservabilitySettings", "settings", "t", "useTranslation", "OBSERVABILITY_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "DeprecatedFormInput", "label", "secondary", "Message", "Root", "valence", "Body", "Input", "Switch", "checked", "onCheckedChange", "createIntent", "ObservabilityAction", "Toggle", "state"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ObservabilityAction
|
|
3
|
+
} from "./chunk-BAU7OKYM.mjs";
|
|
4
|
+
import {
|
|
5
|
+
ClientCapability,
|
|
6
|
+
ObservabilityCapabilities
|
|
7
|
+
} from "./chunk-H2SQZM4P.mjs";
|
|
8
|
+
import {
|
|
9
|
+
OBSERVABILITY_PLUGIN
|
|
10
|
+
} from "./chunk-BWEAT3RG.mjs";
|
|
11
|
+
|
|
12
|
+
// packages/plugins/plugin-observability/src/capabilities/client-ready.ts
|
|
13
|
+
import { Capabilities, contributes, createIntent, LayoutAction, SettingsAction } from "@dxos/app-framework";
|
|
14
|
+
import { setupTelemetryListeners } from "@dxos/observability";
|
|
15
|
+
var client_ready_default = async ({ context, namespace, observability }) => {
|
|
16
|
+
const manager = context.requestCapability(Capabilities.PluginManager);
|
|
17
|
+
const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
|
|
18
|
+
const state = context.requestCapability(ObservabilityCapabilities.State);
|
|
19
|
+
const client = context.requestCapability(ClientCapability);
|
|
20
|
+
const sendPrivacyNotice = async () => {
|
|
21
|
+
const environment = client?.config?.values.runtime?.app?.env?.DX_ENVIRONMENT;
|
|
22
|
+
const notify = environment && environment !== "ci" && !environment.endsWith(".local") && !environment.endsWith(".lan");
|
|
23
|
+
if (!state.notified && notify) {
|
|
24
|
+
await dispatch(createIntent(LayoutAction.SetLayout, {
|
|
25
|
+
element: "toast",
|
|
26
|
+
subject: {
|
|
27
|
+
id: `${OBSERVABILITY_PLUGIN}/notice`,
|
|
28
|
+
// TODO(wittjosiah): Non-react translation utils.
|
|
29
|
+
title: [
|
|
30
|
+
"observability toast label",
|
|
31
|
+
{
|
|
32
|
+
ns: OBSERVABILITY_PLUGIN
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
description: [
|
|
36
|
+
"observability toast description",
|
|
37
|
+
{
|
|
38
|
+
ns: OBSERVABILITY_PLUGIN
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
duration: Infinity,
|
|
42
|
+
icon: "ph--info--regular",
|
|
43
|
+
actionLabel: [
|
|
44
|
+
"observability toast action label",
|
|
45
|
+
{
|
|
46
|
+
ns: OBSERVABILITY_PLUGIN
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
actionAlt: [
|
|
50
|
+
"observability toast action alt",
|
|
51
|
+
{
|
|
52
|
+
ns: OBSERVABILITY_PLUGIN
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
closeLabel: [
|
|
56
|
+
"observability toast close label",
|
|
57
|
+
{
|
|
58
|
+
ns: OBSERVABILITY_PLUGIN
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
onAction: () => dispatch(createIntent(SettingsAction.Open, {
|
|
62
|
+
plugin: OBSERVABILITY_PLUGIN
|
|
63
|
+
}))
|
|
64
|
+
}
|
|
65
|
+
}));
|
|
66
|
+
state.notified = true;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
manager.enabled.map((plugin) => observability?.setTag(`pluginEnabled-${plugin}`, "true", "errors"));
|
|
70
|
+
await dispatch(createIntent(ObservabilityAction.SendEvent, {
|
|
71
|
+
name: "page.load",
|
|
72
|
+
properties: {
|
|
73
|
+
href: window.location.href,
|
|
74
|
+
// TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?
|
|
75
|
+
loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart
|
|
76
|
+
}
|
|
77
|
+
}));
|
|
78
|
+
const cleanup = setupTelemetryListeners(namespace, client, observability);
|
|
79
|
+
await Promise.all([
|
|
80
|
+
observability.setIdentityTags(client.services.services),
|
|
81
|
+
observability.startRuntimeMetrics(client),
|
|
82
|
+
observability.startNetworkMetrics(client.services.services),
|
|
83
|
+
observability.startSpacesMetrics(client, namespace)
|
|
84
|
+
]);
|
|
85
|
+
if (client.halo.identity.get()) {
|
|
86
|
+
await sendPrivacyNotice();
|
|
87
|
+
} else {
|
|
88
|
+
const subscription = client.halo.identity.subscribe(async (identity) => {
|
|
89
|
+
if (identity && observability) {
|
|
90
|
+
await sendPrivacyNotice();
|
|
91
|
+
await observability.setIdentityTags(client.services.services);
|
|
92
|
+
subscription.unsubscribe();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return contributes(ObservabilityCapabilities.Observability, observability, async () => {
|
|
97
|
+
cleanup();
|
|
98
|
+
await observability.close();
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
export {
|
|
102
|
+
client_ready_default as default
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=client-ready-3J4QVJE6.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/client-ready.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n SettingsAction,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { setupTelemetryListeners, type Observability } from '@dxos/observability';\n\nimport { ClientCapability, ObservabilityCapabilities } from './capabilities';\nimport { OBSERVABILITY_PLUGIN } from '../meta';\nimport { ObservabilityAction } from '../types';\n\ntype ClientReadyOptions = {\n context: PluginsContext;\n namespace: string;\n observability: Observability;\n};\n\nexport default async ({ context, namespace, observability }: ClientReadyOptions) => {\n const manager = context.requestCapability(Capabilities.PluginManager);\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const state = context.requestCapability(ObservabilityCapabilities.State);\n const client = context.requestCapability(ClientCapability);\n\n const sendPrivacyNotice = async () => {\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 if (!state.notified && notify) {\n await dispatch(\n createIntent(LayoutAction.SetLayout, {\n element: 'toast',\n subject: {\n id: `${OBSERVABILITY_PLUGIN}/notice`,\n // TODO(wittjosiah): Non-react translation utils.\n title: ['observability toast label', { ns: OBSERVABILITY_PLUGIN }],\n description: ['observability toast description', { ns: OBSERVABILITY_PLUGIN }],\n duration: Infinity,\n icon: 'ph--info--regular',\n actionLabel: ['observability toast action label', { ns: OBSERVABILITY_PLUGIN }],\n actionAlt: ['observability toast action alt', { ns: OBSERVABILITY_PLUGIN }],\n closeLabel: ['observability toast close label', { ns: OBSERVABILITY_PLUGIN }],\n onAction: () => dispatch(createIntent(SettingsAction.Open, { plugin: OBSERVABILITY_PLUGIN })),\n },\n }),\n );\n\n state.notified = true;\n }\n };\n\n // Ensure errors are tagged with enabled plugins to help with reproductions.\n manager.enabled.map((plugin) => observability?.setTag(`pluginEnabled-${plugin}`, 'true', 'errors'));\n\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'page.load',\n properties: {\n href: window.location.href,\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\n // Start client observability (i.e. not running as shared worker)\n // TODO(nf): how to prevent multiple instances for single shared worker?\n const cleanup = setupTelemetryListeners(namespace, client, observability);\n\n await Promise.all([\n observability.setIdentityTags(client.services.services),\n observability.startRuntimeMetrics(client),\n observability.startNetworkMetrics(client.services.services),\n observability.startSpacesMetrics(client, namespace),\n ]);\n\n if (client.halo.identity.get()) {\n await sendPrivacyNotice();\n } else {\n const subscription = client.halo.identity.subscribe(async (identity) => {\n if (identity && observability) {\n await sendPrivacyNotice();\n await observability.setIdentityTags(client.services.services);\n subscription.unsubscribe();\n }\n });\n }\n\n return contributes(ObservabilityCapabilities.Observability, observability, async () => {\n cleanup();\n await observability.close();\n });\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;AAIA,SACEA,cACAC,aACAC,cACAC,cACAC,sBAEK;AACP,SAASC,+BAAmD;AAY5D,IAAA,uBAAe,OAAO,EAAEC,SAASC,WAAWC,cAAa,MAAsB;AAC7E,QAAMC,UAAUH,QAAQI,kBAAkBC,aAAaC,aAAa;AACpE,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKR,QAAQI,kBAAkBC,aAAaI,gBAAgB;AAC7F,QAAMC,QAAQV,QAAQI,kBAAkBO,0BAA0BC,KAAK;AACvE,QAAMC,SAASb,QAAQI,kBAAkBU,gBAAAA;AAEzC,QAAMC,oBAAoB,YAAA;AACxB,UAAMC,cAAcH,QAAQI,QAAQC,OAAOC,SAASC,KAAKC,KAAKC;AAC9D,UAAMC,SACJP,eAAeA,gBAAgB,QAAQ,CAACA,YAAYQ,SAAS,QAAA,KAAa,CAACR,YAAYQ,SAAS,MAAA;AAClG,QAAI,CAACd,MAAMe,YAAYF,QAAQ;AAC7B,YAAMf,SACJkB,aAAaC,aAAaC,WAAW;QACnCC,SAAS;QACTC,SAAS;UACPC,IAAI,GAAGC,oBAAAA;;UAEPC,OAAO;YAAC;YAA6B;cAAEC,IAAIF;YAAqB;;UAChEG,aAAa;YAAC;YAAmC;cAAED,IAAIF;YAAqB;;UAC5EI,UAAUC;UACVC,MAAM;UACNC,aAAa;YAAC;YAAoC;cAAEL,IAAIF;YAAqB;;UAC7EQ,WAAW;YAAC;YAAkC;cAAEN,IAAIF;YAAqB;;UACzES,YAAY;YAAC;YAAmC;cAAEP,IAAIF;YAAqB;;UAC3EU,UAAU,MAAMlC,SAASkB,aAAaiB,eAAeC,MAAM;YAAEC,QAAQb;UAAqB,CAAA,CAAA;QAC5F;MACF,CAAA,CAAA;AAGFtB,YAAMe,WAAW;IACnB;EACF;AAGAtB,UAAQ2C,QAAQC,IAAI,CAACF,WAAW3C,eAAe8C,OAAO,iBAAiBH,MAAAA,IAAU,QAAQ,QAAA,CAAA;AAEzF,QAAMrC,SACJkB,aAAauB,oBAAoBC,WAAW;IAC1CC,MAAM;IACNC,YAAY;MACVC,MAAMC,OAAOC,SAASF;;MAEtBG,cAAcF,OAAOG,YAAYC,OAAOC,eAAeL,OAAOG,YAAYC,OAAOE;IACnF;EACF,CAAA,CAAA;AAKF,QAAMC,UAAUC,wBAAwB7D,WAAWY,QAAQX,aAAAA;AAE3D,QAAM6D,QAAQC,IAAI;IAChB9D,cAAc+D,gBAAgBpD,OAAOqD,SAASA,QAAQ;IACtDhE,cAAciE,oBAAoBtD,MAAAA;IAClCX,cAAckE,oBAAoBvD,OAAOqD,SAASA,QAAQ;IAC1DhE,cAAcmE,mBAAmBxD,QAAQZ,SAAAA;GAC1C;AAED,MAAIY,OAAOyD,KAAKC,SAASC,IAAG,GAAI;AAC9B,UAAMzD,kBAAAA;EACR,OAAO;AACL,UAAM0D,eAAe5D,OAAOyD,KAAKC,SAASG,UAAU,OAAOH,aAAAA;AACzD,UAAIA,YAAYrE,eAAe;AAC7B,cAAMa,kBAAAA;AACN,cAAMb,cAAc+D,gBAAgBpD,OAAOqD,SAASA,QAAQ;AAC5DO,qBAAaE,YAAW;MAC1B;IACF,CAAA;EACF;AAEA,SAAOC,YAAYjE,0BAA0BkE,eAAe3E,eAAe,YAAA;AACzE2D,YAAAA;AACA,UAAM3D,cAAc4E,MAAK;EAC3B,CAAA;AACF;",
|
|
6
|
+
"names": ["Capabilities", "contributes", "createIntent", "LayoutAction", "SettingsAction", "setupTelemetryListeners", "context", "namespace", "observability", "manager", "requestCapability", "Capabilities", "PluginManager", "dispatchPromise", "dispatch", "IntentDispatcher", "state", "ObservabilityCapabilities", "State", "client", "ClientCapability", "sendPrivacyNotice", "environment", "config", "values", "runtime", "app", "env", "DX_ENVIRONMENT", "notify", "endsWith", "notified", "createIntent", "LayoutAction", "SetLayout", "element", "subject", "id", "OBSERVABILITY_PLUGIN", "title", "ns", "description", "duration", "Infinity", "icon", "actionLabel", "actionAlt", "closeLabel", "onAction", "SettingsAction", "Open", "plugin", "enabled", "map", "setTag", "ObservabilityAction", "SendEvent", "name", "properties", "href", "window", "location", "loadDuration", "performance", "timing", "loadEventEnd", "loadEventStart", "cleanup", "setupTelemetryListeners", "Promise", "all", "setIdentityTags", "services", "startRuntimeMetrics", "startNetworkMetrics", "startSpacesMetrics", "halo", "identity", "get", "subscription", "subscribe", "unsubscribe", "contributes", "Observability", "close"]
|
|
7
|
+
}
|
|
@@ -1,42 +1,29 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ObservabilityCapabilities
|
|
3
|
+
} from "./chunk-H2SQZM4P.mjs";
|
|
1
4
|
import {
|
|
2
5
|
OBSERVABILITY_PLUGIN,
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from "./chunk-FO5EMZZO.mjs";
|
|
6
|
+
meta
|
|
7
|
+
} from "./chunk-BWEAT3RG.mjs";
|
|
6
8
|
|
|
7
|
-
// packages/plugins/plugin-observability/src/
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
import { parseClientPlugin } from "@dxos/plugin-client";
|
|
9
|
+
// packages/plugins/plugin-observability/src/capabilities/index.ts
|
|
10
|
+
import { lazy } from "@dxos/app-framework";
|
|
11
|
+
var ClientReady = lazy(() => import("./client-ready-3J4QVJE6.mjs"));
|
|
12
|
+
var IntentResolver = lazy(() => import("./intents-resolver-P36HTRAG.mjs"));
|
|
13
|
+
var ReactSurface = lazy(() => import("./react-surface-MPOMS7ZD.mjs"));
|
|
14
|
+
var ObservabilitySettings = lazy(() => import("./settings-T23OKKWF.mjs"));
|
|
15
|
+
var ObservabilityState = lazy(() => import("./state-FQ6WMLXG.mjs"));
|
|
15
16
|
|
|
16
|
-
// packages/plugins/plugin-observability/src/
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
secondary: /* @__PURE__ */ React.createElement(Message.Root, {
|
|
27
|
-
valence: "info"
|
|
28
|
-
}, /* @__PURE__ */ React.createElement(Message.Body, null, t("observability description")))
|
|
29
|
-
}, /* @__PURE__ */ React.createElement(Input.Switch, {
|
|
30
|
-
checked: settings.enabled,
|
|
31
|
-
onCheckedChange: (checked) => intentPlugin.provides.intent.dispatch({
|
|
32
|
-
plugin: OBSERVABILITY_PLUGIN,
|
|
33
|
-
action: ObservabilityAction.TOGGLE,
|
|
34
|
-
data: {
|
|
35
|
-
state: !!checked
|
|
36
|
-
}
|
|
37
|
-
})
|
|
38
|
-
})));
|
|
39
|
-
};
|
|
17
|
+
// packages/plugins/plugin-observability/src/events.ts
|
|
18
|
+
import { defineEvent, Events } from "@dxos/app-framework";
|
|
19
|
+
var ObservabilityEvents;
|
|
20
|
+
(function(ObservabilityEvents2) {
|
|
21
|
+
ObservabilityEvents2.StateReady = Events.createStateEvent(OBSERVABILITY_PLUGIN);
|
|
22
|
+
})(ObservabilityEvents || (ObservabilityEvents = {}));
|
|
23
|
+
var ClientReadyEvent = defineEvent("dxos.org/plugin/client/event/client-ready");
|
|
24
|
+
|
|
25
|
+
// packages/plugins/plugin-observability/src/ObservabilityPlugin.ts
|
|
26
|
+
import { allOf, Capabilities, contributes, defineModule, definePlugin, Events as Events2 } from "@dxos/app-framework";
|
|
40
27
|
|
|
41
28
|
// packages/plugins/plugin-observability/src/translations.ts
|
|
42
29
|
var translations_default = [
|
|
@@ -57,174 +44,61 @@ var translations_default = [
|
|
|
57
44
|
}
|
|
58
45
|
];
|
|
59
46
|
|
|
60
|
-
// packages/plugins/plugin-observability/src/ObservabilityPlugin.
|
|
61
|
-
var
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
action: SettingsAction.OPEN,
|
|
107
|
-
data: {
|
|
108
|
-
plugin: OBSERVABILITY_PLUGIN
|
|
109
|
-
}
|
|
110
|
-
})
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
state.values.notified = true;
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
void options.observability().then(async (obs) => {
|
|
118
|
-
observability = obs;
|
|
119
|
-
pluginHost?.provides?.plugins?.enabled?.map((plugin) => observability?.setTag(`pluginEnabled-${plugin}`, "true", "errors"));
|
|
120
|
-
const client = clientPlugin?.provides?.client;
|
|
121
|
-
if (!client) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
await dispatch({
|
|
125
|
-
action: ObservabilityAction.SEND_EVENT,
|
|
126
|
-
data: {
|
|
127
|
-
name: "page.load",
|
|
128
|
-
properties: {
|
|
129
|
-
href: window.location.href,
|
|
130
|
-
// TODO(wittjosiah): These apis are deprecated. Is there a better way to find this information?
|
|
131
|
-
loadDuration: window.performance.timing.loadEventEnd - window.performance.timing.loadEventStart
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
setupTelemetryListeners(options.namespace, client, observability);
|
|
136
|
-
await Promise.all([
|
|
137
|
-
observability.setIdentityTags(client.services.services),
|
|
138
|
-
observability.startRuntimeMetrics(client),
|
|
139
|
-
observability.startNetworkMetrics(client.services.services),
|
|
140
|
-
observability.startSpacesMetrics(client, options.namespace)
|
|
141
|
-
]);
|
|
142
|
-
if (client.halo.identity.get()) {
|
|
143
|
-
await sendPrivacyNotice();
|
|
144
|
-
} else {
|
|
145
|
-
const subscription = client.halo.identity.subscribe(async (identity) => {
|
|
146
|
-
if (identity && observability) {
|
|
147
|
-
await sendPrivacyNotice();
|
|
148
|
-
await observability.setIdentityTags(client.services.services);
|
|
149
|
-
subscription.unsubscribe();
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
}
|
|
47
|
+
// packages/plugins/plugin-observability/src/ObservabilityPlugin.ts
|
|
48
|
+
var ObservabilityPlugin = (options) => definePlugin(meta, [
|
|
49
|
+
defineModule({
|
|
50
|
+
id: `${meta.id}/module/observability`,
|
|
51
|
+
activatesOn: Events2.Startup,
|
|
52
|
+
activate: async () => contributes(ObservabilityCapabilities.Observability, await options.observability())
|
|
53
|
+
}),
|
|
54
|
+
defineModule({
|
|
55
|
+
id: `${meta.id}/module/settings`,
|
|
56
|
+
activatesOn: Events2.SetupSettings,
|
|
57
|
+
activate: ObservabilitySettings
|
|
58
|
+
}),
|
|
59
|
+
defineModule({
|
|
60
|
+
id: `${meta.id}/module/state`,
|
|
61
|
+
activatesOn: Events2.Startup,
|
|
62
|
+
activate: () => ObservabilityState({
|
|
63
|
+
namespace: options.namespace
|
|
64
|
+
})
|
|
65
|
+
}),
|
|
66
|
+
defineModule({
|
|
67
|
+
id: `${meta.id}/module/translations`,
|
|
68
|
+
activatesOn: Events2.SetupTranslations,
|
|
69
|
+
activate: () => contributes(Capabilities.Translations, translations_default)
|
|
70
|
+
}),
|
|
71
|
+
defineModule({
|
|
72
|
+
id: `${meta.id}/module/intent-resolver`,
|
|
73
|
+
activatesOn: Events2.SetupIntents,
|
|
74
|
+
activate: (context) => IntentResolver({
|
|
75
|
+
context,
|
|
76
|
+
namespace: options.namespace
|
|
77
|
+
})
|
|
78
|
+
}),
|
|
79
|
+
defineModule({
|
|
80
|
+
id: `${meta.id}/module/react-surface`,
|
|
81
|
+
activatesOn: Events2.Startup,
|
|
82
|
+
activate: ReactSurface
|
|
83
|
+
}),
|
|
84
|
+
defineModule({
|
|
85
|
+
id: `${meta.id}/module/client-ready`,
|
|
86
|
+
activatesOn: allOf(Events2.DispatcherReady, ObservabilityEvents.StateReady, ClientReadyEvent),
|
|
87
|
+
activate: async (context) => {
|
|
88
|
+
const observability = await options.observability();
|
|
89
|
+
return ClientReady({
|
|
90
|
+
context,
|
|
91
|
+
observability,
|
|
92
|
+
namespace: options.namespace
|
|
153
93
|
});
|
|
154
|
-
},
|
|
155
|
-
unload: async () => {
|
|
156
|
-
subscriptions.clear();
|
|
157
|
-
await observability?.close();
|
|
158
|
-
},
|
|
159
|
-
provides: {
|
|
160
|
-
intent: {
|
|
161
|
-
resolver: async (intent, plugins) => {
|
|
162
|
-
const client = resolvePlugin(plugins, parseClientPlugin)?.provides?.client;
|
|
163
|
-
if (!client || !observability) {
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
switch (intent.action) {
|
|
167
|
-
case ObservabilityAction.TOGGLE:
|
|
168
|
-
settings.enabled = !settings.enabled;
|
|
169
|
-
observability.event({
|
|
170
|
-
identityId: getTelemetryIdentifier(client),
|
|
171
|
-
name: `${options.namespace}.observability.toggle`,
|
|
172
|
-
properties: {
|
|
173
|
-
enabled: settings.enabled
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
observability.setMode(settings.enabled ? "basic" : "disabled");
|
|
177
|
-
await storeObservabilityDisabled(options.namespace, !settings.enabled);
|
|
178
|
-
return {
|
|
179
|
-
data: settings.enabled
|
|
180
|
-
};
|
|
181
|
-
case ObservabilityAction.SEND_EVENT: {
|
|
182
|
-
const data = intent.data;
|
|
183
|
-
const event = {
|
|
184
|
-
identityId: getTelemetryIdentifier(client),
|
|
185
|
-
name: `${options.namespace}.${data.name}`,
|
|
186
|
-
properties: {
|
|
187
|
-
...data.properties
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
observability.event(event);
|
|
191
|
-
return {
|
|
192
|
-
data: event
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
case ObservabilityAction.CAPTURE_USER_FEEDBACK: {
|
|
196
|
-
const feedback = intent.data;
|
|
197
|
-
observability.captureUserFeedback(feedback.email, feedback.name, feedback.message);
|
|
198
|
-
return {
|
|
199
|
-
data: true
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
},
|
|
205
|
-
observability: state.values,
|
|
206
|
-
settings,
|
|
207
|
-
surface: {
|
|
208
|
-
component: ({ role, data }) => {
|
|
209
|
-
switch (role) {
|
|
210
|
-
case "settings":
|
|
211
|
-
return data.plugin === meta_default.id ? /* @__PURE__ */ React2.createElement(ObservabilitySettings, {
|
|
212
|
-
settings
|
|
213
|
-
}) : null;
|
|
214
|
-
}
|
|
215
|
-
return null;
|
|
216
|
-
}
|
|
217
|
-
},
|
|
218
|
-
translations: translations_default
|
|
219
94
|
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
// packages/plugins/plugin-observability/src/index.ts
|
|
224
|
-
var src_default = ObservabilityPlugin;
|
|
95
|
+
})
|
|
96
|
+
]);
|
|
225
97
|
export {
|
|
98
|
+
OBSERVABILITY_PLUGIN,
|
|
99
|
+
ObservabilityCapabilities,
|
|
100
|
+
ObservabilityEvents,
|
|
226
101
|
ObservabilityPlugin,
|
|
227
|
-
|
|
228
|
-
parseObservabilityPlugin
|
|
102
|
+
meta
|
|
229
103
|
};
|
|
230
104
|
//# sourceMappingURL=index.mjs.map
|