@n8n/telemetry 1.7.0 → 1.8.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.
@@ -0,0 +1,93 @@
1
+ import { z } from 'zod/v4';
2
+ export declare const NODE_TYPE_POLICIES_TELEMETRY: {
3
+ readonly USER_SAVED_NODE_TYPE_POLICY: {
4
+ readonly name: "User saved node type policy";
5
+ readonly description: "A node type availability policy was saved for one scope through the composed write that the policy UI uses. One event per save, covering both the scope default action and its rules. Rule-level edits through the advanced document and attachment APIs report separately. The type counts and list report what this scope decides on its own, so at project scope they are the project layer before it composes with the instance policy.";
6
+ readonly properties: z.ZodObject<{
7
+ rule_count: z.ZodNumber;
8
+ allow_rule_count: z.ZodNumber;
9
+ deny_rule_count: z.ZodNumber;
10
+ delegate_rule_count: z.ZodNumber;
11
+ user_id: z.ZodOptional<z.ZodString>;
12
+ source: z.ZodEnum<{
13
+ environment: "environment";
14
+ user: "user";
15
+ }>;
16
+ scope: z.ZodEnum<{
17
+ instance: "instance";
18
+ project: "project";
19
+ }>;
20
+ project_id: z.ZodOptional<z.ZodString>;
21
+ default_action: z.ZodEnum<{
22
+ allow: "allow";
23
+ delegate: "delegate";
24
+ deny: "deny";
25
+ }>;
26
+ previous_default_action: z.ZodNullable<z.ZodEnum<{
27
+ allow: "allow";
28
+ delegate: "delegate";
29
+ deny: "deny";
30
+ }>>;
31
+ is_first_write: z.ZodBoolean;
32
+ name_selector_count: z.ZodNumber;
33
+ package_selector_count: z.ZodNumber;
34
+ evaluated_type_count: z.ZodNumber;
35
+ blocked_type_count: z.ZodNumber;
36
+ allowed_type_count: z.ZodNumber;
37
+ delegated_type_count: z.ZodNumber;
38
+ blocked_types: z.ZodArray<z.ZodString>;
39
+ allowed_types: z.ZodArray<z.ZodString>;
40
+ previous_rule_count: z.ZodNullable<z.ZodNumber>;
41
+ shadow_warning_count: z.ZodNumber;
42
+ version: z.ZodNumber;
43
+ }, z.core.$strip>;
44
+ } & import("../define").TelemetryEventInput & {
45
+ readonly getValidationError: (properties: unknown) => string | null;
46
+ };
47
+ readonly USER_UPDATED_NODE_TYPE_POLICY_DOCUMENT: {
48
+ readonly name: "User updated node type policy document";
49
+ readonly description: "A policy document was created, edited, or deleted through the advanced instance-only document API. The composed save that the policy UI uses reports as \"User saved node type policy\" instead. Rule counts describe the document after the operation, so a delete reports 0 and carries the deleted size in previous_rule_count.";
50
+ readonly properties: z.ZodObject<{
51
+ rule_count: z.ZodNumber;
52
+ allow_rule_count: z.ZodNumber;
53
+ deny_rule_count: z.ZodNumber;
54
+ delegate_rule_count: z.ZodNumber;
55
+ user_id: z.ZodOptional<z.ZodString>;
56
+ source: z.ZodEnum<{
57
+ environment: "environment";
58
+ user: "user";
59
+ }>;
60
+ operation: z.ZodEnum<{
61
+ created: "created";
62
+ deleted: "deleted";
63
+ updated: "updated";
64
+ }>;
65
+ policy_id: z.ZodString;
66
+ previous_rule_count: z.ZodNullable<z.ZodNumber>;
67
+ }, z.core.$strip>;
68
+ } & import("../define").TelemetryEventInput & {
69
+ readonly getValidationError: (properties: unknown) => string | null;
70
+ };
71
+ readonly USER_UPDATED_NODE_TYPE_POLICY_ATTACHMENTS: {
72
+ readonly name: "User updated node type policy attachments";
73
+ readonly description: "The set of policy documents attached to one scope was replaced through the advanced instance-only attachment API. Reports the resulting set, not the individual add or remove.";
74
+ readonly properties: z.ZodObject<{
75
+ user_id: z.ZodOptional<z.ZodString>;
76
+ source: z.ZodEnum<{
77
+ environment: "environment";
78
+ user: "user";
79
+ }>;
80
+ scope: z.ZodEnum<{
81
+ instance: "instance";
82
+ project: "project";
83
+ }>;
84
+ project_id: z.ZodOptional<z.ZodString>;
85
+ scope_id: z.ZodString;
86
+ attachment_count: z.ZodNumber;
87
+ floor_attachment_count: z.ZodNumber;
88
+ previous_attachment_count: z.ZodNumber;
89
+ }, z.core.$strip>;
90
+ } & import("../define").TelemetryEventInput & {
91
+ readonly getValidationError: (properties: unknown) => string | null;
92
+ };
93
+ };
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NODE_TYPE_POLICIES_TELEMETRY = void 0;
4
+ const v4_1 = require("zod/v4");
5
+ const define_1 = require("../define");
6
+ const userId = v4_1.z.string().optional();
7
+ const source = v4_1.z
8
+ .enum(['user', 'environment'])
9
+ .describe("'environment' is a bootstrap write from configuration, with no acting user");
10
+ const scope = v4_1.z
11
+ .enum(['instance', 'project'])
12
+ .describe('Which scope the policy was written at; project policies compose under instance');
13
+ const projectId = v4_1.z.string().optional().describe('Absent at instance scope');
14
+ const ruleCounts = {
15
+ rule_count: v4_1.z.number(),
16
+ allow_rule_count: v4_1.z.number(),
17
+ deny_rule_count: v4_1.z.number(),
18
+ delegate_rule_count: v4_1.z
19
+ .number()
20
+ .describe('Always 0 at project scope, which rejects the delegate action'),
21
+ };
22
+ exports.NODE_TYPE_POLICIES_TELEMETRY = (0, define_1.defineTelemetryEvents)({
23
+ USER_SAVED_NODE_TYPE_POLICY: {
24
+ name: 'User saved node type policy',
25
+ description: 'A node type availability policy was saved for one scope through the composed write that the policy UI uses. One event per save, covering both the scope default action and its rules. Rule-level edits through the advanced document and attachment APIs report separately. The type counts and list report what this scope decides on its own, so at project scope they are the project layer before it composes with the instance policy.',
26
+ properties: v4_1.z.object({
27
+ user_id: userId,
28
+ source,
29
+ scope,
30
+ project_id: projectId,
31
+ default_action: v4_1.z
32
+ .enum(['allow', 'deny', 'delegate'])
33
+ .describe('What the scope decides for a type that no rule matches'),
34
+ previous_default_action: v4_1.z
35
+ .enum(['allow', 'deny', 'delegate'])
36
+ .nullable()
37
+ .describe('Null on the first write to this scope, which had no stored default'),
38
+ is_first_write: v4_1.z
39
+ .boolean()
40
+ .describe('Whether this write created the scope; an unwritten scope allows every type'),
41
+ ...ruleCounts,
42
+ name_selector_count: v4_1.z.number().describe('Rules that target one exact node type name'),
43
+ package_selector_count: v4_1.z.number().describe('Rules that target a whole node package'),
44
+ evaluated_type_count: v4_1.z
45
+ .number()
46
+ .describe('Node types this instance knows, and so the denominator for the counts below'),
47
+ blocked_type_count: v4_1.z.number(),
48
+ allowed_type_count: v4_1.z.number(),
49
+ delegated_type_count: v4_1.z
50
+ .number()
51
+ .describe('Types a project can opt into; always 0 at project scope'),
52
+ blocked_types: v4_1.z
53
+ .array(v4_1.z.string())
54
+ .describe('The node types this policy makes unavailable, capped at 100. Node type names, not user data. Compare the length against blocked_type_count to see whether the cap dropped any'),
55
+ allowed_types: v4_1.z
56
+ .array(v4_1.z.string())
57
+ .describe('The node types this policy leaves available, capped at 100 the same way'),
58
+ previous_rule_count: v4_1.z.number().nullable().describe('Null on the first write to this scope'),
59
+ shadow_warning_count: v4_1.z
60
+ .number()
61
+ .describe('Saved rules that can never match, because an earlier rule already covers them'),
62
+ version: v4_1.z.number().describe('The scope version after the write'),
63
+ }),
64
+ },
65
+ USER_UPDATED_NODE_TYPE_POLICY_DOCUMENT: {
66
+ name: 'User updated node type policy document',
67
+ description: 'A policy document was created, edited, or deleted through the advanced instance-only document API. The composed save that the policy UI uses reports as "User saved node type policy" instead. Rule counts describe the document after the operation, so a delete reports 0 and carries the deleted size in previous_rule_count.',
68
+ properties: v4_1.z.object({
69
+ user_id: userId,
70
+ source,
71
+ operation: v4_1.z.enum(['created', 'updated', 'deleted']),
72
+ policy_id: v4_1.z.string(),
73
+ ...ruleCounts,
74
+ previous_rule_count: v4_1.z.number().nullable().describe('Null on a created document'),
75
+ }),
76
+ },
77
+ USER_UPDATED_NODE_TYPE_POLICY_ATTACHMENTS: {
78
+ name: 'User updated node type policy attachments',
79
+ description: 'The set of policy documents attached to one scope was replaced through the advanced instance-only attachment API. Reports the resulting set, not the individual add or remove.',
80
+ properties: v4_1.z.object({
81
+ user_id: userId,
82
+ source,
83
+ scope,
84
+ project_id: projectId,
85
+ scope_id: v4_1.z.string(),
86
+ attachment_count: v4_1.z.number(),
87
+ floor_attachment_count: v4_1.z
88
+ .number()
89
+ .describe('Attachments that a narrower scope cannot override'),
90
+ previous_attachment_count: v4_1.z.number(),
91
+ }),
92
+ },
93
+ });
94
+ //# sourceMappingURL=node-type-policies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-type-policies.js","sourceRoot":"","sources":["../../src/events/node-type-policies.ts"],"names":[],"mappings":"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"}
@@ -703,6 +703,7 @@ export declare const TELEMETRY_EVENT: {
703
703
  dropdown: "dropdown";
704
704
  }>;
