@prb/effect-evm-safe 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/react-hooks/index.d.ts +1 -0
  3. package/dist/react-hooks/index.d.ts.map +1 -1
  4. package/dist/react-hooks/index.js +1 -0
  5. package/dist/react-hooks/index.js.map +1 -1
  6. package/dist/react-hooks/use-wallet-execution.d.ts +14 -0
  7. package/dist/react-hooks/use-wallet-execution.d.ts.map +1 -0
  8. package/dist/react-hooks/use-wallet-execution.js +110 -0
  9. package/dist/react-hooks/use-wallet-execution.js.map +1 -0
  10. package/dist/safe/allowance.d.ts +22 -2
  11. package/dist/safe/allowance.d.ts.map +1 -1
  12. package/dist/safe/allowance.js +20 -1
  13. package/dist/safe/allowance.js.map +1 -1
  14. package/dist/safe/errors.d.ts +2 -0
  15. package/dist/safe/errors.d.ts.map +1 -1
  16. package/dist/safe/errors.js +11 -0
  17. package/dist/safe/errors.js.map +1 -1
  18. package/dist/safe/index.d.ts +4 -2
  19. package/dist/safe/index.d.ts.map +1 -1
  20. package/dist/safe/index.js +3 -1
  21. package/dist/safe/index.js.map +1 -1
  22. package/dist/safe/live.d.ts.map +1 -1
  23. package/dist/safe/live.js +7 -37
  24. package/dist/safe/live.js.map +1 -1
  25. package/dist/safe/pipeline-adapter.d.ts +6 -0
  26. package/dist/safe/pipeline-adapter.d.ts.map +1 -0
  27. package/dist/safe/pipeline-adapter.js +143 -0
  28. package/dist/safe/pipeline-adapter.js.map +1 -0
  29. package/dist/safe/tx-lifecycle.d.ts +1 -1
  30. package/dist/safe/tx-lifecycle.d.ts.map +1 -1
  31. package/dist/safe/tx-lifecycle.js +1 -0
  32. package/dist/safe/tx-lifecycle.js.map +1 -1
  33. package/dist/safe/write-and-track.d.ts +72 -0
  34. package/dist/safe/write-and-track.d.ts.map +1 -0
  35. package/dist/safe/write-and-track.js +116 -0
  36. package/dist/safe/write-and-track.js.map +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-and-track.js","sourceRoot":"","sources":["../../src/safe/write-and-track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAExE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAOpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAM/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AA0E1D,SAAS,cAAc,CAAC,OAKvB;IACC,MAAM,MAAM,GAAG;QACb,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;QACpD,UAAU,EAAE,OAAO,CAAC,UAAU;KACtB,CAAC;IAEX,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,wBAAwB;YAC3B,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,EAAE,CAAC;QACzD,KAAK,oBAAoB;YACvB,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,CAAC;QACrD;YACE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,SAA0C;IAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EACvE,MAA+B;IAE/B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC;IACxC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAyB;QACnE,MAAM,EAAE,YAAY;KACrB,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAc,IAAI,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAkD,CAAC;IAE9F,MAAM,QAAQ,GAAG,CAAC,KAA6B,EAAE,EAAE,CACjD,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CACvC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAC7D,CAAC;IAEJ,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;QAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAEvF,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC1C,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAEtD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,CAAC,QAAQ,CACb,cAAc,CAAC;gBACb,aAAa,EAAE,WAAW,CAAC,KAAK,CAAC,aAAa;gBAC9C,qBAAqB,EAAE,WAAW,CAAC,KAAK,CAAC,qBAAqB;gBAC9D,UAAU;gBACV,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM;aACjC,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,QAAQ,CAAC;gBACd,aAAa,EAAE,IAAI;gBACnB,qBAAqB,EAAE,IAAI;gBAC3B,UAAU;gBACV,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAC7C,UAAU,EACV,CAAC,WAAW,EAAE,EAAE,CACd,SAAS;aACN,cAAc,CAAC,eAAe,EAAE,WAAW,CAAC;aAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAC5F,MAAM,CAAC,WAAW,CACnB,CAAC;QAEF,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,SAAS;gBACZ,KAAK,CAAC,CAAC,QAAQ,CAAC;oBACd,WAAW,EAAE,UAAU,CAAC,WAAW;oBACnC,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;gBACH,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpD,MAAM;YACR,KAAK,QAAQ;gBACX,KAAK,CAAC,CAAC,QAAQ,CAAC;oBACd,aAAa,EAAE,UAAU,CAAC,aAAa;oBACvC,qBAAqB,EAAE,UAAU,CAAC,qBAAqB;oBACvD,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,MAAM,EAAE,QAAQ;iBACjB,CAAC,CAAC;gBACH,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,WAAW;gBACd,KAAK,CAAC,CAAC,QAAQ,CAAC;oBACd,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAC;gBACH,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBACtD,MAAM;YACR,KAAK,QAAQ;gBACX,KAAK,CAAC,CAAC,QAAQ,CAAC;oBACd,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,MAAM,EAAE,QAAQ;iBACjB,CAAC,CAAC;gBACH,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBACnD,MAAM;QACV,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,CAAC,KAA6B,EAAE,EAAE,CAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACjD,KAAK,CAAC,CAAC,QAAQ,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,UAAU,EAAE,UAAU,IAAI,SAAS;YACnC,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CACF,CAAC;IAEF,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,OAAO,CAAC,IAAI,CACV,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC,IAAI,KAAK,OAAO;QACrB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC;QAChD,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,CAC/C,CACF,CACF,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;QACtC,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { TxManager } from \"@prb/effect-evm/tx\";\nimport { Deferred, Effect, Option, Ref, SubscriptionRef } from \"effect\";\nimport type { Hash, TransactionReceipt } from \"viem\";\nimport { safeMultisigBatchWrite } from \"./batch.js\";\nimport type {\n SafeMultiSendUnavailableError,\n SafeMultisigInfoUnavailableError,\n SafeMultisigTxLookupError,\n SafeMultisigTxSubmissionError,\n} from \"./errors.js\";\nimport { toSafeMultisigTxLookupError } from \"./errors.js\";\nimport { SafeAppsService } from \"./service.js\";\nimport type {\n SafeMultisigTxStatus,\n SafeMultisigWaitOptions,\n SafeMultisigWaitResult,\n} from \"./tx-lifecycle.js\";\nimport { waitForSafeMultisigTx } from \"./tx-lifecycle.js\";\nimport type { SafeMultisigTx } from \"./types.js\";\n\nexport type SafeWriteAndTrackState =\n | { readonly status: \"submitting\" }\n | {\n readonly status: \"awaiting_confirmations\";\n readonly confirmations: number | null;\n readonly confirmationsRequired: number | null;\n readonly safeTxHash: Hash;\n }\n | {\n readonly status: \"awaiting_execution\";\n readonly confirmations: number | null;\n readonly confirmationsRequired: number | null;\n readonly safeTxHash: Hash;\n }\n | {\n readonly status: \"pending\";\n readonly confirmations: number | null;\n readonly confirmationsRequired: number | null;\n readonly safeTxHash: Hash;\n }\n | {\n readonly status: \"queued\";\n readonly confirmations: number | null;\n readonly confirmationsRequired: number | null;\n readonly lastStatus: SafeMultisigTxStatus;\n readonly safeTxHash: Hash;\n }\n | {\n readonly status: \"success\";\n readonly onchainHash: Hash;\n readonly receipt: TransactionReceipt;\n readonly safeTxHash: Hash;\n }\n | { readonly status: \"cancelled\"; readonly safeTxHash: Hash }\n | {\n readonly status: \"failed\";\n readonly error: string;\n readonly safeTxHash?: Hash;\n };\n\nexport type SafeWriteAndTrackError =\n | SafeMultiSendUnavailableError\n | SafeMultisigInfoUnavailableError\n | SafeMultisigTxLookupError\n | SafeMultisigTxSubmissionError;\n\nexport type SafeWriteAndTrackParams = {\n readonly transactions: readonly [SafeMultisigTx, ...SafeMultisigTx[]];\n readonly chainId?: number;\n readonly waitOptions?: SafeMultisigWaitOptions;\n readonly onStateChange?: (state: SafeWriteAndTrackState) => Effect.Effect<void>;\n readonly onSubmitted?: (safeTxHash: Hash) => Effect.Effect<void>;\n readonly onQueued?: (\n result: Extract<SafeMultisigWaitResult, { _tag: \"queued\" }>\n ) => Effect.Effect<void>;\n readonly onSuccess?: (\n result: Extract<SafeMultisigWaitResult, { _tag: \"success\" }>\n ) => Effect.Effect<void>;\n readonly onCancelled?: (\n result: Extract<SafeMultisigWaitResult, { _tag: \"cancelled\" }>\n ) => Effect.Effect<void>;\n readonly onFailed?: (\n result: Extract<SafeMultisigWaitResult, { _tag: \"failed\" }>\n ) => Effect.Effect<void>;\n};\n\nexport type SafeWriteAndTrackResult = {\n readonly stateRef: SubscriptionRef.SubscriptionRef<SafeWriteAndTrackState>;\n readonly result: Effect.Effect<SafeMultisigWaitResult, SafeWriteAndTrackError>;\n};\n\nfunction mapStatusState(options: {\n safeTxHash: Hash;\n status: string;\n confirmations: number | null;\n confirmationsRequired: number | null;\n}): SafeWriteAndTrackState {\n const shared = {\n confirmations: options.confirmations,\n confirmationsRequired: options.confirmationsRequired,\n safeTxHash: options.safeTxHash,\n } as const;\n\n switch (options.status) {\n case \"AWAITING_CONFIRMATIONS\":\n return { status: \"awaiting_confirmations\", ...shared };\n case \"AWAITING_EXECUTION\":\n return { status: \"awaiting_execution\", ...shared };\n default:\n return { status: \"pending\", ...shared };\n }\n}\n\nfunction runLifecycle(lifecycle: Effect.Effect<void> | undefined): Effect.Effect<void> {\n if (!lifecycle) {\n return Effect.void;\n }\n\n return lifecycle.pipe(Effect.catchAll(() => Effect.void));\n}\n\nexport const safeWriteAndTrack = Effect.fn(\"safeWriteAndTrack\")(function* (\n params: SafeWriteAndTrackParams\n) {\n const safeApps = yield* SafeAppsService;\n const txManager = yield* TxManager;\n const stateRef = yield* SubscriptionRef.make<SafeWriteAndTrackState>({\n status: \"submitting\",\n });\n const safeTxHashRef = yield* Ref.make<Hash | null>(null);\n const resultDeferred = yield* Deferred.make<SafeMultisigWaitResult, SafeWriteAndTrackError>();\n\n const setState = (state: SafeWriteAndTrackState) =>\n SubscriptionRef.set(stateRef, state).pipe(\n Effect.zipRight(runLifecycle(params.onStateChange?.(state)))\n );\n\n const program = Effect.gen(function* () {\n const resolvedChainId = params.chainId ?? (yield* safeApps.getInfo()).chainId;\n const safeTxHash = yield* safeMultisigBatchWrite(params.transactions, resolvedChainId);\n\n yield* Ref.set(safeTxHashRef, safeTxHash);\n yield* runLifecycle(params.onSubmitted?.(safeTxHash));\n\n const initialInfo = yield* safeApps.getTx(safeTxHash).pipe(Effect.option);\n if (Option.isSome(initialInfo)) {\n yield* setState(\n mapStatusState({\n confirmations: initialInfo.value.confirmations,\n confirmationsRequired: initialInfo.value.confirmationsRequired,\n safeTxHash,\n status: initialInfo.value.status,\n })\n );\n } else {\n yield* setState({\n confirmations: null,\n confirmationsRequired: null,\n safeTxHash,\n status: \"pending\",\n });\n }\n\n const waitResult = yield* waitForSafeMultisigTx(\n safeTxHash,\n (onchainHash) =>\n txManager\n .waitForReceipt(resolvedChainId, onchainHash)\n .pipe(Effect.mapError((cause) => toSafeMultisigTxLookupError(safeTxHash, cause, false))),\n params.waitOptions\n );\n\n switch (waitResult._tag) {\n case \"success\":\n yield* setState({\n onchainHash: waitResult.onchainHash,\n receipt: waitResult.receipt,\n safeTxHash: waitResult.safeTxHash,\n status: \"success\",\n });\n yield* runLifecycle(params.onSuccess?.(waitResult));\n break;\n case \"queued\":\n yield* setState({\n confirmations: waitResult.confirmations,\n confirmationsRequired: waitResult.confirmationsRequired,\n lastStatus: waitResult.lastStatus,\n safeTxHash: waitResult.safeTxHash,\n status: \"queued\",\n });\n yield* runLifecycle(params.onQueued?.(waitResult));\n break;\n case \"cancelled\":\n yield* setState({\n safeTxHash: waitResult.safeTxHash,\n status: \"cancelled\",\n });\n yield* runLifecycle(params.onCancelled?.(waitResult));\n break;\n case \"failed\":\n yield* setState({\n error: waitResult.error,\n safeTxHash: waitResult.safeTxHash,\n status: \"failed\",\n });\n yield* runLifecycle(params.onFailed?.(waitResult));\n break;\n }\n\n return waitResult;\n }).pipe(\n Effect.catchAll((error: SafeWriteAndTrackError) =>\n Effect.gen(function* () {\n const safeTxHash = yield* Ref.get(safeTxHashRef);\n yield* setState({\n error: error.message,\n safeTxHash: safeTxHash ?? undefined,\n status: \"failed\",\n });\n\n return yield* Effect.fail(error);\n })\n )\n );\n\n yield* Effect.forkScoped(\n program.pipe(\n Effect.either,\n Effect.flatMap((either) =>\n either._tag === \"Right\"\n ? Deferred.succeed(resultDeferred, either.right)\n : Deferred.fail(resultDeferred, either.left)\n )\n )\n );\n\n return {\n result: Deferred.await(resultDeferred),\n stateRef,\n };\n});\n"]}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "sideEffects": false,
7
7
  "type": "module",
8
8
  "types": "./dist/index.d.ts",
9
- "version": "2.0.2",
9
+ "version": "2.1.0",
10
10
  "scripts": {
11
11
  "build": "just build",
12
12
  "prepack": "bun install --frozen-lockfile && just build"