{"_id":"@bunchagames/sdk","_rev":"8-bc09be5bd3bc651558f463d8ff91a1e2","name":"@bunchagames/sdk","dist-tags":{"latest":"0.9.0"},"versions":{"0.1.0":{"name":"@bunchagames/sdk","version":"0.1.0","license":"UNLICENSED","_id":"@bunchagames/sdk@0.1.0","maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"dist":{"shasum":"f22d7032891e36226f479ec59cae80fe1c7212ff","tarball":"https://registry.npmjs.org/@bunchagames/sdk/-/sdk-0.1.0.tgz","fileCount":9,"integrity":"sha512-QKOGdusi3P5xvRmSVyOq9nTj7jJ+I/N6SH+EcwAXRlHv2IgpieRmLpJ2rm2OJMuDvGqwAT5n/ahXp9Lc2mmkYA==","signatures":[{"sig":"MEQCIG6UH03gak+kG075siFhBa/RdMj0+BlTN3GN/koD8EafAiB5/zc4YpC9iCsqfkCzZYsc3pD9tKtZJzaID84Z9d1ZEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27428},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./godot":"./adapters/godot/README.md","./unity":"./adapters/unity/README.md"},"private":false,"_npmUser":{"name":"bunchagames","email":"support@bunchagames.com"},"_npmVersion":"11.9.0","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1782442530016_0.8346705017894247","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bunchagames/sdk","version":"0.3.0","license":"UNLICENSED","_id":"@bunchagames/sdk@0.3.0","maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"dist":{"shasum":"dbf18215dd9e69804052a1d05df408c74a3b97b8","tarball":"https://registry.npmjs.org/@bunchagames/sdk/-/sdk-0.3.0.tgz","fileCount":9,"integrity":"sha512-69xoCxAtOwiyUI6tB/Y86CgzJ/RqVpFHWAvKLiOmVAULEV7dxAA5LmMci2PyK7pZTV6DtWZ1z8ep5peDT8fcmw==","signatures":[{"sig":"MEUCICWmLr+2KSEDoR8oE4a+bpefd2+sGU2deN0d/90IzPeqAiEAxW3JRRboI+uKY2Oqr/OzE4Tup+r8KStyffQuPwidOoM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42164},"main":"./index.js","type":"module","_from":"file:.tool-state/tmp/slice82-publication-20260824/bunchagames-sdk-0.3.0.tgz","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./godot":"./adapters/godot/README.md","./unity":"./adapters/unity/README.md"},"private":false,"_npmUser":{"name":"bunchagames","email":"support@bunchagames.com"},"_resolved":"C:\\Users\\Anthony\\Documents\\Buncha Games\\Browser-Game-Platform-wds-001-manifest-freeze\\.tool-state\\tmp\\slice82-publication-20260824\\bunchagames-sdk-0.3.0.tgz","_integrity":"sha512-69xoCxAtOwiyUI6tB/Y86CgzJ/RqVpFHWAvKLiOmVAULEV7dxAA5LmMci2PyK7pZTV6DtWZ1z8ep5peDT8fcmw==","_npmVersion":"11.9.0","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.3.0_1787619772283_0.5984410680550467","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bunchagames/sdk","version":"0.4.0","license":"UNLICENSED","_id":"@bunchagames/sdk@0.4.0","maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"dist":{"shasum":"5844a35d30fb9dce00eb0169a1fec9686947033c","tarball":"https://registry.npmjs.org/@bunchagames/sdk/-/sdk-0.4.0.tgz","fileCount":13,"integrity":"sha512-i3UoijSEVNfEBglhC+Dpc9Lhu91l5sXYH+8oWgCA9zB1w5OWMLPWwudIdYk6+LpcOBaz/scn48k6EwrNVDLd1A==","signatures":[{"sig":"MEUCIQDTiwyQ3EliJahbfiHRtjY3xAgA+I+zYEgp/2toUaHXQgIgZosFMa9+wo9UaC8oDkQUXeWjH4EvBw0VvrqKbxUFVYY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58120},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./godot":"./adapters/godot/README.md","./unity":"./adapters/unity/README.md"},"private":false,"_npmUser":{"name":"bunchagames","email":"support@bunchagames.com"},"_npmVersion":"11.9.0","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.4.0_1789235280146_0.47974369214261503","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bunchagames/sdk","version":"0.5.0","license":"UNLICENSED","_id":"@bunchagames/sdk@0.5.0","maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"dist":{"shasum":"de51768efb5cf142e2b10e59ae6dab28ef050cd7","tarball":"https://registry.npmjs.org/@bunchagames/sdk/-/sdk-0.5.0.tgz","fileCount":13,"integrity":"sha512-8R9iy8R5ghvt6omxe8yaHc75KevG/NNsDvPp7COnrN+MC56Hm1vUoSmUe/oOrtrx+inS0jcRgJGRZMTbeWIDKA==","signatures":[{"sig":"MEQCIEK2t28PE0cgNL7oeNoGT5eg8b49N6tpYyHj/ej8NPH4AiAFJGXI/6q/EvqbxZoHM3Wx1TrGpTPnCRU7t9C8sl+t+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60273},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./godot":"./adapters/godot/README.md","./unity":"./adapters/unity/README.md"},"private":false,"_npmUser":{"name":"bunchagames","email":"support@bunchagames.com"},"_npmVersion":"11.9.0","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.5.0_1789259095151_0.5450807325254241","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bunchagames/sdk","version":"0.6.0","license":"UNLICENSED","_id":"@bunchagames/sdk@0.6.0","maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"dist":{"shasum":"eba34e17ddd9cca2137223d1f7767bfbf22d5a61","tarball":"https://registry.npmjs.org/@bunchagames/sdk/-/sdk-0.6.0.tgz","fileCount":13,"integrity":"sha512-1THIY5vT0jB3I0AGwSfLtk+wVaCDaMxZOJMb2MNfwMe41+VnV56Xb+M95DedNDIja7cRhCsfIIJ0Cx3A+EW8Gw==","signatures":[{"sig":"MEYCIQD3TcDReLsjTdlZGRTxLrY4O9MfxQ3hnrTzucsyluZIBwIhAOf3jSEIbtVD+B8JVvTFzY3Aw2fileN2YalNIWREN4Q+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62208},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./godot":"./adapters/godot/README.md","./unity":"./adapters/unity/README.md"},"private":false,"_npmUser":{"name":"bunchagames","email":"support@bunchagames.com"},"_npmVersion":"11.9.0","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.6.0_1789270621711_0.07034566525560382","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@bunchagames/sdk","version":"0.7.0","license":"UNLICENSED","_id":"@bunchagames/sdk@0.7.0","maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"dist":{"shasum":"f12d859f628534bffa111652c7373f27457fdaa1","tarball":"https://registry.npmjs.org/@bunchagames/sdk/-/sdk-0.7.0.tgz","fileCount":13,"integrity":"sha512-KZ6i/zT4qrb2kpDEDk6uE61UslrvzfBewUpyBeaHdd4jNk4y+0KzZdz/mAi+vzXcqbKwdia7x+oHiaCxtwfwJQ==","signatures":[{"sig":"MEYCIQCFKMLvcZZlFfXsM16GwLG3UKKHoURmiBHhm+p/S6g48AIhAKCrdsmvPTE8+P+5awX5m6ZX5DVn3W7xQoq5m3BSSbvX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDOPLtnxnhAqQIWUlU9qtFkEJvWZess89omlIXwT0XPgAIhAKdVzBCU/Dkxn9aSwZjLrC+8xXg1caVLqCb7LW1wQIRD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65130},"main":"./index.js","type":"module","_from":"file:.tool-state/bunchagames-sdk-0.7.0.tgz","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./godot":"./adapters/godot/README.md","./unity":"./adapters/unity/README.md"},"private":false,"_npmUser":{"name":"bunchagames","email":"support@bunchagames.com"},"_resolved":"C:\\Users\\Anthony\\Documents\\Buncha Games\\Browser-Game-Platform-upload-recovery\\.tool-state\\bunchagames-sdk-0.7.0.tgz","_integrity":"sha512-KZ6i/zT4qrb2kpDEDk6uE61UslrvzfBewUpyBeaHdd4jNk4y+0KzZdz/mAi+vzXcqbKwdia7x+oHiaCxtwfwJQ==","_npmVersion":"11.9.0","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.0_1789515578983_0.13201295282931857","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@bunchagames/sdk","version":"0.8.0","license":"UNLICENSED","_id":"@bunchagames/sdk@0.8.0","maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"dist":{"shasum":"ee37a8a0383a92f771a0038eeea167c6e69660a4","tarball":"https://registry.npmjs.org/@bunchagames/sdk/-/sdk-0.8.0.tgz","fileCount":13,"integrity":"sha512-yDBEOtpUhsd6TEf/uJ44yL+/2tFyGqVDOYkgi0iKNMNWMso6kTvqWctYI06ubklImcLWOEQpDlFGlKtZR6iAxw==","signatures":[{"sig":"MEYCIQDPwaFiT12dvRfeEtH/PXtEsYCMPMqklcwz5JPXUkwldAIhANuh/mkGmvQYtCBhdv3Ujc6CNDuPTZ6YORmjM5cdeevY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDuIE0OEdE7T0nETLpYBW5tJZB5go2C5pn6RX3a5ANlSAiAxnOCOW/S541yfKEdxV+ZHO7/Rev0WDGHALPGpfQgG1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71215},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./godot":"./adapters/godot/README.md","./unity":"./adapters/unity/README.md"},"private":false,"_npmUser":{"name":"bunchagames","email":"support@bunchagames.com"},"_npmVersion":"11.9.0","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.8.0_1790034066511_0.41262801041184227","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"_id":"@bunchagames/sdk@0.9.0","dist":{"shasum":"954c09b5a1c75d7c34a37d22623ac220720969df","tarball":"https://registry.npmjs.org/@bunchagames/sdk/-/sdk-0.9.0.tgz","fileCount":15,"integrity":"sha512-eTqLQZCXiOq2JFmXHBoHnKNA6LrkE/EszXFFrYBC6YwoE5GvcrjKVZaKQxMKHQx8JmGd54jPedJgousQWmi+Gw==","signatures":[{"sig":"MEUCIAXuZiqoLGL4+unIEVXk3lk+o/8Hzg6xQPgC+up0j7buAiEArrGmtyeJMTJSPW/Wa4gWHhMDJ/rZo6BNuXF/kwGbjMs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBbuJz6OCCRigGPCYubkMBXuLMotU06U9hhuV2Mq7vxLAiBnT04ePBNjavGDXmTepFb8xDXgfhV/3Y+zP6t1JyF2vA=="}],"unpackedSize":76940},"main":"./index.js","name":"@bunchagames/sdk","type":"module","_from":"file:.tool-state/putts-sdk-0.9.0/bunchagames-sdk-0.9.0.tgz","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./godot":"./adapters/godot/README.md","./unity":"./adapters/unity/README.md"},"license":"UNLICENSED","private":false,"version":"0.9.0","_npmUser":{"name":"bunchagames","email":"support@bunchagames.com"},"_resolved":"C:\\Users\\Anthony\\Documents\\Buncha Games\\Browser-Game-Platform-putts-resume\\.tool-state\\putts-sdk-0.9.0\\bunchagames-sdk-0.9.0.tgz","_integrity":"sha512-eTqLQZCXiOq2JFmXHBoHnKNA6LrkE/EszXFFrYBC6YwoE5GvcrjKVZaKQxMKHQx8JmGd54jPedJgousQWmi+Gw==","_npmVersion":"11.9.0","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","directories":{},"maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.9.0_1790048600135_0.11683488510750606"}}},"time":{"created":"2026-06-26T02:55:29.910Z","modified":"2026-09-22T03:43:20.393Z","0.1.0":"2026-06-26T02:55:30.147Z","0.3.0":"2026-08-25T01:02:52.441Z","0.4.0":"2026-09-12T17:48:00.276Z","0.5.0":"2026-09-13T00:24:55.338Z","0.6.0":"2026-09-13T03:37:01.842Z","0.7.0":"2026-09-15T23:39:39.078Z","0.8.0":"2026-09-21T23:41:06.596Z","0.9.0":"2026-09-22T03:43:20.210Z"},"license":"UNLICENSED","description":"Buncha Games browser SDK facade, types, mocks, and engine adapters.","maintainers":[{"name":"bunchagames","email":"support@bunchagames.com"}],"readme":"# Buncha Games SDK\r\n\r\n`@bunchagames/sdk` is a small facade for approved browser games running on Buncha Games.\r\n\r\nIn Buncha Games Sandbox and public play, the platform runtime exposes `window.buncha`. This package gives web games typed helpers, local mocks, and engine adapter files for development. It does not contain secrets and does not grant production monetization access.\r\n\r\n## Web usage\n\n### Putts publication (0.9.0 candidate; not yet released)\n\n`buncha.world.publications.uploadMedia` accepts exact provider snapshot references,\nthe expected signed-in player, base MIME, SHA-256 and an ArrayBuffer. It uploads\none bounded image or orbit video without exposing credentials or provider URLs.\n`submit` uses the same identity plus a persisted request UUID and returns a\npending-moderation receipt, never a public-success claim. Retry uncertain requests\nwith identical IDs/bytes. Do not run these methods during ordinary gameplay.\nKeep local drafts on failure; missing hosted support and local mocks fail unavailable.\nSee the issued Putts publication handoff for the complete capture/retry sequence.\n\n### Putts immutable sharing (0.8.0)\n\nPackage availability does not enable the hosted service. Version 0.8.0 adds\noptional `leaderboards.ingestHoleSnapshot`,\n`getPublishedHoleSnapshot`, `getShareChallengeContext`, `getCurrentShareChallenge`,\n`createOrReplaceShareChallenge`, `getShareChallengeBoard`,\n`getOwnShareChallengeRank`, and `submitShareChallengeResult`.\n\nIngest only on an explicit save-for-sharing/publishing action, not autosave.\nUse the provider's returned hole/snapshot IDs, never locally invented public IDs.\nCreating/replacing a Friends challenge is an explicit creator action; replacement\nrevokes its previous link and starts a new all-time board. The platform handles\nthe private link capability outside the iframe. Recipients use the exact snapshot\nreturned by `getShareChallengeContext`; no draft/latest fallback is permitted.\n\nSubmit only completed holes in the background, preserving the same request UUID,\naccount, challenge and evidence for bounded retries. Pending local presentation\nis not a confirmed rank. Guests may play/read but not submit account scores.\nFriends access never grants publication or weekly Global eligibility. Missing or\ndisabled hosted support returns unavailable; local mock receipts do not prove\nhosted acceptance. Follow the issued platform handoff before uploading a build.\n\n### Putts weekly Global boards (0.7.0)\n\r\nOptional `leaderboards.getHoleLeaderboardCapabilities`, `getHoleBoard`,\r\n`getOwnHoleRank`, and `submitHoleResult` use a canonical Published-hole ID.\r\nGlobal boards are weekly (Monday 00:00 UTC), ranked by strokes then client-measured\r\nelapsed milliseconds. Send one completed result in the background; never wait\r\nbefore gameplay or send per-shot updates. Unpublished/Friends holes are excluded.\r\nBoth server gates remain disabled until the approved provider and hosted release\r\nare ready. Missing capability is unavailable, not a successful mock submission.\r\nThe exact candidate/release status is in platform documentation:\r\n`docs/development/PUTTS_GLOBAL_IMPLEMENTATION.md`.\r\n\r\n### Existing facade\r\n\r\n```js\r\nimport { buncha, installLocalBunchaMock } from \"@bunchagames/sdk\";\r\n\r\nif (import.meta.env?.DEV && !globalThis.window?.buncha) {\r\n  installLocalBunchaMock();\r\n}\r\n\r\nbuncha.ready();\r\nbuncha.game.start({ mode: \"arcade\" });\r\nbuncha.analytics.event(\"boss_defeated\", { bossId: \"forest_king\" });\r\nbuncha.game.end({ score: 1200 });\r\n```\r\n\r\n## Initial loading (GLD-001, `0.4.0`)\r\n\r\nParticipating builds put `data-buncha-loading=\"1\"` on their root `<html>` and\r\nuse module/deferred scripts or body script placement. Runtime installs the\r\nshared loading surface before game initialization. Builds without opt-in keep\r\ntheir existing presentation. A compressed entry HTML is not eligible; compressed\r\ngame assets remain supported.\r\n\r\n```js\r\nconst loading = buncha.loading; // undefined without supporting Runtime hooks\r\nif (loading) {\r\n  hideGameOwnedInitialLoader(); // keep its real asset/readiness work\r\n  loading.start({ stages: [\r\n    { key: \"downloading\", weight: 70 },\r\n    { key: \"preparing\", weight: 30 }\r\n  ] });\r\n}\r\n// Feed actual byte/item counts. Unknown totals hold; never advance with a timer.\r\nloading?.update({ stage: \"downloading\", completed: bytesRead, total: knownBytes });\r\nloading?.completeStage(\"preparing\");\r\n// Only when essential content, scene/menu and input are usable:\r\nloading?.ready();\r\n```\r\n\r\n`completeStage`, `update`, and `ready` are separate from the existing\r\n`buncha.ready()` analytics signal. Subsequent theme/level transitions keep their\r\ngame-owned presentation. Supported failure codes for `loading.fail({code})` are\r\n`network`, `graphics`, `content`, and `initialization`. Platform owns thumbnails,\r\nappearance and contextual Retry; no credentials, title or image URL belong in\r\nprogress messages. Local mocks share the same progress rules but do not prove\r\nhosted readiness. Verify progress and usable input on the exact hosted Sandbox\r\nbuild before requesting the existing human review and promotion.\r\n\r\n## Player profile\r\n\r\n```js\r\nimport { buncha } from \"@bunchagames/sdk\";\r\n\r\nconst player = await buncha.player.getProfile();\r\n\r\nif (player.signedIn) {\r\n  showPlayerName(player.profile.displayName);\r\n}\r\n```\r\n\r\n## Sandbox test mode\r\n\r\nSandbox wallet, IAP, entitlement, and ad test methods are optional and fake/non-payable. Check that the method exists before showing test UI.\r\n\r\n```js\r\nconst wallet = await buncha.wallet?.getSandboxSummary?.();\r\nconst catalog = await buncha.iap?.getSandboxCatalog?.();\r\n```\r\n\r\n## Engine packages\r\n\r\n- Unity WebGL: use the Buncha Games Unity Package Manager tarball from the public SDK docs.\r\n- Godot Web: use the Buncha Games Godot addon ZIP from the public SDK docs.\r\n\r\nThe engine packages no-op outside web exports. The adapter files in this npm package are kept as reference copies for agents and advanced users, but the engine-native downloads are the recommended path.\r\n\r\n## Private immutable Share Drafts (World Provider Contract V1.2)\r\n\r\nV1.2 Worlds can ask the parent wrapper to construct a canonical private link\r\nafter their provider has created an immutable snapshot. Games provide only the\r\none-time capability; they cannot choose a platform origin or destination.\r\n\r\n```js\r\nconst result = await buncha.world.createPrivateDraftShareUrl({ capability });\r\n```\r\n\r\nRecipients inspect `getLaunchContext()`. When its type is\r\n`private_draft_share`, enter a read-only viewer, request\r\n`getLaunchAssertion()`, resolve the exact snapshot from the provider using the\r\nassertion as an Authorization header, and call `privateDraftLoaded()` only\r\nafter that snapshot renders. Normal player assertions, edits, publishing,\r\nsocial actions, reports, camera/microphone, and monetization remain unavailable\r\nin this mode.\r\n\r\n## Optional capabilities (`0.4.0`)\r\n\r\n### Immediate play / completed results (`0.6.0` candidate)\r\n\r\n`leaderboards.submitCompletedRound({requestId, expectedPlayerId, day, rulesId,\r\noutcomes})` submits a completed five-throw Lawn Darts round without a server start\r\nor allowance. Use the existing profile id as `expectedPlayerId` (an account\r\nprecondition, not authority), a stable completed-round UUID, the played UTC date,\r\nreviewed rules, and five ordered evidence objects. Server validation determines\r\nscores. Exact retries return the original receipt; new historical submissions\r\nare rejected. See platform `docs/development/LBD_COMPLETED_ROUNDS.md`.\r\n\r\nPlay is unlimited and local. Abandon/reload discards unfinished play; no resume,\r\nreservation, refund or per-throw requests. Save completed rounds in the background\r\nwithout blocking the next round. Show the player's improved local best immediately\r\nas pending, separately from a confirmed score/rank. Never invent a confirmed rank\r\nor move a guest/account result into another account. Capabilities advertise\r\n`supportsCompletedRound` and `completedRoundDailyLimit:null`; fetching them must\r\nnot delay Play. An unavailable backend is not a successful save.\r\n\r\n### Legacy limited-round correction (`0.5.0`)\r\n\r\nSDK 0.5.0 added `leaderboards.startRound`, `submitRound`, and `recoverRound`.\r\nUse these only after the official distribution/release receipt and when\r\n`getCapabilities().supportsSubmitRound` is true; method presence alone is not\r\nservice availability. See `docs/development/GLD-LBD_ROUND_CORRECTION.md` in the\r\nplatform repository for the authoritative contract.\r\n\r\nThe following is historical compatibility for existing builds, NOT the current\r\nLawn Darts integration policy. Start consumes one try on explicit player intent. Restore local throw checkpoints\r\nagainst the active account round before enabling Play/Resume. Play all five throws\r\nwithout per-throw networking; submit the completed evidence batch in the\r\nbackground with a stable retry ID. If an incomplete round cannot be restored,\r\nrecoverRound returns its try once, then a new startRound can replace it. This\r\ndoes not refund completed rounds or create a separate practice mode. Existing\r\nstartRun/submitOutcome methods retain legacy behavior for older builds.\r\n\r\nThe additive GLD/LBD interfaces are documented in the platform repository's\r\n`docs/development/GLD-001_LOADING_CONTRACT.md` and\r\n`docs/development/LBD-001_SDK_CONTRACT.md`. Version `0.3.0` does not include these\r\ninterfaces. Runtime/hosted SDK loading support is deployed; adopting it remains\r\nopt-in per build. SDK availability and service enablement are separate:\r\nleaderboard calls return unavailable until the platform enables that Game and\r\ncontext. Never interpret the presence of the facade as permission to submit.\r\n\r\n## World cloud-draft foundation (`0.3.0`)\r\n\r\nThe additive `buncha.world.cloudDrafts` namespace is present in the repository\r\nsource and published npm package. It remains feature-off for every provider.\r\nThe local mock returns `unavailable` unless a future test explicitly\r\nsupplies an approved persistence adapter; it never claims that an in-memory\r\nvalue survived a reload.\r\n\r\nWhen an eligible World is eventually issued the capability, signed-out local\r\ndrafts use `readLocal`, `writeLocal`, and `deleteLocal`. Account claim uses\r\n`beginAccountClaim` followed, after same-tab login reload, by the one-time\r\n`consumeAccountClaimContinuation`. Provider cloud calls use a separate\r\nleast-privilege assertion from `getAssertion({ access: \"read\" | \"write\" })`.\r\nThe provider remains authoritative for account-owned mutable projects.\r\n","readmeFilename":"README.md"}