@moltium/world-core 0.1.3 → 0.1.5

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 (953) hide show
  1. package/dist/index.cjs +2195 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +1234 -0
  4. package/dist/index.d.ts +1234 -0
  5. package/dist/index.js +2158 -0
  6. package/dist/index.js.map +1 -0
  7. package/lib/forge-std/.gitattributes +1 -0
  8. package/lib/forge-std/.github/CODEOWNERS +1 -0
  9. package/lib/forge-std/.github/dependabot.yml +6 -0
  10. package/lib/forge-std/.github/workflows/ci.yml +125 -0
  11. package/lib/forge-std/.github/workflows/sync.yml +36 -0
  12. package/lib/forge-std/CONTRIBUTING.md +193 -0
  13. package/lib/forge-std/LICENSE-APACHE +203 -0
  14. package/lib/forge-std/LICENSE-MIT +25 -0
  15. package/lib/forge-std/README.md +268 -0
  16. package/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
  17. package/lib/forge-std/foundry.toml +18 -0
  18. package/lib/forge-std/package.json +16 -0
  19. package/lib/forge-std/scripts/vm.py +636 -0
  20. package/lib/forge-std/src/Base.sol +48 -0
  21. package/lib/forge-std/src/Config.sol +60 -0
  22. package/lib/forge-std/src/LibVariable.sol +477 -0
  23. package/lib/forge-std/src/Script.sol +28 -0
  24. package/lib/forge-std/src/StdAssertions.sol +779 -0
  25. package/lib/forge-std/src/StdChains.sol +295 -0
  26. package/lib/forge-std/src/StdCheats.sol +825 -0
  27. package/lib/forge-std/src/StdConfig.sol +632 -0
  28. package/lib/forge-std/src/StdConstants.sol +30 -0
  29. package/lib/forge-std/src/StdError.sol +15 -0
  30. package/lib/forge-std/src/StdInvariant.sol +120 -0
  31. package/lib/forge-std/src/StdJson.sol +275 -0
  32. package/lib/forge-std/src/StdMath.sol +47 -0
  33. package/lib/forge-std/src/StdStorage.sol +475 -0
  34. package/lib/forge-std/src/StdStyle.sol +333 -0
  35. package/lib/forge-std/src/StdToml.sol +275 -0
  36. package/lib/forge-std/src/StdUtils.sol +200 -0
  37. package/lib/forge-std/src/Test.sol +32 -0
  38. package/lib/forge-std/src/Vm.sol +2500 -0
  39. package/lib/forge-std/src/console.sol +1551 -0
  40. package/lib/forge-std/src/console2.sol +4 -0
  41. package/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  42. package/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  43. package/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  44. package/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  45. package/lib/forge-std/src/interfaces/IERC6909.sol +72 -0
  46. package/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  47. package/lib/forge-std/src/interfaces/IERC7540.sol +144 -0
  48. package/lib/forge-std/src/interfaces/IERC7575.sol +241 -0
  49. package/lib/forge-std/src/interfaces/IMulticall3.sol +68 -0
  50. package/lib/forge-std/src/safeconsole.sol +13248 -0
  51. package/lib/forge-std/test/CommonBase.t.sol +44 -0
  52. package/lib/forge-std/test/Config.t.sol +381 -0
  53. package/lib/forge-std/test/LibVariable.t.sol +452 -0
  54. package/lib/forge-std/test/StdAssertions.t.sol +141 -0
  55. package/lib/forge-std/test/StdChains.t.sol +227 -0
  56. package/lib/forge-std/test/StdCheats.t.sol +638 -0
  57. package/lib/forge-std/test/StdConstants.t.sol +38 -0
  58. package/lib/forge-std/test/StdError.t.sol +119 -0
  59. package/lib/forge-std/test/StdJson.t.sol +49 -0
  60. package/lib/forge-std/test/StdMath.t.sol +202 -0
  61. package/lib/forge-std/test/StdStorage.t.sol +485 -0
  62. package/lib/forge-std/test/StdStyle.t.sol +110 -0
  63. package/lib/forge-std/test/StdToml.t.sol +49 -0
  64. package/lib/forge-std/test/StdUtils.t.sol +342 -0
  65. package/lib/forge-std/test/Vm.t.sol +18 -0
  66. package/lib/forge-std/test/compilation/CompilationScript.sol +8 -0
  67. package/lib/forge-std/test/compilation/CompilationScriptBase.sol +8 -0
  68. package/lib/forge-std/test/compilation/CompilationTest.sol +8 -0
  69. package/lib/forge-std/test/compilation/CompilationTestBase.sol +8 -0
  70. package/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  71. package/lib/forge-std/test/fixtures/config.toml +81 -0
  72. package/lib/forge-std/test/fixtures/test.json +8 -0
  73. package/lib/forge-std/test/fixtures/test.toml +6 -0
  74. package/lib/openzeppelin-contracts/.changeset/config.json +12 -0
  75. package/lib/openzeppelin-contracts/.codecov.yml +16 -0
  76. package/lib/openzeppelin-contracts/.editorconfig +21 -0
  77. package/lib/openzeppelin-contracts/.gitattributes +3 -0
  78. package/lib/openzeppelin-contracts/.github/CODEOWNERS +10 -0
  79. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
  80. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml +4 -0
  81. package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
  82. package/lib/openzeppelin-contracts/.github/PULL_REQUEST_TEMPLATE.md +20 -0
  83. package/lib/openzeppelin-contracts/.github/actions/gas-compare/action.yml +51 -0
  84. package/lib/openzeppelin-contracts/.github/actions/setup/action.yml +22 -0
  85. package/lib/openzeppelin-contracts/.github/actions/storage-layout/action.yml +57 -0
  86. package/lib/openzeppelin-contracts/.github/workflows/actionlint.yml +18 -0
  87. package/lib/openzeppelin-contracts/.github/workflows/changeset.yml +28 -0
  88. package/lib/openzeppelin-contracts/.github/workflows/checks.yml +132 -0
  89. package/lib/openzeppelin-contracts/.github/workflows/docs.yml +19 -0
  90. package/lib/openzeppelin-contracts/.github/workflows/formal-verification.yml +88 -0
  91. package/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +214 -0
  92. package/lib/openzeppelin-contracts/.github/workflows/upgradeable.yml +34 -0
  93. package/lib/openzeppelin-contracts/.gitmodules +10 -0
  94. package/lib/openzeppelin-contracts/.husky/pre-commit +2 -0
  95. package/lib/openzeppelin-contracts/.mocharc.js +4 -0
  96. package/lib/openzeppelin-contracts/.prettierrc +15 -0
  97. package/lib/openzeppelin-contracts/.solcover.js +21 -0
  98. package/lib/openzeppelin-contracts/CHANGELOG.md +1355 -0
  99. package/lib/openzeppelin-contracts/CODE_OF_CONDUCT.md +73 -0
  100. package/lib/openzeppelin-contracts/CONTRIBUTING.md +36 -0
  101. package/lib/openzeppelin-contracts/FUNDING.json +10 -0
  102. package/lib/openzeppelin-contracts/GUIDELINES.md +170 -0
  103. package/lib/openzeppelin-contracts/LICENSE +22 -0
  104. package/lib/openzeppelin-contracts/README.md +106 -0
  105. package/lib/openzeppelin-contracts/RELEASING.md +45 -0
  106. package/lib/openzeppelin-contracts/SECURITY.md +43 -0
  107. package/lib/openzeppelin-contracts/audits/2017-03.md +292 -0
  108. package/lib/openzeppelin-contracts/audits/2018-10.pdf +0 -0
  109. package/lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf +0 -0
  110. package/lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf +0 -0
  111. package/lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf +0 -0
  112. package/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf +0 -0
  113. package/lib/openzeppelin-contracts/audits/2024-10-v5.1.pdf +0 -0
  114. package/lib/openzeppelin-contracts/audits/2024-12-v5.2.pdf +0 -0
  115. package/lib/openzeppelin-contracts/audits/2025-04-v5.3.pdf +0 -0
  116. package/lib/openzeppelin-contracts/audits/2025-07-v5.4.pdf +0 -0
  117. package/lib/openzeppelin-contracts/audits/README.md +21 -0
  118. package/lib/openzeppelin-contracts/certora/Makefile +54 -0
  119. package/lib/openzeppelin-contracts/certora/README.md +60 -0
  120. package/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch +97 -0
  121. package/lib/openzeppelin-contracts/certora/diff/account_extensions_draft-AccountERC7579.sol.patch +25 -0
  122. package/lib/openzeppelin-contracts/certora/diff/token_ERC721_ERC721.sol.patch +11 -0
  123. package/lib/openzeppelin-contracts/certora/harnesses/AccessControlDefaultAdminRulesHarness.sol +46 -0
  124. package/lib/openzeppelin-contracts/certora/harnesses/AccessControlHarness.sol +6 -0
  125. package/lib/openzeppelin-contracts/certora/harnesses/AccessManagedHarness.sol +36 -0
  126. package/lib/openzeppelin-contracts/certora/harnesses/AccessManagerHarness.sol +116 -0
  127. package/lib/openzeppelin-contracts/certora/harnesses/AccountHarness.sol +60 -0
  128. package/lib/openzeppelin-contracts/certora/harnesses/DoubleEndedQueueHarness.sol +58 -0
  129. package/lib/openzeppelin-contracts/certora/harnesses/ERC20FlashMintHarness.sol +36 -0
  130. package/lib/openzeppelin-contracts/certora/harnesses/ERC20PermitHarness.sol +16 -0
  131. package/lib/openzeppelin-contracts/certora/harnesses/ERC20WrapperHarness.sol +22 -0
  132. package/lib/openzeppelin-contracts/certora/harnesses/ERC3156FlashBorrowerHarness.sol +13 -0
  133. package/lib/openzeppelin-contracts/certora/harnesses/ERC721Harness.sol +37 -0
  134. package/lib/openzeppelin-contracts/certora/harnesses/ERC721ReceiverHarness.sol +11 -0
  135. package/lib/openzeppelin-contracts/certora/harnesses/EnumerableMapHarness.sol +55 -0
  136. package/lib/openzeppelin-contracts/certora/harnesses/EnumerableSetHarness.sol +35 -0
  137. package/lib/openzeppelin-contracts/certora/harnesses/InitializableHarness.sol +23 -0
  138. package/lib/openzeppelin-contracts/certora/harnesses/NoncesHarness.sol +14 -0
  139. package/lib/openzeppelin-contracts/certora/harnesses/Ownable2StepHarness.sol +10 -0
  140. package/lib/openzeppelin-contracts/certora/harnesses/OwnableHarness.sol +10 -0
  141. package/lib/openzeppelin-contracts/certora/harnesses/PausableHarness.sol +18 -0
  142. package/lib/openzeppelin-contracts/certora/harnesses/TimelockControllerHarness.sol +13 -0
  143. package/lib/openzeppelin-contracts/certora/reports/2021-10.pdf +0 -0
  144. package/lib/openzeppelin-contracts/certora/reports/2022-03.pdf +0 -0
  145. package/lib/openzeppelin-contracts/certora/reports/2022-05.pdf +0 -0
  146. package/lib/openzeppelin-contracts/certora/run.js +68 -0
  147. package/lib/openzeppelin-contracts/certora/specs/AccessControl.conf +8 -0
  148. package/lib/openzeppelin-contracts/certora/specs/AccessControl.spec +119 -0
  149. package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.conf +8 -0
  150. package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.spec +467 -0
  151. package/lib/openzeppelin-contracts/certora/specs/AccessManaged.conf +14 -0
  152. package/lib/openzeppelin-contracts/certora/specs/AccessManaged.spec +49 -0
  153. package/lib/openzeppelin-contracts/certora/specs/AccessManager.conf +10 -0
  154. package/lib/openzeppelin-contracts/certora/specs/AccessManager.spec +837 -0
  155. package/lib/openzeppelin-contracts/certora/specs/Account.conf +9 -0
  156. package/lib/openzeppelin-contracts/certora/specs/Account.spec +490 -0
  157. package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.conf +8 -0
  158. package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.spec +300 -0
  159. package/lib/openzeppelin-contracts/certora/specs/ERC20.conf +9 -0
  160. package/lib/openzeppelin-contracts/certora/specs/ERC20.spec +352 -0
  161. package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.conf +10 -0
  162. package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.spec +55 -0
  163. package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.conf +13 -0
  164. package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.spec +226 -0
  165. package/lib/openzeppelin-contracts/certora/specs/ERC721.conf +10 -0
  166. package/lib/openzeppelin-contracts/certora/specs/ERC721.spec +695 -0
  167. package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.conf +8 -0
  168. package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.spec +364 -0
  169. package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.conf +8 -0
  170. package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.spec +272 -0
  171. package/lib/openzeppelin-contracts/certora/specs/Initializable.conf +8 -0
  172. package/lib/openzeppelin-contracts/certora/specs/Initializable.spec +176 -0
  173. package/lib/openzeppelin-contracts/certora/specs/Nonces.conf +8 -0
  174. package/lib/openzeppelin-contracts/certora/specs/Nonces.spec +92 -0
  175. package/lib/openzeppelin-contracts/certora/specs/Ownable.conf +8 -0
  176. package/lib/openzeppelin-contracts/certora/specs/Ownable.spec +77 -0
  177. package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.conf +8 -0
  178. package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.spec +108 -0
  179. package/lib/openzeppelin-contracts/certora/specs/Pausable.conf +8 -0
  180. package/lib/openzeppelin-contracts/certora/specs/Pausable.spec +96 -0
  181. package/lib/openzeppelin-contracts/certora/specs/TimelockController.conf +10 -0
  182. package/lib/openzeppelin-contracts/certora/specs/TimelockController.spec +299 -0
  183. package/lib/openzeppelin-contracts/certora/specs/helpers/helpers.spec +13 -0
  184. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControl.spec +8 -0
  185. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControlDefaultAdminRules.spec +36 -0
  186. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessManaged.spec +5 -0
  187. package/lib/openzeppelin-contracts/certora/specs/methods/IAccessManager.spec +33 -0
  188. package/lib/openzeppelin-contracts/certora/specs/methods/IAccount.spec +34 -0
  189. package/lib/openzeppelin-contracts/certora/specs/methods/IERC20.spec +11 -0
  190. package/lib/openzeppelin-contracts/certora/specs/methods/IERC2612.spec +5 -0
  191. package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashBorrower.spec +3 -0
  192. package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashLender.spec +5 -0
  193. package/lib/openzeppelin-contracts/certora/specs/methods/IERC5313.spec +3 -0
  194. package/lib/openzeppelin-contracts/certora/specs/methods/IERC721.spec +17 -0
  195. package/lib/openzeppelin-contracts/certora/specs/methods/IERC721Receiver.spec +3 -0
  196. package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable.spec +5 -0
  197. package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable2Step.spec +7 -0
  198. package/lib/openzeppelin-contracts/contracts/access/AccessControl.sol +207 -0
  199. package/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol +98 -0
  200. package/lib/openzeppelin-contracts/contracts/access/Ownable.sol +100 -0
  201. package/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol +67 -0
  202. package/lib/openzeppelin-contracts/contracts/access/README.adoc +45 -0
  203. package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlDefaultAdminRules.sol +372 -0
  204. package/lib/openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol +81 -0
  205. package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlDefaultAdminRules.sol +192 -0
  206. package/lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol +31 -0
  207. package/lib/openzeppelin-contracts/contracts/access/manager/AccessManaged.sol +112 -0
  208. package/lib/openzeppelin-contracts/contracts/access/manager/AccessManager.sol +741 -0
  209. package/lib/openzeppelin-contracts/contracts/access/manager/AuthorityUtils.sol +36 -0
  210. package/lib/openzeppelin-contracts/contracts/access/manager/IAccessManaged.sol +32 -0
  211. package/lib/openzeppelin-contracts/contracts/access/manager/IAccessManager.sol +399 -0
  212. package/lib/openzeppelin-contracts/contracts/access/manager/IAuthority.sol +14 -0
  213. package/lib/openzeppelin-contracts/contracts/account/Account.sol +151 -0
  214. package/lib/openzeppelin-contracts/contracts/account/README.adoc +30 -0
  215. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-AccountERC7579.sol +419 -0
  216. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-AccountERC7579Hooked.sol +107 -0
  217. package/lib/openzeppelin-contracts/contracts/account/extensions/draft-ERC7821.sol +70 -0
  218. package/lib/openzeppelin-contracts/contracts/account/utils/EIP7702Utils.sol +21 -0
  219. package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC4337Utils.sol +159 -0
  220. package/lib/openzeppelin-contracts/contracts/account/utils/draft-ERC7579Utils.sol +280 -0
  221. package/lib/openzeppelin-contracts/contracts/crosschain/ERC7786Recipient.sol +70 -0
  222. package/lib/openzeppelin-contracts/contracts/crosschain/README.adoc +12 -0
  223. package/lib/openzeppelin-contracts/contracts/finance/README.adoc +14 -0
  224. package/lib/openzeppelin-contracts/contracts/finance/VestingWallet.sol +159 -0
  225. package/lib/openzeppelin-contracts/contracts/finance/VestingWalletCliff.sol +54 -0
  226. package/lib/openzeppelin-contracts/contracts/governance/Governor.sol +818 -0
  227. package/lib/openzeppelin-contracts/contracts/governance/IGovernor.sol +454 -0
  228. package/lib/openzeppelin-contracts/contracts/governance/README.adoc +197 -0
  229. package/lib/openzeppelin-contracts/contracts/governance/TimelockController.sol +471 -0
  230. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingFractional.sol +190 -0
  231. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingOverridable.sol +222 -0
  232. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorCountingSimple.sol +96 -0
  233. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorNoncesKeyed.sol +91 -0
  234. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorPreventLateQuorum.sol +92 -0
  235. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorProposalGuardian.sol +59 -0
  236. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSequentialProposalId.sol +75 -0
  237. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSettings.sol +106 -0
  238. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorStorage.sol +125 -0
  239. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorSuperQuorum.sol +59 -0
  240. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockAccess.sol +346 -0
  241. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockCompound.sol +165 -0
  242. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorTimelockControl.sol +167 -0
  243. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotes.sol +63 -0
  244. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesQuorumFraction.sol +113 -0
  245. package/lib/openzeppelin-contracts/contracts/governance/extensions/GovernorVotesSuperQuorumFraction.sol +135 -0
  246. package/lib/openzeppelin-contracts/contracts/governance/utils/IVotes.sol +60 -0
  247. package/lib/openzeppelin-contracts/contracts/governance/utils/Votes.sol +252 -0
  248. package/lib/openzeppelin-contracts/contracts/governance/utils/VotesExtended.sol +84 -0
  249. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol +6 -0
  250. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol +6 -0
  251. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol +6 -0
  252. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol +17 -0
  253. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol +86 -0
  254. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Receiver.sol +32 -0
  255. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1363Spender.sol +26 -0
  256. package/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol +6 -0
  257. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol +20 -0
  258. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol +112 -0
  259. package/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol +24 -0
  260. package/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol +6 -0
  261. package/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol +6 -0
  262. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol +19 -0
  263. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2612.sol +8 -0
  264. package/lib/openzeppelin-contracts/contracts/interfaces/IERC2981.sol +26 -0
  265. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol +7 -0
  266. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashBorrower.sol +27 -0
  267. package/lib/openzeppelin-contracts/contracts/interfaces/IERC3156FlashLender.sol +41 -0
  268. package/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol +230 -0
  269. package/lib/openzeppelin-contracts/contracts/interfaces/IERC4906.sol +20 -0
  270. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol +28 -0
  271. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5313.sol +16 -0
  272. package/lib/openzeppelin-contracts/contracts/interfaces/IERC5805.sol +9 -0
  273. package/lib/openzeppelin-contracts/contracts/interfaces/IERC6372.sol +17 -0
  274. package/lib/openzeppelin-contracts/contracts/interfaces/IERC6909.sol +125 -0
  275. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol +6 -0
  276. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol +6 -0
  277. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol +6 -0
  278. package/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol +6 -0
  279. package/lib/openzeppelin-contracts/contracts/interfaces/IERC7751.sol +12 -0
  280. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol +200 -0
  281. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol +35 -0
  282. package/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol +35 -0
  283. package/lib/openzeppelin-contracts/contracts/interfaces/IERC7913.sol +18 -0
  284. package/lib/openzeppelin-contracts/contracts/interfaces/README.adoc +111 -0
  285. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol +20 -0
  286. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC4337.sol +253 -0
  287. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol +162 -0
  288. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7579.sol +227 -0
  289. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7674.sol +17 -0
  290. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7786.sol +64 -0
  291. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7802.sol +32 -0
  292. package/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC7821.sol +44 -0
  293. package/lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol +90 -0
  294. package/lib/openzeppelin-contracts/contracts/metatx/ERC2771Forwarder.sol +372 -0
  295. package/lib/openzeppelin-contracts/contracts/metatx/README.adoc +17 -0
  296. package/lib/openzeppelin-contracts/contracts/mocks/AccessManagedTarget.sol +34 -0
  297. package/lib/openzeppelin-contracts/contracts/mocks/AccessManagerMock.sol +20 -0
  298. package/lib/openzeppelin-contracts/contracts/mocks/ArraysMock.sol +171 -0
  299. package/lib/openzeppelin-contracts/contracts/mocks/AuthorityMock.sol +69 -0
  300. package/lib/openzeppelin-contracts/contracts/mocks/Base64Dirty.sol +19 -0
  301. package/lib/openzeppelin-contracts/contracts/mocks/BatchCaller.sol +20 -0
  302. package/lib/openzeppelin-contracts/contracts/mocks/CallReceiverMock.sol +106 -0
  303. package/lib/openzeppelin-contracts/contracts/mocks/ConstructorMock.sol +34 -0
  304. package/lib/openzeppelin-contracts/contracts/mocks/ContextMock.sol +35 -0
  305. package/lib/openzeppelin-contracts/contracts/mocks/DummyImplementation.sol +65 -0
  306. package/lib/openzeppelin-contracts/contracts/mocks/EIP712Verifier.sol +16 -0
  307. package/lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol +24 -0
  308. package/lib/openzeppelin-contracts/contracts/mocks/ERC165Mock.sol +100 -0
  309. package/lib/openzeppelin-contracts/contracts/mocks/ERC2771ContextMock.sol +28 -0
  310. package/lib/openzeppelin-contracts/contracts/mocks/ERC3156FlashBorrowerMock.sol +53 -0
  311. package/lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol +17 -0
  312. package/lib/openzeppelin-contracts/contracts/mocks/InitializableMock.sol +130 -0
  313. package/lib/openzeppelin-contracts/contracts/mocks/MerkleProofCustomHashMock.sol +62 -0
  314. package/lib/openzeppelin-contracts/contracts/mocks/MerkleTreeMock.sol +52 -0
  315. package/lib/openzeppelin-contracts/contracts/mocks/MulticallHelper.sol +23 -0
  316. package/lib/openzeppelin-contracts/contracts/mocks/MultipleInheritanceInitializableMocks.sol +131 -0
  317. package/lib/openzeppelin-contracts/contracts/mocks/PausableMock.sol +31 -0
  318. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol +17 -0
  319. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyMock.sol +59 -0
  320. package/lib/openzeppelin-contracts/contracts/mocks/ReentrancyTransientMock.sol +59 -0
  321. package/lib/openzeppelin-contracts/contracts/mocks/RegressionImplementation.sol +61 -0
  322. package/lib/openzeppelin-contracts/contracts/mocks/SingleInheritanceInitializableMocks.sol +49 -0
  323. package/lib/openzeppelin-contracts/contracts/mocks/Stateless.sol +61 -0
  324. package/lib/openzeppelin-contracts/contracts/mocks/StorageSlotMock.sol +87 -0
  325. package/lib/openzeppelin-contracts/contracts/mocks/TimelockReentrant.sol +26 -0
  326. package/lib/openzeppelin-contracts/contracts/mocks/TransientSlotMock.sol +61 -0
  327. package/lib/openzeppelin-contracts/contracts/mocks/UpgradeableBeaconMock.sol +27 -0
  328. package/lib/openzeppelin-contracts/contracts/mocks/VotesExtendedMock.sol +42 -0
  329. package/lib/openzeppelin-contracts/contracts/mocks/VotesMock.sol +42 -0
  330. package/lib/openzeppelin-contracts/contracts/mocks/account/AccountMock.sol +181 -0
  331. package/lib/openzeppelin-contracts/contracts/mocks/account/modules/ERC7579Mock.sol +122 -0
  332. package/lib/openzeppelin-contracts/contracts/mocks/account/utils/ERC7579UtilsMock.sol +23 -0
  333. package/lib/openzeppelin-contracts/contracts/mocks/compound/CompTimelock.sol +174 -0
  334. package/lib/openzeppelin-contracts/contracts/mocks/crosschain/ERC7786GatewayMock.sol +56 -0
  335. package/lib/openzeppelin-contracts/contracts/mocks/crosschain/ERC7786RecipientMock.sol +31 -0
  336. package/lib/openzeppelin-contracts/contracts/mocks/docs/ERC20WithAutoMinerReward.sol +22 -0
  337. package/lib/openzeppelin-contracts/contracts/mocks/docs/ERC4626Fees.sol +109 -0
  338. package/lib/openzeppelin-contracts/contracts/mocks/docs/MyNFT.sol +9 -0
  339. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintBase.sol +25 -0
  340. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintMissing.sol +24 -0
  341. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlERC20MintOnlyRole.sol +23 -0
  342. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessControlModified.sol +14 -0
  343. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/AccessManagedERC20MintBase.sol +16 -0
  344. package/lib/openzeppelin-contracts/contracts/mocks/docs/access-control/MyContractOwnable.sol +17 -0
  345. package/lib/openzeppelin-contracts/contracts/mocks/docs/account/MyAccountERC7702.sol +20 -0
  346. package/lib/openzeppelin-contracts/contracts/mocks/docs/account/MyFactoryAccount.sol +37 -0
  347. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyGovernor.sol +80 -0
  348. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyToken.sol +21 -0
  349. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenTimestampBased.sol +32 -0
  350. package/lib/openzeppelin-contracts/contracts/mocks/docs/governance/MyTokenWrapped.sol +28 -0
  351. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC1155/GameItems.sol +21 -0
  352. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC1155/MyERC115HolderContract.sol +7 -0
  353. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC20/GLDToken.sol +11 -0
  354. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC6909/ERC6909GameItems.sol +26 -0
  355. package/lib/openzeppelin-contracts/contracts/mocks/docs/token/ERC721/GameItem.sol +19 -0
  356. package/lib/openzeppelin-contracts/contracts/mocks/docs/utilities/Base64NFT.sol +27 -0
  357. package/lib/openzeppelin-contracts/contracts/mocks/docs/utilities/Multicall.sol +15 -0
  358. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorCountingOverridableMock.sol +18 -0
  359. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorFractionalMock.sol +14 -0
  360. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorMock.sol +14 -0
  361. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorNoncesKeyedMock.sol +44 -0
  362. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorPreventLateQuorumMock.sol +40 -0
  363. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorProposalGuardianMock.sol +27 -0
  364. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorSequentialProposalIdMock.sol +39 -0
  365. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorStorageMock.sol +79 -0
  366. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorSuperQuorumMock.sol +95 -0
  367. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockAccessMock.sol +70 -0
  368. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockCompoundMock.sol +69 -0
  369. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorTimelockControlMock.sol +69 -0
  370. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVoteMock.sol +20 -0
  371. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorVotesSuperQuorumFractionMock.sol +37 -0
  372. package/lib/openzeppelin-contracts/contracts/mocks/governance/GovernorWithParamsMock.sol +51 -0
  373. package/lib/openzeppelin-contracts/contracts/mocks/proxy/BadBeacon.sol +11 -0
  374. package/lib/openzeppelin-contracts/contracts/mocks/proxy/ClashingImplementation.sol +19 -0
  375. package/lib/openzeppelin-contracts/contracts/mocks/proxy/UUPSUpgradeableMock.sol +35 -0
  376. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1155ReceiverMock.sol +74 -0
  377. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ForceApproveMock.sol +13 -0
  378. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363NoReturnMock.sol +33 -0
  379. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ReceiverMock.sol +52 -0
  380. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363ReturnFalseMock.sol +34 -0
  381. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC1363SpenderMock.sol +47 -0
  382. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ApprovalMock.sol +10 -0
  383. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20BridgeableMock.sol +26 -0
  384. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20DecimalsMock.sol +17 -0
  385. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ExcessDecimalsMock.sol +9 -0
  386. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20FlashMintMock.sol +26 -0
  387. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ForceApproveMock.sol +13 -0
  388. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20GetterHelper.sol +38 -0
  389. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20Mock.sol +16 -0
  390. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20MulticallMock.sol +8 -0
  391. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20NoReturnMock.sol +30 -0
  392. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20Reentrant.sol +39 -0
  393. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20ReturnFalseMock.sol +19 -0
  394. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesAdditionalCheckpointsMock.sol +31 -0
  395. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesLegacyMock.sol +253 -0
  396. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC20VotesTimestampMock.sol +29 -0
  397. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626LimitsMock.sol +23 -0
  398. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626Mock.sol +17 -0
  399. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4626OffsetMock.sol +17 -0
  400. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC4646FeesMock.sol +40 -0
  401. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveEnumerableMock.sol +42 -0
  402. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ConsecutiveMock.sol +61 -0
  403. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721ReceiverMock.sol +47 -0
  404. package/lib/openzeppelin-contracts/contracts/mocks/token/ERC721URIStorageMock.sol +17 -0
  405. package/lib/openzeppelin-contracts/contracts/mocks/utils/cryptography/ERC7739Mock.sol +12 -0
  406. package/lib/openzeppelin-contracts/contracts/package.json +32 -0
  407. package/lib/openzeppelin-contracts/contracts/proxy/Clones.sol +294 -0
  408. package/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol +40 -0
  409. package/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol +177 -0
  410. package/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol +69 -0
  411. package/lib/openzeppelin-contracts/contracts/proxy/README.adoc +87 -0
  412. package/lib/openzeppelin-contracts/contracts/proxy/beacon/BeaconProxy.sol +57 -0
  413. package/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol +16 -0
  414. package/lib/openzeppelin-contracts/contracts/proxy/beacon/UpgradeableBeacon.sol +70 -0
  415. package/lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol +45 -0
  416. package/lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol +118 -0
  417. package/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol +238 -0
  418. package/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol +148 -0
  419. package/lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol +389 -0
  420. package/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol +123 -0
  421. package/lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol +59 -0
  422. package/lib/openzeppelin-contracts/contracts/token/ERC1155/README.adoc +43 -0
  423. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Burnable.sol +28 -0
  424. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Pausable.sol +38 -0
  425. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol +88 -0
  426. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol +61 -0
  427. package/lib/openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol +20 -0
  428. package/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Holder.sol +42 -0
  429. package/lib/openzeppelin-contracts/contracts/token/ERC1155/utils/ERC1155Utils.sol +88 -0
  430. package/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol +305 -0
  431. package/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol +79 -0
  432. package/lib/openzeppelin-contracts/contracts/token/ERC20/README.adoc +78 -0
  433. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC1363.sol +135 -0
  434. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sol +39 -0
  435. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Capped.sol +54 -0
  436. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20FlashMint.sol +134 -0
  437. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Pausable.sol +33 -0
  438. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol +77 -0
  439. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Votes.sol +83 -0
  440. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Wrapper.sol +89 -0
  441. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC4626.sol +305 -0
  442. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol +26 -0
  443. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol +90 -0
  444. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20Bridgeable.sol +51 -0
  445. package/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-ERC20TemporaryApproval.sol +119 -0
  446. package/lib/openzeppelin-contracts/contracts/token/ERC20/utils/ERC1363Utils.sol +95 -0
  447. package/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol +280 -0
  448. package/lib/openzeppelin-contracts/contracts/token/ERC6909/ERC6909.sol +224 -0
  449. package/lib/openzeppelin-contracts/contracts/token/ERC6909/README.adoc +27 -0
  450. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909ContentURI.sol +53 -0
  451. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909Metadata.sol +77 -0
  452. package/lib/openzeppelin-contracts/contracts/token/ERC6909/extensions/ERC6909TokenSupply.sol +35 -0
  453. package/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol +430 -0
  454. package/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol +135 -0
  455. package/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol +28 -0
  456. package/lib/openzeppelin-contracts/contracts/token/ERC721/README.adoc +69 -0
  457. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol +26 -0
  458. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Consecutive.sol +176 -0
  459. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol +164 -0
  460. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol +37 -0
  461. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Royalty.sol +26 -0
  462. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol +58 -0
  463. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Votes.sol +47 -0
  464. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Wrapper.sol +102 -0
  465. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol +29 -0
  466. package/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol +27 -0
  467. package/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol +26 -0
  468. package/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol +50 -0
  469. package/lib/openzeppelin-contracts/contracts/token/common/ERC2981.sol +139 -0
  470. package/lib/openzeppelin-contracts/contracts/token/common/README.adoc +10 -0
  471. package/lib/openzeppelin-contracts/contracts/utils/Address.sol +167 -0
  472. package/lib/openzeppelin-contracts/contracts/utils/Arrays.sol +735 -0
  473. package/lib/openzeppelin-contracts/contracts/utils/Base58.sol +240 -0
  474. package/lib/openzeppelin-contracts/contracts/utils/Base64.sol +234 -0
  475. package/lib/openzeppelin-contracts/contracts/utils/Blockhash.sol +54 -0
  476. package/lib/openzeppelin-contracts/contracts/utils/Bytes.sol +247 -0
  477. package/lib/openzeppelin-contracts/contracts/utils/CAIP10.sol +54 -0
  478. package/lib/openzeppelin-contracts/contracts/utils/CAIP2.sol +51 -0
  479. package/lib/openzeppelin-contracts/contracts/utils/Calldata.sol +25 -0
  480. package/lib/openzeppelin-contracts/contracts/utils/Comparators.sol +19 -0
  481. package/lib/openzeppelin-contracts/contracts/utils/Context.sol +28 -0
  482. package/lib/openzeppelin-contracts/contracts/utils/Create2.sol +91 -0
  483. package/lib/openzeppelin-contracts/contracts/utils/Errors.sol +34 -0
  484. package/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol +127 -0
  485. package/lib/openzeppelin-contracts/contracts/utils/Memory.sol +135 -0
  486. package/lib/openzeppelin-contracts/contracts/utils/Multicall.sol +37 -0
  487. package/lib/openzeppelin-contracts/contracts/utils/Nonces.sol +46 -0
  488. package/lib/openzeppelin-contracts/contracts/utils/NoncesKeyed.sol +74 -0
  489. package/lib/openzeppelin-contracts/contracts/utils/Packing.sol +1656 -0
  490. package/lib/openzeppelin-contracts/contracts/utils/Panic.sol +57 -0
  491. package/lib/openzeppelin-contracts/contracts/utils/Pausable.sol +112 -0
  492. package/lib/openzeppelin-contracts/contracts/utils/README.adoc +160 -0
  493. package/lib/openzeppelin-contracts/contracts/utils/RLP.sol +382 -0
  494. package/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol +119 -0
  495. package/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol +84 -0
  496. package/lib/openzeppelin-contracts/contracts/utils/RelayedCall.sol +133 -0
  497. package/lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol +122 -0
  498. package/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol +155 -0
  499. package/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol +143 -0
  500. package/lib/openzeppelin-contracts/contracts/utils/Strings.sol +508 -0
  501. package/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol +183 -0
  502. package/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol +284 -0
  503. package/lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol +160 -0
  504. package/lib/openzeppelin-contracts/contracts/utils/cryptography/Hashes.sol +31 -0
  505. package/lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol +514 -0
  506. package/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol +99 -0
  507. package/lib/openzeppelin-contracts/contracts/utils/cryptography/P256.sol +408 -0
  508. package/lib/openzeppelin-contracts/contracts/utils/cryptography/README.adoc +73 -0
  509. package/lib/openzeppelin-contracts/contracts/utils/cryptography/RSA.sol +154 -0
  510. package/lib/openzeppelin-contracts/contracts/utils/cryptography/SignatureChecker.sol +164 -0
  511. package/lib/openzeppelin-contracts/contracts/utils/cryptography/WebAuthn.sol +261 -0
  512. package/lib/openzeppelin-contracts/contracts/utils/cryptography/draft-ERC7739Utils.sol +208 -0
  513. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/AbstractSigner.sol +23 -0
  514. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913.sol +252 -0
  515. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol +208 -0
  516. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerECDSA.sol +56 -0
  517. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerEIP7702.sol +25 -0
  518. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerERC7913.sol +63 -0
  519. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerP256.sol +64 -0
  520. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerRSA.sol +65 -0
  521. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/SignerWebAuthn.sol +51 -0
  522. package/lib/openzeppelin-contracts/contracts/utils/cryptography/signers/draft-ERC7739.sol +98 -0
  523. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913P256Verifier.sol +29 -0
  524. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913RSAVerifier.sol +23 -0
  525. package/lib/openzeppelin-contracts/contracts/utils/cryptography/verifiers/ERC7913WebAuthnVerifier.sol +35 -0
  526. package/lib/openzeppelin-contracts/contracts/utils/draft-InteroperableAddress.sol +235 -0
  527. package/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol +25 -0
  528. package/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol +142 -0
  529. package/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol +25 -0
  530. package/lib/openzeppelin-contracts/contracts/utils/math/Math.sol +756 -0
  531. package/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol +1162 -0
  532. package/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol +68 -0
  533. package/lib/openzeppelin-contracts/contracts/utils/structs/Accumulators.sol +130 -0
  534. package/lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol +60 -0
  535. package/lib/openzeppelin-contracts/contracts/utils/structs/Checkpoints.sol +833 -0
  536. package/lib/openzeppelin-contracts/contracts/utils/structs/CircularBuffer.sol +141 -0
  537. package/lib/openzeppelin-contracts/contracts/utils/structs/DoubleEndedQueue.sol +156 -0
  538. package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableMap.sol +1319 -0
  539. package/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol +792 -0
  540. package/lib/openzeppelin-contracts/contracts/utils/structs/Heap.sol +256 -0
  541. package/lib/openzeppelin-contracts/contracts/utils/structs/MerkleTree.sol +267 -0
  542. package/lib/openzeppelin-contracts/contracts/utils/types/Time.sol +133 -0
  543. package/lib/openzeppelin-contracts/contracts/vendor/compound/ICompoundTimelock.sol +86 -0
  544. package/lib/openzeppelin-contracts/contracts/vendor/compound/LICENSE +11 -0
  545. package/lib/openzeppelin-contracts/docs/README.md +16 -0
  546. package/lib/openzeppelin-contracts/docs/antora.yml +7 -0
  547. package/lib/openzeppelin-contracts/docs/config.js +21 -0
  548. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-control-multiple.svg +97 -0
  549. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-manager-functions.svg +47 -0
  550. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/access-manager.svg +99 -0
  551. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3a.png +0 -0
  552. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3b.png +0 -0
  553. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-6.png +0 -0
  554. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack.png +0 -0
  555. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-deposit.png +0 -0
  556. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-mint.png +0 -0
  557. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-linear.png +0 -0
  558. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglog.png +0 -0
  559. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglogext.png +0 -0
  560. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png +0 -0
  561. package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png +0 -0
  562. package/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc +29 -0
  563. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/access-control.adoc +295 -0
  564. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/account-abstraction.adoc +100 -0
  565. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/accounts.adoc +354 -0
  566. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/backwards-compatibility.adoc +50 -0
  567. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/eoa-delegation.adoc +143 -0
  568. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc1155.adoc +118 -0
  569. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20-supply.adoc +71 -0
  570. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20.adoc +67 -0
  571. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc4626.adoc +214 -0
  572. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc6909.adoc +47 -0
  573. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc721.adoc +58 -0
  574. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/extending-contracts.adoc +51 -0
  575. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/faq.adoc +13 -0
  576. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/governance.adoc +239 -0
  577. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/index.adoc +70 -0
  578. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/multisig.adoc +306 -0
  579. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/tokens.adoc +31 -0
  580. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/upgradeable.adoc +77 -0
  581. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/utilities.adoc +634 -0
  582. package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/wizard.adoc +15 -0
  583. package/lib/openzeppelin-contracts/docs/templates/contract.hbs +141 -0
  584. package/lib/openzeppelin-contracts/docs/templates/helpers.js +46 -0
  585. package/lib/openzeppelin-contracts/docs/templates/page.hbs +4 -0
  586. package/lib/openzeppelin-contracts/docs/templates/properties.js +88 -0
  587. package/lib/openzeppelin-contracts/eslint.config.mjs +26 -0
  588. package/lib/openzeppelin-contracts/foundry.toml +20 -0
  589. package/lib/openzeppelin-contracts/fv-requirements.txt +4 -0
  590. package/lib/openzeppelin-contracts/hardhat/async-test-sanity.js +10 -0
  591. package/lib/openzeppelin-contracts/hardhat/env-artifacts.js +29 -0
  592. package/lib/openzeppelin-contracts/hardhat/ignore-unreachable-warnings.js +45 -0
  593. package/lib/openzeppelin-contracts/hardhat/remappings.js +18 -0
  594. package/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js +6 -0
  595. package/lib/openzeppelin-contracts/hardhat/task-test-get-files.js +25 -0
  596. package/lib/openzeppelin-contracts/hardhat.config.js +125 -0
  597. package/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.prop.sol +404 -0
  598. package/lib/openzeppelin-contracts/lib/erc4626-tests/ERC4626.test.sol +356 -0
  599. package/lib/openzeppelin-contracts/lib/erc4626-tests/LICENSE +661 -0
  600. package/lib/openzeppelin-contracts/lib/erc4626-tests/README.md +116 -0
  601. package/lib/openzeppelin-contracts/lib/forge-std/.gitattributes +1 -0
  602. package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/ci.yml +128 -0
  603. package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/sync.yml +31 -0
  604. package/lib/openzeppelin-contracts/lib/forge-std/CONTRIBUTING.md +193 -0
  605. package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-APACHE +203 -0
  606. package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-MIT +25 -0
  607. package/lib/openzeppelin-contracts/lib/forge-std/README.md +266 -0
  608. package/lib/openzeppelin-contracts/lib/forge-std/foundry.toml +23 -0
  609. package/lib/openzeppelin-contracts/lib/forge-std/package.json +16 -0
  610. package/lib/openzeppelin-contracts/lib/forge-std/scripts/vm.py +646 -0
  611. package/lib/openzeppelin-contracts/lib/forge-std/src/Base.sol +35 -0
  612. package/lib/openzeppelin-contracts/lib/forge-std/src/Script.sol +27 -0
  613. package/lib/openzeppelin-contracts/lib/forge-std/src/StdAssertions.sol +669 -0
  614. package/lib/openzeppelin-contracts/lib/forge-std/src/StdChains.sol +287 -0
  615. package/lib/openzeppelin-contracts/lib/forge-std/src/StdCheats.sol +829 -0
  616. package/lib/openzeppelin-contracts/lib/forge-std/src/StdError.sol +15 -0
  617. package/lib/openzeppelin-contracts/lib/forge-std/src/StdInvariant.sol +122 -0
  618. package/lib/openzeppelin-contracts/lib/forge-std/src/StdJson.sol +283 -0
  619. package/lib/openzeppelin-contracts/lib/forge-std/src/StdMath.sol +43 -0
  620. package/lib/openzeppelin-contracts/lib/forge-std/src/StdStorage.sol +473 -0
  621. package/lib/openzeppelin-contracts/lib/forge-std/src/StdStyle.sol +333 -0
  622. package/lib/openzeppelin-contracts/lib/forge-std/src/StdToml.sol +283 -0
  623. package/lib/openzeppelin-contracts/lib/forge-std/src/StdUtils.sol +209 -0
  624. package/lib/openzeppelin-contracts/lib/forge-std/src/Test.sol +33 -0
  625. package/lib/openzeppelin-contracts/lib/forge-std/src/Vm.sol +2263 -0
  626. package/lib/openzeppelin-contracts/lib/forge-std/src/console.sol +1560 -0
  627. package/lib/openzeppelin-contracts/lib/forge-std/src/console2.sol +4 -0
  628. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC1155.sol +105 -0
  629. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC165.sol +12 -0
  630. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC20.sol +43 -0
  631. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC4626.sol +190 -0
  632. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC721.sol +164 -0
  633. package/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IMulticall3.sol +73 -0
  634. package/lib/openzeppelin-contracts/lib/forge-std/src/safeconsole.sol +13937 -0
  635. package/lib/openzeppelin-contracts/lib/forge-std/test/StdAssertions.t.sol +141 -0
  636. package/lib/openzeppelin-contracts/lib/forge-std/test/StdChains.t.sol +227 -0
  637. package/lib/openzeppelin-contracts/lib/forge-std/test/StdCheats.t.sol +618 -0
  638. package/lib/openzeppelin-contracts/lib/forge-std/test/StdError.t.sol +120 -0
  639. package/lib/openzeppelin-contracts/lib/forge-std/test/StdJson.t.sol +49 -0
  640. package/lib/openzeppelin-contracts/lib/forge-std/test/StdMath.t.sol +202 -0
  641. package/lib/openzeppelin-contracts/lib/forge-std/test/StdStorage.t.sol +488 -0
  642. package/lib/openzeppelin-contracts/lib/forge-std/test/StdStyle.t.sol +110 -0
  643. package/lib/openzeppelin-contracts/lib/forge-std/test/StdToml.t.sol +49 -0
  644. package/lib/openzeppelin-contracts/lib/forge-std/test/StdUtils.t.sol +342 -0
  645. package/lib/openzeppelin-contracts/lib/forge-std/test/Vm.t.sol +18 -0
  646. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScript.sol +10 -0
  647. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScriptBase.sol +10 -0
  648. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTest.sol +10 -0
  649. package/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTestBase.sol +10 -0
  650. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/broadcast.log.json +187 -0
  651. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/test.json +8 -0
  652. package/lib/openzeppelin-contracts/lib/forge-std/test/fixtures/test.toml +6 -0
  653. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/LICENSE +661 -0
  654. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/README.md +97 -0
  655. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/SVM.sol +49 -0
  656. package/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/SymTest.sol +11 -0
  657. package/lib/openzeppelin-contracts/logo.svg +15 -0
  658. package/lib/openzeppelin-contracts/netlify.toml +3 -0
  659. package/lib/openzeppelin-contracts/package-lock.json +11090 -0
  660. package/lib/openzeppelin-contracts/package.json +107 -0
  661. package/lib/openzeppelin-contracts/remappings.txt +1 -0
  662. package/lib/openzeppelin-contracts/renovate.json +4 -0
  663. package/lib/openzeppelin-contracts/scripts/checks/compare-layout.js +28 -0
  664. package/lib/openzeppelin-contracts/scripts/checks/compareGasReports.js +249 -0
  665. package/lib/openzeppelin-contracts/scripts/checks/coverage.sh +24 -0
  666. package/lib/openzeppelin-contracts/scripts/checks/extract-layout.js +39 -0
  667. package/lib/openzeppelin-contracts/scripts/checks/generation.sh +6 -0
  668. package/lib/openzeppelin-contracts/scripts/checks/inheritance-ordering.js +55 -0
  669. package/lib/openzeppelin-contracts/scripts/checks/pragma-validity.js +45 -0
  670. package/lib/openzeppelin-contracts/scripts/fetch-common-contracts.js +50 -0
  671. package/lib/openzeppelin-contracts/scripts/gen-nav.js +81 -0
  672. package/lib/openzeppelin-contracts/scripts/generate/format-lines.js +16 -0
  673. package/lib/openzeppelin-contracts/scripts/generate/helpers/sanitize.js +5 -0
  674. package/lib/openzeppelin-contracts/scripts/generate/run.js +61 -0
  675. package/lib/openzeppelin-contracts/scripts/generate/templates/Arrays.js +454 -0
  676. package/lib/openzeppelin-contracts/scripts/generate/templates/Arrays.opts.js +9 -0
  677. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.js +242 -0
  678. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.opts.js +18 -0
  679. package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.t.js +141 -0
  680. package/lib/openzeppelin-contracts/scripts/generate/templates/Enumerable.opts.js +53 -0
  681. package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableMap.js +463 -0
  682. package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableSet.js +469 -0
  683. package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.js +187 -0
  684. package/lib/openzeppelin-contracts/scripts/generate/templates/MerkleProof.opts.js +11 -0
  685. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.js +92 -0
  686. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.opts.js +3 -0
  687. package/lib/openzeppelin-contracts/scripts/generate/templates/Packing.t.js +48 -0
  688. package/lib/openzeppelin-contracts/scripts/generate/templates/SafeCast.js +136 -0
  689. package/lib/openzeppelin-contracts/scripts/generate/templates/Slot.opts.js +15 -0
  690. package/lib/openzeppelin-contracts/scripts/generate/templates/SlotDerivation.js +119 -0
  691. package/lib/openzeppelin-contracts/scripts/generate/templates/SlotDerivation.t.js +127 -0
  692. package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlot.js +77 -0
  693. package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlotMock.js +57 -0
  694. package/lib/openzeppelin-contracts/scripts/generate/templates/TransientSlot.js +80 -0
  695. package/lib/openzeppelin-contracts/scripts/generate/templates/TransientSlotMock.js +35 -0
  696. package/lib/openzeppelin-contracts/scripts/generate/templates/conversion.js +30 -0
  697. package/lib/openzeppelin-contracts/scripts/get-contracts-metadata.js +55 -0
  698. package/lib/openzeppelin-contracts/scripts/git-user-config.sh +6 -0
  699. package/lib/openzeppelin-contracts/scripts/helpers.js +7 -0
  700. package/lib/openzeppelin-contracts/scripts/minimize-pragma.js +138 -0
  701. package/lib/openzeppelin-contracts/scripts/prepack.sh +23 -0
  702. package/lib/openzeppelin-contracts/scripts/prepare-docs.sh +26 -0
  703. package/lib/openzeppelin-contracts/scripts/release/format-changelog.js +33 -0
  704. package/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js +15 -0
  705. package/lib/openzeppelin-contracts/scripts/release/update-comment.js +34 -0
  706. package/lib/openzeppelin-contracts/scripts/release/version.sh +11 -0
  707. package/lib/openzeppelin-contracts/scripts/release/workflow/exit-prerelease.sh +8 -0
  708. package/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js +48 -0
  709. package/lib/openzeppelin-contracts/scripts/release/workflow/integrity-check.sh +20 -0
  710. package/lib/openzeppelin-contracts/scripts/release/workflow/pack.sh +26 -0
  711. package/lib/openzeppelin-contracts/scripts/release/workflow/publish.sh +26 -0
  712. package/lib/openzeppelin-contracts/scripts/release/workflow/rerun.js +7 -0
  713. package/lib/openzeppelin-contracts/scripts/release/workflow/set-changesets-pr-title.js +17 -0
  714. package/lib/openzeppelin-contracts/scripts/release/workflow/start.sh +35 -0
  715. package/lib/openzeppelin-contracts/scripts/release/workflow/state.js +112 -0
  716. package/lib/openzeppelin-contracts/scripts/remove-ignored-artifacts.js +45 -0
  717. package/lib/openzeppelin-contracts/scripts/set-max-old-space-size.sh +10 -0
  718. package/lib/openzeppelin-contracts/scripts/solc-versions.js +15 -0
  719. package/lib/openzeppelin-contracts/scripts/solhint-custom/index.js +118 -0
  720. package/lib/openzeppelin-contracts/scripts/solhint-custom/package.json +8 -0
  721. package/lib/openzeppelin-contracts/scripts/update-docs-branch.js +65 -0
  722. package/lib/openzeppelin-contracts/scripts/upgradeable/README.md +21 -0
  723. package/lib/openzeppelin-contracts/scripts/upgradeable/alias/Initializable.sol +5 -0
  724. package/lib/openzeppelin-contracts/scripts/upgradeable/alias/UUPSUpgradeable.sol +5 -0
  725. package/lib/openzeppelin-contracts/scripts/upgradeable/patch-apply.sh +19 -0
  726. package/lib/openzeppelin-contracts/scripts/upgradeable/patch-save.sh +18 -0
  727. package/lib/openzeppelin-contracts/scripts/upgradeable/transpile-onto.sh +54 -0
  728. package/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh +49 -0
  729. package/lib/openzeppelin-contracts/scripts/upgradeable/upgradeable.patch +425 -0
  730. package/lib/openzeppelin-contracts/slither.config.json +4 -0
  731. package/lib/openzeppelin-contracts/solhint.config.js +29 -0
  732. package/lib/openzeppelin-contracts/test/TESTING.md +3 -0
  733. package/lib/openzeppelin-contracts/test/access/AccessControl.behavior.js +874 -0
  734. package/lib/openzeppelin-contracts/test/access/AccessControl.test.js +19 -0
  735. package/lib/openzeppelin-contracts/test/access/Ownable.test.js +79 -0
  736. package/lib/openzeppelin-contracts/test/access/Ownable2Step.test.js +102 -0
  737. package/lib/openzeppelin-contracts/test/access/extensions/AccessControlDefaultAdminRules.test.js +32 -0
  738. package/lib/openzeppelin-contracts/test/access/extensions/AccessControlEnumerable.test.js +24 -0
  739. package/lib/openzeppelin-contracts/test/access/manager/AccessManaged.test.js +146 -0
  740. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.behavior.js +257 -0
  741. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.predicate.js +456 -0
  742. package/lib/openzeppelin-contracts/test/access/manager/AccessManager.test.js +2489 -0
  743. package/lib/openzeppelin-contracts/test/access/manager/AuthorityUtils.test.js +112 -0
  744. package/lib/openzeppelin-contracts/test/account/Account.behavior.js +144 -0
  745. package/lib/openzeppelin-contracts/test/account/Account.test.js +48 -0
  746. package/lib/openzeppelin-contracts/test/account/AccountECDSA.test.js +52 -0
  747. package/lib/openzeppelin-contracts/test/account/AccountERC7702.t.sol +113 -0
  748. package/lib/openzeppelin-contracts/test/account/AccountERC7702.test.js +52 -0
  749. package/lib/openzeppelin-contracts/test/account/AccountERC7913.test.js +138 -0
  750. package/lib/openzeppelin-contracts/test/account/AccountMultiSigner.test.js +326 -0
  751. package/lib/openzeppelin-contracts/test/account/AccountMultiSignerWeighted.test.js +312 -0
  752. package/lib/openzeppelin-contracts/test/account/AccountP256.test.js +58 -0
  753. package/lib/openzeppelin-contracts/test/account/AccountRSA.test.js +58 -0
  754. package/lib/openzeppelin-contracts/test/account/AccountWebAuthn.test.js +88 -0
  755. package/lib/openzeppelin-contracts/test/account/examples/AccountERC7702WithModulesMock.test.js +99 -0
  756. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.behavior.js +601 -0
  757. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579.test.js +60 -0
  758. package/lib/openzeppelin-contracts/test/account/extensions/AccountERC7579Hooked.test.js +60 -0
  759. package/lib/openzeppelin-contracts/test/account/extensions/ERC7821.behavior.js +145 -0
  760. package/lib/openzeppelin-contracts/test/account/utils/EIP7702Utils.test.js +53 -0
  761. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC4337Utils.test.js +289 -0
  762. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC7579Utils.t.sol +434 -0
  763. package/lib/openzeppelin-contracts/test/account/utils/draft-ERC7579Utils.test.js +399 -0
  764. package/lib/openzeppelin-contracts/test/crosschain/ERC7786Recipient.test.js +73 -0
  765. package/lib/openzeppelin-contracts/test/finance/VestingWallet.behavior.js +87 -0
  766. package/lib/openzeppelin-contracts/test/finance/VestingWallet.test.js +65 -0
  767. package/lib/openzeppelin-contracts/test/finance/VestingWalletCliff.test.js +70 -0
  768. package/lib/openzeppelin-contracts/test/governance/Governor.t.sol +59 -0
  769. package/lib/openzeppelin-contracts/test/governance/Governor.test.js +980 -0
  770. package/lib/openzeppelin-contracts/test/governance/TimelockController.test.js +1279 -0
  771. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorCountingFractional.test.js +248 -0
  772. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorCountingOverridable.test.js +346 -0
  773. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorERC721.test.js +131 -0
  774. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorNoncesKeyed.test.js +244 -0
  775. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorPreventLateQuorum.test.js +185 -0
  776. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorProposalGuardian.test.js +132 -0
  777. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSequentialProposalId.test.js +202 -0
  778. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorStorage.test.js +155 -0
  779. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSuperQuorum.test.js +168 -0
  780. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorSuperQuorumGreaterThanQuorum.t.sol +83 -0
  781. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockAccess.test.js +864 -0
  782. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockCompound.test.js +448 -0
  783. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorTimelockControl.test.js +504 -0
  784. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesQuorumFraction.test.js +165 -0
  785. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorVotesSuperQuorumFraction.test.js +160 -0
  786. package/lib/openzeppelin-contracts/test/governance/extensions/GovernorWithParams.test.js +245 -0
  787. package/lib/openzeppelin-contracts/test/governance/utils/ERC6372.behavior.js +28 -0
  788. package/lib/openzeppelin-contracts/test/governance/utils/Votes.behavior.js +325 -0
  789. package/lib/openzeppelin-contracts/test/governance/utils/Votes.test.js +102 -0
  790. package/lib/openzeppelin-contracts/test/governance/utils/VotesExtended.test.js +152 -0
  791. package/lib/openzeppelin-contracts/test/helpers/access-manager.js +85 -0
  792. package/lib/openzeppelin-contracts/test/helpers/account.js +14 -0
  793. package/lib/openzeppelin-contracts/test/helpers/chains.js +56 -0
  794. package/lib/openzeppelin-contracts/test/helpers/constants.js +7 -0
  795. package/lib/openzeppelin-contracts/test/helpers/deploy.js +14 -0
  796. package/lib/openzeppelin-contracts/test/helpers/eip712-types.js +61 -0
  797. package/lib/openzeppelin-contracts/test/helpers/eip712.js +45 -0
  798. package/lib/openzeppelin-contracts/test/helpers/enums.js +14 -0
  799. package/lib/openzeppelin-contracts/test/helpers/erc4337.js +217 -0
  800. package/lib/openzeppelin-contracts/test/helpers/erc7579.js +58 -0
  801. package/lib/openzeppelin-contracts/test/helpers/erc7739.js +118 -0
  802. package/lib/openzeppelin-contracts/test/helpers/governance.js +217 -0
  803. package/lib/openzeppelin-contracts/test/helpers/iterate.js +41 -0
  804. package/lib/openzeppelin-contracts/test/helpers/math.js +33 -0
  805. package/lib/openzeppelin-contracts/test/helpers/methods.js +14 -0
  806. package/lib/openzeppelin-contracts/test/helpers/precompiles.js +12 -0
  807. package/lib/openzeppelin-contracts/test/helpers/random.js +24 -0
  808. package/lib/openzeppelin-contracts/test/helpers/signers.js +222 -0
  809. package/lib/openzeppelin-contracts/test/helpers/storage.js +48 -0
  810. package/lib/openzeppelin-contracts/test/helpers/strings.js +5 -0
  811. package/lib/openzeppelin-contracts/test/helpers/time.js +33 -0
  812. package/lib/openzeppelin-contracts/test/helpers/txpool.js +29 -0
  813. package/lib/openzeppelin-contracts/test/metatx/ERC2771Context.test.js +109 -0
  814. package/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.t.sol +279 -0
  815. package/lib/openzeppelin-contracts/test/metatx/ERC2771Forwarder.test.js +384 -0
  816. package/lib/openzeppelin-contracts/test/proxy/Clones.behaviour.js +160 -0
  817. package/lib/openzeppelin-contracts/test/proxy/Clones.t.sol +91 -0
  818. package/lib/openzeppelin-contracts/test/proxy/Clones.test.js +177 -0
  819. package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js +23 -0
  820. package/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Utils.test.js +162 -0
  821. package/lib/openzeppelin-contracts/test/proxy/Proxy.behaviour.js +185 -0
  822. package/lib/openzeppelin-contracts/test/proxy/beacon/BeaconProxy.test.js +141 -0
  823. package/lib/openzeppelin-contracts/test/proxy/beacon/UpgradeableBeacon.test.js +55 -0
  824. package/lib/openzeppelin-contracts/test/proxy/transparent/ProxyAdmin.test.js +82 -0
  825. package/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.behaviour.js +357 -0
  826. package/lib/openzeppelin-contracts/test/proxy/transparent/TransparentUpgradeableProxy.test.js +28 -0
  827. package/lib/openzeppelin-contracts/test/proxy/utils/Initializable.test.js +216 -0
  828. package/lib/openzeppelin-contracts/test/proxy/utils/UUPSUpgradeable.test.js +120 -0
  829. package/lib/openzeppelin-contracts/test/sanity.test.js +27 -0
  830. package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.behavior.js +763 -0
  831. package/lib/openzeppelin-contracts/test/token/ERC1155/ERC1155.test.js +213 -0
  832. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Burnable.test.js +66 -0
  833. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Pausable.test.js +105 -0
  834. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Supply.test.js +119 -0
  835. package/lib/openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155URIStorage.test.js +70 -0
  836. package/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Holder.test.js +56 -0
  837. package/lib/openzeppelin-contracts/test/token/ERC1155/utils/ERC1155Utils.test.js +299 -0
  838. package/lib/openzeppelin-contracts/test/token/ERC20/ERC20.behavior.js +269 -0
  839. package/lib/openzeppelin-contracts/test/token/ERC20/ERC20.test.js +199 -0
  840. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC1363.test.js +370 -0
  841. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Burnable.test.js +105 -0
  842. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Capped.test.js +55 -0
  843. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20FlashMint.test.js +164 -0
  844. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Pausable.test.js +129 -0
  845. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Permit.test.js +109 -0
  846. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Votes.test.js +546 -0
  847. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC20Wrapper.test.js +203 -0
  848. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.t.sol +41 -0
  849. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/ERC4626.test.js +888 -0
  850. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20Bridgeable.test.js +89 -0
  851. package/lib/openzeppelin-contracts/test/token/ERC20/extensions/draft-ERC20TemporaryApproval.test.js +142 -0
  852. package/lib/openzeppelin-contracts/test/token/ERC20/utils/SafeERC20.test.js +463 -0
  853. package/lib/openzeppelin-contracts/test/token/ERC6909/ERC6909.behavior.js +216 -0
  854. package/lib/openzeppelin-contracts/test/token/ERC6909/ERC6909.test.js +104 -0
  855. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909ContentURI.test.js +49 -0
  856. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909Metadata.test.js +58 -0
  857. package/lib/openzeppelin-contracts/test/token/ERC6909/extensions/ERC6909TokenSupply.test.js +53 -0
  858. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.behavior.js +946 -0
  859. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721.test.js +23 -0
  860. package/lib/openzeppelin-contracts/test/token/ERC721/ERC721Enumerable.test.js +28 -0
  861. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Burnable.test.js +77 -0
  862. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.t.sol +187 -0
  863. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Consecutive.test.js +228 -0
  864. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Pausable.test.js +81 -0
  865. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Royalty.test.js +57 -0
  866. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721URIStorage.test.js +121 -0
  867. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Votes.test.js +194 -0
  868. package/lib/openzeppelin-contracts/test/token/ERC721/extensions/ERC721Wrapper.test.js +201 -0
  869. package/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Holder.test.js +20 -0
  870. package/lib/openzeppelin-contracts/test/token/ERC721/utils/ERC721Utils.test.js +94 -0
  871. package/lib/openzeppelin-contracts/test/token/common/ERC2981.behavior.js +152 -0
  872. package/lib/openzeppelin-contracts/test/utils/Address.test.js +332 -0
  873. package/lib/openzeppelin-contracts/test/utils/Arrays.t.sol +248 -0
  874. package/lib/openzeppelin-contracts/test/utils/Arrays.test.js +284 -0
  875. package/lib/openzeppelin-contracts/test/utils/Base58.t.sol +24 -0
  876. package/lib/openzeppelin-contracts/test/utils/Base58.test.js +65 -0
  877. package/lib/openzeppelin-contracts/test/utils/Base64.t.sol +36 -0
  878. package/lib/openzeppelin-contracts/test/utils/Base64.test.js +79 -0
  879. package/lib/openzeppelin-contracts/test/utils/Blockhash.t.sol +101 -0
  880. package/lib/openzeppelin-contracts/test/utils/Blockhash.test.js +59 -0
  881. package/lib/openzeppelin-contracts/test/utils/Bytes.t.sol +251 -0
  882. package/lib/openzeppelin-contracts/test/utils/Bytes.test.js +359 -0
  883. package/lib/openzeppelin-contracts/test/utils/CAIP.test.js +56 -0
  884. package/lib/openzeppelin-contracts/test/utils/Calldata.test.js +22 -0
  885. package/lib/openzeppelin-contracts/test/utils/Context.behavior.js +48 -0
  886. package/lib/openzeppelin-contracts/test/utils/Context.test.js +18 -0
  887. package/lib/openzeppelin-contracts/test/utils/Create2.t.sol +17 -0
  888. package/lib/openzeppelin-contracts/test/utils/Create2.test.js +190 -0
  889. package/lib/openzeppelin-contracts/test/utils/LowLevelCall.test.js +257 -0
  890. package/lib/openzeppelin-contracts/test/utils/Memory.t.sol +38 -0
  891. package/lib/openzeppelin-contracts/test/utils/Memory.test.js +106 -0
  892. package/lib/openzeppelin-contracts/test/utils/Multicall.test.js +72 -0
  893. package/lib/openzeppelin-contracts/test/utils/Nonces.behavior.js +189 -0
  894. package/lib/openzeppelin-contracts/test/utils/Nonces.test.js +16 -0
  895. package/lib/openzeppelin-contracts/test/utils/NoncesKeyed.t.sol +51 -0
  896. package/lib/openzeppelin-contracts/test/utils/NoncesKeyed.test.js +17 -0
  897. package/lib/openzeppelin-contracts/test/utils/Packing.t.sol +993 -0
  898. package/lib/openzeppelin-contracts/test/utils/Packing.test.js +70 -0
  899. package/lib/openzeppelin-contracts/test/utils/Panic.test.js +37 -0
  900. package/lib/openzeppelin-contracts/test/utils/Pausable.test.js +90 -0
  901. package/lib/openzeppelin-contracts/test/utils/RLP.t.sol +135 -0
  902. package/lib/openzeppelin-contracts/test/utils/RLP.test.js +149 -0
  903. package/lib/openzeppelin-contracts/test/utils/ReentrancyGuard.test.js +58 -0
  904. package/lib/openzeppelin-contracts/test/utils/RelayedCall.test.js +217 -0
  905. package/lib/openzeppelin-contracts/test/utils/ShortStrings.t.sol +109 -0
  906. package/lib/openzeppelin-contracts/test/utils/ShortStrings.test.js +64 -0
  907. package/lib/openzeppelin-contracts/test/utils/SlotDerivation.t.sol +248 -0
  908. package/lib/openzeppelin-contracts/test/utils/SlotDerivation.test.js +58 -0
  909. package/lib/openzeppelin-contracts/test/utils/StorageSlot.test.js +73 -0
  910. package/lib/openzeppelin-contracts/test/utils/Strings.t.sol +50 -0
  911. package/lib/openzeppelin-contracts/test/utils/Strings.test.js +360 -0
  912. package/lib/openzeppelin-contracts/test/utils/TransientSlot.test.js +59 -0
  913. package/lib/openzeppelin-contracts/test/utils/cryptography/ECDSA.test.js +318 -0
  914. package/lib/openzeppelin-contracts/test/utils/cryptography/EIP712.test.js +105 -0
  915. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC1271.behavior.js +111 -0
  916. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC7739.test.js +42 -0
  917. package/lib/openzeppelin-contracts/test/utils/cryptography/ERC7739Utils.test.js +203 -0
  918. package/lib/openzeppelin-contracts/test/utils/cryptography/MerkleProof.test.js +213 -0
  919. package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.t.sol +33 -0
  920. package/lib/openzeppelin-contracts/test/utils/cryptography/MessageHashUtils.test.js +97 -0
  921. package/lib/openzeppelin-contracts/test/utils/cryptography/P256.t.sol +65 -0
  922. package/lib/openzeppelin-contracts/test/utils/cryptography/P256.test.js +182 -0
  923. package/lib/openzeppelin-contracts/test/utils/cryptography/RSA.helper.js +17 -0
  924. package/lib/openzeppelin-contracts/test/utils/cryptography/RSA.test.js +102 -0
  925. package/lib/openzeppelin-contracts/test/utils/cryptography/SigVer15_186-3.rsp +3850 -0
  926. package/lib/openzeppelin-contracts/test/utils/cryptography/SignatureChecker.test.js +422 -0
  927. package/lib/openzeppelin-contracts/test/utils/cryptography/WebAuthn.t.sol +297 -0
  928. package/lib/openzeppelin-contracts/test/utils/cryptography/ecdsa_secp256r1_sha256_p1363_test.json +3719 -0
  929. package/lib/openzeppelin-contracts/test/utils/draft-InteroperableAddress.t.sol +99 -0
  930. package/lib/openzeppelin-contracts/test/utils/draft-InteroperableAddress.test.js +170 -0
  931. package/lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js +18 -0
  932. package/lib/openzeppelin-contracts/test/utils/introspection/ERC165Checker.test.js +272 -0
  933. package/lib/openzeppelin-contracts/test/utils/introspection/SupportsInterface.behavior.js +166 -0
  934. package/lib/openzeppelin-contracts/test/utils/math/Math.t.sol +370 -0
  935. package/lib/openzeppelin-contracts/test/utils/math/Math.test.js +746 -0
  936. package/lib/openzeppelin-contracts/test/utils/math/SafeCast.test.js +159 -0
  937. package/lib/openzeppelin-contracts/test/utils/math/SignedMath.t.sol +81 -0
  938. package/lib/openzeppelin-contracts/test/utils/math/SignedMath.test.js +53 -0
  939. package/lib/openzeppelin-contracts/test/utils/structs/Accumulators.t.sol +35 -0
  940. package/lib/openzeppelin-contracts/test/utils/structs/BitMap.test.js +149 -0
  941. package/lib/openzeppelin-contracts/test/utils/structs/Checkpoints.t.sol +440 -0
  942. package/lib/openzeppelin-contracts/test/utils/structs/Checkpoints.test.js +147 -0
  943. package/lib/openzeppelin-contracts/test/utils/structs/CircularBuffer.test.js +83 -0
  944. package/lib/openzeppelin-contracts/test/utils/structs/DoubleEndedQueue.test.js +102 -0
  945. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.behavior.js +214 -0
  946. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableMap.test.js +83 -0
  947. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.behavior.js +175 -0
  948. package/lib/openzeppelin-contracts/test/utils/structs/EnumerableSet.test.js +66 -0
  949. package/lib/openzeppelin-contracts/test/utils/structs/Heap.t.sol +74 -0
  950. package/lib/openzeppelin-contracts/test/utils/structs/Heap.test.js +113 -0
  951. package/lib/openzeppelin-contracts/test/utils/structs/MerkleTree.test.js +180 -0
  952. package/lib/openzeppelin-contracts/test/utils/types/Time.test.js +135 -0
  953. package/package.json +3 -3
