{"_id":"@arcanetech/privacy-sdk-relay","_rev":"4-54c00d0f1b40cf503584556d27e0ea6a","name":"@arcanetech/privacy-sdk-relay","dist-tags":{"pre":"0.2.0","latest":"0.2.3"},"versions":{"0.2.0":{"name":"@arcanetech/privacy-sdk-relay","version":"0.2.0","license":"UNLICENSED","_id":"@arcanetech/privacy-sdk-relay@0.2.0","maintainers":[{"name":"maxslt","email":"soultakov@gmail.com"},{"name":"slon21","email":"serafimgerasimov44@gmail.com"}],"homepage":"https://github.com/Polynom-Labs/privacy-layer-confidential-sdk#readme","bugs":{"url":"https://github.com/Polynom-Labs/privacy-layer-confidential-sdk/issues"},"dist":{"shasum":"d5ac7c785ae95a2f2ab858f263ddedb46f09b949","tarball":"https://registry.npmjs.org/@arcanetech/privacy-sdk-relay/-/privacy-sdk-relay-0.2.0.tgz","fileCount":5,"integrity":"sha512-TLWaEfz3XpdvroqpIAziSwoAB1X2IOv/Xq68qK0RqL1AHGt0BUU+9YFcUa9Dc+F2d5veEwQplAHa7N7bRFJ+nQ==","signatures":[{"sig":"MEUCIQDLyQ35IRxkCfFr/vXXW4/rhRU9zGLrmxhu7gnM5F0TQwIgJQW1URjYVnXoTY5uBHXrVLHhAFS53C6Tr3iXCdklo9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99566},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1e55ab6205ba1fc4545a359f553eb0d04862c108","scripts":{"build":"tsup","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"},"_npmUser":{"name":"slon21","email":"serafimgerasimov44@gmail.com"},"repository":{"url":"git+https://github.com/Polynom-Labs/privacy-layer-confidential-sdk.git","type":"git","directory":"packages/relay"},"_npmVersion":"11.16.0","description":"Chain-agnostic protocol relay runtime: admission, polling, retry, and fallback over caller-supplied ports","directories":{},"sideEffects":false,"_nodeVersion":"24.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/privacy-sdk-relay_0.2.0_1789137026526_0.7985062029047101","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@arcanetech/privacy-sdk-relay","version":"0.2.1","license":"UNLICENSED","_id":"@arcanetech/privacy-sdk-relay@0.2.1","maintainers":[{"name":"maxslt","email":"soultakov@gmail.com"},{"name":"slon21","email":"serafimgerasimov44@gmail.com"}],"homepage":"https://github.com/Polynom-Labs/privacy-layer-confidential-sdk#readme","bugs":{"url":"https://github.com/Polynom-Labs/privacy-layer-confidential-sdk/issues"},"dist":{"shasum":"7a6d7f1a9c89d1e038b0158da40918067f7b3a7f","tarball":"https://registry.npmjs.org/@arcanetech/privacy-sdk-relay/-/privacy-sdk-relay-0.2.1.tgz","fileCount":5,"integrity":"sha512-5b4vA/AXhTeY7I3U3bZjZ+gk6R/+XJpPOX0GWUTi7i1NFX5FVbSF5nlZ6i7LtQ0yxl+Hb28ITRG7mxhgFVvnsQ==","signatures":[{"sig":"MEYCIQDdlBBanu9vFP6Zvhsvs/uxwfRWFYjGxE2yj3x0gf49IwIhAMXtq2vSeiQQknkK+rhqC0fuHEeVd9Bj8sefALUrjKWR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcanetech%2fprivacy-sdk-relay@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":99566},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"fe0ec47df45024c2bbab373983e5be5d99c3274f","scripts":{"build":"tsup","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efc5b551-9676-4beb-91fd-d24caf6723be"}},"repository":{"url":"git+https://github.com/Polynom-Labs/privacy-layer-confidential-sdk.git","type":"git","directory":"packages/relay"},"_npmVersion":"11.19.0","description":"Chain-agnostic protocol relay runtime: admission, polling, retry, and fallback over caller-supplied ports","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/privacy-sdk-relay_0.2.1_1789142923380_0.10603224356065355","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@arcanetech/privacy-sdk-relay","version":"0.2.2","license":"UNLICENSED","_id":"@arcanetech/privacy-sdk-relay@0.2.2","maintainers":[{"name":"maxslt","email":"soultakov@gmail.com"},{"name":"slon21","email":"serafimgerasimov44@gmail.com"}],"homepage":"https://github.com/Polynom-Labs/privacy-layer-confidential-sdk#readme","bugs":{"url":"https://github.com/Polynom-Labs/privacy-layer-confidential-sdk/issues"},"dist":{"shasum":"b7c2527da3ba9018c9356c8e5ec01e2fe6f3833c","tarball":"https://registry.npmjs.org/@arcanetech/privacy-sdk-relay/-/privacy-sdk-relay-0.2.2.tgz","fileCount":5,"integrity":"sha512-L6LyUGer7X65ja/GxL+qdYfaZ6WPJWotZWvS8RMiNKBkZwgAGu9PgIxyNAkEjnLDQdofiU3Rn/dB1pNP8VV3Lg==","signatures":[{"sig":"MEUCIDLo20+tGaMI/qfQbR+5icBmmsN9d+NW1Q67DID9dZuhAiEA0nn88wH+etZXzp2owIrsw3saGSoLg7h/Ik9sCvgjq+4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDitdGrAwN7J9ssJqxMOshPcVLv3qu3IuBt2E5X2/DpZQIgAVmYWATATeehEhyjB+ilrPdf1XSfJpVqNbAbt1dFSTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcanetech%2fprivacy-sdk-relay@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":100588},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"75f40491054d8687bfaa637db309023744ac93a7","scripts":{"build":"tsup","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:efc5b551-9676-4beb-91fd-d24caf6723be"}},"repository":{"url":"git+https://github.com/Polynom-Labs/privacy-layer-confidential-sdk.git","type":"git","directory":"packages/relay"},"_npmVersion":"11.19.0","description":"Chain-agnostic protocol relay runtime: admission, polling, retry, and fallback over caller-supplied ports","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/privacy-sdk-relay_0.2.2_1789430766943_0.19914443307347107","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"_id":"@arcanetech/privacy-sdk-relay@0.2.3","bugs":{"url":"https://github.com/arcanetechhq/privacy-layer-confidential-sdk/issues"},"dist":{"shasum":"abe4cbafc69fb3a3bb341c20c8a27013e6291d87","tarball":"https://registry.npmjs.org/@arcanetech/privacy-sdk-relay/-/privacy-sdk-relay-0.2.3.tgz","fileCount":5,"integrity":"sha512-zJe7dgxTdkJXDJDe8kQEkqT9kqVA2aiSraSUQ3bPLBdxbVQjo9fFp7cCzBF79cbBSRVR4FqV1S6bitvmA/G5AQ==","signatures":[{"sig":"MEUCIGjOO7uRFjdhbl6M7BLmlhWaZ+nFoLYa24G5+UuSoXkJAiEAjwcz5+SyPJt8v29reIYBTyLcTiE+3mOrsx/ie/KJeFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFJ7UsgBj5p6IClZAVfu6lbot+mncaXRmDjTVwZcJXoVAiBBtawkYYLus2tlXuNwuTAwehVWI6ZGuUCOMcWs2hrqRA=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcanetech%2fprivacy-sdk-relay@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":100587},"main":"./dist/index.js","name":"@arcanetech/privacy-sdk-relay","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ebac5989ff957f03f4bd1c3a502c68ef4e4ffc81","license":"UNLICENSED","scripts":{"build":"tsup","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"},"version":"0.2.3","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c4bbaef2-412c-41db-8142-856b7261db7e"}},"homepage":"https://github.com/arcanetechhq/privacy-layer-confidential-sdk#readme","repository":{"url":"git+https://github.com/arcanetechhq/privacy-layer-confidential-sdk.git","type":"git","directory":"packages/relay"},"_npmVersion":"11.19.0","description":"Chain-agnostic protocol relay runtime: admission, polling, retry, and fallback over caller-supplied ports","directories":{},"maintainers":[{"name":"maxslt","email":"soultakov@gmail.com"},{"name":"slon21","email":"serafimgerasimov44@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/privacy-sdk-relay_0.2.3_1789771111489_0.4257085943930188"}}},"time":{"created":"2026-09-11T14:30:26.281Z","modified":"2026-09-18T22:38:31.971Z","0.2.0":"2026-09-11T14:30:26.661Z","0.2.1":"2026-09-11T16:08:43.527Z","0.2.2":"2026-09-15T00:06:07.037Z","0.2.3":"2026-09-18T22:38:31.569Z"},"bugs":{"url":"https://github.com/arcanetechhq/privacy-layer-confidential-sdk/issues"},"license":"UNLICENSED","homepage":"https://github.com/arcanetechhq/privacy-layer-confidential-sdk#readme","repository":{"url":"git+https://github.com/arcanetechhq/privacy-layer-confidential-sdk.git","type":"git","directory":"packages/relay"},"description":"Chain-agnostic protocol relay runtime: admission, polling, retry, and fallback over caller-supplied ports","maintainers":[{"name":"maxslt","email":"soultakov@gmail.com"},{"name":"slon21","email":"serafimgerasimov44@gmail.com"}],"readme":"# @arcanetech/privacy-sdk-relay\n\nChain-agnostic protocol relay runtime for Arcane private payment flows.\n\n## Overview\n\nThis package owns admission, lifecycle polling, retry, and consented direct-submit fallback for prepared private operations. Callers supply five required ports; `relayApi` and `relayConfig` are optional and enable Protocol Relay. The runtime never inspects opaque package payloads and has no Stellar, Soroban, or zero-knowledge dependencies.\n\nThe ports are:\n\n- `store` — pending-operation persistence (survives reload)\n- `submitDirect` — caller-supplied wallet-signed submission (not serializable; after reload only polling and retry remain)\n- `finalizeLocalState` — apply local record updates after success\n- `drainDeliveries` — deliver output notes after success\n- `persistUserTransaction` — record the user-visible transaction after success\n- `relayConfig` / `relayApi` — optional origin and transport used to admit a request, read lifecycle status, and retry an attempt\n\n## Quick example\n\n```ts\nimport {\n  createRelayApi,\n  resolveRelayOrigin,\n  submitAndAwaitPrivateOperation,\n  throwIfRelayUnsuccessful,\n  type ProtocolRelayPorts,\n} from '@arcanetech/privacy-sdk-relay';\n\nconst origin = resolveRelayOrigin(relayOriginFromEnv);\nconst ports: ProtocolRelayPorts = {\n  store,\n  submitDirect,\n  finalizeLocalState,\n  drainDeliveries,\n  persistUserTransaction,\n  ...(origin ? { relayConfig: { origin }, relayApi: createRelayApi({ origin }) } : {}),\n};\n\nconst result = await submitAndAwaitPrivateOperation({ ports, operation });\nconst { txId } = throwIfRelayUnsuccessful(result);\n```\n\nRelaying is off until `relayConfig.origin` is set. An unset origin Direct-submits even when the caller marks the operation as `relay`, and the relayer is never contacted. `origin` may be a host or an origin plus path prefix such as `https://payments.example/api`.\n\nSubstitute `relayApi` (or the optional `fetch` on `createRelayApi`) in tests. Direct submission stays a caller-supplied port because it closes over a prepared operation that cannot be serialized.\n\n## Public API boundaries\n\n- Bind ports in the application; keep chain-specific finalize, delivery, and persist adapters there.\n- Pass the opaque relay package through unchanged. Routing follows the caller-supplied `submissionPath`; this package does not inspect deposit amounts or display kind.\n- This package owns the wire vocabulary: lifecycle statuses (`RELAY_STATUS`), public/HTTP reason codes, and JSON serialization (`serializeRelayPackage` / `deserializeRelayPackage`). Serialization copies package fields only and never inspects proof or public-signal bytes.\n- After a reload, resume with `resumePendingOperations` and `retryFailedRelayAttempt`. Direct fallback requires an in-memory submitter the caller registered before unload.\n\n## Related docs\n\n- [Root README](../../README.md)\n- [Packages](../../docs/overview/packages.mdx)\n","readmeFilename":"README.md"}