@sly-rentals/core 5.3.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 (167) hide show
  1. package/dist/api.json +13019 -8935
  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/instructions/reserveRental.js +34 -1
  22. package/dist/cjs/generated/codama/instructions/reserveRental.js.map +1 -1
  23. package/dist/cjs/generated/codama/programs/srsly.js +23 -19
  24. package/dist/cjs/generated/codama/programs/srsly.js.map +1 -1
  25. package/dist/cjs/generated/codama/types/contractFiberDoctored.js +31 -0
  26. package/dist/cjs/generated/codama/types/contractFiberDoctored.js.map +1 -0
  27. package/dist/cjs/generated/codama/types/index.js +3 -0
  28. package/dist/cjs/generated/codama/types/index.js.map +1 -1
  29. package/dist/cjs/generated/codama/types/reservationForceClosed.js +37 -0
  30. package/dist/cjs/generated/codama/types/reservationForceClosed.js.map +1 -0
  31. package/dist/cjs/generated/codama/types/serializableAccountMeta.js +31 -0
  32. package/dist/cjs/generated/codama/types/serializableAccountMeta.js.map +1 -0
  33. package/dist/cjs/idl/srsly.json +338 -3
  34. package/dist/cjs/instructions/closeContract.js +56 -12
  35. package/dist/cjs/instructions/closeContract.js.map +1 -1
  36. package/dist/cjs/instructions/closeContract.test.js +117 -0
  37. package/dist/cjs/instructions/closeContract.test.js.map +1 -0
  38. package/dist/cjs/instructions/closeRental.js +7 -4
  39. package/dist/cjs/instructions/closeRental.js.map +1 -1
  40. package/dist/cjs/instructions/contractDoctorFiber.js +75 -0
  41. package/dist/cjs/instructions/contractDoctorFiber.js.map +1 -0
  42. package/dist/cjs/instructions/index.js +3 -1
  43. package/dist/cjs/instructions/index.js.map +1 -1
  44. package/dist/cjs/instructions/reserveRental.js +31 -0
  45. package/dist/cjs/instructions/reserveRental.js.map +1 -1
  46. package/dist/cjs/kit/index.js +1 -0
  47. package/dist/cjs/kit/index.js.map +1 -1
  48. package/dist/cjs/legacy/index.js +3 -1
  49. package/dist/cjs/legacy/index.js.map +1 -1
  50. package/dist/cjs/package.json +1 -1
  51. package/dist/cjs/utils/config.js +48 -11
  52. package/dist/cjs/utils/config.js.map +1 -1
  53. package/dist/cjs/utils/config.test.js +86 -0
  54. package/dist/cjs/utils/config.test.js.map +1 -0
  55. package/dist/cjs/version.js +1 -1
  56. package/dist/esm/audit/events-registry.js +3 -0
  57. package/dist/esm/audit/events-registry.js.map +1 -1
  58. package/dist/esm/audit/events.js +41 -0
  59. package/dist/esm/audit/events.js.map +1 -1
  60. package/dist/esm/doctor/contract.js +292 -0
  61. package/dist/esm/doctor/contract.js.map +1 -0
  62. package/dist/esm/doctor/contract.test.js +141 -0
  63. package/dist/esm/doctor/contract.test.js.map +1 -0
  64. package/dist/esm/doctor/index.js +12 -0
  65. package/dist/esm/doctor/index.js.map +1 -0
  66. package/dist/esm/generated/codama/errors/srsly.js +9 -0
  67. package/dist/esm/generated/codama/errors/srsly.js.map +1 -1
  68. package/dist/esm/generated/codama/instructions/closeContract.js +6 -1
  69. package/dist/esm/generated/codama/instructions/closeContract.js.map +1 -1
  70. package/dist/esm/generated/codama/instructions/contractDoctorFiber.js +192 -0
  71. package/dist/esm/generated/codama/instructions/contractDoctorFiber.js.map +1 -0
  72. package/dist/esm/generated/codama/instructions/index.js +1 -0
  73. package/dist/esm/generated/codama/instructions/index.js.map +1 -1
  74. package/dist/esm/generated/codama/instructions/processContract.js.map +1 -1
  75. package/dist/esm/generated/codama/instructions/reserveRental.js +35 -2
  76. package/dist/esm/generated/codama/instructions/reserveRental.js.map +1 -1
  77. package/dist/esm/generated/codama/programs/srsly.js +23 -19
  78. package/dist/esm/generated/codama/programs/srsly.js.map +1 -1
  79. package/dist/esm/generated/codama/types/contractFiberDoctored.js +26 -0
  80. package/dist/esm/generated/codama/types/contractFiberDoctored.js.map +1 -0
  81. package/dist/esm/generated/codama/types/index.js +3 -0
  82. package/dist/esm/generated/codama/types/index.js.map +1 -1
  83. package/dist/esm/generated/codama/types/reservationForceClosed.js +32 -0
  84. package/dist/esm/generated/codama/types/reservationForceClosed.js.map +1 -0
  85. package/dist/esm/generated/codama/types/serializableAccountMeta.js +26 -0
  86. package/dist/esm/generated/codama/types/serializableAccountMeta.js.map +1 -0
  87. package/dist/esm/idl/srsly.json +338 -3
  88. package/dist/esm/instructions/closeContract.js +57 -13
  89. package/dist/esm/instructions/closeContract.js.map +1 -1
  90. package/dist/esm/instructions/closeContract.test.js +115 -0
  91. package/dist/esm/instructions/closeContract.test.js.map +1 -0
  92. package/dist/esm/instructions/closeRental.js +7 -4
  93. package/dist/esm/instructions/closeRental.js.map +1 -1
  94. package/dist/esm/instructions/contractDoctorFiber.js +72 -0
  95. package/dist/esm/instructions/contractDoctorFiber.js.map +1 -0
  96. package/dist/esm/instructions/index.js +1 -0
  97. package/dist/esm/instructions/index.js.map +1 -1
  98. package/dist/esm/instructions/reserveRental.js +31 -0
  99. package/dist/esm/instructions/reserveRental.js.map +1 -1
  100. package/dist/esm/kit/index.js +1 -0
  101. package/dist/esm/kit/index.js.map +1 -1
  102. package/dist/esm/legacy/index.js +2 -0
  103. package/dist/esm/legacy/index.js.map +1 -1
  104. package/dist/esm/package.json +1 -1
  105. package/dist/esm/utils/config.js +49 -12
  106. package/dist/esm/utils/config.js.map +1 -1
  107. package/dist/esm/utils/config.test.js +84 -0
  108. package/dist/esm/utils/config.test.js.map +1 -0
  109. package/dist/esm/version.js +1 -1
  110. package/dist/idl/srsly.json +338 -3
  111. package/dist/types/audit/events-registry.d.ts +1 -1
  112. package/dist/types/audit/events-registry.d.ts.map +1 -1
  113. package/dist/types/audit/events.d.ts.map +1 -1
  114. package/dist/types/audit/index.d.ts +1 -1
  115. package/dist/types/audit/index.d.ts.map +1 -1
  116. package/dist/types/audit/types.d.ts +46 -1
  117. package/dist/types/audit/types.d.ts.map +1 -1
  118. package/dist/types/doctor/contract.d.ts +133 -0
  119. package/dist/types/doctor/contract.d.ts.map +1 -0
  120. package/dist/types/doctor/contract.test.d.ts +2 -0
  121. package/dist/types/doctor/contract.test.d.ts.map +1 -0
  122. package/dist/types/doctor/index.d.ts +12 -0
  123. package/dist/types/doctor/index.d.ts.map +1 -0
  124. package/dist/types/generated/codama/errors/srsly.d.ts +6 -1
  125. package/dist/types/generated/codama/errors/srsly.d.ts.map +1 -1
  126. package/dist/types/generated/codama/instructions/closeContract.d.ts +34 -12
  127. package/dist/types/generated/codama/instructions/closeContract.d.ts.map +1 -1
  128. package/dist/types/generated/codama/instructions/contractDoctorFiber.d.ts +154 -0
  129. package/dist/types/generated/codama/instructions/contractDoctorFiber.d.ts.map +1 -0
  130. package/dist/types/generated/codama/instructions/index.d.ts +1 -0
  131. package/dist/types/generated/codama/instructions/index.d.ts.map +1 -1
  132. package/dist/types/generated/codama/instructions/processContract.d.ts +15 -3
  133. package/dist/types/generated/codama/instructions/processContract.d.ts.map +1 -1
  134. package/dist/types/generated/codama/instructions/reserveRental.d.ts +36 -16
  135. package/dist/types/generated/codama/instructions/reserveRental.d.ts.map +1 -1
  136. package/dist/types/generated/codama/programs/srsly.d.ts +23 -20
  137. package/dist/types/generated/codama/programs/srsly.d.ts.map +1 -1
  138. package/dist/types/generated/codama/types/contractFiberDoctored.d.ts +22 -0
  139. package/dist/types/generated/codama/types/contractFiberDoctored.d.ts.map +1 -0
  140. package/dist/types/generated/codama/types/index.d.ts +3 -0
  141. package/dist/types/generated/codama/types/index.d.ts.map +1 -1
  142. package/dist/types/generated/codama/types/reservationForceClosed.d.ts +36 -0
  143. package/dist/types/generated/codama/types/reservationForceClosed.d.ts.map +1 -0
  144. package/dist/types/generated/codama/types/serializableAccountMeta.d.ts +19 -0
  145. package/dist/types/generated/codama/types/serializableAccountMeta.d.ts.map +1 -0
  146. package/dist/types/instructions/closeContract.d.ts +13 -3
  147. package/dist/types/instructions/closeContract.d.ts.map +1 -1
  148. package/dist/types/instructions/closeContract.test.d.ts +2 -0
  149. package/dist/types/instructions/closeContract.test.d.ts.map +1 -0
  150. package/dist/types/instructions/closeRental.d.ts +11 -0
  151. package/dist/types/instructions/closeRental.d.ts.map +1 -1
  152. package/dist/types/instructions/contractDoctorFiber.d.ts +87 -0
  153. package/dist/types/instructions/contractDoctorFiber.d.ts.map +1 -0
  154. package/dist/types/instructions/index.d.ts +1 -0
  155. package/dist/types/instructions/index.d.ts.map +1 -1
  156. package/dist/types/instructions/reserveRental.d.ts +34 -2
  157. package/dist/types/instructions/reserveRental.d.ts.map +1 -1
  158. package/dist/types/kit/index.d.ts +1 -0
  159. package/dist/types/kit/index.d.ts.map +1 -1
  160. package/dist/types/legacy/index.d.ts +2 -0
  161. package/dist/types/legacy/index.d.ts.map +1 -1
  162. package/dist/types/utils/config.d.ts +5 -0
  163. package/dist/types/utils/config.d.ts.map +1 -1
  164. package/dist/types/utils/config.test.d.ts +2 -0
  165. package/dist/types/utils/config.test.d.ts.map +1 -0
  166. package/dist/types/version.d.ts +1 -1
  167. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  "address": "SRSLYxcFnjd5jG2DpJw4as6UEyjwJQK1U4J1TD1hvZH",
