@docx-editor.dev/telemetry 0.0.1 → 2.29.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.
Files changed (47) hide show
  1. package/README.md +85 -7
  2. package/THIRD_PARTY_NOTICES.md +22 -0
  3. package/dist/chunk-73YEPWY5.js +1 -0
  4. package/dist/chunk-7ZXJ6HP2.cjs +1 -0
  5. package/dist/chunk-DT2KMPUJ.js +1 -0
  6. package/dist/chunk-DTEVX2XS.js +1 -0
  7. package/dist/chunk-LFQSY2TD.cjs +1 -0
  8. package/dist/chunk-LFX65QJG.js +4 -0
  9. package/dist/chunk-LGNT4I5W.cjs +1 -0
  10. package/dist/chunk-MJX3ECH3.cjs +4 -0
  11. package/dist/chunk-NUN46EXH.js +2 -0
  12. package/dist/chunk-RRYW7EAV.js +1 -0
  13. package/dist/chunk-S7KBMROA.js +1 -0
  14. package/dist/chunk-U6ERFNUM.cjs +1 -0
  15. package/dist/chunk-UK2MNJCG.cjs +2 -0
  16. package/dist/chunk-WGWKNKUT.cjs +1 -0
  17. package/dist/hocuspocus/index.cjs +1 -0
  18. package/dist/hocuspocus/index.d.cts +118 -0
  19. package/dist/hocuspocus/index.d.ts +118 -0
  20. package/dist/hocuspocus/index.js +1 -0
  21. package/dist/index.cjs +1 -0
  22. package/dist/index.d.cts +332 -0
  23. package/dist/index.d.ts +332 -0
  24. package/dist/index.js +1 -0
  25. package/dist/ingest/index.cjs +1 -0
  26. package/dist/ingest/index.d.cts +107 -0
  27. package/dist/ingest/index.d.ts +107 -0
  28. package/dist/ingest/index.js +1 -0
  29. package/dist/otel/index.cjs +1 -0
  30. package/dist/otel/index.d.cts +57 -0
  31. package/dist/otel/index.d.ts +57 -0
  32. package/dist/otel/index.js +1 -0
  33. package/dist/pipeline-DbVW7S-K.d.cts +223 -0
  34. package/dist/pipeline-DbVW7S-K.d.ts +223 -0
  35. package/dist/prometheus/index.cjs +1 -0
  36. package/dist/prometheus/index.d.cts +88 -0
  37. package/dist/prometheus/index.d.ts +88 -0
  38. package/dist/prometheus/index.js +1 -0
  39. package/dist/sentry/index.cjs +1 -0
  40. package/dist/sentry/index.d.cts +134 -0
  41. package/dist/sentry/index.d.ts +134 -0
  42. package/dist/sentry/index.js +1 -0
  43. package/dist/server/index.cjs +1 -0
  44. package/dist/server/index.d.cts +156 -0
  45. package/dist/server/index.d.ts +156 -0
  46. package/dist/server/index.js +1 -0
  47. package/package.json +100 -16
