@camstack/addon-auth 1.2.150 → 1.2.151

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.
@@ -32,7 +32,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
32
32
  }) : target, mod));
33
33
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
34
  require("node:crypto");
35
- //#region ../types/dist/event-category-BvOFi6PY.mjs
35
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
36
36
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
37
37
  EventCategory["SystemBoot"] = "system.boot";
38
38
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -111,9 +111,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
111
111
  /**
112
112
  * The node's one-shot runner boot check (D877): planned runners against the
113
113
  * process service, `degraded` when any is failed, refused or missing. The
114
- * alert centre turns it into one alert and a direct critical push.
114
+ * alert centre turns it into one critical alert.
115
115
  */
116
116
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
117
+ /**
118
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
119
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
120
+ * centre sends no notification of its own: Notification Center turns this
121
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
122
+ * system-event kinds, and reconciles from the alerts store because a bus
123
+ * event may be dropped (D8, D11).
124
+ */
125
+ EventCategory["AlertEpisode"] = "alert.episode";
117
126
  EventCategory["AddonError"] = "addon.error";
118
127
  EventCategory["AddonPageReady"] = "addon.page-ready";
119
128
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5571,7 +5580,7 @@ var ZodIssueCode = {
5571
5580
  var ZodFirstPartyTypeKind;
5572
5581
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5573
5582
  //#endregion
5574
- //#region ../types/dist/sleep-BegKjwUu.mjs
5583
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5575
5584
  /**
5576
5585
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5577
5586
  * window to float samples (D455).
@@ -13878,7 +13887,14 @@ var AlertSeveritySchema = _enum([
13878
13887
  ]);
13879
13888
  var AlertActionSchema = object({
13880
13889
  label: string(),
13881
- href: string().optional()
13890
+ href: string().optional(),
13891
+ /**
13892
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13893
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13894
+ * start) — the browser must leave the SPA with a full navigation, because
13895
+ * the SPA has no such route and would bounce to the home page.
13896
+ */
13897
+ navigation: _enum(["app", "server"]).optional()
13882
13898
  });
