{"_id":"@ai-rpg-engine/ledger-adapter","_rev":"14-426f08aa08d86d5465f32c58fd42ec7b","name":"@ai-rpg-engine/ledger-adapter","dist-tags":{"latest":"3.12.0"},"versions":{"0.0.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"0.0.0","author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@0.0.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://github.com/mcp-tool-shop-org/ai-rpg-engine#readme","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"71bbc72e4eeda4b1fe15c76881ef48438494279b","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-0.0.0.tgz","fileCount":2,"integrity":"sha512-/u8T3cloxb1MZ2O71V4WY0h0fGIVGb7pxOQ1L2RpSSpWjqs8z42b38nrqpw4n1NJzmbmoDBHMJ7tajEohpk6tg==","signatures":[{"sig":"MEUCIA34Nwn2F745QW2IkDE9/6R51KxKunUOaCOB/Yua9QGSAiEAuwutYJWNfPAJn/aLOjCvP0zq3UiFtyk4mu99fYQzjFI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":753},"_npmUser":{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"10.9.8","description":"Placeholder reserving the package name for Trusted Publishing. Real releases publish from mcp-tool-shop-org/ai-rpg-engine via OIDC.","directories":{},"_nodeVersion":"22.22.3","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_0.0.0_1784823492208_0.02693952967522817","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.2.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.2.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"0a72c241bd60a34e8c11ef0b6f3fa25830dfeb55","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.2.0.tgz","fileCount":67,"integrity":"sha512-0ht3xL/NTLd87BVkvP3ISEqTUyOB44en2t/dw4cFzMGObzOKGdqILIzyqaBvkPtn/In8nhJW+/KLJZ+DRqCc9g==","signatures":[{"sig":"MEQCIHMe07CPY4iNpwJTNB+kCOpV7tUbE13uDR5ZfoPHSqd8AiBtKOATl9mZwKtsUZFJzoQovuv9/GJ3tM+1lAtRk1eJuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":208815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"09667914ed7f13c89cdba59d580467c144cc02b1","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"12.0.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/starter-pirate":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.2.0_1784823748153_0.42355771047337165","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.2.1","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.2.1","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"dba20b3d82165e1ecf4ccdbc322f043c2a6ef3a1","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.2.1.tgz","fileCount":67,"integrity":"sha512-NBC48BAaPmD8kP9B7W3E6zQj5YQA8SP2LQj5aump5ZRQseEJrfPE+zC4sUzl93Yh7wH5WmLc2bZSzQ21z8xxZA==","signatures":[{"sig":"MEUCIQCeldt16/fEbefOsPCi5sK5BG0lWSu/RmV6K10Y3qXy/wIgFTmiigjiimo3bN7gZWA8yVUDqFkWgLiC93eFQGT0MHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":209522},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e6de12a8f6507873fae5950ac5c6048a48c7026a","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"12.0.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/starter-pirate":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.2.1_1784824719394_0.5414807988566852","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.3.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.3.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"3f1754db33e4f0939062deae1ab5ff95dc62c4e8","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.3.0.tgz","fileCount":75,"integrity":"sha512-eUuGwlF6romoHkfk1DgQnqsNZbyrcf/leHth4qItLZL0+MX+8fLpdnQ2BYMdmTrjjWJ8SwJYxoQySiJEfJEZ0A==","signatures":[{"sig":"MEQCICVocrqJs7X09mKH/MLgqSbunpbg4BxPKxfNQ6cwGX6iAiBJBVbikFTc2YRdV1iVCz0TMgPhFe9yu+b8PNLO6ccDMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":307275},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d76bcc55fb32dbd441483fcd882919202a9b274c","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"12.0.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.3.0_1784835829209_0.3292825555175005","host":"s3://npm-registry-packages-npm-production"}},"3.3.1":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.3.1","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.3.1","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"bed7ad35b5a6d4c0e46eedb1c0f1c122cde974e4","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.3.1.tgz","fileCount":75,"integrity":"sha512-YZbBsw4jO6z168YJ7jcoa7EvGIU+FJCY89eDGaOt49Yo0R6G2iewLd2MCgI7Y8X3qLs/HgN0kiKWEpR+ATeXYg==","signatures":[{"sig":"MEQCIA+0d1DU2dO9uRV5F8P2vvyu7m1ZPuZMn20s3CcNwrhhAiBFoK2xuYhuiUMGV22Im8JbD3vAti1CFr2kFGNbs2noAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":307275},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c4633a54fd82db04d571918b3287524e01dadfa4","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"12.0.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.3.1_1785014285014_0.15325161014812827","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.5.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.5.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"3b39643bc81faaa0088f0973b9dd7e1f82c5e264","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.5.0.tgz","fileCount":75,"integrity":"sha512-+FSjEgs9oyuVukFQ0B2gqT0EFhvt55tUZ8hepXPWi8yuM3sdNEOdA8DfJFZG9tdBNfvvisv2TdBIyb16R5B/gg==","signatures":[{"sig":"MEUCIQDrnzeW468YhZ2n/zaliNC/gAT+wzQOaoNoLS8ujK7iIAIgLJl0pVVyhm2uIA4hIVOdXKqvFe/B7mNZ109Q9HGaYn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":324344},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"177ec3ed079b3cf271d9e459d3062b3cfe11e735","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"12.0.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.5.0_1785073813869_0.5260167541555618","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.6.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.6.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"065d47ba3d65e5101aff0fd6449153a160912790","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.6.0.tgz","fileCount":75,"integrity":"sha512-Lv9CXsGa9tGHQz+K0Yim/U/kBLPlcCoxcyBQBeY58I35M91jO346LMW8fr0yhIIZZ1Sl9V1XpXlOLf5tgAjBSw==","signatures":[{"sig":"MEYCIQDdQp2tiB3OpQYp5NMhslmN1tKkKS32R1iK4jN3lJsQsAIhALv+qKDJ7/3whpLSL/Y270jMW7mKfGAL9W6HAOSnCTXk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":341371},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e62645b2a8d67140746351471837b96030246d20","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"12.0.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.6.0_1785254302497_0.6277530010350834","host":"s3://npm-registry-packages-npm-production"}},"3.7.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.7.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.7.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"5be7ccbc424a764359d49967fd630933d8ecac35","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.7.0.tgz","fileCount":75,"integrity":"sha512-Megl7WWvkBagPwB3hMAhH+llOwrzFvQd+sz5QfWxPsK9RakWJKDIZA7Z3N4ZQy9SYX9JQdd5p3+ZhtYhxPqkIw==","signatures":[{"sig":"MEYCIQDwv7WN62Y6eKcpc2wkzUWaYfbcAFcXmg744P6Ey2CQLQIhALaXerwvmfnav6na3bwV8LFoDjcBSkq07/4JRsOI4dD7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":341371},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c51c19fd60ef81f2cc0e5c6acfdb21cae8aeb6cd","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"12.0.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.7.0_1785264752877_0.477356739161235","host":"s3://npm-registry-packages-npm-production"}},"3.8.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.8.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.8.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"3bdd4dd10bf3dbdde62c790764d76f73cd5fdb5a","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.8.0.tgz","fileCount":75,"integrity":"sha512-r6+dq7zX3Exgkc68XmxiDSkL6Pov4EorbZ5cv+hJa52m7pX55XrkNiwfY4InWseUYOyXwlBhq5M1zIBYT6sULg==","signatures":[{"sig":"MEUCIQC8ao5eLvzLD6o1OaZ7JvDsqDD8vskdJwgTqWcSirpfSAIgcIE605j7dHDlqUpjrWY9h91sUjIptUwN3ys9Xq20vCg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":341371},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c00cd16ffcd88ec615eb788f6ce82dec3cd247f7","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"12.0.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.8.0_1785280339006_0.20409051804787448","host":"s3://npm-registry-packages-npm-production"}},"3.8.1":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.8.1","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.8.1","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"4ecd2e306a97d50025df00a71f0191c8c2de5244","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.8.1.tgz","fileCount":79,"integrity":"sha512-iENCSNuihvm87sfgobah4pEIIkNqdudKr+89QuaKDz5rBxWPSxM42BdDEGveBkhTF29xOs2WN6YADD5BSGl1ag==","signatures":[{"sig":"MEUCIDx1kgMWv2pnjBGZgwtkaHIM6AcdIYRFy4fOwuyyRO76AiEAqjVauikfUb5oMNCeL2KVk9HgZlgoTJEwrffZnN2ezrA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":508384},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"faff5af53667073a312674d95dca8207b13a04b4","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"11.19.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.8.1_1788155772839_0.23655770979732638","host":"s3://npm-registry-packages-npm-production"}},"3.9.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.9.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.9.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"88a5e41aab768d1dd7348f163c61a6f07fb8ff1c","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.9.0.tgz","fileCount":79,"integrity":"sha512-Uhr//Xra05ECwYhKan/C3ci0HZT0BK3vt6dPW6IEx0VmJBs13tgGDSQCm5E/oDePY+NSkWLJn/6aEgb1R5EoWw==","signatures":[{"sig":"MEUCIQCCRwwPcGLJh1dV5FpX4qb7MuiJBGcIONDyGOBRQNJUeAIgCaW8mO1YzIb5mYzp1Xkgawbz2KLNVxMA4/8Kbtk7UwA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":508384},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"281a7e5a42951dd2a76b39cb713f13b8768d3098","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"11.19.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.9.0_1788171429228_0.8308233149700692","host":"s3://npm-registry-packages-npm-production"}},"3.10.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.10.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.10.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"65e1e0b5c98332315dccda763887e47dc30fa423","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.10.0.tgz","fileCount":79,"integrity":"sha512-hdyA9FwSToQM0f9ldqZW9B5RQBUf4M8zdy+UXhW7tXlT1oVumuFxKNTLTb+2ZtovfM6yrrgOC49+odt1+nxRTw==","signatures":[{"sig":"MEQCIAKclKy+PxoKH2sLhWuXUWAOey0AtVtuBk/X3IvoU6u5AiA2KqG1sThSs9X+dcM7Yofb3CVWl6VmkQV5Q0AWo9UdGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":508385},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b84e470eccb8320f5fdb46f1ee8d8d9d42ac9b20","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"11.19.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.10.0_1788204657353_0.49315395311456345","host":"s3://npm-registry-packages-npm-production"}},"3.11.0":{"name":"@ai-rpg-engine/ledger-adapter","version":"3.11.0","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"author":{"name":"mcp-tool-shop"},"license":"MIT","_id":"@ai-rpg-engine/ledger-adapter@3.11.0","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"a6cd80b7c706a77258cd368e07b0edd1682e555a","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.11.0.tgz","fileCount":79,"integrity":"sha512-KNK0EmNnyAKxJTANC96TapM24cpEkGYdyvJbCehfa2iF7lrjoAVmghEVnQAEcmL3l/ZY/I6JH0XVDI6UAMmBPQ==","signatures":[{"sig":"MEQCIGNITPb6F9ujlGMUnNXENBVSc2SfXuSxFbmVJU73I18PAiB/5TyvRdFykofEXCtPYTaRANhnLRzrkZf6Eu9FyjQSpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":508385},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"acbc2d1d3453d7af4bec321c3f6f4fba7f383aed","scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"11.19.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ledger-adapter_3.11.0_1788246492755_0.6821989675897928","host":"s3://npm-registry-packages-npm-production"}},"3.12.0":{"_id":"@ai-rpg-engine/ledger-adapter@3.12.0","bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"dist":{"shasum":"6c7876f5415d85cd7e68d7d3205feeb3b108f2b9","tarball":"https://registry.npmjs.org/@ai-rpg-engine/ledger-adapter/-/ledger-adapter-3.12.0.tgz","fileCount":79,"integrity":"sha512-kYINEibMD48nAa82UnpkSrd0Wx66v5NytXtysaWopiVaRT9Ey3WN8Z3hcFl2c6b2JFFNzrEhXHFvIrcIoRM9Kg==","signatures":[{"sig":"MEUCIQCTNy7GQq02haRJoobXjHc9iWpQWB/s92jkRaQ5h+273wIgcRbjoqEwmvy/OoH4z5+B7lH7o+5RwLH2YIG+wKmqIp0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAdvANXqPy88XrNkfUxOoJ5FbOh21VF0U8MSb0SKFpMPAiBBNpj2miRAyaqJ93CurPFUh3LQ1OdFnwyFz45Q7RxyLg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-rpg-engine%2fledger-adapter@3.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":508385},"main":"./dist/index.js","name":"@ai-rpg-engine/ledger-adapter","type":"module","types":"./dist/index.d.ts","author":{"name":"mcp-tool-shop"},"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bf74871b46a02b5fb1bb333cec68d305c5fe7d7c","license":"MIT","scripts":{"test":"vitest run","build":"tsc"},"version":"3.12.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1d6abbd7-5e05-4f11-8ecd-0be1a1c1adf5"}},"homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"_npmVersion":"11.19.1","description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","directories":{},"maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"xrpl":"^5.0.0","@ai-rpg-engine/core":"*","@ai-rpg-engine/modules":"*","@ai-rpg-engine/equipment":"*","@ai-rpg-engine/starter-pirate":"*","@ai-rpg-engine/starter-merchant":"*","@ai-rpg-engine/starter-gladiator":"*"},"peerDependencies":{"xrpl":"^5.0.0"},"peerDependenciesMeta":{"xrpl":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ledger-adapter_3.12.0_1789973340859_0.9730545904989485"}}},"time":{"created":"2026-07-23T16:18:12.020Z","modified":"2026-09-21T06:49:01.299Z","0.0.0":"2026-07-23T16:18:12.332Z","3.2.0":"2026-07-23T16:22:28.315Z","3.2.1":"2026-07-23T16:38:39.540Z","3.3.0":"2026-07-23T19:43:49.390Z","3.3.1":"2026-07-25T21:18:05.150Z","3.5.0":"2026-07-26T13:50:14.043Z","3.6.0":"2026-07-28T15:58:22.648Z","3.7.0":"2026-07-28T18:52:33.025Z","3.8.0":"2026-07-28T23:12:19.157Z","3.8.1":"2026-08-31T05:56:12.993Z","3.9.0":"2026-08-31T10:17:09.348Z","3.10.0":"2026-08-31T19:30:57.562Z","3.11.0":"2026-09-01T07:08:12.940Z","3.12.0":"2026-09-21T06:49:00.935Z"},"bugs":{"url":"https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"},"author":{"name":"mcp-tool-shop"},"license":"MIT","homepage":"https://mcp-tool-shop-org.github.io/ai-rpg-engine/","keywords":["rpg","game-engine","xrpl","ledger","blockchain","escrow","opt-in","testnet"],"repository":{"url":"git+https://github.com/mcp-tool-shop-org/ai-rpg-engine.git","type":"git","directory":"packages/ledger-adapter"},"description":"Opt-in XRPL testnet settlement for the player-owned tradeable layer (coin/inventory/trade) — entirely outside the deterministic replayable core","maintainers":[{"name":"mikefrilot","email":"mikeyfrilot@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/ai-rpg-engine/readme.png\" width=\"400\" alt=\"AI RPG Engine\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/mcp-tool-shop-org/ai-rpg-engine/actions/workflows/ci.yml\"><img src=\"https://github.com/mcp-tool-shop-org/ai-rpg-engine/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"https://github.com/mcp-tool-shop-org/ai-rpg-engine/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\"></a>\n  <a href=\"https://mcp-tool-shop-org.github.io/ai-rpg-engine/\"><img src=\"https://img.shields.io/badge/Landing_Page-live-blue\" alt=\"Landing Page\"></a>\n</p>\n\n# @ai-rpg-engine/ledger-adapter\n\n**Opt-in XRPL testnet settlement for the player-owned tradeable layer** — binds a\ngame's `coin` balance, tradeable inventory, and `trade-core`'s `buy`/`sell` verbs\nto the XRP Ledger **at checkpoints**, entirely **outside** the deterministic\nreplayable engine core.\n\n> **Testnet only, opt-in, and proven live.** No mainnet path exists in code — a\n> structural guard rejects non-testnet hosts at construction. Assets are\n> game-scoped receipts on a test network, not securities. An absent adapter is\n> exactly the offline engine that ships today.\n\n## Install\n\n```bash\nnpm install @ai-rpg-engine/ledger-adapter\n# xrpl.js is an OPTIONAL peer — needed only for the live testnet transport:\nnpm install xrpl\n```\n\n## Quick start\n\n```ts\nimport {\n  createLedgerAdapter,\n  createInitialState,\n  TestnetTransport,\n  enableFromWorld,\n  settleCheckpoint,\n  settleAllFromWorld,\n  reconcileFromWorld,\n  bindSidecar,\n  resumeAdapter,\n  DEFAULT_LEDGER_CONFIG,\n} from '@ai-rpg-engine/ledger-adapter';\n\nconst config    = { ...DEFAULT_LEDGER_CONFIG, mode: 'ledger' };\nconst state     = createInitialState(config);\nconst transport = new TestnetTransport();\nawait transport.connect();\n\n// Bind the gitignored sidecar so save/reload can sign without re-plumbing seeds.\n// Default putSeed is a no-op; without getSeed a restarted process cannot settle.\n// Pass issuerMode so a persistent game aliases the issuer seed for run 2.\nconst sidecar = bindSidecar(gameDir, { issuerMode: config.issuerMode }); // <gameDir>/.secrets/ledger-secrets.json\nconst adapter = createLedgerAdapter(transport, config, {\n  gameId: 'my-game',\n  runId: 'run-1',\n  ...sidecar,\n});\n\n// At run start (a checkpoint): mint the player's starting coin + inventory.\nawait enableFromWorld(world, playerId, adapter, state);\n\n// ...the player trades via the engine's own buy/sell verbs...\n\n// At the next checkpoint (town / market / save): settle the net delta on testnet.\n// Verb/primitive are inferred from recent eventLog (buy/sell/consign/default)\n// and district tags when options are omitted; pass SettleOptions to override.\nawait settleCheckpoint(world, playerId, adapter, state, 1, 'Market Row');\n\n// Same checkpoint, including unique-gear NFTs (mint / resume pending / relic growth).\nawait settleAllFromWorld(world, playerId, adapter, state, 1, 'Market Row', {\n  transport,\n  catalog, // the pack's ItemCatalog\n});\n\n// Fetch account_lines / account_tx / account_nfts and run the external verifier.\nawait reconcileFromWorld(world, playerId, transport, state, {\n  runId: 'run-1',\n  seed: world.meta.seed,\n});\n```\n\n`EnableResult` / `SettlementResult` / `NFTSettlementResult` stamp `network` from\nthe transport (`testnet` | `devnet` | `dry-run`) and name it in the message\n(`Settled on XRPL Testnet. Receipt: https://testnet.xrpl.org/transactions/…`).\nTestnet/devnet also stamp `SettlementResult.explorerUrls` and\n`EnableResult.playerExplorerUrl` (omitted on dry-run; never mainnet). After\n`connect()`, the live transport asks `server_info` and refuses unless\n`network_id` is testnet (1) or devnet (2).\n\n### Save / reload\n\nWallet seeds never go in the save file. After `deserializeState`, a **new**\nadapter instance needs the sidecar:\n\n```ts\nconst restored = deserializeState(save.ledger);\nconst adapter  = createLedgerAdapter(transport, config, {\n  gameId: 'my-game',\n  runId: 'run-1',\n  ...bindSidecar(gameDir, { issuerMode: config.issuerMode }),\n});\nawait resumeAdapter(adapter, restored, snapshot, {\n  transport,\n  snapshot: equipmentSnapshot, // finishes any status:'pending' NFT transfer\n});\n```\n\n`adapter.getSeed(address)` is public — checkpoint NFT wrappers hydrate issuer\nand player seeds from this cache instead of taking faucet seeds per call.\n\nFor `issuerMode: 'persistent'`, `bindSidecar(gameDir, { issuerMode: 'persistent' })`\nstores the issuer seed under an `issuer` alias on first put and returns\n`persistentIssuerSeed`. Two `createInitialState` runs that share only that bind\nreuse one issuer — no host Map. Per-run (the default) does not write the alias\nand ignores a leftover seed, so throwaway custody stays throwaway.\n\nFor dry-run tests, swap `TestnetTransport` for `DryRunTransport` — no network, no\n`xrpl` dependency.\n\n## The determinism firewall (the whole point)\n\nThis package is deliberately isolated so that enabling it **cannot** change how a\ngame plays or replays:\n\n- Nothing in `@ai-rpg-engine/core` or `@ai-rpg-engine/modules` imports it.\n- A run is **byte-identical** whether or not the adapter is attached (seed-0\n  identity preserved) — proven against the real `starter-pirate` `createGame()`\n  merchant loop.\n- The adapter **reads** engine state at coordinator-invoked checkpoints; the\n  engine **never reads** the adapter. Settlement never runs inside the step/tick\n  path.\n- `@ai-rpg-engine/core` is a **type-only** dependency; `xrpl.js` is an\n  **optional peer**. Dry-run mode needs neither. If the chain is unavailable the\n  game continues, marked **\"unanchored.\"**\n\n## Integration levels\n\nThe firewall is a **determinism** boundary, not an anti-integration rule — a game\nfolds the adapter in as deeply as its design calls for, and the byte-identical\ninvariant holds at every level:\n\n| Level | What depends on the adapter |\n|---|---|\n| **L0 — External observer** | Nothing inside the game; the adapter attaches from outside at checkpoints. |\n| **L1 — Game-driven checkpoints** | The game's own save / town / meta flow calls the adapter. |\n| **L2 — Ledger-native design** | The game's economy is designed *around* on-chain ownership. |\n\nThe distinction that keeps replay safe is **not** \"which package imports the\nadapter\" but \"is the call inside the tick.\"\n\n## What binds to what\n\n| Game concept | XRPL primitive | Status |\n|---|---|---|\n| `coin` balance | IOU over a trust line | v1 |\n| Stackable consumables | fungible token | v1 |\n| Buy / sell (`trade-core`) | settled via **token escrow** (XLS-85) at checkpoints | v1 |\n| Unique gear (`equipment`) | **NFT** — XLS-20 mint; XLS-46 `NFTokenModify` for relic growth | **v2** |\n\nThe **issuer** is a config axis: a `per-run` throwaway faucet issuer (the safe\ndefault) or a `persistent` per-game issuer (for cross-run merchant markets).\n\n## Unique gear as NFTs (v2)\n\nThe fungible layer above binds `coin` and stackable consumables. Unique gear —\nthe `equipment` package's one-of-a-kind items, with rarity, provenance, and relic\ngrowth — is a **distinct seam** carried *alongside* it, never conflated: a\n`EquipmentSnapshot` (its own firewall-pure read path over the player's loadout),\n`NFTokenRef` state keyed one-per-`gameItemId`, and `settleEquipmentFromWorld`\n(invoked from `settleAllFromWorld` at the same coordinator checkpoint as the\nfungible settle — never inside the tick). `settleEquipmentNFTs` remains the\nlow-level worker.\n\n- **Mint at a checkpoint.** Each unique item is minted as an **XLS-20 NFT**\n  (`tfTransferable | tfMutable`, never burnable — true player ownership) and\n  transferred to the player. Idempotent per `gameItemId`: a fail-then-retry never\n  double-mints.\n- **Give → directed transfer, never a burn.** `give` is the engine-side title\n  move. `settleEquipmentFromWorld` / `settleAllFromWorld` read recent give\n  events (`toolId` + `targetIds`) and call `transferUniqueGear` — the same\n  directed 0-value CreateOffer/AcceptOffer as the issuer→player grant, pointed\n  at the recipient. Default recipient is `state.merchantAddress`; pass\n  `recipientAddresses` (entityId → address) for an L2 map. The token is not\n  returned to the issuer and is not burned. `NFTokenRef.ownerAddress` is\n  persisted so `reconcile()` expects that holder (fallback: player).\n- **Relic growth → `NFTokenModify`.** As an item earns its history, the issuer\n  advances the NFT's metadata URI in place (**XLS-46 DynamicNFT**) — the same\n  NFTokenID, so the asset's identity is preserved while its state evolves.\n  (Growth fires on real content once the engine's item-chronicle is populated — a\n  dormant system today; the mint path manifests on real content now.)\n- **`reconcile()` verifies ownership.** The external verifier checks on-ledger\n  `account_nfts` — the tracked owner holds the NFT and its URI matches the\n  engine's relic version — a truth the engine cannot fake.\n\nThe whole layer honors the same firewall: mint/modify happen only at checkpoints,\nthe engine never reads the adapter, and a run is byte-identical with or without\nit — proven on the real `starter-gladiator` game (see below).\n\n## Play modes\n\n1. **Offline** (default) — no chain; the engine core as it ships today.\n2. **Ledger** — coin/items backed by real testnet balances; settle at checkpoints.\n3. **Diary** — play offline, then anchor the run's state hash on-ledger for a receipt. `settleCheckpoint` writes `|HASH:<hex>` (a firewall-pure digest of `{ seed, tick, snapshot }`) onto the self-anchor; unique gear is witnessed, not minted.\n\n## Safety rails\n\nTestnet-only mainnet-impossible-in-code guard · secrets sidecar (wallet seeds\nnever in the save file) · conservation-on-retry (idempotent per-checkpoint\nsettlement) · genuine on-chain memo verification (read back via `account_tx`) ·\nunanchored fallback.\n\n## Reconciliation = an external verifier\n\nThe ledger is a different system family than the engine, so the engine cannot\nfake it. `reconcile()` is the pure function (host-supplied inputs, no network).\n`reconcileAgainstLedger` / `reconcileFromWorld` fetch `account_lines` /\n`account_tx` / `account_nfts` and call it. Opening mint is persisted on\n`state.mintedInitial` at first enable so conservation still checks after\nsave/reload without a host stash. `formatReconcileReport(report, network)` is\nthe player-facing printout (balances, conservation, memoOk, nftChecks, testnet/\ndevnet explorers — omitted on dry-run, never mainnet). Live scripts stamp\nreceipts with `stampLedgerReceipt({ version: LEDGER_ADAPTER_VERSION, … })`.\n\n## Proven live\n\nA real `starter-pirate` merchant run — sell a cutlass, buy a cannon-shell —\nsettles on XRPL testnet via token escrow, then reconciles against on-ledger\nbalances and memos (conservation holds for every token). See the\n[ledger handbook chapter](https://mcp-tool-shop-org.github.io/ai-rpg-engine/handbook/60-xrpl-ledger-adapter/),\nand run it yourself:\n\n```bash\nnpm run build\nnode packages/ledger-adapter/scripts/pirate-live-replay.mjs\n```\n\nFor the **NFT unique-gear layer**, a real `starter-gladiator` played session —\nthe player equips the shipped `trident-and-net`, which is minted as an NFT to\ntheir wallet, owned on-ledger, and reconciled — with the world byte-identical\nbefore and after. See the\n[NFT gear handbook chapter](https://mcp-tool-shop-org.github.io/ai-rpg-engine/handbook/61-xrpl-nft-gear/),\nand run it yourself:\n\n```bash\nnpm run build\nnode packages/ledger-adapter/scripts/gladiator-nft-live-replay.mjs\n```\n\n## License\n\nMIT © MCP Tool Shop\n","readmeFilename":"README.md"}