{"_id":"@arxpool-hq/sdk","_rev":"2-3990759087dbcdd0f8dbf2bf7cacea8c","name":"@arxpool-hq/sdk","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@arxpool-hq/sdk","version":"0.1.0","keywords":["arcium","sdk","privacy","pooling"],"author":{"name":"ArxPool SDK Team"},"license":"MIT","_id":"@arxpool-hq/sdk@0.1.0","maintainers":[{"name":"arxpool","email":"lendha930@gmail.com"}],"dist":{"shasum":"f40e23a09511dc86f1ad52926f3a8be228c8da47","tarball":"https://registry.npmjs.org/@arxpool-hq/sdk/-/sdk-0.1.0.tgz","fileCount":35,"integrity":"sha512-0LHKXiAhfZMvUoeGSKNCCg+0nsVa8vBfiNIEbQcXeai6fWAUXQh+Z/KqYVUlTv0cO3dKROnp6Ax0MEebjy7JwQ==","signatures":[{"sig":"MEUCIQCKAXwv1ZdKWl7Kv1sSZsXNN1tY/3FBFnzN38dcrjhweAIgEvqLqlA92eHLptBKl+6WYyf1TKL7HsEKUdpfvxDoqyk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43826},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"eslint . --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","format":"prettier --check .","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"arxpool","email":"lendha930@gmail.com"},"_npmVersion":"11.5.1","description":"Privacy-preserving pooling SDK targeting Arcium MXE.","directories":{},"_nodeVersion":"22.16.0","dependencies":{"zod":"^4.1.12","bs58":"^6.0.0","tweetnacl":"^1.0.3","@arcium-hq/client":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.38.0","vitest":"^4.0.3","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.9.1","typescript-eslint":"^8.46.2","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1761428800782_0.4226345159330498","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@arxpool-hq/sdk","version":"0.2.0","description":"Privacy-preserving pooling SDK targeting Arcium MXE.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run","lint":"eslint . --ext .ts","format":"prettier --check .","prepublishOnly":"npm run lint && npm run test && npm run build"},"keywords":["arcium","sdk","privacy","pooling"],"author":{"name":"ArxPool SDK Team"},"license":"MIT","engines":{"node":">=18"},"publishConfig":{"access":"public"},"dependencies":{"@arcium-hq/client":"^0.3.0","bs58":"^6.0.0","tweetnacl":"^1.0.3","zod":"^4.1.12"},"devDependencies":{"@types/node":"^24.9.1","@typescript-eslint/eslint-plugin":"^8.46.2","@typescript-eslint/parser":"^8.46.2","eslint":"^9.38.0","eslint-config-prettier":"^10.1.8","prettier":"^3.6.2","typescript":"^5.9.3","typescript-eslint":"^8.46.2","vitest":"^4.0.3"},"_id":"@arxpool-hq/sdk@0.2.0","gitHead":"8b91ca069fca398e2a2eb1c40caa259f610f2a4d","_nodeVersion":"22.16.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-c3shOKIJlfWExsgiriaaIRehXIhGT2LIJ0OGVxAihzfbHv2DefghUmwyvv8lC2HT97YaIjmtRbesdk2qn+O3vg==","shasum":"8b29300ad8435c08ddf53643f804baa3bc12f2dd","tarball":"https://registry.npmjs.org/@arxpool-hq/sdk/-/sdk-0.2.0.tgz","fileCount":35,"unpackedSize":48262,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCS7lEj9LaKszIU3QnPk0YzSf2/fK1fHQk+XU+wD8BCRAIgEbvr8eX7GZbKQPEpzbN/S7darvBv8LLa6mZbFTP8uEk="}]},"_npmUser":{"name":"arxpool","email":"lendha930@gmail.com"},"directories":{},"maintainers":[{"name":"arxpool","email":"lendha930@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.2.0_1761988911485_0.5907912210028055"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-25T21:46:40.597Z","modified":"2025-11-01T09:21:51.899Z","0.1.0":"2025-10-25T21:46:41.014Z","0.2.0":"2025-11-01T09:21:51.699Z"},"author":{"name":"ArxPool SDK Team"},"license":"MIT","keywords":["arcium","sdk","privacy","pooling"],"description":"Privacy-preserving pooling SDK targeting Arcium MXE.","maintainers":[{"name":"arxpool","email":"lendha930@gmail.com"}],"readme":"\n---\n\n# ArxPool SDK\n\n> **Encrypted Pooling SDK for Arcium**  \n> Collect encrypted inputs from users, compute privately inside Arcium’s Multi-party Execution (MXE), and verify results without revealing individual data.\n\n[![npm version](https://img.shields.io/badge/npm-arxpool--sdk-green)](#)\n[![TypeScript](https://img.shields.io/badge/TypeScript-ESM-blue)](#)\n[![License: MIT](https://img.shields.io/badge/License-MIT-lightgrey.svg)](#)\n\n---\n\n## ✨ What is ArxPool\n\n**ArxPool** is a reusable, privacy-first SDK that provides a simple API for:\n\n- Collecting encrypted user inputs (votes, metrics, AI updates)\n- Performing private aggregation inside **Arcium MXE**\n- Verifying attested results offline (`job_commit`, signature)\n\nUse-cases:\n- 🗳️ Private DAO voting  \n- 📊 Encrypted analytics  \n- 🤖 Federated AI collaboration  \n- 💸 Confidential DeFi data  \n\n> ⚠️ ArxPool currently runs in **stub mode** (local compute) until Arcium public API access is open.  \n> Once available, flip one flag to go live.\n\n---\n\n## 🚀 Features\n\n- 🔒 Privacy by design — no plaintext data ever leaves the user  \n- 🧩 Simple API — `createPool → joinPool → computePool → verifyResult`  \n- ✅ Ed25519 attestation for verifiable results  \n- 🔁 Stub ↔ Live switch in one line  \n- ⚙️ Written in TypeScript (ESM ready)\n\n---\n\n## 📦 Installation\n\n```bash\nnpm install @arxpool-hq/sdk\n# or\nyarn add @arxpool-hq/sdk\n\n\n\n⚙️ Configuration\n\nCreate a .env file:\n\n# Stub (default)\nUSE_STUB=true\nARXPOOL_ATTESTER_SECRET=local-dev\n\n# Testnet\n# USE_STUB=false\nARXPOOL_NODE=https://testnet.arx.arcium.com\nARXPOOL_ATTESTER_KEY=ed25519:your_private_key\n\nInitialize in your app:\n\nimport { configure } from \"@arxpool-hq/sdk\";\n\nconfigure({\n  mode: process.env.USE_STUB === \"true\" ? \"stub\" : \"testnet\",\n  node: process.env.ARXPOOL_NODE,\n  attesterSecret: process.env.ARXPOOL_ATTESTER_SECRET,\n  attesterKey: process.env.ARXPOOL_ATTESTER_KEY,\n});\n\n> 🔐 Never expose signing keys (ARXPOOL_ATTESTER_SECRET / ARXPOOL_ATTESTER_KEY) to frontend code.\n\n\n\n\n---\n\n🧪 Quickstart\n\nimport {\n  configure,\n  createPool,\n  joinPool,\n  computePool,\n  verifyResult,\n} from \"@arxpool/sdk\";\n\nconfigure({ mode: \"stub\", attesterSecret: \"local-dev\" });\n\n// 1. Create a new pool\nawait createPool({ id: \"poll-123\", mode: \"tally\" });\n\n// 2. Submit encrypted inputs\nawait joinPool(\"poll-123\", {\n  ciphertext: \"base64-or-hpke-ciphertext\",\n  senderPubkey: \"BASE58_PUBKEY\",\n  ttlSeconds: 300\n});\n\n// 3. Compute (stub or testnet)\nconst result = await computePool(\"poll-123\");\n\n// 4. Verify result\nconsole.log(verifyResult(result)); // true\n\n\n---\n\n🧰 API Reference\n\nconfigure(config)\n\nConfigure global SDK behavior.\n\ntype ArxPoolConfig = {\n  mode: \"stub\" | \"testnet\";\n  node?: string;\n  attesterSecret?: string;\n  attesterKey?: string;\n};\n\n\n---\n\ncreatePool(pool)\n\nCreate a new pool.\n\ntype Pool = {\n  id: string;\n  mode: \"tally\" | \"compute\";\n};\n\n\n---\n\njoinPool(poolId, blob)\n\nSubmit encrypted data to a pool.\n\ntype EncryptedBlob = {\n  ciphertext: string;   // base64 or HPKE payload\n  senderPubkey: string; // wallet/public key\n  ttlSeconds?: number;\n  metadata?: Record<string, unknown>;\n};\n\n\n---\n\ncomputePool(poolId, options)\n\nRun the computation.\n\ntype ComputeOptions = {\n  metadata?: Record<string, unknown>;\n};\n\nReturns a signed result:\n\ntype SignedResult = {\n  payload: unknown;\n  signer_pubkey: string;\n  signature: string;\n};\n\n\n---\n\nverifyResult(result)\n\nVerify the Ed25519 signature locally.\n\nverifyResult(result); // returns true or false\n\n\n---\n\n🔐 Security\n\nPolicy\tDescription\n\nNo plaintext\tSDK never decrypts user data\nSecrets in ENV\tNever hardcode sensitive keys\nDeterministic signing\tEd25519 + canonical JSON\nOffline verification\tNo network required\nRedacted logs\t[ENCRYPTED_PAYLOAD] instead of raw data\nHTTPS only\tRequired for backend/collector\n\n\n\n---\n\n🧭 Modes\n\nMode\tUse Case\tBehavior\n\nStub\tLocal dev, demo\tDeterministic simulated compute\nTestnet\tArcium public testnet\tHTTPS requests with signed attestation\n\n\nToggle via `configure({ mode })` or the `USE_STUB` environment flag.\n\n\n---\n\n🌐 Example (Node Script)\n\nimport {\n  configure, createPool, joinPool, computePool, verifyResult\n} from \"@arxpool-hq/sdk\";\n\nasync function main() {\n  configure({ mode: \"stub\", attesterSecret: \"local-dev\" });\n\n  await createPool({ id: \"poll-xyz\", mode: \"tally\" });\n  await joinPool(\"poll-xyz\", { ciphertext: \"b64:...\", senderPubkey: \"BASE58...\", ttlSeconds: 300 });\n\n  const res = await computePool(\"poll-xyz\");\n  console.log(\"Signed:\", res);\n  console.log(\"Verified:\", verifyResult(res));\n}\nmain();\n\n\n---\n\n🌐 Related Project\n\nArxPool Web Portal\nInteractive demo + docs + collector API.\n🔗 https://arxpool-web-test.vercel.app\n\n\n---\n\n🗺️ Roadmap\n\n[ ] Integrate Arcium MXE client once public\n\n[ ] Reader proof verification\n\n[ ] Support for new aggregation modes\n\n[ ] Wallet bindings (EVM, Solana)\n\n[ ] On-chain anchoring of compute receipts\n\n\n\n---\n\n🤝 Contributing\n\n1. Use TypeScript strict mode\n\n\n2. Include unit tests for crypto logic\n\n\n3. Never log or commit secrets\n\n\n4. Avoid telemetry / analytics\n\n\n\n\n---\n\n📄 License\n\nMIT — 2025 ArxPool\n\n\n---\n\n🧠 Notes\n\nArcium MXE access may still be gated during public testnet.\n\nKeep USE_STUB=true until credentials are issued.\n\nSame SDK runs live without any code changes once access is granted.\n\n\n---\n\n📌 **Tips biar tampil full di GitHub:**\n- Pastikan file disimpan sebagai `UTF-8` tanpa BOM.  \n- Jangan taruh indentation sebelum triple backticks ``` untuk code blocks.  \n- Hindari tab di awal baris (gunakan 2–4 spasi aja).  \n- Kalau kamu edit di VSCode, pilih *\"Markdown: Preview\"* untuk cek format.  \n\n---\n\n\n","readmeFilename":"README.md"}