@rxova/journey-core 0.7.0 → 1.0.0-rc.2

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 (99) hide show
  1. package/README.md +236 -105
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.cjs.map +4 -4
  4. package/dist/index.d.cts +5 -4
  5. package/dist/index.d.ts +5 -4
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +4 -4
  8. package/dist/journey-builder/index.d.cts +5 -0
  9. package/dist/journey-builder/index.d.ts +5 -0
  10. package/dist/journey-builder/types.d.cts +126 -0
  11. package/dist/journey-builder/types.d.ts +126 -0
  12. package/dist/journey-machine/async-state.d.cts +12 -0
  13. package/dist/journey-machine/async-state.d.ts +12 -0
  14. package/dist/journey-machine/computed.d.cts +2 -0
  15. package/dist/journey-machine/computed.d.ts +2 -0
  16. package/dist/journey-machine/controls.d.cts +17 -0
  17. package/dist/journey-machine/controls.d.ts +17 -0
  18. package/dist/journey-machine/helpers.d.cts +52 -0
  19. package/dist/journey-machine/helpers.d.ts +52 -0
  20. package/dist/journey-machine/index.d.cts +3 -0
  21. package/dist/journey-machine/index.d.ts +3 -0
  22. package/dist/journey-machine/navigation.d.cts +32 -0
  23. package/dist/journey-machine/navigation.d.ts +32 -0
  24. package/dist/journey-machine/plugin-controller.d.cts +15 -0
  25. package/dist/journey-machine/plugin-controller.d.ts +15 -0
  26. package/dist/journey-machine/resolve-journey-definition.d.cts +2 -0
  27. package/dist/journey-machine/resolve-journey-definition.d.ts +2 -0
  28. package/dist/journey-machine/runtime.d.cts +33 -0
  29. package/dist/journey-machine/runtime.d.ts +33 -0
  30. package/dist/journey-machine/send.d.cts +9 -0
  31. package/dist/journey-machine/send.d.ts +9 -0
  32. package/dist/plugins/analytics/index.cjs +2 -0
  33. package/dist/plugins/analytics/index.cjs.map +7 -0
  34. package/dist/plugins/analytics/index.d.cts +25 -0
  35. package/dist/plugins/analytics/index.d.ts +25 -0
  36. package/dist/plugins/analytics/index.js +2 -0
  37. package/dist/plugins/analytics/index.js.map +7 -0
  38. package/dist/plugins/autosave/index.cjs +2 -0
  39. package/dist/plugins/autosave/index.cjs.map +7 -0
  40. package/dist/plugins/autosave/index.d.cts +17 -0
  41. package/dist/plugins/autosave/index.d.ts +17 -0
  42. package/dist/plugins/autosave/index.js +2 -0
  43. package/dist/plugins/autosave/index.js.map +7 -0
  44. package/dist/plugins/diagnostics/diagnostics.d.cts +3 -0
  45. package/dist/plugins/diagnostics/diagnostics.d.ts +3 -0
  46. package/dist/plugins/diagnostics/index.cjs +2 -0
  47. package/dist/plugins/diagnostics/index.cjs.map +7 -0
  48. package/dist/plugins/diagnostics/index.d.cts +15 -0
  49. package/dist/plugins/diagnostics/index.d.ts +15 -0
  50. package/dist/plugins/diagnostics/index.js +2 -0
  51. package/dist/plugins/diagnostics/index.js.map +7 -0
  52. package/dist/plugins/execution-paths/execution-paths.d.cts +6 -0
  53. package/dist/plugins/execution-paths/execution-paths.d.ts +6 -0
  54. package/dist/plugins/execution-paths/index.cjs +2 -0
  55. package/dist/plugins/execution-paths/index.cjs.map +7 -0
  56. package/dist/plugins/execution-paths/index.d.cts +18 -0
  57. package/dist/plugins/execution-paths/index.d.ts +18 -0
  58. package/dist/plugins/execution-paths/index.js +2 -0
  59. package/dist/plugins/execution-paths/index.js.map +7 -0
  60. package/dist/plugins/persistence/controller.d.cts +17 -0
  61. package/dist/plugins/persistence/controller.d.ts +17 -0
  62. package/dist/plugins/persistence/index.cjs +2 -0
  63. package/dist/plugins/persistence/index.cjs.map +7 -0
  64. package/dist/plugins/persistence/index.d.cts +12 -0
  65. package/dist/plugins/persistence/index.d.ts +12 -0
  66. package/dist/plugins/persistence/index.js +2 -0
  67. package/dist/plugins/persistence/index.js.map +7 -0
  68. package/dist/plugins/replay/index.cjs +2 -0
  69. package/dist/plugins/replay/index.cjs.map +7 -0
  70. package/dist/plugins/replay/index.d.cts +27 -0
  71. package/dist/plugins/replay/index.d.ts +27 -0
  72. package/dist/plugins/replay/index.js +2 -0
  73. package/dist/plugins/replay/index.js.map +7 -0
  74. package/dist/types/analytics.types.d.cts +33 -0
  75. package/dist/types/analytics.types.d.ts +33 -0
  76. package/dist/types/autosave.types.d.cts +23 -0
  77. package/dist/types/autosave.types.d.ts +23 -0
  78. package/dist/types/diagnostics.types.d.cts +38 -0
  79. package/dist/types/diagnostics.types.d.ts +38 -0
  80. package/dist/types/index.d.cts +9 -0
  81. package/dist/types/index.d.ts +9 -4
  82. package/dist/types/journey.types.d.cts +191 -0
  83. package/dist/types/journey.types.d.ts +140 -167
  84. package/dist/types/machine.types.d.cts +104 -0
  85. package/dist/types/machine.types.d.ts +104 -0
  86. package/dist/types/observation.types.d.cts +83 -0
  87. package/dist/types/observation.types.d.ts +83 -0
  88. package/dist/types/persistence.types.d.cts +34 -0
  89. package/dist/types/persistence.types.d.ts +13 -20
  90. package/dist/types/replay.types.d.cts +35 -0
  91. package/dist/types/replay.types.d.ts +35 -0
  92. package/dist/types/transitions.types.d.cts +122 -0
  93. package/dist/types/transitions.types.d.ts +100 -57
  94. package/package.json +92 -2
  95. package/dist/machine-helpers.d.ts +0 -23
  96. package/dist/machine.d.ts +0 -11
  97. package/dist/persistence.d.ts +0 -17
  98. package/dist/transitions.d.ts +0 -62
  99. package/dist/types.d.ts +0 -1