705
705
  agent_id: import("zod/v4").ZodString;
706
+ manual: import("zod/v4").ZodOptional<import("zod/v4").ZodBoolean>;
706
707
  session_id: import("zod/v4").ZodString;
707
708
  }, import("zod/v4/core").$strip>;
708
709
  } & import("./define").TelemetryEventInput & {
@@ -892,6 +893,57 @@ export declare const TELEMETRY_EVENT: {
892
893
  readonly getValidationError: (properties: unknown) => string | null;
893
894
  };
894
895
  };
896
+ CONTEXT: {
897
+ readonly USER_CREATED_PREFERENCE: {
898
+ readonly name: "User created preference";
899
+ readonly description: "A user saved a new preference from the Context settings area. Fires once the save succeeds, so opening the modal and cancelling reports nothing.";
900
+ readonly properties: import("zod/v4").ZodObject<{
901
+ scope_type: import("zod/v4").ZodEnum<{
902
+ instance: "instance";
903
+ project: "project";
904
+ user: "user";
905
+ }>;
906
+ text_length: import("zod/v4").ZodNumber;
907
+ project_id: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
908
+ }, import("zod/v4/core").$strip>;
909
+ } & import("./define").TelemetryEventInput & {
910
+ readonly getValidationError: (properties: unknown) => string | null;
911
+ };
912
+ readonly USER_UPDATED_PREFERENCE: {
913
+ readonly name: "User updated preference";
914
+ readonly description: "A user saved an edit to an existing preference. Fires once the save succeeds. Reports the resulting scope, not the prior one; `scope_changed` tells them apart.";
915
+ readonly properties: import("zod/v4").ZodObject<{
916
+ scope_type: import("zod/v4").ZodEnum<{
917
+ instance: "instance";
918
+ project: "project";
919
+ user: "user";
920
+ }>;
921
+ text_length: import("zod/v4").ZodNumber;
922
+ scope_changed: import("zod/v4").ZodBoolean;
923
+ project_id: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
924
+ }, import("zod/v4/core").$strip>;
925
+ } & import("./define").TelemetryEventInput & {
926
+ readonly getValidationError: (properties: unknown) => string | null;
927
+ };
928
+ readonly USER_DELETED_PREFERENCES: {
929
+ readonly name: "User deleted preferences";
930
+ readonly description: "A user deleted one or more preferences. One event covers a single row action and a bulk delete; `source` tells them apart and `count` carries how many went. Fires after the delete succeeds and the confirmation was accepted.";
931
+ readonly properties: import("zod/v4").ZodObject<{
932
+ count: import("zod/v4").ZodNumber;
933
+ source: import("zod/v4").ZodEnum<{
934
+ bulk: "bulk";
935
+ row: "row";
936
+ }>;
937
+ scope_types: import("zod/v4").ZodArray<import("zod/v4").ZodEnum<{
938
+ instance: "instance";
939
+ project: "project";
940
+ user: "user";
941
+ }>>;
942
+ }, import("zod/v4/core").$strip>;
943
+ } & import("./define").TelemetryEventInput & {
944
+ readonly getValidationError: (properties: unknown) => string | null;
945
+ };
946
+ };
895
947
  INSTANCE: {
896
948
  readonly INSTANCE_STARTED: {
897
949
  readonly name: "Instance started";
@@ -999,7 +1051,7 @@ export declare const TELEMETRY_EVENT: {
999
1051
  INSTANCE_AI: {
1000
1052
  readonly USER_CLICKED_AI_CREDIT_BALANCE: {
1001
1053
  readonly name: "User clicked AI credit balance";
1002
- readonly description: "The user clicked the AI Assistant credit balance button to open or close the balance dropdown.";
1054
+ readonly description: "The user clicked the n8n Assistant credit balance button to open or close the balance dropdown.";
1003
1055
  readonly properties: import("zod/v4").ZodObject<{}, import("zod/v4/core").$strip>;
1004
1056
  } & import("./define").TelemetryEventInput & {
1005
1057
  readonly getValidationError: (properties: unknown) => string | null;
@@ -1040,7 +1092,7 @@ export declare const TELEMETRY_EVENT: {
1040
1092
  };
1041
1093
  readonly OPEN_BY_DEFAULT_NOTIFICATION_SHOWN: {
1042
1094
  readonly name: "Open in assistant notification shown";
1043
- readonly description: "The open-by-default experiment notification rendered after a workflow list card auto-opened in the AI Assistant.";
1095
+ readonly description: "The open-by-default experiment notification rendered after a workflow list card auto-opened in the n8n Assistant.";
1044
1096
  readonly properties: import("zod/v4").ZodObject<{
1045
1097
  workflow_id: import("zod/v4").ZodNullable<import("zod/v4").ZodString>;
1046
1098
  variant: import("zod/v4").ZodEnum<{
@@ -1079,7 +1131,7 @@ export declare const TELEMETRY_EVENT: {
1079
1131
  };
1080
1132
  readonly DEFAULT_EDITOR_PREFERENCE_CHANGED: {
1081
1133
  readonly name: "Default editor preference changed";
1082
- readonly description: "The user saved the default-editor preference on the AI Assistant settings page.";
1134
+ readonly description: "The user saved the default-editor preference on the n8n Assistant settings page.";
1083
1135
  readonly properties: import("zod/v4").ZodObject<{
1084
1136
  value: import("zod/v4").ZodEnum<{
1085
1137
  assistant: "assistant";
@@ -1117,14 +1169,14 @@ export declare const TELEMETRY_EVENT: {
1117
1169
  };
1118
1170
  readonly USER_CLICKED_AI_ASSISTANT_INPUT_PLUS_BUTTON: {
1119
1171
  readonly name: "User clicked AI Assistant input plus button";
1120
- readonly description: "The user clicked the plus button in the AI Assistant input.";
1172
+ readonly description: "The user clicked the plus button in the n8n Assistant input.";
1121
1173
  readonly properties: import("zod/v4").ZodObject<{}, import("zod/v4/core").$strip>;
1122
1174
  } & import("./define").TelemetryEventInput & {
1123
1175
  readonly getValidationError: (properties: unknown) => string | null;
1124
1176
  };
1125
1177
  readonly TOOLS_LIST_OPENED: {
1126
1178
  readonly name: "Instance AI tools list opened";
1127
- readonly description: "The user opened the AI Assistant tools connection modal.";
1179
+ readonly description: "The user opened the n8n Assistant tools connection modal.";
1128
1180
  readonly properties: import("zod/v4").ZodObject<{
1129
1181
  source: import("zod/v4").ZodEnum<{
1130
1182
  input_menu: "input_menu";
@@ -1136,7 +1188,7 @@ export declare const TELEMETRY_EVENT: {
1136
1188
  };
1137
1189
  readonly MCP_SETTINGS_OPENED: {
1138
1190
  readonly name: "Instance AI mcp settings opened";
1139
- readonly description: "The user opened settings for an MCP connection in the AI Assistant.";
1191
+ readonly description: "The user opened settings for an MCP connection in the n8n Assistant.";
1140
1192
  readonly properties: import("zod/v4").ZodObject<{
1141
1193
  server_slug: import("zod/v4").ZodString;
1142
1194
  source: import("zod/v4").ZodEnum<{
@@ -1227,7 +1279,7 @@ export declare const TELEMETRY_EVENT: {
1227
1279
  };
1228
1280
  readonly BROWSER_USE_DIRECT_CONNECT_REQUESTED: {
1229
1281
  readonly name: "Instance AI Browser Use direct connect requested";
1230
- readonly description: "The AI Assistant requested a direct connection through the Browser Use extension.";
1282
+ readonly description: "The n8n Assistant requested a direct connection through the Browser Use extension.";
1231
1283
  readonly properties: import("zod/v4").ZodObject<{}, import("zod/v4/core").$strip>;
1232
1284
  } & import("./define").TelemetryEventInput & {
1233
1285
  readonly getValidationError: (properties: unknown) => string | null;
@@ -1276,7 +1328,7 @@ export declare const TELEMETRY_EVENT: {
1276
1328
  };
1277
1329
  readonly USER_VIEWED_AI_ASSISTANT_SETUP_PAGE: {
1278
1330
  readonly name: "User viewed AI Assistant setup page";
1279
- readonly description: "The user landed on a self-hosted AI Assistant setup surface: the onboarding takeover on /assistant, or the settings page on /settings/assistant. Carries the configuration snapshot at view time, so joined with \"AI Assistant setup completed\" it measures setup drop-off. Not emitted on cloud or proxy deployments, where setup is managed.";
1331
+ readonly description: "The user landed on a self-hosted n8n Assistant setup surface: the onboarding takeover on /assistant, or the settings page on /settings/assistant. Carries the configuration snapshot at view time, so joined with \"AI Assistant setup completed\" it measures setup drop-off. Not emitted on cloud or proxy deployments, where setup is managed.";
1280
1332
  readonly properties: import("zod/v4").ZodObject<{
1281
1333
  model_source: import("zod/v4").ZodEnum<{
1282
1334
  env: "env";
@@ -1314,7 +1366,7 @@ export declare const TELEMETRY_EVENT: {
1314
1366
  };
1315
1367
  readonly USER_CONFIGURED_AI_ASSISTANT_MODEL: {
1316
1368
  readonly name: "User configured AI Assistant model";
1317
- readonly description: "An admin saved an AI Assistant model connection (PUT /instance-ai/settings), covering the first connect, later changes, and same-provider key rotations: first connects are rows where previous_provider is absent. The event marks a saved configuration, not a verified one — the setup wizard verifies before saving, but a direct API save can skip verification. Env-var model config never emits this; it is visible on \"Instance started\" and on the snapshot events instead.";
1369
+ readonly description: "An admin saved an n8n Assistant model connection (PUT /instance-ai/settings), covering the first connect, later changes, and same-provider key rotations: first connects are rows where previous_provider is absent. The event marks a saved configuration, not a verified one — the setup wizard verifies before saving, but a direct API save can skip verification. Env-var model config never emits this; it is visible on \"Instance started\" and on the snapshot events instead.";
1318
1370
  readonly properties: import("zod/v4").ZodObject<{
1319
1371
  provider: import("zod/v4").ZodString;
1320
1372
  model: import("zod/v4").ZodString;
@@ -1326,7 +1378,7 @@ export declare const TELEMETRY_EVENT: {
1326
1378
  };
1327
1379
  readonly USER_CONFIGURED_AI_ASSISTANT_SANDBOX: {
1328
1380
  readonly name: "User configured AI Assistant sandbox";
1329
- readonly description: "An admin saved an AI Assistant sandbox connection (PUT /instance-ai/settings), covering the first connect, later changes, and same-provider key rotations: first connects are rows where previous_sandbox_type is absent. Env-var sandbox config never emits this.";
1381
+ readonly description: "An admin saved an n8n Assistant sandbox connection (PUT /instance-ai/settings), covering the first connect, later changes, and same-provider key rotations: first connects are rows where previous_sandbox_type is absent. Env-var sandbox config never emits this.";
1330
1382
  readonly properties: import("zod/v4").ZodObject<{
1331
1383
  sandbox_type: import("zod/v4").ZodEnum<{
1332
1384
  daytona: "daytona";
@@ -1342,7 +1394,7 @@ export declare const TELEMETRY_EVENT: {
1342
1394
  };
1343
1395
  readonly USER_CONFIGURED_AI_ASSISTANT_WEB_SEARCH: {
1344
1396
  readonly name: "User configured AI Assistant web search";
1345
- readonly description: "An admin saved an AI Assistant web search connection (PUT /instance-ai/settings), covering the first connect, later changes, and same-provider key rotations: first connects are rows where previous_provider is absent. Explicitly disabling web search does not emit this; that decision is visible as web_search_source \"disabled\" on the snapshot events.";
1397
+ readonly description: "An admin saved an n8n Assistant web search connection (PUT /instance-ai/settings), covering the first connect, later changes, and same-provider key rotations: first connects are rows where previous_provider is absent. Explicitly disabling web search does not emit this; that decision is visible as web_search_source \"disabled\" on the snapshot events.";
1346
1398
  readonly properties: import("zod/v4").ZodObject<{
1347
1399
  provider: import("zod/v4").ZodEnum<{
1348
1400
  brave: "brave";
@@ -1383,7 +1435,7 @@ export declare const TELEMETRY_EVENT: {
1383
1435
  };
1384
1436
  readonly AI_ASSISTANT_SETUP_COMPLETED: {
1385
1437
  readonly name: "AI Assistant setup completed";
1386
- readonly description: "A self-hosted instance reached a complete AI Assistant setup for the first time: model configured, sandbox configured, and web search decided (configured or explicitly disabled) — the same predicate that unlocks the assistant UI. Fires at most once per instance, guarded by a persisted settings key, regardless of how the last piece was set: emitted from the settings save path, with a boot-time check so an env-var finish is also counted. No \"User\" prefix because the last piece can land via env vars with no acting user.";
1438
+ readonly description: "A self-hosted instance reached a complete n8n Assistant setup for the first time: model configured, sandbox configured, and web search decided (configured or explicitly disabled) — the same predicate that unlocks the assistant UI. Fires at most once per instance, guarded by a persisted settings key, regardless of how the last piece was set: emitted from the settings save path, with a boot-time check so an env-var finish is also counted. No \"User\" prefix because the last piece can land via env vars with no acting user.";
1387
1439
  readonly properties: import("zod/v4").ZodObject<{
1388
1440
  model_source: import("zod/v4").ZodEnum<{
1389
1441
  env: "env";
@@ -1474,6 +1526,81 @@ export declare const TELEMETRY_EVENT: {
1474
1526
  };
1475
1527
  };
1476
1528
  MCP: {
1529
+ readonly MCP_NUDGE_VIEWED: {
1530
+ readonly name: "User viewed MCP nudge";
1531
+ readonly description: "The MCP nudge modal opened after the user exported a workflow as JSON, imported one from a file or URL, copied nodes, or pasted workflow JSON onto the canvas. Fires only when the modal opens, so a trigger that the flag, the two-impression cap, an opt-out, or instance-level MCP access suppresses emits nothing. Each fire consumes one impression.";
1532
+ readonly properties: import("zod/v4").ZodObject<{
1533
+ surface: import("zod/v4").ZodEnum<{
1534
+ copy: "copy";
1535
+ export: "export";
1536
+ import_file: "import_file";
1537
+ import_url: "import_url";
1538
+ paste: "paste";
1539
+ }>;
1540
+ }, import("zod/v4/core").$strip>;
1541
+ } & import("./define").TelemetryEventInput & {
1542
+ readonly getValidationError: (properties: unknown) => string | null;
1543
+ };
1544
+ readonly MCP_NUDGE_CONNECT_CLICKED: {
1545
+ readonly name: "User clicked connect in MCP nudge";
1546
+ readonly description: "The user clicked \"Connect n8n\" in the MCP nudge. The app navigates to the MCP settings page and abandons the export or import that opened the nudge. Kept separate from the skip and dismiss events so the connect-to-export click ratio stays computable.";
1547
+ readonly properties: import("zod/v4").ZodObject<{
1548
+ surface: import("zod/v4").ZodEnum<{
1549
+ copy: "copy";
1550
+ export: "export";
1551
+ import_file: "import_file";
1552
+ import_url: "import_url";
1553
+ paste: "paste";
1554
+ }>;
1555
+ }, import("zod/v4/core").$strip>;
1556
+ } & import("./define").TelemetryEventInput & {
1557
+ readonly getValidationError: (properties: unknown) => string | null;
1558
+ };
1559
+ readonly MCP_NUDGE_SKIPPED: {
1560
+ readonly name: "User skipped MCP nudge";
1561
+ readonly description: "The user clicked \"Skip\" in the MCP nudge. The export or import that opened the nudge completes unchanged. Closing with × or Escape is \"User dismissed MCP nudge\" instead.";
1562
+ readonly properties: import("zod/v4").ZodObject<{
1563
+ surface: import("zod/v4").ZodEnum<{
1564
+ copy: "copy";
1565
+ export: "export";
1566
+ import_file: "import_file";
1567
+ import_url: "import_url";
1568
+ paste: "paste";
1569
+ }>;
1570
+ }, import("zod/v4/core").$strip>;
1571
+ } & import("./define").TelemetryEventInput & {
1572
+ readonly getValidationError: (properties: unknown) => string | null;
1573
+ };
1574
+ readonly MCP_NUDGE_DISMISSED: {
1575
+ readonly name: "User dismissed MCP nudge";
1576
+ readonly description: "The user closed the MCP nudge with × or Escape without choosing an action. The export or import that opened the nudge completes unchanged.";
1577
+ readonly properties: import("zod/v4").ZodObject<{
1578
+ surface: import("zod/v4").ZodEnum<{
1579
+ copy: "copy";
1580
+ export: "export";
1581
+ import_file: "import_file";
1582
+ import_url: "import_url";
1583
+ paste: "paste";
1584
+ }>;
1585
+ }, import("zod/v4/core").$strip>;
1586
+ } & import("./define").TelemetryEventInput & {
1587
+ readonly getValidationError: (properties: unknown) => string | null;
1588
+ };
1589
+ readonly MCP_NUDGE_OPTED_OUT: {
1590
+ readonly name: "User opted out of MCP nudge";
1591
+ readonly description: "The user checked \"Don't show this again\" in the MCP nudge. Fires when the checkbox is checked, independent of which button later closes the modal. The nudge never shows again for this user.";
1592
+ readonly properties: import("zod/v4").ZodObject<{
1593
+ surface: import("zod/v4").ZodEnum<{
1594
+ copy: "copy";
1595
+ export: "export";
1596
+ import_file: "import_file";
1597
+ import_url: "import_url";
1598
+ paste: "paste";
1599
+ }>;
1600
+ }, import("zod/v4/core").$strip>;
1601
+ } & import("./define").TelemetryEventInput & {
1602
+ readonly getValidationError: (properties: unknown) => string | null;
1603
+ };
1477
1604
  readonly USER_GAVE_MCP_ACCESS_TO_WORKFLOW: {
1478
1605
  readonly name: "User gave MCP access to workflow";
1479
1606
  readonly description: "A workflow was exposed over MCP.";
@@ -1546,6 +1673,98 @@ export declare const TELEMETRY_EVENT: {
1546
1673
  readonly getValidationError: (properties: unknown) => string | null;
1547
1674
  };
1548
1675
  };
1676
+ NODE_TYPE_POLICIES: {
1677
+ readonly USER_SAVED_NODE_TYPE_POLICY: {
1678
+ readonly name: "User saved node type policy";
1679
+ readonly description: "A node type availability policy was saved for one scope through the composed write that the policy UI uses. One event per save, covering both the scope default action and its rules. Rule-level edits through the advanced document and attachment APIs report separately. The type counts and list report what this scope decides on its own, so at project scope they are the project layer before it composes with the instance policy.";
1680
+ readonly properties: import("zod/v4").ZodObject<{
1681
+ rule_count: import("zod/v4").ZodNumber;
1682
+ allow_rule_count: import("zod/v4").ZodNumber;
1683
+ deny_rule_count: import("zod/v4").ZodNumber;
1684
+ delegate_rule_count: import("zod/v4").ZodNumber;
1685
+ user_id: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
1686
+ source: import("zod/v4").ZodEnum<{
1687
+ environment: "environment";
1688
+ user: "user";
1689
+ }>;
1690
+ scope: import("zod/v4").ZodEnum<{
1691
+ instance: "instance";
1692
+ project: "project";
1693
+ }>;
1694
+ project_id: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
1695
+ default_action: import("zod/v4").ZodEnum<{
1696
+ allow: "allow";
1697
+ delegate: "delegate";
1698
+ deny: "deny";
1699
+ }>;
1700
+ previous_default_action: import("zod/v4").ZodNullable<import("zod/v4").ZodEnum<{
1701
+ allow: "allow";
1702
+ delegate: "delegate";
1703
+ deny: "deny";
1704
+ }>>;
1705
+ is_first_write: import("zod/v4").ZodBoolean;
1706
+ name_selector_count: import("zod/v4").ZodNumber;
1707
+ package_selector_count: import("zod/v4").ZodNumber;
1708
+ evaluated_type_count: import("zod/v4").ZodNumber;
1709
+ blocked_type_count: import("zod/v4").ZodNumber;
1710
+ allowed_type_count: import("zod/v4").ZodNumber;
1711
+ delegated_type_count: import("zod/v4").ZodNumber;
1712
+ blocked_types: import("zod/v4").ZodArray<import("zod/v4").ZodString>;
1713
+ allowed_types: import("zod/v4").ZodArray<import("zod/v4").ZodString>;
1714
+ previous_rule_count: import("zod/v4").ZodNullable<import("zod/v4").ZodNumber>;
1715
+ shadow_warning_count: import("zod/v4").ZodNumber;
1716
+ version: import("zod/v4").ZodNumber;
1717
+ }, import("zod/v4/core").$strip>;
1718
+ } & import("./define").TelemetryEventInput & {
1719
+ readonly getValidationError: (properties: unknown) => string | null;
1720
+ };
1721
+ readonly USER_UPDATED_NODE_TYPE_POLICY_DOCUMENT: {
1722
+ readonly name: "User updated node type policy document";
1723
+ readonly description: "A policy document was created, edited, or deleted through the advanced instance-only document API. The composed save that the policy UI uses reports as \"User saved node type policy\" instead. Rule counts describe the document after the operation, so a delete reports 0 and carries the deleted size in previous_rule_count.";
1724
+ readonly properties: import("zod/v4").ZodObject<{
1725
+ rule_count: import("zod/v4").ZodNumber;
1726
+ allow_rule_count: import("zod/v4").ZodNumber;
1727
+ deny_rule_count: import("zod/v4").ZodNumber;
1728
+ delegate_rule_count: import("zod/v4").ZodNumber;
1729
+ user_id: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
1730
+ source: import("zod/v4").ZodEnum<{
1731
+ environment: "environment";
1732
+ user: "user";
1733
+ }>;
1734
+ operation: import("zod/v4").ZodEnum<{
1735
+ created: "created";
1736
+ deleted: "deleted";
1737
+ updated: "updated";
1738
+ }>;
1739
+ policy_id: import("zod/v4").ZodString;
1740
+ previous_rule_count: import("zod/v4").ZodNullable<import("zod/v4").ZodNumber>;
1741
+ }, import("zod/v4/core").$strip>;
1742
+ } & import("./define").TelemetryEventInput & {
1743
+ readonly getValidationError: (properties: unknown) => string | null;
1744
+ };
1745
+ readonly USER_UPDATED_NODE_TYPE_POLICY_ATTACHMENTS: {
1746
+ readonly name: "User updated node type policy attachments";
1747
+ readonly description: "The set of policy documents attached to one scope was replaced through the advanced instance-only attachment API. Reports the resulting set, not the individual add or remove.";
1748
+ readonly properties: import("zod/v4").ZodObject<{
1749
+ user_id: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
1750
+ source: import("zod/v4").ZodEnum<{
1751
+ environment: "environment";
1752
+ user: "user";
1753
+ }>;
1754
+ scope: import("zod/v4").ZodEnum<{
1755
+ instance: "instance";
1756
+ project: "project";
1757
+ }>;
1758
+ project_id: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
1759
+ scope_id: import("zod/v4").ZodString;
1760
+ attachment_count: import("zod/v4").ZodNumber;
1761
+ floor_attachment_count: import("zod/v4").ZodNumber;
1762
+ previous_attachment_count: import("zod/v4").ZodNumber;
1763
+ }, import("zod/v4/core").$strip>;
1764
+ } & import("./define").TelemetryEventInput & {
1765
+ readonly getValidationError: (properties: unknown) => string | null;
1766
+ };
1767
+ };
1549
1768
  WORKFLOW: {
1550
1769
  readonly MULTIPLE_NODES_SELECTED: {
1551
1770
  readonly name: "User selected multiple nodes";
@@ -2,10 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TELEMETRY_EVENT = void 0;
4
4
  const agents_1 = require("./events/agents");
5
+ const context_1 = require("./events/context");
5
6
  const credentials_1 = require("./events/credentials");
6
7
  const instance_1 = require("./events/instance");
7
8
  const instance_ai_1 = require("./events/instance-ai");
8
9
  const mcp_1 = require("./events/mcp");
10
+ const node_type_policies_1 = require("./events/node-type-policies");
9
11
  const platform_1 = require("./events/platform");
10
12
  const workflow_1 = require("./events/workflow");
11
13
  const workflow_reviews_1 = require("./events/workflow-reviews");
@@ -13,9 +15,11 @@ exports.TELEMETRY_EVENT = {
13
15
  PLATFORM: platform_1.PLATFORM_TELEMETRY,
14
16
  AGENTS: agents_1.AGENTS_TELEMETRY,
15
17
  CREDENTIALS: credentials_1.CREDENTIALS_TELEMETRY,
18
+ CONTEXT: context_1.CONTEXT_TELEMETRY,
16
19
  INSTANCE: instance_1.INSTANCE_TELEMETRY,
17
20
  INSTANCE_AI: instance_ai_1.INSTANCE_AI_TELEMETRY,
18
21
  MCP: mcp_1.MCP_TELEMETRY,
22
+ NODE_TYPE_POLICIES: node_type_policies_1.NODE_TYPE_POLICIES_TELEMETRY,
19
23
  WORKFLOW: workflow_1.WORKFLOW_TELEMETRY,
20
24
  WORKFLOW_REVIEWS: workflow_reviews_1.WORKFLOW_REVIEWS_TELEMETRY,
21
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry-events.js","sourceRoot":"","sources":["../src/telemetry-events.ts"],"names":[],"mappings":";;;AACA,4CAAmD;AACnD,sDAA6D;AAC7D,gDAAuD;AACvD,sDAA6D;AAC7D,sCAA6C;AAC7C,gDAAuD;AACvD,gDAAuD;AACvD,gEAAuE;AAE1D,QAAA,eAAe,GAAG;IAC9B,QAAQ,EAAE,6BAAkB;IAC5B,MAAM,EAAE,yBAAgB;IACxB,WAAW,EAAE,mCAAqB;IAClC,QAAQ,EAAE,6BAAkB;IAC5B,WAAW,EAAE,mCAAqB;IAClC,GAAG,EAAE,mBAAa;IAClB,QAAQ,EAAE,6BAAkB;IAC5B,gBAAgB,EAAE,6CAA0B;CACX,CAAC"}
1
+ {"version":3,"file":"telemetry-events.js","sourceRoot":"","sources":["../src/telemetry-events.ts"],"names":[],"mappings":";;;AACA,4CAAmD;AACnD,8CAAqD;AACrD,sDAA6D;AAC7D,gDAAuD;AACvD,sDAA6D;AAC7D,sCAA6C;AAC7C,oEAA2E;AAC3E,gDAAuD;AACvD,gDAAuD;AACvD,gEAAuE;AAE1D,QAAA,eAAe,GAAG;IAC9B,QAAQ,EAAE,6BAAkB;IAC5B,MAAM,EAAE,yBAAgB;IACxB,WAAW,EAAE,mCAAqB;IAClC,OAAO,EAAE,2BAAiB;IAC1B,QAAQ,EAAE,6BAAkB;IAC5B,WAAW,EAAE,mCAAqB;IAClC,GAAG,EAAE,mBAAa;IAClB,kBAAkB,EAAE,iDAA4B;IAChD,QAAQ,EAAE,6BAAkB;IAC5B,gBAAgB,EAAE,6CAA0B;CACX,CAAC"}
package/package.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "@n8n/telemetry",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "src/index.ts",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
8
  "dist/**/*",
9
- "LICENSE_EE.md",
10
- "LICENSE.md"
9
+ "LICENSE.md",
10
+ "LICENSE_EE.md"
11
11
  ],
12
12
  "dependencies": {
13
- "@n8n/utils": "1.47.0",
13
+ "@n8n/utils": "1.48.0",
14
14
  "zod": "3.25.76"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@n8n/eslint-config": "0.0.1",
18
- "@n8n/typescript-config": "1.11.0",
19
- "@n8n/vitest-config": "1.21.0",
18
+ "@n8n/typescript-config": "1.12.0",
19
+ "@n8n/vitest-config": "1.22.0",
20
20
  "@types/node": "24.10.1",
21
21
  "@vitest/coverage-v8": "4.1.9",
22
22
  "eslint": "9.29.0",