Skip to content

Redeploy testnet with chain ID 420690 and update all contracts#45

Open
prophet10x wants to merge 74 commits intoJejuNetwork:mainfrom
prophet10x:fresh-deploy
Open

Redeploy testnet with chain ID 420690 and update all contracts#45
prophet10x wants to merge 74 commits intoJejuNetwork:mainfrom
prophet10x:fresh-deploy

Conversation

@prophet10x
Copy link
Contributor

@prophet10x prophet10x commented Feb 21, 2026

Summary

  • Update chain ID from 2151908 to 420690 across all deployment configs, genesis files, rollup configs, docker-compose, scripts, and documentation
  • Fix BasePaymaster v0.9 compatibility in LiquidityPaymaster and MultiTokenPaymaster (2-arg constructor, entryPoint() function calls)
  • Update contracts.json testnet section with all 70+ deployed contract addresses
  • Add TESTNET-DEPLOYMENT.md with comprehensive deployment documentation
  • Update e2e test scripts with chain ID 420690 and new contract addresses
  • Add e2e-paymaster-elizaos.mjs for JEJU/ELIZAOS token gas sponsorship testing
  • Fix DWS frontend to use relative URLs (avoids CORS/IP issues)
  • Add on-chain ComputeRegistry integration to Tauri node
  • Deploy Blockscout block explorer at /explorer/ with Docker Compose config and documentation
  • Update all explorer URLs across codebase to use config-driven values

Block Explorer

Blockscout deployed at https://jeju-testnet.fartbag.fun/explorer/:

  • Docker Compose config: packages/deployment/docker/blockscout-explorer.compose.yaml
  • Full documentation in TESTNET-DEPLOYMENT.md
  • Explorer URLs updated in services.json, rpc-chains.ts, networks.ts, Settings.tsx

Deployed Contracts (Chain ID 420690)

All core contracts deployed on Jeju Testnet at https://jeju-testnet.fartbag.fun/:

  • Tokens: JEJU/ELIZAOS, NetworkUSDC
  • JNS: Registry, Resolver, Registrar, ReverseRegistrar
  • DWS: StorageManager, WorkerRegistry, CDNRegistry, RepoRegistry, PackageRegistry
  • Registries: Identity, Reputation, Validation, Compute, DAO, Service
  • Moderation: BanManager, ReputationLabelManager, UserBlockRegistry
  • Paymaster Stack: LiquidityPaymaster, MultiTokenPaymaster, PaymasterFactory, CreditManager
  • ERC-4337: EntryPoint v0.7 + v0.9, SimpleAccountFactory
  • Governance: Standard/Critical/Emergency Timelocks
  • OIF: SolverRegistry, SimpleOracle, InputSettler, OutputSettler
  • Federation: NetworkRegistry, RegistryHub, FederatedIdentity/Liquidity/Solver
  • Decentralization: SequencerRegistry, ThresholdBatchSubmitter, DisputeGameFactory
  • X402: Facilitator, IntentBridge

Test plan

  • Verify curl https://jeju-testnet.fartbag.fun/ returns chainId 0x66b32 (420690)
  • Verify faucet at https://jeju-testnet.fartbag.fun/faucet/ distributes JEJU/ELIZAOS tokens
  • Block explorer loads at https://jeju-testnet.fartbag.fun/explorer/
  • Explorer API returns data (/explorer/api/v2/stats)
  • DWS Settings page links to correct explorer URL
  • Run e2e-paymaster-elizaos.mjs against testnet
  • Verify DWS portal loads without CORS errors

🤖 Generated with Claude Code

ProphetX10 and others added 30 commits February 21, 2026 15:29
- Update chain ID from 2151908 to 420690 across all deployment configs,
  genesis files, rollup configs, docker-compose files, scripts, and docs
- Fix BasePaymaster v0.9 compatibility in LiquidityPaymaster and
  MultiTokenPaymaster (2-arg constructor, entryPoint() function calls)
- Update contracts.json testnet section with all deployed addresses:
  registries, moderation, payments, OIF, EIL, federation, sequencer,
  governance timelocks, fees, and more