3
3
  "metadata": {
4
4
  "name": "srsly",
5
- "version": "0.4.0",
5
+ "version": "0.7.0",
6
6
  "spec": "0.1.0",
7
7
  "description": "Space Rental from SLY",
8
8
  "repository": "https://github.com/wuwei-labs/srsly"
@@ -1541,6 +1541,16 @@
1541
1541
  "writable": true,
1542
1542
  "optional": true
1543
1543
  },
1544
+ {
1545
+ "name": "contract_thread",
1546
+ "docs": [
1547
+ "gone when `contract.thread` still names it — `delete_contract_thread`",
1548
+ "tears a thread down without clearing the pointer, which would",
1549
+ "otherwise leave the contract permanently unclosable. Only the address",
1550
+ "is trusted; it must equal `contract.thread` and hold no data."
1551
+ ],
1552
+ "optional": true
1553
+ },
1544
1554
  {
1545
1555
  "name": "rental_authority",
1546
1556
  "pda": {
@@ -1936,6 +1946,146 @@
1936
1946
  }
1937
1947
  }
1938
1948
  },
1949
+ {
1950
+ "name": "contract_doctor_fiber",
1951
+ "docs": [
1952
+ "Rewrite one of a contract thread's fibers, for when `fiber_ids` and the",
1953
+ "accounts it names have diverged and the thread can no longer build.",
1954
+ "Callable by the contract's owner or by admin; `payer` funds the rent and",
1955
+ "`rental_authority` signs the CPI."
1956
+ ],
1957
+ "discriminator": [
1958
+ 129,
1959
+ 173,
1960
+ 84,
1961
+ 247,
1962
+ 167,
1963
+ 228,
1964
+ 206,
1965
+ 192
1966
+ ],
1967
+ "accounts": [
1968
+ {
1969
+ "name": "payer",
1970
+ "docs": [
1971
+ "Signs, and pays rent for the rewritten fiber. The contract's owner or",
1972
+ "`config.admin`. It is *not* the thread's authority — that is",
1973
+ "`rental_authority`, and only this program can sign for it."
1974
+ ],
1975
+ "writable": true,
1976
+ "signer": true
1977
+ },
1978
+ {
1979
+ "name": "config",
1980
+ "docs": [
1981
+ "Bypassed when payer is AUTHORIZED_INITIALIZER (break-glass)."
1982
+ ],
1983
+ "pda": {
1984
+ "seeds": [
1985
+ {
1986
+ "kind": "const",
1987
+ "value": [
1988
+ 99,
1989
+ 111,
1990
+ 110,
1991
+ 102,
1992
+ 105,
1993
+ 103
1994
+ ]
1995
+ }
1996
+ ]
1997
+ }
1998
+ },
1999
+ {
2000
+ "name": "contract",
2001
+ "docs": [
2002
+ "binds the write: it authorizes the payer, pins `contract_thread` to",
2003
+ "`contract.thread`, and scopes the payload. Owners must supply it.",
2004
+ "Optional so admins retain a break-glass path for a contract that is",
2005
+ "mid-migration or undeserializable."
2006
+ ],
2007
+ "optional": true
2008
+ },
2009
+ {
2010
+ "name": "rental_authority",
2011
+ "writable": true,
2012
+ "pda": {
2013
+ "seeds": [
2014
+ {
2015
+ "kind": "const",
2016
+ "value": [
2017
+ 114,
2018
+ 101,
2019
+ 110,
2020
+ 116,
2021
+ 97,
2022
+ 108,
2023
+ 95,
2024
+ 97,
2025
+ 117,
2026
+ 116,
2027
+ 104,
2028
+ 111,
2029
+ 114,
2030
+ 105,
2031
+ 116,
2032
+ 121
2033
+ ]
2034
+ }
2035
+ ]
2036
+ }
2037
+ },
2038
+ {
2039
+ "name": "contract_thread",
2040
+ "docs": [
2041
+ "`contract` is supplied. Left unchecked in the struct so the break-glass",
2042
+ "path still works: antegen's `update_fiber` rejects any thread whose",
2043
+ "authority is not `rental_authority`, which confines this to SRSLY",
2044
+ "threads on its own."
2045
+ ],
2046
+ "writable": true
2047
+ },
2048
+ {
2049
+ "name": "fiber",
2050
+ "docs": [
2051
+ "against the thread via seeds."
2052
+ ],
2053
+ "writable": true
2054
+ },
2055
+ {
2056
+ "name": "antegen_program",
2057
+ "address": "AgTv5w1UvUb6zeqkThwMrztGu9hpepBu8YLghuR4dpSx"
2058
+ },
2059
+ {
2060
+ "name": "fiber_program",
2061
+ "address": "AgFv5afjW9DmSPkiEvJ1er5bAAmRUqaBeTB6Cr8e1hKx"
2062
+ },
2063
+ {
2064
+ "name": "system_program",
2065
+ "address": "11111111111111111111111111111111"
2066
+ }
2067
+ ],
2068
+ "args": [
2069
+ {
2070
+ "name": "fiber_index",
2071
+ "type": "u8"
2072
+ },
2073
+ {
2074
+ "name": "instruction",
2075
+ "type": {
2076
+ "defined": {
2077
+ "name": "SerializableInstruction"
2078
+ }
2079
+ }
2080
+ },
2081
+ {
2082
+ "name": "priority_fee",
2083
+ "type": {
2084
+ "option": "u64"
2085
+ }
2086
+ }
2087
+ ]
2088
+ },
1939
2089
  {
1940
2090
  "name": "create_borrower",
1941
2091
  "docs": [
@@ -3597,7 +3747,9 @@
3597
3747
  {
3598
3748
  "name": "owner_token_account",
3599
3749
  "docs": [
3600
- "Owner's destination token account (created by contract_thread)"
3750
+ "Owner's destination token account (created by contract_thread). The",
3751
+ "owner may close it, in which case payouts are deferred rather than",
3752
+ "failing the tick."
3601
3753
  ],
3602
3754
  "writable": true
3603
3755
  },
@@ -3770,7 +3922,10 @@
3770
3922
  "# Arguments",
3771
3923
  "* `bid_points` - Points to bid (burned; 0 if ATLAS bid)",
3772
3924
  "* `bid_atlas` - ATLAS premium to bid (0 if points bid)",
3773
- "* `duration` - Rental duration in seconds"
3925
+ "* `duration` - Rental duration in seconds",
3926
+ "* `discount_signature` / `discount_member_nonce` / `discount_bps` /",
3927
+ "`discount_expires_at` - Optional affiliate discount auth (mirrors",
3928
+ "`accept_rental`). Verified and locked at reserve, settled at close."
3774
3929
  ],
3775
3930
  "discriminator": [
3776
3931
  5,
@@ -4118,6 +4273,10 @@
4118
4273
  {
4119
4274
  "name": "sage_program"
4120
4275
  },
4276
+ {
4277
+ "name": "slyvault_program",
4278
+ "address": "VLTukwau1TDGhQUgBJfSSojSMv3BfnMHKrewnGN98M3"
4279
+ },
4121
4280
  {
4122
4281
  "name": "antegen_program",
4123
4282
  "address": "AgTv5w1UvUb6zeqkThwMrztGu9hpepBu8YLghuR4dpSx"
@@ -4151,6 +4310,35 @@
4151
4310
  {
4152
4311
  "name": "duration",
4153
4312
  "type": "i64"
4313
+ },
4314
+ {
4315
+ "name": "discount_signature",
4316
+ "type": {
4317
+ "option": {
4318
+ "array": [
4319
+ "u8",
4320
+ 64
4321
+ ]
4322
+ }
4323
+ }
4324
+ },
4325
+ {
4326
+ "name": "discount_member_nonce",
4327
+ "type": {
4328
+ "option": "u32"
4329
+ }
4330
+ },
4331
+ {
4332
+ "name": "discount_bps",
4333
+ "type": {
4334
+ "option": "u16"
4335
+ }
4336
+ },
4337
+ {
4338
+ "name": "discount_expires_at",
4339
+ "type": {
4340
+ "option": "i64"
4341
+ }
4154
4342
  }
4155
4343
  ]
4156
4344
  },
@@ -4564,6 +4752,19 @@
4564
4752
  164
4565
4753
  ]
