@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.
- package/dist/api.json +13092 -9148
- package/dist/cjs/audit/events-registry.js +3 -0
- package/dist/cjs/audit/events-registry.js.map +1 -1
- package/dist/cjs/audit/events.js +41 -0
- package/dist/cjs/audit/events.js.map +1 -1
- package/dist/cjs/doctor/contract.js +297 -0
- package/dist/cjs/doctor/contract.js.map +1 -0
- package/dist/cjs/doctor/contract.test.js +143 -0
- package/dist/cjs/doctor/contract.test.js.map +1 -0
- package/dist/cjs/doctor/index.js +18 -0
- package/dist/cjs/doctor/index.js.map +1 -0
- package/dist/cjs/generated/codama/errors/srsly.js +10 -1
- package/dist/cjs/generated/codama/errors/srsly.js.map +1 -1
- package/dist/cjs/generated/codama/instructions/closeContract.js +6 -1
- package/dist/cjs/generated/codama/instructions/closeContract.js.map +1 -1
- package/dist/cjs/generated/codama/instructions/contractDoctorFiber.js +202 -0
- package/dist/cjs/generated/codama/instructions/contractDoctorFiber.js.map +1 -0
- package/dist/cjs/generated/codama/instructions/index.js +1 -0
- package/dist/cjs/generated/codama/instructions/index.js.map +1 -1
- package/dist/cjs/generated/codama/instructions/processContract.js.map +1 -1
- package/dist/cjs/generated/codama/programs/srsly.js +23 -19
- package/dist/cjs/generated/codama/programs/srsly.js.map +1 -1
- package/dist/cjs/generated/codama/types/contractFiberDoctored.js +31 -0
- package/dist/cjs/generated/codama/types/contractFiberDoctored.js.map +1 -0
- package/dist/cjs/generated/codama/types/index.js +3 -0
- package/dist/cjs/generated/codama/types/index.js.map +1 -1
- package/dist/cjs/generated/codama/types/reservationForceClosed.js +37 -0
- package/dist/cjs/generated/codama/types/reservationForceClosed.js.map +1 -0
- package/dist/cjs/generated/codama/types/serializableAccountMeta.js +31 -0
- package/dist/cjs/generated/codama/types/serializableAccountMeta.js.map +1 -0
- package/dist/cjs/idl/srsly.json +301 -2
- package/dist/cjs/instructions/closeContract.js +56 -12
- package/dist/cjs/instructions/closeContract.js.map +1 -1
- package/dist/cjs/instructions/closeContract.test.js +117 -0
- package/dist/cjs/instructions/closeContract.test.js.map +1 -0
- package/dist/cjs/instructions/closeRental.js +7 -4
- package/dist/cjs/instructions/closeRental.js.map +1 -1
- package/dist/cjs/instructions/contractDoctorFiber.js +75 -0
- package/dist/cjs/instructions/contractDoctorFiber.js.map +1 -0
- package/dist/cjs/instructions/index.js +3 -1
- package/dist/cjs/instructions/index.js.map +1 -1
- package/dist/cjs/kit/index.js +1 -0
- package/dist/cjs/kit/index.js.map +1 -1
- package/dist/cjs/legacy/index.js +3 -1
- package/dist/cjs/legacy/index.js.map +1 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/utils/config.js +48 -11
- package/dist/cjs/utils/config.js.map +1 -1
- package/dist/cjs/utils/config.test.js +86 -0
- package/dist/cjs/utils/config.test.js.map +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/esm/audit/events-registry.js +3 -0
- package/dist/esm/audit/events-registry.js.map +1 -1
- package/dist/esm/audit/events.js +41 -0
- package/dist/esm/audit/events.js.map +1 -1
- package/dist/esm/doctor/contract.js +292 -0
- package/dist/esm/doctor/contract.js.map +1 -0
- package/dist/esm/doctor/contract.test.js +141 -0
- package/dist/esm/doctor/contract.test.js.map +1 -0
- package/dist/esm/doctor/index.js +12 -0
- package/dist/esm/doctor/index.js.map +1 -0
- package/dist/esm/generated/codama/errors/srsly.js +9 -0
- package/dist/esm/generated/codama/errors/srsly.js.map +1 -1
- package/dist/esm/generated/codama/instructions/closeContract.js +6 -1
- package/dist/esm/generated/codama/instructions/closeContract.js.map +1 -1
- package/dist/esm/generated/codama/instructions/contractDoctorFiber.js +192 -0
- package/dist/esm/generated/codama/instructions/contractDoctorFiber.js.map +1 -0
- package/dist/esm/generated/codama/instructions/index.js +1 -0
- package/dist/esm/generated/codama/instructions/index.js.map +1 -1
- package/dist/esm/generated/codama/instructions/processContract.js.map +1 -1
- package/dist/esm/generated/codama/programs/srsly.js +23 -19
- package/dist/esm/generated/codama/programs/srsly.js.map +1 -1
- package/dist/esm/generated/codama/types/contractFiberDoctored.js +26 -0
- package/dist/esm/generated/codama/types/contractFiberDoctored.js.map +1 -0
- package/dist/esm/generated/codama/types/index.js +3 -0
- package/dist/esm/generated/codama/types/index.js.map +1 -1
- package/dist/esm/generated/codama/types/reservationForceClosed.js +32 -0
- package/dist/esm/generated/codama/types/reservationForceClosed.js.map +1 -0
- package/dist/esm/generated/codama/types/serializableAccountMeta.js +26 -0
- package/dist/esm/generated/codama/types/serializableAccountMeta.js.map +1 -0
- package/dist/esm/idl/srsly.json +301 -2
- package/dist/esm/instructions/closeContract.js +57 -13
- package/dist/esm/instructions/closeContract.js.map +1 -1
- package/dist/esm/instructions/closeContract.test.js +115 -0
- package/dist/esm/instructions/closeContract.test.js.map +1 -0
- package/dist/esm/instructions/closeRental.js +7 -4
- package/dist/esm/instructions/closeRental.js.map +1 -1
- package/dist/esm/instructions/contractDoctorFiber.js +72 -0
- package/dist/esm/instructions/contractDoctorFiber.js.map +1 -0
- package/dist/esm/instructions/index.js +1 -0
- package/dist/esm/instructions/index.js.map +1 -1
- package/dist/esm/kit/index.js +1 -0
- package/dist/esm/kit/index.js.map +1 -1
- package/dist/esm/legacy/index.js +2 -0
- package/dist/esm/legacy/index.js.map +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/utils/config.js +49 -12
- package/dist/esm/utils/config.js.map +1 -1
- package/dist/esm/utils/config.test.js +84 -0
- package/dist/esm/utils/config.test.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/idl/srsly.json +301 -2
- package/dist/types/audit/events-registry.d.ts +1 -1
- package/dist/types/audit/events-registry.d.ts.map +1 -1
- package/dist/types/audit/events.d.ts.map +1 -1
- package/dist/types/audit/index.d.ts +1 -1
- package/dist/types/audit/index.d.ts.map +1 -1
- package/dist/types/audit/types.d.ts +46 -1
- package/dist/types/audit/types.d.ts.map +1 -1
- package/dist/types/doctor/contract.d.ts +133 -0
- package/dist/types/doctor/contract.d.ts.map +1 -0
- package/dist/types/doctor/contract.test.d.ts +2 -0
- package/dist/types/doctor/contract.test.d.ts.map +1 -0
- package/dist/types/doctor/index.d.ts +12 -0
- package/dist/types/doctor/index.d.ts.map +1 -0
- package/dist/types/generated/codama/errors/srsly.d.ts +6 -1
- package/dist/types/generated/codama/errors/srsly.d.ts.map +1 -1
- package/dist/types/generated/codama/instructions/closeContract.d.ts +34 -12
- package/dist/types/generated/codama/instructions/closeContract.d.ts.map +1 -1
- package/dist/types/generated/codama/instructions/contractDoctorFiber.d.ts +154 -0
- package/dist/types/generated/codama/instructions/contractDoctorFiber.d.ts.map +1 -0
- package/dist/types/generated/codama/instructions/index.d.ts +1 -0
- package/dist/types/generated/codama/instructions/index.d.ts.map +1 -1
- package/dist/types/generated/codama/instructions/processContract.d.ts +15 -3
- package/dist/types/generated/codama/instructions/processContract.d.ts.map +1 -1
- package/dist/types/generated/codama/programs/srsly.d.ts +23 -20
- package/dist/types/generated/codama/programs/srsly.d.ts.map +1 -1
- package/dist/types/generated/codama/types/contractFiberDoctored.d.ts +22 -0
- package/dist/types/generated/codama/types/contractFiberDoctored.d.ts.map +1 -0
- package/dist/types/generated/codama/types/index.d.ts +3 -0
- package/dist/types/generated/codama/types/index.d.ts.map +1 -1
- package/dist/types/generated/codama/types/reservationForceClosed.d.ts +36 -0
- package/dist/types/generated/codama/types/reservationForceClosed.d.ts.map +1 -0
- package/dist/types/generated/codama/types/serializableAccountMeta.d.ts +19 -0
- package/dist/types/generated/codama/types/serializableAccountMeta.d.ts.map +1 -0
- package/dist/types/instructions/closeContract.d.ts +13 -3
- package/dist/types/instructions/closeContract.d.ts.map +1 -1
- package/dist/types/instructions/closeContract.test.d.ts +2 -0
- package/dist/types/instructions/closeContract.test.d.ts.map +1 -0
- package/dist/types/instructions/closeRental.d.ts +11 -0
- package/dist/types/instructions/closeRental.d.ts.map +1 -1
- package/dist/types/instructions/contractDoctorFiber.d.ts +87 -0
- package/dist/types/instructions/contractDoctorFiber.d.ts.map +1 -0
- package/dist/types/instructions/index.d.ts +1 -0
- package/dist/types/instructions/index.d.ts.map +1 -1
- package/dist/types/kit/index.d.ts +1 -0
- package/dist/types/kit/index.d.ts.map +1 -1
- package/dist/types/legacy/index.d.ts +2 -0
- package/dist/types/legacy/index.d.ts.map +1 -1
- package/dist/types/utils/config.d.ts +5 -0
- package/dist/types/utils/config.d.ts.map +1 -1
- package/dist/types/utils/config.test.d.ts +2 -0
- package/dist/types/utils/config.test.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- 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
|
|
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
|
|
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 (
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAgB,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAyB,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
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"}
|
package/dist/esm/kit/index.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/esm/legacy/index.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAkD,MAAM,UAAU,CAAC;AACxF,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE5D,oDAAoD;AACpD,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,yEAAyE;AACzE,yEAAyE;AACzE,yDAAyD;AACzD,wDAAwD;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAe1F;;GAEG;AACH,SAAS,UAAU,CACjB,EAAkD;IAElD,OAAO,KAAK,EAAE,GAAG,IAAW,EAAgC,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CACb,8DAA8D;gBAC5D,iCAAiC;gBACjC,kDAAkD;gBAClD,8DAA8D;gBAC9D,gCAAgC,CACnC,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,GAAG,UAAU,CAAC;AAErB,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC"}
|
package/dist/esm/package.json
CHANGED
package/dist/esm/utils/config.js
CHANGED
|
@@ -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
|
-
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,GAKf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,YAAY,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAiH1E;;GAEG;AACH,MAAM,gBAAgB,GAA2B;IAC/C,CAAC,eAAe,CAAC,EAAE,qCAAqC;IACxD,CAAC,cAAc,CAAC,EAAE,+BAA+B;IACjD,sEAAsE;CACvE,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAA2B;IAC7C,QAAQ,EAAE,+BAA+B;IACzC,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,qCAAqC;IAC9C,QAAQ,EAAE,uBAAuB;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEjD;;GAEG;AACH,IAAI,YAAY,GAAc;IAC5B,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,
|
|
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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"}
|
package/dist/esm/version.js
CHANGED