Welcome to Newton SDK
TypeScript SDK for the Newton Protocol — a decentralized policy engine for onchain transaction authorization, built as an EigenLayer AVS.
Documentation
Prerequisites
Installation
npm install @magicnewton/newton-protocol-sdk viem
Exports
The SDK provides several entry points:
import { newtonPublicClientActions } from '@magicnewton/newton-protocol-sdk';
import { createPublicClient, webSocket } from 'viem';
import { sepolia } from 'viem/chains';
const newtonPublicClient = createPublicClient({
chain: sepolia,
transport: webSocket('wss://eth-sepolia.g.alchemy.com/v2/YOUR_KEY'),
}).extend(
newtonPublicClientActions({
policyContractAddress: '0xpolicyContractAddress',
}),
);
newtonPublicClient.getTaskStatus({ taskId: '0x...' });
import { newtonWalletClientActions } from '@magicnewton/newton-protocol-sdk';
import { createWalletClient, webSocket } from 'viem';
import { sepolia } from 'viem/chains';
import { privateKeyToAccount } from 'viem/accounts';
const newtonWalletClient = createWalletClient({
chain: sepolia,
transport: webSocket('wss://alchemyWebsocketUrl'),
account: privateKeyToAccount('0xYOUR_PRIVATE_KEY'),
}).extend(newtonWalletClientActions({ apiKey: '<YOUR_API_KEY>' }));
newtonWalletClient.evaluateIntentDirect({...})
Development
Building the SDK
The SDK uses Rollup for bundling and supports both CommonJS and ES modules.
pnpm build
This will generate the following output in the dist/ directory:
dist/cjs/ - CommonJS modules
dist/es/ - ES modules
dist/types/ - TypeScript declaration files
Development Build
For development with watch mode:
pnpm build --watch
Type Checking
The project includes TypeScript configuration for type checking:
npx tsc --noEmit
Linting
pnpm lint
Privacy Module
The SDK includes a privacy module for client-side HPKE encryption used in privacy-preserving policy evaluation. Key exports:
createSecureEnvelope — HPKE encrypt plaintext into a SecureEnvelope (offline, zero network calls)
getPrivacyPublicKey — fetch the gateway's X25519 HPKE public key
uploadEncryptedData — encrypt and upload data to the gateway in one call
uploadSecureEnvelope — upload a pre-built SecureEnvelope to the gateway
generateSigningKeyPair — generate Ed25519 key pair for privacy signatures
storeEncryptedSecrets — HPKE-encrypt plaintext secrets and upload them for PolicyData
signPrivacyAuthorization — compute dual Ed25519 signatures for privacy-enabled tasks
uploadConfidentialData — HPKE-encrypt and upload confidential data (blacklists, allowlists, etc.) for a ConfidentialDataRegistry domain
getConfidentialData — retrieve an HPKE-encrypted confidential data envelope by its data reference ID
See the SDK Reference for full API documentation.
Identity Module
The SDK includes an identity module for registering identity data and managing identity-to-PolicyClient links on the IdentityRegistry. Key exports:
registerIdentityData -- store identity data reference on-chain with gateway co-signature
identityDomainHash -- compute the bytes32 domain identifier from a name (e.g., identityDomainHash("kyc"))
linkIdentityAsSignerAndUser -- link identity when caller is both owner and user
linkIdentityAsSigner -- link identity as owner with counterparty signature
linkIdentityAsUser -- link identity as user with counterparty signature
linkIdentity -- link identity as 3rd party with dual signatures
unlinkIdentityAsSigner -- unlink identity as owner
unlinkIdentityAsUser -- unlink identity as user
Testing
The project uses Vitest for unit testing:
pnpm test
pnpm test:watch
pnpm test:coverage
Testing Locally Built SDK
To test the locally built SDK from a different local project, you can use one of these methods:
Method 1: Using pnpm link (Recommended)
-
In the Newton SDK project directory:
pnpm build
pnpm link --global
-
In your test project directory:
pnpm link --global @magicnewton/newton-protocol-sdk
-
Import and use in your test project:
import { newtonWalletClientActions } from '@magicnewton/newton-protocol-sdk';
-
When you make changes to the SDK:
pnpm build
Method 2: Using local file path
-
In your test project's package.json, add:
{
"dependencies": {
"@magicnewton/newton-protocol-sdk": "file:../path/to/newton-protocol-sdk"
}
}
-
Install dependencies:
pnpm install
-
Import and use normally:
import { newtonWalletClientActions } from '@magicnewton/newton-protocol-sdk';
Method 3: Using npm link (Alternative)
If you prefer npm over pnpm:
-
In the Newton SDK project directory:
npm run build
npm link
-
In your test project directory:
npm link @magicnewton/newton-protocol-sdk
Unlinking
When you're done testing:
pnpm unlink @magicnewton/newton-protocol-sdk
pnpm unlink --global
Development Workflow with Local Testing
- Set up the link (one-time setup)
- Make changes to the SDK source code
- Rebuild:
pnpm build (or pnpm build --watch for auto-rebuild)
- Test immediately in your linked project
- Iterate on changes
- Unlink when done testing
Troubleshooting Local Testing
- Module not found errors: Ensure the SDK is built (
pnpm build) before linking
- Type errors: The TypeScript declarations are generated in
dist/types/
- Import issues: Make sure your test project can resolve the linked package
- Version conflicts: Unlink and reinstall if you encounter dependency conflicts
Build Output
The build process generates multiple module formats:
- CommonJS:
dist/cjs/ - For Node.js environments
- ES Modules:
dist/es/ - For modern bundlers and browsers
- TypeScript:
dist/types/ - For development and IDE support
Development Workflow
- Install dependencies:
pnpm install
- Make changes to source files in
src/
- Build:
pnpm build (or pnpm build --watch for development)
- Lint:
pnpm lint to check code quality
- Type check:
pnpm typecheck for TypeScript validation
- Quality checks:
pnpm check:all to validate exports and bundle size
Troubleshooting
Clean Build
If you encounter build issues, try cleaning and rebuilding:
pnpm clean
pnpm install
pnpm build
TypeScript Issues
Ensure TypeScript is properly configured:
npx tsc --noEmit
Linting Issues
Auto-fix common linting problems:
pnpm lint
Release Process
This repository uses automated releases with the auto tool for both production releases (master branch) and canary releases (pull requests).
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Ensure linting passes:
pnpm lint
- Ensure types check:
pnpm typecheck
- Ensure the build passes:
pnpm build
- Run quality checks:
pnpm check:all
- Run tests:
pnpm test
- Submit a pull request
License
Apache License 2.0 - see LICENSE file for details.