@prb/effect-solana 1.0.0-beta.3 → 1.0.0-beta.5
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/README.md +48 -3
- package/dist/balance/index.js.map +1 -1
- package/dist/balance/service.d.ts +2 -2
- package/dist/balance/service.d.ts.map +1 -1
- package/dist/balance/service.js +3 -3
- package/dist/balance/service.js.map +1 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/core/errors/account.js.map +1 -1
- package/dist/core/errors/index.js.map +1 -1
- package/dist/core/errors/predicates.js.map +1 -1
- package/dist/core/errors/rpc.js.map +1 -1
- package/dist/core/errors/transaction.js.map +1 -1
- package/dist/core/errors/wallet.js.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/kit-effect.d.ts +2 -2
- package/dist/internal/kit-effect.d.ts.map +1 -1
- package/dist/internal/kit-effect.js +1 -1
- package/dist/internal/kit-effect.js.map +1 -1
- package/dist/pda/index.js.map +1 -1
- package/dist/pda/service.js +1 -1
- package/dist/pda/service.js.map +1 -1
- package/dist/pda/types.js.map +1 -1
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layers.d.ts +10 -10
- package/dist/presets/layers.d.ts.map +1 -1
- package/dist/presets/layers.js +8 -8
- package/dist/presets/layers.js.map +1 -1
- package/dist/program/index.d.ts +1 -0
- package/dist/program/index.d.ts.map +1 -1
- package/dist/program/index.js +1 -0
- package/dist/program/index.js.map +1 -1
- package/dist/program/internal/anchor-helpers.d.ts +20 -0
- package/dist/program/internal/anchor-helpers.d.ts.map +1 -0
- package/dist/program/internal/anchor-helpers.js +64 -0
- package/dist/program/internal/anchor-helpers.js.map +1 -0
- package/dist/program/reader.d.ts +19 -0
- package/dist/program/reader.d.ts.map +1 -0
- package/dist/program/reader.js +288 -0
- package/dist/program/reader.js.map +1 -0
- package/dist/program/service.d.ts +1 -1
- package/dist/program/service.d.ts.map +1 -1
- package/dist/program/service.js +18 -37
- package/dist/program/service.js.map +1 -1
- package/dist/program/types.d.ts +48 -13
- package/dist/program/types.d.ts.map +1 -1
- package/dist/program/types.js +27 -28
- package/dist/program/types.js.map +1 -1
- package/dist/react-hooks/index.js.map +1 -1
- package/dist/react-hooks/internal/error.js.map +1 -1
- package/dist/react-hooks/internal/is-dev.js.map +1 -1
- package/dist/react-hooks/internal/runtime.js.map +1 -1
- package/dist/react-hooks/internal/scoped-run.js.map +1 -1
- package/dist/react-hooks/internal/stable.js.map +1 -1
- package/dist/react-hooks/primitives/use-effect-memo-factory.js.map +1 -1
- package/dist/react-hooks/primitives/use-effect.js.map +1 -1
- package/dist/react-hooks/primitives/use-fork-effect.js.map +1 -1
- package/dist/react-hooks/primitives/use-stream.js.map +1 -1
- package/dist/react-hooks/primitives.js.map +1 -1
- package/dist/react-hooks/provider.js.map +1 -1
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/service.d.ts +2 -2
- package/dist/rpc/service.d.ts.map +1 -1
- package/dist/rpc/service.js +1 -1
- package/dist/rpc/service.js.map +1 -1
- package/dist/signer/index.js.map +1 -1
- package/dist/signer/service.d.ts +1 -1
- package/dist/signer/service.d.ts.map +1 -1
- package/dist/signer/service.js +2 -2
- package/dist/signer/service.js.map +1 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/logger.js.map +1 -1
- package/dist/telemetry/tracer.d.ts +3 -0
- package/dist/telemetry/tracer.d.ts.map +1 -1
- package/dist/telemetry/tracer.js +3 -0
- package/dist/telemetry/tracer.js.map +1 -1
- package/dist/testing-kit/_fixtures/addresses.js.map +1 -1
- package/dist/testing-kit/helpers.js.map +1 -1
- package/dist/testing-kit/index.js.map +1 -1
- package/dist/testing-kit/mock-balance-service.d.ts +2 -2
- package/dist/testing-kit/mock-balance-service.d.ts.map +1 -1
- package/dist/testing-kit/mock-balance-service.js +1 -1
- package/dist/testing-kit/mock-balance-service.js.map +1 -1
- package/dist/testing-kit/mock-pda-service.d.ts +2 -2
- package/dist/testing-kit/mock-pda-service.d.ts.map +1 -1
- package/dist/testing-kit/mock-pda-service.js +1 -1
- package/dist/testing-kit/mock-pda-service.js.map +1 -1
- package/dist/testing-kit/mock-rpc-service.d.ts +3 -3
- package/dist/testing-kit/mock-rpc-service.d.ts.map +1 -1
- package/dist/testing-kit/mock-rpc-service.js +2 -2
- package/dist/testing-kit/mock-rpc-service.js.map +1 -1
- package/dist/testing-kit/mock-signer-service.d.ts +3 -3
- package/dist/testing-kit/mock-signer-service.d.ts.map +1 -1
- package/dist/testing-kit/mock-signer-service.js +2 -2
- package/dist/testing-kit/mock-signer-service.js.map +1 -1
- package/dist/testing-kit/mock-token-service.d.ts +3 -3
- package/dist/testing-kit/mock-token-service.d.ts.map +1 -1
- package/dist/testing-kit/mock-token-service.js +1 -1
- package/dist/testing-kit/mock-token-service.js.map +1 -1
- package/dist/testing-kit/mock-transaction-service.d.ts +7 -8
- package/dist/testing-kit/mock-transaction-service.d.ts.map +1 -1
- package/dist/testing-kit/mock-transaction-service.js +1 -1
- package/dist/testing-kit/mock-transaction-service.js.map +1 -1
- package/dist/testing-kit/test-layer.d.ts +11 -7
- package/dist/testing-kit/test-layer.d.ts.map +1 -1
- package/dist/testing-kit/test-layer.js +12 -5
- package/dist/testing-kit/test-layer.js.map +1 -1
- package/dist/token/index.js.map +1 -1
- package/dist/token/service.d.ts +2 -2
- package/dist/token/service.d.ts.map +1 -1
- package/dist/token/service.js +4 -4
- package/dist/token/service.js.map +1 -1
- package/dist/tx/index.js.map +1 -1
- package/dist/tx/service.d.ts +9 -10
- package/dist/tx/service.d.ts.map +1 -1
- package/dist/tx/service.js +4 -4
- package/dist/tx/service.js.map +1 -1
- package/dist/tx/types.d.ts +2 -0
- package/dist/tx/types.d.ts.map +1 -1
- package/dist/tx/types.js.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/web3.js/_fixtures.js.map +1 -1
- package/dist/web3.js/index.js.map +1 -1
- package/dist/web3.js/layers.d.ts +9 -9
- package/dist/web3.js/layers.d.ts.map +1 -1
- package/dist/web3.js/layers.js +1 -1
- package/dist/web3.js/layers.js.map +1 -1
- package/dist/web3.js/legacy-signer.d.ts +1 -1
- package/dist/web3.js/legacy-signer.d.ts.map +1 -1
- package/dist/web3.js/legacy-signer.js +3 -3
- package/dist/web3.js/legacy-signer.js.map +1 -1
- package/dist/web3.js/transaction-bridge.js.map +1 -1
- package/dist/web3.js/types.js.map +1 -1
- package/package.json +38 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-pda-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-pda-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock-pda-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-pda-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,cAAc,EAAE,OAAO,KACpB,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,cAAc,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/F,UAAU,CAAC,EAAE,CACX,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,cAAc,EAAE,OAAO,KACpB,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;CAC/C,CAAC;AAgCF,eAAO,MAAM,uBAAuB,GAClC,SAAQ,oBAAyB,KAChC,KAAK,CAAC,KAAK,CAAC,UAAU,CACoD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import { PdaService } from "
|
|
2
|
+
import { PdaService } from "#src/pda/index.js";
|
|
3
3
|
import { TEST_ADDRESS } from "./_fixtures/addresses.js";
|
|
4
4
|
import { makeMockServiceLayer } from "./helpers.js";
|
|
5
5
|
const defaultConfig = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-pda-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-pda-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock-pda-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-pda-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAoBpD,MAAM,aAAa,GAAmC;IACpD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,GAAgC,CAAU,CAAC;IACvF,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IACjD,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAgC,CAAC;CACnE,CAAC;AA0BF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,SAA+B,EAAE,EACR,EAAE,CAC3B,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC","sourcesContent":["import type { Address, ProgramDerivedAddressBump } from \"@solana/addresses\";\nimport type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { PdaSeed, ProgramDerivedAddress } from \"#src/pda/index.js\";\nimport { PdaService } from \"#src/pda/index.js\";\nimport { TEST_ADDRESS } from \"./_fixtures/addresses.js\";\nimport { makeMockServiceLayer } from \"./helpers.js\";\n\n/**\n * Configuration for the mock PdaService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockPdaServiceConfig = {\n derive?: (\n seeds: readonly PdaSeed[],\n programAddress: Address\n ) => Effect.Effect<ProgramDerivedAddress>;\n deriveAddress?: (seeds: readonly PdaSeed[], programAddress: Address) => Effect.Effect<Address>;\n deriveBump?: (\n seeds: readonly PdaSeed[],\n programAddress: Address\n ) => Effect.Effect<ProgramDerivedAddressBump>;\n};\n\nconst defaultConfig: Required<MockPdaServiceConfig> = {\n derive: () => Effect.succeed([TEST_ADDRESS, 255 as ProgramDerivedAddressBump] as const),\n deriveAddress: () => Effect.succeed(TEST_ADDRESS),\n deriveBump: () => Effect.succeed(255 as ProgramDerivedAddressBump),\n};\n\n/**\n * Creates a mock PdaService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockPdaServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockPdaServiceLayer({\n * derive: () => Effect.succeed([customAddress, 250 as ProgramDerivedAddressBump]),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const pdaService = yield* PdaService;\n * const [pda, bump] = yield* pdaService.derive([seed1, seed2], programId);\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockPdaServiceLayer = (\n config: MockPdaServiceConfig = {}\n): Layer.Layer<PdaService> =>\n makeMockServiceLayer(PdaService, defaultConfig, config, (merged) => merged);\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Rpc, RpcSubscriptions, SolanaRpcApi, SolanaRpcSubscriptionsApi } from "@solana/kit";
|
|
2
2
|
import type { Layer } from "effect";
|
|
3
3
|
import { Effect } from "effect";
|
|
4
|
-
import { ConnectionNotFoundError } from "
|
|
5
|
-
import { RpcService } from "
|
|
6
|
-
import type { Cluster } from "
|
|
4
|
+
import { ConnectionNotFoundError } from "#src/core/errors/index.js";
|
|
5
|
+
import { RpcService } from "#src/rpc/index.js";
|
|
6
|
+
import type { Cluster } from "#src/types/index.js";
|
|
7
7
|
export type MockRpcServiceConfig = {
|
|
8
8
|
getRpc?: () => Effect.Effect<Rpc<SolanaRpcApi>>;
|
|
9
9
|
getRpcSubscriptions?: () => Effect.Effect<RpcSubscriptions<SolanaRpcSubscriptionsApi>, ConnectionNotFoundError>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-rpc-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-rpc-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAElG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock-rpc-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-rpc-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAElG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAUnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAChD,mBAAmB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CACvC,gBAAgB,CAAC,yBAAyB,CAAC,EAC3C,uBAAuB,CACxB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACzC,CAAC;AAcF,eAAO,MAAM,WAAW,GAAI,YAAW,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAM,KAAG,GAAG,CAAC,YAAY,CAyDhE,CAAC;AAwC1B,eAAO,MAAM,uBAAuB,GAClC,SAAQ,oBAAyB,KAChC,KAAK,CAAC,KAAK,CAAC,UAAU,CACoD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSolanaRpc } from "@solana/kit";
|
|
2
2
|
import { Effect } from "effect";
|
|
3
|
-
import { ConnectionNotFoundError } from "
|
|
4
|
-
import { RpcService } from "
|
|
3
|
+
import { ConnectionNotFoundError } from "#src/core/errors/index.js";
|
|
4
|
+
import { RpcService } from "#src/rpc/index.js";
|
|
5
5
|
import { TEST_CLUSTER } from "./_fixtures/addresses.js";
|
|
6
6
|
import { makeMockServiceLayer } from "./helpers.js";
|
|
7
7
|
const wrapResponse = (value) => ({ context: { slot: 0n }, value });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-rpc-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-rpc-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock-rpc-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-rpc-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Rpc, RpcSubscriptions, SolanaRpcApi, SolanaRpcSubscriptionsApi } from \"@solana/kit\";\nimport { createSolanaRpc } from \"@solana/kit\";\nimport type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport { ConnectionNotFoundError } from \"#src/core/errors/index.js\";\nimport { RpcService } from \"#src/rpc/index.js\";\nimport type { Cluster } from \"#src/types/index.js\";\nimport { TEST_CLUSTER } from \"./_fixtures/addresses.js\";\nimport { makeMockServiceLayer } from \"./helpers.js\";\n\n/**\n * Configuration for the mock RpcService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockRpcServiceConfig = {\n getRpc?: () => Effect.Effect<Rpc<SolanaRpcApi>>;\n getRpcSubscriptions?: () => Effect.Effect<\n RpcSubscriptions<SolanaRpcSubscriptionsApi>,\n ConnectionNotFoundError\n >;\n getCluster?: () => Effect.Effect<Cluster>;\n getRpcUrl?: () => Effect.Effect<string>;\n};\n\n/**\n * Wraps a value with the standard RPC response context structure\n */\nconst wrapResponse = <T>(value: T) => ({ context: { slot: 0n }, value });\n\n/**\n * Create a mock RPC client for testing.\n * Provides a full Rpc<SolanaRpcApi> via createSolanaRpc with safe overrides.\n *\n * Uses type assertion because Solana RPC types use many branded types (Lamports, Signature, etc.)\n * that cannot be created from literals. The mock values are structurally correct at runtime.\n */\nexport const makeMockRpc = (overrides: Partial<Rpc<SolanaRpcApi>> = {}): Rpc<SolanaRpcApi> =>\n ({\n ...createSolanaRpc(\"http://localhost\"),\n getAccountInfo: () => ({\n send: () => Promise.resolve(wrapResponse(null)),\n }),\n getBalance: () => ({\n send: () => Promise.resolve(wrapResponse(1000000000n)),\n }),\n getLatestBlockhash: () => ({\n send: () =>\n Promise.resolve(\n wrapResponse({\n blockhash: \"GH7ome3EiwEr7tu9JuTh2dpYWBJK3z69Xm1ZE3MEE6JC\",\n lastValidBlockHeight: 1000n,\n })\n ),\n }),\n getSignatureStatuses: () => ({\n send: () =>\n Promise.resolve(\n wrapResponse([\n {\n confirmationStatus: \"confirmed\",\n confirmations: 10n,\n err: null,\n slot: 1000n,\n status: { Ok: null },\n },\n ])\n ),\n }),\n getTokenAccountBalance: () => ({\n send: () =>\n Promise.resolve(\n wrapResponse({\n amount: \"1000000000\",\n decimals: 9,\n uiAmount: 1.0,\n uiAmountString: \"1.0\",\n })\n ),\n }),\n sendTransaction: () => ({\n send: () => Promise.resolve(\"mock-signature\"),\n }),\n simulateTransaction: () => ({\n send: () =>\n Promise.resolve(\n wrapResponse({\n err: null,\n logs: [] as string[],\n returnData: null,\n })\n ),\n }),\n ...overrides,\n }) as Rpc<SolanaRpcApi>;\n\nconst defaultConfig: Required<MockRpcServiceConfig> = {\n getCluster: () => Effect.succeed(TEST_CLUSTER),\n getRpc: () => Effect.succeed(makeMockRpc()),\n getRpcSubscriptions: () =>\n Effect.fail(\n new ConnectionNotFoundError({\n cluster: TEST_CLUSTER,\n message: \"WebSocket not configured in mock\",\n })\n ),\n getRpcUrl: () => Effect.succeed(\"https://api.devnet.solana.com\"),\n};\n\n/**\n * Creates a mock RpcService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockRpcServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockRpcServiceLayer({\n * getRpc: () => Effect.succeed(myCustomMockRpc),\n * getCluster: () => Effect.succeed(\"mainnet-beta\"),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const rpcService = yield* RpcService;\n * const rpc = yield* rpcService.getRpc();\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockRpcServiceLayer = (\n config: MockRpcServiceConfig = {}\n): Layer.Layer<RpcService> =>\n makeMockServiceLayer(RpcService, defaultConfig, config, (merged) => merged);\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Address } from "@solana/addresses";
|
|
2
2
|
import type { Transaction, TransactionWithLifetime } from "@solana/transactions";
|
|
3
3
|
import { Effect, Layer } from "effect";
|
|
4
|
-
import type { SignatureError } from "
|
|
5
|
-
import { WalletNotConnectedError } from "
|
|
6
|
-
import { SignerService } from "
|
|
4
|
+
import type { SignatureError } from "#src/core/errors/index.js";
|
|
5
|
+
import { WalletNotConnectedError } from "#src/core/errors/index.js";
|
|
6
|
+
import { SignerService } from "#src/signer/index.js";
|
|
7
7
|
export type MockSignerServiceConfig = {
|
|
8
8
|
address?: Address;
|
|
9
9
|
connected?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-signer-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-signer-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock-signer-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-signer-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AASrD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IACnE,eAAe,CAAC,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EAChE,EAAE,EAAE,CAAC,KACF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,GAAG,uBAAuB,CAAC,CAAC;IAChE,mBAAmB,CAAC,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EACpE,GAAG,EAAE,SAAS,CAAC,EAAE,KACd,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,uBAAuB,CAAC,CAAC;IAC3E,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CAC5C,CAAC;AA+BF,eAAO,MAAM,0BAA0B,GACrC,SAAQ,uBAA4B,KACnC,KAAK,CAAC,KAAK,CAAC,aAAa,CAgC3B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect, Layer } from "effect";
|
|
2
|
-
import { WalletNotConnectedError } from "
|
|
3
|
-
import { SignerService } from "
|
|
2
|
+
import { WalletNotConnectedError } from "#src/core/errors/index.js";
|
|
3
|
+
import { SignerService } from "#src/signer/index.js";
|
|
4
4
|
import { TEST_WALLET } from "./_fixtures/addresses.js";
|
|
5
5
|
export const makeMockSignerServiceLayer = (config = {}) => {
|
|
6
6
|
const address = config.address ?? TEST_WALLET;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-signer-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-signer-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock-signer-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-signer-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAkDvD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,SAAkC,EAAE,EACR,EAAE;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,WAAW,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IAE3C,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAC7B,SAAS;QACP,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;IAEpF,MAAM,sBAAsB,GAAG,CAAkD,EAAK,EAAE,EAAE,CACxF,SAAS;QACP,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;IAEpF,MAAM,0BAA0B,GAAG,CACjC,GAAiB,EACjB,EAAE,CACF,SAAS;QACP,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;IAEpF,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE3D,OAAO,KAAK,CAAC,OAAO,CAClB,aAAa,EACb,aAAa,CAAC,EAAE,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,iBAAiB;QAClD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,kBAAkB;QACrD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,0BAA0B;QAC7E,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,sBAAsB;KAClE,CAAC,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { Address } from \"@solana/addresses\";\nimport type { Transaction, TransactionWithLifetime } from \"@solana/transactions\";\nimport { Effect, Layer } from \"effect\";\nimport type { SignatureError } from \"#src/core/errors/index.js\";\nimport { WalletNotConnectedError } from \"#src/core/errors/index.js\";\nimport { SignerService } from \"#src/signer/index.js\";\nimport { TEST_WALLET } from \"./_fixtures/addresses.js\";\n\n/**\n * Configuration for the mock SignerService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockSignerServiceConfig = {\n address?: Address;\n connected?: boolean;\n getAddress?: () => Effect.Effect<Address, WalletNotConnectedError>;\n signTransaction?: <T extends Transaction & TransactionWithLifetime>(\n tx: T\n ) => Effect.Effect<T, SignatureError | WalletNotConnectedError>;\n signAllTransactions?: <T extends Transaction & TransactionWithLifetime>(\n txs: readonly T[]\n ) => Effect.Effect<readonly T[], SignatureError | WalletNotConnectedError>;\n isConnected?: () => Effect.Effect<boolean>;\n};\n\n/**\n * Creates a mock SignerService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n *\n * @example\n * ```typescript\n * // Basic usage with defaults (connected wallet)\n * const layer = makeMockSignerServiceLayer();\n *\n * // Simulate disconnected wallet\n * const disconnectedLayer = makeMockSignerServiceLayer({\n * connected: false,\n * });\n *\n * // Custom address\n * const customLayer = makeMockSignerServiceLayer({\n * address: \"DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK\" as Address,\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const signer = yield* SignerService;\n * const address = yield* signer.getAddress();\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockSignerServiceLayer = (\n config: MockSignerServiceConfig = {}\n): Layer.Layer<SignerService> => {\n const address = config.address ?? TEST_WALLET;\n const connected = config.connected ?? true;\n\n const defaultGetAddress = () =>\n connected\n ? Effect.succeed(address)\n : Effect.fail(new WalletNotConnectedError({ message: \"Wallet not connected\" }));\n\n const defaultSignTransaction = <T extends Transaction & TransactionWithLifetime>(tx: T) =>\n connected\n ? Effect.succeed(tx)\n : Effect.fail(new WalletNotConnectedError({ message: \"Wallet not connected\" }));\n\n const defaultSignAllTransactions = <T extends Transaction & TransactionWithLifetime>(\n txs: readonly T[]\n ) =>\n connected\n ? Effect.succeed(txs)\n : Effect.fail(new WalletNotConnectedError({ message: \"Wallet not connected\" }));\n\n const defaultIsConnected = () => Effect.succeed(connected);\n\n return Layer.succeed(\n SignerService,\n SignerService.of({\n getAddress: config.getAddress ?? defaultGetAddress,\n isConnected: config.isConnected ?? defaultIsConnected,\n signAllTransactions: config.signAllTransactions ?? defaultSignAllTransactions,\n signTransaction: config.signTransaction ?? defaultSignTransaction,\n })\n );\n};\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Address, Instruction } from "@solana/kit";
|
|
2
2
|
import type { Layer } from "effect";
|
|
3
3
|
import { Effect } from "effect";
|
|
4
|
-
import type { AccountNotFoundError, RpcError } from "
|
|
5
|
-
import type { ATAParams, MintAccount, TokenAccount } from "
|
|
6
|
-
import { TokenService } from "
|
|
4
|
+
import type { AccountNotFoundError, RpcError } from "#src/core/errors/index.js";
|
|
5
|
+
import type { ATAParams, MintAccount, TokenAccount } from "#src/token/index.js";
|
|
6
|
+
import { TokenService } from "#src/token/index.js";
|
|
7
7
|
export type MockTokenServiceConfig = {
|
|
8
8
|
getAssociatedTokenAddress?: (params: ATAParams) => Effect.Effect<Address>;
|
|
9
9
|
getOrCreateATA?: (params: ATAParams & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-token-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-token-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock-token-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-token-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUnD,MAAM,MAAM,sBAAsB,GAAG;IACnC,yBAAyB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,GAAG;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CACxE;QACE,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,EACD,QAAQ,CACT,CAAC;IACF,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CAAC,CAAC;IAC3F,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,oBAAoB,GAAG,QAAQ,CAAC,CAAC;IACzF,eAAe,CAAC,EAAE,CAChB,OAAO,EAAE,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,oBAAoB,GAAG,QAAQ,CAAC,CAAC;IAClE,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE;QAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;QAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;KACjC,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;CACzE,CAAC;AA6EF,eAAO,MAAM,yBAAyB,GACpC,SAAQ,sBAA2B,KAClC,KAAK,CAAC,KAAK,CAAC,YAAY,CACoD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import { TokenService } from "
|
|
2
|
+
import { TokenService } from "#src/token/index.js";
|
|
3
3
|
import { TEST_ADDRESS_2 } from "./_fixtures/addresses.js";
|
|
4
4
|
import { makeMockServiceLayer } from "./helpers.js";
|
|
5
5
|
const defaultConfig = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-token-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-token-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock-token-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-token-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAgCpD,MAAM,aAAa,GAAqC;IACtD,yBAAyB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;IAC/D,OAAO,EAAE,GAAG,EAAE,CACZ,MAAM,CAAC,OAAO,CAAC;QACb,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE;YACJ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YACrC,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YACnC,MAAM,EAAE,EAAE;SACX;QACD,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,cAAc;QAC9B,KAAK,EAAE,EAAE;KACK,CAAC;IACnB,cAAc,EAAE,GAAG,EAAE,CACnB,MAAM,CAAC,OAAO,CAAC;QACb,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,SAAS;KACvB,CAAC;IACJ,eAAe,EAAE,GAAG,EAAE,CACpB,MAAM,CAAC,OAAO,CAAC;QACb,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE;YACJ,MAAM,EAAE,EAAE;YACV,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YACpC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YAC9B,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YAC9B,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,CAAC;SACT;QACD,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,cAAc;QAC9B,KAAK,EAAE,EAAE;KACM,CAAC;IACpB,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;IAClD,sBAAsB,EAAE,GAAG,EAAE,CAC3B,MAAM,CAAC,OAAO,CAAC;QACb,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,IAAI,UAAU,EAAE;QACtB,cAAc,EAAE,cAAc;KAChB,CAAC;IACnB,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;CAC/C,CAAC;AA2BF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,SAAiC,EAAE,EACR,EAAE,CAC7B,oBAAoB,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC","sourcesContent":["import type { Address, Instruction } from \"@solana/kit\";\nimport type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { AccountNotFoundError, RpcError } from \"#src/core/errors/index.js\";\nimport type { ATAParams, MintAccount, TokenAccount } from \"#src/token/index.js\";\nimport { TokenService } from \"#src/token/index.js\";\nimport { TEST_ADDRESS_2 } from \"./_fixtures/addresses.js\";\nimport { makeMockServiceLayer } from \"./helpers.js\";\n\n/**\n * Configuration for the mock TokenService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockTokenServiceConfig = {\n getAssociatedTokenAddress?: (params: ATAParams) => Effect.Effect<Address>;\n getOrCreateATA?: (params: ATAParams & { payer: Address }) => Effect.Effect<\n {\n address: Address;\n instruction?: Instruction;\n },\n RpcError\n >;\n getTokenBalance?: (ata: Address) => Effect.Effect<bigint, AccountNotFoundError | RpcError>;\n getMint?: (mint: Address) => Effect.Effect<MintAccount, AccountNotFoundError | RpcError>;\n getTokenAccount?: (\n account: Address\n ) => Effect.Effect<TokenAccount, AccountNotFoundError | RpcError>;\n getTransferInstruction?: (params: {\n readonly source: Address;\n readonly destination: Address;\n readonly authority: Address;\n readonly amount: bigint;\n readonly tokenProgram?: Address;\n }) => Effect.Effect<Instruction>;\n tokenAccountExists?: (ata: Address) => Effect.Effect<boolean, RpcError>;\n};\n\nconst defaultConfig: Required<MockTokenServiceConfig> = {\n getAssociatedTokenAddress: () => Effect.succeed(TEST_ADDRESS_2),\n getMint: () =>\n Effect.succeed({\n address: TEST_ADDRESS_2,\n data: {\n decimals: 0,\n freezeAuthority: { __option: \"None\" },\n isInitialized: true,\n mintAuthority: { __option: \"None\" },\n supply: 0n,\n },\n executable: false,\n lamports: 0n,\n programAddress: TEST_ADDRESS_2,\n space: 0n,\n } as MintAccount),\n getOrCreateATA: () =>\n Effect.succeed({\n address: TEST_ADDRESS_2,\n instruction: undefined, // Account already exists\n }),\n getTokenAccount: () =>\n Effect.succeed({\n address: TEST_ADDRESS_2,\n data: {\n amount: 0n,\n closeAuthority: { __option: \"None\" },\n delegate: { __option: \"None\" },\n delegatedAmount: 0n,\n isNative: { __option: \"None\" },\n mint: TEST_ADDRESS_2,\n owner: TEST_ADDRESS_2,\n state: 1,\n },\n executable: false,\n lamports: 0n,\n programAddress: TEST_ADDRESS_2,\n space: 0n,\n } as TokenAccount),\n getTokenBalance: () => Effect.succeed(1000000000n), // 1 token with 9 decimals\n getTransferInstruction: () =>\n Effect.succeed({\n accounts: [],\n data: new Uint8Array(),\n programAddress: TEST_ADDRESS_2,\n } as Instruction),\n tokenAccountExists: () => Effect.succeed(true),\n};\n\n/**\n * Creates a mock TokenService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockTokenServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockTokenServiceLayer({\n * getTokenBalance: () => Effect.succeed(5000000000n),\n * tokenAccountExists: () => Effect.succeed(false),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const tokenService = yield* TokenService;\n * const balance = yield* tokenService.getTokenBalance(ata);\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockTokenServiceLayer = (\n config: MockTokenServiceConfig = {}\n): Layer.Layer<TokenService> =>\n makeMockServiceLayer(TokenService, defaultConfig, config, (merged) => merged);\n"]}
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import type { Instruction } from "@solana/instructions";
|
|
2
2
|
import type { Signature } from "@solana/keys";
|
|
3
|
-
import type { CompilableTransactionMessage } from "@solana/transaction-messages";
|
|
4
3
|
import type { Transaction, TransactionWithLifetime } from "@solana/transactions";
|
|
5
4
|
import type { Layer } from "effect";
|
|
6
5
|
import { Effect } from "effect";
|
|
7
|
-
import type { SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError, WalletNotConnectedError } from "
|
|
8
|
-
import type { ConfirmOpts, TransactionBatchItem, TransactionBatchOpts, TransactionReceipt } from "
|
|
9
|
-
import { TransactionService } from "
|
|
6
|
+
import type { SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError, WalletNotConnectedError } from "#src/core/errors/index.js";
|
|
7
|
+
import type { ConfirmOpts, SignableTransactionMessage, TransactionBatchItem, TransactionBatchOpts, TransactionReceipt } from "#src/tx/index.js";
|
|
8
|
+
import { TransactionService } from "#src/tx/index.js";
|
|
10
9
|
export type MockTransactionServiceConfig = {
|
|
11
|
-
build?: (instructions: readonly Instruction[]) => Effect.Effect<
|
|
12
|
-
signAll?: (txs: readonly
|
|
13
|
-
sign?: <T extends
|
|
10
|
+
build?: (instructions: readonly Instruction[]) => Effect.Effect<SignableTransactionMessage, TransactionSendError | WalletNotConnectedError>;
|
|
11
|
+
signAll?: (txs: readonly SignableTransactionMessage[]) => Effect.Effect<readonly (Transaction & TransactionWithLifetime)[], TransactionSendError | WalletNotConnectedError>;
|
|
12
|
+
sign?: <T extends SignableTransactionMessage>(tx: T) => Effect.Effect<Transaction & TransactionWithLifetime, TransactionSendError | WalletNotConnectedError>;
|
|
14
13
|
sendAll?: (txs: readonly (Transaction & TransactionWithLifetime)[], opts?: TransactionBatchOpts) => Effect.Effect<readonly Signature[], TransactionSendError>;
|
|
15
14
|
send?: (tx: Transaction & TransactionWithLifetime) => Effect.Effect<Signature, TransactionSendError>;
|
|
16
15
|
confirm?: (signature: Signature, opts?: ConfirmOpts) => Effect.Effect<TransactionReceipt, TransactionTimeoutError | TransactionFailedError>;
|
|
17
16
|
sendAndConfirm?: (instructions: readonly Instruction[], opts?: ConfirmOpts) => Effect.Effect<TransactionReceipt, TransactionSendError | WalletNotConnectedError | TransactionTimeoutError | TransactionFailedError>;
|
|
18
17
|
sendAndConfirmBatch?: (items: readonly TransactionBatchItem[], opts?: TransactionBatchOpts) => Effect.Effect<readonly TransactionReceipt[], TransactionSendError | WalletNotConnectedError | TransactionTimeoutError | TransactionFailedError>;
|
|
19
|
-
simulate?: <T extends
|
|
18
|
+
simulate?: <T extends SignableTransactionMessage>(tx: T) => Effect.Effect<void, SimulationFailedError | TransactionSendError | WalletNotConnectedError>;
|
|
20
19
|
};
|
|
21
20
|
export declare const makeMockTransactionServiceLayer: (config?: MockTransactionServiceConfig) => Layer.Layer<TransactionService>;
|
|
22
21
|
//# sourceMappingURL=mock-transaction-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-transaction-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"mock-transaction-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,WAAW,EACX,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAUtD,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,CAAC,EAAE,CACN,YAAY,EAAE,SAAS,WAAW,EAAE,KACjC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,oBAAoB,GAAG,uBAAuB,CAAC,CAAC;IAC/F,OAAO,CAAC,EAAE,CACR,GAAG,EAAE,SAAS,0BAA0B,EAAE,KACvC,MAAM,CAAC,MAAM,CAChB,SAAS,CAAC,WAAW,GAAG,uBAAuB,CAAC,EAAE,EAClD,oBAAoB,GAAG,uBAAuB,CAC/C,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,0BAA0B,EAC1C,EAAE,EAAE,CAAC,KACF,MAAM,CAAC,MAAM,CAChB,WAAW,GAAG,uBAAuB,EACrC,oBAAoB,GAAG,uBAAuB,CAC/C,CAAC;IACF,OAAO,CAAC,EAAE,CACR,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,uBAAuB,CAAC,EAAE,EACvD,IAAI,CAAC,EAAE,oBAAoB,KACxB,MAAM,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,CACL,EAAE,EAAE,WAAW,GAAG,uBAAuB,KACtC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,CACR,SAAS,EAAE,SAAS,EACpB,IAAI,CAAC,EAAE,WAAW,KACf,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,GAAG,sBAAsB,CAAC,CAAC;IACzF,cAAc,CAAC,EAAE,CACf,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,IAAI,CAAC,EAAE,WAAW,KACf,MAAM,CAAC,MAAM,CAChB,kBAAkB,EAChB,oBAAoB,GACpB,uBAAuB,GACvB,uBAAuB,GACvB,sBAAsB,CACzB,CAAC;IACF,mBAAmB,CAAC,EAAE,CACpB,KAAK,EAAE,SAAS,oBAAoB,EAAE,EACtC,IAAI,CAAC,EAAE,oBAAoB,KACxB,MAAM,CAAC,MAAM,CAChB,SAAS,kBAAkB,EAAE,EAC3B,oBAAoB,GACpB,uBAAuB,GACvB,uBAAuB,GACvB,sBAAsB,CACzB,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,0BAA0B,EAC9C,EAAE,EAAE,CAAC,KACF,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,uBAAuB,CAAC,CAAC;CAClG,CAAC;AA6DF,eAAO,MAAM,+BAA+B,GAC1C,SAAQ,4BAAiC,KACxC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CACoD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import { TransactionService } from "
|
|
2
|
+
import { TransactionService } from "#src/tx/index.js";
|
|
3
3
|
import { TEST_SIGNATURE } from "./_fixtures/addresses.js";
|
|
4
4
|
import { makeMockServiceLayer } from "./helpers.js";
|
|
5
5
|
const defaultConfig = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-transaction-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-transaction-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mock-transaction-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-transaction-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAehC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA4DpD,MAAM,aAAa,GAA2C;IAC5D,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAgC,CAAC;IAC7D,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CACrB,MAAM,CAAC,OAAO,CAAC;QACb,aAAa,EAAE,GAAG;QAClB,SAAS;QACT,IAAI,EAAE,KAAK;KACZ,CAAC;IACJ,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,cAA2B,CAAC;IACvD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,cAA2B,CAAC,CAAC;IAC5E,cAAc,EAAE,GAAG,EAAE,CACnB,MAAM,CAAC,OAAO,CAAC;QACb,aAAa,EAAE,GAAG;QAClB,SAAS,EAAE,cAA2B;QACtC,IAAI,EAAE,KAAK;KACZ,CAAC;IACJ,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC7B,MAAM,CAAC,OAAO,CACZ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACf,aAAa,EAAE,GAAG;QAClB,SAAS,EAAE,cAA2B;QACtC,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC,CACJ;IACH,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAA2C,CAAC;IACvE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAA0C,CAAC,CAAC;IAC9F,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;CAC5B,CAAC;AAgCF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,SAAuC,EAAE,EACR,EAAE,CACnC,oBAAoB,CAAC,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC","sourcesContent":["import type { Instruction } from \"@solana/instructions\";\nimport type { Signature } from \"@solana/keys\";\nimport type { Transaction, TransactionWithLifetime } from \"@solana/transactions\";\nimport type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type {\n SimulationFailedError,\n TransactionFailedError,\n TransactionSendError,\n TransactionTimeoutError,\n WalletNotConnectedError,\n} from \"#src/core/errors/index.js\";\nimport type {\n ConfirmOpts,\n SignableTransactionMessage,\n TransactionBatchItem,\n TransactionBatchOpts,\n TransactionReceipt,\n} from \"#src/tx/index.js\";\nimport { TransactionService } from \"#src/tx/index.js\";\nimport { TEST_SIGNATURE } from \"./_fixtures/addresses.js\";\nimport { makeMockServiceLayer } from \"./helpers.js\";\n\n/**\n * Configuration for the mock TransactionService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockTransactionServiceConfig = {\n build?: (\n instructions: readonly Instruction[]\n ) => Effect.Effect<SignableTransactionMessage, TransactionSendError | WalletNotConnectedError>;\n signAll?: (\n txs: readonly SignableTransactionMessage[]\n ) => Effect.Effect<\n readonly (Transaction & TransactionWithLifetime)[],\n TransactionSendError | WalletNotConnectedError\n >;\n sign?: <T extends SignableTransactionMessage>(\n tx: T\n ) => Effect.Effect<\n Transaction & TransactionWithLifetime,\n TransactionSendError | WalletNotConnectedError\n >;\n sendAll?: (\n txs: readonly (Transaction & TransactionWithLifetime)[],\n opts?: TransactionBatchOpts\n ) => Effect.Effect<readonly Signature[], TransactionSendError>;\n send?: (\n tx: Transaction & TransactionWithLifetime\n ) => Effect.Effect<Signature, TransactionSendError>;\n confirm?: (\n signature: Signature,\n opts?: ConfirmOpts\n ) => Effect.Effect<TransactionReceipt, TransactionTimeoutError | TransactionFailedError>;\n sendAndConfirm?: (\n instructions: readonly Instruction[],\n opts?: ConfirmOpts\n ) => Effect.Effect<\n TransactionReceipt,\n | TransactionSendError\n | WalletNotConnectedError\n | TransactionTimeoutError\n | TransactionFailedError\n >;\n sendAndConfirmBatch?: (\n items: readonly TransactionBatchItem[],\n opts?: TransactionBatchOpts\n ) => Effect.Effect<\n readonly TransactionReceipt[],\n | TransactionSendError\n | WalletNotConnectedError\n | TransactionTimeoutError\n | TransactionFailedError\n >;\n simulate?: <T extends SignableTransactionMessage>(\n tx: T\n ) => Effect.Effect<void, SimulationFailedError | TransactionSendError | WalletNotConnectedError>;\n};\n\nconst defaultConfig: Required<MockTransactionServiceConfig> = {\n build: () => Effect.succeed({} as SignableTransactionMessage),\n confirm: (signature) =>\n Effect.succeed({\n confirmations: 10n,\n signature,\n slot: 1000n,\n }),\n send: () => Effect.succeed(TEST_SIGNATURE as Signature),\n sendAll: (txs) => Effect.succeed(txs.map(() => TEST_SIGNATURE as Signature)),\n sendAndConfirm: () =>\n Effect.succeed({\n confirmations: 10n,\n signature: TEST_SIGNATURE as Signature,\n slot: 1000n,\n }),\n sendAndConfirmBatch: (items) =>\n Effect.succeed(\n items.map(() => ({\n confirmations: 10n,\n signature: TEST_SIGNATURE as Signature,\n slot: 1000n,\n }))\n ),\n sign: () => Effect.succeed({} as Transaction & TransactionWithLifetime),\n signAll: (txs) => Effect.succeed(txs.map(() => ({}) as Transaction & TransactionWithLifetime)),\n simulate: () => Effect.void,\n};\n\n/**\n * Creates a mock TransactionService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockTransactionServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockTransactionServiceLayer({\n * sendAndConfirm: () => Effect.fail(\n * new TransactionFailedError({\n * signature: TEST_SIGNATURE,\n * message: \"Transaction failed\",\n * logs: [],\n * })\n * ),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const txService = yield* TransactionService;\n * const receipt = yield* txService.sendAndConfirm(instructions);\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockTransactionServiceLayer = (\n config: MockTransactionServiceConfig = {}\n): Layer.Layer<TransactionService> =>\n makeMockServiceLayer(TransactionService, defaultConfig, config, (merged) => merged);\n"]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Layer } from "effect";
|
|
2
|
-
import type { BalanceService } from "
|
|
3
|
-
import type { PdaService } from "
|
|
4
|
-
import type {
|
|
5
|
-
import
|
|
6
|
-
import type {
|
|
7
|
-
import type {
|
|
2
|
+
import type { BalanceService } from "#src/balance/index.js";
|
|
3
|
+
import type { PdaService } from "#src/pda/index.js";
|
|
4
|
+
import type { ProgramReaderShape, ProgramWriterShape } from "#src/program/index.js";
|
|
5
|
+
import { ProgramReader, ProgramWriter } from "#src/program/index.js";
|
|
6
|
+
import type { RpcService } from "#src/rpc/index.js";
|
|
7
|
+
import type { SignerService } from "#src/signer/index.js";
|
|
8
|
+
import type { TokenService } from "#src/token/index.js";
|
|
9
|
+
import type { TransactionService } from "#src/tx/index.js";
|
|
8
10
|
import type { MockBalanceServiceConfig } from "./mock-balance-service.js";
|
|
9
11
|
import type { MockPdaServiceConfig } from "./mock-pda-service.js";
|
|
10
12
|
import type { MockRpcServiceConfig } from "./mock-rpc-service.js";
|
|
@@ -18,6 +20,8 @@ export type TestLayerConfig = {
|
|
|
18
20
|
tokenService?: MockTokenServiceConfig;
|
|
19
21
|
transactionService?: MockTransactionServiceConfig;
|
|
20
22
|
pdaService?: MockPdaServiceConfig;
|
|
23
|
+
programReaderService?: ProgramReaderShape;
|
|
24
|
+
programWriterService?: ProgramWriterShape;
|
|
21
25
|
};
|
|
22
|
-
export declare function makeEffectSolanaTestLayer(config?: TestLayerConfig): Layer.Layer<RpcService | SignerService | BalanceService | TokenService | TransactionService | PdaService>;
|
|
26
|
+
export declare function makeEffectSolanaTestLayer(config?: TestLayerConfig): Layer.Layer<RpcService | SignerService | BalanceService | TokenService | TransactionService | PdaService | ProgramReader | ProgramWriter>;
|
|
23
27
|
//# sourceMappingURL=test-layer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-layer.d.ts","sourceRoot":"","sources":["../../src/testing-kit/test-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"test-layer.d.ts","sourceRoot":"","sources":["../../src/testing-kit/test-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EACL,aAAa,EAEb,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAqBlF,MAAM,MAAM,eAAe,GAAG;IAI5B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAKlC,aAAa,CAAC,EAAE,uBAAuB,CAAC;IAKxC,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAK1C,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAKtC,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;IAKlD,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAKlC,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;IAK1C,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;CAC3C,CAAC;AAwDF,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,eAAoB,GAC3B,KAAK,CAAC,KAAK,CACV,UAAU,GACV,aAAa,GACb,cAAc,GACd,YAAY,GACZ,kBAAkB,GAClB,UAAU,GACV,aAAa,GACb,aAAa,CAChB,CAyDA"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { Layer } from "effect";
|
|
2
|
-
import { BalanceServiceLive } from "
|
|
3
|
-
import { PdaServiceLive } from "
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { BalanceServiceLive } from "#src/balance/index.js";
|
|
3
|
+
import { PdaServiceLive } from "#src/pda/index.js";
|
|
4
|
+
import { ProgramReader, ProgramReaderLive, ProgramWriter, ProgramWriterLive, } from "#src/program/index.js";
|
|
5
|
+
import { TokenServiceLive } from "#src/token/index.js";
|
|
6
|
+
import { TransactionServiceLive } from "#src/tx/index.js";
|
|
6
7
|
import { makeMockBalanceServiceLayer } from "./mock-balance-service.js";
|
|
7
8
|
import { makeMockPdaServiceLayer } from "./mock-pda-service.js";
|
|
8
9
|
import { makeMockRpcServiceLayer } from "./mock-rpc-service.js";
|
|
9
10
|
import { makeMockSignerServiceLayer } from "./mock-signer-service.js";
|
|
10
11
|
import { makeMockTokenServiceLayer } from "./mock-token-service.js";
|
|
11
12
|
import { makeMockTransactionServiceLayer } from "./mock-transaction-service.js";
|
|
12
|
-
const applicationServices = Layer.mergeAll(BalanceServiceLive, TokenServiceLive, TransactionServiceLive, PdaServiceLive);
|
|
13
|
+
const applicationServices = Layer.mergeAll(BalanceServiceLive, TokenServiceLive, TransactionServiceLive, PdaServiceLive, ProgramReaderLive, ProgramWriterLive);
|
|
13
14
|
export function makeEffectSolanaTestLayer(config = {}) {
|
|
14
15
|
const boundaryLayers = Layer.mergeAll(makeMockRpcServiceLayer(config.rpcService ?? {}), makeMockSignerServiceLayer(config.signerService ?? {}));
|
|
15
16
|
let serviceMockLayer = Layer.empty;
|
|
@@ -25,6 +26,12 @@ export function makeEffectSolanaTestLayer(config = {}) {
|
|
|
25
26
|
if (config.pdaService) {
|
|
26
27
|
serviceMockLayer = Layer.merge(serviceMockLayer, makeMockPdaServiceLayer(config.pdaService));
|
|
27
28
|
}
|
|
29
|
+
if (config.programReaderService) {
|
|
30
|
+
serviceMockLayer = Layer.merge(serviceMockLayer, Layer.succeed(ProgramReader, ProgramReader.of(config.programReaderService)));
|
|
31
|
+
}
|
|
32
|
+
if (config.programWriterService) {
|
|
33
|
+
serviceMockLayer = Layer.merge(serviceMockLayer, Layer.succeed(ProgramWriter, ProgramWriter.of(config.programWriterService)));
|
|
34
|
+
}
|
|
28
35
|
const baseLayer = Layer.provideMerge(applicationServices, boundaryLayers);
|
|
29
36
|
return Layer.merge(baseLayer, serviceMockLayer);
|
|
30
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-layer.js","sourceRoot":"","sources":["../../src/testing-kit/test-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"test-layer.js","sourceRoot":"","sources":["../../src/testing-kit/test-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAsEhF,MAAM,mBAAmB,GAAG,KAAK,CAAC,QAAQ,CACxC,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;AAuCF,MAAM,UAAU,yBAAyB,CACvC,SAA0B,EAAE;IAY5B,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CACnC,uBAAuB,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAChD,0BAA0B,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CACvD,CAAC;IAGF,IAAI,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC;IAEnC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAC5B,gBAAgB,EAChB,2BAA2B,CAAC,MAAM,CAAC,cAAc,CAAC,CACnD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAC5B,gBAAgB,EAChB,yBAAyB,CAAC,MAAM,CAAC,YAAY,CAAC,CAC/C,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAC5B,gBAAgB,EAChB,+BAA+B,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAC3D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAChC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAC5B,gBAAgB,EAChB,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAC5E,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAChC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAC5B,gBAAgB,EAChB,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAC5E,CAAC;IACJ,CAAC;IAGD,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IAE1E,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAS7C,CAAC;AACJ,CAAC","sourcesContent":["import { Layer } from \"effect\";\nimport type { BalanceService } from \"#src/balance/index.js\";\nimport { BalanceServiceLive } from \"#src/balance/index.js\";\nimport type { PdaService } from \"#src/pda/index.js\";\nimport { PdaServiceLive } from \"#src/pda/index.js\";\nimport type { ProgramReaderShape, ProgramWriterShape } from \"#src/program/index.js\";\nimport {\n ProgramReader,\n ProgramReaderLive,\n ProgramWriter,\n ProgramWriterLive,\n} from \"#src/program/index.js\";\nimport type { RpcService } from \"#src/rpc/index.js\";\nimport type { SignerService } from \"#src/signer/index.js\";\nimport type { TokenService } from \"#src/token/index.js\";\nimport { TokenServiceLive } from \"#src/token/index.js\";\nimport type { TransactionService } from \"#src/tx/index.js\";\nimport { TransactionServiceLive } from \"#src/tx/index.js\";\nimport type { MockBalanceServiceConfig } from \"./mock-balance-service.js\";\nimport { makeMockBalanceServiceLayer } from \"./mock-balance-service.js\";\nimport type { MockPdaServiceConfig } from \"./mock-pda-service.js\";\nimport { makeMockPdaServiceLayer } from \"./mock-pda-service.js\";\nimport type { MockRpcServiceConfig } from \"./mock-rpc-service.js\";\nimport { makeMockRpcServiceLayer } from \"./mock-rpc-service.js\";\nimport type { MockSignerServiceConfig } from \"./mock-signer-service.js\";\nimport { makeMockSignerServiceLayer } from \"./mock-signer-service.js\";\nimport type { MockTokenServiceConfig } from \"./mock-token-service.js\";\nimport { makeMockTokenServiceLayer } from \"./mock-token-service.js\";\nimport type { MockTransactionServiceConfig } from \"./mock-transaction-service.js\";\nimport { makeMockTransactionServiceLayer } from \"./mock-transaction-service.js\";\n\n/**\n * Configuration for the test layer composer\n *\n * @example\n * ```typescript\n * const layer = makeEffectSolanaTestLayer({\n * rpcService: {\n * getRpc: () => Effect.succeed(myMockRpc),\n * },\n * signerService: {\n * address: \"DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK\" as Address,\n * },\n * balanceService: {\n * getSolBalance: () => Effect.succeed(5000000000n as Lamports),\n * },\n * });\n * ```\n */\nexport type TestLayerConfig = {\n /**\n * Configuration overrides for the mock RpcService\n */\n rpcService?: MockRpcServiceConfig;\n\n /**\n * Configuration overrides for the mock SignerService\n */\n signerService?: MockSignerServiceConfig;\n\n /**\n * Configuration overrides for the mock BalanceService\n */\n balanceService?: MockBalanceServiceConfig;\n\n /**\n * Configuration overrides for the mock TokenService\n */\n tokenService?: MockTokenServiceConfig;\n\n /**\n * Configuration overrides for the mock TransactionService\n */\n transactionService?: MockTransactionServiceConfig;\n\n /**\n * Configuration overrides for the mock PdaService\n */\n pdaService?: MockPdaServiceConfig;\n\n /**\n * Configuration overrides for ProgramReader.\n */\n programReaderService?: ProgramReaderShape;\n\n /**\n * Configuration overrides for ProgramWriter.\n */\n programWriterService?: ProgramWriterShape;\n};\n\n/**\n * Internal layer combining all application services\n * Requires RpcService and SignerService to be provided\n *\n * Layer composition order matters:\n * 1. Base services (directly client-bound, no service deps)\n * 2. Dependent services (require base services)\n */\nconst applicationServices = Layer.mergeAll(\n BalanceServiceLive,\n TokenServiceLive,\n TransactionServiceLive,\n PdaServiceLive,\n ProgramReaderLive,\n ProgramWriterLive\n);\n\n/**\n * Creates a complete effect-solana test layer with mocked boundaries\n *\n * This layer provides all effect-solana services with mocked RpcService\n * and SignerService boundaries. The mock boundaries use sensible defaults\n * that can be overridden via configuration.\n *\n * Use this for integration-style tests where you want real service implementations\n * with controlled network boundaries.\n *\n * @param config - Optional configuration to customize mock behaviors\n * @returns A Layer providing all effect-solana services\n *\n * @example\n * ```typescript\n * import { describe, expect, it } from \"@effect/vitest\";\n * import { Effect, Layer } from \"effect\";\n * import { BalanceService } from \"@prb/effect-solana\";\n * import { makeEffectSolanaTestLayer } from \"@prb/effect-solana/testing-kit\";\n *\n * describe(\"MyFeature\", () => {\n * const testLayer = makeEffectSolanaTestLayer({\n * balanceService: {\n * getSolBalance: () => Effect.succeed(1000000000n as Lamports),\n * },\n * });\n *\n * it.effect(\"reads balance\", () =>\n * Effect.gen(function* () {\n * const balanceService = yield* BalanceService;\n * const balance = yield* balanceService.getSolBalance(address);\n * expect(balance).toBe(1000000000n);\n * }).pipe(Effect.provide(testLayer))\n * );\n * });\n * ```\n */\nexport function makeEffectSolanaTestLayer(\n config: TestLayerConfig = {}\n): Layer.Layer<\n | RpcService\n | SignerService\n | BalanceService\n | TokenService\n | TransactionService\n | PdaService\n | ProgramReader\n | ProgramWriter\n> {\n // Create boundary mocks - use real services if no config provided\n const boundaryLayers = Layer.mergeAll(\n makeMockRpcServiceLayer(config.rpcService ?? {}),\n makeMockSignerServiceLayer(config.signerService ?? {})\n );\n\n // Create service mocks if config is provided, otherwise use real implementations from applicationServices\n let serviceMockLayer = Layer.empty;\n\n if (config.balanceService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockBalanceServiceLayer(config.balanceService)\n );\n }\n if (config.tokenService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockTokenServiceLayer(config.tokenService)\n );\n }\n if (config.transactionService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockTransactionServiceLayer(config.transactionService)\n );\n }\n if (config.pdaService) {\n serviceMockLayer = Layer.merge(serviceMockLayer, makeMockPdaServiceLayer(config.pdaService));\n }\n if (config.programReaderService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n Layer.succeed(ProgramReader, ProgramReader.of(config.programReaderService))\n );\n }\n if (config.programWriterService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n Layer.succeed(ProgramWriter, ProgramWriter.of(config.programWriterService))\n );\n }\n\n // Provide boundary mocks and service mocks to application services\n const baseLayer = Layer.provideMerge(applicationServices, boundaryLayers);\n\n return Layer.merge(baseLayer, serviceMockLayer) as Layer.Layer<\n | RpcService\n | SignerService\n | BalanceService\n | TokenService\n | TransactionService\n | PdaService\n | ProgramReader\n | ProgramWriter\n >;\n}\n"]}
|
package/dist/token/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/token/index.ts"],"names":[],"mappings":"AAMA,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/token/index.ts"],"names":[],"mappings":"AAMA,cAAc,cAAc,CAAC","sourcesContent":["/**\n * Token service for SPL token operations.\n *\n * @module\n */\n\nexport * from \"./service.js\";\n"]}
|
package/dist/token/service.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Account, Address, Instruction } from "@solana/kit";
|
|
2
2
|
import type { Mint, Token as TokenAccountData } from "@solana-program/token";
|
|
3
3
|
import { Context, Effect, Layer } from "effect";
|
|
4
|
-
import { AccountNotFoundError, RpcError } from "
|
|
5
|
-
import { RpcService } from "
|
|
4
|
+
import { AccountNotFoundError, RpcError } from "#src/core/errors/index.js";
|
|
5
|
+
import { RpcService } from "#src/rpc/index.js";
|
|
6
6
|
export type MintAccount = Account<Mint>;
|
|
7
7
|
export type TokenAccount = Account<TokenAccountData>;
|
|
8
8
|
export type ATAParams = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/token/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQ7E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/token/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQ7E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAI9B,QAAQ,CAAC,yBAAyB,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAMzF,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,GAAG;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CAChF;QACE,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,EACD,KAAK,GAAG,QAAQ,CACjB,CAAC;IAKF,QAAQ,CAAC,eAAe,EAAE,CACxB,GAAG,EAAE,OAAO,KACT,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CAAC,CAAC;IAK5D,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,oBAAoB,GAAG,QAAQ,CAAC,CAAC;IAKjG,QAAQ,CAAC,eAAe,EAAE,CACxB,OAAO,EAAE,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,oBAAoB,GAAG,QAAQ,CAAC,CAAC;IAKlE,QAAQ,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE;QACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;QAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;KACjC,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAKjC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;CACjF,CAAC;;AAEF,qBAAa,YAAa,SAAQ,iBAG/B;CAAG;AAEN,eAAO,MAAM,gBAAgB,8CA0O5B,CAAC"}
|
package/dist/token/service.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createNoopSigner } from "@solana/signers";
|
|
2
2
|
import { fetchMaybeMint, fetchMaybeToken, findAssociatedTokenPda, getCreateAssociatedTokenIdempotentInstructionAsync, getTransferInstruction, } from "@solana-program/token";
|
|
3
3
|
import { Context, Effect, Layer } from "effect";
|
|
4
|
-
import { TOKEN_PROGRAM_ADDRESS } from "
|
|
5
|
-
import { AccountNotFoundError, RpcError } from "
|
|
6
|
-
import { RpcService } from "
|
|
7
|
-
import { SpanNames } from "
|
|
4
|
+
import { TOKEN_PROGRAM_ADDRESS } from "#src/constants/index.js";
|
|
5
|
+
import { AccountNotFoundError, RpcError } from "#src/core/errors/index.js";
|
|
6
|
+
import { RpcService } from "#src/rpc/index.js";
|
|
7
|
+
import { SpanNames } from "#src/telemetry/index.js";
|
|
8
8
|
export class TokenService extends Context.Tag("esolana/TokenService")() {
|
|
9
9
|
}
|
|
10
10
|
export const TokenServiceLive = Layer.effect(TokenService, Effect.gen(function* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/token/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/token/service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Account, Address, Instruction } from \"@solana/kit\";\nimport { createNoopSigner } from \"@solana/signers\";\nimport type { Mint, Token as TokenAccountData } from \"@solana-program/token\";\nimport {\n fetchMaybeMint,\n fetchMaybeToken,\n findAssociatedTokenPda,\n getCreateAssociatedTokenIdempotentInstructionAsync,\n getTransferInstruction,\n} from \"@solana-program/token\";\nimport { Context, Effect, Layer } from \"effect\";\nimport { TOKEN_PROGRAM_ADDRESS } from \"#src/constants/index.js\";\nimport { AccountNotFoundError, RpcError } from \"#src/core/errors/index.js\";\nimport { RpcService } from \"#src/rpc/index.js\";\nimport { SpanNames } from \"#src/telemetry/index.js\";\n\nexport type MintAccount = Account<Mint>;\nexport type TokenAccount = Account<TokenAccountData>;\n\nexport type ATAParams = {\n readonly owner: Address;\n readonly mint: Address;\n readonly tokenProgram?: Address;\n};\n\nexport type TokenServiceShape = {\n /**\n * Get the Associated Token Account address for an owner and mint.\n */\n readonly getAssociatedTokenAddress: (params: ATAParams) => Effect.Effect<Address, Error>;\n\n /**\n * Get or create an Associated Token Account.\n * Returns the address and optionally the instruction to create it.\n */\n readonly getOrCreateATA: (params: ATAParams & { payer: Address }) => Effect.Effect<\n {\n address: Address;\n instruction?: Instruction;\n },\n Error | RpcError\n >;\n\n /**\n * Get the token balance for an Associated Token Account.\n */\n readonly getTokenBalance: (\n ata: Address\n ) => Effect.Effect<bigint, AccountNotFoundError | RpcError>;\n\n /**\n * Get the mint account for a token.\n */\n readonly getMint: (mint: Address) => Effect.Effect<MintAccount, AccountNotFoundError | RpcError>;\n\n /**\n * Get a token account by address.\n */\n readonly getTokenAccount: (\n account: Address\n ) => Effect.Effect<TokenAccount, AccountNotFoundError | RpcError>;\n\n /**\n * Build a token transfer instruction.\n */\n readonly getTransferInstruction: (params: {\n readonly source: Address;\n readonly destination: Address;\n readonly authority: Address;\n readonly amount: bigint;\n readonly tokenProgram?: Address;\n }) => Effect.Effect<Instruction>;\n\n /**\n * Check if a token account exists.\n */\n readonly tokenAccountExists: (ata: Address) => Effect.Effect<boolean, RpcError>;\n};\n\nexport class TokenService extends Context.Tag(\"esolana/TokenService\")<\n TokenService,\n TokenServiceShape\n>() {}\n\nexport const TokenServiceLive = Layer.effect(\n TokenService,\n Effect.gen(function* () {\n const rpcService = yield* RpcService;\n\n return TokenService.of({\n getAssociatedTokenAddress: (params) =>\n Effect.gen(function* () {\n const tokenProgram = params.tokenProgram ?? TOKEN_PROGRAM_ADDRESS;\n const pda = yield* Effect.tryPromise({\n catch: (cause) =>\n new Error(`Failed to derive ATA for mint ${params.mint} and owner ${params.owner}`, {\n cause,\n }),\n try: () =>\n findAssociatedTokenPda({\n mint: params.mint,\n owner: params.owner,\n tokenProgram,\n }),\n });\n return pda[0];\n }).pipe(\n Effect.withSpan(SpanNames.TOKEN_GET_ATA, {\n attributes: {\n mint: params.mint,\n owner: params.owner,\n },\n })\n ),\n\n getMint: (mint) =>\n Effect.gen(function* () {\n const rpc = yield* rpcService.getRpc();\n const rpcUrl = yield* rpcService.getRpcUrl();\n\n const account = yield* Effect.tryPromise({\n catch: (cause) =>\n new RpcError({\n cause,\n message: `Failed to fetch mint ${mint}`,\n url: rpcUrl,\n }),\n try: () => fetchMaybeMint(rpc, mint),\n });\n\n if (!account.exists) {\n return yield* Effect.fail(\n new AccountNotFoundError({\n address: mint,\n message: `Mint not found: ${mint}`,\n })\n );\n }\n\n return account;\n }).pipe(\n Effect.withSpan(SpanNames.TOKEN_GET_MINT, {\n attributes: { mint },\n })\n ),\n\n getOrCreateATA: (params) =>\n Effect.gen(function* () {\n const tokenProgram = params.tokenProgram ?? TOKEN_PROGRAM_ADDRESS;\n const pda = yield* Effect.tryPromise({\n catch: (cause) =>\n new Error(`Failed to derive ATA for mint ${params.mint} and owner ${params.owner}`, {\n cause,\n }),\n try: () =>\n findAssociatedTokenPda({\n mint: params.mint,\n owner: params.owner,\n tokenProgram,\n }),\n });\n const ata = pda[0];\n\n const rpc = yield* rpcService.getRpc();\n const rpcUrl = yield* rpcService.getRpcUrl();\n\n // Check if account exists\n const accountInfo = yield* Effect.tryPromise({\n catch: (cause) =>\n new RpcError({\n cause,\n message: `Failed to get account info for ${ata}`,\n url: rpcUrl,\n }),\n try: () => rpc.getAccountInfo(ata, { encoding: \"base64\" }).send(),\n });\n\n if (accountInfo.value) {\n // Account exists\n return { address: ata };\n }\n\n // Create instruction using idempotent version (safe to call even if exists)\n // Use NoopSigner since we only need the address for instruction creation\n // The actual signing happens later via TransactionService\n const payerSigner = createNoopSigner(params.payer);\n\n const instruction = yield* Effect.tryPromise({\n catch: (cause) =>\n new Error(\n `Failed to create ATA instruction for mint ${params.mint} and owner ${params.owner}`,\n { cause }\n ),\n try: () =>\n getCreateAssociatedTokenIdempotentInstructionAsync({\n ata,\n mint: params.mint,\n owner: params.owner,\n payer: payerSigner,\n tokenProgram,\n }),\n });\n\n return { address: ata, instruction };\n }).pipe(\n Effect.withSpan(SpanNames.TOKEN_CREATE_ATA, {\n attributes: {\n mint: params.mint,\n owner: params.owner,\n },\n })\n ),\n\n getTokenAccount: (accountAddress) =>\n Effect.gen(function* () {\n const rpc = yield* rpcService.getRpc();\n const rpcUrl = yield* rpcService.getRpcUrl();\n\n const account = yield* Effect.tryPromise({\n catch: (cause) =>\n new RpcError({\n cause,\n message: `Failed to fetch token account ${accountAddress}`,\n url: rpcUrl,\n }),\n try: () => fetchMaybeToken(rpc, accountAddress),\n });\n\n if (!account.exists) {\n return yield* Effect.fail(\n new AccountNotFoundError({\n address: accountAddress,\n message: `Token account not found: ${accountAddress}`,\n })\n );\n }\n\n return account;\n }).pipe(\n Effect.withSpan(SpanNames.TOKEN_GET_ACCOUNT, {\n attributes: { account: accountAddress },\n })\n ),\n\n getTokenBalance: (ata) =>\n Effect.gen(function* () {\n const rpc = yield* rpcService.getRpc();\n const rpcUrl = yield* rpcService.getRpcUrl();\n const response = yield* Effect.tryPromise({\n catch: (cause) =>\n new RpcError({\n cause,\n message: `Failed to get token balance for ${ata}`,\n url: rpcUrl,\n }),\n try: () => rpc.getTokenAccountBalance(ata).send(),\n });\n\n if (!response.value) {\n return yield* Effect.fail(\n new AccountNotFoundError({\n address: ata,\n message: `Token account not found: ${ata}`,\n })\n );\n }\n\n return BigInt(response.value.amount);\n }).pipe(\n Effect.withSpan(SpanNames.BALANCE_GET_TOKEN, {\n attributes: { ata },\n })\n ),\n\n getTransferInstruction: (params) =>\n Effect.sync(() => {\n const tokenProgram = params.tokenProgram ?? TOKEN_PROGRAM_ADDRESS;\n\n return getTransferInstruction(\n {\n amount: params.amount,\n authority: params.authority,\n destination: params.destination,\n source: params.source,\n },\n { programAddress: tokenProgram }\n );\n }).pipe(\n Effect.withSpan(SpanNames.TOKEN_TRANSFER, {\n attributes: {\n amount: params.amount.toString(),\n destination: params.destination,\n source: params.source,\n },\n })\n ),\n\n tokenAccountExists: (ata) =>\n Effect.gen(function* () {\n const rpc = yield* rpcService.getRpc();\n const rpcUrl = yield* rpcService.getRpcUrl();\n const response = yield* Effect.tryPromise({\n catch: (cause) =>\n new RpcError({\n cause,\n message: `Failed to check token account ${ata}`,\n url: rpcUrl,\n }),\n try: () => rpc.getAccountInfo(ata, { encoding: \"base64\" }).send(),\n });\n return response.value !== null;\n }).pipe(\n Effect.withSpan(SpanNames.TOKEN_ACCOUNT_EXISTS, {\n attributes: { ata },\n })\n ),\n });\n })\n);\n"]}
|
package/dist/tx/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tx/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tx/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC","sourcesContent":["export * from \"./service.js\";\nexport * from \"./types.js\";\n"]}
|
package/dist/tx/service.d.ts
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import type { Instruction } from "@solana/instructions";
|
|
2
2
|
import type { Signature } from "@solana/keys";
|
|
3
|
-
import type { CompilableTransactionMessage } from "@solana/transaction-messages";
|
|
4
3
|
import type { Transaction, TransactionWithLifetime } from "@solana/transactions";
|
|
5
4
|
import { Context, Effect, Layer } from "effect";
|
|
6
|
-
import type { WalletNotConnectedError } from "
|
|
7
|
-
import { SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError } from "
|
|
8
|
-
import { RpcService } from "
|
|
9
|
-
import { SignerService } from "
|
|
10
|
-
import type { ComputeBudgetConfig, ConfirmOpts, TransactionBatchItem, TransactionBatchOpts, TransactionBuildOpts, TransactionReceipt } from "./types.js";
|
|
5
|
+
import type { WalletNotConnectedError } from "#src/core/errors/index.js";
|
|
6
|
+
import { SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError } from "#src/core/errors/index.js";
|
|
7
|
+
import { RpcService } from "#src/rpc/index.js";
|
|
8
|
+
import { SignerService } from "#src/signer/index.js";
|
|
9
|
+
import type { ComputeBudgetConfig, ConfirmOpts, SignableTransactionMessage, TransactionBatchItem, TransactionBatchOpts, TransactionBuildOpts, TransactionReceipt } from "./types.js";
|
|
11
10
|
export type TransactionServiceShape = {
|
|
12
|
-
readonly build: (instructions: readonly Instruction[], opts?: TransactionBuildOpts) => Effect.Effect<
|
|
13
|
-
readonly signAll: (txs: readonly
|
|
14
|
-
readonly sign: <T extends
|
|
11
|
+
readonly build: (instructions: readonly Instruction[], opts?: TransactionBuildOpts) => Effect.Effect<SignableTransactionMessage, TransactionSendError | WalletNotConnectedError>;
|
|
12
|
+
readonly signAll: (txs: readonly SignableTransactionMessage[]) => Effect.Effect<readonly (Transaction & TransactionWithLifetime)[], TransactionSendError | WalletNotConnectedError>;
|
|
13
|
+
readonly sign: <T extends SignableTransactionMessage>(tx: T) => Effect.Effect<Transaction & TransactionWithLifetime, TransactionSendError | WalletNotConnectedError>;
|
|
15
14
|
readonly sendAll: (txs: readonly (Transaction & TransactionWithLifetime)[], opts?: TransactionBatchOpts) => Effect.Effect<readonly Signature[], TransactionSendError>;
|
|
16
15
|
readonly send: (tx: Transaction & TransactionWithLifetime) => Effect.Effect<Signature, TransactionSendError>;
|
|
17
16
|
readonly confirm: (signature: Signature, opts?: ConfirmOpts) => Effect.Effect<TransactionReceipt, TransactionTimeoutError | TransactionFailedError>;
|
|
@@ -19,7 +18,7 @@ export type TransactionServiceShape = {
|
|
|
19
18
|
computeBudget?: ComputeBudgetConfig;
|
|
20
19
|
}) => Effect.Effect<TransactionReceipt, TransactionSendError | WalletNotConnectedError | TransactionTimeoutError | TransactionFailedError>;
|
|
21
20
|
readonly sendAndConfirmBatch: (items: readonly TransactionBatchItem[], opts?: TransactionBatchOpts) => Effect.Effect<readonly TransactionReceipt[], TransactionSendError | WalletNotConnectedError | TransactionTimeoutError | TransactionFailedError>;
|
|
22
|
-
readonly simulate: <T extends
|
|
21
|
+
readonly simulate: <T extends SignableTransactionMessage>(tx: T) => Effect.Effect<void, SimulationFailedError | TransactionSendError | WalletNotConnectedError>;
|
|
23
22
|
};
|
|
24
23
|
declare const TransactionService_base: Context.TagClass<TransactionService, "esolana/TransactionService", TransactionServiceShape>;
|
|
25
24
|
export declare class TransactionService extends TransactionService_base {
|
package/dist/tx/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/tx/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/tx/service.ts"],"names":[],"mappings":"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"}
|
package/dist/tx/service.js
CHANGED
|
@@ -3,10 +3,10 @@ import { appendTransactionMessageInstructions, createTransactionMessage, setTran
|
|
|
3
3
|
import { compileTransaction, getBase64EncodedWireTransaction, getSignatureFromTransaction, } from "@solana/transactions";
|
|
4
4
|
import { getSetComputeUnitLimitInstruction, getSetComputeUnitPriceInstruction, } from "@solana-program/compute-budget";
|
|
5
5
|
import { Context, Duration, Effect, Layer, Schedule } from "effect";
|
|
6
|
-
import { SignatureError, SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError, } from "
|
|
7
|
-
import { RpcService } from "
|
|
8
|
-
import { SignerService } from "
|
|
9
|
-
import { SpanNames } from "
|
|
6
|
+
import { SignatureError, SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError, } from "#src/core/errors/index.js";
|
|
7
|
+
import { RpcService } from "#src/rpc/index.js";
|
|
8
|
+
import { SignerService } from "#src/signer/index.js";
|
|
9
|
+
import { SpanNames } from "#src/telemetry/index.js";
|
|
10
10
|
export class TransactionService extends Context.Tag("esolana/TransactionService")() {
|
|
11
11
|
}
|
|
12
12
|
const hasReachedConfirmation = (status, commitment) => {
|