4566
4754
  },
4755
+ {
4756
+ "name": "ContractFiberDoctored",
4757
+ "discriminator": [
4758
+ 14,
4759
+ 49,
4760
+ 216,
4761
+ 13,
4762
+ 84,
4763
+ 33,
4764
+ 142,
4765
+ 31
4766
+ ]
4767
+ },
4567
4768
  {
4568
4769
  "name": "ContractUpdated",
4569
4770
  "discriminator": [
@@ -4668,6 +4869,19 @@
4668
4869
  59
4669
4870
  ]
4670
4871
  },
4872
+ {
4873
+ "name": "ReservationForceClosed",
4874
+ "discriminator": [
4875
+ 242,
4876
+ 40,
4877
+ 22,
4878
+ 31,
4879
+ 119,
4880
+ 14,
4881
+ 46,
4882
+ 11
4883
+ ]
4884
+ },
4671
4885
  {
4672
4886
  "name": "ReservationKnockedOff",
4673
4887
  "discriminator": [
@@ -5217,6 +5431,11 @@
5217
5431
  "code": 6093,
5218
5432
  "name": "InsufficientFundsToCloseQueuedReservation",
5219
5433
  "msg": "Owner has insufficient ATLAS to refund the queued challenger's full bid. \\\n Deposit more ATLAS into your token account and retry. The exact \\\n shortfall amount is emitted in the program log."
5434
+ },
5435
+ {
5436
+ "code": 6094,
5437
+ "name": "InvalidInstructionData",
5438
+ "msg": "Fiber payload rejected. Index 0 must carry ProcessContract and index 1 \\\n must carry CloseRental, both targeting this program; and when the \\\n caller is the contract owner rather than admin, the payload must \\\n name that same contract, and that same thread."
5220
5439
  }
5221
5440
  ],
