@prb/effect-solana 1.0.0-beta.4 → 1.0.0-beta.6

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 (121) hide show
  1. package/README.md +48 -3
  2. package/dist/balance/service.d.ts +2 -2
  3. package/dist/balance/service.d.ts.map +1 -1
  4. package/dist/balance/service.js +3 -3
  5. package/dist/balance/service.js.map +1 -1
  6. package/dist/core/errors/index.d.ts +1 -1
  7. package/dist/core/errors/index.d.ts.map +1 -1
  8. package/dist/core/errors/index.js +1 -1
  9. package/dist/core/errors/index.js.map +1 -1
  10. package/dist/core/errors/{transaction.d.ts → tx.d.ts} +1 -1
  11. package/dist/core/errors/tx.d.ts.map +1 -0
  12. package/dist/core/errors/{transaction.js → tx.js} +1 -1
  13. package/dist/core/errors/tx.js.map +1 -0
  14. package/dist/internal/kit-effect.d.ts +2 -2
  15. package/dist/internal/kit-effect.d.ts.map +1 -1
  16. package/dist/internal/kit-effect.js +1 -1
  17. package/dist/internal/kit-effect.js.map +1 -1
  18. package/dist/pda/service.js +1 -1
  19. package/dist/pda/service.js.map +1 -1
  20. package/dist/presets/layers.d.ts +10 -10
  21. package/dist/presets/layers.d.ts.map +1 -1
  22. package/dist/presets/layers.js +8 -8
  23. package/dist/presets/layers.js.map +1 -1
  24. package/dist/program/index.d.ts +1 -0
  25. package/dist/program/index.d.ts.map +1 -1
  26. package/dist/program/index.js +1 -0
  27. package/dist/program/index.js.map +1 -1
  28. package/dist/program/internal/anchor-helpers.d.ts +20 -0
  29. package/dist/program/internal/anchor-helpers.d.ts.map +1 -0
  30. package/dist/program/internal/anchor-helpers.js +64 -0
  31. package/dist/program/internal/anchor-helpers.js.map +1 -0
  32. package/dist/program/reader.d.ts +19 -0
  33. package/dist/program/reader.d.ts.map +1 -0
  34. package/dist/program/reader.js +288 -0
  35. package/dist/program/reader.js.map +1 -0
  36. package/dist/program/service.d.ts +1 -1
  37. package/dist/program/service.d.ts.map +1 -1
  38. package/dist/program/service.js +18 -37
  39. package/dist/program/service.js.map +1 -1
  40. package/dist/program/types.d.ts +48 -13
  41. package/dist/program/types.d.ts.map +1 -1
  42. package/dist/program/types.js +27 -28
  43. package/dist/program/types.js.map +1 -1
  44. package/dist/rpc/service.d.ts +2 -2
  45. package/dist/rpc/service.d.ts.map +1 -1
  46. package/dist/rpc/service.js +1 -1
  47. package/dist/rpc/service.js.map +1 -1
  48. package/dist/signer/service.d.ts +1 -1
  49. package/dist/signer/service.d.ts.map +1 -1
  50. package/dist/signer/service.js +2 -2
  51. package/dist/signer/service.js.map +1 -1
  52. package/dist/telemetry/tracer.d.ts +3 -0
  53. package/dist/telemetry/tracer.d.ts.map +1 -1
  54. package/dist/telemetry/tracer.js +3 -0
  55. package/dist/telemetry/tracer.js.map +1 -1
  56. package/dist/testing-kit/index.d.ts +2 -2
  57. package/dist/testing-kit/index.d.ts.map +1 -1
  58. package/dist/testing-kit/index.js +1 -1
  59. package/dist/testing-kit/index.js.map +1 -1
  60. package/dist/testing-kit/mock-balance-service.d.ts +2 -2
  61. package/dist/testing-kit/mock-balance-service.d.ts.map +1 -1
  62. package/dist/testing-kit/mock-balance-service.js +1 -1
  63. package/dist/testing-kit/mock-balance-service.js.map +1 -1
  64. package/dist/testing-kit/mock-pda-service.d.ts +2 -2
  65. package/dist/testing-kit/mock-pda-service.d.ts.map +1 -1
  66. package/dist/testing-kit/mock-pda-service.js +1 -1
  67. package/dist/testing-kit/mock-pda-service.js.map +1 -1
  68. package/dist/testing-kit/mock-rpc-service.d.ts +3 -3
  69. package/dist/testing-kit/mock-rpc-service.d.ts.map +1 -1
  70. package/dist/testing-kit/mock-rpc-service.js +2 -2
  71. package/dist/testing-kit/mock-rpc-service.js.map +1 -1
  72. package/dist/testing-kit/mock-signer-service.d.ts +3 -3
  73. package/dist/testing-kit/mock-signer-service.d.ts.map +1 -1
  74. package/dist/testing-kit/mock-signer-service.js +2 -2
  75. package/dist/testing-kit/mock-signer-service.js.map +1 -1
  76. package/dist/testing-kit/mock-token-service.d.ts +3 -3
  77. package/dist/testing-kit/mock-token-service.d.ts.map +1 -1
  78. package/dist/testing-kit/mock-token-service.js +1 -1
  79. package/dist/testing-kit/mock-token-service.js.map +1 -1
  80. package/dist/testing-kit/{mock-transaction-service.d.ts → mock-tx-service.d.ts} +8 -9
  81. package/dist/testing-kit/mock-tx-service.d.ts.map +1 -0
  82. package/dist/testing-kit/{mock-transaction-service.js → mock-tx-service.js} +2 -2
  83. package/dist/testing-kit/mock-tx-service.js.map +1 -0
  84. package/dist/testing-kit/test-layer.d.ts +12 -8
  85. package/dist/testing-kit/test-layer.d.ts.map +1 -1
  86. package/dist/testing-kit/test-layer.js +13 -6
  87. package/dist/testing-kit/test-layer.js.map +1 -1
  88. package/dist/token/service.d.ts +2 -2
  89. package/dist/token/service.d.ts.map +1 -1
  90. package/dist/token/service.js +4 -4
  91. package/dist/token/service.js.map +1 -1
  92. package/dist/tx/service.d.ts +9 -10
  93. package/dist/tx/service.d.ts.map +1 -1
  94. package/dist/tx/service.js +4 -4
  95. package/dist/tx/service.js.map +1 -1
  96. package/dist/tx/types.d.ts +2 -0
  97. package/dist/tx/types.d.ts.map +1 -1
  98. package/dist/tx/types.js.map +1 -1
  99. package/dist/web3.js/index.d.ts +1 -1
  100. package/dist/web3.js/index.d.ts.map +1 -1
  101. package/dist/web3.js/index.js +1 -1
  102. package/dist/web3.js/index.js.map +1 -1
  103. package/dist/web3.js/layers.d.ts +9 -9
  104. package/dist/web3.js/layers.d.ts.map +1 -1
  105. package/dist/web3.js/layers.js +1 -1
  106. package/dist/web3.js/layers.js.map +1 -1
  107. package/dist/web3.js/legacy-signer.d.ts +1 -1
  108. package/dist/web3.js/legacy-signer.d.ts.map +1 -1
  109. package/dist/web3.js/legacy-signer.js +4 -4
  110. package/dist/web3.js/legacy-signer.js.map +1 -1
  111. package/dist/web3.js/{transaction-bridge.d.ts → tx-bridge.d.ts} +1 -1
  112. package/dist/web3.js/tx-bridge.d.ts.map +1 -0
  113. package/dist/web3.js/{transaction-bridge.js → tx-bridge.js} +1 -1
  114. package/dist/web3.js/tx-bridge.js.map +1 -0
  115. package/package.json +19 -14
  116. package/dist/core/errors/transaction.d.ts.map +0 -1
  117. package/dist/core/errors/transaction.js.map +0 -1
  118. package/dist/testing-kit/mock-transaction-service.d.ts.map +0 -1
  119. package/dist/testing-kit/mock-transaction-service.js.map +0 -1
  120. package/dist/web3.js/transaction-bridge.d.ts.map +0 -1
  121. package/dist/web3.js/transaction-bridge.js.map +0 -1