package/dist/index.cjs ADDED
@@ -0,0 +1,2195 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
31
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
+
33
+ // src/persistence/adapters/SQLiteAdapter.ts
34
+ var SQLiteAdapter_exports = {};
35
+ __export(SQLiteAdapter_exports, {
36
+ SQLiteAdapter: () => SQLiteAdapter
37
+ });
38
+ var import_better_sqlite3, SQLiteAdapter;
39
+ var init_SQLiteAdapter = __esm({
40
+ "src/persistence/adapters/SQLiteAdapter.ts"() {
41
+ "use strict";
42
+ import_better_sqlite3 = __toESM(require("better-sqlite3"), 1);
43
+ SQLiteAdapter = class {
44
+ constructor(config) {
45
+ this.config = config;
46
+ }
47
+ db;
48
+ async connect() {
49
+ this.db = new import_better_sqlite3.default(this.config.filename);
50
+ this.initSchema();
51
+ }
52
+ initSchema() {
53
+ this.db.exec(`
54
+ CREATE TABLE IF NOT EXISTS world_state (
55
+ id INTEGER PRIMARY KEY CHECK (id = 1),
56
+ phase TEXT NOT NULL,
57
+ tick INTEGER NOT NULL,
58
+ round INTEGER NOT NULL,
59
+ timestamp INTEGER NOT NULL,
60
+ metadata TEXT
61
+ );
62
+
63
+ CREATE TABLE IF NOT EXISTS events (
64
+ id TEXT PRIMARY KEY,
65
+ type TEXT NOT NULL,
66
+ agent_url TEXT,
67
+ timestamp INTEGER NOT NULL,
68
+ data TEXT
69
+ );
70
+
71
+ CREATE TABLE IF NOT EXISTS agents (
72
+ url TEXT PRIMARY KEY,
73
+ name TEXT NOT NULL,
74
+ protocol_version TEXT NOT NULL,
75
+ skills TEXT NOT NULL,
76
+ capabilities TEXT NOT NULL,
77
+ joined_at INTEGER NOT NULL,
78
+ role TEXT,
79
+ metadata TEXT,
80
+ wallet_address TEXT
81
+ );
82
+
83
+ CREATE INDEX IF NOT EXISTS idx_events_type ON events(type);
84
+ CREATE INDEX IF NOT EXISTS idx_events_timestamp ON events(timestamp);
85
+ CREATE INDEX IF NOT EXISTS idx_events_agent ON events(agent_url);
86
+ `);
87
+ }
88
+ async saveState(state) {
89
+ const stmt = this.db.prepare(`
90
+ INSERT OR REPLACE INTO world_state (id, phase, tick, round, timestamp, metadata)
91
+ VALUES (1, ?, ?, ?, ?, ?)
92
+ `);
93
+ stmt.run(
94
+ state.phase,
95
+ state.tick,
96
+ state.round,
97
+ state.timestamp,
98
+ JSON.stringify(state.metadata)
99
+ );
100
+ }
101
+ async loadState() {
102
+ const stmt = this.db.prepare("SELECT * FROM world_state WHERE id = 1");
103
+ const row = stmt.get();
104
+ if (!row) return null;
105
+ return {
106
+ phase: row.phase,
107
+ tick: row.tick,
108
+ round: row.round,
109
+ timestamp: row.timestamp,
110
+ metadata: JSON.parse(row.metadata || "{}")
111
+ };
112
+ }
113
+ async saveEvent(event) {
114
+ const stmt = this.db.prepare(`
115
+ INSERT INTO events (id, type, agent_url, timestamp, data)
116
+ VALUES (?, ?, ?, ?, ?)
117
+ `);
118
+ stmt.run(
119
+ event.id,
120
+ event.type,
121
+ event.agentUrl || null,
122
+ event.timestamp,
123
+ JSON.stringify(event.data || {})
124
+ );
125
+ }
126
+ async getEvents(filter) {
127
+ let query = "SELECT * FROM events WHERE 1=1";
128
+ const params = [];
129
+ if (filter?.type) {
130
+ query += " AND type = ?";
131
+ params.push(filter.type);
132
+ }
133
+ if (filter?.agentUrl) {
134
+ query += " AND agent_url = ?";
135
+ params.push(filter.agentUrl);
136
+ }
137
+ if (filter?.fromTimestamp) {
138
+ query += " AND timestamp >= ?";
139
+ params.push(filter.fromTimestamp);
140
+ }
141
+ if (filter?.toTimestamp) {
142
+ query += " AND timestamp <= ?";
143
+ params.push(filter.toTimestamp);
144
+ }
145
+ query += " ORDER BY timestamp DESC";
146
+ if (filter?.limit) {
147
+ query += " LIMIT ?";
148
+ params.push(filter.limit);
149
+ }
150
+ const stmt = this.db.prepare(query);
151
+ const rows = stmt.all(...params);
152
+ return rows.map((row) => ({
153
+ id: row.id,
154
+ type: row.type,
155
+ timestamp: row.timestamp,
156
+ agentUrl: row.agent_url || void 0,
157
+ data: JSON.parse(row.data || "{}")
158
+ }));
159
+ }
160
+ async saveAgent(profile) {
161
+ const stmt = this.db.prepare(`
162
+ INSERT OR REPLACE INTO agents
163
+ (url, name, protocol_version, skills, capabilities, joined_at, role, metadata, wallet_address)
164
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
165
+ `);
166
+ stmt.run(
167
+ profile.url,
168
+ profile.name,
169
+ profile.protocolVersion,
170
+ JSON.stringify(profile.skills),
171
+ JSON.stringify(profile.capabilities),
172
+ profile.joinedAt,
173
+ profile.role || null,
174
+ JSON.stringify(profile.metadata || {}),
175
+ profile.walletAddress || null
176
+ );
177
+ }
178
+ async removeAgent(agentUrl) {
179
+ const stmt = this.db.prepare("DELETE FROM agents WHERE url = ?");
180
+ stmt.run(agentUrl);
181
+ }
182
+ async getAgents() {
183
+ const stmt = this.db.prepare("SELECT * FROM agents ORDER BY joined_at ASC");
184
+ const rows = stmt.all();
185
+ return rows.map((row) => ({
186
+ url: row.url,
187
+ name: row.name,
188
+ protocolVersion: row.protocol_version,
189
+ skills: JSON.parse(row.skills),
190
+ capabilities: JSON.parse(row.capabilities),
191
+ joinedAt: row.joined_at,
192
+ role: row.role || void 0,
193
+ metadata: JSON.parse(row.metadata || "{}"),
194
+ walletAddress: row.wallet_address || void 0
195
+ }));
196
+ }
197
+ async getAgent(agentUrl) {
198
+ const stmt = this.db.prepare("SELECT * FROM agents WHERE url = ?");
199
+ const row = stmt.get(agentUrl);
200
+ if (!row) return null;
201
+ return {
202
+ url: row.url,
203
+ name: row.name,
204
+ protocolVersion: row.protocol_version,
205
+ skills: JSON.parse(row.skills),
206
+ capabilities: JSON.parse(row.capabilities),
207
+ joinedAt: row.joined_at,
208
+ role: row.role || void 0,
209
+ metadata: JSON.parse(row.metadata || "{}"),
210
+ walletAddress: row.wallet_address || void 0
211
+ };
212
+ }
213
+ async disconnect() {
214
+ this.db.close();
215
+ }
216
+ async healthCheck() {
217
+ try {
218
+ const stmt = this.db.prepare("SELECT 1");
219
+ stmt.get();
220
+ return true;
221
+ } catch {
222
+ return false;
223
+ }
224
+ }
225
+ async clear() {
226
+ this.db.exec(`
227
+ DELETE FROM world_state;
228
+ DELETE FROM events;
229
+ DELETE FROM agents;
230
+ `);
231
+ }
232
+ };
233
+ }
234
+ });
235
+
236
+ // src/persistence/adapters/PostgresAdapter.ts
237
+ var PostgresAdapter_exports = {};
238
+ __export(PostgresAdapter_exports, {
239
+ PostgresAdapter: () => PostgresAdapter
240
+ });
241
+ var import_pg, Pool, PostgresAdapter;
242
+ var init_PostgresAdapter = __esm({
243
+ "src/persistence/adapters/PostgresAdapter.ts"() {
244
+ "use strict";
245
+ import_pg = __toESM(require("pg"), 1);
246
+ ({ Pool } = import_pg.default);
247
+ PostgresAdapter = class {
248
+ constructor(config) {
249
+ this.config = config;
250
+ this.pool = new Pool({
251
+ host: config.host,
252
+ port: config.port || 5432,
253
+ database: config.database,
254
+ user: config.user,
255
+ password: config.password,
256
+ ssl: config.ssl ? { rejectUnauthorized: false } : void 0,
257
+ max: config.max || 10
258
+ });
259
+ }
260
+ pool;
261
+ connected = false;
262
+ async connect() {
263
+ try {
264
+ await this.pool.query("SELECT NOW()");
265
+ await this.initSchema();
266
+ this.connected = true;
267
+ } catch (error) {
268
+ throw new Error(`PostgreSQL connection failed: ${error.message}`);
269
+ }
270
+ }
271
+ async initSchema() {
272
+ const client = await this.pool.connect();
273
+ try {
274
+ await client.query("BEGIN");
275
+ await client.query(`
276
+ CREATE TABLE IF NOT EXISTS world_state (
277
+ id SERIAL PRIMARY KEY,
278
+ phase VARCHAR(50) NOT NULL,
279
+ tick INTEGER NOT NULL,
280
+ round INTEGER NOT NULL,
281
+ timestamp BIGINT NOT NULL,
282
+ metadata JSONB DEFAULT '{}'::jsonb,
283
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
284
+ )
285
+ `);
286
+ await client.query(`
287
+ CREATE TABLE IF NOT EXISTS world_events (
288
+ id VARCHAR(255) PRIMARY KEY,
289
+ type VARCHAR(100) NOT NULL,
290
+ timestamp BIGINT NOT NULL,
291
+ agent_url VARCHAR(500),
292
+ data JSONB DEFAULT '{}'::jsonb,
293
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
294
+ )
295
+ `);
296
+ await client.query(`
297
+ CREATE INDEX IF NOT EXISTS idx_events_type ON world_events(type)
298
+ `);
299
+ await client.query(`
300
+ CREATE INDEX IF NOT EXISTS idx_events_timestamp ON world_events(timestamp)
301
+ `);
302
+ await client.query(`
303
+ CREATE TABLE IF NOT EXISTS agent_profiles (
304
+ url VARCHAR(500) PRIMARY KEY,
305
+ name VARCHAR(255) NOT NULL,
306
+ protocol_version VARCHAR(50) NOT NULL,
307
+ skills JSONB NOT NULL,
308
+ capabilities JSONB NOT NULL,
309
+ joined_at BIGINT NOT NULL,
310
+ role VARCHAR(100),
311
+ metadata JSONB DEFAULT '{}'::jsonb,
312
+ wallet_address VARCHAR(255),
313
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
314
+ )
315
+ `);
316
+ await client.query("COMMIT");
317
+ } catch (error) {
318
+ await client.query("ROLLBACK");
319
+ throw error;
320
+ } finally {
321
+ client.release();
322
+ }
323
+ }
324
+ async saveState(state) {
325
+ await this.pool.query(
326
+ `INSERT INTO world_state (phase, tick, round, timestamp, metadata)
327
+ VALUES ($1, $2, $3, $4, $5)`,
328
+ [state.phase, state.tick, state.round, state.timestamp, JSON.stringify(state.metadata)]
329
+ );
330
+ }
331
+ async loadState() {
332
+ const result = await this.pool.query(
333
+ "SELECT * FROM world_state ORDER BY id DESC LIMIT 1"
334
+ );
335
+ if (result.rows.length === 0) {
336
+ return null;
337
+ }
338
+ const row = result.rows[0];
339
+ return {
340
+ phase: row.phase,
341
+ tick: row.tick,
342
+ round: row.round,
343
+ timestamp: parseInt(row.timestamp),
344
+ metadata: row.metadata
345
+ };
346
+ }
347
+ async saveEvent(event) {
348
+ await this.pool.query(
349
+ `INSERT INTO world_events (id, type, timestamp, agent_url, data)
350
+ VALUES ($1, $2, $3, $4, $5)`,
351
+ [event.id, event.type, event.timestamp, event.agentUrl || null, JSON.stringify(event.data)]
352
+ );
353
+ }
354
+ async getEvents(filter) {
355
+ let query = "SELECT * FROM world_events WHERE 1=1";
356
+ const params = [];
357
+ let paramCount = 1;
358
+ if (filter?.type) {
359
+ query += ` AND type = $${paramCount++}`;
360
+ params.push(filter.type);
361
+ }
362
+ if (filter?.agentUrl) {
363
+ query += ` AND agent_url = $${paramCount++}`;
364
+ params.push(filter.agentUrl);
365
+ }
366
+ if (filter?.since) {
367
+ query += ` AND timestamp >= $${paramCount++}`;
368
+ params.push(filter.since);
369
+ }
370
+ if (filter?.until) {
371
+ query += ` AND timestamp <= $${paramCount++}`;
372
+ params.push(filter.until);
373
+ }
374
+ query += " ORDER BY timestamp DESC";
375
+ if (filter?.limit) {
376
+ query += ` LIMIT $${paramCount++}`;
377
+ params.push(filter.limit);
378
+ }
379
+ const result = await this.pool.query(query, params);
380
+ return result.rows.map((row) => ({
381
+ id: row.id,
382
+ type: row.type,
383
+ timestamp: parseInt(row.timestamp),
384
+ agentUrl: row.agent_url,
385
+ data: row.data
386
+ }));
387
+ }
388
+ async saveAgent(profile) {
389
+ await this.pool.query(
390
+ `INSERT INTO agent_profiles
391
+ (url, name, protocol_version, skills, capabilities, joined_at, role, metadata, wallet_address)
392
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
393
+ ON CONFLICT (url) DO UPDATE SET
394
+ name = EXCLUDED.name,
395
+ protocol_version = EXCLUDED.protocol_version,
396
+ skills = EXCLUDED.skills,
397
+ capabilities = EXCLUDED.capabilities,
398
+ role = EXCLUDED.role,
399
+ metadata = EXCLUDED.metadata,
400
+ wallet_address = EXCLUDED.wallet_address`,
401
+ [
402
+ profile.url,
403
+ profile.name,
404
+ profile.protocolVersion,
405
+ JSON.stringify(profile.skills),
406
+ JSON.stringify(profile.capabilities),
407
+ profile.joinedAt,
408
+ profile.role || null,
409
+ JSON.stringify(profile.metadata || {}),
410
+ profile.walletAddress || null
411
+ ]
412
+ );
413
+ }
414
+ async removeAgent(agentUrl) {
415
+ await this.pool.query("DELETE FROM agent_profiles WHERE url = $1", [agentUrl]);
416
+ }
417
+ async getAgents() {
418
+ const result = await this.pool.query(
419
+ "SELECT * FROM agent_profiles ORDER BY joined_at ASC"
420
+ );
421
+ return result.rows.map((row) => ({
422
+ url: row.url,
423
+ name: row.name,
424
+ protocolVersion: row.protocol_version,
425
+ skills: row.skills,
426
+ capabilities: row.capabilities,
427
+ joinedAt: parseInt(row.joined_at),
428
+ role: row.role,
429
+ metadata: row.metadata,
430
+ walletAddress: row.wallet_address
431
+ }));
432
+ }
433
+ async getAgent(agentUrl) {
434
+ const result = await this.pool.query(
435
+ "SELECT * FROM agent_profiles WHERE url = $1",
436
+ [agentUrl]
437
+ );
438
+ if (result.rows.length === 0) {
439
+ return null;
440
+ }
441
+ const row = result.rows[0];
442
+ return {
443
+ url: row.url,
444
+ name: row.name,
445
+ protocolVersion: row.protocol_version,
446
+ skills: row.skills,
447
+ capabilities: row.capabilities,
448
+ joinedAt: parseInt(row.joined_at),
449
+ role: row.role,
450
+ metadata: row.metadata,
451
+ walletAddress: row.wallet_address
452
+ };
453
+ }
454
+ async disconnect() {
455
+ await this.pool.end();
456
+ this.connected = false;
457
+ }
458
+ async healthCheck() {
459
+ try {
460
+ await this.pool.query("SELECT 1");
461
+ return true;
462
+ } catch {
463
+ return false;
464
+ }
465
+ }
466
+ async clear() {
467
+ const client = await this.pool.connect();
468
+ try {
469
+ await client.query("BEGIN");
470
+ await client.query("TRUNCATE world_state, world_events, agent_profiles");
471
+ await client.query("COMMIT");
472
+ } catch (error) {
473
+ await client.query("ROLLBACK");
474
+ throw error;
475
+ } finally {
476
+ client.release();
477
+ }
478
+ }
479
+ };
480
+ }
481
+ });
482
+
483
+ // src/persistence/adapters/RedisAdapter.ts
484
+ var RedisAdapter_exports = {};
485
+ __export(RedisAdapter_exports, {
486
+ RedisAdapter: () => RedisAdapter
487
+ });
488
+ var import_ioredis, RedisAdapter;
489
+ var init_RedisAdapter = __esm({
490
+ "src/persistence/adapters/RedisAdapter.ts"() {
491
+ "use strict";
492
+ import_ioredis = require("ioredis");
493
+ RedisAdapter = class {
494
+ constructor(config) {
495
+ this.config = config;
496
+ this.keyPrefix = config.keyPrefix || "world:";
497
+ this.client = new import_ioredis.Redis({
498
+ host: config.host,
499
+ port: config.port || 6379,
500
+ password: config.password,
501
+ db: config.db || 0
502
+ });
503
+ }
504
+ client;
505
+ connected = false;
506
+ keyPrefix;
507
+ async connect() {
508
+ try {
509
+ await this.client.ping();
510
+ this.connected = true;
511
+ } catch (error) {
512
+ throw new Error(`Redis connection failed: ${error.message}`);
513
+ }
514
+ }
515
+ async saveState(state) {
516
+ const key = `${this.keyPrefix}state`;
517
+ await this.client.set(key, JSON.stringify(state));
518
+ const historyKey = `${this.keyPrefix}state:history`;
519
+ await this.client.zadd(historyKey, state.timestamp, JSON.stringify(state));
520
+ }
521
+ async loadState() {
522
+ const key = `${this.keyPrefix}state`;
523
+ const data = await this.client.get(key);
524
+ if (!data) {
525
+ return null;
526
+ }
527
+ return JSON.parse(data);
528
+ }
529
+ async saveEvent(event) {
530
+ const eventsKey = `${this.keyPrefix}events`;
531
+ await this.client.zadd(eventsKey, event.timestamp, JSON.stringify(event));
532
+ const typeKey = `${this.keyPrefix}events:type:${event.type}`;
533
+ await this.client.zadd(typeKey, event.timestamp, JSON.stringify(event));
534
+ if (event.agentUrl) {
535
+ const agentKey = `${this.keyPrefix}events:agent:${event.agentUrl}`;
536
+ await this.client.zadd(agentKey, event.timestamp, JSON.stringify(event));
537
+ }
538
+ }
539
+ async getEvents(filter) {
540
+ let key = `${this.keyPrefix}events`;
541
+ if (filter?.type) {
542
+ key = `${this.keyPrefix}events:type:${filter.type}`;
543
+ } else if (filter?.agentUrl) {
544
+ key = `${this.keyPrefix}events:agent:${filter.agentUrl}`;
545
+ }
546
+ const min = filter?.since || "-inf";
547
+ const max = filter?.until || "+inf";
548
+ const count = filter?.limit || -1;
549
+ const results = await this.client.zrevrangebyscore(
550
+ key,
551
+ max,
552
+ min,
553
+ "LIMIT",
554
+ 0,
555
+ count === -1 ? 100 : count
556
+ );
557
+ return results.map((r) => JSON.parse(r));
558
+ }
559
+ async saveAgent(profile) {
560
+ const key = `${this.keyPrefix}agent:${profile.url}`;
561
+ await this.client.set(key, JSON.stringify(profile));
562
+ const agentsKey = `${this.keyPrefix}agents`;
563
+ await this.client.sadd(agentsKey, profile.url);
564
+ }
565
+ async removeAgent(agentUrl) {
566
+ const key = `${this.keyPrefix}agent:${agentUrl}`;
567
+ await this.client.del(key);
568
+ const agentsKey = `${this.keyPrefix}agents`;
569
+ await this.client.srem(agentsKey, agentUrl);
570
+ }
571
+ async getAgents() {
572
+ const agentsKey = `${this.keyPrefix}agents`;
573
+ const urls = await this.client.smembers(agentsKey);
574
+ if (urls.length === 0) {
575
+ return [];
576
+ }
577
+ const keys = urls.map((url) => `${this.keyPrefix}agent:${url}`);
578
+ const results = await this.client.mget(...keys);
579
+ return results.filter((r) => r !== null).map((r) => JSON.parse(r));
580
+ }
581
+ async getAgent(agentUrl) {
582
+ const key = `${this.keyPrefix}agent:${agentUrl}`;
583
+ const data = await this.client.get(key);
584
+ if (!data) {
585
+ return null;
586
+ }
587
+ return JSON.parse(data);
588
+ }
589
+ async disconnect() {
590
+ await this.client.quit();
591
+ this.connected = false;
592
+ }
593
+ async healthCheck() {
594
+ try {
595
+ await this.client.ping();
596
+ return true;
597
+ } catch {
598
+ return false;
599
+ }
600
+ }
601
+ async clear() {
602
+ const pattern = `${this.keyPrefix}*`;
603
+ const keys = await this.client.keys(pattern);
604
+ if (keys.length > 0) {
605
+ await this.client.del(...keys);
606
+ }
607
+ }
608
+ };
609
+ }
610
+ });
611
+
612
+ // src/persistence/adapters/MongoAdapter.ts
613
+ var MongoAdapter_exports = {};
614
+ __export(MongoAdapter_exports, {
615
+ MongoAdapter: () => MongoAdapter
616
+ });
617
+ var import_mongodb, MongoAdapter;
618
+ var init_MongoAdapter = __esm({
619
+ "src/persistence/adapters/MongoAdapter.ts"() {
620
+ "use strict";
621
+ import_mongodb = require("mongodb");
622
+ MongoAdapter = class {
623
+ constructor(config) {
624
+ this.config = config;
625
+ this.client = new import_mongodb.MongoClient(config.url, {
626
+ useUnifiedTopology: config.useUnifiedTopology !== false
627
+ });
628
+ }
629
+ client;
630
+ db;
631
+ stateCollection;
632
+ eventsCollection;
633
+ agentsCollection;
634
+ connected = false;
635
+ async connect() {
636
+ try {
637
+ await this.client.connect();
638
+ this.db = this.client.db(this.config.database);
639
+ this.stateCollection = this.db.collection("world_state");
640
+ this.eventsCollection = this.db.collection("world_events");
641
+ this.agentsCollection = this.db.collection("agent_profiles");
642
+ await this.initIndexes();
643
+ this.connected = true;
644
+ } catch (error) {
645
+ throw new Error(`MongoDB connection failed: ${error.message}`);
646
+ }
647
+ }
648
+ async initIndexes() {
649
+ await this.eventsCollection.createIndex({ type: 1 });
650
+ await this.eventsCollection.createIndex({ timestamp: -1 });
651
+ await this.eventsCollection.createIndex({ agentUrl: 1 });
652
+ await this.eventsCollection.createIndex({ type: 1, timestamp: -1 });
653
+ await this.agentsCollection.createIndex({ url: 1 }, { unique: true });
654
+ await this.agentsCollection.createIndex({ joinedAt: 1 });
655
+ await this.stateCollection.createIndex({ timestamp: -1 });
656
+ }
657
+ async saveState(state) {
658
+ await this.stateCollection.insertOne({
659
+ ...state,
660
+ _createdAt: /* @__PURE__ */ new Date()
661
+ });
662
+ }
663
+ async loadState() {
664
+ const doc = await this.stateCollection.findOne(
665
+ {},
666
+ { sort: { timestamp: -1 } }
667
+ );
668
+ if (!doc) {
669
+ return null;
670
+ }
671
+ const { _id, _createdAt, ...state } = doc;
672
+ return state;
673
+ }
674
+ async saveEvent(event) {
675
+ await this.eventsCollection.insertOne({
676
+ _id: event.id,
677
+ ...event,
678
+ _createdAt: /* @__PURE__ */ new Date()
679
+ });
680
+ }
681
+ async getEvents(filter) {
682
+ const query = {};
683
+ if (filter?.type) {
684
+ query.type = filter.type;
685
+ }
686
+ if (filter?.agentUrl) {
687
+ query.agentUrl = filter.agentUrl;
688
+ }
689
+ if (filter?.since || filter?.until) {
690
+ query.timestamp = {};
691
+ if (filter.since) {
692
+ query.timestamp.$gte = filter.since;
693
+ }
694
+ if (filter.until) {
695
+ query.timestamp.$lte = filter.until;
696
+ }
697
+ }
698
+ const cursor = this.eventsCollection.find(query).sort({ timestamp: -1 });
699
+ if (filter?.limit) {
700
+ cursor.limit(filter.limit);
701
+ }
702
+ const docs = await cursor.toArray();
703
+ return docs.map((doc) => {
704
+ const { _id, _createdAt, ...event } = doc;
705
+ return event;
706
+ });
707
+ }
708
+ async saveAgent(profile) {
709
+ await this.agentsCollection.updateOne(
710
+ { url: profile.url },
711
+ { $set: { ...profile, _updatedAt: /* @__PURE__ */ new Date() } },
712
+ { upsert: true }
713
+ );
714
+ }
715
+ async removeAgent(agentUrl) {
716
+ await this.agentsCollection.deleteOne({ url: agentUrl });
717
+ }
718
+ async getAgents() {
719
+ const docs = await this.agentsCollection.find({}).sort({ joinedAt: 1 }).toArray();
720
+ return docs.map((doc) => {
721
+ const { _id, _updatedAt, ...profile } = doc;
722
+ return profile;
723
+ });
724
+ }
725
+ async getAgent(agentUrl) {
726
+ const doc = await this.agentsCollection.findOne({ url: agentUrl });
727
+ if (!doc) {
728
+ return null;
729
+ }
730
+ const { _id, _updatedAt, ...profile } = doc;
731
+ return profile;
732
+ }
733
+ async disconnect() {
734
+ await this.client.close();
735
+ this.connected = false;
736
+ }
737
+ async healthCheck() {
738
+ try {
739
+ await this.db.admin().ping();
740
+ return true;
741
+ } catch {
742
+ return false;
743
+ }
744
+ }
745
+ async clear() {
746
+ await Promise.all([
747
+ this.stateCollection.deleteMany({}),
748
+ this.eventsCollection.deleteMany({}),
749
+ this.agentsCollection.deleteMany({})
750
+ ]);
751
+ }
752
+ };
753
+ }
754
+ });
755
+
756
+ // src/persistence/adapters/LevelDBAdapter.ts
757
+ var LevelDBAdapter_exports = {};
758
+ __export(LevelDBAdapter_exports, {
759
+ LevelDBAdapter: () => LevelDBAdapter
760
+ });
761
+ var import_level, LevelDBAdapter;
762
+ var init_LevelDBAdapter = __esm({
763
+ "src/persistence/adapters/LevelDBAdapter.ts"() {
764
+ "use strict";
765
+ import_level = require("level");
766
+ LevelDBAdapter = class {
767
+ constructor(config) {
768
+ this.config = config;
769
+ }
770
+ db;
771
+ connected = false;
772
+ async connect() {
773
+ try {
774
+ this.db = new import_level.Level(this.config.path, {
775
+ valueEncoding: "json"
776
+ });
777
+ await this.db.open();
778
+ this.connected = true;
779
+ } catch (error) {
780
+ throw new Error(`LevelDB connection failed: ${error.message}`);
781
+ }
782
+ }
783
+ async saveState(state) {
784
+ await this.db.put("state:current", JSON.stringify(state));
785
+ const historyKey = `state:history:${state.timestamp}`;
786
+ await this.db.put(historyKey, JSON.stringify(state));
787
+ }
788
+ async loadState() {
789
+ try {
790
+ const data = await this.db.get("state:current");
791
+ return JSON.parse(data);
792
+ } catch (error) {
793
+ if (error.code === "LEVEL_NOT_FOUND") {
794
+ return null;
795
+ }
796
+ throw error;
797
+ }
798
+ }
799
+ async saveEvent(event) {
800
+ const key = `event:${event.timestamp}:${event.id}`;
801
+ await this.db.put(key, JSON.stringify(event));
802
+ const typeKey = `event:type:${event.type}:${event.timestamp}:${event.id}`;
803
+ await this.db.put(typeKey, JSON.stringify(event));
804
+ if (event.agentUrl) {
805
+ const agentKey = `event:agent:${event.agentUrl}:${event.timestamp}:${event.id}`;
806
+ await this.db.put(agentKey, JSON.stringify(event));
807
+ }
808
+ }
809
+ async getEvents(filter) {
810
+ const events = [];
811
+ let prefix = "event:";
812
+ if (filter?.type) {
813
+ prefix = `event:type:${filter.type}:`;
814
+ } else if (filter?.agentUrl) {
815
+ prefix = `event:agent:${filter.agentUrl}:`;
816
+ }
817
+ const iterator = this.db.iterator({
818
+ gte: prefix,
819
+ lte: prefix + "\uFFFF",
820
+ reverse: true,
821
+ // Most recent first
822
+ limit: filter?.limit || -1
823
+ });
824
+ for await (const [key, value] of iterator) {
825
+ const event = JSON.parse(value);
826
+ if (filter?.since && event.timestamp < filter.since) continue;
827
+ if (filter?.until && event.timestamp > filter.until) continue;
828
+ if (filter?.type && !prefix.includes("type:") && event.type !== filter.type) {
829
+ continue;
830
+ }
831
+ if (filter?.agentUrl && !prefix.includes("agent:") && event.agentUrl !== filter.agentUrl) {
832
+ continue;
833
+ }
834
+ events.push(event);
835
+ if (filter?.limit && events.length >= filter.limit) {
836
+ break;
837
+ }
838
+ }
839
+ return events;
840
+ }
841
+ async saveAgent(profile) {
842
+ const key = `agent:${profile.url}`;
843
+ await this.db.put(key, JSON.stringify(profile));
844
+ const listKey = `agent:list:${profile.joinedAt}:${profile.url}`;
845
+ await this.db.put(listKey, profile.url);
846
+ }
847
+ async removeAgent(agentUrl) {
848
+ const key = `agent:${agentUrl}`;
849
+ try {
850
+ const data = await this.db.get(key);
851
+ const profile = JSON.parse(data);
852
+ await this.db.del(key);
853
+ const listKey = `agent:list:${profile.joinedAt}:${agentUrl}`;
854
+ await this.db.del(listKey);
855
+ } catch (error) {
856
+ if (error.code !== "LEVEL_NOT_FOUND") {
857
+ throw error;
858
+ }
859
+ }
860
+ }
861
+ async getAgents() {
862
+ const agents = [];
863
+ const iterator = this.db.iterator({
864
+ gte: "agent:list:",
865
+ lte: "agent:list:\uFFFF"
866
+ });
867
+ for await (const [key, agentUrl] of iterator) {
868
+ try {
869
+ const data = await this.db.get(`agent:${agentUrl}`);
870
+ agents.push(JSON.parse(data));
871
+ } catch (error) {
872
+ if (error.code !== "LEVEL_NOT_FOUND") {
873
+ throw error;
874
+ }
875
+ }
876
+ }
877
+ return agents;
878
+ }
879
+ async getAgent(agentUrl) {
880
+ try {
881
+ const data = await this.db.get(`agent:${agentUrl}`);
882
+ return JSON.parse(data);
883
+ } catch (error) {
884
+ if (error.code === "LEVEL_NOT_FOUND") {
885
+ return null;
886
+ }
887
+ throw error;
888
+ }
889
+ }
890
+ async disconnect() {
891
+ await this.db.close();
892
+ this.connected = false;
893
+ }
894
+ async healthCheck() {
895
+ try {
896
+ await this.db.get("health:check").catch(() => {
897
+ });
898
+ return true;
899
+ } catch {
900
+ return false;
901
+ }
902
+ }
903
+ async clear() {
904
+ await this.db.clear();
905
+ }
906
+ };
907
+ }
908
+ });
909
+
910
+ // src/logger.ts
911
+ function createLogger(moduleName) {
912
+ return logger.child({ module: moduleName });
913
+ }
914
+ var import_winston, logLevel, logger;
915
+ var init_logger = __esm({
916
+ "src/logger.ts"() {
917
+ "use strict";
918
+ import_winston = __toESM(require("winston"), 1);
919
+ logLevel = process.env.LOG_LEVEL || "info";
920
+ logger = import_winston.default.createLogger({
921
+ level: logLevel,
922
+ format: import_winston.default.format.combine(
923
+ import_winston.default.format.timestamp(),
924
+ import_winston.default.format.colorize(),
925
+ import_winston.default.format.printf(({ level, message, timestamp, ...meta }) => {
926
+ const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : "";
927
+ return `${timestamp} [${level}] ${message}${metaStr}`;
928
+ })
929
+ ),
930
+ transports: [new import_winston.default.transports.Console()]
931
+ });
932
+ }
933
+ });
934
+
935
+ // src/discovery/CardFetcher.ts
936
+ var CardFetcher_exports = {};
937
+ __export(CardFetcher_exports, {
938
+ CardFetcher: () => CardFetcher,
939
+ normalizeAgentUrl: () => normalizeAgentUrl
940
+ });
941
+ function normalizeAgentUrl(url) {
942
+ try {
943
+ const parsed = new URL(url);
944
+ return `${parsed.protocol}//${parsed.host}`;
945
+ } catch {
946
+ return url;
947
+ }
948
+ }
949
+ var logger2, CardFetcher;
950
+ var init_CardFetcher = __esm({
951
+ "src/discovery/CardFetcher.ts"() {
952
+ "use strict";
953
+ init_logger();
954
+ logger2 = createLogger("CardFetcher");
955
+ CardFetcher = class {
956
+ /**
957
+ * Fetch an agent's card from their A2A endpoint.
958
+ *
959
+ * @param agentUrl Base URL of the agent (e.g., http://localhost:3000)
960
+ * @returns Fetch result with card or error
961
+ */
962
+ async fetchCard(agentUrl) {
963
+ try {
964
+ const cardUrl = new URL("/.well-known/agent-card.json", agentUrl).toString();
965
+ logger2.debug(`Fetching agent card from ${cardUrl}`);
966
+ const response = await fetch(cardUrl, {
967
+ method: "GET",
968
+ headers: {
969
+ "Accept": "application/json",
970
+ "User-Agent": "@moltium/world-core/0.1.0"
971
+ },
972
+ signal: AbortSignal.timeout(5e3)
973
+ // 5 second timeout
974
+ });
975
+ if (!response.ok) {
976
+ return {
977
+ success: false,
978
+ error: `HTTP ${response.status}: ${response.statusText}`
979
+ };
980
+ }
981
+ const card = await response.json();
982
+ if (!card.name || !card.protocolVersion || !card.url || !card.skills) {
983
+ return {
984
+ success: false,
985
+ error: "Invalid agent card: missing required fields"
986
+ };
987
+ }
988
+ logger2.info(`Successfully fetched card for agent: ${card.name}`, {
989
+ protocolVersion: card.protocolVersion,
990
+ skillCount: card.skills.length
991
+ });
992
+ return {
993
+ success: true,
994
+ card
995
+ };
996
+ } catch (error) {
997
+ logger2.error(`Failed to fetch agent card from ${agentUrl}:`, error.message);
998
+ return {
999
+ success: false,
1000
+ error: error.message || "Unknown error"
1001
+ };
1002
+ }
1003
+ }
1004
+ /**
1005
+ * Fetch multiple agent cards in parallel.
1006
+ *
1007
+ * @param agentUrls Array of agent URLs
1008
+ * @returns Array of fetch results
1009
+ */
1010
+ async fetchCards(agentUrls) {
1011
+ logger2.info(`Fetching ${agentUrls.length} agent cards...`);
1012
+ const results = await Promise.all(
1013
+ agentUrls.map((url) => this.fetchCard(url))
1014
+ );
1015
+ const successCount = results.filter((r) => r.success).length;
1016
+ logger2.info(`Fetched ${successCount}/${agentUrls.length} agent cards successfully`);
1017
+ return results;
1018
+ }
1019
+ /**
1020
+ * Verify that an agent card is valid for A2A protocol v0.3.0.
1021
+ *
1022
+ * @param card Agent card to verify
1023
+ * @returns True if valid
1024
+ */
1025
+ verifyCard(card) {
1026
+ if (!card.name || !card.protocolVersion || !card.url || !card.skills) {
1027
+ logger2.warn("Agent card missing required fields", { name: card.name });
1028
+ return false;
1029
+ }
1030
+ if (!card.protocolVersion.startsWith("0.3")) {
1031
+ logger2.warn("Agent card has incompatible protocol version", {
1032
+ name: card.name,
1033
+ version: card.protocolVersion
1034
+ });
1035
+ return false;
1036
+ }
1037
+ if (!Array.isArray(card.skills) || card.skills.length === 0) {
1038
+ logger2.warn("Agent card has no skills", { name: card.name });
1039
+ return false;
1040
+ }
1041
+ if (!card.capabilities || typeof card.capabilities !== "object") {
1042
+ logger2.warn("Agent card missing capabilities", { name: card.name });
1043
+ return false;
1044
+ }
1045
+ return true;
1046
+ }
1047
+ };
1048
+ }
1049
+ });
1050
+
1051
+ // src/index.ts
1052
+ var index_exports = {};
1053
+ __export(index_exports, {
1054
+ AdmissionRulesSchema: () => AdmissionRulesSchema,
1055
+ AgentEvaluator: () => AgentEvaluator,
1056
+ BlockchainClient: () => BlockchainClient,
1057
+ BlockchainConfigSchema: () => BlockchainConfigSchema,
1058
+ CardFetcher: () => CardFetcher,
1059
+ InMemoryAdapter: () => InMemoryAdapter,
1060
+ PersistenceConfigSchema: () => PersistenceConfigSchema,
1061
+ TokenConfigSchema: () => TokenConfigSchema,
1062
+ World: () => World,
1063
+ WorldConfigSchema: () => WorldConfigSchema,
1064
+ createLogger: () => createLogger,
1065
+ createPersistence: () => createPersistence,
1066
+ createWorldApp: () => createWorldApp,
1067
+ isValidWorldConfig: () => isValidWorldConfig,
1068
+ logger: () => logger,
1069
+ normalizeAgentUrl: () => normalizeAgentUrl,
1070
+ profileFromCard: () => profileFromCard,
1071
+ startWorldServer: () => startWorldServer,
1072
+ validateWorldConfig: () => validateWorldConfig
1073
+ });
1074
+ module.exports = __toCommonJS(index_exports);
1075
+
1076
+ // src/config/types.ts
1077
+ function profileFromCard(card, walletAddress) {
1078
+ return {
1079
+ url: card.url,
1080
+ name: card.name,
1081
+ protocolVersion: card.protocolVersion,
1082
+ skills: card.skills,
1083
+ capabilities: {
1084
+ streaming: card.capabilities.streaming ?? false,
1085
+ pushNotifications: card.capabilities.pushNotifications ?? false,
1086
+ stateTransitionHistory: card.capabilities.stateTransitionHistory
1087
+ },
1088
+ joinedAt: Date.now(),
1089
+ walletAddress
1090
+ };
1091
+ }
1092
+
1093
+ // src/config/validator.ts
1094
+ var import_zod = require("zod");
1095
+ var AdmissionRulesSchema = import_zod.z.object({
1096
+ maxAgents: import_zod.z.number().int().positive().optional(),
1097
+ requiredSkills: import_zod.z.array(import_zod.z.string()).optional(),
1098
+ requiredTags: import_zod.z.array(import_zod.z.string()).optional(),
1099
+ minProtocolVersion: import_zod.z.string().optional(),
1100
+ customEvaluator: import_zod.z.function().optional()
1101
+ });
1102
+ var SQLiteConfigSchema = import_zod.z.object({
1103
+ filename: import_zod.z.string(),
1104
+ memory: import_zod.z.boolean().optional()
1105
+ });
1106
+ var PostgresConfigSchema = import_zod.z.object({
1107
+ host: import_zod.z.string(),
1108
+ port: import_zod.z.number().optional(),
1109
+ database: import_zod.z.string(),
1110
+ user: import_zod.z.string(),
1111
+ password: import_zod.z.string(),
1112
+ ssl: import_zod.z.boolean().optional(),
1113
+ max: import_zod.z.number().optional()
1114
+ });
1115
+ var RedisConfigSchema = import_zod.z.object({
1116
+ host: import_zod.z.string(),
1117
+ port: import_zod.z.number().optional(),
1118
+ password: import_zod.z.string().optional(),
1119
+ db: import_zod.z.number().optional(),
1120
+ keyPrefix: import_zod.z.string().optional()
1121
+ });
1122
+ var MongoDBConfigSchema = import_zod.z.object({
1123
+ url: import_zod.z.string(),
1124
+ database: import_zod.z.string(),
1125
+ useUnifiedTopology: import_zod.z.boolean().optional()
1126
+ });
1127
+ var LevelDBConfigSchema = import_zod.z.object({
1128
+ path: import_zod.z.string()
1129
+ });
1130
+ var PersistenceConfigSchema = import_zod.z.object({
1131
+ type: import_zod.z.enum(["memory", "postgres", "redis", "mongodb", "sqlite", "leveldb"]),
1132
+ sqlite: SQLiteConfigSchema.optional(),
1133
+ postgres: PostgresConfigSchema.optional(),
1134
+ redis: RedisConfigSchema.optional(),
1135
+ mongodb: MongoDBConfigSchema.optional(),
1136
+ leveldb: LevelDBConfigSchema.optional(),
1137
+ autoSaveIntervalMs: import_zod.z.number().int().positive().optional()
1138
+ });
1139
+ var BlockchainConfigSchema = import_zod.z.object({
1140
+ rpcUrl: import_zod.z.string().url(),
1141
+ privateKey: import_zod.z.string().regex(/^0x[a-fA-F0-9]{64}$/, "Invalid private key format"),
1142
+ entryFee: import_zod.z.number().nonnegative(),
1143
+ requireMembership: import_zod.z.boolean().optional(),
1144
+ enforceOnChainValidation: import_zod.z.boolean().optional(),
1145
+ agentRegistryAddress: import_zod.z.string().optional(),
1146
+ membershipContractAddress: import_zod.z.string().optional(),
1147
+ worldTokenAddress: import_zod.z.string().optional(),
1148
+ chainId: import_zod.z.number().int().optional()
1149
+ });
1150
+ var TokenConfigSchema = import_zod.z.object({
1151
+ deploy: import_zod.z.boolean(),
1152
+ name: import_zod.z.string().optional(),
1153
+ symbol: import_zod.z.string().optional(),
1154
+ initialSupply: import_zod.z.number().positive().optional(),
1155
+ decimals: import_zod.z.number().int().min(0).max(18).optional()
1156
+ });
1157
+ var WorldConfigSchema = import_zod.z.object({
1158
+ name: import_zod.z.string().min(1, "World name is required"),
1159
+ description: import_zod.z.string().optional(),
1160
+ type: import_zod.z.string().optional(),
1161
+ server: import_zod.z.object({
1162
+ port: import_zod.z.number().int().min(1).max(65535),
1163
+ host: import_zod.z.string()
1164
+ }),
1165
+ a2a: import_zod.z.object({
1166
+ baseUrl: import_zod.z.string().url(),
1167
+ pushNotifications: import_zod.z.boolean().optional(),
1168
+ streaming: import_zod.z.boolean().optional()
1169
+ }).optional(),
1170
+ admission: AdmissionRulesSchema,
1171
+ simulation: import_zod.z.object({
1172
+ tickIntervalMs: import_zod.z.number().int().positive().optional(),
1173
+ maxTicks: import_zod.z.number().int().positive().optional(),
1174
+ autoStart: import_zod.z.boolean().optional()
1175
+ }).optional(),
1176
+ persistence: PersistenceConfigSchema.optional(),
1177
+ blockchain: BlockchainConfigSchema.optional(),
1178
+ token: TokenConfigSchema.optional(),
1179
+ rules: import_zod.z.array(import_zod.z.any()).optional(),
1180
+ agentUrls: import_zod.z.array(import_zod.z.string().url()).optional()
1181
+ });
1182
+ function validateWorldConfig(config) {
1183
+ try {
1184
+ WorldConfigSchema.parse(config);
1185
+ } catch (error) {
1186
+ if (error instanceof import_zod.z.ZodError) {
1187
+ const messages = error.errors.map((e) => `${e.path.join(".")}: ${e.message}`).join(", ");
1188
+ throw new Error(`Invalid world configuration: ${messages}`);
1189
+ }
1190
+ throw error;
1191
+ }
1192
+ }
1193
+ function isValidWorldConfig(config) {
1194
+ try {
1195
+ WorldConfigSchema.parse(config);
1196
+ return true;
1197
+ } catch {
1198
+ return false;
1199
+ }
1200
+ }
1201
+
1202
+ // src/persistence/adapters/InMemoryAdapter.ts
1203
+ var InMemoryAdapter = class {
1204
+ state = null;
1205
+ events = [];
1206
+ agents = /* @__PURE__ */ new Map();
1207
+ async connect() {
1208
+ }
1209
+ async saveState(state) {
1210
+ this.state = { ...state };
1211
+ }
1212
+ async loadState() {
1213
+ return this.state ? { ...this.state } : null;
1214
+ }
1215
+ async saveEvent(event) {
1216
+ this.events.push({ ...event });
1217
+ }
1218
+ async getEvents(filter) {
1219
+ let filtered = [...this.events];
1220
+ if (filter?.type) {
1221
+ filtered = filtered.filter((e) => e.type === filter.type);
1222
+ }
1223
+ if (filter?.agentUrl) {
1224
+ filtered = filtered.filter((e) => e.agentUrl === filter.agentUrl);
1225
+ }
1226
+ if (filter?.fromTimestamp) {
1227
+ filtered = filtered.filter((e) => e.timestamp >= filter.fromTimestamp);
1228
+ }
1229
+ if (filter?.toTimestamp) {
1230
+ filtered = filtered.filter((e) => e.timestamp <= filter.toTimestamp);
1231
+ }
1232
+ filtered.sort((a, b) => b.timestamp - a.timestamp);
1233
+ if (filter?.limit) {
1234
+ filtered = filtered.slice(0, filter.limit);
1235
+ }
1236
+ return filtered;
1237
+ }
1238
+ async saveAgent(profile) {
1239
+ this.agents.set(profile.url, { ...profile });
1240
+ }
1241
+ async removeAgent(agentUrl) {
1242
+ this.agents.delete(agentUrl);
1243
+ }
1244
+ async getAgents() {
1245
+ return Array.from(this.agents.values()).map((a) => ({ ...a }));
1246
+ }
1247
+ async getAgent(agentUrl) {
1248
+ const agent = this.agents.get(agentUrl);
1249
+ return agent ? { ...agent } : null;
1250
+ }
1251
+ async disconnect() {
1252
+ }
1253
+ async healthCheck() {
1254
+ return true;
1255
+ }
1256
+ async clear() {
1257
+ this.state = null;
1258
+ this.events = [];
1259
+ this.agents.clear();
1260
+ }
1261
+ };
1262
+
1263
+ // src/persistence/PersistenceFactory.ts
1264
+ function createPersistence(config) {
1265
+ switch (config.type) {
1266
+ case "memory":
1267
+ return new InMemoryAdapter();
1268
+ case "sqlite":
1269
+ return createSQLiteAdapter(config.sqlite || { filename: "./world.db" });
1270
+ case "postgres":
1271
+ if (!config.postgres) {
1272
+ throw new Error("PostgreSQL configuration is required");
1273
+ }
1274
+ return createPostgresAdapter(config.postgres);
1275
+ case "redis":
1276
+ if (!config.redis) {
1277
+ throw new Error("Redis configuration is required");
1278
+ }
1279
+ return createRedisAdapter(config.redis);
1280
+ case "mongodb":
1281
+ if (!config.mongodb) {
1282
+ throw new Error("MongoDB configuration is required");
1283
+ }
1284
+ return createMongoAdapter(config.mongodb);
1285
+ case "leveldb":
1286
+ if (!config.leveldb) {
1287
+ throw new Error("LevelDB configuration is required");
1288
+ }
1289
+ return createLevelDBAdapter(config.leveldb);
1290
+ default:
1291
+ throw new Error(`Unknown persistence type: ${config.type}`);
1292
+ }
1293
+ }
1294
+ function createSQLiteAdapter(config) {
1295
+ try {
1296
+ const { SQLiteAdapter: SQLiteAdapter2 } = (init_SQLiteAdapter(), __toCommonJS(SQLiteAdapter_exports));
1297
+ return new SQLiteAdapter2(config);
1298
+ } catch (error) {
1299
+ if (error.code === "MODULE_NOT_FOUND") {
1300
+ throw new Error(
1301
+ "SQLite adapter requires better-sqlite3. Install it with: npm install better-sqlite3"
1302
+ );
1303
+ }
1304
+ throw error;
1305
+ }
1306
+ }
1307
+ function createPostgresAdapter(config) {
1308
+ try {
1309
+ const { PostgresAdapter: PostgresAdapter2 } = (init_PostgresAdapter(), __toCommonJS(PostgresAdapter_exports));
1310
+ return new PostgresAdapter2(config);
1311
+ } catch (error) {
1312
+ if (error.code === "MODULE_NOT_FOUND") {
1313
+ throw new Error(
1314
+ "PostgreSQL adapter requires pg. Install it with: npm install pg"
1315
+ );
1316
+ }
1317
+ throw error;
1318
+ }
1319
+ }
1320
+ function createRedisAdapter(config) {
1321
+ try {
1322
+ const { RedisAdapter: RedisAdapter2 } = (init_RedisAdapter(), __toCommonJS(RedisAdapter_exports));
1323
+ return new RedisAdapter2(config);
1324
+ } catch (error) {
1325
+ if (error.code === "MODULE_NOT_FOUND") {
1326
+ throw new Error(
1327
+ "Redis adapter requires ioredis. Install it with: npm install ioredis"
1328
+ );
1329
+ }
1330
+ throw error;
1331
+ }
1332
+ }
1333
+ function createMongoAdapter(config) {
1334
+ try {
1335
+ const { MongoAdapter: MongoAdapter2 } = (init_MongoAdapter(), __toCommonJS(MongoAdapter_exports));
1336
+ return new MongoAdapter2(config);
1337
+ } catch (error) {
1338
+ if (error.code === "MODULE_NOT_FOUND") {
1339
+ throw new Error(
1340
+ "MongoDB adapter requires mongodb. Install it with: npm install mongodb"
1341
+ );
1342
+ }
1343
+ throw error;
1344
+ }
1345
+ }
1346
+ function createLevelDBAdapter(config) {
1347
+ try {
1348
+ const { LevelDBAdapter: LevelDBAdapter2 } = (init_LevelDBAdapter(), __toCommonJS(LevelDBAdapter_exports));
1349
+ return new LevelDBAdapter2(config);
1350
+ } catch (error) {
1351
+ if (error.code === "MODULE_NOT_FOUND") {
1352
+ throw new Error(
1353
+ "LevelDB adapter requires level. Install it with: npm install level"
1354
+ );
1355
+ }
1356
+ throw error;
1357
+ }
1358
+ }
1359
+
1360
+ // src/index.ts
1361
+ init_logger();
1362
+
1363
+ // src/engine/World.ts
1364
+ var import_uuid = require("uuid");
1365
+ init_CardFetcher();
1366
+
1367
+ // src/discovery/AgentEvaluator.ts
1368
+ init_logger();
1369
+ var logger3 = createLogger("AgentEvaluator");
1370
+ var AgentEvaluator = class {
1371
+ constructor(rules) {
1372
+ this.rules = rules;
1373
+ }
1374
+ /**
1375
+ * Evaluate whether an agent should be admitted.
1376
+ *
1377
+ * @param card Agent's A2A card
1378
+ * @param currentAgentCount Current number of agents in world
1379
+ * @param walletAddress Optional wallet address for blockchain membership
1380
+ * @returns Admission decision
1381
+ */
1382
+ async evaluate(card, currentAgentCount, walletAddress) {
1383
+ logger3.debug(`Evaluating agent: ${card.name}`, {
1384
+ currentAgents: currentAgentCount,
1385
+ maxAgents: this.rules.maxAgents
1386
+ });
1387
+ if (this.rules.maxAgents && currentAgentCount >= this.rules.maxAgents) {
1388
+ logger3.info(`Agent ${card.name} rejected: world is full`, {
1389
+ current: currentAgentCount,
1390
+ max: this.rules.maxAgents
1391
+ });
1392
+ return {
1393
+ admitted: false,
1394
+ reason: `World is full (${this.rules.maxAgents} agents maximum)`
1395
+ };
1396
+ }
1397
+ if (this.rules.minProtocolVersion) {
1398
+ if (!this.meetsProtocolVersion(card.protocolVersion, this.rules.minProtocolVersion)) {
1399
+ logger3.info(`Agent ${card.name} rejected: protocol version too old`, {
1400
+ agent: card.protocolVersion,
1401
+ required: this.rules.minProtocolVersion
1402
+ });
1403
+ return {
1404
+ admitted: false,
1405
+ reason: `Protocol version ${card.protocolVersion} is below minimum ${this.rules.minProtocolVersion}`
1406
+ };
1407
+ }
1408
+ }
1409
+ if (this.rules.requiredSkills && this.rules.requiredSkills.length > 0) {
1410
+ const agentSkillIds = card.skills.map((s) => s.id.toLowerCase());
1411
+ const missingSkills = this.rules.requiredSkills.filter(
1412
+ (required) => !agentSkillIds.includes(required.toLowerCase())
1413
+ );
1414
+ if (missingSkills.length > 0) {
1415
+ logger3.info(`Agent ${card.name} rejected: missing required skills`, {
1416
+ missing: missingSkills
1417
+ });
1418
+ return {
1419
+ admitted: false,
1420
+ reason: `Missing required skills: ${missingSkills.join(", ")}`
1421
+ };
1422
+ }
1423
+ }
1424
+ if (this.rules.requiredTags && this.rules.requiredTags.length > 0) {
1425
+ const agentTags = card.skills.flatMap((s) => s.tags || []).map((t) => t.toLowerCase());
1426
+ const hasRequiredTag = this.rules.requiredTags.some(
1427
+ (required) => agentTags.includes(required.toLowerCase())
1428
+ );
1429
+ if (!hasRequiredTag) {
1430
+ logger3.info(`Agent ${card.name} rejected: no matching tags`, {
1431
+ required: this.rules.requiredTags
1432
+ });
1433
+ return {
1434
+ admitted: false,
1435
+ reason: `Must have at least one of these tags: ${this.rules.requiredTags.join(", ")}`
1436
+ };
1437
+ }
1438
+ }
1439
+ if (this.rules.customEvaluator) {
1440
+ const profile = profileFromCard(card, walletAddress);
1441
+ const customDecision = await this.rules.customEvaluator(profile);
1442
+ if (!customDecision.admitted) {
1443
+ logger3.info(`Agent ${card.name} rejected by custom evaluator`, {
1444
+ reason: customDecision.reason
1445
+ });
1446
+ return customDecision;
1447
+ }
1448
+ if (customDecision.role || customDecision.metadata) {
1449
+ logger3.debug(`Custom evaluator assigned role/metadata to ${card.name}`, {
1450
+ role: customDecision.role
1451
+ });
1452
+ }
1453
+ return customDecision;
1454
+ }
1455
+ logger3.info(`Agent ${card.name} admitted to world`);
1456
+ return {
1457
+ admitted: true,
1458
+ reason: "All admission criteria met"
1459
+ };
1460
+ }
1461
+ /**
1462
+ * Check if agent's protocol version meets minimum requirement.
1463
+ * Simple semver comparison (major.minor).
1464
+ */
1465
+ meetsProtocolVersion(agentVersion, minVersion) {
1466
+ const parse = (v) => {
1467
+ const parts = v.split(".");
1468
+ return {
1469
+ major: parseInt(parts[0] || "0", 10),
1470
+ minor: parseInt(parts[1] || "0", 10)
1471
+ };
1472
+ };
1473
+ const agent = parse(agentVersion);
1474
+ const min = parse(minVersion);
1475
+ if (agent.major > min.major) return true;
1476
+ if (agent.major < min.major) return false;
1477
+ return agent.minor >= min.minor;
1478
+ }
1479
+ };
1480
+
1481
+ // src/blockchain/BlockchainClient.ts
1482
+ var import_ethers = require("ethers");
1483
+ init_logger();
1484
+ var logger4 = createLogger("BlockchainClient");
1485
+ var AGENT_REGISTRY_ABI = [
1486
+ "function registerAgent(string agentUrl, string name) external",
1487
+ "function isAgentValid(address wallet) external view returns (bool)",
1488
+ "function getAgent(address wallet) external view returns (tuple(address walletAddress, string agentUrl, string name, uint256 registeredAt, bool isActive))",
1489
+ "function getWalletByUrl(string agentUrl) external view returns (address)",
1490
+ "event AgentRegistered(address indexed wallet, string agentUrl, string name)"
1491
+ ];
1492
+ var WORLD_MEMBERSHIP_ABI = [
1493
+ "function mintMembership(address agent) external payable",
1494
+ "function revokeMembership(address agent) external",
1495
+ "function hasMembership(address agent) external view returns (bool)",
1496
+ "function entryFee() external view returns (uint256)",
1497
+ "function totalMembers() external view returns (uint256)",
1498
+ "function withdrawFees() external",
1499
+ "event MembershipMinted(address indexed agent, uint256 indexed tokenId, uint256 feePaid)"
1500
+ ];
1501
+ var WORLD_TOKEN_ABI = [
1502
+ "function mint(address to, uint256 amount) external",
1503
+ "function burn(address from, uint256 amount) external",
1504
+ "function balanceOf(address account) external view returns (uint256)",
1505
+ "function transfer(address to, uint256 amount) external returns (bool)"
1506
+ ];
1507
+ var BlockchainClient = class {
1508
+ constructor(config) {
1509
+ this.config = config;
1510
+ this.provider = new import_ethers.ethers.JsonRpcProvider(config.rpcUrl);
1511
+ this.wallet = new import_ethers.ethers.Wallet(config.privateKey, this.provider);
1512
+ logger4.info("Blockchain client initialized", {
1513
+ network: config.rpcUrl,
1514
+ wallet: this.wallet.address
1515
+ });
1516
+ }
1517
+ provider;
1518
+ wallet;
1519
+ agentRegistry;
1520
+ membershipContract;
1521
+ worldToken;
1522
+ /**
1523
+ * Initialize contract connections
1524
+ */
1525
+ async init() {
1526
+ if (this.config.agentRegistryAddress) {
1527
+ this.agentRegistry = new import_ethers.ethers.Contract(
1528
+ this.config.agentRegistryAddress,
1529
+ AGENT_REGISTRY_ABI,
1530
+ this.wallet
1531
+ );
1532
+ logger4.info("Connected to AgentRegistry", {
1533
+ address: this.config.agentRegistryAddress
1534
+ });
1535
+ }
1536
+ if (this.config.membershipContractAddress) {
1537
+ this.membershipContract = new import_ethers.ethers.Contract(
1538
+ this.config.membershipContractAddress,
1539
+ WORLD_MEMBERSHIP_ABI,
1540
+ this.wallet
1541
+ );
1542
+ logger4.info("Connected to WorldMembership", {
1543
+ address: this.config.membershipContractAddress
1544
+ });
1545
+ }
1546
+ if (this.config.worldTokenAddress) {
1547
+ this.worldToken = new import_ethers.ethers.Contract(
1548
+ this.config.worldTokenAddress,
1549
+ WORLD_TOKEN_ABI,
1550
+ this.wallet
1551
+ );
1552
+ logger4.info("Connected to WorldToken", {
1553
+ address: this.config.worldTokenAddress
1554
+ });
1555
+ }
1556
+ logger4.info("Blockchain client ready");
1557
+ }
1558
+ /**
1559
+ * Validate agent on-chain
1560
+ * @param walletAddress Agent's wallet address
1561
+ * @returns True if agent is registered and valid
1562
+ */
1563
+ async validateAgent(walletAddress) {
1564
+ if (!this.agentRegistry) {
1565
+ logger4.warn("AgentRegistry not configured, skipping on-chain validation");
1566
+ return true;
1567
+ }
1568
+ try {
1569
+ const isValid = await this.agentRegistry.isAgentValid(walletAddress);
1570
+ logger4.debug("Agent validation result", {
1571
+ wallet: walletAddress,
1572
+ isValid
1573
+ });
1574
+ return isValid;
1575
+ } catch (error) {
1576
+ logger4.error("Failed to validate agent on-chain", {
1577
+ wallet: walletAddress,
1578
+ error: error.message
1579
+ });
1580
+ return false;
1581
+ }
1582
+ }
1583
+ /**
1584
+ * Mint membership NFT for an agent
1585
+ * @param agentWallet Agent's wallet address
1586
+ * @returns Transaction hash
1587
+ */
1588
+ async mintMembership(agentWallet) {
1589
+ if (!this.membershipContract) {
1590
+ throw new Error("WorldMembership contract not configured");
1591
+ }
1592
+ try {
1593
+ const entryFee = await this.membershipContract.entryFee();
1594
+ logger4.info("Minting membership NFT", {
1595
+ agent: agentWallet,
1596
+ entryFee: import_ethers.ethers.formatEther(entryFee)
1597
+ });
1598
+ const tx = await this.membershipContract.mintMembership(agentWallet, {
1599
+ value: entryFee
1600
+ });
1601
+ const receipt = await tx.wait();
1602
+ logger4.info("Membership NFT minted", {
1603
+ agent: agentWallet,
1604
+ txHash: receipt.hash,
1605
+ blockNumber: receipt.blockNumber
1606
+ });
1607
+ return receipt.hash;
1608
+ } catch (error) {
1609
+ logger4.error("Failed to mint membership NFT", {
1610
+ agent: agentWallet,
1611
+ error: error.message
1612
+ });
1613
+ throw error;
1614
+ }
1615
+ }
1616
+ /**
1617
+ * Check if agent has membership
1618
+ * @param agentWallet Agent's wallet address
1619
+ * @returns True if agent has membership
1620
+ */
1621
+ async hasMembership(agentWallet) {
1622
+ if (!this.membershipContract) {
1623
+ logger4.warn("WorldMembership not configured, skipping membership check");
1624
+ return true;
1625
+ }
1626
+ try {
1627
+ const hasMembership = await this.membershipContract.hasMembership(agentWallet);
1628
+ return hasMembership;
1629
+ } catch (error) {
1630
+ logger4.error("Failed to check membership", {
1631
+ agent: agentWallet,
1632
+ error: error.message
1633
+ });
1634
+ return false;
1635
+ }
1636
+ }
1637
+ /**
1638
+ * Revoke membership NFT
1639
+ * @param agentWallet Agent's wallet address
1640
+ * @returns Transaction hash
1641
+ */
1642
+ async revokeMembership(agentWallet) {
1643
+ if (!this.membershipContract) {
1644
+ throw new Error("WorldMembership contract not configured");
1645
+ }
1646
+ try {
1647
+ logger4.info("Revoking membership", { agent: agentWallet });
1648
+ const tx = await this.membershipContract.revokeMembership(agentWallet);
1649
+ const receipt = await tx.wait();
1650
+ logger4.info("Membership revoked", {
1651
+ agent: agentWallet,
1652
+ txHash: receipt.hash
1653
+ });
1654
+ return receipt.hash;
1655
+ } catch (error) {
1656
+ logger4.error("Failed to revoke membership", {
1657
+ agent: agentWallet,
1658
+ error: error.message
1659
+ });
1660
+ throw error;
1661
+ }
1662
+ }
1663
+ /**
1664
+ * Get total number of members
1665
+ */
1666
+ async getTotalMembers() {
1667
+ if (!this.membershipContract) {
1668
+ return 0;
1669
+ }
1670
+ try {
1671
+ const total = await this.membershipContract.totalMembers();
1672
+ return Number(total);
1673
+ } catch (error) {
1674
+ logger4.error("Failed to get total members", { error: error.message });
1675
+ return 0;
1676
+ }
1677
+ }
1678
+ /**
1679
+ * Withdraw collected entry fees (world owner only)
1680
+ */
1681
+ async withdrawFees() {
1682
+ if (!this.membershipContract) {
1683
+ throw new Error("WorldMembership contract not configured");
1684
+ }
1685
+ try {
1686
+ logger4.info("Withdrawing entry fees");
1687
+ const tx = await this.membershipContract.withdrawFees();
1688
+ const receipt = await tx.wait();
1689
+ logger4.info("Fees withdrawn", {
1690
+ txHash: receipt.hash,
1691
+ blockNumber: receipt.blockNumber
1692
+ });
1693
+ return receipt.hash;
1694
+ } catch (error) {
1695
+ logger4.error("Failed to withdraw fees", { error: error.message });
1696
+ throw error;
1697
+ }
1698
+ }
1699
+ /**
1700
+ * Get world owner's wallet address
1701
+ */
1702
+ getWalletAddress() {
1703
+ return this.wallet.address;
1704
+ }
1705
+ /**
1706
+ * Get entry fee in MON
1707
+ */
1708
+ async getEntryFee() {
1709
+ if (!this.membershipContract) {
1710
+ return "0";
1711
+ }
1712
+ try {
1713
+ const fee = await this.membershipContract.entryFee();
1714
+ return import_ethers.ethers.formatEther(fee);
1715
+ } catch (error) {
1716
+ logger4.error("Failed to get entry fee", { error: error.message });
1717
+ return "0";
1718
+ }
1719
+ }
1720
+ };
1721
+
1722
+ // src/engine/World.ts
1723
+ init_logger();
1724
+ var logger5 = createLogger("World");
1725
+ var World = class {
1726
+ constructor(config) {
1727
+ this.config = config;
1728
+ validateWorldConfig(config);
1729
+ this.state = {
1730
+ phase: "idle",
1731
+ tick: 0,
1732
+ round: 0,
1733
+ timestamp: Date.now(),
1734
+ metadata: {}
1735
+ };
1736
+ this.agents = /* @__PURE__ */ new Map();
1737
+ this.cardFetcher = new CardFetcher();
1738
+ this.evaluator = new AgentEvaluator(config.admission);
1739
+ logger5.info(`World "${config.name}" created`, {
1740
+ type: config.type || "generic",
1741
+ maxAgents: config.admission.maxAgents
1742
+ });
1743
+ }
1744
+ state;
1745
+ agents;
1746
+ persistence = null;
1747
+ blockchainClient = null;
1748
+ cardFetcher;
1749
+ evaluator;
1750
+ tickInterval = null;
1751
+ autoSaveInterval = null;
1752
+ /**
1753
+ * Initialize the world (connect persistence, restore state, discover agents)
1754
+ */
1755
+ async init() {
1756
+ logger5.info("Initializing world...");
1757
+ this.setState("initializing");
1758
+ try {
1759
+ if (this.config.persistence) {
1760
+ logger5.info("Connecting to persistence backend:", this.config.persistence.type);
1761
+ this.persistence = createPersistence(this.config.persistence);
1762
+ await this.persistence.connect();
1763
+ const savedState = await this.persistence.loadState();
1764
+ if (savedState) {
1765
+ this.state = savedState;
1766
+ logger5.info("Restored world state from persistence", {
1767
+ phase: savedState.phase,
1768
+ tick: savedState.tick
1769
+ });
1770
+ const savedAgents = await this.persistence.getAgents();
1771
+ for (const agent of savedAgents) {
1772
+ this.agents.set(agent.url, agent);
1773
+ }
1774
+ logger5.info(`Restored ${savedAgents.length} agents from persistence`);
1775
+ }
1776
+ }
1777
+ if (this.config.blockchain) {
1778
+ logger5.info("Initializing blockchain client...");
1779
+ this.blockchainClient = new BlockchainClient(this.config.blockchain);
1780
+ await this.blockchainClient.init();
1781
+ }
1782
+ if (this.config.agentUrls && this.config.agentUrls.length > 0) {
1783
+ logger5.info(`Discovering ${this.config.agentUrls.length} pre-configured agents...`);
1784
+ const results = await this.cardFetcher.fetchCards(this.config.agentUrls);
1785
+ for (let i = 0; i < results.length; i++) {
1786
+ const result = results[i];
1787
+ if (result.success && result.card) {
1788
+ try {
1789
+ await this.admitAgent(result.card);
1790
+ } catch (error) {
1791
+ logger5.warn(`Failed to admit pre-configured agent:`, error.message);
1792
+ }
1793
+ }
1794
+ }
1795
+ }
1796
+ if (this.persistence) {
1797
+ this.startAutoSave();
1798
+ }
1799
+ this.setState("ready");
1800
+ logger5.info("World initialized successfully", {
1801
+ agents: this.agents.size,
1802
+ persistence: this.config.persistence?.type || "none"
1803
+ });
1804
+ } catch (error) {
1805
+ logger5.error("Failed to initialize world:", error);
1806
+ this.setState("failed");
1807
+ throw error;
1808
+ }
1809
+ }
1810
+ /**
1811
+ * Start the world simulation
1812
+ */
1813
+ async start() {
1814
+ if (this.state.phase === "running") {
1815
+ logger5.warn("World is already running");
1816
+ return;
1817
+ }
1818
+ logger5.info("Starting world simulation...");
1819
+ this.setState("running");
1820
+ await this.logEvent({
1821
+ id: (0, import_uuid.v4)(),
1822
+ type: "world_started",
1823
+ timestamp: Date.now()
1824
+ });
1825
+ if (this.config.simulation?.tickIntervalMs) {
1826
+ this.startTicking();
1827
+ }
1828
+ }
1829
+ /**
1830
+ * Stop the world simulation
1831
+ */
1832
+ async stop() {
1833
+ logger5.info("Stopping world...");
1834
+ this.setState("stopped");
1835
+ if (this.tickInterval) {
1836
+ clearInterval(this.tickInterval);
1837
+ this.tickInterval = null;
1838
+ }
1839
+ if (this.autoSaveInterval) {
1840
+ clearInterval(this.autoSaveInterval);
1841
+ this.autoSaveInterval = null;
1842
+ }
1843
+ if (this.persistence) {
1844
+ await this.persistence.saveState(this.state);
1845
+ }
1846
+ await this.logEvent({
1847
+ id: (0, import_uuid.v4)(),
1848
+ type: "world_stopped",
1849
+ timestamp: Date.now()
1850
+ });
1851
+ logger5.info("World stopped");
1852
+ }
1853
+ /**
1854
+ * Admit an agent to the world
1855
+ */
1856
+ async admitAgent(card, walletAddress) {
1857
+ const decision = await this.evaluator.evaluate(card, this.agents.size, walletAddress);
1858
+ if (!decision.admitted) {
1859
+ throw new Error(`Agent admission denied: ${decision.reason}`);
1860
+ }
1861
+ if (this.blockchainClient && this.config.blockchain?.enforceOnChainValidation && walletAddress) {
1862
+ const isValid = await this.blockchainClient.validateAgent(walletAddress);
1863
+ if (!isValid) {
1864
+ throw new Error("Agent not registered in on-chain AgentRegistry");
1865
+ }
1866
+ logger5.info(`Agent validated on-chain: ${card.name}`);
1867
+ }
1868
+ if (this.blockchainClient && this.config.blockchain?.requireMembership && walletAddress) {
1869
+ const hasMembership = await this.blockchainClient.hasMembership(walletAddress);
1870
+ if (!hasMembership) {
1871
+ logger5.info(`Minting membership NFT for agent: ${card.name}`);
1872
+ await this.blockchainClient.mintMembership(walletAddress);
1873
+ } else {
1874
+ logger5.info(`Agent already has membership: ${card.name}`);
1875
+ }
1876
+ }
1877
+ const profile = {
1878
+ url: card.url,
1879
+ name: card.name,
1880
+ protocolVersion: card.protocolVersion,
1881
+ skills: card.skills,
1882
+ capabilities: {
1883
+ streaming: card.capabilities.streaming ?? false,
1884
+ pushNotifications: card.capabilities.pushNotifications ?? false,
1885
+ stateTransitionHistory: card.capabilities.stateTransitionHistory
1886
+ },
1887
+ joinedAt: Date.now(),
1888
+ role: decision.role,
1889
+ metadata: decision.metadata,
1890
+ walletAddress
1891
+ };
1892
+ this.agents.set(profile.url, profile);
1893
+ if (this.persistence) {
1894
+ await this.persistence.saveAgent(profile);
1895
+ }
1896
+ await this.logEvent({
1897
+ id: (0, import_uuid.v4)(),
1898
+ type: "agent_joined",
1899
+ timestamp: Date.now(),
1900
+ agentUrl: profile.url,
1901
+ data: { name: profile.name, role: profile.role }
1902
+ });
1903
+ logger5.info(`Agent admitted: ${profile.name}`, {
1904
+ role: profile.role,
1905
+ totalAgents: this.agents.size
1906
+ });
1907
+ }
1908
+ /**
1909
+ * Remove an agent from the world
1910
+ */
1911
+ async removeAgent(agentUrl) {
1912
+ const agent = this.agents.get(agentUrl);
1913
+ if (!agent) {
1914
+ throw new Error(`Agent not found: ${agentUrl}`);
1915
+ }
1916
+ this.agents.delete(agentUrl);
1917
+ if (this.persistence) {
1918
+ await this.persistence.removeAgent(agentUrl);
1919
+ }
1920
+ await this.logEvent({
1921
+ id: (0, import_uuid.v4)(),
1922
+ type: "agent_left",
1923
+ timestamp: Date.now(),
1924
+ agentUrl,
1925
+ data: { name: agent.name }
1926
+ });
1927
+ logger5.info(`Agent removed: ${agent.name}`, {
1928
+ totalAgents: this.agents.size
1929
+ });
1930
+ }
1931
+ /**
1932
+ * Get all agents in the world
1933
+ */
1934
+ getAgents() {
1935
+ return Array.from(this.agents.values());
1936
+ }
1937
+ /**
1938
+ * Get current world state
1939
+ */
1940
+ getState() {
1941
+ return { ...this.state };
1942
+ }
1943
+ /**
1944
+ * Log an event
1945
+ */
1946
+ async logEvent(event) {
1947
+ if (this.persistence) {
1948
+ await this.persistence.saveEvent(event);
1949
+ }
1950
+ }
1951
+ /**
1952
+ * Set world phase
1953
+ */
1954
+ setState(phase) {
1955
+ this.state.phase = phase;
1956
+ this.state.timestamp = Date.now();
1957
+ }
1958
+ /**
1959
+ * Start auto-save interval
1960
+ */
1961
+ startAutoSave() {
1962
+ const interval = this.config.persistence?.autoSaveIntervalMs || 1e4;
1963
+ this.autoSaveInterval = setInterval(async () => {
1964
+ if (this.persistence) {
1965
+ await this.persistence.saveState(this.state);
1966
+ logger5.debug("Auto-saved world state");
1967
+ }
1968
+ }, interval);
1969
+ logger5.info(`Auto-save enabled (interval: ${interval}ms)`);
1970
+ }
1971
+ /**
1972
+ * Start simulation ticking
1973
+ */
1974
+ startTicking() {
1975
+ const interval = this.config.simulation.tickIntervalMs;
1976
+ this.tickInterval = setInterval(async () => {
1977
+ this.state.tick++;
1978
+ await this.logEvent({
1979
+ id: (0, import_uuid.v4)(),
1980
+ type: "tick",
1981
+ timestamp: Date.now(),
1982
+ data: { tick: this.state.tick }
1983
+ });
1984
+ logger5.debug(`Tick ${this.state.tick}`);
1985
+ if (this.config.simulation?.maxTicks && this.state.tick >= this.config.simulation.maxTicks) {
1986
+ logger5.info("Max ticks reached, stopping world");
1987
+ await this.stop();
1988
+ }
1989
+ }, interval);
1990
+ logger5.info(`Simulation ticking enabled (interval: ${interval}ms)`);
1991
+ }
1992
+ };
1993
+
1994
+ // src/index.ts
1995
+ init_CardFetcher();
1996
+
1997
+ // src/server/app.ts
1998
+ var import_express = __toESM(require("express"), 1);
1999
+ init_logger();
2000
+ var logger6 = createLogger("WorldServer");
2001
+ function createWorldApp(world) {
2002
+ const app = (0, import_express.default)();
2003
+ app.use(import_express.default.json());
2004
+ app.use(import_express.default.urlencoded({ extended: true }));
2005
+ app.use((req, res, next) => {
2006
+ logger6.debug(`${req.method} ${req.path}`, {
2007
+ query: req.query,
2008
+ ip: req.ip
2009
+ });
2010
+ next();
2011
+ });
2012
+ app.get("/", (req, res) => {
2013
+ res.json({
2014
+ name: world.config.name,
2015
+ description: world.config.description,
2016
+ type: world.config.type || "generic",
2017
+ state: world.getState(),
2018
+ agentCount: world.getAgents().length,
2019
+ maxAgents: world.config.admission.maxAgents || null,
2020
+ admission: {
2021
+ requiredSkills: world.config.admission.requiredSkills || [],
2022
+ requiredTags: world.config.admission.requiredTags || [],
2023
+ minProtocolVersion: world.config.admission.minProtocolVersion || null
2024
+ }
2025
+ });
2026
+ });
2027
+ app.post("/world/join", async (req, res) => {
2028
+ try {
2029
+ const { agentUrl, walletAddress } = req.body;
2030
+ if (!agentUrl) {
2031
+ return res.status(400).json({
2032
+ success: false,
2033
+ error: "agentUrl is required"
2034
+ });
2035
+ }
2036
+ logger6.info(`Agent join request from: ${agentUrl}`, {
2037
+ wallet: walletAddress || "none"
2038
+ });
2039
+ const cardFetcher = new (await Promise.resolve().then(() => (init_CardFetcher(), CardFetcher_exports))).CardFetcher();
2040
+ const result = await cardFetcher.fetchCard(agentUrl);
2041
+ if (!result.success || !result.card) {
2042
+ return res.status(400).json({
2043
+ success: false,
2044
+ error: `Failed to fetch agent card: ${result.error}`
2045
+ });
2046
+ }
2047
+ await world.admitAgent(result.card, walletAddress);
2048
+ res.json({
2049
+ success: true,
2050
+ message: "Agent admitted to world",
2051
+ world: {
2052
+ name: world.config.name,
2053
+ agentCount: world.getAgents().length
2054
+ }
2055
+ });
2056
+ } catch (error) {
2057
+ logger6.error("Failed to process join request:", error);
2058
+ res.status(400).json({
2059
+ success: false,
2060
+ error: error.message || "Failed to join world"
2061
+ });
2062
+ }
2063
+ });
2064
+ app.get("/world/agents", (req, res) => {
2065
+ const agents = world.getAgents().map((agent) => ({
2066
+ url: agent.url,
2067
+ name: agent.name,
2068
+ protocolVersion: agent.protocolVersion,
2069
+ skills: agent.skills.map((s) => s.id),
2070
+ joinedAt: agent.joinedAt,
2071
+ role: agent.role
2072
+ }));
2073
+ res.json({
2074
+ agents,
2075
+ count: agents.length
2076
+ });
2077
+ });
2078
+ app.get("/world/state", (req, res) => {
2079
+ res.json(world.getState());
2080
+ });
2081
+ app.post("/world/start", async (req, res) => {
2082
+ try {
2083
+ await world.start();
2084
+ res.json({
2085
+ success: true,
2086
+ message: "World simulation started",
2087
+ state: world.getState()
2088
+ });
2089
+ } catch (error) {
2090
+ res.status(400).json({
2091
+ success: false,
2092
+ error: error.message
2093
+ });
2094
+ }
2095
+ });
2096
+ app.post("/world/stop", async (req, res) => {
2097
+ try {
2098
+ await world.stop();
2099
+ res.json({
2100
+ success: true,
2101
+ message: "World simulation stopped",
2102
+ state: world.getState()
2103
+ });
2104
+ } catch (error) {
2105
+ res.status(400).json({
2106
+ success: false,
2107
+ error: error.message
2108
+ });
2109
+ }
2110
+ });
2111
+ app.delete("/world/agents/:agentUrl", async (req, res) => {
2112
+ try {
2113
+ const agentUrlParam = req.params.agentUrl;
2114
+ const agentUrl = typeof agentUrlParam === "string" ? decodeURIComponent(agentUrlParam) : decodeURIComponent(agentUrlParam[0]);
2115
+ await world.removeAgent(agentUrl);
2116
+ res.json({
2117
+ success: true,
2118
+ message: "Agent removed from world"
2119
+ });
2120
+ } catch (error) {
2121
+ res.status(400).json({
2122
+ success: false,
2123
+ error: error.message
2124
+ });
2125
+ }
2126
+ });
2127
+ app.use((req, res) => {
2128
+ res.status(404).json({
2129
+ error: "Not found",
2130
+ path: req.path
2131
+ });
2132
+ });
2133
+ app.use((err, req, res, next) => {
2134
+ logger6.error("Server error:", err);
2135
+ res.status(500).json({
2136
+ error: "Internal server error",
2137
+ message: err.message
2138
+ });
2139
+ });
2140
+ return app;
2141
+ }
2142
+ async function startWorldServer(world) {
2143
+ const app = createWorldApp(world);
2144
+ const server = app.listen(world.config.server.port, world.config.server.host, () => {
2145
+ const { host, port } = world.config.server;
2146
+ logger6.info(`World "${world.config.name}" server started`);
2147
+ logger6.info(` http://${host}:${port}`);
2148
+ logger6.info("");
2149
+ logger6.info("Endpoints:");
2150
+ logger6.info(` GET / - World info`);
2151
+ logger6.info(` POST /world/join - Agent join request`);
2152
+ logger6.info(` GET /world/agents - List agents`);
2153
+ logger6.info(` GET /world/state - World state`);
2154
+ logger6.info(` POST /world/start - Start simulation`);
2155
+ logger6.info(` POST /world/stop - Stop simulation`);
2156
+ logger6.info(` DELETE /world/agents/:url - Remove agent`);
2157
+ });
2158
+ process.on("SIGTERM", async () => {
2159
+ logger6.info("SIGTERM received, shutting down gracefully...");
2160
+ server.close(async () => {
2161
+ await world.stop();
2162
+ process.exit(0);
2163
+ });
2164
+ });
2165
+ process.on("SIGINT", async () => {
2166
+ logger6.info("SIGINT received, shutting down gracefully...");
2167
+ server.close(async () => {
2168
+ await world.stop();
2169
+ process.exit(0);
2170
+ });
2171
+ });
2172
+ }
2173
+ // Annotate the CommonJS export names for ESM import in node:
2174
+ 0 && (module.exports = {
2175
+ AdmissionRulesSchema,
2176
+ AgentEvaluator,
2177
+ BlockchainClient,
2178
+ BlockchainConfigSchema,
2179
+ CardFetcher,
2180
+ InMemoryAdapter,
2181
+ PersistenceConfigSchema,
2182
+ TokenConfigSchema,
2183
+ World,
2184
+ WorldConfigSchema,
2185
+ createLogger,
2186
+ createPersistence,
2187
+ createWorldApp,
2188
+ isValidWorldConfig,
2189
+ logger,
2190
+ normalizeAgentUrl,
2191
+ profileFromCard,
2192
+ startWorldServer,
2193
+ validateWorldConfig
2194
+ });
2195
+ //# sourceMappingURL=index.cjs.map