5222
5441
  "types": [
@@ -5911,6 +6130,30 @@
5911
6130
  ]
5912
6131
  }
5913
6132
  },
6133
+ {
6134
+ "name": "ContractFiberDoctored",
6135
+ "docs": [
6136
+ "Emitted on `contract_doctor_fiber` — one per fiber rewritten to bring a",
6137
+ "thread's `fiber_ids` back into agreement with the accounts they name."
6138
+ ],
6139
+ "type": {
6140
+ "kind": "struct",
6141
+ "fields": [
6142
+ {
6143
+ "name": "thread",
6144
+ "type": "pubkey"
6145
+ },
6146
+ {
6147
+ "name": "fiber",
6148
+ "type": "pubkey"
6149
+ },
6150
+ {
6151
+ "name": "fiber_index",
6152
+ "type": "u8"
6153
+ }
6154
+ ]
6155
+ }
6156
+ },
5914
6157
  {
5915
6158
  "name": "ContractState",
5916
6159
  "docs": [
@@ -6908,6 +7151,46 @@
6908
7151
  ]
6909
7152
  }
6910
7153
  },
7154
+ {
7155
+ "name": "ReservationForceClosed",
7156
+ "docs": [
7157
+ "Emitted when the owner closes a contract out from under a queued",
7158
+ "reservation. The challenger is made whole on their gross stake —",
7159
+ "`refund` = `from_contract` + `from_owner`, where `from_owner` is the",
7160
+ "shortfall the owner tops up (the bonus already paid out during the",
7161
+ "contract's auction history). No CTF points are awarded: the rental",
7162
+ "never happened."
7163
+ ],
7164
+ "type": {
7165
+ "kind": "struct",
7166
+ "fields": [
7167
+ {
7168
+ "name": "rental_state",
7169
+ "type": "pubkey"
7170
+ },
7171
+ {
7172
+ "name": "contract",
7173
+ "type": "pubkey"
7174
+ },
7175
+ {
7176
+ "name": "borrower",
7177
+ "type": "pubkey"
7178
+ },
7179
+ {
7180
+ "name": "refund",
7181
+ "type": "u64"
7182
+ },
7183
+ {
7184
+ "name": "from_contract",
7185
+ "type": "u64"
7186
+ },
7187
+ {
7188
+ "name": "from_owner",
7189
+ "type": "u64"
7190
+ }
7191
+ ]
7192
+ }
7193
+ },
6911
7194
  {
6912
7195
  "name": "ReservationKnockedOff",
6913
7196
  "docs": [
@@ -7034,6 +7317,58 @@
7034
7317
  ]
7035
7318
  }
