{"_id":"@cascade-fyi/compression-kit","_rev":"4-479fba7e519f7b8a2e37ebdae7447769","name":"@cascade-fyi/compression-kit","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@cascade-fyi/compression-kit","version":"0.1.0","keywords":["solana","light-protocol","zk-compression","compressed-accounts","edge-compatible","cloudflare-workers","solana-kit"],"author":{"name":"Cascade"},"license":"Apache-2.0","_id":"@cascade-fyi/compression-kit@0.1.0","maintainers":[{"name":"tenequm","email":"tenequm@gmail.com"}],"homepage":"https://github.com/cascade-protocol/sati/tree/main/packages/compression-kit#readme","bugs":{"url":"https://github.com/cascade-protocol/sati/issues"},"dist":{"shasum":"ad117e11900df71fab9ab86849c575460988bea4","tarball":"https://registry.npmjs.org/@cascade-fyi/compression-kit/-/compression-kit-0.1.0.tgz","fileCount":10,"integrity":"sha512-60eaUC93O2qidefPHGCzsmKLfSz+0QviaA5fF3kbUGaJMG9/N3XR/24B4k61SrYaeEPFkZ3YpjhtQGwNuG+cfA==","signatures":[{"sig":"MEUCIQCA7XGjS+Arp0lkXEm3Lc18jn2N4hFOFOSH8vCOlkLFNAIgP1CoEV+KrOlDhTQe907xlS3hpVdop7XxTK8Z2sXk+OU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":324278},"main":"./dist/index.cjs","type":"module","_from":"file:cascade-fyi-compression-kit-0.1.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":">=20.18.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","lint":"biome check","test":"vitest run","build":"tsdown --publint","check":"pnpm run \"/^(type-check|lint:fix)$/\"","clean":"rm -rf dist","lint:fix":"biome check --write","test:watch":"vitest","type-check":"tsc --noEmit"},"_npmUser":{"name":"tenequm","email":"tenequm@gmail.com"},"_resolved":"/private/var/folders/bt/9pzbvwhj1hb18j2m17f9bp6h0000gn/T/244c6486abcbded56740e1d001f538d4/cascade-fyi-compression-kit-0.1.0.tgz","_integrity":"sha512-60eaUC93O2qidefPHGCzsmKLfSz+0QviaA5fF3kbUGaJMG9/N3XR/24B4k61SrYaeEPFkZ3YpjhtQGwNuG+cfA==","repository":{"url":"git+https://github.com/cascade-protocol/sati.git","type":"git","directory":"packages/compression-kit"},"_npmVersion":"11.6.1","description":"Solana Kit native implementation of Light Protocol stateless.js - portable, edge-compatible","directories":{},"sideEffects":false,"_nodeVersion":"24.10.0","dependencies":{"bs58":"^6.0.0","@solana/kit":"^5.1.0","@noble/hashes":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.18.3","vitest":"^4.0.16","publint":"^0.3.16","typescript":"^5.9.3","@types/node":"^25.0.3","@arethetypeswrong/core":"^0.18.2"},"_npmOperationalInternal":{"tmp":"tmp/compression-kit_0.1.0_1767033957782_0.8850840027795317","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cascade-fyi/compression-kit","version":"0.2.0","keywords":["solana","light-protocol","zk-compression","compressed-accounts","edge-compatible","cloudflare-workers","solana-kit"],"author":{"name":"Cascade"},"license":"Apache-2.0","_id":"@cascade-fyi/compression-kit@0.2.0","maintainers":[{"name":"tenequm","email":"tenequm@gmail.com"}],"homepage":"https://github.com/cascade-protocol/sati/tree/main/packages/compression-kit#readme","bugs":{"url":"https://github.com/cascade-protocol/sati/issues"},"dist":{"shasum":"2097732032ff9ec7978ca841a49ed1ef52984fd7","tarball":"https://registry.npmjs.org/@cascade-fyi/compression-kit/-/compression-kit-0.2.0.tgz","fileCount":10,"integrity":"sha512-gvCVspuoPFGJ3IlJ08n1FF6fuG6jMyUPiNShx3ImPtTAdl8gZZaaL++6CUOGDh+TiynLoiwuU1h/lBa/HJnzKg==","signatures":[{"sig":"MEQCIFqioExZ/L2VncKKY9q2pDZIE8Le1eon6wL7Wzl6MWIRAiBqJ2tulv1nI/o8pyOMG2plHXsAuPJL8DCtRm6RYM/lSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":344275},"main":"./dist/index.cjs","type":"module","_from":"file:cascade-fyi-compression-kit-0.2.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":">=20.18.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","lint":"biome check","test":"vitest run","build":"tsdown --publint","check":"pnpm run \"/^(type-check|lint:fix)$/\"","clean":"rm -rf dist","lint:fix":"biome check --write","test:watch":"vitest","type-check":"tsc --noEmit"},"_npmUser":{"name":"tenequm","email":"tenequm@gmail.com"},"_resolved":"/private/var/folders/bt/9pzbvwhj1hb18j2m17f9bp6h0000gn/T/018d88b7cbc2d9bf7b1e888c173e8e3a/cascade-fyi-compression-kit-0.2.0.tgz","_integrity":"sha512-gvCVspuoPFGJ3IlJ08n1FF6fuG6jMyUPiNShx3ImPtTAdl8gZZaaL++6CUOGDh+TiynLoiwuU1h/lBa/HJnzKg==","repository":{"url":"git+https://github.com/cascade-protocol/sati.git","type":"git","directory":"packages/compression-kit"},"_npmVersion":"11.6.2","description":"Solana Kit native implementation of Light Protocol stateless.js - portable, edge-compatible","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"bs58":"^6.0.0","@solana/kit":"^5.1.0","@noble/hashes":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.18.3","vitest":"^4.0.16","publint":"^0.3.16","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/compression-kit_0.2.0_1767534949091_0.5689271773873879","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cascade-fyi/compression-kit","version":"0.2.1","keywords":["solana","light-protocol","zk-compression","compressed-accounts","edge-compatible","cloudflare-workers","solana-kit"],"author":{"name":"Cascade"},"license":"Apache-2.0","_id":"@cascade-fyi/compression-kit@0.2.1","maintainers":[{"name":"tenequm","email":"tenequm@gmail.com"}],"homepage":"https://github.com/cascade-protocol/sati/tree/main/packages/compression-kit#readme","bugs":{"url":"https://github.com/cascade-protocol/sati/issues"},"dist":{"shasum":"60c71e4689ac582e373f6cc0fc3a31f9cd9bd760","tarball":"https://registry.npmjs.org/@cascade-fyi/compression-kit/-/compression-kit-0.2.1.tgz","fileCount":11,"integrity":"sha512-imtdXXkxRNIXfMH091ltZ3oVHJ0d6MBEFKpZttrwHeqBfDGb595vVHk0nduy1gvgJoAw2NBaHh+ULM8zZOwM1w==","signatures":[{"sig":"MEYCIQCFH0NZZI4cl46m6LN7XrdWXwUWBTdT296hB2bW7DmcugIhAIVH5ubqrKXb+8k+FS8dGK62rI8NcdEFMrSgNchaWtnq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348569},"main":"./dist/index.cjs","type":"module","_from":"file:cascade-fyi-compression-kit-0.2.1.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":">=20.18.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","lint":"biome check","test":"vitest run","build":"tsdown --publint","check":"pnpm run \"/^(type-check|lint:fix)$/\"","clean":"rm -rf dist","lint:fix":"biome check --write","test:watch":"vitest","type-check":"tsc --noEmit"},"_npmUser":{"name":"tenequm","email":"tenequm@gmail.com"},"_resolved":"/private/var/folders/bt/9pzbvwhj1hb18j2m17f9bp6h0000gn/T/a1068627b22c99da199724c14d62535b/cascade-fyi-compression-kit-0.2.1.tgz","_integrity":"sha512-imtdXXkxRNIXfMH091ltZ3oVHJ0d6MBEFKpZttrwHeqBfDGb595vVHk0nduy1gvgJoAw2NBaHh+ULM8zZOwM1w==","repository":{"url":"git+https://github.com/cascade-protocol/sati.git","type":"git","directory":"packages/compression-kit"},"_npmVersion":"11.6.2","description":"Solana Kit native implementation of Light Protocol stateless.js - portable, edge-compatible","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"bs58":"^6.0.0","@solana/kit":"^5.1.0","@noble/hashes":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.18.3","vitest":"^4.0.16","publint":"^0.3.16","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/compression-kit_0.2.1_1770899808987_0.7233002532679293","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cascade-fyi/compression-kit","version":"0.3.0","description":"Solana Kit native implementation of Light Protocol stateless.js - portable, edge-compatible","type":"module","sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.mts","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"keywords":["solana","light-protocol","zk-compression","compressed-accounts","edge-compatible","cloudflare-workers","solana-kit"],"author":{"name":"Cascade"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/cascade-protocol/sati.git","directory":"packages/compression-kit"},"homepage":"https://github.com/cascade-protocol/sati/tree/main/packages/compression-kit#readme","bugs":{"url":"https://github.com/cascade-protocol/sati/issues"},"engines":{"node":">=20.18.0"},"dependencies":{"@noble/hashes":"^2.0.1","@solana/kit":"^5.1.0","bs58":"^6.0.0"},"devDependencies":{"publint":"^0.3.16","tsdown":"^0.18.3","typescript":"^5.9.3","vitest":"^4.0.16"},"scripts":{"build":"tsdown --publint","dev":"tsdown --watch","type-check":"tsc --noEmit","lint":"biome check","lint:fix":"biome check --write","check":"pnpm run \"/^(type-check|lint:fix)$/\"","test":"vitest run","test:watch":"vitest","clean":"rm -rf dist"},"_id":"@cascade-fyi/compression-kit@0.3.0","_integrity":"sha512-kzem+fI2IVdiZWCZa8xPXybztFNgukRf/Y7tjBbzhQww/VpY8jSymCtBBNpdfWH1POSxGoMIPQa1WXhNODTPRQ==","_resolved":"/private/var/folders/bt/9pzbvwhj1hb18j2m17f9bp6h0000gn/T/d74bad55b7b6bfc319ab3ddbd19b2df4/cascade-fyi-compression-kit-0.3.0.tgz","_from":"file:cascade-fyi-compression-kit-0.3.0.tgz","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-kzem+fI2IVdiZWCZa8xPXybztFNgukRf/Y7tjBbzhQww/VpY8jSymCtBBNpdfWH1POSxGoMIPQa1WXhNODTPRQ==","shasum":"ad6301b101920866b7699180ca4e12f6fd7349c2","tarball":"https://registry.npmjs.org/@cascade-fyi/compression-kit/-/compression-kit-0.3.0.tgz","fileCount":11,"unpackedSize":356021,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDCLy1EB4G9aqdKrdjVHBI4CgEqPaHjCpADcPBqWjfvSAIgDZUIj3X2Zn2wbEwfaoThFvM/KBlovel4De1utsTSP/g="}]},"_npmUser":{"name":"tenequm","email":"tenequm@gmail.com"},"directories":{},"maintainers":[{"name":"tenequm","email":"tenequm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/compression-kit_0.3.0_1771549774219_0.7345207011564079"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-29T18:45:57.664Z","modified":"2026-02-20T01:09:34.539Z","0.1.0":"2025-12-29T18:45:57.933Z","0.2.0":"2026-01-04T13:55:49.313Z","0.2.1":"2026-02-12T12:36:49.151Z","0.3.0":"2026-02-20T01:09:34.418Z"},"bugs":{"url":"https://github.com/cascade-protocol/sati/issues"},"author":{"name":"Cascade"},"license":"Apache-2.0","homepage":"https://github.com/cascade-protocol/sati/tree/main/packages/compression-kit#readme","keywords":["solana","light-protocol","zk-compression","compressed-accounts","edge-compatible","cloudflare-workers","solana-kit"],"repository":{"type":"git","url":"git+https://github.com/cascade-protocol/sati.git","directory":"packages/compression-kit"},"description":"Solana Kit native implementation of Light Protocol stateless.js - portable, edge-compatible","maintainers":[{"name":"tenequm","email":"tenequm@gmail.com"}],"readme":"# @cascade-fyi/compression-kit\n\nSolana Kit native implementation of Light Protocol compression. Works in any runtime (browsers, Cloudflare Workers, Deno, Node.js).\n\n> **Status:** Beta\n\n## Features\n\n- **Edge/browser compatible** - No Node.js dependencies, works everywhere\n- **Native bigint** - Uses native bigint instead of BN.js for better performance\n- **Solana Kit types** - Uses `Address` type from `@solana/kit` instead of `PublicKey`\n- **Full Photon RPC** - Complete implementation of Light Protocol's Photon indexer API\n- **Lightweight** - Minimal dependencies (~25KB gzip)\n\n## Install\n\n```bash\nnpm install @cascade-fyi/compression-kit\n```\n\n```bash\npnpm add @cascade-fyi/compression-kit\n```\n\n```bash\nyarn add @cascade-fyi/compression-kit\n```\n\n## Quickstart\n\n```typescript\nimport { createPhotonRpc, deriveAddress, deriveAddressSeed } from '@cascade-fyi/compression-kit';\nimport { address } from '@solana/kit';\n\n// 1. Create RPC client\nconst rpc = createPhotonRpc('https://mainnet.helius-rpc.com/?api-key=YOUR_KEY');\n\n// 2. Query compressed accounts\nconst ownerAddress = address('YOUR_WALLET_ADDRESS');\nconst accounts = await rpc.getCompressedAccountsByOwner(ownerAddress);\n\n// 3. Derive a compressed account address\nconst programId = address('YOUR_PROGRAM_ID');\nconst seed = deriveAddressSeed([new TextEncoder().encode('my-seed')], programId);\nconst compressedAddress = deriveAddress(seed);\n```\n\n## Common Flows\n\n### Query Compressed Accounts\n\n```typescript\nimport { createPhotonRpc } from '@cascade-fyi/compression-kit';\n\nconst rpc = createPhotonRpc('https://mainnet.helius-rpc.com/?api-key=YOUR_KEY');\n\n// Get all compressed accounts for an owner\nconst accounts = await rpc.getCompressedAccountsByOwner(ownerAddress);\n\n// With server-side memcmp filtering (up to 5 filters, AND logic)\nconst filtered = await rpc.getCompressedAccountsByOwner(ownerAddress, {\n  filters: [\n    { offset: 8, bytes: schemaAddress },     // base58 string\n    { offset: 40, bytes: agentMintBytes },    // or Uint8Array\n  ],\n  limit: 50,\n});\n\n// Get compressed token accounts\nconst tokenAccounts = await rpc.getCompressedTokenAccountsByOwner(ownerAddress, {\n  mint: mintAddress,\n});\n\n// Get a specific compressed account by hash\nconst account = await rpc.getCompressedAccount(accountHash);\n```\n\n### Derive Addresses (V1 & V2)\n\n```typescript\nimport {\n  deriveAddressSeed,\n  deriveAddress,\n  deriveAddressSeedV2,\n  deriveAddressV2,\n  getDefaultAddressTreeInfo,\n} from '@cascade-fyi/compression-kit';\n\n// V1 Address derivation (mainnet)\nconst seedV1 = deriveAddressSeed([Buffer.from('my-seed')], programId);\nconst addressV1 = deriveAddress(seedV1);\n\n// V2 Address derivation (devnet, more efficient)\nconst seedV2 = deriveAddressSeedV2([Buffer.from('my-seed')]);\nconst treeInfo = getDefaultAddressTreeInfo();\nconst addressV2 = deriveAddressV2(seedV2, treeInfo.tree, programId);\n```\n\n### Get Validity Proofs\n\n```typescript\nimport { createPhotonRpc } from '@cascade-fyi/compression-kit';\n\nconst rpc = createPhotonRpc('https://mainnet.helius-rpc.com/?api-key=YOUR_KEY');\n\n// Get proof for existing accounts (update/close operations)\nconst proof = await rpc.getValidityProof({\n  hashes: [{ hash: accountHash, tree: treeAddress, queue: queueAddress }],\n});\n\n// Get proof for new addresses (create operations)\nconst newAddressProof = await rpc.getValidityProof({\n  newAddresses: [{ address: newAddress, tree: addressTree, queue: addressQueue }],\n});\n```\n\n### Build Instruction Accounts\n\n```typescript\nimport {\n  PackedAccounts,\n  createSystemAccountConfig,\n  getLightSystemAccountMetas,\n} from '@cascade-fyi/compression-kit';\n\n// Create packed accounts helper\nconst packedAccounts = new PackedAccounts();\n\n// Add Light system accounts\nconst systemConfig = createSystemAccountConfig(programId);\npackedAccounts.addSystemAccounts(getLightSystemAccountMetas(systemConfig));\n\n// Add tree accounts and get indices\nconst treeIndex = packedAccounts.insertOrGet(treeAddress);\n\n// Convert to account metas for instruction\nconst { remainingAccounts } = packedAccounts.toAccountMetas();\n```\n\n### BN254 Field Operations\n\n```typescript\nimport {\n  createBN254,\n  bn254FromBytes,\n  bn254ToBytes,\n  bn254Add,\n  isSmallerThanFieldSize,\n} from '@cascade-fyi/compression-kit';\n\n// Create field element from bigint\nconst element = createBN254(123456789n);\n\n// Convert from/to bytes\nconst bytes = bn254ToBytes(element);\nconst restored = bn254FromBytes(bytes);\n\n// Field arithmetic\nconst sum = bn254Add(element1, element2);\n\n// Validate field size\nif (isSmallerThanFieldSize(someBytes)) {\n  // Safe to use as BN254\n}\n```\n\n### Web Crypto Utilities\n\n```typescript\nimport { importEd25519PublicKey } from '@cascade-fyi/compression-kit';\nimport { verifySignature, signatureBytes } from '@solana/kit';\n\n// Import Ed25519 public key for signature verification\nconst pubkeyBytes = new Uint8Array(32); // your public key\nconst cryptoKey = await importEd25519PublicKey(pubkeyBytes);\n\n// Use with Web Crypto API\nconst isValid = await verifySignature(cryptoKey, signatureBytes(sig), message);\n```\n\n## Configuration\n\n### RPC Endpoints\n\n| Network | Endpoint |\n|---------|----------|\n| Mainnet | `https://mainnet.helius-rpc.com/?api-key=YOUR_KEY` |\n| Devnet | `https://devnet.helius-rpc.com/?api-key=YOUR_KEY` |\n| Localnet | `http://localhost:8784` |\n\n### Default Tree Addresses\n\nThe package exports default tree addresses for mainnet and devnet:\n\n```typescript\nimport {\n  MERKLE_TREE_PUBKEY,      // V1 State tree (mainnet)\n  NULLIFIER_QUEUE_PUBKEY,  // V1 Nullifier queue (mainnet)\n  ADDRESS_TREE,            // V1 Address tree\n  BATCH_MERKLE_TREE_1,     // V2 Batch tree (devnet)\n  defaultTestStateTreeAccounts, // Local testing\n} from '@cascade-fyi/compression-kit';\n```\n\n## API Reference\n\n### RPC Methods\n\n| Method | Description |\n|--------|-------------|\n| `getCompressedAccount(hash)` | Get compressed account by hash |\n| `getCompressedAccountsByOwner(owner)` | Get all compressed accounts for owner |\n| `getCompressedTokenAccountsByOwner(owner, config?)` | Get token accounts for owner |\n| `getCompressedTokenBalancesByOwner(owner)` | Get token balances for owner |\n| `getValidityProof(params)` | Get validity proof for accounts/addresses |\n| `getMultipleCompressedAccounts(hashes)` | Batch fetch multiple accounts |\n| `getCompressionSignaturesForOwner(owner)` | Get compression transaction signatures |\n| `getLatestCompressionSignatures()` | Get recent compression signatures |\n| `getIndexerHealth()` | Check indexer health status |\n| `getIndexerSlot()` | Get current indexer slot |\n\n### Crypto Utilities\n\n| Function | Description |\n|----------|-------------|\n| `importEd25519PublicKey(bytes)` | Import Ed25519 public key for Web Crypto verification |\n\n### Types\n\n| Type | Description |\n|------|-------------|\n| `CompressedAccount` | Compressed account data structure |\n| `TreeInfo` | Merkle tree metadata |\n| `ValidityProof` | ZK validity proof |\n| `BN254` | BN254 field element (branded bigint) |\n| `PackedAccounts` | Helper for building instruction accounts |\n| `MemcmpFilter` | Memory comparison filter for RPC queries |\n\n### Constants\n\n| Constant | Description |\n|----------|-------------|\n| `LIGHT_SYSTEM_PROGRAM` | Light system program ID |\n| `ACCOUNT_COMPRESSION_PROGRAM` | Account compression program ID |\n| `COMPRESSED_TOKEN_PROGRAM` | Compressed token program ID |\n| `FIELD_SIZE` | BN254 field size |\n\n## Requirements\n\n- Node.js >= 20.18.0\n- TypeScript >= 5.0 (for type definitions)\n\n## Changelog\n\nSee [CHANGELOG.md](https://github.com/cascade-protocol/sati/blob/main/packages/compression-kit/CHANGELOG.md) for version history.\n\n## Related Packages\n\n- [`@solana/kit`](https://www.npmjs.com/package/@solana/kit) - Solana Kit for modern Solana development\n- [`@lightprotocol/stateless.js`](https://www.npmjs.com/package/@lightprotocol/stateless.js) - Original Light Protocol JS SDK\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}