@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": [
@@ -10,6 +10,7 @@ exports.closeContract = closeContract;
10
10
  const kit_1 = require("@solana/kit");
11
11
  const instructions_1 = require("../generated/codama/instructions");
12
12
  const config_1 = require("../utils/config");
13
+ const rpc_1 = require("../utils/rpc");
13
14
  const signer_1 = require("../utils/signer");
14
15
  const thread_1 = require("../accounts/thread");
15
16
  const contractSnapshot_1 = require("../utils/contractSnapshot");
@@ -19,9 +20,19 @@ const thread_2 = require("../pda/thread");
19
20
  const instructions_2 = require("../utils/instructions");
20
21
  const closeRental_1 = require("./closeRental");
21
22
  /**
22
- * Close a rental contract and refund rent to the owner. Idempotent
23
- * recovers cleanly from partial prior closes. When no rental is active,
24
- * the contract's automation thread is closed in the same transaction.
23
+ * Close a rental contract and refund rent to the owner. When no rental is
24
+ * active, the contract's automation thread is closed in the same transaction.
25
+ *
26
+ * A live rental cannot be closed out from under its borrower, so the close is
27
+ * latched as `to_close` and completed later by the automation thread, once the
28
+ * rental ends. Antegen execution is permissionless and executors are paid from
29
+ * the thread's own lamport balance, so a drained thread can be revived by
30
+ * anyone with a plain SOL transfer — the owner does not need to come back.
31
+ *
32
+ * Safe to retry while the close is still pending: a repeat call is a no-op
33
+ * that re-latches the flag. It is *not* a no-op after a successful full close
34
+ * — the contract account is gone, so the next call fails during account
35
+ * validation. That reverts cleanly, burning no rent.
25
36
  *
26
37
  * @param params - Contract closing parameters
27
38
  * @param config - Optional SDK configuration overrides
@@ -137,16 +148,43 @@ async function closeContract(params, config) {
137
148
  const contractThread = await (0, thread_2.deriveContractThread)(contractAddress, rentalAuthority);
138
149
  const threadAccount = await (0, thread_1.fetchThreadByAddress)(contractThread, finalConfig.rpcUrl);
139
150
  const fiberIds = Array.from(threadAccount.data.fiberIds);
140
- const fiberAccounts = await Promise.all(fiberIds.map(async (id) => ({
141
- address: await (0, thread_2.deriveFiber)(contractThread, id),
151
+ // Only pass fibers that still exist. `fiber_ids` records what the thread
152
+ // *tracks*, and nothing on chain keeps that in agreement with the accounts
153
+ // it names — a fiber account can be closed out from under it, which is
154
+ // exactly what the 2026-08-26 rent sweep did to hundreds of them. Passing
155
+ // an id whose account is gone makes the fiber program deserialize an empty
156
+ // buffer and fail with `InvalidFiberData`, so a contract that tracks a
157
+ // destroyed fiber could never be closed at all.
158
+ //
159
+ // A tracked-but-absent fiber needs nothing closed; dropping it from the
160
+ // list is the whole remedy.
161
+ const fiberAddresses = await Promise.all(fiberIds.map(id => (0, thread_2.deriveFiber)(contractThread, id)));
162
+ const rpc = (0, rpc_1.createRpc)(finalConfig.rpcUrl || (0, config_1.getRpcUrl)(config));
163
+ const probed = fiberAddresses.length
164
+ ? (await rpc.getMultipleAccounts(fiberAddresses, { encoding: 'base64' }).send()).value
165
+ : [];
166
+ const fiberAccounts = fiberAddresses
167
+ .filter((_, i) => probed[i] !== null)
168
+ .map(fiberAddress => ({
169
+ address: fiberAddress,
142
170
  role: kit_1.AccountRole.WRITABLE,
143
- })));
171
+ }));
144
172
  const ix = await (0, instructions_1.getCloseContractThreadInstructionAsync)({ owner: ownerSigner, contract: contractAddress, thread: contractThread }, { programAddress });
145
173
  ix.accounts.push(...fiberAccounts);
146
174
  return ix;
147
175
  };
148
176
  // Helper: build a closeContract instruction with optional queued borrower accounts
149
177
  const buildCloseContractIx = async (includeQueued) => {
178
+ // Pass the thread PDA whenever the contract still points at one. Normally
179
+ // it's redundant — `closeContractThread` clears the pointer first. It
180
+ // matters when the pointer is stale: `deleteContractThread` (admin
181
+ // break-glass) closes a thread without touching the contract, and without
182
+ // the account to prove it's gone the contract can never be closed at all.
183
+ let contractThread;
184
+ if (hasThread) {
185
+ const rentalAuthority = await (0, srsly_1.deriveRentalAuthority)();
186
+ contractThread = await (0, thread_2.deriveContractThread)(contractAddress, rentalAuthority);
187
+ }
150
188
  return (0, instructions_1.getCloseContractInstructionAsync)({
151
189
  owner: ownerSigner,
152
190
  contract: contractAddress,
@@ -154,6 +192,7 @@ async function closeContract(params, config) {
154
192
  fleet: fleetAddress,
155
193
  contractTokenAccount: contractTokenAccount,
156
194
  sageProgram,
195
+ ...(contractThread ? { contractThread } : {}),
157
196
  ...(includeQueued && queuedBorrowerState && queuedBorrowerTokenAccount
158
197
  ? { queuedBorrowerState, queuedBorrowerTokenAccount }
159
198
  : {}),
@@ -162,18 +201,23 @@ async function closeContract(params, config) {
162
201
  // Compose instructions based on scenario
163
202
  const ixs = [];
164
203
  if (activeExpired && hasQueuedSlot) {
165
- // Expired active + queued: multi-instruction composition
166
- // 1. closeRental — settles expired active
167
- const closeRentalResult = await (0, closeRental_1.closeRental)({ payer: params.owner, contract: contractAddress }, config);
204
+ // Expired active + queued.
205
+ //
206
+ // Order is load-bearing. `closeRental` must NOT promote the challenger
207
+ // Path B would install a brand-new live rental and every close after it
208
+ // would just re-latch `to_close`. Suppress the activation so the rental
209
+ // ends and the slot stays empty (Path A), drop the thread so the
210
+ // immediate-close branch isn't blocked by `ThreadStillExists`, then let a
211
+ // single `closeContract` force-refund the challenger and close for real.
212
+ // 1. Settle the expired active without promoting the queued challenger.
213
+ const closeRentalResult = await (0, closeRental_1.closeRental)({ payer: params.owner, contract: contractAddress, activateQueued: false }, config);
168
214
  ixs.push(...closeRentalResult.instructions);
169
215
  // 2. closeContractThread (if thread exists)
170
216
  if (hasThread) {
171
217
  ixs.push(await buildThreadCloseIx());
172
218
  }
173
- // 3. closeContract — force-closes queued, sets to_close
219
+ // 3. closeContract — force-refunds the queued challenger, then closes.
174
220
  ixs.push(await buildCloseContractIx(true));
175
- // 4. closeContract — final close (no active, no queued, no thread)
176
- ixs.push(await buildCloseContractIx(false));
177
221
  }
178
222
  else if (activeExpired && !hasQueuedSlot) {
179
223
  // Expired active only, no queued — settle then close
@@ -1 +1 @@
1
- {"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"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"}