@@ -1,32 +1,31 @@
1
- export class InstructionNotFoundError extends Error {
2
- _tag = "InstructionNotFoundError";
3
- method;
4
- idlName;
5
- constructor(method, idlName) {
6
- super(`Instruction "${method}" not found in IDL "${idlName}"`);
7
- this.name = "InstructionNotFoundError";
8
- this.method = method;
9
- this.idlName = idlName;
10
- }
1
+ import { Schema } from "effect";
2
+ export class InstructionNotFoundError extends Schema.TaggedError()("InstructionNotFoundError", {
3
+ idlName: Schema.String,
4
+ message: Schema.String,
5
+ method: Schema.String,
6
+ }) {
11
7
  }
12
- export class ProgramCreationError extends Error {
13
- _tag = "ProgramCreationError";
14
- cause;
15
- constructor(cause, message) {
16
- super(message ?? "Failed to create Anchor program");
17
- this.name = "ProgramCreationError";
18
- this.cause = cause;
19
- }
8
+ export class ProgramCreationError extends Schema.TaggedError()("ProgramCreationError", {
9
+ cause: Schema.optional(Schema.Unknown),
10
+ message: Schema.String,
11
+ }) {
20
12
  }
21
- export class InstructionBuildError extends Error {
22
- _tag = "InstructionBuildError";
23
- method;
24
- cause;
25
- constructor(method, cause) {
26
- super(`Failed to build instruction "${method}"`);
27
- this.name = "InstructionBuildError";
28
- this.method = method;
29
- this.cause = cause;
30
- }
13
+ export class InstructionBuildError extends Schema.TaggedError()("InstructionBuildError", {
14
+ cause: Schema.optional(Schema.Unknown),
15
+ message: Schema.String,
16
+ method: Schema.String,
17
+ }) {
18
+ }
19
+ export class ProgramReadError extends Schema.TaggedError()("ProgramReadError", {
20
+ cause: Schema.optional(Schema.Unknown),
21
+ message: Schema.String,
22
+ method: Schema.String,
23
+ }) {
24
+ }
25
+ export class ViewNotSupportedError extends Schema.TaggedError()("ViewNotSupportedError", {
26
+ idlName: Schema.String,
27
+ message: Schema.String,
28
+ method: Schema.String,
29
+ }) {
31
30
  }
32
31
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/program/types.ts"],"names":[],"mappings":"AAkEA,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,GAAG,0BAA0B,CAAC;IAClC,MAAM,CAAS;IACf,OAAO,CAAS;IAEzB,YAAY,MAAc,EAAE,OAAe;QACzC,KAAK,CAAC,gBAAgB,MAAM,uBAAuB,OAAO,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAKD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,GAAG,sBAAsB,CAAC;IACrB,KAAK,CAAU;IAEjC,YAAY,KAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,OAAO,IAAI,iCAAiC,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAKD,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,GAAG,uBAAuB,CAAC;IAC/B,MAAM,CAAS;IACN,KAAK,CAAU;IAEjC,YAAY,MAAc,EAAE,KAAc;QACxC,KAAK,CAAC,gCAAgC,MAAM,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF","sourcesContent":["/**\n * Type definitions for Anchor program interactions.\n *\n * Provides TypeScript types for IDL-based instruction building using @coral-xyz/anchor.\n *\n * @module program/types\n */\n\nimport type { Address } from \"@solana/addresses\";\nimport type { Instruction } from \"@solana/instructions\";\n\n// =============================================================================\n// Re-exports from Anchor\n// =============================================================================\n\nexport type { Idl, Program } from \"@coral-xyz/anchor\";\n\n// =============================================================================\n// Program Service Types\n// =============================================================================\n\n/**\n * Account configuration for instruction building.\n * Maps account names to addresses.\n */\nexport type AccountsMap = Record<string, Address | string>;\n\n/**\n * Parameters for creating a Program instance.\n */\nexport type CreateProgramParams<\n T extends import(\"@coral-xyz/anchor\").Idl = import(\"@coral-xyz/anchor\").Idl,\n> = {\n /** The Anchor IDL */\n readonly idl: T;\n /** Override the program address from IDL */\n readonly programId?: Address;\n};\n\n/**\n * Parameters for building an instruction.\n */\nexport type BuildInstructionParams<TArgs extends readonly unknown[] = readonly unknown[]> = {\n /** The method/instruction name */\n readonly method: string;\n /** Instruction arguments in order */\n readonly args: TArgs;\n /** Account addresses mapped by name (only non-PDA, non-fixed accounts) */\n readonly accounts: AccountsMap;\n};\n\n/**\n * Result of building an instruction.\n */\nexport type BuildInstructionResult = {\n /** The built instruction (Solana kit format) */\n readonly instruction: Instruction;\n};\n\n// =============================================================================\n// Error Types\n// =============================================================================\n\n/**\n * Error thrown when an instruction method is not found in the IDL.\n */\nexport class InstructionNotFoundError extends Error {\n readonly _tag = \"InstructionNotFoundError\";\n readonly method: string;\n readonly idlName: string;\n\n constructor(method: string, idlName: string) {\n super(`Instruction \"${method}\" not found in IDL \"${idlName}\"`);\n this.name = \"InstructionNotFoundError\";\n this.method = method;\n this.idlName = idlName;\n }\n}\n\n/**\n * Error thrown when program creation fails.\n */\nexport class ProgramCreationError extends Error {\n readonly _tag = \"ProgramCreationError\";\n override readonly cause: unknown;\n\n constructor(cause: unknown, message?: string) {\n super(message ?? \"Failed to create Anchor program\");\n this.name = \"ProgramCreationError\";\n this.cause = cause;\n }\n}\n\n/**\n * Error thrown when instruction building fails.\n */\nexport class InstructionBuildError extends Error {\n readonly _tag = \"InstructionBuildError\";\n readonly method: string;\n override readonly cause: unknown;\n\n constructor(method: string, cause: unknown) {\n super(`Failed to build instruction \"${method}\"`);\n this.name = \"InstructionBuildError\";\n this.method = method;\n this.cause = cause;\n }\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/program/types.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA6EhC,MAAM,OAAO,wBAAyB,SAAQ,MAAM,CAAC,WAAW,EAA4B,CAC1F,0BAA0B,EAC1B;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CACF;CAAG;AAKJ,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,EAAwB,CAClF,sBAAsB,EACtB;IACE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CACF;CAAG;AAKJ,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,WAAW,EAAyB,CACpF,uBAAuB,EACvB;IACE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CACF;CAAG;AAKJ,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC;CAAG;AAKL,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,WAAW,EAAyB,CACpF,uBAAuB,EACvB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CACF;CAAG","sourcesContent":["/**\n * Type definitions for Anchor program interactions.\n *\n * Provides TypeScript types for IDL-based instruction building using @coral-xyz/anchor.\n *\n * @module program/types\n */\n\nimport type { Address } from \"@solana/addresses\";\nimport type { Instruction } from \"@solana/instructions\";\nimport { Schema } from \"effect\";\n\n// =============================================================================\n// Re-exports from Anchor\n// =============================================================================\n\nexport type { Idl, Program } from \"@coral-xyz/anchor\";\n\n// =============================================================================\n// Program Service Types\n// =============================================================================\n\n/**\n * Account configuration for instruction building.\n * Maps account names to addresses.\n */\nexport type AccountsMap = Record<string, Address | string>;\n\n/**\n * Parameters for creating a Program instance.\n */\nexport type CreateProgramParams<\n T extends import(\"@coral-xyz/anchor\").Idl = import(\"@coral-xyz/anchor\").Idl,\n> = {\n /** The Anchor IDL */\n readonly idl: T;\n /** Override the program address from IDL */\n readonly programId?: Address;\n};\n\n/**\n * Parameters for building an instruction.\n */\nexport type BuildInstructionParams<TArgs extends readonly unknown[] = readonly unknown[]> = {\n /** The method/instruction name */\n readonly method: string;\n /** Instruction arguments in order */\n readonly args: TArgs;\n /** Account addresses mapped by name (only non-PDA, non-fixed accounts) */\n readonly accounts: AccountsMap;\n};\n\n/**\n * Result of building an instruction.\n */\nexport type BuildInstructionResult = {\n /** The built instruction (Solana kit format) */\n readonly instruction: Instruction;\n};\n\n// =============================================================================\n// Program Reader Types\n// =============================================================================\n\n/**\n * Parameters for calling `.view()` on an Anchor program method.\n */\nexport type ViewParams<TArgs extends readonly unknown[] = readonly unknown[]> = {\n /** The Anchor IDL */\n readonly idl: import(\"@coral-xyz/anchor\").Idl;\n /** The method/instruction name to call via `.view()` */\n readonly method: string;\n /** Method arguments in order */\n readonly args: TArgs;\n /** Account addresses mapped by name */\n readonly accounts: AccountsMap;\n /** Override the program address from IDL */\n readonly programId?: Address;\n};\n\n// =============================================================================\n// Error Types\n// =============================================================================\n\n/**\n * Error thrown when an instruction method is not found in the IDL.\n */\nexport class InstructionNotFoundError extends Schema.TaggedError<InstructionNotFoundError>()(\n \"InstructionNotFoundError\",\n {\n idlName: Schema.String,\n message: Schema.String,\n method: Schema.String,\n }\n) {}\n\n/**\n * Error thrown when program creation fails.\n */\nexport class ProgramCreationError extends Schema.TaggedError<ProgramCreationError>()(\n \"ProgramCreationError\",\n {\n cause: Schema.optional(Schema.Unknown),\n message: Schema.String,\n }\n) {}\n\n/**\n * Error thrown when instruction building fails.\n */\nexport class InstructionBuildError extends Schema.TaggedError<InstructionBuildError>()(\n \"InstructionBuildError\",\n {\n cause: Schema.optional(Schema.Unknown),\n message: Schema.String,\n method: Schema.String,\n }\n) {}\n\n/**\n * Error thrown when a `.view()` call fails.\n */\nexport class ProgramReadError extends Schema.TaggedError<ProgramReadError>()(\"ProgramReadError\", {\n cause: Schema.optional(Schema.Unknown),\n message: Schema.String,\n method: Schema.String,\n}) {}\n\n/**\n * Error thrown when a method is not compatible with `.view()` semantics.\n */\nexport class ViewNotSupportedError extends Schema.TaggedError<ViewNotSupportedError>()(\n \"ViewNotSupportedError\",\n {\n idlName: Schema.String,\n message: Schema.String,\n method: Schema.String,\n }\n) {}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { Rpc, RpcSubscriptions, SolanaRpcApi, SolanaRpcSubscriptionsApi } from "@solana/kit";
2
2
  import { Context, Effect, Layer } from "effect";
3
- import { ConnectionNotFoundError } from "../core/errors/index.js";
4
- import type { Cluster, ClusterConfig } from "../types/index.js";
3
+ import { ConnectionNotFoundError } from "#src/core/errors/index.js";
4
+ import type { Cluster, ClusterConfig } from "#src/types/index.js";
5
5
  export type RpcServiceShape = {
6
6
  readonly getRpc: () => Effect.Effect<Rpc<SolanaRpcApi>>;
7
7
  readonly getRpcSubscriptions: () => Effect.Effect<RpcSubscriptions<SolanaRpcSubscriptionsApi>, ConnectionNotFoundError>;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/rpc/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAElG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAOnE,MAAM,MAAM,eAAe,GAAG;IAI5B,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAKxD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,MAAM,CAAC,MAAM,CAC/C,gBAAgB,CAAC,yBAAyB,CAAC,EAC3C,uBAAuB,CACxB,CAAC;IAKF,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAKlD,QAAQ,CAAC,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACjD,CAAC;;AAOF,qBAAa,UAAW,SAAQ,eAAgE;CAAG;AAOnG,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,0CAiCrD,CAAC;AAOJ,eAAO,MAAM,gBAAgB,uCAI3B,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/rpc/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAElG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOlE,MAAM,MAAM,eAAe,GAAG;IAI5B,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAKxD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,MAAM,CAAC,MAAM,CAC/C,gBAAgB,CAAC,yBAAyB,CAAC,EAC3C,uBAAuB,CACxB,CAAC;IAKF,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAKlD,QAAQ,CAAC,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACjD,CAAC;;AAOF,qBAAa,UAAW,SAAQ,eAAgE;CAAG;AAOnG,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,0CAiCrD,CAAC;AAOJ,eAAO,MAAM,gBAAgB,uCAI3B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { createSolanaRpc, createSolanaRpcSubscriptions } from "@solana/kit";
2
2
  import { Context, Effect, Layer } from "effect";
3
- import { ConnectionNotFoundError } from "../core/errors/index.js";
3
+ import { ConnectionNotFoundError } from "#src/core/errors/index.js";
4
4
  export class RpcService extends Context.Tag("esolana/RpcService")() {
5
5
  }
6
6
  export const makeRpcServiceLive = (config) => Layer.effect(RpcService, Effect.gen(function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/rpc/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAsCrE,MAAM,OAAO,UAAW,SAAQ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAA+B;CAAG;AAOnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAE,EAAE,CAC1D,KAAK,CAAC,MAAM,CACV,UAAU,EACV,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAElB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAGjD,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAa,EAAE,EAAE,CAC5E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CACvD,CAAC;IAEF,OAAO,UAAU,CAAC,EAAE,CAAC;QACnB,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAEhD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAEvC,mBAAmB,EAAE,GAAG,EAAE;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,uBAAuB,CAAC;oBAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,6CAA6C,MAAM,CAAC,OAAO,EAAE;iBACvE,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC;AAOJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;IACjD,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,+BAA+B;IACvC,KAAK,EAAE,6BAA6B;CACrC,CAAC,CAAC","sourcesContent":["import type { Rpc, RpcSubscriptions, SolanaRpcApi, SolanaRpcSubscriptionsApi } from \"@solana/kit\";\nimport { createSolanaRpc, createSolanaRpcSubscriptions } from \"@solana/kit\";\nimport { Context, Effect, Layer } from \"effect\";\nimport { ConnectionNotFoundError } from \"@/src/core/errors/index.js\";\nimport type { Cluster, ClusterConfig } from \"@/src/types/index.js\";\n\n/**\n * Shape of the RPC service for type inference.\n *\n * @category Services\n */\nexport type RpcServiceShape = {\n /**\n * Get the Solana RPC client for making RPC calls.\n */\n readonly getRpc: () => Effect.Effect<Rpc<SolanaRpcApi>>;\n\n /**\n * Get the Solana RPC subscriptions client for WebSocket subscriptions.\n */\n readonly getRpcSubscriptions: () => Effect.Effect<\n RpcSubscriptions<SolanaRpcSubscriptionsApi>,\n ConnectionNotFoundError\n >;\n\n /**\n * Get the current cluster.\n */\n readonly getCluster: () => Effect.Effect<Cluster>;\n\n /**\n * Get the RPC URL.\n */\n readonly getRpcUrl: () => Effect.Effect<string>;\n};\n\n/**\n * Service tag for RPC client.\n *\n * @category Services\n */\nexport class RpcService extends Context.Tag(\"esolana/RpcService\")<RpcService, RpcServiceShape>() {}\n\n/**\n * Create an RpcService layer from cluster configuration.\n *\n * @category Layers\n */\nexport const makeRpcServiceLive = (config: ClusterConfig) =>\n Layer.effect(\n RpcService,\n Effect.gen(function* () {\n // Create RPC client once during layer construction\n const rpcClient = createSolanaRpc(config.rpcUrl);\n\n // Memoized WebSocket subscription client - created once on first access\n const getCachedSubscriptions = yield* Effect.cachedFunction((wsUrl: string) =>\n Effect.sync(() => createSolanaRpcSubscriptions(wsUrl))\n );\n\n return RpcService.of({\n getCluster: () => Effect.succeed(config.cluster),\n\n getRpc: () => Effect.succeed(rpcClient),\n\n getRpcSubscriptions: () => {\n const wsUrl = config.wsUrl;\n if (!wsUrl) {\n return Effect.fail(\n new ConnectionNotFoundError({\n cluster: config.cluster,\n message: `WebSocket URL not configured for cluster: ${config.cluster}`,\n })\n );\n }\n return getCachedSubscriptions(wsUrl);\n },\n\n getRpcUrl: () => Effect.succeed(config.rpcUrl),\n });\n })\n );\n\n/**\n * Default devnet configuration for development.\n *\n * @category Layers\n */\nexport const RpcServiceDevnet = makeRpcServiceLive({\n cluster: \"devnet\",\n rpcUrl: \"https://api.devnet.solana.com\",\n wsUrl: \"wss://api.devnet.solana.com\",\n});\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/rpc/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAsCpE,MAAM,OAAO,UAAW,SAAQ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAA+B;CAAG;AAOnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAE,EAAE,CAC1D,KAAK,CAAC,MAAM,CACV,UAAU,EACV,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAElB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAGjD,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAa,EAAE,EAAE,CAC5E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CACvD,CAAC;IAEF,OAAO,UAAU,CAAC,EAAE,CAAC;QACnB,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAEhD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAEvC,mBAAmB,EAAE,GAAG,EAAE;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,uBAAuB,CAAC;oBAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,6CAA6C,MAAM,CAAC,OAAO,EAAE;iBACvE,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC;AAOJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;IACjD,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,+BAA+B;IACvC,KAAK,EAAE,6BAA6B;CACrC,CAAC,CAAC","sourcesContent":["import type { Rpc, RpcSubscriptions, SolanaRpcApi, SolanaRpcSubscriptionsApi } from \"@solana/kit\";\nimport { createSolanaRpc, createSolanaRpcSubscriptions } from \"@solana/kit\";\nimport { Context, Effect, Layer } from \"effect\";\nimport { ConnectionNotFoundError } from \"#src/core/errors/index.js\";\nimport type { Cluster, ClusterConfig } from \"#src/types/index.js\";\n\n/**\n * Shape of the RPC service for type inference.\n *\n * @category Services\n */\nexport type RpcServiceShape = {\n /**\n * Get the Solana RPC client for making RPC calls.\n */\n readonly getRpc: () => Effect.Effect<Rpc<SolanaRpcApi>>;\n\n /**\n * Get the Solana RPC subscriptions client for WebSocket subscriptions.\n */\n readonly getRpcSubscriptions: () => Effect.Effect<\n RpcSubscriptions<SolanaRpcSubscriptionsApi>,\n ConnectionNotFoundError\n >;\n\n /**\n * Get the current cluster.\n */\n readonly getCluster: () => Effect.Effect<Cluster>;\n\n /**\n * Get the RPC URL.\n */\n readonly getRpcUrl: () => Effect.Effect<string>;\n};\n\n/**\n * Service tag for RPC client.\n *\n * @category Services\n */\nexport class RpcService extends Context.Tag(\"esolana/RpcService\")<RpcService, RpcServiceShape>() {}\n\n/**\n * Create an RpcService layer from cluster configuration.\n *\n * @category Layers\n */\nexport const makeRpcServiceLive = (config: ClusterConfig) =>\n Layer.effect(\n RpcService,\n Effect.gen(function* () {\n // Create RPC client once during layer construction\n const rpcClient = createSolanaRpc(config.rpcUrl);\n\n // Memoized WebSocket subscription client - created once on first access\n const getCachedSubscriptions = yield* Effect.cachedFunction((wsUrl: string) =>\n Effect.sync(() => createSolanaRpcSubscriptions(wsUrl))\n );\n\n return RpcService.of({\n getCluster: () => Effect.succeed(config.cluster),\n\n getRpc: () => Effect.succeed(rpcClient),\n\n getRpcSubscriptions: () => {\n const wsUrl = config.wsUrl;\n if (!wsUrl) {\n return Effect.fail(\n new ConnectionNotFoundError({\n cluster: config.cluster,\n message: `WebSocket URL not configured for cluster: ${config.cluster}`,\n })\n );\n }\n return getCachedSubscriptions(wsUrl);\n },\n\n getRpcUrl: () => Effect.succeed(config.rpcUrl),\n });\n })\n );\n\n/**\n * Default devnet configuration for development.\n *\n * @category Layers\n */\nexport const RpcServiceDevnet = makeRpcServiceLive({\n cluster: \"devnet\",\n rpcUrl: \"https://api.devnet.solana.com\",\n wsUrl: \"wss://api.devnet.solana.com\",\n});\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { Address } from "@solana/addresses";
2
2
  import type { Transaction, TransactionWithLifetime } from "@solana/transactions";
3
3
  import { Context, Effect, Layer } from "effect";
4
- import { SignatureError, WalletNotConnectedError } from "../core/errors/index.js";
4
+ import { SignatureError, WalletNotConnectedError } from "#src/core/errors/index.js";
5
5
  export type SignerServiceShape = {
6
6
  readonly getAddress: () => Effect.Effect<Address, WalletNotConnectedError>;
7
7
  readonly signTransaction: <T extends Transaction & TransactionWithLifetime>(tx: T) => Effect.Effect<T, SignatureError | WalletNotConnectedError>;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/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,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGrF,MAAM,MAAM,kBAAkB,GAAG;IAI/B,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IAK3E,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EACxE,EAAE,EAAE,CAAC,KACF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,GAAG,uBAAuB,CAAC,CAAC;IAKhE,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EAC5E,GAAG,EAAE,SAAS,CAAC,EAAE,KACd,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,uBAAuB,CAAC,CAAC;IAK3E,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CACpD,CAAC;;AAEF,qBAAa,aAAc,SAAQ,kBAGhC;CAAG;AAKN,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EAAE,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACjG,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EAC5E,GAAG,EAAE,SAAS,CAAC,EAAE,KACd,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CAC5B,CAAC;AAMF,eAAO,MAAM,4BAA4B,GAAI,YAAY,MAAM,aAAa,6CAqDzE,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/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,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,MAAM,MAAM,kBAAkB,GAAG;IAI/B,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IAK3E,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EACxE,EAAE,EAAE,CAAC,KACF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,GAAG,uBAAuB,CAAC,CAAC;IAKhE,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EAC5E,GAAG,EAAE,SAAS,CAAC,EAAE,KACd,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,uBAAuB,CAAC,CAAC;IAK3E,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CACpD,CAAC;;AAEF,qBAAa,aAAc,SAAQ,kBAGhC;CAAG;AAKN,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EAAE,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACjG,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,uBAAuB,EAC5E,GAAG,EAAE,SAAS,CAAC,EAAE,KACd,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CAC5B,CAAC;AAMF,eAAO,MAAM,4BAA4B,GAAI,YAAY,MAAM,aAAa,6CAqDzE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Context, Effect, Layer } from "effect";
2
- import { SignatureError, WalletNotConnectedError } from "../core/errors/index.js";
3
- import { SpanNames } from "../telemetry/index.js";
2
+ import { SignatureError, WalletNotConnectedError } from "#src/core/errors/index.js";
3
+ import { SpanNames } from "#src/telemetry/index.js";
4
4
  export class SignerService extends Context.Tag("esolana/SignerService")() {
5
5
  }
6
6
  export const makeSignerServiceFromAdapter = (getAdapter) => Layer.succeed(SignerService, SignerService.of({
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/signer/service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AA4BrD,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAGpE;CAAG;AAkBN,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,UAA+B,EAAE,EAAE,CAC9E,KAAK,CAAC,OAAO,CACX,aAAa,EACb,aAAa,CAAC,EAAE,CAAC;IACf,UAAU,EAAE,GAAG,EAAE,CACf,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,SAAS,CAAC;IAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAExD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC;IAE5D,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,cAAc,CAAC;gBACjB,KAAK;gBACL,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;aAChF,CAAC;YACJ,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE7C,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,cAAc,CAAC;gBACjB,KAAK;gBACL,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B;aAC/E,CAAC;YACJ,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;SACvC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC,CACH,CAAC","sourcesContent":["import type { Address } from \"@solana/addresses\";\nimport type { Transaction, TransactionWithLifetime } from \"@solana/transactions\";\nimport { Context, Effect, Layer } from \"effect\";\nimport { SignatureError, WalletNotConnectedError } from \"@/src/core/errors/index.js\";\nimport { SpanNames } from \"@/src/telemetry/index.js\";\n\nexport type SignerServiceShape = {\n /**\n * Get the connected wallet's address.\n */\n readonly getAddress: () => Effect.Effect<Address, WalletNotConnectedError>;\n\n /**\n * Sign a single transaction.\n */\n readonly signTransaction: <T extends Transaction & TransactionWithLifetime>(\n tx: T\n ) => Effect.Effect<T, SignatureError | WalletNotConnectedError>;\n\n /**\n * Sign multiple transactions in a batch.\n */\n readonly signAllTransactions: <T extends Transaction & TransactionWithLifetime>(\n txs: readonly T[]\n ) => Effect.Effect<readonly T[], SignatureError | WalletNotConnectedError>;\n\n /**\n * Check if a wallet is connected.\n */\n readonly isConnected: () => Effect.Effect<boolean>;\n};\n\nexport class SignerService extends Context.Tag(\"esolana/SignerService\")<\n SignerService,\n SignerServiceShape\n>() {}\n\n/**\n * Wallet adapter interface - consumers implement this to integrate their wallet.\n */\nexport type WalletAdapter = {\n readonly publicKey: Address | null;\n readonly connected: boolean;\n readonly signTransaction: <T extends Transaction & TransactionWithLifetime>(tx: T) => Promise<T>;\n readonly signAllTransactions: <T extends Transaction & TransactionWithLifetime>(\n txs: readonly T[]\n ) => Promise<readonly T[]>;\n};\n\n/**\n * Create a SignerService layer from a wallet adapter.\n * This is used to bridge wallet-adapter-react or similar libraries.\n */\nexport const makeSignerServiceFromAdapter = (getAdapter: () => WalletAdapter) =>\n Layer.succeed(\n SignerService,\n SignerService.of({\n getAddress: () =>\n Effect.gen(function* () {\n const adapter = getAdapter();\n if (!(adapter.connected && adapter.publicKey)) {\n return yield* Effect.fail(\n new WalletNotConnectedError({ message: \"Wallet not connected\" })\n );\n }\n return adapter.publicKey;\n }).pipe(Effect.withSpan(SpanNames.SIGNER_GET_ADDRESS)),\n\n isConnected: () => Effect.sync(() => getAdapter().connected),\n\n signAllTransactions: (txs) =>\n Effect.gen(function* () {\n const adapter = getAdapter();\n if (!adapter.connected) {\n return yield* Effect.fail(\n new WalletNotConnectedError({ message: \"Wallet not connected\" })\n );\n }\n return yield* Effect.tryPromise({\n catch: (cause) =>\n new SignatureError({\n cause,\n message: cause instanceof Error ? cause.message : \"Failed to sign transactions\",\n }),\n try: () => adapter.signAllTransactions(txs),\n });\n }).pipe(Effect.withSpan(SpanNames.TX_SIGN)),\n\n signTransaction: (tx) =>\n Effect.gen(function* () {\n const adapter = getAdapter();\n if (!adapter.connected) {\n return yield* Effect.fail(\n new WalletNotConnectedError({ message: \"Wallet not connected\" })\n );\n }\n return yield* Effect.tryPromise({\n catch: (cause) =>\n new SignatureError({\n cause,\n message: cause instanceof Error ? cause.message : \"Failed to sign transaction\",\n }),\n try: () => adapter.signTransaction(tx),\n });\n }).pipe(Effect.withSpan(SpanNames.TX_SIGN)),\n })\n );\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/signer/service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Address } from \"@solana/addresses\";\nimport type { Transaction, TransactionWithLifetime } from \"@solana/transactions\";\nimport { Context, Effect, Layer } from \"effect\";\nimport { SignatureError, WalletNotConnectedError } from \"#src/core/errors/index.js\";\nimport { SpanNames } from \"#src/telemetry/index.js\";\n\nexport type SignerServiceShape = {\n /**\n * Get the connected wallet's address.\n */\n readonly getAddress: () => Effect.Effect<Address, WalletNotConnectedError>;\n\n /**\n * Sign a single transaction.\n */\n readonly signTransaction: <T extends Transaction & TransactionWithLifetime>(\n tx: T\n ) => Effect.Effect<T, SignatureError | WalletNotConnectedError>;\n\n /**\n * Sign multiple transactions in a batch.\n */\n readonly signAllTransactions: <T extends Transaction & TransactionWithLifetime>(\n txs: readonly T[]\n ) => Effect.Effect<readonly T[], SignatureError | WalletNotConnectedError>;\n\n /**\n * Check if a wallet is connected.\n */\n readonly isConnected: () => Effect.Effect<boolean>;\n};\n\nexport class SignerService extends Context.Tag(\"esolana/SignerService\")<\n SignerService,\n SignerServiceShape\n>() {}\n\n/**\n * Wallet adapter interface - consumers implement this to integrate their wallet.\n */\nexport type WalletAdapter = {\n readonly publicKey: Address | null;\n readonly connected: boolean;\n readonly signTransaction: <T extends Transaction & TransactionWithLifetime>(tx: T) => Promise<T>;\n readonly signAllTransactions: <T extends Transaction & TransactionWithLifetime>(\n txs: readonly T[]\n ) => Promise<readonly T[]>;\n};\n\n/**\n * Create a SignerService layer from a wallet adapter.\n * This is used to bridge wallet-adapter-react or similar libraries.\n */\nexport const makeSignerServiceFromAdapter = (getAdapter: () => WalletAdapter) =>\n Layer.succeed(\n SignerService,\n SignerService.of({\n getAddress: () =>\n Effect.gen(function* () {\n const adapter = getAdapter();\n if (!(adapter.connected && adapter.publicKey)) {\n return yield* Effect.fail(\n new WalletNotConnectedError({ message: \"Wallet not connected\" })\n );\n }\n return adapter.publicKey;\n }).pipe(Effect.withSpan(SpanNames.SIGNER_GET_ADDRESS)),\n\n isConnected: () => Effect.sync(() => getAdapter().connected),\n\n signAllTransactions: (txs) =>\n Effect.gen(function* () {\n const adapter = getAdapter();\n if (!adapter.connected) {\n return yield* Effect.fail(\n new WalletNotConnectedError({ message: \"Wallet not connected\" })\n );\n }\n return yield* Effect.tryPromise({\n catch: (cause) =>\n new SignatureError({\n cause,\n message: cause instanceof Error ? cause.message : \"Failed to sign transactions\",\n }),\n try: () => adapter.signAllTransactions(txs),\n });\n }).pipe(Effect.withSpan(SpanNames.TX_SIGN)),\n\n signTransaction: (tx) =>\n Effect.gen(function* () {\n const adapter = getAdapter();\n if (!adapter.connected) {\n return yield* Effect.fail(\n new WalletNotConnectedError({ message: \"Wallet not connected\" })\n );\n }\n return yield* Effect.tryPromise({\n catch: (cause) =>\n new SignatureError({\n cause,\n message: cause instanceof Error ? cause.message : \"Failed to sign transaction\",\n }),\n try: () => adapter.signTransaction(tx),\n });\n }).pipe(Effect.withSpan(SpanNames.TX_SIGN)),\n })\n );\n"]}
@@ -20,6 +20,9 @@ export declare const SpanNames: {
20
20
  readonly PROGRAM_BUILD: "esol.program.build";
21
21
  readonly PROGRAM_BUILD_INSTRUCTION: "esol.program.buildInstruction";
22
22
  readonly PROGRAM_CREATE: "esol.program.create";
23
+ readonly PROGRAM_CREATE_FOR_READ: "esol.program.createForRead";
24
+ readonly PROGRAM_VIEW: "esol.program.view";
25
+ readonly PROGRAM_VIEW_WITH_PROGRAM: "esol.program.viewWithProgram";
23
26
  readonly RPC_GET_ACCOUNT_INFO: "esol.rpc.getAccountInfo";
24
27
  readonly RPC_GET_BALANCE: "esol.rpc.getBalance";
25
28
  readonly RPC_GET_BLOCK: "esol.rpc.getBlock";
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,eAAO,MAAM,QAAQ,GAClB,MAAM,MAAM,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACjB,CAAC;AAKlD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEZ,CAAC"}
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,eAAO,MAAM,QAAQ,GAClB,MAAM,MAAM,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACjB,CAAC;AAKlD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEZ,CAAC"}
@@ -20,6 +20,9 @@ export const SpanNames = {
20
20
  PROGRAM_BUILD: "esol.program.build",
21
21
  PROGRAM_BUILD_INSTRUCTION: "esol.program.buildInstruction",
22
22
  PROGRAM_CREATE: "esol.program.create",
23
+ PROGRAM_CREATE_FOR_READ: "esol.program.createForRead",
24
+ PROGRAM_VIEW: "esol.program.view",
25
+ PROGRAM_VIEW_WITH_PROGRAM: "esol.program.viewWithProgram",
23
26
  RPC_GET_ACCOUNT_INFO: "esol.rpc.getAccountInfo",
24
27
  RPC_GET_BALANCE: "esol.rpc.getBalance",
25
28
  RPC_GET_BLOCK: "esol.rpc.getBlock",
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAC,IAAY,EAAE,UAAoC,EAAE,EAAE,CACvD,CAAU,MAA8B,EAA0B,EAAE,CAClE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAKlD,MAAM,CAAC,MAAM,SAAS,GAAG;IAEvB,gBAAgB,EAAE,sBAAsB;IACxC,oBAAoB,EAAE,0BAA0B;IAChD,aAAa,EAAE,oBAAoB;IAGnC,eAAe,EAAE,qBAAqB;IACtC,iBAAiB,EAAE,uBAAuB;IAC1C,iBAAiB,EAAE,uBAAuB;IAC1C,mBAAmB,EAAE,yBAAyB;IAG9C,iBAAiB,EAAE,uBAAuB;IAC1C,iBAAiB,EAAE,uBAAuB;IAC1C,mBAAmB,EAAE,yBAAyB;IAG9C,gBAAgB,EAAE,sBAAsB;IACxC,mBAAmB,EAAE,yBAAyB;IAG9C,UAAU,EAAE,iBAAiB;IAC7B,kBAAkB,EAAE,wBAAwB;IAC5C,eAAe,EAAE,qBAAqB;IACtC,QAAQ,EAAE,eAAe;IAGzB,aAAa,EAAE,oBAAoB;IACnC,yBAAyB,EAAE,+BAA+B;IAC1D,cAAc,EAAE,qBAAqB;IACrC,oBAAoB,EAAE,yBAAyB;IAE/C,eAAe,EAAE,qBAAqB;IACtC,aAAa,EAAE,mBAAmB;IAClC,oBAAoB,EAAE,yBAAyB;IAC/C,kBAAkB,EAAE,uBAAuB;IAC3C,wBAAwB,EAAE,6BAA6B;IACvD,YAAY,EAAE,kBAAkB;IAGhC,kBAAkB,EAAE,wBAAwB;IAC5C,iBAAiB,EAAE,uBAAuB;IAG1C,oBAAoB,EAAE,0BAA0B;IAChD,aAAa,EAAE,oBAAoB;IACnC,UAAU,EAAE,iBAAiB;IAC7B,gBAAgB,EAAE,sBAAsB;IACxC,iBAAiB,EAAE,uBAAuB;IAC1C,aAAa,EAAE,mBAAmB;IAClC,cAAc,EAAE,oBAAoB;IACpC,aAAa,EAAE,mBAAmB;IAClC,YAAY,EAAE,mBAAmB;IACjC,cAAc,EAAE,qBAAqB;IAGrC,QAAQ,EAAE,eAAe;IACzB,UAAU,EAAE,iBAAiB;IAC7B,yBAAyB,EAAE,8BAA8B;IACzD,OAAO,EAAE,cAAc;IACvB,mBAAmB,EAAE,wBAAwB;IAC7C,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,kBAAkB;CACvB,CAAC","sourcesContent":["import { Effect } from \"effect\";\n\n/**\n * Wrap an effect with a span for tracing.\n */\nexport const withSpan =\n (name: string, attributes?: Record<string, unknown>) =>\n <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.withSpan(name, { attributes })(effect);\n\n/**\n * Common span names for Solana operations.\n */\nexport const SpanNames = {\n // Account Operations\n ACCOUNT_GET_INFO: \"esol.account.getInfo\",\n ACCOUNT_GET_MULTIPLE: \"esol.account.getMultiple\",\n ACCOUNT_WATCH: \"esol.account.watch\",\n\n // Balance Operations\n BALANCE_GET_SOL: \"esol.balance.getSol\",\n BALANCE_GET_TOKEN: \"esol.balance.getToken\",\n BALANCE_WATCH_SOL: \"esol.balance.watchSol\",\n BALANCE_WATCH_TOKEN: \"esol.balance.watchToken\",\n\n // Compute Budget Operations\n COMPUTE_SET_LIMIT: \"esol.compute.setLimit\",\n COMPUTE_SET_PRICE: \"esol.compute.setPrice\",\n EVENT_WATCH_ACCOUNT: \"esol.event.watchAccount\",\n\n // Event Operations\n EVENT_WATCH_LOGS: \"esol.event.watchLogs\",\n EVENT_WATCH_PROGRAM: \"esol.event.watchProgram\",\n\n // PDA Operations\n PDA_DERIVE: \"esol.pda.derive\",\n PDA_DERIVE_ADDRESS: \"esol.pda.deriveAddress\",\n PDA_DERIVE_BUMP: \"esol.pda.deriveBump\",\n PDA_FIND: \"esol.pda.find\",\n\n // Program Operations\n PROGRAM_BUILD: \"esol.program.build\",\n PROGRAM_BUILD_INSTRUCTION: \"esol.program.buildInstruction\",\n PROGRAM_CREATE: \"esol.program.create\",\n RPC_GET_ACCOUNT_INFO: \"esol.rpc.getAccountInfo\",\n // RPC Operations\n RPC_GET_BALANCE: \"esol.rpc.getBalance\",\n RPC_GET_BLOCK: \"esol.rpc.getBlock\",\n RPC_GET_BLOCK_HEIGHT: \"esol.rpc.getBlockHeight\",\n RPC_GET_BLOCK_TIME: \"esol.rpc.getBlockTime\",\n RPC_GET_PROGRAM_ACCOUNTS: \"esol.rpc.getProgramAccounts\",\n RPC_GET_SLOT: \"esol.rpc.getSlot\",\n\n // Signer Operations\n SIGNER_GET_ADDRESS: \"esol.signer.getAddress\",\n SIGNER_GET_SIGNER: \"esol.signer.getSigner\",\n\n // Token Operations\n TOKEN_ACCOUNT_EXISTS: \"esol.token.accountExists\",\n TOKEN_APPROVE: \"esol.token.approve\",\n TOKEN_BURN: \"esol.token.burn\",\n TOKEN_CREATE_ATA: \"esol.token.createAta\",\n TOKEN_GET_ACCOUNT: \"esol.token.getAccount\",\n TOKEN_GET_ATA: \"esol.token.getAta\",\n TOKEN_GET_MINT: \"esol.token.getMint\",\n TOKEN_MINT_TO: \"esol.token.mintTo\",\n TOKEN_REVOKE: \"esol.token.revoke\",\n TOKEN_TRANSFER: \"esol.token.transfer\",\n\n // Transaction Operations\n TX_BUILD: \"esol.tx.build\",\n TX_CONFIRM: \"esol.tx.confirm\",\n TX_GET_SIGNATURE_STATUSES: \"esol.tx.getSignatureStatuses\",\n TX_SEND: \"esol.tx.send\",\n TX_SEND_AND_CONFIRM: \"esol.tx.sendAndConfirm\",\n TX_SIGN: \"esol.tx.sign\",\n TX_SIMULATE: \"esol.tx.simulate\",\n} as const;\n"]}
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAC,IAAY,EAAE,UAAoC,EAAE,EAAE,CACvD,CAAU,MAA8B,EAA0B,EAAE,CAClE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAKlD,MAAM,CAAC,MAAM,SAAS,GAAG;IAEvB,gBAAgB,EAAE,sBAAsB;IACxC,oBAAoB,EAAE,0BAA0B;IAChD,aAAa,EAAE,oBAAoB;IAGnC,eAAe,EAAE,qBAAqB;IACtC,iBAAiB,EAAE,uBAAuB;IAC1C,iBAAiB,EAAE,uBAAuB;IAC1C,mBAAmB,EAAE,yBAAyB;IAG9C,iBAAiB,EAAE,uBAAuB;IAC1C,iBAAiB,EAAE,uBAAuB;IAC1C,mBAAmB,EAAE,yBAAyB;IAG9C,gBAAgB,EAAE,sBAAsB;IACxC,mBAAmB,EAAE,yBAAyB;IAG9C,UAAU,EAAE,iBAAiB;IAC7B,kBAAkB,EAAE,wBAAwB;IAC5C,eAAe,EAAE,qBAAqB;IACtC,QAAQ,EAAE,eAAe;IAGzB,aAAa,EAAE,oBAAoB;IACnC,yBAAyB,EAAE,+BAA+B;IAC1D,cAAc,EAAE,qBAAqB;IACrC,uBAAuB,EAAE,4BAA4B;IACrD,YAAY,EAAE,mBAAmB;IACjC,yBAAyB,EAAE,8BAA8B;IAGzD,oBAAoB,EAAE,yBAAyB;IAC/C,eAAe,EAAE,qBAAqB;IACtC,aAAa,EAAE,mBAAmB;IAClC,oBAAoB,EAAE,yBAAyB;IAC/C,kBAAkB,EAAE,uBAAuB;IAC3C,wBAAwB,EAAE,6BAA6B;IACvD,YAAY,EAAE,kBAAkB;IAGhC,kBAAkB,EAAE,wBAAwB;IAC5C,iBAAiB,EAAE,uBAAuB;IAG1C,oBAAoB,EAAE,0BAA0B;IAChD,aAAa,EAAE,oBAAoB;IACnC,UAAU,EAAE,iBAAiB;IAC7B,gBAAgB,EAAE,sBAAsB;IACxC,iBAAiB,EAAE,uBAAuB;IAC1C,aAAa,EAAE,mBAAmB;IAClC,cAAc,EAAE,oBAAoB;IACpC,aAAa,EAAE,mBAAmB;IAClC,YAAY,EAAE,mBAAmB;IACjC,cAAc,EAAE,qBAAqB;IAGrC,QAAQ,EAAE,eAAe;IACzB,UAAU,EAAE,iBAAiB;IAC7B,yBAAyB,EAAE,8BAA8B;IACzD,OAAO,EAAE,cAAc;IACvB,mBAAmB,EAAE,wBAAwB;IAC7C,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,kBAAkB;CACvB,CAAC","sourcesContent":["import { Effect } from \"effect\";\n\n/**\n * Wrap an effect with a span for tracing.\n */\nexport const withSpan =\n (name: string, attributes?: Record<string, unknown>) =>\n <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.withSpan(name, { attributes })(effect);\n\n/**\n * Common span names for Solana operations.\n */\nexport const SpanNames = {\n // Account Operations\n ACCOUNT_GET_INFO: \"esol.account.getInfo\",\n ACCOUNT_GET_MULTIPLE: \"esol.account.getMultiple\",\n ACCOUNT_WATCH: \"esol.account.watch\",\n\n // Balance Operations\n BALANCE_GET_SOL: \"esol.balance.getSol\",\n BALANCE_GET_TOKEN: \"esol.balance.getToken\",\n BALANCE_WATCH_SOL: \"esol.balance.watchSol\",\n BALANCE_WATCH_TOKEN: \"esol.balance.watchToken\",\n\n // Compute Budget Operations\n COMPUTE_SET_LIMIT: \"esol.compute.setLimit\",\n COMPUTE_SET_PRICE: \"esol.compute.setPrice\",\n EVENT_WATCH_ACCOUNT: \"esol.event.watchAccount\",\n\n // Event Operations\n EVENT_WATCH_LOGS: \"esol.event.watchLogs\",\n EVENT_WATCH_PROGRAM: \"esol.event.watchProgram\",\n\n // PDA Operations\n PDA_DERIVE: \"esol.pda.derive\",\n PDA_DERIVE_ADDRESS: \"esol.pda.deriveAddress\",\n PDA_DERIVE_BUMP: \"esol.pda.deriveBump\",\n PDA_FIND: \"esol.pda.find\",\n\n // Program Operations\n PROGRAM_BUILD: \"esol.program.build\",\n PROGRAM_BUILD_INSTRUCTION: \"esol.program.buildInstruction\",\n PROGRAM_CREATE: \"esol.program.create\",\n PROGRAM_CREATE_FOR_READ: \"esol.program.createForRead\",\n PROGRAM_VIEW: \"esol.program.view\",\n PROGRAM_VIEW_WITH_PROGRAM: \"esol.program.viewWithProgram\",\n\n // RPC Operations\n RPC_GET_ACCOUNT_INFO: \"esol.rpc.getAccountInfo\",\n RPC_GET_BALANCE: \"esol.rpc.getBalance\",\n RPC_GET_BLOCK: \"esol.rpc.getBlock\",\n RPC_GET_BLOCK_HEIGHT: \"esol.rpc.getBlockHeight\",\n RPC_GET_BLOCK_TIME: \"esol.rpc.getBlockTime\",\n RPC_GET_PROGRAM_ACCOUNTS: \"esol.rpc.getProgramAccounts\",\n RPC_GET_SLOT: \"esol.rpc.getSlot\",\n\n // Signer Operations\n SIGNER_GET_ADDRESS: \"esol.signer.getAddress\",\n SIGNER_GET_SIGNER: \"esol.signer.getSigner\",\n\n // Token Operations\n TOKEN_ACCOUNT_EXISTS: \"esol.token.accountExists\",\n TOKEN_APPROVE: \"esol.token.approve\",\n TOKEN_BURN: \"esol.token.burn\",\n TOKEN_CREATE_ATA: \"esol.token.createAta\",\n TOKEN_GET_ACCOUNT: \"esol.token.getAccount\",\n TOKEN_GET_ATA: \"esol.token.getAta\",\n TOKEN_GET_MINT: \"esol.token.getMint\",\n TOKEN_MINT_TO: \"esol.token.mintTo\",\n TOKEN_REVOKE: \"esol.token.revoke\",\n TOKEN_TRANSFER: \"esol.token.transfer\",\n\n // Transaction Operations\n TX_BUILD: \"esol.tx.build\",\n TX_CONFIRM: \"esol.tx.confirm\",\n TX_GET_SIGNATURE_STATUSES: \"esol.tx.getSignatureStatuses\",\n TX_SEND: \"esol.tx.send\",\n TX_SEND_AND_CONFIRM: \"esol.tx.sendAndConfirm\",\n TX_SIGN: \"esol.tx.sign\",\n TX_SIMULATE: \"esol.tx.simulate\",\n} as const;\n"]}
@@ -10,8 +10,8 @@ export type { MockSignerServiceConfig } from "./mock-signer-service.js";
10
10
  export { makeMockSignerServiceLayer } from "./mock-signer-service.js";
11
11
  export type { MockTokenServiceConfig } from "./mock-token-service.js";
12
12
  export { makeMockTokenServiceLayer } from "./mock-token-service.js";
13
- export type { MockTransactionServiceConfig } from "./mock-transaction-service.js";
14
- export { makeMockTransactionServiceLayer } from "./mock-transaction-service.js";
13
+ export type { MockTransactionServiceConfig } from "./mock-tx-service.js";
14
+ export { makeMockTransactionServiceLayer } from "./mock-tx-service.js";
15
15
  export type { TestLayerConfig } from "./test-layer.js";
16
16
  export { makeEffectSolanaTestLayer } from "./test-layer.js";
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing-kit/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,cAAc,EACd,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAClG,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAGhF,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing-kit/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,cAAc,EACd,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAClG,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAGvE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -5,6 +5,6 @@ export { makeMockPdaServiceLayer } from "./mock-pda-service.js";
5
5
  export { makeMockRpc, makeMockRpcServiceLayer } from "./mock-rpc-service.js";
6
6
  export { makeMockSignerServiceLayer } from "./mock-signer-service.js";
7
7
  export { makeMockTokenServiceLayer } from "./mock-token-service.js";
8
- export { makeMockTransactionServiceLayer } from "./mock-transaction-service.js";
8
+ export { makeMockTransactionServiceLayer } from "./mock-tx-service.js";
9
9
  export { makeEffectSolanaTestLayer } from "./test-layer.js";
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing-kit/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,cAAc,EACd,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAElG,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,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;AAIhF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["/**\n * Testing Kit for effect-solana\n *\n * This module exports mock builders and test utilities for downstream\n * consumers to easily test code that depends on effect-solana services.\n *\n * @example\n * ```typescript\n * import { makeEffectSolanaTestLayer } from \"@prb/effect-solana/testing-kit\";\n *\n * const testLayer = makeEffectSolanaTestLayer({\n * balanceService: {\n * getSolBalance: () => Effect.succeed(1000000000n as Lamports),\n * },\n * });\n * ```\n */\n\n// Fixtures\nexport {\n TEST_ADDRESS,\n TEST_ADDRESS_2,\n TEST_CLUSTER,\n TEST_MINT,\n TEST_SIGNATURE,\n TEST_WALLET,\n} from \"./_fixtures/addresses.js\";\n\n// Test helpers\nexport { assertLeft, assertRight, expectTaggedFailure, makeMockServiceLayer } from \"./helpers.js\";\nexport type { MockBalanceServiceConfig } from \"./mock-balance-service.js\";\nexport { makeMockBalanceServiceLayer } from \"./mock-balance-service.js\";\nexport type { MockPdaServiceConfig } from \"./mock-pda-service.js\";\nexport { makeMockPdaServiceLayer } from \"./mock-pda-service.js\";\n// Mock layer builders\nexport type { MockRpcServiceConfig } from \"./mock-rpc-service.js\";\nexport { makeMockRpc, makeMockRpcServiceLayer } from \"./mock-rpc-service.js\";\nexport type { MockSignerServiceConfig } from \"./mock-signer-service.js\";\nexport { makeMockSignerServiceLayer } from \"./mock-signer-service.js\";\nexport type { MockTokenServiceConfig } from \"./mock-token-service.js\";\nexport { makeMockTokenServiceLayer } from \"./mock-token-service.js\";\nexport type { MockTransactionServiceConfig } from \"./mock-transaction-service.js\";\nexport { makeMockTransactionServiceLayer } from \"./mock-transaction-service.js\";\n\n// Test layer composer\nexport type { TestLayerConfig } from \"./test-layer.js\";\nexport { makeEffectSolanaTestLayer } from \"./test-layer.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing-kit/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,cAAc,EACd,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAElG,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAIvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["/**\n * Testing Kit for effect-solana\n *\n * This module exports mock builders and test utilities for downstream\n * consumers to easily test code that depends on effect-solana services.\n *\n * @example\n * ```typescript\n * import { makeEffectSolanaTestLayer } from \"@prb/effect-solana/testing-kit\";\n *\n * const testLayer = makeEffectSolanaTestLayer({\n * balanceService: {\n * getSolBalance: () => Effect.succeed(1000000000n as Lamports),\n * },\n * });\n * ```\n */\n\n// Fixtures\nexport {\n TEST_ADDRESS,\n TEST_ADDRESS_2,\n TEST_CLUSTER,\n TEST_MINT,\n TEST_SIGNATURE,\n TEST_WALLET,\n} from \"./_fixtures/addresses.js\";\n\n// Test helpers\nexport { assertLeft, assertRight, expectTaggedFailure, makeMockServiceLayer } from \"./helpers.js\";\nexport type { MockBalanceServiceConfig } from \"./mock-balance-service.js\";\nexport { makeMockBalanceServiceLayer } from \"./mock-balance-service.js\";\nexport type { MockPdaServiceConfig } from \"./mock-pda-service.js\";\nexport { makeMockPdaServiceLayer } from \"./mock-pda-service.js\";\n// Mock layer builders\nexport type { MockRpcServiceConfig } from \"./mock-rpc-service.js\";\nexport { makeMockRpc, makeMockRpcServiceLayer } from \"./mock-rpc-service.js\";\nexport type { MockSignerServiceConfig } from \"./mock-signer-service.js\";\nexport { makeMockSignerServiceLayer } from \"./mock-signer-service.js\";\nexport type { MockTokenServiceConfig } from \"./mock-token-service.js\";\nexport { makeMockTokenServiceLayer } from \"./mock-token-service.js\";\nexport type { MockTransactionServiceConfig } from \"./mock-tx-service.js\";\nexport { makeMockTransactionServiceLayer } from \"./mock-tx-service.js\";\n\n// Test layer composer\nexport type { TestLayerConfig } from \"./test-layer.js\";\nexport { makeEffectSolanaTestLayer } from \"./test-layer.js\";\n"]}
@@ -1,8 +1,8 @@
1
1
  import type { Address, Lamports } from "@solana/kit";
2
2
  import type { Layer } from "effect";
3
3
  import { Effect, Stream } from "effect";
4
- import { BalanceService } from "../balance/index.js";
5
- import type { RpcError } from "../core/errors/index.js";
4
+ import { BalanceService } from "#src/balance/index.js";
5
+ import type { RpcError } from "#src/core/errors/index.js";
6
6
  export type MockBalanceServiceConfig = {
7
7
  getSolBalance?: (address: Address) => Effect.Effect<Lamports, RpcError>;
8
8
  hasSufficientBalance?: (params: {
@@ -1 +1 @@
1
- {"version":3,"file":"mock-balance-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-balance-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAS3D,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxE,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC9B,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,QAAQ,CAAC;KACpB,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;CACxD,CAAC;AAiCF,eAAO,MAAM,2BAA2B,GACtC,SAAQ,wBAA6B,KACpC,KAAK,CAAC,KAAK,CAAC,cAAc,CACoD,CAAC"}
1
+ {"version":3,"file":"mock-balance-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-balance-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAS1D,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxE,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC9B,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,QAAQ,CAAC;KACpB,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;CACxD,CAAC;AAiCF,eAAO,MAAM,2BAA2B,GACtC,SAAQ,wBAA6B,KACpC,KAAK,CAAC,KAAK,CAAC,cAAc,CACoD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Effect, Stream } from "effect";
2
- import { BalanceService } from "../balance/index.js";
2
+ import { BalanceService } from "#src/balance/index.js";
3
3
  import { makeMockServiceLayer } from "./helpers.js";
4
4
  const defaultConfig = {
5
5
  getSolBalance: () => Effect.succeed(1000000000n),
@@ -1 +1 @@
1
- {"version":3,"file":"mock-balance-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-balance-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAoBpD,MAAM,aAAa,GAAuC;IACxD,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAuB,CAAC;IAC5D,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAuB,CAAC,CAAC;CACzE,CAAC;AA2BF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,SAAmC,EAAE,EACR,EAAE,CAC/B,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC","sourcesContent":["import type { Address, Lamports } from \"@solana/kit\";\nimport type { Layer } from \"effect\";\nimport { Effect, Stream } from \"effect\";\nimport { BalanceService } from \"@/src/balance/index.js\";\nimport type { RpcError } from \"@/src/core/errors/index.js\";\nimport { makeMockServiceLayer } from \"./helpers.js\";\n\n/**\n * Configuration for the mock BalanceService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockBalanceServiceConfig = {\n getSolBalance?: (address: Address) => Effect.Effect<Lamports, RpcError>;\n hasSufficientBalance?: (params: {\n address: Address;\n required: Lamports;\n }) => Effect.Effect<boolean, RpcError>;\n watchBalance?: (params: {\n address: Address;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Lamports, RpcError>>;\n};\n\nconst defaultConfig: Required<MockBalanceServiceConfig> = {\n getSolBalance: () => Effect.succeed(1000000000n as Lamports), // 1 SOL\n hasSufficientBalance: () => Effect.succeed(true),\n watchBalance: () => Effect.succeed(Stream.make(1000000000n as Lamports)),\n};\n\n/**\n * Creates a mock BalanceService 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 = makeMockBalanceServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockBalanceServiceLayer({\n * getSolBalance: () => Effect.succeed(5000000000n as Lamports), // 5 SOL\n * hasSufficientBalance: () => Effect.succeed(false),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const balanceService = yield* BalanceService;\n * const balance = yield* balanceService.getSolBalance(address);\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockBalanceServiceLayer = (\n config: MockBalanceServiceConfig = {}\n): Layer.Layer<BalanceService> =>\n makeMockServiceLayer(BalanceService, defaultConfig, config, (merged) => merged);\n"]}
1
+ {"version":3,"file":"mock-balance-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-balance-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAoBpD,MAAM,aAAa,GAAuC;IACxD,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAuB,CAAC;IAC5D,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAuB,CAAC,CAAC;CACzE,CAAC;AA2BF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,SAAmC,EAAE,EACR,EAAE,CAC/B,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC","sourcesContent":["import type { Address, Lamports } from \"@solana/kit\";\nimport type { Layer } from \"effect\";\nimport { Effect, Stream } from \"effect\";\nimport { BalanceService } from \"#src/balance/index.js\";\nimport type { RpcError } from \"#src/core/errors/index.js\";\nimport { makeMockServiceLayer } from \"./helpers.js\";\n\n/**\n * Configuration for the mock BalanceService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockBalanceServiceConfig = {\n getSolBalance?: (address: Address) => Effect.Effect<Lamports, RpcError>;\n hasSufficientBalance?: (params: {\n address: Address;\n required: Lamports;\n }) => Effect.Effect<boolean, RpcError>;\n watchBalance?: (params: {\n address: Address;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Lamports, RpcError>>;\n};\n\nconst defaultConfig: Required<MockBalanceServiceConfig> = {\n getSolBalance: () => Effect.succeed(1000000000n as Lamports), // 1 SOL\n hasSufficientBalance: () => Effect.succeed(true),\n watchBalance: () => Effect.succeed(Stream.make(1000000000n as Lamports)),\n};\n\n/**\n * Creates a mock BalanceService 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 = makeMockBalanceServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockBalanceServiceLayer({\n * getSolBalance: () => Effect.succeed(5000000000n as Lamports), // 5 SOL\n * hasSufficientBalance: () => Effect.succeed(false),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const balanceService = yield* BalanceService;\n * const balance = yield* balanceService.getSolBalance(address);\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockBalanceServiceLayer = (\n config: MockBalanceServiceConfig = {}\n): Layer.Layer<BalanceService> =>\n makeMockServiceLayer(BalanceService, defaultConfig, config, (merged) => merged);\n"]}
@@ -1,8 +1,8 @@
1
1
  import type { Address, ProgramDerivedAddressBump } from "@solana/addresses";
2
2
  import type { Layer } from "effect";
3
3
  import { Effect } from "effect";
4
- import type { PdaSeed, ProgramDerivedAddress } from "../pda/index.js";
5
- import { PdaService } from "../pda/index.js";
4
+ import type { PdaSeed, ProgramDerivedAddress } from "#src/pda/index.js";
5
+ import { PdaService } from "#src/pda/index.js";
6
6
  export type MockPdaServiceConfig = {
7
7
  derive?: (seeds: readonly PdaSeed[], programAddress: Address) => Effect.Effect<ProgramDerivedAddress>;
8
8
  deriveAddress?: (seeds: readonly PdaSeed[], programAddress: Address) => Effect.Effect<Address>;
@@ -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,oBAAoB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUhD,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
+ {"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 "../pda/index.js";
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,oBAAoB,CAAC;AAChD,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
+ {"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 "../core/errors/index.js";
5
- import { RpcService } from "../rpc/index.js";
6
- import type { Cluster } from "../types/index.js";
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,4BAA4B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAUpD,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
+ {"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 "../core/errors/index.js";
4
- import { RpcService } from "../rpc/index.js";
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":"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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
+ {"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 "../core/errors/index.js";
5
- import { WalletNotConnectedError } from "../core/errors/index.js";
6
- import { SignerService } from "../signer/index.js";
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,4BAA4B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAStD,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
+ {"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 "../core/errors/index.js";
3
- import { SignerService } from "../signer/index.js";
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,4BAA4B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,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
+ {"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 "../core/errors/index.js";
5
- import type { ATAParams, MintAccount, TokenAccount } from "../token/index.js";
6
- import { TokenService } from "../token/index.js";
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,4BAA4B,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUpD,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
+ {"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 "../token/index.js";
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 = {