- Update e2e test scripts with chain ID 420690 and new contract addresses
- Add e2e-paymaster-elizaos.mjs for JEJU/ELIZAOS token gas sponsorship
- Add TESTNET-DEPLOYMENT.md with comprehensive deployment documentation
- Fix DWS frontend to use relative URLs (avoids CORS/IP issues)
- Add on-chain ComputeRegistry integration to Tauri node

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract AMM/swap functionality into CrossChainSwapRouter (4.3KB) and
remove heavy view functions (getBestPaymentTokenForApp, checkAppPreference,
getTokensInfo, getPaymasterStatus, protocol fee claiming).

Before: 26.7KB (exceeded 24.576KB limit, could not deploy)
After:  22.4KB (well within limit, deployable)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rFactory

Deployed to Jeju Testnet (chain ID 420690):
- CrossChainPaymaster: 0x38a024C0b412B9d1db8BC398140D00F5Af3093D4
- CrossChainSwapRouter: 0x525C7063E7C20997BaaE9bDa922159152D0e8417
- MultiTokenPaymaster: 0x5fc748f1FEb28d7b76fa1c6B07D8ba2d5535177c
- PaymasterFactory: 0xB82008565FdC7e44609fA118A4a681E92581e680

CrossChainPaymaster refactored from 26.7KB to 20.5KB by extracting
AMM/swap into CrossChainSwapRouter. All 3 previously undeployable
contracts now compile and deploy successfully.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The PRAGMA table_info query doesn't work reliably through the SQLit
adapter, returning empty rows even when the table exists. This caused
the env column migration to always run, failing on tables that already
have the column from CREATE TABLE.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Change getContracts() to warn and fallback to testnet instead of
  throwing when mainnet contracts are not deployed
- Add Cache-Control: no-cache to DWS frontend HTML responses

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… proxy

