@sly-rentals/core 5.4.0 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/dist/api.json +13092 -9148
  2. package/dist/cjs/audit/events-registry.js +3 -0
  3. package/dist/cjs/audit/events-registry.js.map +1 -1
  4. package/dist/cjs/audit/events.js +41 -0
  5. package/dist/cjs/audit/events.js.map +1 -1
  6. package/dist/cjs/doctor/contract.js +297 -0
  7. package/dist/cjs/doctor/contract.js.map +1 -0
  8. package/dist/cjs/doctor/contract.test.js +143 -0
  9. package/dist/cjs/doctor/contract.test.js.map +1 -0
  10. package/dist/cjs/doctor/index.js +18 -0
  11. package/dist/cjs/doctor/index.js.map +1 -0
  12. package/dist/cjs/generated/codama/errors/srsly.js +10 -1
  13. package/dist/cjs/generated/codama/errors/srsly.js.map +1 -1
  14. package/dist/cjs/generated/codama/instructions/closeContract.js +6 -1
  15. package/dist/cjs/generated/codama/instructions/closeContract.js.map +1 -1
  16. package/dist/cjs/generated/codama/instructions/contractDoctorFiber.js +202 -0
  17. package/dist/cjs/generated/codama/instructions/contractDoctorFiber.js.map +1 -0
  18. package/dist/cjs/generated/codama/instructions/index.js +1 -0
  19. package/dist/cjs/generated/codama/instructions/index.js.map +1 -1
  20. package/dist/cjs/generated/codama/instructions/processContract.js.map +1 -1
  21. package/dist/cjs/generated/codama/programs/srsly.js +23 -19
  22. package/dist/cjs/generated/codama/programs/srsly.js.map +1 -1
  23. package/dist/cjs/generated/codama/types/contractFiberDoctored.js +31 -0
  24. package/dist/cjs/generated/codama/types/contractFiberDoctored.js.map +1 -0
  25. package/dist/cjs/generated/codama/types/index.js +3 -0
  26. package/dist/cjs/generated/codama/types/index.js.map +1 -1
  27. package/dist/cjs/generated/codama/types/reservationForceClosed.js +37 -0
  28. package/dist/cjs/generated/codama/types/reservationForceClosed.js.map +1 -0
  29. package/dist/cjs/generated/codama/types/serializableAccountMeta.js +31 -0
  30. package/dist/cjs/generated/codama/types/serializableAccountMeta.js.map +1 -0
  31. package/dist/cjs/idl/srsly.json +301 -2
  32. package/dist/cjs/instructions/closeContract.js +56 -12
  33. package/dist/cjs/instructions/closeContract.js.map +1 -1
  34. package/dist/cjs/instructions/closeContract.test.js +117 -0
  35. package/dist/cjs/instructions/closeContract.test.js.map +1 -0
  36. package/dist/cjs/instructions/closeRental.js +7 -4
  37. package/dist/cjs/instructions/closeRental.js.map +1 -1
  38. package/dist/cjs/instructions/contractDoctorFiber.js +75 -0
  39. package/dist/cjs/instructions/contractDoctorFiber.js.map +1 -0
  40. package/dist/cjs/instructions/index.js +3 -1
  41. package/dist/cjs/instructions/index.js.map +1 -1
  42. package/dist/cjs/kit/index.js +1 -0
  43. package/dist/cjs/kit/index.js.map +1 -1
  44. package/dist/cjs/legacy/index.js +3 -1
  45. package/dist/cjs/legacy/index.js.map +1 -1
  46. package/dist/cjs/package.json +1 -1
  47. package/dist/cjs/utils/config.js +48 -11
  48. package/dist/cjs/utils/config.js.map +1 -1
  49. package/dist/cjs/utils/config.test.js +86 -0
  50. package/dist/cjs/utils/config.test.js.map +1 -0
  51. package/dist/cjs/version.js +1 -1
  52. package/dist/esm/audit/events-registry.js +3 -0
  53. package/dist/esm/audit/events-registry.js.map +1 -1
  54. package/dist/esm/audit/events.js +41 -0
  55. package/dist/esm/audit/events.js.map +1 -1
  56. package/dist/esm/doctor/contract.js +292 -0
  57. package/dist/esm/doctor/contract.js.map +1 -0
  58. package/dist/esm/doctor/contract.test.js +141 -0
  59. package/dist/esm/doctor/contract.test.js.map +1 -0
  60. package/dist/esm/doctor/index.js +12 -0
  61. package/dist/esm/doctor/index.js.map +1 -0
  62. package/dist/esm/generated/codama/errors/srsly.js +9 -0
  63. package/dist/esm/generated/codama/errors/srsly.js.map +1 -1
  64. package/dist/esm/generated/codama/instructions/closeContract.js +6 -1
  65. package/dist/esm/generated/codama/instructions/closeContract.js.map +1 -1
  66. package/dist/esm/generated/codama/instructions/contractDoctorFiber.js +192 -0
  67. package/dist/esm/generated/codama/instructions/contractDoctorFiber.js.map +1 -0
  68. package/dist/esm/generated/codama/instructions/index.js +1 -0
  69. package/dist/esm/generated/codama/instructions/index.js.map +1 -1
  70. package/dist/esm/generated/codama/instructions/processContract.js.map +1 -1
  71. package/dist/esm/generated/codama/programs/srsly.js +23 -19
  72. package/dist/esm/generated/codama/programs/srsly.js.map +1 -1
  73. package/dist/esm/generated/codama/types/contractFiberDoctored.js +26 -0
  74. package/dist/esm/generated/codama/types/contractFiberDoctored.js.map +1 -0
  75. package/dist/esm/generated/codama/types/index.js +3 -0
  76. package/dist/esm/generated/codama/types/index.js.map +1 -1
  77. package/dist/esm/generated/codama/types/reservationForceClosed.js +32 -0
  78. package/dist/esm/generated/codama/types/reservationForceClosed.js.map +1 -0
  79. package/dist/esm/generated/codama/types/serializableAccountMeta.js +26 -0
  80. package/dist/esm/generated/codama/types/serializableAccountMeta.js.map +1 -0
  81. package/dist/esm/idl/srsly.json +301 -2
  82. package/dist/esm/instructions/closeContract.js +57 -13
  83. package/dist/esm/instructions/closeContract.js.map +1 -1
  84. package/dist/esm/instructions/closeContract.test.js +115 -0
  85. package/dist/esm/instructions/closeContract.test.js.map +1 -0
  86. package/dist/esm/instructions/closeRental.js +7 -4
  87. package/dist/esm/instructions/closeRental.js.map +1 -1
  88. package/dist/esm/instructions/contractDoctorFiber.js +72 -0
  89. package/dist/esm/instructions/contractDoctorFiber.js.map +1 -0
  90. package/dist/esm/instructions/index.js +1 -0
  91. package/dist/esm/instructions/index.js.map +1 -1
  92. package/dist/esm/kit/index.js +1 -0
  93. package/dist/esm/kit/index.js.map +1 -1
  94. package/dist/esm/legacy/index.js +2 -0
  95. package/dist/esm/legacy/index.js.map +1 -1
  96. package/dist/esm/package.json +1 -1
  97. package/dist/esm/utils/config.js +49 -12
  98. package/dist/esm/utils/config.js.map +1 -1
  99. package/dist/esm/utils/config.test.js +84 -0
  100. package/dist/esm/utils/config.test.js.map +1 -0
  101. package/dist/esm/version.js +1 -1
  102. package/dist/idl/srsly.json +301 -2
  103. package/dist/types/audit/events-registry.d.ts +1 -1
  104. package/dist/types/audit/events-registry.d.ts.map +1 -1
  105. package/dist/types/audit/events.d.ts.map +1 -1
  106. package/dist/types/audit/index.d.ts +1 -1
  107. package/dist/types/audit/index.d.ts.map +1 -1
  108. package/dist/types/audit/types.d.ts +46 -1
  109. package/dist/types/audit/types.d.ts.map +1 -1
  110. package/dist/types/doctor/contract.d.ts +133 -0
  111. package/dist/types/doctor/contract.d.ts.map +1 -0
  112. package/dist/types/doctor/contract.test.d.ts +2 -0
  113. package/dist/types/doctor/contract.test.d.ts.map +1 -0
  114. package/dist/types/doctor/index.d.ts +12 -0
  115. package/dist/types/doctor/index.d.ts.map +1 -0
  116. package/dist/types/generated/codama/errors/srsly.d.ts +6 -1
  117. package/dist/types/generated/codama/errors/srsly.d.ts.map +1 -1
  118. package/dist/types/generated/codama/instructions/closeContract.d.ts +34 -12
  119. package/dist/types/generated/codama/instructions/closeContract.d.ts.map +1 -1
  120. package/dist/types/generated/codama/instructions/contractDoctorFiber.d.ts +154 -0
  121. package/dist/types/generated/codama/instructions/contractDoctorFiber.d.ts.map +1 -0
  122. package/dist/types/generated/codama/instructions/index.d.ts +1 -0
  123. package/dist/types/generated/codama/instructions/index.d.ts.map +1 -1
  124. package/dist/types/generated/codama/instructions/processContract.d.ts +15 -3
  125. package/dist/types/generated/codama/instructions/processContract.d.ts.map +1 -1
  126. package/dist/types/generated/codama/programs/srsly.d.ts +23 -20
  127. package/dist/types/generated/codama/programs/srsly.d.ts.map +1 -1
  128. package/dist/types/generated/codama/types/contractFiberDoctored.d.ts +22 -0
  129. package/dist/types/generated/codama/types/contractFiberDoctored.d.ts.map +1 -0
  130. package/dist/types/generated/codama/types/index.d.ts +3 -0
  131. package/dist/types/generated/codama/types/index.d.ts.map +1 -1
  132. package/dist/types/generated/codama/types/reservationForceClosed.d.ts +36 -0
  133. package/dist/types/generated/codama/types/reservationForceClosed.d.ts.map +1 -0
  134. package/dist/types/generated/codama/types/serializableAccountMeta.d.ts +19 -0
  135. package/dist/types/generated/codama/types/serializableAccountMeta.d.ts.map +1 -0
  136. package/dist/types/instructions/closeContract.d.ts +13 -3
  137. package/dist/types/instructions/closeContract.d.ts.map +1 -1
  138. package/dist/types/instructions/closeContract.test.d.ts +2 -0
  139. package/dist/types/instructions/closeContract.test.d.ts.map +1 -0
  140. package/dist/types/instructions/closeRental.d.ts +11 -0
  141. package/dist/types/instructions/closeRental.d.ts.map +1 -1
  142. package/dist/types/instructions/contractDoctorFiber.d.ts +87 -0
  143. package/dist/types/instructions/contractDoctorFiber.d.ts.map +1 -0
  144. package/dist/types/instructions/index.d.ts +1 -0
  145. package/dist/types/instructions/index.d.ts.map +1 -1
  146. package/dist/types/kit/index.d.ts +1 -0
  147. package/dist/types/kit/index.d.ts.map +1 -1
  148. package/dist/types/legacy/index.d.ts +2 -0
  149. package/dist/types/legacy/index.d.ts.map +1 -1
  150. package/dist/types/utils/config.d.ts +5 -0
  151. package/dist/types/utils/config.d.ts.map +1 -1
  152. package/dist/types/utils/config.test.d.ts +2 -0
  153. package/dist/types/utils/config.test.d.ts.map +1 -0
  154. package/dist/types/version.d.ts +1 -1
  155. package/package.json +1 -1