7036
7319
  },
7320
+ {
7321
+ "name": "SerializableAccountMeta",
7322
+ "docs": [
7323
+ "Serializable version of AccountMeta"
7324
+ ],
7325
+ "type": {
7326
+ "kind": "struct",
7327
+ "fields": [
7328
+ {
7329
+ "name": "pubkey",
7330
+ "type": "pubkey"
7331
+ },
7332
+ {
7333
+ "name": "is_signer",
7334
+ "type": "bool"
7335
+ },
7336
+ {
7337
+ "name": "is_writable",
7338
+ "type": "bool"
7339
+ }
7340
+ ]
7341
+ }
7342
+ },
7343
+ {
7344
+ "name": "SerializableInstruction",
7345
+ "docs": [
7346
+ "Serializable version of Solana's Instruction for easier handling"
7347
+ ],
7348
+ "type": {
7349
+ "kind": "struct",
7350
+ "fields": [
7351
+ {
7352
+ "name": "program_id",
7353
+ "type": "pubkey"
7354
+ },
7355
+ {
7356
+ "name": "accounts",
7357
+ "type": {
7358
+ "vec": {
7359
+ "defined": {
7360
+ "name": "SerializableAccountMeta"
7361
+ }
7362
+ }
7363
+ }
7364
+ },
7365
+ {
7366
+ "name": "data",
7367
+ "type": "bytes"
7368
+ }
7369
+ ]
7370
+ }
7371
+ },
7037
7372
  {
7038
7373
  "name": "ShipCounts",
7039
7374
  "docs": [
@@ -6,7 +6,8 @@
6
6
  */
7
7
  import { AccountRole, address } from '@solana/kit';
8
8
  import { getCloseContractInstructionAsync, getCloseContractThreadInstructionAsync, } from '../generated/codama/instructions';
9
- import { mergeConfig, getAddresses } from '../utils/config';
9
+ import { mergeConfig, getAddresses, getRpcUrl } from '../utils/config';
10
+ import { createRpc } from '../utils/rpc';
10
11
  import { toTransactionSigner } from '../utils/signer';
11
12
  import { fetchThreadByAddress } from '../accounts/thread';
12
13
  import { resolveContractSnapshot } from '../utils/contractSnapshot';
@@ -16,9 +17,19 @@ import { deriveContractThread, deriveFiber } from '../pda/thread';
16
17
  import { prepareInstructions } from '../utils/instructions';
17
18
  import { closeRental } from './closeRental';
18
19
  /**
19
- * Close a rental contract and refund rent to the owner. Idempotent
20
- * recovers cleanly from partial prior closes. When no rental is active,
21
- * the contract's automation thread is closed in the same transaction.
20
+ * Close a rental contract and refund rent to the owner. When no rental is
21
+ * active, the contract's automation thread is closed in the same transaction.
22
+ *
23
+ * A live rental cannot be closed out from under its borrower, so the close is
24
+ * latched as `to_close` and completed later by the automation thread, once the
25
+ * rental ends. Antegen execution is permissionless and executors are paid from
26
+ * the thread's own lamport balance, so a drained thread can be revived by
27
+ * anyone with a plain SOL transfer — the owner does not need to come back.
28
+ *
29
+ * Safe to retry while the close is still pending: a repeat call is a no-op
30
+ * that re-latches the flag. It is *not* a no-op after a successful full close
31
+ * — the contract account is gone, so the next call fails during account
32
+ * validation. That reverts cleanly, burning no rent.
22
33
  *
23
34
  * @param params - Contract closing parameters
24
35
  * @param config - Optional SDK configuration overrides
@@ -134,16 +145,43 @@ export async function closeContract(params, config) {
134
145
  const contractThread = await deriveContractThread(contractAddress, rentalAuthority);
135
146
  const threadAccount = await fetchThreadByAddress(contractThread, finalConfig.rpcUrl);
136
147
  const fiberIds = Array.from(threadAccount.data.fiberIds);
137
- const fiberAccounts = await Promise.all(fiberIds.map(async (id) => ({
138
- address: await deriveFiber(contractThread, id),
148
+ // Only pass fibers that still exist. `fiber_ids` records what the thread
149
+ // *tracks*, and nothing on chain keeps that in agreement with the accounts
150
+ // it names — a fiber account can be closed out from under it, which is
151
+ // exactly what the 2026-08-26 rent sweep did to hundreds of them. Passing
152
+ // an id whose account is gone makes the fiber program deserialize an empty
153
+ // buffer and fail with `InvalidFiberData`, so a contract that tracks a
154
+ // destroyed fiber could never be closed at all.
155
+ //
156
+ // A tracked-but-absent fiber needs nothing closed; dropping it from the
157
+ // list is the whole remedy.
158
+ const fiberAddresses = await Promise.all(fiberIds.map(id => deriveFiber(contractThread, id)));
159
+ const rpc = createRpc(finalConfig.rpcUrl || getRpcUrl(config));
160
+ const probed = fiberAddresses.length
161
+ ? (await rpc.getMultipleAccounts(fiberAddresses, { encoding: 'base64' }).send()).value
162
+ : [];
163
+ const fiberAccounts = fiberAddresses
164
+ .filter((_, i) => probed[i] !== null)
165
+ .map(fiberAddress => ({
166
+ address: fiberAddress,
139
167
  role: AccountRole.WRITABLE,
140
- })));
168
+ }));
141
169
  const ix = await getCloseContractThreadInstructionAsync({ owner: ownerSigner, contract: contractAddress, thread: contractThread }, { programAddress });
142
170
  ix.accounts.push(...fiberAccounts);
143
171
  return ix;
144
172
  };
145
173
  // Helper: build a closeContract instruction with optional queued borrower accounts
146
174
  const buildCloseContractIx = async (includeQueued) => {
175
+ // Pass the thread PDA whenever the contract still points at one. Normally
176
+ // it's redundant — `closeContractThread` clears the pointer first. It
177
+ // matters when the pointer is stale: `deleteContractThread` (admin
178
+ // break-glass) closes a thread without touching the contract, and without
179
+ // the account to prove it's gone the contract can never be closed at all.
180
+ let contractThread;
181
+ if (hasThread) {
182
+ const rentalAuthority = await deriveRentalAuthority();
183
+ contractThread = await deriveContractThread(contractAddress, rentalAuthority);
184
+ }
147
185
  return getCloseContractInstructionAsync({
148
186
  owner: ownerSigner,
149
187
  contract: contractAddress,
@@ -151,6 +189,7 @@ export async function closeContract(params, config) {
151
189
  fleet: fleetAddress,
152
190
  contractTokenAccount: contractTokenAccount,
153
191
  sageProgram,
192
+ ...(contractThread ? { contractThread } : {}),
154
193
  ...(includeQueued && queuedBorrowerState && queuedBorrowerTokenAccount
155
194
  ? { queuedBorrowerState, queuedBorrowerTokenAccount }
156
195
  : {}),
@@ -159,18 +198,23 @@ export async function closeContract(params, config) {
159
198
  // Compose instructions based on scenario
160
199
  const ixs = [];
161
200
  if (activeExpired && hasQueuedSlot) {
162
- // Expired active + queued: multi-instruction composition
163
- // 1. closeRental — settles expired active
164
- const closeRentalResult = await closeRental({ payer: params.owner, contract: contractAddress }, config);
201
+ // Expired active + queued.
202
+ //
203
+ // Order is load-bearing. `closeRental` must NOT promote the challenger
204
+ // Path B would install a brand-new live rental and every close after it
205
+ // would just re-latch `to_close`. Suppress the activation so the rental
206
+ // ends and the slot stays empty (Path A), drop the thread so the
207
+ // immediate-close branch isn't blocked by `ThreadStillExists`, then let a
208
+ // single `closeContract` force-refund the challenger and close for real.
209
+ // 1. Settle the expired active without promoting the queued challenger.
210
+ const closeRentalResult = await closeRental({ payer: params.owner, contract: contractAddress, activateQueued: false }, config);
165
211
  ixs.push(...closeRentalResult.instructions);
166
212
  // 2. closeContractThread (if thread exists)
167
213
  if (hasThread) {
168
214
  ixs.push(await buildThreadCloseIx());
169
215
  }
170
- // 3. closeContract — force-closes queued, sets to_close
216
+ // 3. closeContract — force-refunds the queued challenger, then closes.
171
217
  ixs.push(await buildCloseContractIx(true));
172
- // 4. closeContract — final close (no active, no queued, no thread)
173
- ixs.push(await buildCloseContractIx(false));
174
218
  }
175
219
  else if (activeExpired && !hasQueuedSlot) {
176
220
  // Expired active only, no queued — settle then close
@@ -1 +1 @@
1
- {"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAkC,MAAM,aAAa,CAAC;AACnF,OAAO,EACL,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAyB,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAqD5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA2B,EAC3B,MAA2B;IAE3B,eAAe;IACf,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAExC,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,sCAAsC;IACtC,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAE3D,uCAAuC;IACvC,IAAI,YAAqB,CAAC;IAC1B,IAAI,eAAwB,CAAC;IAE7B,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,4BAA4B;QAC5B,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,KAAgB,CAAC,CAAC;QAChD,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,uDAAuD;QACvD,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,KAAgB,CAAC,CAAC;QAChD,eAAe,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3B,uDAAuD;QACvD,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,kEAAkE;IAClE,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC;QACzC,eAAe;QACf,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED,8CAA8C;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW;QACpC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAsB,CAAC;QACxC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAe,CAAC,CAAC;IAEvC,gEAAgE;IAChE,MAAM,oBAAoB,GAAG,MAAM,4BAA4B,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAE5F,uBAAuB;IACvB,MAAM,iBAAiB,GAAG,kCAA6C,CAAC;IACxE,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,KAAK,iBAAiB,CAAC;IACpE,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,KAAK,iBAAiB,CAAC;IAC9E,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,KAAK,iBAAiB,CAAC;IAE9E,oCAAoC;IACpC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,IAAI,mBAAwC,CAAC;IAC7C,IAAI,0BAA+C,CAAC;IACpD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,cAAuB,CAAC;QAC5B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,cAAyB,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7B,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;QACJ,CAAC;QACD,mBAAmB,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAChE,0BAA0B,GAAG,MAAM,4BAA4B,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC7F,CAAC;IAED,kDAAkD;IAClD,MAAM,kBAAkB,GAAG,KAAK,IAA0B,EAAE;QAC1D,MAAM,eAAe,GAAG,MAAM,qBAAqB,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QACpF,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;QACrE,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE,CAAC,CAAC;YACxB,OAAO,EAAE,MAAM,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9C,IAAI,EAAE,WAAW,CAAC,QAAiB;SACpC,CAAC,CAAC,CACJ,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,sCAAsC,CACrD,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,EACzE,EAAE,cAAc,EAAE,CACnB,CAAC;QACF,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,mFAAmF;IACnF,MAAM,oBAAoB,GAAG,KAAK,EAAE,aAAsB,EAAwB,EAAE;QAClF,OAAO,gCAAgC,CACrC;YACE,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,YAAa;YACpB,oBAAoB,EAAE,oBAAqB;YAC3C,WAAW;YACX,GAAG,CAAC,aAAa,IAAI,mBAAmB,IAAI,0BAA0B;gBACpE,CAAC,CAAC,EAAE,mBAAmB,EAAE,0BAA0B,EAAE;gBACrD,CAAC,CAAC,EAAE,CAAC;SACR,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IACJ,CAAC,CAAC;IAEF,yCAAyC;IACzC,MAAM,GAAG,GAAkB,EAAE,CAAC;IAE9B,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;QACnC,yDAAyD;QACzD,0CAA0C;QAC1C,MAAM,iBAAiB,GAAG,MAAM,WAAW,CACzC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,EAClD,MAAM,CACP,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE5C,4CAA4C;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,wDAAwD;QACxD,GAAG,CAAC,IAAI,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3C,mEAAmE;QACnE,GAAG,CAAC,IAAI,CAAC,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;SAAM,IAAI,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,qDAAqD;QACrD,MAAM,iBAAiB,GAAG,MAAM,WAAW,CACzC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,EAClD,MAAM,CACP,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE5C,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;SAAM,IAAI,CAAC,aAAa,IAAI,aAAa,EAAE,CAAC;QAC3C,6EAA6E;QAC7E,GAAG,CAAC,IAAI,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,mBAAmB,CAAC,GAAG,EAAE;QAC9B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"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"}