@prb/effect-xstate 1.0.0-beta.2 → 1.0.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.
- package/CHANGELOG.md +16 -0
- package/README.md +3 -0
- package/dist/machines/tx.d.ts.map +1 -1
- package/dist/machines/tx.js +9 -0
- package/dist/machines/tx.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Common Changelog](https://common-changelog.org/).
|
|
6
|
+
|
|
7
|
+
[1.0.0]: https://github.com/PaulRBerg/prb-effect/releases/tag/%40prb%2Feffect-xstate%401.0.0
|
|
8
|
+
|
|
9
|
+
## [1.0.0] - 2026-02-03
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Add Form machine: `createFormMachine` for validation and processing workflows
|
|
14
|
+
- Add Facilitator machine: `createFacilitatorMachine` for check-then-create patterns
|
|
15
|
+
- Add React hooks: `useFacilitatorWorkflow` for machine state management
|
|
16
|
+
- Add Error utilities for extracting and displaying structured error data
|
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/machines/tx.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/machines/tx.ts"],"names":[],"mappings":"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"}
|
package/dist/machines/tx.js
CHANGED
|
@@ -81,6 +81,15 @@ function createTxMachine({ id, services, getWalletType, isUserRejectedError, isG
|
|
|
81
81
|
},
|
|
82
82
|
}),
|
|
83
83
|
doSignResult: assign({
|
|
84
|
+
hash: ({ event }) => {
|
|
85
|
+
if ("output" in event && event.output && typeof event.output === "object") {
|
|
86
|
+
const output = event.output;
|
|
87
|
+
if ("hash" in output && typeof output.hash === "string") {
|
|
88
|
+
return output.hash;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
},
|
|
84
93
|
signResult: ({ event }) => {
|
|
85
94
|
if ("output" in event) {
|
|
86
95
|
return event.output;
|
package/dist/machines/tx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../src/machines/tx.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\n/**\n * Gas limit overflow information\n */\ntype GasLimitOverflow = {\n /** Block gas limit for the target chain */\n blockGasLimit: bigint;\n /** Effective limit after applying per-tx caps */\n effectiveLimit: bigint;\n /** Estimated gas required for the transaction */\n estimatedGas: bigint;\n /** Reason for overflow: exceeded block limit or per-tx cap */\n reason: \"exceeded\" | \"tx-cap\";\n};\n\n/**\n * Machine context for transaction workflow\n */\ntype TxMachineContext<TPayload, TPreprocess, TSignResult, TResult> = {\n /** Error message from failed operations */\n error: string | null;\n /** Gas limit to use for the transaction */\n gasLimit: bigint | undefined;\n /** Gas limit overflow details when transaction exceeds limits */\n gasLimitOverflow: GasLimitOverflow | null;\n /** Transaction hash after signing */\n hash: string | null;\n /** The transaction payload */\n payload: TPayload | null;\n /** Preprocessed data from validation */\n preprocess: TPreprocess | null;\n /** Sign result (hash for EOA, Safe tx details for Safe) */\n signResult: TSignResult | null;\n /** Final transaction result after confirmation */\n result: TResult | null;\n};\n\n/**\n * Events that can be sent to the transaction machine\n */\ntype TxMachineEvents<TPayload> = { type: \"SUBMIT\"; payload: TPayload } | { type: \"RESET\" };\n\n/**\n * Services configuration for transaction machine.\n *\n * All service functions receive plain values and return Effects with no requirements.\n * If your service needs dependencies, provide them before passing to the machine.\n */\ntype TxMachineServices<TPayload, TPreprocess, TSignResult, TResult> = {\n /** Validates the payload and returns preprocessed data */\n onValidate: (payload: TPayload) => Effect.Effect<TPreprocess, Error>;\n /** Gas check for EOA wallets - returns gas limit or overflow */\n onGasCheck?: (input: {\n payload: TPayload;\n preprocess: TPreprocess;\n }) => Effect.Effect<{ gasLimit: bigint } | { overflow: GasLimitOverflow }, Error>;\n /** Simulation for Safe wallets - may return overflow */\n onSimulate?: (input: {\n payload: TPayload;\n preprocess: TPreprocess;\n }) => Effect.Effect<undefined | { overflow: GasLimitOverflow }, Error>;\n /** Signs the transaction */\n onSign: (input: {\n payload: TPayload;\n preprocess: TPreprocess;\n gasLimit?: bigint;\n }) => Effect.Effect<TSignResult, Error>;\n /** Confirms the transaction and returns final result */\n onConfirm: (input: {\n payload: TPayload;\n signResult: TSignResult;\n }) => Effect.Effect<TResult, Error>;\n};\n\n/**\n * Configuration for creating a transaction machine\n */\ntype TxMachineConfig<TPayload, TPreprocess, TSignResult, TResult> = {\n /** Unique identifier for the machine */\n id: string;\n /** Service implementations */\n services: TxMachineServices<TPayload, TPreprocess, TSignResult, TResult>;\n /** Determines wallet type from payload for branching logic */\n getWalletType: (payload: TPayload) => \"safe\" | \"eoa\";\n /** Optional predicate to detect user rejection errors */\n isUserRejectedError?: (error: unknown) => boolean;\n /** Optional function to extract overflow info from errors */\n isGasLimitOverflowError?: (error: unknown) => GasLimitOverflow | undefined;\n};\n\n/**\n * Creates a transaction workflow state machine with branching paths for Safe vs EOA wallets.\n *\n * Flow:\n * - EOA: initial → validate → gasCheck → signing → pending → success\n * - Safe: initial → validate → simulate → signing → pending → success\n * - Gas overflow: → gasLimitOverflow (terminal, requires RESET)\n *\n * Key features:\n * - Branching based on wallet type (Safe vs EOA)\n * - Gas limit checking with overflow detection\n * - Two-phase execution (sign → confirm)\n * - User rejection handling returns to initial state\n *\n * @example\n * ```ts\n * const machine = createTxMachine({\n * id: \"create-stream\",\n * services: {\n * onValidate: (payload) => Effect.succeed({ validated: true }),\n * onGasCheck: ({ payload, preprocess }) => Effect.succeed({ gasLimit: 100000n }),\n * onSign: ({ payload, preprocess, gasLimit }) => Effect.succeed(\"0x...\"),\n * onConfirm: ({ payload, signResult }) => Effect.succeed({ txHash: \"0x...\" }),\n * },\n * getWalletType: (payload) => payload.isSafe ? \"safe\" : \"eoa\",\n * });\n * ```\n */\nfunction createTxMachine<TPayload, TPreprocess, TSignResult, TResult>({\n id,\n services,\n getWalletType,\n isUserRejectedError,\n isGasLimitOverflowError,\n}: TxMachineConfig<TPayload, TPreprocess, TSignResult, TResult>) {\n return setup({\n actions: {\n doCache: assign({\n error: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.error),\n gasLimit: ({ context, event }) => (event.type === \"SUBMIT\" ? undefined : context.gasLimit),\n gasLimitOverflow: ({ context, event }) =>\n event.type === \"SUBMIT\" ? null : context.gasLimitOverflow,\n hash: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.hash),\n payload: ({ context, event }) =>\n event.type === \"SUBMIT\" ? event.payload : context.payload,\n preprocess: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.preprocess),\n result: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.result),\n signResult: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.signResult),\n }),\n doError: assign({\n error: ({ event }) => {\n if (\"error\" in event && event.error instanceof Error) {\n return event.error.message;\n }\n return \"An unknown error occurred\";\n },\n }),\n doGasLimit: assign({\n gasLimit: ({ event }) => {\n if (\"output\" in event && event.output && typeof event.output === \"object\") {\n const output = event.output as { gasLimit?: bigint };\n if (\"gasLimit\" in output) {\n return output.gasLimit;\n }\n }\n return undefined;\n },\n }),\n doGasLimitOverflow: assign({\n gasLimitOverflow: ({ event }) => {\n if (\"output\" in event && event.output && typeof event.output === \"object\") {\n const output = event.output as { overflow?: GasLimitOverflow };\n if (\"overflow\" in output && output.overflow) {\n return output.overflow;\n }\n }\n return null;\n },\n }),\n doGasLimitOverflowFromError: assign({\n gasLimitOverflow: ({ event }) => {\n if (isGasLimitOverflowError && \"error\" in event) {\n const overflow = isGasLimitOverflowError(event.error);\n if (overflow) {\n return overflow;\n }\n }\n return null;\n },\n }),\n doPreprocess: assign({\n preprocess: ({ event }) => {\n if (\"output\" in event) {\n return event.output as TPreprocess;\n }\n return null;\n },\n }),\n doReset: assign({\n error: () => null,\n gasLimit: () => undefined,\n gasLimitOverflow: () => null,\n hash: () => null,\n payload: () => null,\n preprocess: () => null,\n result: () => null,\n signResult: () => null,\n }),\n doResult: assign({\n result: ({ event }) => {\n if (\"output\" in event) {\n return event.output as TResult;\n }\n return null;\n },\n }),\n doSignResult: assign({\n signResult: ({ event }) => {\n if (\"output\" in event) {\n return event.output as TSignResult;\n }\n return null;\n },\n }),\n },\n actors: {\n doConfirm: fromPromise(\n async ({ input }: { input: { payload: TPayload; signResult: TSignResult } }) =>\n Effect.runPromise(services.onConfirm(input))\n ),\n doGasCheck: fromPromise(\n async ({ input }: { input: { payload: TPayload; preprocess: TPreprocess } }) => {\n if (!services.onGasCheck) {\n return { gasLimit: undefined };\n }\n return await Effect.runPromise(services.onGasCheck(input));\n }\n ),\n doSign: fromPromise(\n async ({\n input,\n }: {\n input: { payload: TPayload; preprocess: TPreprocess; gasLimit?: bigint };\n }) => Effect.runPromise(services.onSign(input))\n ),\n doSimulate: fromPromise(\n async ({ input }: { input: { payload: TPayload; preprocess: TPreprocess } }) => {\n if (!services.onSimulate) {\n return undefined;\n }\n return await Effect.runPromise(services.onSimulate(input));\n }\n ),\n doValidate: fromPromise(async ({ input }: { input: TPayload }) =>\n Effect.runPromise(services.onValidate(input))\n ),\n },\n guards: {\n hasGasLimitOverflow: ({ event }) => {\n if (\"output\" in event && event.output && typeof event.output === \"object\") {\n const output = event.output as { overflow?: GasLimitOverflow };\n return \"overflow\" in output && output.overflow !== undefined;\n }\n return false;\n },\n isEoaWallet: ({ context }) => {\n if (!context.payload) {\n return false;\n }\n return getWalletType(context.payload) === \"eoa\";\n },\n isGasLimitOverflowError: ({ event }) => {\n if (isGasLimitOverflowError && \"error\" in event) {\n return isGasLimitOverflowError(event.error) !== undefined;\n }\n return false;\n },\n isSafeWallet: ({ context }) => {\n if (!context.payload) {\n return false;\n }\n return getWalletType(context.payload) === \"safe\";\n },\n isUserRejectedError: ({ event }) => {\n if (isUserRejectedError && \"error\" in event) {\n return isUserRejectedError(event.error);\n }\n return false;\n },\n },\n types: {\n context: {} as TxMachineContext<TPayload, TPreprocess, TSignResult, TResult>,\n events: {} as TxMachineEvents<TPayload>,\n },\n }).createMachine({\n context: {\n error: null,\n gasLimit: undefined,\n gasLimitOverflow: null,\n hash: null,\n payload: null,\n preprocess: null,\n result: null,\n signResult: null,\n },\n id: `txMachine-${id}`,\n initial: \"initial\",\n states: {\n failure: {\n on: {\n RESET: {\n actions: \"doReset\",\n target: \"initial\",\n },\n SUBMIT: {\n target: \"validate\",\n },\n },\n },\n gasCheck: {\n invoke: {\n id: \"gasCheck\",\n input: ({ context }) => {\n if (context.payload === null) {\n throw new Error(\"Missing payload for gas check\");\n }\n if (context.preprocess === null) {\n throw new Error(\"Missing preprocess data for gas check\");\n }\n return {\n payload: context.payload,\n preprocess: context.preprocess,\n };\n },\n onDone: [\n {\n actions: \"doGasLimitOverflow\",\n guard: \"hasGasLimitOverflow\",\n target: \"gasLimitOverflow\",\n },\n {\n actions: \"doGasLimit\",\n target: \"signing\",\n },\n ],\n onError: isGasLimitOverflowError\n ? [\n {\n actions: \"doGasLimitOverflowFromError\",\n guard: \"isGasLimitOverflowError\",\n target: \"gasLimitOverflow\",\n },\n {\n actions: \"doError\",\n target: \"failure\",\n },\n ]\n : {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doGasCheck\",\n },\n },\n gasLimitOverflow: {\n on: {\n RESET: {\n actions: \"doReset\",\n target: \"initial\",\n },\n },\n },\n initial: {\n on: {\n SUBMIT: {\n target: \"validate\",\n },\n },\n },\n pending: {\n invoke: {\n id: \"confirm\",\n input: ({ context }) => {\n if (context.payload === null) {\n throw new Error(\"Missing payload for confirmation\");\n }\n if (context.signResult === null) {\n throw new Error(\"Missing sign result for confirmation\");\n }\n return {\n payload: context.payload,\n signResult: context.signResult,\n };\n },\n onDone: {\n actions: \"doResult\",\n target: \"success\",\n },\n onError: {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doConfirm\",\n },\n },\n signing: {\n invoke: {\n id: \"sign\",\n input: ({ context }) => {\n if (context.payload === null) {\n throw new Error(\"Missing payload for signing\");\n }\n if (context.preprocess === null) {\n throw new Error(\"Missing preprocess data for signing\");\n }\n return {\n gasLimit: context.gasLimit,\n payload: context.payload,\n preprocess: context.preprocess,\n };\n },\n onDone: {\n actions: \"doSignResult\",\n target: \"pending\",\n },\n onError: isUserRejectedError\n ? [\n {\n actions: \"doReset\",\n guard: \"isUserRejectedError\",\n target: \"initial\",\n },\n {\n actions: \"doError\",\n target: \"failure\",\n },\n ]\n : {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doSign\",\n },\n },\n simulate: {\n invoke: {\n id: \"simulate\",\n input: ({ context }) => {\n if (context.payload === null) {\n throw new Error(\"Missing payload for simulation\");\n }\n if (context.preprocess === null) {\n throw new Error(\"Missing preprocess data for simulation\");\n }\n return {\n payload: context.payload,\n preprocess: context.preprocess,\n };\n },\n onDone: [\n {\n actions: \"doGasLimitOverflow\",\n guard: \"hasGasLimitOverflow\",\n target: \"gasLimitOverflow\",\n },\n {\n target: \"signing\",\n },\n ],\n onError: isGasLimitOverflowError\n ? [\n {\n actions: \"doGasLimitOverflowFromError\",\n guard: \"isGasLimitOverflowError\",\n target: \"gasLimitOverflow\",\n },\n {\n actions: \"doError\",\n target: \"failure\",\n },\n ]\n : {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doSimulate\",\n },\n },\n success: {\n on: {\n RESET: {\n actions: \"doReset\",\n target: \"initial\",\n },\n SUBMIT: {\n target: \"validate\",\n },\n },\n },\n validate: {\n entry: \"doCache\",\n // @ts-expect-error - xState v5 type inference limitation with generic functions\n invoke: {\n id: \"validate\",\n input: ({ event }) => {\n if (event.type !== \"SUBMIT\") {\n throw new Error(\"Invalid event type for validation\");\n }\n return event.payload;\n },\n onDone: [\n {\n actions: \"doPreprocess\",\n guard: \"isSafeWallet\",\n target: \"simulate\",\n },\n {\n actions: \"doPreprocess\",\n guard: \"isEoaWallet\",\n target: \"gasCheck\",\n },\n {\n actions: \"doPreprocess\",\n target: \"gasCheck\",\n },\n ],\n onError: {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doValidate\",\n },\n },\n },\n });\n}\n\nexport { createTxMachine };\nexport type {\n GasLimitOverflow,\n TxMachineConfig,\n TxMachineContext,\n TxMachineEvents,\n TxMachineServices,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../src/machines/tx.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\n/**\n * Gas limit overflow information\n */\ntype GasLimitOverflow = {\n /** Block gas limit for the target chain */\n blockGasLimit: bigint;\n /** Effective limit after applying per-tx caps */\n effectiveLimit: bigint;\n /** Estimated gas required for the transaction */\n estimatedGas: bigint;\n /** Reason for overflow: exceeded block limit or per-tx cap */\n reason: \"exceeded\" | \"tx-cap\";\n};\n\n/**\n * Machine context for transaction workflow\n */\ntype TxMachineContext<TPayload, TPreprocess, TSignResult, TResult> = {\n /** Error message from failed operations */\n error: string | null;\n /** Gas limit to use for the transaction */\n gasLimit: bigint | undefined;\n /** Gas limit overflow details when transaction exceeds limits */\n gasLimitOverflow: GasLimitOverflow | null;\n /** Transaction hash after signing */\n hash: string | null;\n /** The transaction payload */\n payload: TPayload | null;\n /** Preprocessed data from validation */\n preprocess: TPreprocess | null;\n /** Sign result (hash for EOA, Safe tx details for Safe) */\n signResult: TSignResult | null;\n /** Final transaction result after confirmation */\n result: TResult | null;\n};\n\n/**\n * Events that can be sent to the transaction machine\n */\ntype TxMachineEvents<TPayload> = { type: \"SUBMIT\"; payload: TPayload } | { type: \"RESET\" };\n\n/**\n * Services configuration for transaction machine.\n *\n * All service functions receive plain values and return Effects with no requirements.\n * If your service needs dependencies, provide them before passing to the machine.\n */\ntype TxMachineServices<TPayload, TPreprocess, TSignResult, TResult> = {\n /** Validates the payload and returns preprocessed data */\n onValidate: (payload: TPayload) => Effect.Effect<TPreprocess, Error>;\n /** Gas check for EOA wallets - returns gas limit or overflow */\n onGasCheck?: (input: {\n payload: TPayload;\n preprocess: TPreprocess;\n }) => Effect.Effect<{ gasLimit: bigint } | { overflow: GasLimitOverflow }, Error>;\n /** Simulation for Safe wallets - may return overflow */\n onSimulate?: (input: {\n payload: TPayload;\n preprocess: TPreprocess;\n }) => Effect.Effect<undefined | { overflow: GasLimitOverflow }, Error>;\n /** Signs the transaction */\n onSign: (input: {\n payload: TPayload;\n preprocess: TPreprocess;\n gasLimit?: bigint;\n }) => Effect.Effect<TSignResult, Error>;\n /** Confirms the transaction and returns final result */\n onConfirm: (input: {\n payload: TPayload;\n signResult: TSignResult;\n }) => Effect.Effect<TResult, Error>;\n};\n\n/**\n * Configuration for creating a transaction machine\n */\ntype TxMachineConfig<TPayload, TPreprocess, TSignResult, TResult> = {\n /** Unique identifier for the machine */\n id: string;\n /** Service implementations */\n services: TxMachineServices<TPayload, TPreprocess, TSignResult, TResult>;\n /** Determines wallet type from payload for branching logic */\n getWalletType: (payload: TPayload) => \"safe\" | \"eoa\";\n /** Optional predicate to detect user rejection errors */\n isUserRejectedError?: (error: unknown) => boolean;\n /** Optional function to extract overflow info from errors */\n isGasLimitOverflowError?: (error: unknown) => GasLimitOverflow | undefined;\n};\n\n/**\n * Creates a transaction workflow state machine with branching paths for Safe vs EOA wallets.\n *\n * Flow:\n * - EOA: initial → validate → gasCheck → signing → pending → success\n * - Safe: initial → validate → simulate → signing → pending → success\n * - Gas overflow: → gasLimitOverflow (terminal, requires RESET)\n *\n * Key features:\n * - Branching based on wallet type (Safe vs EOA)\n * - Gas limit checking with overflow detection\n * - Two-phase execution (sign → confirm)\n * - User rejection handling returns to initial state\n *\n * @example\n * ```ts\n * const machine = createTxMachine({\n * id: \"create-stream\",\n * services: {\n * onValidate: (payload) => Effect.succeed({ validated: true }),\n * onGasCheck: ({ payload, preprocess }) => Effect.succeed({ gasLimit: 100000n }),\n * onSign: ({ payload, preprocess, gasLimit }) => Effect.succeed(\"0x...\"),\n * onConfirm: ({ payload, signResult }) => Effect.succeed({ txHash: \"0x...\" }),\n * },\n * getWalletType: (payload) => payload.isSafe ? \"safe\" : \"eoa\",\n * });\n * ```\n */\nfunction createTxMachine<TPayload, TPreprocess, TSignResult, TResult>({\n id,\n services,\n getWalletType,\n isUserRejectedError,\n isGasLimitOverflowError,\n}: TxMachineConfig<TPayload, TPreprocess, TSignResult, TResult>) {\n return setup({\n actions: {\n doCache: assign({\n error: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.error),\n gasLimit: ({ context, event }) => (event.type === \"SUBMIT\" ? undefined : context.gasLimit),\n gasLimitOverflow: ({ context, event }) =>\n event.type === \"SUBMIT\" ? null : context.gasLimitOverflow,\n hash: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.hash),\n payload: ({ context, event }) =>\n event.type === \"SUBMIT\" ? event.payload : context.payload,\n preprocess: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.preprocess),\n result: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.result),\n signResult: ({ context, event }) => (event.type === \"SUBMIT\" ? null : context.signResult),\n }),\n doError: assign({\n error: ({ event }) => {\n if (\"error\" in event && event.error instanceof Error) {\n return event.error.message;\n }\n return \"An unknown error occurred\";\n },\n }),\n doGasLimit: assign({\n gasLimit: ({ event }) => {\n if (\"output\" in event && event.output && typeof event.output === \"object\") {\n const output = event.output as { gasLimit?: bigint };\n if (\"gasLimit\" in output) {\n return output.gasLimit;\n }\n }\n return undefined;\n },\n }),\n doGasLimitOverflow: assign({\n gasLimitOverflow: ({ event }) => {\n if (\"output\" in event && event.output && typeof event.output === \"object\") {\n const output = event.output as { overflow?: GasLimitOverflow };\n if (\"overflow\" in output && output.overflow) {\n return output.overflow;\n }\n }\n return null;\n },\n }),\n doGasLimitOverflowFromError: assign({\n gasLimitOverflow: ({ event }) => {\n if (isGasLimitOverflowError && \"error\" in event) {\n const overflow = isGasLimitOverflowError(event.error);\n if (overflow) {\n return overflow;\n }\n }\n return null;\n },\n }),\n doPreprocess: assign({\n preprocess: ({ event }) => {\n if (\"output\" in event) {\n return event.output as TPreprocess;\n }\n return null;\n },\n }),\n doReset: assign({\n error: () => null,\n gasLimit: () => undefined,\n gasLimitOverflow: () => null,\n hash: () => null,\n payload: () => null,\n preprocess: () => null,\n result: () => null,\n signResult: () => null,\n }),\n doResult: assign({\n result: ({ event }) => {\n if (\"output\" in event) {\n return event.output as TResult;\n }\n return null;\n },\n }),\n doSignResult: assign({\n hash: ({ event }) => {\n if (\"output\" in event && event.output && typeof event.output === \"object\") {\n const output = event.output as { hash?: string };\n if (\"hash\" in output && typeof output.hash === \"string\") {\n return output.hash;\n }\n }\n return null;\n },\n signResult: ({ event }) => {\n if (\"output\" in event) {\n return event.output as TSignResult;\n }\n return null;\n },\n }),\n },\n actors: {\n doConfirm: fromPromise(\n async ({ input }: { input: { payload: TPayload; signResult: TSignResult } }) =>\n Effect.runPromise(services.onConfirm(input))\n ),\n doGasCheck: fromPromise(\n async ({ input }: { input: { payload: TPayload; preprocess: TPreprocess } }) => {\n if (!services.onGasCheck) {\n return { gasLimit: undefined };\n }\n return await Effect.runPromise(services.onGasCheck(input));\n }\n ),\n doSign: fromPromise(\n async ({\n input,\n }: {\n input: { payload: TPayload; preprocess: TPreprocess; gasLimit?: bigint };\n }) => Effect.runPromise(services.onSign(input))\n ),\n doSimulate: fromPromise(\n async ({ input }: { input: { payload: TPayload; preprocess: TPreprocess } }) => {\n if (!services.onSimulate) {\n return undefined;\n }\n return await Effect.runPromise(services.onSimulate(input));\n }\n ),\n doValidate: fromPromise(async ({ input }: { input: TPayload }) =>\n Effect.runPromise(services.onValidate(input))\n ),\n },\n guards: {\n hasGasLimitOverflow: ({ event }) => {\n if (\"output\" in event && event.output && typeof event.output === \"object\") {\n const output = event.output as { overflow?: GasLimitOverflow };\n return \"overflow\" in output && output.overflow !== undefined;\n }\n return false;\n },\n isEoaWallet: ({ context }) => {\n if (!context.payload) {\n return false;\n }\n return getWalletType(context.payload) === \"eoa\";\n },\n isGasLimitOverflowError: ({ event }) => {\n if (isGasLimitOverflowError && \"error\" in event) {\n return isGasLimitOverflowError(event.error) !== undefined;\n }\n return false;\n },\n isSafeWallet: ({ context }) => {\n if (!context.payload) {\n return false;\n }\n return getWalletType(context.payload) === \"safe\";\n },\n isUserRejectedError: ({ event }) => {\n if (isUserRejectedError && \"error\" in event) {\n return isUserRejectedError(event.error);\n }\n return false;\n },\n },\n types: {\n context: {} as TxMachineContext<TPayload, TPreprocess, TSignResult, TResult>,\n events: {} as TxMachineEvents<TPayload>,\n },\n }).createMachine({\n context: {\n error: null,\n gasLimit: undefined,\n gasLimitOverflow: null,\n hash: null,\n payload: null,\n preprocess: null,\n result: null,\n signResult: null,\n },\n id: `txMachine-${id}`,\n initial: \"initial\",\n states: {\n failure: {\n on: {\n RESET: {\n actions: \"doReset\",\n target: \"initial\",\n },\n SUBMIT: {\n target: \"validate\",\n },\n },\n },\n gasCheck: {\n invoke: {\n id: \"gasCheck\",\n input: ({ context }) => {\n if (context.payload === null) {\n throw new Error(\"Missing payload for gas check\");\n }\n if (context.preprocess === null) {\n throw new Error(\"Missing preprocess data for gas check\");\n }\n return {\n payload: context.payload,\n preprocess: context.preprocess,\n };\n },\n onDone: [\n {\n actions: \"doGasLimitOverflow\",\n guard: \"hasGasLimitOverflow\",\n target: \"gasLimitOverflow\",\n },\n {\n actions: \"doGasLimit\",\n target: \"signing\",\n },\n ],\n onError: isGasLimitOverflowError\n ? [\n {\n actions: \"doGasLimitOverflowFromError\",\n guard: \"isGasLimitOverflowError\",\n target: \"gasLimitOverflow\",\n },\n {\n actions: \"doError\",\n target: \"failure\",\n },\n ]\n : {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doGasCheck\",\n },\n },\n gasLimitOverflow: {\n on: {\n RESET: {\n actions: \"doReset\",\n target: \"initial\",\n },\n },\n },\n initial: {\n on: {\n SUBMIT: {\n target: \"validate\",\n },\n },\n },\n pending: {\n invoke: {\n id: \"confirm\",\n input: ({ context }) => {\n if (context.payload === null) {\n throw new Error(\"Missing payload for confirmation\");\n }\n if (context.signResult === null) {\n throw new Error(\"Missing sign result for confirmation\");\n }\n return {\n payload: context.payload,\n signResult: context.signResult,\n };\n },\n onDone: {\n actions: \"doResult\",\n target: \"success\",\n },\n onError: {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doConfirm\",\n },\n },\n signing: {\n invoke: {\n id: \"sign\",\n input: ({ context }) => {\n if (context.payload === null) {\n throw new Error(\"Missing payload for signing\");\n }\n if (context.preprocess === null) {\n throw new Error(\"Missing preprocess data for signing\");\n }\n return {\n gasLimit: context.gasLimit,\n payload: context.payload,\n preprocess: context.preprocess,\n };\n },\n onDone: {\n actions: \"doSignResult\",\n target: \"pending\",\n },\n onError: isUserRejectedError\n ? [\n {\n actions: \"doReset\",\n guard: \"isUserRejectedError\",\n target: \"initial\",\n },\n {\n actions: \"doError\",\n target: \"failure\",\n },\n ]\n : {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doSign\",\n },\n },\n simulate: {\n invoke: {\n id: \"simulate\",\n input: ({ context }) => {\n if (context.payload === null) {\n throw new Error(\"Missing payload for simulation\");\n }\n if (context.preprocess === null) {\n throw new Error(\"Missing preprocess data for simulation\");\n }\n return {\n payload: context.payload,\n preprocess: context.preprocess,\n };\n },\n onDone: [\n {\n actions: \"doGasLimitOverflow\",\n guard: \"hasGasLimitOverflow\",\n target: \"gasLimitOverflow\",\n },\n {\n target: \"signing\",\n },\n ],\n onError: isGasLimitOverflowError\n ? [\n {\n actions: \"doGasLimitOverflowFromError\",\n guard: \"isGasLimitOverflowError\",\n target: \"gasLimitOverflow\",\n },\n {\n actions: \"doError\",\n target: \"failure\",\n },\n ]\n : {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doSimulate\",\n },\n },\n success: {\n on: {\n RESET: {\n actions: \"doReset\",\n target: \"initial\",\n },\n SUBMIT: {\n target: \"validate\",\n },\n },\n },\n validate: {\n entry: \"doCache\",\n // @ts-expect-error - xState v5 type inference limitation with generic functions\n invoke: {\n id: \"validate\",\n input: ({ event }) => {\n if (event.type !== \"SUBMIT\") {\n throw new Error(\"Invalid event type for validation\");\n }\n return event.payload;\n },\n onDone: [\n {\n actions: \"doPreprocess\",\n guard: \"isSafeWallet\",\n target: \"simulate\",\n },\n {\n actions: \"doPreprocess\",\n guard: \"isEoaWallet\",\n target: \"gasCheck\",\n },\n {\n actions: \"doPreprocess\",\n target: \"gasCheck\",\n },\n ],\n onError: {\n actions: \"doError\",\n target: \"failure\",\n },\n src: \"doValidate\",\n },\n },\n },\n });\n}\n\nexport { createTxMachine };\nexport type {\n GasLimitOverflow,\n TxMachineConfig,\n TxMachineContext,\n TxMachineEvents,\n TxMachineServices,\n};\n"]}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"sideEffects": false,
|
|
8
8
|
"type": "module",
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
|
-
"version": "1.0.0
|
|
10
|
+
"version": "1.0.0",
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "just build",
|
|
13
13
|
"prepack": "bun install --frozen-lockfile && just build"
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
},
|
|
54
54
|
"files": [
|
|
55
55
|
"dist/**",
|
|
56
|
-
"
|
|
56
|
+
"CHANGELOG.md"
|
|
57
57
|
],
|
|
58
58
|
"keywords": [
|
|
59
59
|
"effect",
|