@@ -0,0 +1,104 @@
1
+ import type { JourneyComputed, JourneyDefaultEventType, JourneyDefinition, JourneyEqualityFn, JourneyJsonObject, JourneyPayloadFor, JourneyResolvedDefinition, JourneySelector, JourneySendEvent, JourneySendResult, JourneySnapshot, JourneyTerminal } from "./journey.types";
2
+ import type { JourneyCompleteObservationEvent, JourneyLifecycleErrorPhase, JourneyObservationEvent, JourneyResetObservationEvent, JourneyStartObservationEvent, JourneyTerminateObservationEvent } from "./observation.types";
3
+ /** Reasons why a machine snapshot changed. */
4
+ export type JourneyMachineSnapshotReason = "async" | "context" | "navigation" | "reset" | "start" | "transition";
5
+ export type JourneyLifecycleErrorContext<TStepId extends string> = {
6
+ phase: JourneyLifecycleErrorPhase;
7
+ from: TStepId;
8
+ to: TStepId | JourneyTerminal;
9
+ eventType: string;
10
+ transitionId: string | null;
11
+ label?: string;
12
+ };
13
+ /** Setup context passed to journey plugins when a machine is created. */
14
+ export type JourneyMachinePluginSetupContext<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>> = {
15
+ journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
16
+ resolvedJourney: JourneyResolvedDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
17
+ options: {
18
+ requireExplicitCompletion: boolean;
19
+ defaultTimeoutMs: number | undefined;
20
+ };
21
+ buildInitialSnapshot: () => JourneySnapshot<TContext, TStepId>;
22
+ };
23
+ /** Snapshot-change details exposed to plugins. */
24
+ export type JourneyMachinePluginSnapshotChange<TContext extends JourneyJsonObject, TStepId extends string> = {
25
+ previousSnapshot: JourneySnapshot<TContext, TStepId>;
26
+ snapshot: JourneySnapshot<TContext, TStepId>;
27
+ reason: JourneyMachineSnapshotReason;
28
+ };
29
+ /** Hooks returned from a journey plugin setup call. */
30
+ export type JourneyMachinePluginHooks<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>, TExtension extends object = Record<never, never>> = {
31
+ hydrateSnapshot?: (snapshot: JourneySnapshot<TContext, TStepId>) => JourneySnapshot<TContext, TStepId>;
32
+ onSnapshotChange?: (change: JourneyMachinePluginSnapshotChange<TContext, TStepId>) => void;
33
+ augmentMachine?: (context: {
34
+ machine: JourneyMachine<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
35
+ journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
36
+ resolvedJourney: JourneyResolvedDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
37
+ }) => TExtension;
38
+ dispose?: () => void;
39
+ };
40
+ /** Plugin contract for extending journey machines without bloating the base entrypoint. */
41
+ export type JourneyMachinePlugin = {
42
+ name: string;
43
+ __extension__?: object;
44
+ setup: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>>(context: JourneyMachinePluginSetupContext<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyMachinePluginHooks<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
45
+ };
46
+ type JourneyMachinePluginHooksFor<TPlugin, TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = TPlugin extends {
47
+ setup: (context: JourneyMachinePluginSetupContext<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => infer THooks;
48
+ } ? THooks : never;
49
+ type JourneyMachinePluginExtensionFor<TPlugin, TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = TPlugin extends {
50
+ __extension__?: infer TExtension;
51
+ } ? Exclude<TExtension, undefined> extends never ? JourneyMachinePluginHooksFor<TPlugin, TContext, TStepId, TEventMap, TStepMeta, THandlers> extends {
52
+ augmentMachine?: (...args: never[]) => infer THookExtension;
53
+ } ? THookExtension : Record<never, never> : Exclude<TExtension, undefined> : JourneyMachinePluginHooksFor<TPlugin, TContext, TStepId, TEventMap, TStepMeta, THandlers> extends {
54
+ augmentMachine?: (...args: never[]) => infer THookExtension;
55
+ } ? THookExtension : Record<never, never>;
56
+ type UnionToIntersection<TValue> = [TValue] extends [never] ? Record<never, never> : (TValue extends unknown ? (value: TValue) => void : never) extends (value: infer TIntersection) => void ? TIntersection : Record<never, never>;
57
+ type JourneyTypeParam<TValue> = TValue extends unknown ? unknown : never;
58
+ /** Optional machine features and plugin registration. */
59
+ export type JourneyMachineOptions<TPlugins extends readonly JourneyMachinePlugin[] = readonly JourneyMachinePlugin[]> = {
60
+ requireExplicitCompletion?: boolean;
61
+ defaultTimeoutMs?: number;
62
+ plugins?: TPlugins;
63
+ /**
64
+ * Called when a snapshot or event listener throws an unhandled error.
65
+ * Listener failures are isolated so they never block other listeners or
66
+ * the machine itself — use this hook to report them to your error
67
+ * monitoring system (e.g. Sentry, Datadog).
68
+ *
69
+ * @param error - The thrown value (may not be an `Error` instance).
70
+ * @param context - `"snapshot"` for `subscribe()` listeners,
71
+ * `"event"` for `subscribeEvent()` listeners.
72
+ */
73
+ onListenerError?: (error: unknown, context: "snapshot" | "event") => void;
74
+ onLifecycleError?: (error: unknown, context: JourneyLifecycleErrorContext<string>) => void;
75
+ };
76
+ type JourneyPayloadForDefaultEvent<TEventMap extends Record<string, unknown>, TDefaultEvent extends JourneyDefaultEventType> = JourneyPayloadFor<TEventMap, TDefaultEvent>;
77
+ /** Runtime machine API for reading snapshots, sending events, and controlling flow. */
78
+ export type JourneyMachine<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>> = JourneyTypeParam<THandlers> & {
79
+ getSnapshot: () => JourneySnapshot<TContext, TStepId>;
80
+ getStepMeta: (stepId: TStepId) => TStepMeta | undefined;
81
+ getComputed: () => JourneyComputed<TStepId>;
82
+ startJourney: () => Promise<JourneySnapshot<TContext, TStepId>>;
83
+ send: (event: JourneySendEvent<TStepId, TEventMap>) => Promise<JourneySendResult<TContext, TStepId>>;
84
+ goToNextStep: () => Promise<JourneySendResult<TContext, TStepId>>;
85
+ goToStepById: (stepId: TStepId) => Promise<JourneySendResult<TContext, TStepId>>;
86
+ terminateJourney: (payload?: JourneyPayloadForDefaultEvent<TEventMap, "terminateJourney">) => Promise<JourneySendResult<TContext, TStepId>>;
87
+ completeJourney: (payload?: JourneyPayloadForDefaultEvent<TEventMap, "completeJourney">) => Promise<JourneySendResult<TContext, TStepId>>;
88
+ goToPreviousStep: (steps?: number) => Promise<JourneySendResult<TContext, TStepId>>;
89
+ goToLastVisitedStep: () => Promise<JourneySendResult<TContext, TStepId>>;
90
+ updateContext: (updater: (context: TContext) => TContext) => Promise<JourneySnapshot<TContext, TStepId>>;
91
+ clearStepError: (stepId?: TStepId) => Promise<JourneySnapshot<TContext, TStepId>>;
92
+ resetJourney: () => Promise<JourneySnapshot<TContext, TStepId>>;
93
+ dispose: () => void;
94
+ subscribe: (listener: () => void) => () => void;
95
+ subscribeSelector: <TSelected>(selector: JourneySelector<TContext, TStepId, TSelected>, listener: (next: TSelected, previous: TSelected) => void, equalityFn?: JourneyEqualityFn<TSelected>) => () => void;
96
+ subscribeEvent: (listener: (event: JourneyObservationEvent<TStepId, TEventMap>) => void) => () => void;
97
+ subscribeStart: (listener: (event: JourneyStartObservationEvent<TStepId>) => void) => () => void;
98
+ subscribeReset: (listener: (event: JourneyResetObservationEvent<TStepId>) => void) => () => void;
99
+ subscribeComplete: (listener: (event: JourneyCompleteObservationEvent<TStepId>) => void) => () => void;
100
+ subscribeTerminate: (listener: (event: JourneyTerminateObservationEvent<TStepId>) => void) => () => void;
101
+ };
102
+ /** Journey machine API augmented by plugin-provided extensions. */
103
+ export type JourneyMachineWithPlugins<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>, TPlugins extends readonly JourneyMachinePlugin[] = readonly JourneyMachinePlugin[]> = JourneyMachine<TContext, TStepId, TEventMap, TStepMeta, THandlers> & UnionToIntersection<JourneyMachinePluginExtensionFor<TPlugins[number], TContext, TStepId, TEventMap, TStepMeta, THandlers>>;
104
+ export {};
@@ -0,0 +1,104 @@
1
+ import type { JourneyComputed, JourneyDefaultEventType, JourneyDefinition, JourneyEqualityFn, JourneyJsonObject, JourneyPayloadFor, JourneyResolvedDefinition, JourneySelector, JourneySendEvent, JourneySendResult, JourneySnapshot, JourneyTerminal } from "./journey.types";
2
+ import type { JourneyCompleteObservationEvent, JourneyLifecycleErrorPhase, JourneyObservationEvent, JourneyResetObservationEvent, JourneyStartObservationEvent, JourneyTerminateObservationEvent } from "./observation.types";
3
+ /** Reasons why a machine snapshot changed. */
4
+ export type JourneyMachineSnapshotReason = "async" | "context" | "navigation" | "reset" | "start" | "transition";
5
+ export type JourneyLifecycleErrorContext<TStepId extends string> = {
6
+ phase: JourneyLifecycleErrorPhase;
7
+ from: TStepId;
8
+ to: TStepId | JourneyTerminal;
9
+ eventType: string;
10
+ transitionId: string | null;
11
+ label?: string;
12
+ };
13
+ /** Setup context passed to journey plugins when a machine is created. */
14
+ export type JourneyMachinePluginSetupContext<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>> = {
15
+ journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
16
+ resolvedJourney: JourneyResolvedDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
17
+ options: {
18
+ requireExplicitCompletion: boolean;
19
+ defaultTimeoutMs: number | undefined;
20
+ };
21
+ buildInitialSnapshot: () => JourneySnapshot<TContext, TStepId>;
22
+ };
23
+ /** Snapshot-change details exposed to plugins. */
24
+ export type JourneyMachinePluginSnapshotChange<TContext extends JourneyJsonObject, TStepId extends string> = {
25
+ previousSnapshot: JourneySnapshot<TContext, TStepId>;
26
+ snapshot: JourneySnapshot<TContext, TStepId>;
27
+ reason: JourneyMachineSnapshotReason;
28
+ };
29
+ /** Hooks returned from a journey plugin setup call. */
30
+ export type JourneyMachinePluginHooks<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>, TExtension extends object = Record<never, never>> = {
31
+ hydrateSnapshot?: (snapshot: JourneySnapshot<TContext, TStepId>) => JourneySnapshot<TContext, TStepId>;
32
+ onSnapshotChange?: (change: JourneyMachinePluginSnapshotChange<TContext, TStepId>) => void;
33
+ augmentMachine?: (context: {
34
+ machine: JourneyMachine<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
35
+ journey: JourneyDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
36
+ resolvedJourney: JourneyResolvedDefinition<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
37
+ }) => TExtension;
38
+ dispose?: () => void;
39
+ };
40
+ /** Plugin contract for extending journey machines without bloating the base entrypoint. */
41
+ export type JourneyMachinePlugin = {
42
+ name: string;
43
+ __extension__?: object;
44
+ setup: <TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>>(context: JourneyMachinePluginSetupContext<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => JourneyMachinePluginHooks<TContext, TStepId, TEventMap, TStepMeta, THandlers>;
45
+ };
46
+ type JourneyMachinePluginHooksFor<TPlugin, TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = TPlugin extends {
47
+ setup: (context: JourneyMachinePluginSetupContext<TContext, TStepId, TEventMap, TStepMeta, THandlers>) => infer THooks;
48
+ } ? THooks : never;
49
+ type JourneyMachinePluginExtensionFor<TPlugin, TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown>, TStepMeta, THandlers extends Record<string, unknown>> = TPlugin extends {
50
+ __extension__?: infer TExtension;
51
+ } ? Exclude<TExtension, undefined> extends never ? JourneyMachinePluginHooksFor<TPlugin, TContext, TStepId, TEventMap, TStepMeta, THandlers> extends {
52
+ augmentMachine?: (...args: never[]) => infer THookExtension;
53
+ } ? THookExtension : Record<never, never> : Exclude<TExtension, undefined> : JourneyMachinePluginHooksFor<TPlugin, TContext, TStepId, TEventMap, TStepMeta, THandlers> extends {
54
+ augmentMachine?: (...args: never[]) => infer THookExtension;
55
+ } ? THookExtension : Record<never, never>;
56
+ type UnionToIntersection<TValue> = [TValue] extends [never] ? Record<never, never> : (TValue extends unknown ? (value: TValue) => void : never) extends (value: infer TIntersection) => void ? TIntersection : Record<never, never>;
57
+ type JourneyTypeParam<TValue> = TValue extends unknown ? unknown : never;
58
+ /** Optional machine features and plugin registration. */
59
+ export type JourneyMachineOptions<TPlugins extends readonly JourneyMachinePlugin[] = readonly JourneyMachinePlugin[]> = {
60
+ requireExplicitCompletion?: boolean;
61
+ defaultTimeoutMs?: number;
62
+ plugins?: TPlugins;
63
+ /**
64
+ * Called when a snapshot or event listener throws an unhandled error.
65
+ * Listener failures are isolated so they never block other listeners or
66
+ * the machine itself — use this hook to report them to your error
67
+ * monitoring system (e.g. Sentry, Datadog).
68
+ *
69
+ * @param error - The thrown value (may not be an `Error` instance).
70
+ * @param context - `"snapshot"` for `subscribe()` listeners,
71
+ * `"event"` for `subscribeEvent()` listeners.
72
+ */
73
+ onListenerError?: (error: unknown, context: "snapshot" | "event") => void;
74
+ onLifecycleError?: (error: unknown, context: JourneyLifecycleErrorContext<string>) => void;
75
+ };
76
+ type JourneyPayloadForDefaultEvent<TEventMap extends Record<string, unknown>, TDefaultEvent extends JourneyDefaultEventType> = JourneyPayloadFor<TEventMap, TDefaultEvent>;
77
+ /** Runtime machine API for reading snapshots, sending events, and controlling flow. */
78
+ export type JourneyMachine<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>> = JourneyTypeParam<THandlers> & {
79
+ getSnapshot: () => JourneySnapshot<TContext, TStepId>;
80
+ getStepMeta: (stepId: TStepId) => TStepMeta | undefined;
81
+ getComputed: () => JourneyComputed<TStepId>;
82
+ startJourney: () => Promise<JourneySnapshot<TContext, TStepId>>;
83
+ send: (event: JourneySendEvent<TStepId, TEventMap>) => Promise<JourneySendResult<TContext, TStepId>>;
84
+ goToNextStep: () => Promise<JourneySendResult<TContext, TStepId>>;
85
+ goToStepById: (stepId: TStepId) => Promise<JourneySendResult<TContext, TStepId>>;
86
+ terminateJourney: (payload?: JourneyPayloadForDefaultEvent<TEventMap, "terminateJourney">) => Promise<JourneySendResult<TContext, TStepId>>;
87
+ completeJourney: (payload?: JourneyPayloadForDefaultEvent<TEventMap, "completeJourney">) => Promise<JourneySendResult<TContext, TStepId>>;
88
+ goToPreviousStep: (steps?: number) => Promise<JourneySendResult<TContext, TStepId>>;
89
+ goToLastVisitedStep: () => Promise<JourneySendResult<TContext, TStepId>>;
90
+ updateContext: (updater: (context: TContext) => TContext) => Promise<JourneySnapshot<TContext, TStepId>>;
91
+ clearStepError: (stepId?: TStepId) => Promise<JourneySnapshot<TContext, TStepId>>;
92
+ resetJourney: () => Promise<JourneySnapshot<TContext, TStepId>>;
93
+ dispose: () => void;
94
+ subscribe: (listener: () => void) => () => void;
95
+ subscribeSelector: <TSelected>(selector: JourneySelector<TContext, TStepId, TSelected>, listener: (next: TSelected, previous: TSelected) => void, equalityFn?: JourneyEqualityFn<TSelected>) => () => void;
96
+ subscribeEvent: (listener: (event: JourneyObservationEvent<TStepId, TEventMap>) => void) => () => void;
97
+ subscribeStart: (listener: (event: JourneyStartObservationEvent<TStepId>) => void) => () => void;
98
+ subscribeReset: (listener: (event: JourneyResetObservationEvent<TStepId>) => void) => () => void;
99
+ subscribeComplete: (listener: (event: JourneyCompleteObservationEvent<TStepId>) => void) => () => void;
100
+ subscribeTerminate: (listener: (event: JourneyTerminateObservationEvent<TStepId>) => void) => () => void;
101
+ };
102
+ /** Journey machine API augmented by plugin-provided extensions. */
103
+ export type JourneyMachineWithPlugins<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>, TStepMeta = unknown, THandlers extends Record<string, unknown> = Record<never, never>, TPlugins extends readonly JourneyMachinePlugin[] = readonly JourneyMachinePlugin[]> = JourneyMachine<TContext, TStepId, TEventMap, TStepMeta, THandlers> & UnionToIntersection<JourneyMachinePluginExtensionFor<TPlugins[number], TContext, TStepId, TEventMap, TStepMeta, THandlers>>;
104
+ export {};
@@ -0,0 +1,83 @@
1
+ import type { JourneySendEvent, JourneyTerminal } from "./journey.types";
2
+ export type JourneyLifecycleErrorPhase = "step.onLeave" | "transition.onLeave" | "step.onEnter" | "transition.onEnter";
3
+ export type JourneyStartObservationEvent<TStepId extends string> = {
4
+ type: "journey.start";
5
+ stepId: TStepId;
6
+ timestamp: number;
7
+ };
8
+ export type JourneyResetObservationEvent<TStepId extends string> = {
9
+ type: "journey.reset";
10
+ stepId: TStepId;
11
+ timestamp: number;
12
+ };
13
+ export type JourneyTransitionStartObservationEvent<TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = {
14
+ type: "transition.start";
15
+ from: TStepId;
16
+ event: JourneySendEvent<TStepId, TEventMap>;
17
+ timestamp: number;
18
+ };
19
+ export type JourneyTransitionSuccessObservationEvent<TStepId extends string> = {
20
+ type: "transition.success";
21
+ from: TStepId;
22
+ to: TStepId | JourneyTerminal;
23
+ eventType: string;
24
+ transitionId: string | null;
25
+ label?: string;
26
+ timestamp: number;
27
+ };
28
+ export type JourneyTransitionErrorObservationEvent<TStepId extends string> = {
29
+ type: "transition.error";
30
+ from: TStepId;
31
+ eventType: string;
32
+ transitionId: string | null;
33
+ label?: string;
34
+ error: unknown;
35
+ timestamp: number;
36
+ };
37
+ export type JourneyLifecycleErrorObservationEvent<TStepId extends string> = {
38
+ type: "lifecycle.error";
39
+ phase: JourneyLifecycleErrorPhase;
40
+ from: TStepId;
41
+ to: TStepId | JourneyTerminal;
42
+ eventType: string;
43
+ transitionId: string | null;
44
+ label?: string;
45
+ error: unknown;
46
+ timestamp: number;
47
+ };
48
+ export type JourneyStepExitObservationEvent<TStepId extends string> = {
49
+ type: "step.exit";
50
+ stepId: TStepId;
51
+ timestamp: number;
52
+ };
53
+ export type JourneyStepEnterObservationEvent<TStepId extends string> = {
54
+ type: "step.enter";
55
+ stepId: TStepId;
56
+ timestamp: number;
57
+ };
58
+ export type JourneyCompleteObservationEvent<TStepId extends string> = {
59
+ type: "journey.completed";
60
+ stepId: TStepId;
61
+ timestamp: number;
62
+ };
63
+ export type JourneyTerminateObservationEvent<TStepId extends string> = {
64
+ type: "journey.terminated";
65
+ stepId: TStepId;
66
+ timestamp: number;
67
+ };
68
+ export type JourneyPreviousNavigationObservationEvent<TStepId extends string> = {
69
+ type: "navigation.previous";
70
+ from: TStepId;
71
+ to: TStepId;
72
+ requestedSteps: number;
73
+ appliedSteps: number;
74
+ timestamp: number;
75
+ };
76
+ export type JourneyLastVisitedNavigationObservationEvent<TStepId extends string> = {
77
+ type: "navigation.lastVisited";
78
+ from: TStepId;
79
+ to: TStepId;
80
+ timestamp: number;
81
+ };
82
+ /** Observation events emitted by the machine lifecycle/event stream. */
83
+ export type JourneyObservationEvent<TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = JourneyStartObservationEvent<TStepId> | JourneyResetObservationEvent<TStepId> | JourneyTransitionStartObservationEvent<TStepId, TEventMap> | JourneyTransitionSuccessObservationEvent<TStepId> | JourneyTransitionErrorObservationEvent<TStepId> | JourneyLifecycleErrorObservationEvent<TStepId> | JourneyStepExitObservationEvent<TStepId> | JourneyStepEnterObservationEvent<TStepId> | JourneyCompleteObservationEvent<TStepId> | JourneyTerminateObservationEvent<TStepId> | JourneyPreviousNavigationObservationEvent<TStepId> | JourneyLastVisitedNavigationObservationEvent<TStepId>;
@@ -0,0 +1,83 @@
1
+ import type { JourneySendEvent, JourneyTerminal } from "./journey.types";
2
+ export type JourneyLifecycleErrorPhase = "step.onLeave" | "transition.onLeave" | "step.onEnter" | "transition.onEnter";
3
+ export type JourneyStartObservationEvent<TStepId extends string> = {
4
+ type: "journey.start";
5
+ stepId: TStepId;
6
+ timestamp: number;
7
+ };
8
+ export type JourneyResetObservationEvent<TStepId extends string> = {
9
+ type: "journey.reset";
10
+ stepId: TStepId;
11
+ timestamp: number;
12
+ };
13
+ export type JourneyTransitionStartObservationEvent<TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = {
14
+ type: "transition.start";
15
+ from: TStepId;
16
+ event: JourneySendEvent<TStepId, TEventMap>;
17
+ timestamp: number;
18
+ };
19
+ export type JourneyTransitionSuccessObservationEvent<TStepId extends string> = {
20
+ type: "transition.success";
21
+ from: TStepId;
22
+ to: TStepId | JourneyTerminal;
23
+ eventType: string;
24
+ transitionId: string | null;
25
+ label?: string;
26
+ timestamp: number;
27
+ };
28
+ export type JourneyTransitionErrorObservationEvent<TStepId extends string> = {
29
+ type: "transition.error";
30
+ from: TStepId;
31
+ eventType: string;
32
+ transitionId: string | null;
33
+ label?: string;
34
+ error: unknown;
35
+ timestamp: number;
36
+ };
37
+ export type JourneyLifecycleErrorObservationEvent<TStepId extends string> = {
38
+ type: "lifecycle.error";
39
+ phase: JourneyLifecycleErrorPhase;
40
+ from: TStepId;
41
+ to: TStepId | JourneyTerminal;
42
+ eventType: string;
43
+ transitionId: string | null;
44
+ label?: string;
45
+ error: unknown;
46
+ timestamp: number;
47
+ };
48
+ export type JourneyStepExitObservationEvent<TStepId extends string> = {
49
+ type: "step.exit";
50
+ stepId: TStepId;
51
+ timestamp: number;
52
+ };
53
+ export type JourneyStepEnterObservationEvent<TStepId extends string> = {
54
+ type: "step.enter";
55
+ stepId: TStepId;
56
+ timestamp: number;
57
+ };
58
+ export type JourneyCompleteObservationEvent<TStepId extends string> = {
59
+ type: "journey.completed";
60
+ stepId: TStepId;
61
+ timestamp: number;
62
+ };
63
+ export type JourneyTerminateObservationEvent<TStepId extends string> = {
64
+ type: "journey.terminated";
65
+ stepId: TStepId;
66
+ timestamp: number;
67
+ };
68
+ export type JourneyPreviousNavigationObservationEvent<TStepId extends string> = {
69
+ type: "navigation.previous";
70
+ from: TStepId;
71
+ to: TStepId;
72
+ requestedSteps: number;
73
+ appliedSteps: number;
74
+ timestamp: number;
75
+ };
76
+ export type JourneyLastVisitedNavigationObservationEvent<TStepId extends string> = {
77
+ type: "navigation.lastVisited";
78
+ from: TStepId;
79
+ to: TStepId;
80
+ timestamp: number;
81
+ };
82
+ /** Observation events emitted by the machine lifecycle/event stream. */
83
+ export type JourneyObservationEvent<TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = JourneyStartObservationEvent<TStepId> | JourneyResetObservationEvent<TStepId> | JourneyTransitionStartObservationEvent<TStepId, TEventMap> | JourneyTransitionSuccessObservationEvent<TStepId> | JourneyTransitionErrorObservationEvent<TStepId> | JourneyLifecycleErrorObservationEvent<TStepId> | JourneyStepExitObservationEvent<TStepId> | JourneyStepEnterObservationEvent<TStepId> | JourneyCompleteObservationEvent<TStepId> | JourneyTerminateObservationEvent<TStepId> | JourneyPreviousNavigationObservationEvent<TStepId> | JourneyLastVisitedNavigationObservationEvent<TStepId>;
@@ -0,0 +1,34 @@
1
+ import type { JourneyJsonObject, JourneySnapshotStateBase } from "./journey.types";
2
+ export type JourneyPersistedState<TContext extends JourneyJsonObject, TStepId extends string> = {
3
+ version: number;
4
+ snapshot: JourneySnapshotStateBase<TContext, TStepId>;
5
+ };
6
+ export type JourneyStorage = {
7
+ getItem: (key: string) => string | null;
8
+ setItem: (key: string, value: string) => void;
9
+ removeItem: (key: string) => void;
10
+ };
11
+ export type JourneyPersistenceOptions<TContext extends JourneyJsonObject, TStepId extends string> = {
12
+ key: string;
13
+ storage?: JourneyStorage;
14
+ version?: number;
15
+ clearOnReset?: boolean;
16
+ allowList?: readonly string[];
17
+ blockList?: readonly string[];
18
+ serialize?: (value: JourneyPersistedState<TContext, TStepId>) => string;
19
+ deserialize?: (value: string) => unknown;
20
+ migrate?: (value: unknown, persistedVersion: number) => JourneySnapshotStateBase<TContext, TStepId>;
21
+ onError?: (error: unknown) => void;
22
+ };
23
+ export type ResolvedPersistence<TContext extends JourneyJsonObject, TStepId extends string> = {
24
+ key: string;
25
+ storage: JourneyStorage;
26
+ version: number;
27
+ clearOnReset: boolean;
28
+ allowList?: readonly string[];
29
+ blockList: readonly string[];
30
+ serialize: (value: JourneyPersistedState<TContext, TStepId>) => string;
31
+ deserialize: (value: string) => unknown;
32
+ migrate?: (value: unknown, persistedVersion: number) => JourneySnapshotStateBase<TContext, TStepId>;
33
+ onError?: (error: unknown) => void;
34
+ };
@@ -1,41 +1,34 @@
1
- import type { JourneyStatus } from "./journey.types";
2
- export type JourneyPersistedSnapshot<TContext, TStepId extends string, TStepMeta = unknown> = {
3
- currentStepId: TStepId;
4
- history: {
5
- timeline: readonly TStepId[];
6
- index: number;
7
- };
8
- context: TContext;
9
- status: JourneyStatus;
10
- visited: Record<TStepId, boolean>;
11
- stepMeta: Record<TStepId, TStepMeta>;
12
- };
13
- export type JourneyPersistedState<TContext, TStepId extends string, TStepMeta = unknown> = {
1
+ import type { JourneyJsonObject, JourneySnapshotStateBase } from "./journey.types";
2
+ export type JourneyPersistedState<TContext extends JourneyJsonObject, TStepId extends string> = {
14
3
  version: number;
15
- snapshot: JourneyPersistedSnapshot<TContext, TStepId, TStepMeta>;
4
+ snapshot: JourneySnapshotStateBase<TContext, TStepId>;
16
5
  };
17
6
  export type JourneyStorage = {
18
7
  getItem: (key: string) => string | null;
19
8
  setItem: (key: string, value: string) => void;
20
9
  removeItem: (key: string) => void;
21
10
  };
22
- export type JourneyPersistenceOptions<TContext, TStepId extends string, TStepMeta = unknown> = {
11
+ export type JourneyPersistenceOptions<TContext extends JourneyJsonObject, TStepId extends string> = {
23
12
  key: string;
24
13
  storage?: JourneyStorage;
25
14
  version?: number;
26
15
  clearOnReset?: boolean;
27
- serialize?: (value: JourneyPersistedState<TContext, TStepId, TStepMeta>) => string;
16
+ allowList?: readonly string[];
17
+ blockList?: readonly string[];
18
+ serialize?: (value: JourneyPersistedState<TContext, TStepId>) => string;
28
19
  deserialize?: (value: string) => unknown;
29
- migrate?: (value: unknown, persistedVersion: number) => JourneyPersistedSnapshot<TContext, TStepId, TStepMeta>;
20
+ migrate?: (value: unknown, persistedVersion: number) => JourneySnapshotStateBase<TContext, TStepId>;
30
21
  onError?: (error: unknown) => void;
31
22
  };
32
- export type ResolvedPersistence<TContext, TStepId extends string, TStepMeta> = {
23
+ export type ResolvedPersistence<TContext extends JourneyJsonObject, TStepId extends string> = {
33
24
  key: string;
34
25
  storage: JourneyStorage;
35
26
  version: number;
36
27
  clearOnReset: boolean;
37
- serialize: (value: JourneyPersistedState<TContext, TStepId, TStepMeta>) => string;
28
+ allowList?: readonly string[];
29
+ blockList: readonly string[];
30
+ serialize: (value: JourneyPersistedState<TContext, TStepId>) => string;
38
31
  deserialize: (value: string) => unknown;
39
- migrate?: (value: unknown, persistedVersion: number) => JourneyPersistedSnapshot<TContext, TStepId, TStepMeta>;
32
+ migrate?: (value: unknown, persistedVersion: number) => JourneySnapshotStateBase<TContext, TStepId>;
40
33
  onError?: (error: unknown) => void;
41
34
  };
@@ -0,0 +1,35 @@
1
+ import type { JourneyMachineSnapshotReason } from "./machine.types";
2
+ import type { JourneyJsonObject, JourneySnapshot } from "./journey.types";
3
+ import type { JourneyObservationEvent } from "./observation.types";
4
+ /** Snapshot entry captured by the replay plugin. */
5
+ export type JourneyReplaySnapshotEntry<TContext extends JourneyJsonObject, TStepId extends string> = {
6
+ kind: "snapshot";
7
+ timestamp: number;
8
+ reason: JourneyMachineSnapshotReason;
9
+ snapshot: JourneySnapshot<TContext, TStepId>;
10
+ };
11
+ /** Observation event entry captured by the replay plugin. */
12
+ export type JourneyReplayEventEntry<TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = {
13
+ kind: "event";
14
+ timestamp: number;
15
+ event: JourneyObservationEvent<TStepId, TEventMap>;
16
+ };
17
+ /** Ordered replay entry captured from a live machine session. */
18
+ export type JourneyReplayEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = JourneyReplaySnapshotEntry<TContext, TStepId> | JourneyReplayEventEntry<TStepId, TEventMap>;
19
+ /** Full replay session captured from a journey machine. */
20
+ export type JourneyReplaySession<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = {
21
+ version: 1;
22
+ initialSnapshot: JourneySnapshot<TContext, TStepId> | null;
23
+ entries: JourneyReplayEntry<TContext, TStepId, TEventMap>[];
24
+ truncated: boolean;
25
+ };
26
+ /** Runtime options for the replay plugin. */
27
+ export type JourneyReplayPluginOptions = {
28
+ maxEntries?: number;
29
+ captureEvents?: boolean;
30
+ captureSnapshots?: boolean;
31
+ };
32
+ /** Serialization options for `exportReplaySession()`. */
33
+ export type JourneyReplayExportOptions = {
34
+ pretty?: boolean;
35
+ };
@@ -0,0 +1,35 @@
1
+ import type { JourneyMachineSnapshotReason } from "./machine.types";
2
+ import type { JourneyJsonObject, JourneySnapshot } from "./journey.types";
3
+ import type { JourneyObservationEvent } from "./observation.types";
4
+ /** Snapshot entry captured by the replay plugin. */
5
+ export type JourneyReplaySnapshotEntry<TContext extends JourneyJsonObject, TStepId extends string> = {
6
+ kind: "snapshot";
7
+ timestamp: number;
8
+ reason: JourneyMachineSnapshotReason;
9
+ snapshot: JourneySnapshot<TContext, TStepId>;
10
+ };
11
+ /** Observation event entry captured by the replay plugin. */
12
+ export type JourneyReplayEventEntry<TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = {
13
+ kind: "event";
14
+ timestamp: number;
15
+ event: JourneyObservationEvent<TStepId, TEventMap>;
16
+ };
17
+ /** Ordered replay entry captured from a live machine session. */
18
+ export type JourneyReplayEntry<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = JourneyReplaySnapshotEntry<TContext, TStepId> | JourneyReplayEventEntry<TStepId, TEventMap>;
19
+ /** Full replay session captured from a journey machine. */
20
+ export type JourneyReplaySession<TContext extends JourneyJsonObject, TStepId extends string, TEventMap extends Record<string, unknown> = Record<never, never>> = {
21
+ version: 1;
22
+ initialSnapshot: JourneySnapshot<TContext, TStepId> | null;
23
+ entries: JourneyReplayEntry<TContext, TStepId, TEventMap>[];
24
+ truncated: boolean;
25
+ };
26
+ /** Runtime options for the replay plugin. */
27
+ export type JourneyReplayPluginOptions = {
28
+ maxEntries?: number;
29
+ captureEvents?: boolean;
30
+ captureSnapshots?: boolean;
31
+ };
32
+ /** Serialization options for `exportReplaySession()`. */
33
+ export type JourneyReplayExportOptions = {
34
+ pretty?: boolean;
35
+ };