@@ -0,0 +1 @@
1
+ import {b as b$1}from'../chunk-NUN46EXH.js';var i=class extends Error{name="DocxEditorDiagnosticError";code;constructor(r,t){super(t?`${r}: ${t}`:r),this.code=r;}},u=new Set(["collab.authentication-failed","collab.room-generation-changed"]),l=new Set(["open.failed","open.unsupported-source","open.invalid-limits"]),f=Object.freeze([".docx-editor",".docx-pages"]);function x(e,r){return e.category?.startsWith("ui.")&&g(r?.event?.target)?null:e}function g(e){try{let r=e;return r&&typeof r.closest!="function"&&(r=r.parentElement),!r||typeof r.closest!="function"?!0:r.closest(f.join(", "))!=null}catch{return true}}function p(e){switch(e.kind){case "document.open":return e.outcome==="rejected"&&l.has(e.code);case "edit.rejected":return e.code==="edit.internal-invariant";case "review.skipped":return e.code==="review.revision-unsupported"||e.code==="review.retained-structure";case "font.failed":return e.code==="font.shaper-unavailable";case "collab.status":return e.status==="error"&&!e.recovering&&!u.has(e.code??"");default:return false}}function m(e){return e.kind==="document.open"?e.outcome==="opened":e.kind==="performance"&&e.code===void 0}function c(e){return "code"in e&&e.code?e.code:e.kind}function y(e){let r=e,t={"docx_editor.kind":e.kind,"docx_editor.code":c(e),"docx_editor.version":e.engineVersion,"docx_editor.editor_session":e.editorSessionId};for(let[o,n]of [["origin","origin"],["tracked","tracked"],["status","status"],["outcome","outcome"],["command","command"],["cause","cause"],["part","part"],["errorName","error_name"],["stage","stage"],["operation","operation"],["changeKind","change_kind"],["formattingKind","formatting_kind"]])r[o]!==void 0&&(t[`docx_editor.${n}`]=String(r[o]));for(let[o,n]of Object.entries(e.attributes??{}))t[o]=String(n);return t}function k(e,r){let t=e,o=["cause","errorName","stage","changeKind","formattingKind"].map(n=>t[n]).filter(n=>typeof n=="string");return ["docx-editor",e.kind,r,...o]}function d(e){let{resource:r,...t}=e;return {...t,...Object.keys(r).length?{resource:r}:{}}}function b(e,r={}){let t=r.issue??p,o=r.breadcrumbs??true;return {name:"sentry",event(n){let s=c(n);if(n.repeated===void 0&&t(n)){e.captureException(new i(s,n.hint),{fingerprint:k(n,s),level:n.kind==="font.failed"||n.kind==="review.skipped"?"warning":"error",tags:y(n),contexts:{docx_editor:d(n)}});return}o&&e.addBreadcrumb({category:"docx-editor",message:b$1(n),level:m(n)?"info":"warning",data:d(n)});},async flush(){await e.flush?.(2e3);}}}export{i as DocxEditorDiagnosticError,f as EDITOR_SELECTORS,x as dropEditorBreadcrumbs,p as isSentryIssue,b as sentryExporter};
@@ -0,0 +1 @@
1
+ 'use strict';var chunk7ZXJ6HP2_cjs=require('../chunk-7ZXJ6HP2.cjs');require('../chunk-U6ERFNUM.cjs'),require('../chunk-LGNT4I5W.cjs'),require('../chunk-LFQSY2TD.cjs'),require('../chunk-WGWKNKUT.cjs');Object.defineProperty(exports,"hmacRoomLabel",{enumerable:true,get:function(){return chunk7ZXJ6HP2_cjs.a}});Object.defineProperty(exports,"roomTelemetry",{enumerable:true,get:function(){return chunk7ZXJ6HP2_cjs.b}});
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Room telemetry for any Yjs collaboration server: rooms, connections, the people in each
3
+ * room, the memory each room holds, and why connections and messages were refused.
4
+ *
5
+ * No metric carries a room name. Per-room detail is in {@link RoomTelemetry.list}, for an
6
+ * admin endpoint you protect.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import * as Y from 'yjs';
11
+ import { T as TelemetryPipelineOptions } from '../pipeline-DbVW7S-K.cjs';
12
+ export { b as TelemetryExporter } from '../pipeline-DbVW7S-K.cjs';
13
+ import '@docx-editor.dev/core';
14
+
15
+ /** The part of a `y-protocols` `Awareness` the telemetry reads. @public */
16
+ interface AwarenessLike {
17
+ getStates(): Map<number, unknown>;
18
+ on(event: 'change', listener: (...args: unknown[]) => void): void;
19
+ off(event: 'change', listener: (...args: unknown[]) => void): void;
20
+ }
21
+ /** Options for {@link roomTelemetry}. @public */
22
+ interface RoomTelemetryOptions extends TelemetryPipelineOptions {
23
+ /**
24
+ * How often to sample people, memory, and room size, in milliseconds. Defaults to 60 000.
25
+ * `false` turns the timer off; call `sample()` yourself, for example before each scrape.
26
+ */
27
+ readonly sampleInterval?: number | false;
28
+ /**
29
+ * Measure each room's encoded Yjs state. This encodes the room once per sample, and only when
30
+ * it changed since the last one. Defaults to `true`.
31
+ */
32
+ readonly measureState?: boolean;
33
+ /**
34
+ * How a room appears in {@link RoomTelemetry.list}. Defaults to an index that is valid only
35
+ * inside this process, such as `room-3`. Use `(name) => name` to see real names, or
36
+ * {@link hmacRoomLabel} for a stable label that does not reveal the name.
37
+ */
38
+ readonly roomLabel?: (name: string) => string;
39
+ /**
40
+ * Also record each room's people and memory as gauges labeled `room`. Off by default: a label
41
+ * per room makes one series per room, and a large server has many rooms. A closed room's
42
+ * series is dropped. Only the default label or `hmacRoomLabel` is accepted, so no room name
43
+ * can become a label; any other `roomLabel` throws.
44
+ */
45
+ readonly perRoomSeries?: boolean;
46
+ /**
47
+ * Your own reading of a refusal, for errors whose `reason` or `code` is free text. Return a
48
+ * common reason such as `unauthorized`, a collaboration failure code, or one of `reasons`;
49
+ * anything else is counted as `other`. Return undefined to use the default reading.
50
+ */
51
+ readonly reasonOf?: (error: unknown) => string | undefined;
52
+ /**
53
+ * Refusal reasons to keep as metric labels. Compared without case and recorded in lowercase. Collaboration failure codes are always kept.
54
+ * Any other reason is counted as `other`, so a free-text error never becomes a time series.
55
+ */
56
+ readonly reasons?: readonly string[];
57
+ }
58
+ /** One room in {@link RoomTelemetry.list}. @public */
59
+ interface RoomStats {
60
+ readonly room: string;
61
+ /** People present, from awareness states. A person with two tabs counts twice. */
62
+ readonly participants: number;
63
+ readonly connections: number;
64
+ /** Encoded Yjs state at the last sample, or `null` before the first one. */
65
+ readonly stateBytes: number | null;
66
+ readonly blobBytes: number | null;
67
+ /** Bytes of updates applied since the room was last stored. */
68
+ readonly pendingBytes: number;
69
+ readonly nodes: number | null;
70
+ /** The largest share of any room limit in use, from 0 to 1. */
71
+ readonly limitRatio: number | null;
72
+ readonly ageSeconds: number;
73
+ readonly idleSeconds: number;
74
+ }
75
+ /** What a timed room operation is. @public */
76
+ type RoomOperation = 'load' | 'store';
77
+ /** Records a started operation's duration with its outcome. Later calls do nothing. @public */
78
+ type SettleOperation = (outcome: 'success' | 'failure') => void;
79
+ /** One open room. Returned by {@link RoomTelemetry.open}. @public */
80
+ interface RoomHandle {
81
+ /** The room's label, as {@link RoomTelemetryOptions.roomLabel} made it. */
82
+ readonly label: string;
83
+ /** Run `operation` and record its duration and outcome. Rethrows its error. */
84
+ time<T>(operation: RoomOperation, run: () => T | Promise<T>): Promise<T>;
85
+ /** Start timing `operation` where `time` cannot wrap it; call the result once it settles. */
86
+ begin(operation: RoomOperation): SettleOperation;
87
+ connected(): void;
88
+ disconnected(): void;
89
+ /** Stop tracking the room, for example when the server unloads it. */
90
+ close(): void;
91
+ }
92
+ /** Room telemetry for one server process. @public */
93
+ interface RoomTelemetry {
94
+ /**
95
+ * Start tracking a loaded room. Pass the room's awareness to count people; without it the
96
+ * number of connections stands in.
97
+ */
98
+ open(doc: Y.Doc, options?: {
99
+ readonly name?: string;
100
+ readonly awareness?: AwarenessLike;
101
+ }): RoomHandle;
102
+ /** A connection refused at admission. `reason` can be a string or an error with `reason`. */
103
+ rejected(reason: unknown): void;
104
+ /** A message refused before it applied, such as `room-generation-changed`. */
105
+ refused(reason: unknown): void;
106
+ /** A room migration finished. */
107
+ migrated(outcome: 'migrated' | 'unchanged' | 'failed'): void;
108
+ /** Time an operation that happens before the room is open, such as a load that fails. */
109
+ time<T>(operation: RoomOperation, run: () => T | Promise<T>): Promise<T>;
110
+ /** Start timing an operation that has no room yet; call the result once it settles. */
111
+ begin(operation: RoomOperation): SettleOperation;
112
+ /** Every open room, for an admin endpoint you protect. */
113
+ list(): readonly RoomStats[];
114
+ /** Sample people, memory, and size now. */
115
+ sample(): void;
116
+ flush(): Promise<void>;
117
+ /** Stop the timer, close every room, and shut the exporters down. */
118
+ shutdown(): Promise<void>;
119
+ }
120
+ /**
121
+ * A stable room label that does not reveal the name: an HMAC of the name with your secret.
122
+ * The same name gives the same label across processes and restarts.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * const rooms = roomTelemetry({
127
+ * exporters: [metrics],
128
+ * roomLabel: hmacRoomLabel(process.env.ROOM_LABEL_SECRET),
129
+ * });
130
+ * ```
131
+ *
132
+ * @public
133
+ */
134
+ declare function hmacRoomLabel(secret: string | undefined): (name: string) => string;
135
+ /**
136
+ * Track rooms on a Yjs server.
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * import { roomTelemetry } from '@docx-editor.dev/telemetry/server';
141
+ * import { prometheusRegistry, metricsHandler } from '@docx-editor.dev/telemetry/prometheus';
142
+ *
143
+ * const metrics = prometheusRegistry();
144
+ * const rooms = roomTelemetry({ exporters: [metrics] });
145
+ *
146
+ * const room = rooms.open(ydoc, { name, awareness });
147
+ * await room.time('load', () => loadRoom(ydoc)); // the loaded state is not counted as edits
148
+ * room.connected();
149
+ * ```
150
+ *
151
+ * @public
152
+ */
153
+ declare function roomTelemetry(options: RoomTelemetryOptions): RoomTelemetry;
154
+
155
+ export { TelemetryPipelineOptions, hmacRoomLabel, roomTelemetry };
156
+ export type { AwarenessLike, RoomHandle, RoomOperation, RoomStats, RoomTelemetry, RoomTelemetryOptions, SettleOperation };
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Room telemetry for any Yjs collaboration server: rooms, connections, the people in each
3
+ * room, the memory each room holds, and why connections and messages were refused.
4
+ *
5
+ * No metric carries a room name. Per-room detail is in {@link RoomTelemetry.list}, for an
6
+ * admin endpoint you protect.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import * as Y from 'yjs';
11
+ import { T as TelemetryPipelineOptions } from '../pipeline-DbVW7S-K.js';
12
+ export { b as TelemetryExporter } from '../pipeline-DbVW7S-K.js';
13
+ import '@docx-editor.dev/core';
14
+
15
+ /** The part of a `y-protocols` `Awareness` the telemetry reads. @public */
16
+ interface AwarenessLike {
17
+ getStates(): Map<number, unknown>;
18
+ on(event: 'change', listener: (...args: unknown[]) => void): void;
19
+ off(event: 'change', listener: (...args: unknown[]) => void): void;
20
+ }
21
+ /** Options for {@link roomTelemetry}. @public */
22
+ interface RoomTelemetryOptions extends TelemetryPipelineOptions {
23
+ /**
24
+ * How often to sample people, memory, and room size, in milliseconds. Defaults to 60 000.
25
+ * `false` turns the timer off; call `sample()` yourself, for example before each scrape.
26
+ */
27
+ readonly sampleInterval?: number | false;
28
+ /**
29
+ * Measure each room's encoded Yjs state. This encodes the room once per sample, and only when
30
+ * it changed since the last one. Defaults to `true`.
31
+ */
32
+ readonly measureState?: boolean;
33
+ /**
34
+ * How a room appears in {@link RoomTelemetry.list}. Defaults to an index that is valid only
35
+ * inside this process, such as `room-3`. Use `(name) => name` to see real names, or
36
+ * {@link hmacRoomLabel} for a stable label that does not reveal the name.
37
+ */
38
+ readonly roomLabel?: (name: string) => string;
39
+ /**
40
+ * Also record each room's people and memory as gauges labeled `room`. Off by default: a label
41
+ * per room makes one series per room, and a large server has many rooms. A closed room's
42
+ * series is dropped. Only the default label or `hmacRoomLabel` is accepted, so no room name
43
+ * can become a label; any other `roomLabel` throws.
44
+ */
45
+ readonly perRoomSeries?: boolean;
46
+ /**
47
+ * Your own reading of a refusal, for errors whose `reason` or `code` is free text. Return a
48
+ * common reason such as `unauthorized`, a collaboration failure code, or one of `reasons`;
49
+ * anything else is counted as `other`. Return undefined to use the default reading.
50
+ */
51
+ readonly reasonOf?: (error: unknown) => string | undefined;
52
+ /**
53
+ * Refusal reasons to keep as metric labels. Compared without case and recorded in lowercase. Collaboration failure codes are always kept.
54
+ * Any other reason is counted as `other`, so a free-text error never becomes a time series.
55
+ */
56
+ readonly reasons?: readonly string[];
57
+ }
58
+ /** One room in {@link RoomTelemetry.list}. @public */
59
+ interface RoomStats {
60
+ readonly room: string;
61
+ /** People present, from awareness states. A person with two tabs counts twice. */
62
+ readonly participants: number;
63
+ readonly connections: number;
64
+ /** Encoded Yjs state at the last sample, or `null` before the first one. */
65
+ readonly stateBytes: number | null;
66
+ readonly blobBytes: number | null;
67
+ /** Bytes of updates applied since the room was last stored. */
68
+ readonly pendingBytes: number;
69
+ readonly nodes: number | null;
70
+ /** The largest share of any room limit in use, from 0 to 1. */
71
+ readonly limitRatio: number | null;
72
+ readonly ageSeconds: number;
73
+ readonly idleSeconds: number;
74
+ }
75
+ /** What a timed room operation is. @public */
76
+ type RoomOperation = 'load' | 'store';
77
+ /** Records a started operation's duration with its outcome. Later calls do nothing. @public */
78
+ type SettleOperation = (outcome: 'success' | 'failure') => void;
79
+ /** One open room. Returned by {@link RoomTelemetry.open}. @public */
80
+ interface RoomHandle {
81
+ /** The room's label, as {@link RoomTelemetryOptions.roomLabel} made it. */
82
+ readonly label: string;
83
+ /** Run `operation` and record its duration and outcome. Rethrows its error. */
84
+ time<T>(operation: RoomOperation, run: () => T | Promise<T>): Promise<T>;
85
+ /** Start timing `operation` where `time` cannot wrap it; call the result once it settles. */
86
+ begin(operation: RoomOperation): SettleOperation;
87
+ connected(): void;
88
+ disconnected(): void;
89
+ /** Stop tracking the room, for example when the server unloads it. */
90
+ close(): void;
91
+ }
92
+ /** Room telemetry for one server process. @public */
93
+ interface RoomTelemetry {
94
+ /**
95
+ * Start tracking a loaded room. Pass the room's awareness to count people; without it the
96
+ * number of connections stands in.
97
+ */
98
+ open(doc: Y.Doc, options?: {
99
+ readonly name?: string;
100
+ readonly awareness?: AwarenessLike;
101
+ }): RoomHandle;
102
+ /** A connection refused at admission. `reason` can be a string or an error with `reason`. */
103
+ rejected(reason: unknown): void;
104
+ /** A message refused before it applied, such as `room-generation-changed`. */
105
+ refused(reason: unknown): void;
106
+ /** A room migration finished. */
107
+ migrated(outcome: 'migrated' | 'unchanged' | 'failed'): void;
108
+ /** Time an operation that happens before the room is open, such as a load that fails. */
109
+ time<T>(operation: RoomOperation, run: () => T | Promise<T>): Promise<T>;
110
+ /** Start timing an operation that has no room yet; call the result once it settles. */
111
+ begin(operation: RoomOperation): SettleOperation;
112
+ /** Every open room, for an admin endpoint you protect. */
113
+ list(): readonly RoomStats[];
114
+ /** Sample people, memory, and size now. */
115
+ sample(): void;
116
+ flush(): Promise<void>;
117
+ /** Stop the timer, close every room, and shut the exporters down. */
118
+ shutdown(): Promise<void>;
119
+ }
120
+ /**
121
+ * A stable room label that does not reveal the name: an HMAC of the name with your secret.
122
+ * The same name gives the same label across processes and restarts.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * const rooms = roomTelemetry({
127
+ * exporters: [metrics],
128
+ * roomLabel: hmacRoomLabel(process.env.ROOM_LABEL_SECRET),
129
+ * });
130
+ * ```
131
+ *
132
+ * @public
133
+ */
134
+ declare function hmacRoomLabel(secret: string | undefined): (name: string) => string;
135
+ /**
136
+ * Track rooms on a Yjs server.
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * import { roomTelemetry } from '@docx-editor.dev/telemetry/server';
141
+ * import { prometheusRegistry, metricsHandler } from '@docx-editor.dev/telemetry/prometheus';
142
+ *
143
+ * const metrics = prometheusRegistry();
144
+ * const rooms = roomTelemetry({ exporters: [metrics] });
145
+ *
146
+ * const room = rooms.open(ydoc, { name, awareness });
147
+ * await room.time('load', () => loadRoom(ydoc)); // the loaded state is not counted as edits
148
+ * room.connected();
149
+ * ```
150
+ *
151
+ * @public
152
+ */
153
+ declare function roomTelemetry(options: RoomTelemetryOptions): RoomTelemetry;
154
+
155
+ export { TelemetryPipelineOptions, hmacRoomLabel, roomTelemetry };
156
+ export type { AwarenessLike, RoomHandle, RoomOperation, RoomStats, RoomTelemetry, RoomTelemetryOptions, SettleOperation };
@@ -0,0 +1 @@
1
+ export{a as hmacRoomLabel,b as roomTelemetry}from'../chunk-RRYW7EAV.js';import'../chunk-S7KBMROA.js';import'../chunk-73YEPWY5.js';import'../chunk-DTEVX2XS.js';import'../chunk-DT2KMPUJ.js';
package/package.json CHANGED
@@ -1,31 +1,115 @@
1
1
  {
2
2
  "name": "@docx-editor.dev/telemetry",
3
- "version": "0.0.1",
4
- "description": "Placeholder that reserves the name. The first release is 2.29.0: anonymous diagnostics, metrics, and error reporting for @docx-editor.dev editors and collaboration servers.",
5
- "license": "LicenseRef-EigenPal-Pro-Evaluation-1.0",
3
+ "version": "2.29.0",
4
+ "description": "Anonymous diagnostics, metrics, and error reporting for @docx-editor.dev editors and collaboration servers, with OpenTelemetry, Prometheus, and Sentry exporters.",
5
+ "sideEffects": false,
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/index.cjs"
12
+ },
13
+ "./otel": {
14
+ "types": "./dist/otel/index.d.ts",
15
+ "import": "./dist/otel/index.js",
16
+ "require": "./dist/otel/index.cjs"
17
+ },
18
+ "./sentry": {
19
+ "types": "./dist/sentry/index.d.ts",
20
+ "import": "./dist/sentry/index.js",
21
+ "require": "./dist/sentry/index.cjs"
22
+ },
23
+ "./prometheus": {
24
+ "types": "./dist/prometheus/index.d.ts",
25
+ "import": "./dist/prometheus/index.js",
26
+ "require": "./dist/prometheus/index.cjs"
27
+ },
28
+ "./server": {
29
+ "types": "./dist/server/index.d.ts",
30
+ "import": "./dist/server/index.js",
31
+ "require": "./dist/server/index.cjs"
32
+ },
33
+ "./hocuspocus": {
34
+ "types": "./dist/hocuspocus/index.d.ts",
35
+ "import": "./dist/hocuspocus/index.js",
36
+ "require": "./dist/hocuspocus/index.cjs"
37
+ },
38
+ "./ingest": {
39
+ "types": "./dist/ingest/index.d.ts",
40
+ "import": "./dist/ingest/index.js",
41
+ "require": "./dist/ingest/index.cjs"
42
+ },
43
+ "./package.json": "./package.json"
44
+ },
45
+ "files": [
46
+ "dist",
47
+ "!dist/metafile-*.json",
48
+ "LICENSE.md",
49
+ "README.md",
50
+ "THIRD_PARTY_NOTICES.md"
51
+ ],
52
+ "scripts": {
53
+ "build": "node ../../scripts/check-built-siblings.mjs && node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsup",
54
+ "typecheck": "bun check",
55
+ "license:check": "license-check-and-add check -f license-check.json",
56
+ "license:add": "license-check-and-add add -f license-check.json"
57
+ },
58
+ "peerDependencies": {
59
+ "@docx-editor.dev/core": "~2.29.0",
60
+ "@docx-editor.dev/pro": "~2.29.0",
61
+ "@opentelemetry/api": "^1.9.0",
62
+ "yjs": "^13.6.32",
63
+ "@hocuspocus/server": "^4.6.0"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "@docx-editor.dev/pro": {
67
+ "optional": true
68
+ },
69
+ "@opentelemetry/api": {
70
+ "optional": true
71
+ },
72
+ "yjs": {
73
+ "optional": true
74
+ },
75
+ "@hocuspocus/server": {
76
+ "optional": true
77
+ }
78
+ },
79
+ "devDependencies": {
80
+ "@docx-editor.dev/core": "workspace:*",
81
+ "@docx-editor.dev/pro": "workspace:*",
82
+ "@happy-dom/global-registrator": "^20.8.3",
83
+ "@hocuspocus/server": "^4.6.0",
84
+ "@opentelemetry/api": "1.9.0",
85
+ "@sentry/core": "9.47.2",
86
+ "fflate": "^0.8.2",
87
+ "license-check-and-add": "^4.0.5",
88
+ "typescript7": "npm:typescript@^7.0.2",
89
+ "y-protocols": "^1.0.7",
90
+ "yjs": "^13.6.32"
91
+ },
92
+ "keywords": [
93
+ "docx",
94
+ "telemetry",
95
+ "opentelemetry",
96
+ "prometheus",
97
+ "sentry",
98
+ "observability",
99
+ "collaboration"
100
+ ],
6
101
  "author": {
7
102
  "name": "EigenPal, Inc.",
8
103
  "email": "licensing@eigenpal.com",
9
104
  "url": "https://eigenpal.com"
10
105
  },
11
- "homepage": "https://docx-editor.dev/docs/2.x/telemetry",
106
+ "license": "LicenseRef-EigenPal-Pro-Evaluation-1.0",
107
+ "homepage": "https://docx-editor.dev/",
12
108
  "repository": {
13
109
  "type": "git",
14
110
  "url": "https://github.com/eigenpal/docx-editor.git",
15
111
  "directory": "packages/telemetry"
16
112
  },
17
- "keywords": [
18
- "docx",
19
- "telemetry",
20
- "opentelemetry",
21
- "prometheus",
22
- "sentry",
23
- "observability"
24
- ],
25
- "files": [
26
- "README.md",
27
- "LICENSE.md"
28
- ],
29
113
  "publishConfig": {
30
114
  "access": "public"
31
115
  }