@@ -0,0 +1,115 @@
1
+ import { describe, expect, it, vi, beforeEach } from 'vitest';
2
+ vi.mock('../utils/contractSnapshot', () => ({
3
+ resolveContractSnapshot: vi.fn(),
4
+ }));
5
+ vi.mock('./closeRental', () => ({
6
+ closeRental: vi.fn(),
7
+ }));
8
+ vi.mock('../accounts/thread', () => ({
9
+ fetchThreadByAddress: vi.fn(),
10
+ }));
11
+ import { resolveContractSnapshot } from '../utils/contractSnapshot';
12
+ import { closeRental } from './closeRental';
13
+ import { fetchThreadByAddress } from '../accounts/thread';
14
+ import { closeContract } from './closeContract';
15
+ import { CLOSE_CONTRACT_DISCRIMINATOR } from '../generated/codama/instructions/closeContract';
16
+ import { CLOSE_CONTRACT_THREAD_DISCRIMINATOR } from '../generated/codama/instructions/closeContractThread';
17
+ const SYSTEM = '11111111111111111111111111111111';
18
+ const CONTRACT_ADDR = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
19
+ const ACTIVE_ADDR = 'So11111111111111111111111111111111111111112';
20
+ const QUEUED_ADDR = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';
21
+ const OWNER_ADDR = 'BPFLoader2111111111111111111111111111111111';
22
+ const MINT_ADDR = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';
23
+ const THREAD_ADDR = 'Sysvar1nstructions1111111111111111111111111';
24
+ const OWNER_SIGNER = {
25
+ address: OWNER_ADDR,
26
+ signTransactionMessage: vi.fn(),
27
+ };
28
+ const makeConfig = () => ({ atlasMint: MINT_ADDR, slyvault: MINT_ADDR });
29
+ const makeContract = (overrides = {}) => ({
30
+ owner: OWNER_ADDR,
31
+ fleet: MINT_ADDR,
32
+ gameId: MINT_ADDR,
33
+ activeRental: SYSTEM,
34
+ queuedRental: SYSTEM,
35
+ thread: SYSTEM,
36
+ managedTokenAccount: MINT_ADDR,
37
+ ...overrides,
38
+ });
39
+ const makeRental = (overrides = {}) => ({
40
+ borrower: OWNER_ADDR,
41
+ borrowerProfile: MINT_ADDR,
42
+ endTime: 0n,
43
+ ...overrides,
44
+ });
45
+ /** An expired active rental plus a queued reservation — the tricky branch. */
46
+ function mockExpiredActiveWithQueued(thread) {
47
+ vi.mocked(resolveContractSnapshot).mockResolvedValue({
48
+ config: { data: makeConfig(), address: 'CFG' },
49
+ contract: {
50
+ data: makeContract({
51
+ activeRental: ACTIVE_ADDR,
52
+ queuedRental: QUEUED_ADDR,
53
+ thread,
54
+ }),
55
+ address: CONTRACT_ADDR,
56
+ },
57
+ // endTime in the past — Date.now() is far beyond the epoch.
58
+ activeRental: { data: makeRental({ endTime: 1n }), address: ACTIVE_ADDR },
59
+ queuedRental: { data: makeRental(), address: QUEUED_ADDR },
60
+ nowSeconds: 1_700_000_000,
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+ });
63
+ vi.mocked(closeRental).mockResolvedValue({
64
+ instructions: [{ programAddress: CONTRACT_ADDR, accounts: [], data: new Uint8Array() }],
65
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
+ });
67
+ vi.mocked(fetchThreadByAddress).mockResolvedValue({
68
+ data: { fiberIds: [0, 1] },
69
+ address: thread,
70
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
+ });
72
+ }
73
+ beforeEach(() => {
74
+ vi.clearAllMocks();
75
+ });
76
+ describe('closeContract — expired active + queued reservation', () => {
77
+ it('suppresses the inline activation on the settling closeRental', async () => {
78
+ // If closeRental promotes the queued challenger, the contract ends up with
79
+ // a brand-new live rental and the closes that follow can only re-latch
80
+ // `to_close`. The settle must take Path A.
81
+ mockExpiredActiveWithQueued(THREAD_ADDR);
82
+ await closeContract({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
83
+ expect(closeRental).toHaveBeenCalledTimes(1);
84
+ expect(vi.mocked(closeRental).mock.calls[0][0]).toMatchObject({
85
+ contract: CONTRACT_ADDR,
86
+ activateQueued: false,
87
+ });
88
+ });
89
+ it('emits exactly one closeContract instruction', async () => {
90
+ // The old composition emitted two: the first was expected to force-close
91
+ // the queue and the second to finish the job. Since the first already
92
+ // finishes it, the second could only fail or no-op.
93
+ mockExpiredActiveWithQueued(THREAD_ADDR);
94
+ const result = await closeContract({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
95
+ const startsWith = (data, disc) => data instanceof Uint8Array && disc.every((b, i) => data[i] === b);
96
+ const closeContractIxs = result.instructions.filter(ix => 'data' in ix && startsWith(ix.data, CLOSE_CONTRACT_DISCRIMINATOR));
97
+ expect(closeContractIxs).toHaveLength(1);
98
+ // ...and the thread close is still there, exactly once.
99
+ const threadCloseIxs = result.instructions.filter(ix => 'data' in ix && startsWith(ix.data, CLOSE_CONTRACT_THREAD_DISCRIMINATOR));
100
+ expect(threadCloseIxs).toHaveLength(1);
101
+ });
102
+ it('closes the thread before the final close', async () => {
103
+ // The immediate-close branch requires `contract.thread == SystemProgram`,
104
+ // otherwise it errors with ThreadStillExists.
105
+ mockExpiredActiveWithQueued(THREAD_ADDR);
106
+ await closeContract({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
107
+ expect(fetchThreadByAddress).toHaveBeenCalledTimes(1);
108
+ });
109
+ it('skips the thread close when the contract has no thread', async () => {
110
+ mockExpiredActiveWithQueued(SYSTEM);
111
+ await closeContract({ owner: OWNER_SIGNER, contract: CONTRACT_ADDR });
112
+ expect(fetchThreadByAddress).not.toHaveBeenCalled();
113
+ });
114
+ });
115
+ //# sourceMappingURL=closeContract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closeContract.test.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.test.ts"],"names":[],"mappings":"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"}
@@ -61,20 +61,23 @@ export async function closeRental(params, config) {
61
61
  const rental = snap.activeRental;
62
62
  // Check if contract has a queued rental waiting to activate
63
63
  const SYSTEM_PROGRAM_ID = '11111111111111111111111111111111';
64
- const hasQueuedRental = snap.queuedRental !== null;
64
+ const activateQueued = params.activateQueued ?? true;
65
+ const hasQueuedRental = activateQueued && snap.queuedRental !== null;
65
66
  let queuedRentalAddress;
66
67
  let queuedBorrowerProfileAddress;
67
68
  let queuedBorrowerProfileFactionAddress;
68
- if (snap.queuedRental) {
69
+ if (hasQueuedRental && snap.queuedRental) {
69
70
  queuedRentalAddress = snap.queuedRental.address;
70
71
  queuedBorrowerProfileAddress = snap.queuedRental.data.borrowerProfile;
71
72
  queuedBorrowerProfileFactionAddress = await deriveProfileFaction(queuedBorrowerProfileAddress);
72
73
  }
73
- // Thread accounts needed for inline activation restage
74
+ // Thread accounts. Needed to restage fiber 1 after an inline activation
75
+ // (Path B) *and* to wipe it after a plain close (Path A) — omitting them on
76
+ // Path A leaves fiber 1 staged with the outgoing rental's accounts.
74
77
  const hasThread = contractAccount.data.thread !== SYSTEM_PROGRAM_ID;
75
78
  let contractThreadAddress;
76
79
  let closeRentalFiberAddress;
77
- if (hasQueuedRental && hasThread) {
80
+ if (hasThread) {
78
81
  const rentalAuthority = await deriveRentalAuthority();
79
82
  contractThreadAddress = await deriveContractThread(params.contract, rentalAuthority);
80
83
  closeRentalFiberAddress = await deriveFiber(contractThreadAddress, 1);
@@ -1 +1 @@
1
- {"version":3,"file":"closeRental.js","sourceRoot":"","sources":["../../../src/instructions/closeRental.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"closeRental.js","sourceRoot":"","sources":["../../../src/instructions/closeRental.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @purpose Simplified contractDoctorFiber instruction wrapper
3
+ *
4
+ * Thin convenience wrapper around Codama-generated contractDoctorFiber
5
+ * instruction. Rewrites one of a contract thread's fibers, for when the
6
+ * thread's `fiber_ids` and the accounts they name have diverged.
7
+ */
8
+ import { address } from '@solana/kit';
9
+ import { getContractDoctorFiberInstructionAsync } from '../generated/codama/instructions';
10
+ import { mergeConfig, getAddresses } from '../utils/config';
11
+ import { toTransactionSigner } from '../utils/signer';
12
+ import { prepareInstructions } from '../utils/instructions';
13
+ import { deriveContractThread, deriveFiber } from '../pda/thread';
14
+ import { deriveRentalAuthority } from '../pda/srsly';
15
+ /**
16
+ * Rewrite one of a contract thread's fibers.
17
+ *
18
+ * Nothing on chain keeps a thread's `fiber_ids` and the accounts those indices
19
+ * name in agreement, so a thread can be intact, funded and scheduled and still
20
+ * permanently unable to build — every executor fails with
21
+ * `Fiber <pubkey> not found` and the contract stops settling.
22
+ *
23
+ * Writing a fiber requires the thread's authority to sign, and for every SRSLY
24
+ * thread that authority is `rental_authority`, a PDA of the SRSLY program. No
25
+ * wallet holds its key, so this instruction is the only route back.
26
+ *
27
+ * The payload is supplied rather than rebuilt from contract state: a fiber's
28
+ * compiled instruction captured a specific account set at the moment it was
29
+ * written, and contract state has moved on since.
30
+ *
31
+ * Idempotent — re-running converges rather than duplicating.
32
+ *
33
+ * @param params - Fiber rewrite parameters
34
+ * @param config - Optional SDK configuration overrides
35
+ * @returns Kit instruction (or web3.js if PublicKey in config)
36
+ */
37
+ export async function contractDoctorFiber(params, config) {
38
+ const finalConfig = mergeConfig(config);
39
+ if (!params.payer) {
40
+ throw new Error('payer is required');
41
+ }
42
+ if (!params.contract && !params.thread) {
43
+ throw new Error('one of contract or thread is required');
44
+ }
45
+ if (!params.instruction) {
46
+ throw new Error('instruction is required');
47
+ }
48
+ const payerSigner = toTransactionSigner(params.payer);
49
+ const addresses = getAddresses(config);
50
+ const programAddress = address(addresses.srsly);
51
+ const contract = params.contract ? address(params.contract) : undefined;
52
+ const contractThread = params.thread
53
+ ? address(params.thread)
54
+ : await deriveContractThread(contract, await deriveRentalAuthority());
55
+ const fiber = await deriveFiber(contractThread, params.fiberIndex);
56
+ const kitInstruction = await getContractDoctorFiberInstructionAsync({
57
+ payer: payerSigner,
58
+ contract,
59
+ contractThread,
60
+ fiber,
61
+ fiberIndex: params.fiberIndex,
62
+ programId: address(params.instruction.programId),
63
+ accounts: params.instruction.accounts,
64
+ data: params.instruction.data,
65
+ priorityFee: params.priorityFee ?? null,
66
+ }, { programAddress });
67
+ return prepareInstructions(kitInstruction, {
68
+ computeUnits: params.computeUnits,
69
+ PublicKey: finalConfig.PublicKey,
70
+ });
71
+ }
72
+ //# sourceMappingURL=contractDoctorFiber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractDoctorFiber.js","sourceRoot":"","sources":["../../../src/instructions/contractDoctorFiber.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAgB,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sCAAsC,EAAE,MAAM,kCAAkC,CAAC;AAE1F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AA6DrD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiC,EACjC,MAA2B;IAE3B,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnF,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM;QAClC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAiB,CAAC;QACnC,CAAC,CAAC,MAAM,oBAAoB,CAAC,QAAmB,EAAE,MAAM,qBAAqB,EAAE,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnE,MAAM,cAAc,GAAG,MAAM,sCAAsC,CACjE;QACE,KAAK,EAAE,WAAW;QAClB,QAAQ;QACR,cAAc;QACd,KAAK;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,SAAoB,CAAC;QAC3D,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;QACrC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;KACxC,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,OAAO,mBAAmB,CAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -31,6 +31,7 @@ export { createContractThread } from './createContractThread';
31
31
  export { closeContractThread } from './closeContractThread';
32
32
  export { deleteContractThread } from './deleteContractThread';
33
33
  export { updateContractThread } from './updateContractThread';
34
+ export { contractDoctorFiber, } from './contractDoctorFiber';
34
35
  export { createConfig } from './createConfig';
35
36
  export { updateConfig } from './updateConfig';
36
37
  export { deleteConfig } from './deleteConfig';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instructions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAA0B,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,WAAW,EAA0B,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAA+B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAmC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAkC,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAmC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAmC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAA+B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instructions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAA0B,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,WAAW,EAA0B,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAA+B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAmC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAkC,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAmC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAmC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EACL,mBAAmB,GAGpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAA+B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC"}
@@ -21,6 +21,7 @@ export * from '../accounts';
21
21
  export * from '../params';
22
22
  export * from '../pda';
23
23
  export * from '../cost';
24
+ export * from '../doctor';
24
25
  // Hand-picked codama enums that callers commonly need to compare against
25
26
  // account state (e.g. `rental.status === RentalStatus.Cancelled`).
26
27
  // Full codama surface stays at `@sly-rentals/core/codama`.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAExB,yEAAyE;AACzE,mEAAmE;AACnE,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,sBAAsB;AACtB,OAAO,EAAE,KAAK,EAAoB,MAAM,oBAAoB,CAAC;AAE7D,0EAA0E;AAC1E,8EAA8E;AAC9E,wEAAwE;AACxE,4DAA4D;AAC5D,wEAAwE;AACxE,iEAAiE;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAE1B,yEAAyE;AACzE,mEAAmE;AACnE,2DAA2D;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,sBAAsB;AACtB,OAAO,EAAE,KAAK,EAAoB,MAAM,oBAAoB,CAAC;AAE7D,0EAA0E;AAC1E,8EAA8E;AAC9E,wEAAwE;AACxE,4DAA4D;AAC5D,wEAAwE;AACxE,iEAAiE;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -30,6 +30,7 @@ export * from '../accounts';
30
30
  export * from '../params';
31
31
  export * from '../pda';
32
32
  export * from '../cost';
33
+ export * from '../doctor';
33
34
  export { VERSION } from '../version';
34
35
  // `codama` and `audit` namespaces are intentionally NOT re-exported here
35
36
  // — `export * as` defeats tree-shaking. Import them via subpath instead:
@@ -76,6 +77,7 @@ export const createContractThread = w(kit.createContractThread);
76
77
  export const closeContractThread = w(kit.closeContractThread);
77
78
  export const deleteContractThread = w(kit.deleteContractThread);
78
79
  export const updateContractThread = w(kit.updateContractThread);
80
+ export const contractDoctorFiber = w(kit.contractDoctorFiber);
79
81
  export const createConfig = w(kit.createConfig);
80
82
  export const updateConfig = w(kit.updateConfig);
81
83
  export const deleteConfig = w(kit.deleteConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/legacy/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/legacy/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sly-rentals/core",
3
- "version": "5.4.0",
3
+ "version": "5.5.0",
4
4
  "description": "TypeScript SDK for SRSLY",
5
5
  "sideEffects": false,
6
6
  "publishConfig": {
@@ -5,9 +5,18 @@
5
5
  * Supports both @solana/kit (default) and @solana/web3.js modes.
6
6
  */
7
7
  import { SRSLY_PROGRAM_ADDRESS } from '../generated/codama';
8
- import { getProgramAddresses, MAINNET_GENESIS, DEVNET_GENESIS, } from './addresses';
8
+ import { getProgramAddresses, resolveGenesisHash, MAINNET_GENESIS, DEVNET_GENESIS, } from './addresses';
9
9
  import { createRpc } from './rpc';
10
10
  import { setSdkConfig as setSlyvaultSdkConfig } from '@sly-rentals/vault';
11
+ /**
12
+ * Drop keys whose value is `undefined`, so spreading the result cannot
13
+ * overwrite an existing value with "unset".
14
+ */
15
+ function stripUndefined(source) {
16
+ if (!source)
17
+ return {};
18
+ return Object.fromEntries(Object.entries(source).filter(([, value]) => value !== undefined));
19
+ }
11
20
  /**
12
21
  * Default RPC URLs keyed by genesis hash
13
22
  */
@@ -69,12 +78,23 @@ let globalConfig = {
69
78
  * ```
70
79
  */
71
80
  export function setSdkConfig(config) {
72
- globalConfig = { ...globalConfig, ...config };
73
- // Propagate relevant config to slyvault SDK
74
- setSlyvaultSdkConfig({
75
- rpcUrl: config.rpcUrl,
76
- PublicKey: config.PublicKey,
77
- });
81
+ // Drop keys explicitly set to `undefined` so a partial update can't wipe a
82
+ // previously configured value. A spread treats a present-but-undefined key
83
+ // as an assignment, so `setSdkConfig({ programs, rpcUrl: undefined })` — the
84
+ // shape you get from spreading an options object — silently discards the
85
+ // configured endpoint and falls back to whatever public RPC `programs`
86
+ // names. That reads as an account that doesn't exist, not as a config error.
87
+ const defined = stripUndefined(config);
88
+ globalConfig = { ...globalConfig, ...defined };
89
+ // Propagate relevant config to slyvault SDK. Only forward the keys this
90
+ // call actually set — slyvault applies the same undefined-skipping rule,
91
+ // but forwarding a bare `{}` keeps the intent obvious.
92
+ const slyvaultConfig = {};
93
+ if (defined.rpcUrl !== undefined)
94
+ slyvaultConfig.rpcUrl = defined.rpcUrl;
95
+ if (defined.PublicKey !== undefined)
96
+ slyvaultConfig.PublicKey = defined.PublicKey;
97
+ setSlyvaultSdkConfig(slyvaultConfig);
78
98
  }
79
99
  /**
80
100
  * Get the current global SDK configuration
@@ -99,22 +119,39 @@ export function clearSdkConfig() {
99
119
  * @returns Merged configuration
100
120
  */
101
121
  export function mergeConfig(overrides) {
102
- return { ...globalConfig, ...overrides };
122
+ // Same undefined-skipping rule as `setSdkConfig`: a per-call override of
123
+ // `{ rpcUrl: undefined }` must not erase the configured URL for that call.
124
+ return { ...globalConfig, ...stripUndefined(overrides) };
103
125
  }
104
126
  /**
105
127
  * Get the effective RPC URL for a configuration
106
128
  *
129
+ * Resolution order: an explicit `rpcUrl` wins; otherwise the public endpoint
130
+ * for whichever cluster `programs` names.
131
+ *
107
132
  * @param config - Optional SDK configuration. If not provided, uses global config
108
133
  * @returns RPC URL to use
134
+ * @throws Error if `programs` names a cluster with no public RPC (atlasnet) or
135
+ * is not recognized at all. Both cases need an explicit `rpcUrl`.
109
136
  */
110
137
  export function getRpcUrl(config) {
111
138
  const finalConfig = mergeConfig(config);
112
139
  if (finalConfig.rpcUrl)
113
140
  return finalConfig.rpcUrl;
114
- // Try genesis-hash-keyed lookup first, then alias fallback
115
- return (DEFAULT_RPC_URLS[finalConfig.programs] ||
116
- ALIAS_RPC_URLS[finalConfig.programs] ||
117
- DEFAULT_RPC_URLS[DEVNET_GENESIS]);
141
+ // Resolve aliases to a genesis hash first so both spellings of a cluster
142
+ // ('mainnet' and its hash) take the same path.
143
+ const genesis = resolveGenesisHash(finalConfig.programs);
144
+ const url = DEFAULT_RPC_URLS[genesis] ?? ALIAS_RPC_URLS[finalConfig.programs];
145
+ if (url)
146
+ return url;
147
+ // Previously this fell through to the devnet endpoint. That turned a config
148
+ // mistake into a silent wrong-cluster query: every lookup returns null and
149
+ // the caller reports a missing account, with nothing to distinguish "this
150
+ // account does not exist" from "you asked the wrong chain". Atlasnet has no
151
+ // public RPC at all, so it always landed here.
152
+ throw new Error(`No public RPC endpoint for programs '${finalConfig.programs}'` +
153
+ `${genesis === finalConfig.programs ? '' : ` (genesis ${genesis})`}. ` +
154
+ `Set an explicit rpcUrl, e.g. setSdkConfig({ programs: '${finalConfig.programs}', rpcUrl: '<your-endpoint>' }).`);
118
155
  }
119
156
  /**
120
157
  * Get the effective WebSocket URL, if any. Returns `undefined` when neither
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { setSdkConfig, getSdkConfig, clearSdkConfig, mergeConfig, getRpcUrl } from './config';
3
+ import { MAINNET_GENESIS, ATLASNET_GENESIS } from './addresses';
4
+ const CUSTOM_RPC = 'https://my-endpoint.example/rpc';
5
+ beforeEach(() => {
6
+ // The config is a module singleton, so a leaked rpcUrl would mask exactly
7
+ // the bug under test. `clearSdkConfig` is the reset — `setSdkConfig` can no
8
+ // longer unset a key, which is the whole point of the change below.
9
+ clearSdkConfig();
10
+ });
11
+ describe('setSdkConfig — partial updates must not wipe rpcUrl', () => {
12
+ it('keeps a configured rpcUrl when a later call only sets programs', () => {
13
+ // The incident: a thread that exists on mainnet reported "no account
14
+ // found", because the second call reset the endpoint to a public default
15
+ // for a different cluster and every lookup there returns null.
16
+ setSdkConfig({ programs: 'mainnet', rpcUrl: CUSTOM_RPC });
17
+ setSdkConfig({ programs: 'mainnet' });
18
+ expect(getSdkConfig().rpcUrl).toBe(CUSTOM_RPC);
19
+ expect(getRpcUrl()).toBe(CUSTOM_RPC);
20
+ });
21
+ it('keeps it when the key is present but explicitly undefined', () => {
22
+ // This is the shape that actually occurs — spreading an options object
23
+ // whose rpcUrl was never populated yields `{ rpcUrl: undefined }`, and a
24
+ // plain spread treats that as an assignment rather than an absence.
25
+ setSdkConfig({ programs: 'mainnet', rpcUrl: CUSTOM_RPC });
26
+ setSdkConfig({ programs: 'mainnet', rpcUrl: undefined });
27
+ expect(getSdkConfig().rpcUrl).toBe(CUSTOM_RPC);
28
+ });
29
+ it('still allows an intentional change', () => {
30
+ setSdkConfig({ rpcUrl: CUSTOM_RPC });
31
+ setSdkConfig({ rpcUrl: 'https://other.example/rpc' });
32
+ expect(getSdkConfig().rpcUrl).toBe('https://other.example/rpc');
33
+ });
34
+ });
35
+ describe('mergeConfig — per-call overrides follow the same rule', () => {
36
+ it('does not let an undefined override erase the configured rpcUrl', () => {
37
+ setSdkConfig({ programs: 'mainnet', rpcUrl: CUSTOM_RPC });
38
+ expect(mergeConfig({ rpcUrl: undefined }).rpcUrl).toBe(CUSTOM_RPC);
39
+ expect(getRpcUrl({ rpcUrl: undefined })).toBe(CUSTOM_RPC);
40
+ });
41
+ it('applies a real override', () => {
42
+ setSdkConfig({ programs: 'mainnet', rpcUrl: CUSTOM_RPC });
43
+ expect(getRpcUrl({ rpcUrl: 'https://override.example' })).toBe('https://override.example');
44
+ });
45
+ });
46
+ describe('getRpcUrl — cluster resolution', () => {
47
+ it('resolves an alias to its public endpoint', () => {
48
+ setSdkConfig({ programs: 'mainnet' });
49
+ expect(getRpcUrl()).toBe('https://api.mainnet-beta.solana.com');
50
+ });
51
+ it('resolves a genesis hash the same way as its alias', () => {
52
+ setSdkConfig({ programs: MAINNET_GENESIS });
53
+ expect(getRpcUrl()).toBe('https://api.mainnet-beta.solana.com');
54
+ });
55
+ it('throws for atlasnet by genesis hash instead of silently using devnet', () => {
56
+ // Atlasnet has no public RPC. The old fallback handed back the devnet
57
+ // endpoint, so callers queried the wrong chain and read the empty results
58
+ // as missing accounts.
59
+ setSdkConfig({ programs: ATLASNET_GENESIS });
60
+ expect(() => getRpcUrl()).toThrow(/No public RPC endpoint/);
61
+ expect(() => getRpcUrl()).toThrow(/Set an explicit rpcUrl/);
62
+ });
63
+ it('throws for an unrecognized programs value', () => {
64
+ setSdkConfig({ programs: 'not-a-cluster' });
65
+ expect(() => getRpcUrl()).toThrow(/not-a-cluster/);
66
+ });
67
+ it('does not throw once an explicit rpcUrl is supplied', () => {
68
+ setSdkConfig({ programs: ATLASNET_GENESIS, rpcUrl: CUSTOM_RPC });
69
+ expect(getRpcUrl()).toBe(CUSTOM_RPC);
70
+ });
71
+ });
72
+ describe('clearSdkConfig — the way to actually unset', () => {
73
+ it('drops a configured rpcUrl that setSdkConfig can no longer clear', () => {
74
+ // Skipping undefined means `setSdkConfig` is additive only. That is
75
+ // deliberate, so the escape hatch has to keep working.
76
+ setSdkConfig({ programs: 'mainnet', rpcUrl: CUSTOM_RPC });
77
+ setSdkConfig({ rpcUrl: undefined });
78
+ expect(getSdkConfig().rpcUrl).toBe(CUSTOM_RPC);
79
+ clearSdkConfig();
80
+ expect(getSdkConfig().rpcUrl).toBeUndefined();
81
+ expect(getSdkConfig().programs).toBe('atlasnet');
82
+ });
83
+ });
84
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../src/utils/config.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  // Auto-generated from package.json - DO NOT EDIT
2
2
  // Run "pnpm run generate:version" to update
3
- export const VERSION = '5.4.0';
3
+ export const VERSION = '5.5.0';
4
4
  //# sourceMappingURL=version.js.map