{"_id":"@abstraxn/solana-relayer","_rev":"6-58b5db9023c9d4928411f3faafe96a62","name":"@abstraxn/solana-relayer","dist-tags":{"latest":"1.1.0"},"versions":{"0.0.1":{"name":"@abstraxn/solana-relayer","version":"0.0.1","keywords":["Solana","Relayer","Gasless Transaction","Abstraxn","SDK"],"author":{"name":"Abstraxn"},"license":"MIT","_id":"@abstraxn/solana-relayer@0.0.1","maintainers":[{"name":"shubham.antier","email":"shubham.singla@antiersolutions.com"},{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},{"name":"abhi883","email":"abhishek.upadhyay@antiersolutions.com"},{"name":"pankaj829","email":"pankajdogra829@gmail.com"}],"dist":{"shasum":"2c905281a73937c721262e2f98d02566194ac903","tarball":"https://registry.npmjs.org/@abstraxn/solana-relayer/-/solana-relayer-0.0.1.tgz","fileCount":21,"integrity":"sha512-WNwlqMA0azvLs30VZbzbPrKBxXuFqsH6zHxNeHnbFoWF0ygmpCIGLV+vMsS/cFAp3QjNCCZp5qqLG8C4lo1XAw==","signatures":[{"sig":"MEUCIQClGQk3XxboEAFCYMd5GXstUml+ZFigmuQK2OG+FOFBeQIgFkoB33UQJQGFO4YlUHMqXjpFjFJH2iYOdLpY6Bh+zBY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66886},"main":"./dist/src/index.js","type":"module","module":"./dist/src/index.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"9f2eb201650992508ee2cd9805acf44370161e84","scripts":{"build":"rimraf dist && tsc"},"typings":"./dist/src/index.d.ts","_npmUser":{"name":"abhi883","email":"abhishek.upadhyay@antiersolutions.com"},"_npmVersion":"10.8.2","description":"Abstraxn Solana Relayer SDK for building, signing, and relaying Solana transactions.","directories":{},"_nodeVersion":"20.19.2","dependencies":{"@solana/web3.js":"^1.98.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/solana-relayer_0.0.1_1777283258117_0.2050229000622008","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@abstraxn/solana-relayer","version":"0.0.2","keywords":["Solana","Relayer","Gasless Transaction","Abstraxn","SDK"],"author":{"name":"Abstraxn"},"license":"MIT","_id":"@abstraxn/solana-relayer@0.0.2","maintainers":[{"name":"shubham.antier","email":"shubham.singla@antiersolutions.com"},{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},{"name":"abhi883","email":"abhishek.upadhyay@antiersolutions.com"},{"name":"pankaj829","email":"pankajdogra829@gmail.com"}],"dist":{"shasum":"7f25c583eaed38dcd155728bde7a31d5dbe83c91","tarball":"https://registry.npmjs.org/@abstraxn/solana-relayer/-/solana-relayer-0.0.2.tgz","fileCount":21,"integrity":"sha512-rnd8Z2R+6hNTVgZt+15s0YmEU0g0f7+fySOFda0RPIvD+p7HNLCYSBYBHaaGLIKYOln3VbjrrkrDPdnzPlnkyg==","signatures":[{"sig":"MEUCIQCj6c+enukdkYkCBhst0rxXApLwKfNdQTOPJTzSW71JWgIgf8oe9jzq+3G5iZqkQIIxFxHXpq6QBdbLnTCt6SxJEwM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67349},"main":"./dist/src/index.js","type":"module","module":"./dist/src/index.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"b6d3d29536cb32e0d3eb6e0364f9117522cc1d50","scripts":{"build":"rimraf dist && tsc"},"typings":"./dist/src/index.d.ts","_npmUser":{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},"_npmVersion":"11.6.0","description":"Abstraxn Solana Relayer SDK for building, signing, and relaying Solana transactions.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"@solana/web3.js":"^1.98.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/solana-relayer_0.0.2_1777294138027_0.601515290639101","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@abstraxn/solana-relayer","version":"0.0.3","keywords":["Solana","Relayer","Gasless Transaction","Abstraxn","SDK"],"author":{"name":"Abstraxn"},"license":"MIT","_id":"@abstraxn/solana-relayer@0.0.3","maintainers":[{"name":"shubham.antier","email":"shubham.singla@antiersolutions.com"},{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},{"name":"abhi883","email":"abhishek.upadhyay@antiersolutions.com"},{"name":"pankaj829","email":"pankajdogra829@gmail.com"}],"dist":{"shasum":"f73258179803f6fd3c94be4d2056c0c8912ea755","tarball":"https://registry.npmjs.org/@abstraxn/solana-relayer/-/solana-relayer-0.0.3.tgz","fileCount":21,"integrity":"sha512-G4WQ2Uj6yO4GTnVg6jRsPN3kwVH2G9cvDi3ziGRfB3hnryvJbSb1ajtzhxUxceFosWrUBFiI7PHYWWdmkq2CLg==","signatures":[{"sig":"MEUCIFDfrgF7s78HnJYkmIT6KQUjuctS/Iwcwl9rgLOPpj4mAiEA8wlrmVrWKQgFZvUBb3HCWSH0nIpSSYXzTjHzmOOqpcc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67512},"main":"./dist/src/index.js","type":"module","module":"./dist/src/index.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"0c0fa59e952936efa3d9a9ab15a6f301ef175053","scripts":{"build":"rimraf dist && tsc"},"typings":"./dist/src/index.d.ts","_npmUser":{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},"_npmVersion":"11.6.0","description":"Abstraxn Solana Relayer SDK for building, signing, and relaying Solana transactions.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"@solana/web3.js":"^1.98.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/solana-relayer_0.0.3_1777373558851_0.1777602187214229","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@abstraxn/solana-relayer","version":"0.0.4","keywords":["Solana","Relayer","Gasless Transaction","Abstraxn","SDK"],"author":{"name":"Abstraxn"},"license":"MIT","_id":"@abstraxn/solana-relayer@0.0.4","maintainers":[{"name":"shubham.antier","email":"shubham.singla@antiersolutions.com"},{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},{"name":"abhi883","email":"abhishek.upadhyay@antiersolutions.com"},{"name":"pankaj829","email":"pankajdogra829@gmail.com"}],"dist":{"shasum":"5de67e1b5575c5d3d7124bb6e4ccce20b85f969c","tarball":"https://registry.npmjs.org/@abstraxn/solana-relayer/-/solana-relayer-0.0.4.tgz","fileCount":21,"integrity":"sha512-eqwHwjp9Nw2lR35k7SWZDm2IXppZnNLu6c8kG7GooH2SqBhrEvjGuUcJSa+fdcQWPvfZvP1sIs5l/gxxonmUHw==","signatures":[{"sig":"MEUCIFt8p+dnaMPMlaUzOs22HoK+EwMUdAOKT8FBdFTVwWLUAiEAvOGaftimdTDFIo3bqDFBuxVE2cRPAH+rFTeP4x2NWlY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66486},"main":"./dist/src/index.js","type":"module","module":"./dist/src/index.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"0c0fa59e952936efa3d9a9ab15a6f301ef175053","scripts":{"build":"rimraf dist && tsc"},"typings":"./dist/src/index.d.ts","_npmUser":{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},"_npmVersion":"11.6.0","description":"Abstraxn Solana Relayer SDK for building, signing, and relaying Solana transactions.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"@solana/web3.js":"^1.98.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/solana-relayer_0.0.4_1777373861472_0.9429655502583163","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@abstraxn/solana-relayer","version":"1.0.0","keywords":["Solana","Relayer","Gasless Transaction","Abstraxn","SDK"],"author":{"name":"Abstraxn"},"license":"MIT","_id":"@abstraxn/solana-relayer@1.0.0","maintainers":[{"name":"shubham.antier","email":"shubham.singla@antiersolutions.com"},{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},{"name":"abhi883","email":"abhishek.upadhyay@antiersolutions.com"},{"name":"pankaj829","email":"pankajdogra829@gmail.com"}],"dist":{"shasum":"74880ceecc7bce091a81dea15dd7a6d8385a4d78","tarball":"https://registry.npmjs.org/@abstraxn/solana-relayer/-/solana-relayer-1.0.0.tgz","fileCount":21,"integrity":"sha512-/APzkiXTFdDWcIQfG8fN52VAHZN75rdk7j9f6r4himkpy7nonztW2a6nso7v0X9u+xTn4ML6ZEHSeqtVJSJHtw==","signatures":[{"sig":"MEQCIByT9MUw5bC+u4o/J6QBZuAUFC8mes1x9S7P6tJGPZodAiBe0BoN1Bs2BYm85aW8euG3OOQtg+ik4kR9bFa5IlbIVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66486},"main":"./dist/src/index.js","type":"module","module":"./dist/src/index.js","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"0c0fa59e952936efa3d9a9ab15a6f301ef175053","scripts":{"build":"rimraf dist && tsc"},"typings":"./dist/src/index.d.ts","_npmUser":{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},"_npmVersion":"11.6.0","description":"Abstraxn Solana Relayer SDK for building, signing, and relaying Solana transactions.","directories":{},"_nodeVersion":"24.8.0","dependencies":{"@solana/web3.js":"^1.98.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","typescript":"^5.8.3","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/solana-relayer_1.0.0_1777374699382_0.6347218265235424","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@abstraxn/solana-relayer","version":"1.1.0","description":"Abstraxn Solana Relayer SDK for building, signing, and relaying Solana transactions.","type":"module","main":"./dist/src/index.js","module":"./dist/src/index.js","typings":"./dist/src/index.d.ts","exports":{".":{"import":"./dist/src/index.js","types":"./dist/src/index.d.ts"}},"keywords":["Solana","Relayer","Gasless Transaction","Abstraxn","SDK"],"scripts":{"build":"rimraf dist && tsc"},"author":{"name":"Abstraxn"},"license":"MIT","publishConfig":{"access":"public"},"dependencies":{"@solana/web3.js":"^1.98.4"},"devDependencies":{"@types/node":"^20.0.0","rimraf":"^6.0.1","typescript":"^5.8.3"},"_id":"@abstraxn/solana-relayer@1.1.0","gitHead":"0c6e536c4ff4ae0ee7dd9c03f27918bca5146f81","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-V0ylLk18k1dFvlEc4ZojNYjJwDL5Tylobi+VYWGo/K4ZjqboXeCGt9tME7zLtFXXx7zOkAb2D5jGLG1gwNE5Nw==","shasum":"fffaac08629a6f94dd113498e7f473bea2e0e6d7","tarball":"https://registry.npmjs.org/@abstraxn/solana-relayer/-/solana-relayer-1.1.0.tgz","fileCount":21,"unpackedSize":71742,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH161k6L8BfHkQrPDbHbi2310Nozo3/eJRfCPvt9nlGNAiARtC36SGu6auN5/gupXBKoZ6ZSPT81EXMaLe8/sF0sGg=="}]},"_npmUser":{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},"directories":{},"maintainers":[{"name":"shubham.antier","email":"shubham.singla@antiersolutions.com"},{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},{"name":"abhi883","email":"abhishek.upadhyay@antiersolutions.com"},{"name":"pankaj829","email":"pankajdogra829@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/solana-relayer_1.1.0_1778051786820_0.48120676526581807"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-27T09:47:38.038Z","modified":"2026-05-06T07:16:27.084Z","0.0.1":"2026-04-27T09:47:38.263Z","0.0.2":"2026-04-27T12:48:58.167Z","0.0.3":"2026-04-28T10:52:38.998Z","0.0.4":"2026-04-28T10:57:41.614Z","1.0.0":"2026-04-28T11:11:39.532Z","1.1.0":"2026-05-06T07:16:26.951Z"},"author":{"name":"Abstraxn"},"license":"MIT","keywords":["Solana","Relayer","Gasless Transaction","Abstraxn","SDK"],"description":"Abstraxn Solana Relayer SDK for building, signing, and relaying Solana transactions.","maintainers":[{"name":"shubham.antier","email":"shubham.singla@antiersolutions.com"},{"name":"sandeep_sj","email":"sandeepsj26899@gmail.com"},{"name":"abhi883","email":"abhishek.upadhyay@antiersolutions.com"},{"name":"pankaj829","email":"pankajdogra829@gmail.com"}],"readme":"# Abstraxn Solana Relayer SDK\n\n## Overview\n\nThe Abstraxn Solana Relayer SDK provides a class-based client to:\n\n- build native or SPL-token transfer transactions with one API\n- sign transactions with wallet adapters\n- submit signed transactions to sol-relayer-hub\n- fetch transaction status\n\nThis package targets the current Sol relayer API flow.\n\n## Installation\n\nUsing `npm`:\n\n```bash\nnpm install @abstraxn/solana-relayer\n```\n\nUsing `yarn`:\n\n```bash\nyarn add @abstraxn/solana-relayer\n```\n\n## Usage\n\n```typescript\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { SolanaRelayer } from \"@abstraxn/solana-relayer\";\n\nconst client = new SolanaRelayer({\n  relayerUrl: \"https://solana.abstraxn.com/api/v1/103?apikey=your_api_key\",\n});\n\nconst connection = new Connection(\"https://api.devnet.solana.com\", \"confirmed\");\n\nconst { tx, lastValidBlockHeight } = await client.buildTx({\n  connection,\n  sender: new PublicKey(\"<user-wallet-pubkey>\"),\n  to: new PublicKey(\"<recipient-pubkey>\"),\n  lamports: 1000000,\n});\n\nconst serializedUserSignedTx = await client.signTx({\n  wallet: walletAdapter,\n  transaction: tx,\n});\n\nconst submit = await client.sendTx({\n  signedTransaction: serializedUserSignedTx,\n  lastValidBlockHeight,\n});\n\nconst finalStatus = await client.getTxStatus({\n  txnId: submit.txnId,\n});\n\nconsole.log(finalStatus.status, finalStatus.signature);\n```\n\n### Token transfer with program overrides\n\n```typescript\nconst { tx, lastValidBlockHeight } = await client.buildTx({\n  connection,\n  sender: new PublicKey(\"<owner-pubkey>\"),\n  mint: new PublicKey(\"<mint-address>\"),\n  recipientOwner: new PublicKey(\"<recipient-owner-pubkey>\"),\n  amountUi: \"1.25\",\n  decimals: 6,\n  splTokenProgramId: new PublicKey(\"<token-program-id>\"), // required\n  splAssociatedTokenProgramId: new PublicKey(\"<ata-program-id>\"), // required\n});\n```\n\nWhen the mint returns **`jsonParsed`** from RPC, the SDK uses **on-chain `decimals`** for `TransferChecked` (the `decimals` argument above is a fallback). If the **sender or recipient ATA** is missing, the SDK prepends **`createAssociatedTokenAccount`** with the **reserved relayer** as payer before `transferChecked`.\n\n### Custom program transaction (no static SDK program dependency)\n\n```typescript\nimport { TransactionInstruction } from \"@solana/web3.js\";\n\nconst instructions: TransactionInstruction[] = [\n  // Build any instructions with your own programId/accounts/data\n];\n\nconst { tx, lastValidBlockHeight } = await client.buildTx({\n  connection,\n  sender: new PublicKey(\"<signer-pubkey>\"),\n  instructions,\n});\n```\n\nWhen an instruction needs the **relayer pubkey** before you can build (for example\n`createAssociatedTokenAccount` where the **payer** must be the fee payer), use\n`buildInstructions` instead of a static `instructions` array. Do not pass\n`instructions`, `transaction`, and `buildInstructions` together.\n\n```typescript\nconst { tx, lastValidBlockHeight } = await client.buildTx({\n  connection,\n  sender: new PublicKey(\"<signer-pubkey>\"),\n  buildInstructions: async ({ feePayer }) => {\n    // feePayer === reserved relayer; use as ATA rent payer for gasless create\n    return [/* TransactionInstruction[] */];\n  },\n});\n```\n\n## API\n\n- `buildTx(params)`\n- `signTx(params)`\n- `sendTx(params)`\n- `getTxStatus(params)`\n\n### Runtime flow\n\n1. `buildTx()` fetches an available relayer and reserves it.\n2. SDK stores `reservationToken` internally from that reservation.\n3. `signTx()` signs the built transaction with user wallet.\n4. `sendTx()` submits signed tx with stored reservation token.\n5. `getTxStatus()` fetches relay status by `txnId`.\n\n`sendTx()` must be called after a successful `buildTx()` call.\n`lastValidBlockHeight` should be the value returned by `buildTx()`.\n\n`relayerUrl` is configured once in `SolanaRelayerConfig`.\nSDK uses a single EVM-style method endpoint contract:\n- all operations are `POST <relayerUrl>`\n- request body carries `{ method, params, id, jsonrpc }`\n- methods used by SDK:\n  - `sol_getAvailableRelayer`\n  - `sol_sendTx` / `sol_sendProgrammeTx`\n  - `sol_getTxStatus`\n\n`buildTx(params)` accepts exactly one mutually exclusive branch:\n- native: `to + lamports`\n- token: `mint + recipientOwner + amountUi + decimals + splTokenProgramId + splAssociatedTokenProgramId`\n- custom: `instructions`, `buildInstructions`, or `transaction` (one of; `buildInstructions` excludes the other two)\n\n## Local Backend Test Flow\n\nUse this sequence to validate SDK integration against local `sol-relayer-hub`.\n\n### 1) Start backend services\n\nFrom `solana-relayer/sol-relayer-hub`:\n\n```bash\nnpm install\nnpm run start:dev\n```\n\nEnsure health is reachable:\n\n```bash\ncurl -sS http://localhost:3010/health\n```\n\n### 2) Build SDK\n\nFrom `abstraxn-sdks/solana-relayer`:\n\n```bash\nnpm install\nnpm run build\n```\n\n### 3) Wire FE to local SDK source (recommended for local development)\n\nIn `sol-relayer-test-fe/src/solana.ts`, import from:\n\n```ts\n../../../abstraxn-sdks/solana-relayer/src\n```\n\nThis avoids global npm link issues and always uses your latest local SDK code.\n\n### 4) Build FE\n\nFrom `solana-relayer/sol-relayer-test-fe`:\n\n```bash\nnpm install\nnpm run build\n```\n\n### 5) Runtime checks\n\n- `GET /relayer/available` should return one relayer or 404.\n- `POST <relayerUrl>` with invalid payload should return validation error.\n- FE happy path should produce:\n  - relay submit response with `txnId`\n  - terminal status (`confirmed` or `failed`) from status API.\n\nExample negative check:\n\n```bash\ncurl -sS -X POST \"http://localhost:3010/api/v1/103?apikey=dev_local_api_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"method\":\"sol_sendTx\",\"params\":[{\"serializedUserSignedTx\":\"abcd\",\"reservationToken\":\"token\",\"lastValidBlockHeight\":1}],\"id\":1,\"jsonrpc\":\"2.0\"}'\n```\n\n## Acceptance Criteria\n\n- SDK builds cleanly.\n- FE builds while importing SDK client methods.\n- Local hub endpoints are reachable.\n- Submit/status flow works via SDK methods in FE for at least one runtime scenario.\n","readmeFilename":"Readme.md"}