13883
13899
  var AlertStatusSchema = _enum([
13884
13900
  "active",
@@ -42293,6 +42309,9 @@ var NcSystemEventKindSchema = _enum([
42293
42309
  "server-updated",
42294
42310
  "export-completed",
42295
42311
  "backup-completed",
42312
+ "alert-critical",
42313
+ "alert-error",
42314
+ "alert-critical-resolved",
42296
42315
  "camera-online",
42297
42316
  "camera-offline",
42298
42317
  "camera-disabled",
@@ -51341,7 +51360,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51341
51360
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51342
51361
  kind: "mutation",
51343
51362
  auth: "admin"
51344
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51363
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51364
+ clear: boolean(),
51365
+ repointLocationId: string().optional()
51366
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51345
51367
  kind: "mutation",
51346
51368
  auth: "admin"
51347
51369
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -54811,6 +54833,11 @@ object({
54811
54833
  *
54812
54834
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
54813
54835
  * provider refreshes the slice on an interval and eagerly after commands.
54836
+ *
54837
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
54838
+ * nullable: `null` means "not known right now" (the appliance has not said,
54839
+ * the link is down, or the description does not carry it) and is never
54840
+ * rendered or exported as `false` / `0`. `availability` says why.
54814
54841
  */
54815
54842
  var DishwasherStateSchema = _enum([
54816
54843
  "idle",
@@ -54820,112 +54847,227 @@ var DishwasherStateSchema = _enum([
54820
54847
  "error",
54821
54848
  "unavailable"
54822
54849
  ]);
54850
+ /**
54851
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
54852
+ * view for compact surfaces; this is what the appliance said.
54853
+ */
54854
+ var DishwasherOperationStateSchema = _enum([
54855
+ "Inactive",
54856
+ "Ready",
54857
+ "DelayedStart",
54858
+ "Run",
54859
+ "Pause",
54860
+ "ActionRequired",
54861
+ "Finished",
54862
+ "Error",
54863
+ "Aborting"
54864
+ ]);
54865
+ /**
54866
+ * Why fields may be `null`:
54867
+ * - `available` — the link is up and the description is loaded;
54868
+ * - `offline` — the local link is down (values are unknown, not last-known);
54869
+ * - `description-missing` — the link is up but the appliance's description could not
54870
+ * be loaded, so its values cannot be decoded.
54871
+ */
54872
+ var DishwasherAvailabilitySchema = _enum([
54873
+ "available",
54874
+ "offline",
54875
+ "description-missing"
54876
+ ]);
54823
54877
  var DishwasherConsumableLevelSchema = _enum([
54824
54878
  "ok",
54825
54879
  "low",
54826
54880
  "empty"
54827
54881
  ]);
54828
54882
  object({
54883
+ availability: DishwasherAvailabilitySchema,
54884
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
54829
54885
  state: DishwasherStateSchema,
54830
- /** Active program id/name, or null when none selected / unknown. */
54886
+ /** The appliance's operation state as reported; null when not known. */
54887
+ operationState: DishwasherOperationStateSchema.nullable(),
54888
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
54831
54889
  program: string().nullable(),
54832
- /** Program tokens the hardware accepts — drives the UI selector. */
54890
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
54891
+ selectedProgram: string().nullable(),
54892
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
54833
54893
  availablePrograms: array(string()),
54834
- /** Minutes remaining on the active cycle, or null when not running. */
54835
- remainingMinutes: number().int().nonnegative().nullable(),
54894
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
54895
+ remainingSeconds: number().int().nonnegative().nullable(),
54896
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
54897
+ delayedStartSeconds: number().int().nonnegative().nullable(),
54836
54898
  /** Cycle completion 0..100, or null when not applicable. */
54837
54899
  progressPercent: number().min(0).max(100).nullable(),
54838
- /** True when the door is reported open. */
54839
- doorOpen: boolean(),
54840
- /** True when remote start is allowed (door closed, power on, etc.). */
54841
- remoteStartAllowed: boolean(),
54842
- /** Main power / switched-on state. */
54843
- powerOn: boolean(),
54900
+ /** True when the door is reported open; null when the door state is not known. */
54901
+ doorOpen: boolean().nullable(),
54902
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
54903
+ doorLocked: boolean().nullable(),
54904
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
54905
+ remoteStartAllowed: boolean().nullable(),
54906
+ /** True when the appliance accepts remote control now; null when not known. */
54907
+ remoteControlActive: boolean().nullable(),
54908
+ /** True while somebody operates the appliance at its panel; null when not reported. */
54909
+ localControlActive: boolean().nullable(),
54910
+ /** Main power / switched-on state; null when not known. */
54911
+ powerOn: boolean().nullable(),
54912
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
54913
+ powerState: string().nullable(),
54844
54914
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
54845
54915
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54846
- halfLoad: boolean(),
54847
- hygienePlus: boolean(),
54916
+ /** Option states: null when the appliance does not expose the option or has not said. */
54917
+ halfLoad: boolean().nullable(),
54918
+ hygienePlus: boolean().nullable(),
54848
54919
  /** Extra dry option when the appliance exposes it. */
54849
- extraDry: boolean(),
54920
+ extraDry: boolean().nullable(),
54850
54921
  /** Intensive zone (lower basket) when the appliance exposes it. */
54851
- intensiveZone: boolean(),
54922
+ intensiveZone: boolean().nullable(),
54852
54923
  /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
54853
- varioSpeedPlus: boolean(),
54854
- /** Child lock (controls disabled on the appliance). */
54855
- childLock: boolean(),
54924
+ varioSpeedPlus: boolean().nullable(),
54925
+ /** Child lock (controls disabled on the appliance); null when not known. */
54926
+ childLock: boolean().nullable(),
54927
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
54928
+ activeEvents: array(string()),
54929
+ /** Numeric error code when the appliance reports one; null otherwise. */
54856
54930
  errorCode: number().nullable(),
54931
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
54857
54932
  errorLabel: string().nullable(),
54933
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
54858
54934
  lastFetchedAt: number()
54859
54935
  });
54860
- DeviceType.Dishwasher, method(object({ deviceId: number().int().nonnegative() }), _void(), {
54936
+ var DeviceIdSchema = number().int().nonnegative();
54937
+ /** A value a program option or setting can take. */
54938
+ var DishwasherValueSchema = union([
54939
+ boolean(),
54940
+ string(),
54941
+ number()
54942
+ ]);
54943
+ var DishwasherAccessSchema = _enum([
54944
+ "none",
54945
+ "read",
54946
+ "readWrite",
54947
+ "writeOnly",
54948
+ "readStatic"
54949
+ ]);
54950
+ /**
54951
+ * One option or setting the appliance declares, with the constraints its description
54952
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
54953
+ */
54954
+ var DishwasherOptionDescriptorSchema = object({
54955
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
54956
+ key: string(),
54957
+ /** Last segment of the key, for display. */
54958
+ name: string(),
54959
+ type: _enum([
54960
+ "boolean",
54961
+ "number",
54962
+ "enum",
54963
+ "string"
54964
+ ]),
54965
+ access: DishwasherAccessSchema,
54966
+ /** The appliance reports this entity as currently available. */
54967
+ available: boolean(),
54968
+ /** Unit the description declares for a number; null when it declares none. */
54969
+ unit: string().nullable(),
54970
+ min: number().nullable(),
54971
+ max: number().nullable(),
54972
+ step: number().nullable(),
54973
+ /** Allowed members of an enum; null for other types. */
54974
+ enumValues: array(string()).nullable(),
54975
+ defaultValue: DishwasherValueSchema.nullable()
54976
+ });
54977
+ var DishwasherProgramSchema = object({
54978
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
54979
+ key: string(),
54980
+ name: string(),
54981
+ /** The appliance currently offers this program. */
54982
+ available: boolean(),
54983
+ /** The options this program lists, with the program-level access / availability / default. */
54984
+ options: array(DishwasherOptionDescriptorSchema)
54985
+ });
54986
+ var DishwasherOptionsSchema = object({
54987
+ availability: DishwasherAvailabilitySchema,
54988
+ /** What the appliance can be told to do, from the commands its description declares. */
54989
+ supportsStart: boolean(),
54990
+ supportsPause: boolean(),
54991
+ supportsResume: boolean(),
54992
+ supportsStop: boolean(),
54993
+ supportsPower: boolean(),
54994
+ /** Every program the description lists, with its options. */
54995
+ programs: array(DishwasherProgramSchema),
54996
+ /** Every option and setting entity the description lists (programs reference these by key). */
54997
+ options: array(DishwasherOptionDescriptorSchema)
54998
+ });
54999
+ DeviceType.Dishwasher, method(object({
55000
+ deviceId: DeviceIdSchema,
55001
+ program: string().min(1).optional(),
55002
+ options: record(string(), DishwasherValueSchema).optional()
55003
+ }), _void(), {
54861
55004
  kind: "mutation",
54862
55005
  auth: "protected"
54863
- }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
55006
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54864
55007
  kind: "mutation",
54865
55008
  auth: "protected"
54866
- }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
55009
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
55010
+ kind: "mutation",
55011
+ auth: "protected"
55012
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54867
55013
  kind: "mutation",
54868
55014
  auth: "protected"
54869
55015
  }), method(object({
54870
- deviceId: number().int().nonnegative(),
55016
+ deviceId: DeviceIdSchema,
54871
55017
  program: string().min(1)
54872
55018
  }), _void(), {
54873
55019
  kind: "mutation",
54874
55020
  auth: "protected"
54875
55021
  }), method(object({
54876
- deviceId: number().int().nonnegative(),
55022
+ deviceId: DeviceIdSchema,
54877
55023
  on: boolean()
54878
55024
  }), _void(), {
54879
55025
  kind: "mutation",
54880
55026
  auth: "protected"
54881
55027
  }), method(object({
54882
- deviceId: number().int().nonnegative(),
55028
+ deviceId: DeviceIdSchema,
54883
55029
  on: boolean()
54884
55030
  }), _void(), {
54885
55031
  kind: "mutation",
54886
55032
  auth: "protected"
54887
55033
  }), method(object({
54888
- deviceId: number().int().nonnegative(),
55034
+ deviceId: DeviceIdSchema,
54889
55035
  on: boolean()
54890
55036
  }), _void(), {
54891
55037
  kind: "mutation",
54892
55038
  auth: "protected"
54893
55039
  }), method(object({
54894
- deviceId: number().int().nonnegative(),
55040
+ deviceId: DeviceIdSchema,
54895
55041
  on: boolean()
54896
55042
  }), _void(), {
54897
55043
  kind: "mutation",
54898
55044
  auth: "protected"
54899
55045
  }), method(object({
54900
- deviceId: number().int().nonnegative(),
55046
+ deviceId: DeviceIdSchema,
54901
55047
  on: boolean()
54902
55048
  }), _void(), {
54903
55049
  kind: "mutation",
54904
55050
  auth: "protected"
54905
55051
  }), method(object({
54906
- deviceId: number().int().nonnegative(),
55052
+ deviceId: DeviceIdSchema,
54907
55053
  on: boolean()
54908
55054
  }), _void(), {
54909
55055
  kind: "mutation",
54910
55056
  auth: "protected"
54911
55057
  }), method(object({
54912
- deviceId: number().int().nonnegative(),
55058
+ deviceId: DeviceIdSchema,
54913
55059
  on: boolean()
54914
55060
  }), _void(), {
54915
55061
  kind: "mutation",
54916
55062
  auth: "protected"
54917
55063
  }), method(object({
54918
- deviceId: number().int().nonnegative(),
55064
+ deviceId: DeviceIdSchema,
54919
55065
  key: string().min(1),
54920
- value: union([
54921
- boolean(),
54922
- string(),
54923
- number()
54924
- ])
55066
+ value: DishwasherValueSchema
54925
55067
  }), _void(), {
54926
55068
  kind: "mutation",
54927
55069
  auth: "protected"
54928
- });
55070
+ }), method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" });
54929
55071
  object({
54930
55072
  /** Ms epoch of the last press. null = never observed since this provider started. */
54931
55073
  lastPressedAt: number().nullable(),
@@ -64985,6 +65127,12 @@ Object.freeze({
64985
65127
  addonId: null,
64986
65128
  access: "view"
64987
65129
  },
65130
+ "dishwasher.getOptions": {
65131
+ capName: "dishwasher",
65132
+ capScope: "device",
65133
+ addonId: null,
65134
+ access: "view"
65135
+ },
64988
65136
  "dishwasher.getStatus": {
64989
65137
  capName: "dishwasher",
64990
65138
  capScope: "device",
@@ -64997,6 +65145,12 @@ Object.freeze({
64997
65145
  addonId: null,
64998
65146
  access: "create"
64999
65147
  },
65148
+ "dishwasher.resume": {
65149
+ capName: "dishwasher",
65150
+ capScope: "device",
65151
+ addonId: null,
65152
+ access: "create"
65153
+ },
65000
65154
  "dishwasher.setChildLock": {
65001
65155
  capName: "dishwasher",
65002
65156
  capScope: "device",
@@ -69497,6 +69651,12 @@ Object.freeze({
69497
69651
  addonId: null,
69498
69652
  access: "view"
69499
69653
  },
69654
+ "storageMigration.moverClearance": {
69655
+ capName: "storage-migration",
69656
+ capScope: "system",
69657
+ addonId: null,
69658
+ access: "view"
69659
+ },
69500
69660
  "storageMigration.movers": {
69501
69661
  capName: "storage-migration",
69502
69662
  capScope: "system",
@@ -71690,6 +71850,11 @@ Object.freeze({
71690
71850
  form: "single",
71691
71851
  optional: false
71692
71852
  }],
71853
+ "dishwasher.getOptions": [{
71854
+ name: "deviceId",
71855
+ form: "single",
71856
+ optional: false
71857
+ }],
71693
71858
  "dishwasher.getStatus": [{
71694
71859
  name: "deviceId",
71695
71860
  form: "single",
@@ -71700,6 +71865,11 @@ Object.freeze({
71700
71865
  form: "single",
71701
71866
  optional: false
71702
71867
  }],
71868
+ "dishwasher.resume": [{
71869
+ name: "deviceId",
71870
+ form: "single",
71871
+ optional: false
71872
+ }],
71703
71873
  "dishwasher.setChildLock": [{
71704
71874
  name: "deviceId",
71705
71875
  form: "single",
@@ -73786,6 +73956,9 @@ new Map(Object.entries({
73786
73956
  "wrapper-update-available": "system",
73787
73957
  "backup-completed": "system",
73788
73958
  "export-completed": "system",
73959
+ "alert-critical": "system",
73960
+ "alert-error": "system",
73961
+ "alert-critical-resolved": "system",
73789
73962
  "storage-location-low": "system",
73790
73963
  "storage-location-critical": "system",
73791
73964
  "storage-location-ok": "system",
@@ -73910,6 +74083,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73910
74083
  "storage-location-ok"
73911
74084
  ]
73912
74085
  },
74086
+ {
74087
+ id: "alerts",
74088
+ family: "system",
74089
+ label: "Alerts",
74090
+ kinds: [
74091
+ "alert-critical",
74092
+ "alert-error",
74093
+ "alert-critical-resolved"
74094
+ ]
74095
+ },
73913
74096
  {
73914
74097
  id: "alarm",
73915
74098
  family: "alarm",
@@ -73954,6 +74137,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
73954
74137
  return [[descriptor.kind, field]];
73955
74138
  })));
73956
74139
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
74140
+ object({
74141
+ phase: _enum(["raised", "resolved"]),
74142
+ episodeId: string().min(1),
74143
+ alertId: string().min(1),
74144
+ severity: AlertSeveritySchema,
74145
+ category: string(),
74146
+ title: string(),
74147
+ message: string(),
74148
+ sourceType: string().optional(),
74149
+ sourceId: string().optional(),
74150
+ nodeId: string().optional(),
74151
+ /** The alert's own action link (where the operator acts on it), when it has one. */
74152
+ actionUrl: string().optional(),
74153
+ at: number()
74154
+ });
73957
74155
  var RULE_BODY_ONLY = ["body"];
73958
74156
  var RULE_TEXT = ["title", "body"];
73959
74157
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -73963,6 +74161,11 @@ var TANK = [
73963
74161
  "device-tank-full",
73964
74162
  "device-tank-normal"
73965
74163
  ];
74164
+ var ALERT_EPISODE = [
74165
+ "alert-critical",
74166
+ "alert-error",
74167
+ "alert-critical-resolved"
74168
+ ];
73966
74169
  var UPDATES = [
73967
74170
  "addon-update-available",
73968
74171
  "server-update-available",
@@ -74155,14 +74358,14 @@ var STATE_SUMMARY_VARS = [
74155
74358
  ([...RULE_TEXT], [...CONSUMABLE]),
74156
74359
  ([...RULE_TEXT], [...TANK]),
74157
74360
  [...RULE_TEXT],
74158
- ([...RULE_TEXT], [...UPDATES]),
74159
- ([...RULE_TEXT], [...UPDATES]),
74160
- [...RULE_TEXT],
74361
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
74362
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
74161
74363
  [...RULE_TEXT],
74162
74364
  [...RULE_TEXT],
74163
74365
  [...RULE_TEXT],
74164
74366
  [...RULE_TEXT],
74165
74367
  [...RULE_TEXT],
74368
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74166
74369
  [...RULE_TEXT],
74167
74370
  [...RULE_TEXT],
74168
74371
  [...RULE_TEXT],
@@ -74180,7 +74383,11 @@ var STATE_SUMMARY_VARS = [
74180
74383
  [...RULE_TEXT],
74181
74384
  [...RULE_TEXT],
74182
74385
  [...RULE_TEXT],
74183
- [...RULE_TEXT],
74386
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74387
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74388
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74389
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74390
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74184
74391
  [...RULE_TEXT],
74185
74392
  [...RULE_TEXT],
74186
74393
  [...RULE_TEXT],