The /rpc/proxy route doesn't exist - the actual RPC proxy is at
POST /rpc/:chainId. Use getRpcUrl() which returns the correct
testnet RPC (https://jeju-testnet.fartbag.fun/).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The 'dws.apps.jeju' JNS name isn't registered yet, causing login to
fail with "App not found". Disable decentralized mode so wallet
sign-in works directly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- configureOAuth3RouterConfig now reads OAUTH3_AGENT_URL env var
- Settings page register agent link points to testnet gateway

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The OAUTH3_AGENT_URL constant was captured at module import time,
before configureOAuth3RouterConfig() was called. Replace with a
getter function so it reads the configured value lazily.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Root node_modules has @noble/hashes v2 which renamed sha256->sha2,
but browser deps (viem, ox, @coinbase/wallet-sdk) need v1 paths.
Resolve all @noble/hashes imports to v1 from ox's nested node_modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
getServicesConfig() omitted graphqlCors from the returned indexer
object even though it existed in services.json and the schema.
This caused getServiceUrl('indexer', 'graphqlCors') to throw.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ulateRequiredStake

The deployed IdentityRegistry doesn't have calculateRequiredStake.
Default to 0n so registration can proceed on testnet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Update ABI to match deployed contract (tier-based staking, not
  token-address-based calculateRequiredStake)
- Add StakeTier enum (NONE/SMALL/MEDIUM/HIGH) matching contract
- Support free registration (register) and staked (registerWithStake)
- Use ELIZAOS token for staking instead of ETH
- Store a2a endpoint as contract metadata entry
- Replace token selector with tier selector in form

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add IdentityRegistry config, list 4 undeployed contracts,
and add running services (faucet, gateway, DWS, OAuth3).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Redeployed IdentityRegistry to 0x8A93d247134d91e0de6f96547cB0204e5BE8e5D8
with updated stake amounts (1000x increase: 1/10/100 ELIZAOS for Small/
Medium/High tiers). Updated gateway contracts config, registration form
tier descriptions, and TESTNET-DEPLOYMENT.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Changed STAKE_SMALL/MEDIUM/HIGH from constants to mutable state variables
with a governance-only setStakeTiers() setter. Redeployed to
0x40918Ba7f132E0aCba2CE4de4c4baF9BD2D7D849 with ELIZAOS token support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ity registry address

detectNetworkFromHostname() didn't recognize jeju-testnet.fartbag.fun,
so it fell back to localnet (127.0.0.1:6546). Also updated contracts.json
testnet registry.identity to new governance-adjustable deployment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
OAuth3 is now running on Oracle server port 4200, proxied via nginx
at /oauth3/. Updated services.json testnet oauth3.api URL from
non-existent auth.testnet.jejunetwork.org to the real endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The wallet auth endpoint rejects sign-in messages from domains not in
its allowlist. Added jeju-testnet.fartbag.fun so gateway users can
authenticate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements the previously-commented USE_MEMORY_STATE=true env var to use
Map-based in-memory storage instead of SQLit for all state stores (sessions,
clients, auth codes, refresh tokens, OAuth states, passkeys, reports).
Enables OAuth3 to run on servers without a SQLit database.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…LIZAOS→JEJU in UI

- Make IPFS session storage non-blocking in OAuth3 client so login
  succeeds even when DWS storage is unavailable
- Update testnet services.json: point indexer/DWS/storage URLs to
  jeju-testnet.fartbag.fun instead of non-existent jejunetwork.org subdomains
- Update DWS_ENDPOINTS in auth config for testnet
- Rename ELIZAOS to JEJU in gateway stake tier descriptions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- FaucetTab: check registration via IdentityRegistry contract when
  faucet API is unavailable, with static fallback for faucet info
- FaucetTab: fix "Register Now" link to use React Router Link
  (respects BrowserRouter basename)
- RegisteredAppsList: read registered agents directly from
  IdentityRegistry contract instead of requiring GraphQL indexer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Read agents() mapping for tier, stakedToken, stakedAmount, registeredAt
- Resolve JEJU token address to "JEJU" name in all displays
- Read tokenURI for agent name/description in detail modal
- Show "JEJU" instead of "ETH" in browse cards and detail modal
- Fix deposit date (was always 1/1/1970, now reads registeredAt)
- Show "Faucet service not running" message when backend unavailable

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace KMS-based signing with direct viem wallet client using
DEPLOYER_PRIVATE_KEY for testnet. Add USE_MEMORY_STATE support for
in-memory faucet cooldown tracking. Create minimal faucet-server.ts
entry point that can run independently on port 4014.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deploy NodeStakingManager contract at 0x5FeaeBfB4439F3516c74939A9D04e95AFE82C4ae
on testnet. Fix gateway build script to use /gateway/ base path for
asset URLs so they resolve correctly behind nginx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…uencer info

Add NodeStakingManager contract address, Faucet API documentation,
Gateway portal features, and sequencer architecture notes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simplified node staking without TokenRegistry/PaymasterFactory/PriceOracle
dependencies. Same ABI as NodeStakingManager for UI compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tracts

- ITokenRegistry: isRegistered() -> isSupported() (matches TokenRegistry)
- IPaymasterFactory: hasPaymaster() -> isDeployed() (matches PaymasterFactory)
- ISimplePriceOracle -> IPriceOracle: getPrice returns (uint256, uint256)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New address: 0x32EEce76C2C2e8758584A83Ee2F522D4788feA0f
Also set JEJU price ($1) on PriceOracle and deployed JEJU paymaster.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ProphetX10 and others added 30 commits February 22, 2026 02:49
- Forge scripts use PRIVATE_KEY not DEPLOYER_PRIVATE_KEY
- Pass deployed contract addresses as env vars between phases
  so DWS can find IdentityRegistry, BanManager, etc.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ntory

- Updated all contract addresses from fresh deployment with new deployer key
- Added comprehensive "Not Yet Deployed" section with reasons for each
- Added "Contracts Without Deploy Scripts" section (~30 contract categories)
- Deploy script: added all missing phases (core, compute, dws-infra, etc.)
- Deploy script: fixed RPC URL and env var passing between phases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
97 contracts deployed with new deployer key (0x86d240...).
Added new sections: tee, da, rpc, content, entryPoint.
Updated all existing sections with fresh addresses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New scripts: DeployStaking, DeployVPN, DeployEscrow, DeployContainers,
  DeployMarketplace, DeployFeeDistributor
- Fix DWSInfra/Governance: remove vm.writeFile calls causing fs permission errors
- Add 8 new phases to orchestrator: staking, vpn, escrow, containers,
  marketplace, fee-distributor, uniswap

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deployed contracts:
- DWSInfra: ProviderRegistry, Billing, ServiceProvisioning
- Governance: Standard/Critical/Emergency Timelocks
- Staking: NodeStakingManager, AutoSlasher, ServiceStaking
- VPN: VPNRegistry
- Escrow: TradeEscrow
- Containers: ContainerRegistry
- Marketplace: General Marketplace
- FeeDistributor + AirdropManager
- AppFeeRegistry

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Deploy new EntryPoint at 0x922D6956C99E12DFeB3224DEA977D0939758A1Fe
- Deploy SimpleAccountFactory at 0x5081a39b8A5f0E35a8D959395a630b68B74Dd30f
- Update e2e-bundler test with correct addresses
- Add accountAbstraction section to testnet contracts.json

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use CONTRACTS.jeju from centralized config instead of hardcoded
localnet address.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add try/catch/finally to LoginButton.handleClick so the button
  resets from "Connecting..." state even if login() throws
- Use CONTRACTS.jeju from centralized config instead of hardcoded
  localnet address in useRegistry.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Show MultiTokenBalanceDisplay only when authenticated (OAuth3),
  not just when wallet is connected (wagmi persists connections)
- Remove hardcoded localnet JEJU token address in RegisteredAppsList,
  use CONTRACTS.jeju from centralized config

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Call onSuccess even when login fails so modal closes (wallet may
  be connected even if OAuth3 session creation failed)
- Show token balance only when authenticated, not just connected
- Use CONTRACTS.jeju from config in RegisteredAppsList

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds verify-contracts.ts that checks all contracts.json addresses have
bytecode on-chain via getCode(), with --gateway-check flag to detect
stale gateway builds with baked-in old addresses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…alized config

Three bugs all rooted in stale hardcoded addresses:
- RegisterAppForm: hardcoded JEJU token address (Foundry default) broke staking
- lib/config/contracts.ts: entire file of wrong localnet addresses broke token list
- DeployPaymaster: blocked deploy when TokenRegistry not deployed on testnet

Now all addresses sourced from @jejunetwork/config (contracts.json).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…dle audit

New checks:
- Source audit: scans gateway source for hardcoded addresses not in contracts.json
- Functional checks: calls key contract functions to verify ABI compatibility
- Bundle audit: flags unknown addresses in built JS bundle
- Better summary with total error count

This would have caught the hardcoded JEJU token address bug.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TokenRegistry ABI:
- isRegistered → isSupported (matching deployed contract)
- getAllTokens → getSupportedTokens
- getTokenInfo struct: was {token,symbol,name,decimals,priceOracle,enabled}
  now: {supported,priceFeed,minMargin,maxMargin,registrant,registeredAt}
- Added registerToken and registrationFee functions

PaymasterFactory ABI:
- deployPaymaster args: was (owner,token,salt) now (token,feeMargin,operator)
- getDeployedPaymasters → getDeployedTokens
- Added proper Deployment struct with all fields

Config:
- tokenRegistry now reads from payments.tokenRegistry (was registry.token)
- TokenList reads name/symbol/decimals from ERC20 contract directly

Also registered JEJU token in TokenRegistry on testnet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Addresses verified to have no code deployed at their locations.
They will be redeployed with fresh addresses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deployed via forge scripts and forge create on Oracle:
- TEE: UnifiedAttestationVerifier, TEERegistry
- RPC: MultiChainRPCRegistry, BandwidthRewards, UsageRewardDistributor
- DWS: DWSMarketplace, ManagedDatabaseRegistry, CronTriggerRegistry
- Training: TrainingCoordinator/Rewards/Registry, NodePerformanceOracle
- Chainlink: VRFCoordinator, AutomationRegistry
- Commerce: AuthCaptureEscrow
- Governance: TimelockController (standard)
- Bazaar: PredictionMarket/Oracle, SimpleCollectible, TokenFactory
- Perps: PerpetualMarket, MarginManager, InsuranceFund, PerpsPriceOracle
- Liquidity: LiquidityVault, LiquidityRouter, MultiServiceStakeManager,
  FederatedLiquidity
- Moderation: EvidenceRegistry, ReportingSystem, UserBlockRegistry
- Payments: LiquidityPaymaster
- Compute: WorkerRegistry, CronTriggerRegistry, ServiceStaking
- CDN: CDNBilling, CDNRegistry (nodeRegistry)
- DeFi: SimplePoolManager, SimpleSwapRouter, XLPPositionManager
- Security: SecurityBountyRegistry
- Registry: OAuth3AppRegistry, TokenFactory
- SQLit: SQLitIdentityRegistry
- Agents: RoomRegistry
- EIL: CrossChainSwapRouter

19 entries remain empty (no source code exists).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DWSMarketplace, SQLitIdentityRegistry, and governance TimelockController
were reported as deployed by forge script but actually had null tx hashes
(wrong sender used). Re-deployed via forge create with correct private key.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prevents false positives for WETH/USDC addresses on Ethereum mainnet,
Sepolia, and Arbitrum referenced in gateway networks.ts and x402 chains.ts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split heavy logic into 3 internal libraries (ModerationReputationLib,
ModerationVotingLib, ModerationRewardsLib) and moved complex view
functions to a separate ModerationMarketplaceViews contract.

Contract size: 23,975 bytes (was ~27KB, limit is 24,576).
All 93 moderation tests pass. Deployed to testnet at
0x5FeaeBfB4439F3516c74939A9D04e95AFE82C4ae.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- TokenSelector: Use React portal for dropdown to avoid overflow:hidden clipping
- TokenSelector: Replace hardcoded 'white' backgrounds with CSS variables for dark mode
- DeployPaymaster: Add 60s timeout warning for stuck transactions (nonce gap)
- DeployPaymaster: Add cancel button and error display during deployment
- usePaymasterFactory: Expose error and reset from useTypedWriteContract

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Root cause: the previous LoginButton try/catch/finally fix only handles
rejections, not hanging promises. Two paths could hang indefinitely:

1. Provider init: client.initialize() does RPC/JNS discovery calls with
   no timeout. If the L2 RPC hangs, isLoading stays true forever and the
   header button shows "Connecting..." before the modal even opens.
   Fix: wrap in Promise.race with 10s timeout.

2. Login fetch: loginWithWallet/passkey/farcaster/OAuth fetch calls to
   the TEE agent had no AbortSignal timeout. If the agent is slow or
   unreachable, the login promise hangs and finally{} never runs.
   Fix: add AbortSignal.timeout(15000) to all auth fetch calls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The comment said "non-blocking" but the code used `await` on
storage.storeSession() which uploads to IPFS. When IPFS is slow or
unreachable, this hangs the entire login() promise, keeping the
LoginButton stuck on "Connecting..." indefinitely even though the
OAuth3 session was already successfully created.

Fix: fire-and-forget the storage call with .catch() instead of await.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deployed Blockscout on Oracle server (Docker) connected to op-geth.
Updated all hardcoded explorer URLs to use config-driven URLs pointing
to https://jeju-testnet.fartbag.fun/explorer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…h check

- Dashboard counts 'available' services as healthy (was only counting 'healthy')
- KMS health check now uses local URL since it runs in-process
- Show correct status colors for 'available' services in expanded view

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- HardwareDetection: fetch system info from server /health/system endpoint
  instead of browser APIs (was showing client's Mac, not the server)
- Add /health/system API endpoint returning OS, CPU, memory, uptime
- Expand node registration services from 6 to 21 (workers, agents, git,
  pkg, ci, s3, da, email, lb, indexer, scraping, security, observability, etc.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add diskTotalGb/diskFreeGb to /health/system endpoint using fs.statfsSync
- Display disk space in HardwareDetection requirements and server details
- Change Secure Context from 'fail' to 'warning' for HTTP (expected on direct IP)
- Differentiate Memory (Database icon) and Disk (HardDrive icon)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DWS app router was extracting first subdomain label and trying to find
a deployed app. Added known DWS dashboard hostnames to skip list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The top-right Sign In button used OAuth3 auth exclusively, which requires
the OAuth3 agent to be running. Now falls back to wagmi useAccount so
the button shows the connected wallet address even without OAuth3.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The wizard only had vpn, cdn, storage, rpc. Added all available services
matching the RunNode page: compute, gpu, workers, workerd, agents, git,
pkg, ci, s3, da, email, lb, indexer, scraping, security, observability.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant