Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
981117a
auto-claude: subtask-1-1 - Create send-swap-service directory structu…
Jan 18, 2026
4d6790f
auto-claude: subtask-1-2 - Create Prisma schema with Quote model and …
Jan 18, 2026
2cfe8fc
auto-claude: subtask-1-3 - Add send-swap-service and send-swap-db to …
Jan 18, 2026
0c1f1d8
auto-claude: subtask-1-4 - Create basic NestJS app structure (main.ts…
Jan 18, 2026
7138780
auto-claude: subtask-1-5 - Create .env.example with required environm…
Jan 18, 2026
0499ccf
auto-claude: subtask-2-1 - Create WalletManagerService with Keyring a…
Jan 18, 2026
2c96b4d
auto-claude: subtask-2-2 - Implement EVM wallet address generation (E…
Jan 18, 2026
695037e
auto-claude: subtask-2-3 - Implement UTXO wallet address generation (…
Jan 18, 2026
bca2ab1
auto-claude: subtask-2-4 - Implement Cosmos-SDK wallet address genera…
Jan 18, 2026
1e23dff
auto-claude: subtask-2-5 - Implement Solana wallet address generation
Jan 18, 2026
eb4324a
auto-claude: subtask-2-6 - Create wallet initialization service
Jan 18, 2026
ae2a1c9
auto-claude: subtask-3-1 - Create SwapperManagerService with swapper …
Jan 18, 2026
78ee2d2
auto-claude: subtask-3-2 - Implement swapper filtering to exclude non…
Jan 18, 2026
78c2e93
auto-claude: subtask-3-3 - Create GasCalculatorService for chain-spec…
Jan 18, 2026
0c84c19
auto-claude: subtask-4-1 - Add Quote DTOs and types to shared-types p…
Jan 18, 2026
abdec90
auto-claude: subtask-4-2 - Create QuotesService with quote generation…
Jan 18, 2026
9010ef6
auto-claude: subtask-4-3 - Create QuotesController with POST /quotes …
Jan 18, 2026
eca9075
auto-claude: subtask-4-4 - Implement quote expiration logic (30-minut…
Jan 18, 2026
4d10b54
auto-claude: subtask-5-1 - Create DepositMonitorService with cron job…
Jan 18, 2026
089fb54
auto-claude: subtask-5-2 - Implement deposit detection logic (match b…
Jan 18, 2026
4e1b14f
auto-claude: subtask-5-3 - Implement quote locking mechanism to preve…
Jan 18, 2026
3a33f12
auto-claude: subtask-5-4 - Implement swap execution flow (direct vs s…
Jan 18, 2026
048d406
auto-claude: subtask-5-5 - Update quote status after successful/faile…
Jan 18, 2026
6e7bfca
auto-claude: subtask-6-1 - Integrate all modules in app.module.ts
Jan 18, 2026
4d833d0
auto-claude: subtask-6-3 - Verify service starts with all chain wallets
Jan 18, 2026
9f3175c
auto-claude: subtask-6-4 - Test quote creation API endpoint
Jan 18, 2026
77df8bd
auto-claude: subtask-6-5 - Verify cron job logs show deposit monitori…
Jan 18, 2026
bb92b74
feat: fix types
NeOMakinG Jan 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
225 changes: 225 additions & 0 deletions .auto-claude-security.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
{
"base_commands": [
".",
"[",
"[[",
"ag",
"awk",
"basename",
"bash",
"bc",
"break",
"cat",
"cd",
"chmod",
"clear",
"cmp",
"column",
"comm",
"command",
"continue",
"cp",
"curl",
"cut",
"date",
"df",
"diff",
"dig",
"dirname",
"du",
"echo",
"egrep",
"env",
"eval",
"exec",
"exit",
"expand",
"export",
"expr",
"false",
"fd",
"fgrep",
"file",
"find",
"fmt",
"fold",
"gawk",
"gh",
"git",
"grep",
"gunzip",
"gzip",
"head",
"help",
"host",
"iconv",
"id",
"jobs",
"join",
"jq",
"kill",
"killall",
"less",
"let",
"ln",
"ls",
"lsof",
"man",
"mkdir",
"mktemp",
"more",
"mv",
"nl",
"paste",
"pgrep",
"ping",
"pkill",
"popd",
"printenv",
"printf",
"ps",
"pushd",
"pwd",
"read",
"readlink",
"realpath",
"reset",
"return",
"rev",
"rg",
"rm",
"rmdir",
"sed",
"seq",
"set",
"sh",
"shuf",
"sleep",
"sort",
"source",
"split",
"stat",
"tail",
"tar",
"tee",
"test",
"time",
"timeout",
"touch",
"tr",
"tree",
"true",
"type",
"uname",
"unexpand",
"uniq",
"unset",
"unzip",
"watch",
"wc",
"wget",
"whereis",
"which",
"whoami",
"xargs",
"yes",
"yq",
"zip",
"zsh"
],
"stack_commands": [
"createdb",
"createuser",
"dive",
"docker",
"docker-buildx",
"docker-compose",
"dockerfile",
"dropdb",
"dropuser",
"eslint",
"initdb",
"jest",
"nest",
"node",
"npm",
"npx",
"nvm",
"pg_ctl",
"pg_dump",
"pg_dumpall",
"pg_isready",
"pg_restore",
"postgres",
"prettier",
"psql",
"ts-node",
"tsc",
"tsx",
"turbo",
"yarn"
],
"script_commands": [
"bun",
"npm",
"pnpm",
"yarn"
],
"custom_commands": [],
"detected_stack": {
"languages": [
"javascript",
"typescript"
],
"package_managers": [
"yarn"
],
"frameworks": [
"nestjs",
"turbo",
"jest",
"eslint",
"prettier"
],
"databases": [
"postgresql"
],
"infrastructure": [
"docker"
],
"cloud_providers": [],
"code_quality_tools": [],
"version_managers": [
"nvm"
]
},
"custom_scripts": {
"npm_scripts": [
"build",
"dev",
"start",
"start:dev",
"test",
"lint",
"lint:fix",
"format",
"format:fix",
"docker:build",
"docker:up",
"docker:down",
"db:generate",
"db:migrate",
"db:push",
"clean",
"referral-rewards"
],
"make_targets": [],
"poetry_scripts": [],
"cargo_aliases": [],
"shell_scripts": []
},
"project_dir": "/Users/mini/Projects/microservices",
"created_at": "2026-01-18T02:17:30.535095",
"project_hash": "defd094cee780bd44e5ea01103f5125e",
"inherited_from": "/Users/mini/Projects/microservices"
}
25 changes: 25 additions & 0 deletions .auto-claude-status
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"active": true,
"spec": "001-i-would-like-to-do-a-poc",
"state": "building",
"subtasks": {
"completed": 24,
"total": 29,
"in_progress": 1,
"failed": 0
},
"phase": {
"current": "Integration",
"id": null,
"total": 5
},
"workers": {
"active": 0,
"max": 1
},
"session": {
"number": 25,
"started_at": "2026-01-18T02:37:10.520239"
},
"last_update": "2026-01-18T03:24:40.380937"
}
39 changes: 39 additions & 0 deletions .claude_settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"sandbox": {
"enabled": true,
"autoAllowBashIfSandboxed": true
},
"permissions": {
"defaultMode": "acceptEdits",
"allow": [
"Read(./**)",
"Write(./**)",
"Edit(./**)",
"Glob(./**)",
"Grep(./**)",
"Read(/Users/mini/Projects/microservices/.auto-claude/worktrees/tasks/001-i-would-like-to-do-a-poc/**)",
"Write(/Users/mini/Projects/microservices/.auto-claude/worktrees/tasks/001-i-would-like-to-do-a-poc/**)",
"Edit(/Users/mini/Projects/microservices/.auto-claude/worktrees/tasks/001-i-would-like-to-do-a-poc/**)",
"Glob(/Users/mini/Projects/microservices/.auto-claude/worktrees/tasks/001-i-would-like-to-do-a-poc/**)",
"Grep(/Users/mini/Projects/microservices/.auto-claude/worktrees/tasks/001-i-would-like-to-do-a-poc/**)",
"Read(/Users/mini/Projects/microservices/.auto-claude/worktrees/tasks/001-i-would-like-to-do-a-poc/.auto-claude/specs/001-i-would-like-to-do-a-poc/**)",
"Write(/Users/mini/Projects/microservices/.auto-claude/worktrees/tasks/001-i-would-like-to-do-a-poc/.auto-claude/specs/001-i-would-like-to-do-a-poc/**)",
"Edit(/Users/mini/Projects/microservices/.auto-claude/worktrees/tasks/001-i-would-like-to-do-a-poc/.auto-claude/specs/001-i-would-like-to-do-a-poc/**)",
"Read(/Users/mini/Projects/microservices/.auto-claude/**)",
"Write(/Users/mini/Projects/microservices/.auto-claude/**)",
"Edit(/Users/mini/Projects/microservices/.auto-claude/**)",
"Glob(/Users/mini/Projects/microservices/.auto-claude/**)",
"Grep(/Users/mini/Projects/microservices/.auto-claude/**)",
"Bash(*)",
"WebFetch(*)",
"WebSearch(*)",
"mcp__context7__resolve-library-id(*)",
"mcp__context7__get-library-docs(*)",
"mcp__graphiti-memory__search_nodes(*)",
"mcp__graphiti-memory__search_facts(*)",
"mcp__graphiti-memory__add_episode(*)",
"mcp__graphiti-memory__get_episodes(*)",
"mcp__graphiti-memory__get_entity_edge(*)"
]
}
}
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,7 @@ report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

Pulumi.*.yaml
/generated/prisma
*.db
*.db

# Auto Claude data directory
.auto-claude/
71 changes: 71 additions & 0 deletions apps/send-swap-service/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Wallet Configuration (CRITICAL - keep secure)
MNEMONIC=
WALLET_PASSPHRASE=

# Database Configuration
DATABASE_URL="postgresql://postgres:password@send-swap-db:5432/send_swap_service"

# Swapper APIs (Backend - no VITE_ prefix)
CHAINFLIP_NETWORK="mainnet"
CHAINFLIP_API_URL="https://chainflip-broker.io"
NEAR_INTENTS_API_KEY=
JUPITER_API_URL="https://quote-api.jup.ag/v6"
RELAY_API_URL="https://api.relay.link"

# Unchained API URLs (Production)
UNCHAINED_ETHEREUM_HTTP_URL="https://api.ethereum.shapeshift.com"
UNCHAINED_ETHEREUM_WS_URL="wss://api.ethereum.shapeshift.com"
UNCHAINED_AVALANCHE_HTTP_URL="https://api.avalanche.shapeshift.com"
UNCHAINED_AVALANCHE_WS_URL="wss://api.avalanche.shapeshift.com"
UNCHAINED_OPTIMISM_HTTP_URL="https://api.optimism.shapeshift.com"
UNCHAINED_OPTIMISM_WS_URL="wss://api.optimism.shapeshift.com"
UNCHAINED_BNBSMARTCHAIN_HTTP_URL="https://api.bnbsmartchain.shapeshift.com"
UNCHAINED_BNBSMARTCHAIN_WS_URL="wss://api.bnbsmartchain.shapeshift.com"
UNCHAINED_POLYGON_HTTP_URL="https://api.polygon.shapeshift.com"
UNCHAINED_POLYGON_WS_URL="wss://api.polygon.shapeshift.com"
UNCHAINED_GNOSIS_HTTP_URL="https://api.gnosis.shapeshift.com"
UNCHAINED_GNOSIS_WS_URL="wss://api.gnosis.shapeshift.com"
UNCHAINED_ARBITRUM_HTTP_URL="https://api.arbitrum.shapeshift.com"
UNCHAINED_ARBITRUM_WS_URL="wss://api.arbitrum.shapeshift.com"
UNCHAINED_ARBITRUM_NOVA_HTTP_URL="https://api.arbitrum-nova.shapeshift.com"
UNCHAINED_ARBITRUM_NOVA_WS_URL="wss://api.arbitrum-nova.shapeshift.com"
UNCHAINED_BASE_HTTP_URL="https://api.base.shapeshift.com"
UNCHAINED_BASE_WS_URL="wss://api.base.shapeshift.com"
UNCHAINED_BITCOIN_HTTP_URL="https://api.bitcoin.shapeshift.com"
UNCHAINED_BITCOIN_WS_URL="wss://api.bitcoin.shapeshift.com"
UNCHAINED_DOGECOIN_HTTP_URL="https://api.dogecoin.shapeshift.com"
UNCHAINED_DOGECOIN_WS_URL="wss://api.dogecoin.shapeshift.com"
UNCHAINED_LITECOIN_HTTP_URL="https://api.litecoin.shapeshift.com"
UNCHAINED_LITECOIN_WS_URL="wss://api.litecoin.shapeshift.com"
UNCHAINED_BITCOINCASH_HTTP_URL="https://api.bitcoincash.shapeshift.com"
UNCHAINED_BITCOINCASH_WS_URL="wss://api.bitcoincash.shapeshift.com"
UNCHAINED_COSMOS_HTTP_URL="https://api.cosmos.shapeshift.com"
UNCHAINED_COSMOS_WS_URL="wss://api.cosmos.shapeshift.com"
UNCHAINED_THORCHAIN_HTTP_URL="https://api.thorchain.shapeshift.com"
UNCHAINED_THORCHAIN_WS_URL="wss://api.thorchain.shapeshift.com"
UNCHAINED_MAYACHAIN_HTTP_URL="https://api.mayachain.shapeshift.com"
UNCHAINED_MAYACHAIN_WS_URL="wss://api.mayachain.shapeshift.com"
UNCHAINED_SOLANA_HTTP_URL="https://api.solana.shapeshift.com"
UNCHAINED_SOLANA_WS_URL="wss://api.solana.shapeshift.com"

# Node URLs (Production)
ETHEREUM_NODE_URL="https://api.ethereum.shapeshift.com/api/v1/jsonrpc"
AVALANCHE_NODE_URL="https://api.avalanche.shapeshift.com/api/v1/jsonrpc"
OPTIMISM_NODE_URL="https://api.optimism.shapeshift.com/api/v1/jsonrpc"
BNBSMARTCHAIN_NODE_URL="https://api.bnbsmartchain.shapeshift.com/api/v1/jsonrpc"
POLYGON_NODE_URL="https://api.polygon.shapeshift.com/api/v1/jsonrpc"
GNOSIS_NODE_URL="https://api.gnosis.shapeshift.com/api/v1/jsonrpc"
ARBITRUM_NODE_URL="https://api.arbitrum.shapeshift.com/api/v1/jsonrpc"
ARBITRUM_NOVA_NODE_URL="https://api.arbitrum-nova.shapeshift.com/api/v1/jsonrpc"
BASE_NODE_URL="https://api.base.shapeshift.com/api/v1/jsonrpc"
THORCHAIN_NODE_URL="https://api.thorchain.shapeshift.com/lcd"
MAYACHAIN_NODE_URL="https://api.mayachain.shapeshift.com/lcd"
SOLANA_NODE_URL="https://api.solana.shapeshift.com/api/v1/jsonrpc"

# Midgard URLs (Production)
THORCHAIN_MIDGARD_URL="https://api.thorchain.shapeshift.com/midgard/v2"
MAYACHAIN_MIDGARD_URL="https://api.mayachain.shapeshift.com/midgard/v2"

# Service URLs
SWAP_SERVICE_URL="http://swap-service:3001"
NOTIFICATIONS_SERVICE_URL="http://notifications-service:3003"
14 changes: 14 additions & 0 deletions apps/send-swap-service/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module.exports = {
moduleFileExtensions: ['js', 'json', 'ts'],
rootDir: 'src',
testRegex: '.*\\.spec\\.ts$',
transform: {
'^.+\\.(t|j)s$': 'ts-jest',
},
collectCoverageFrom: ['**/*.(t|j)s'],
coverageDirectory: '../coverage',
testEnvironment: 'node',
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1',
},
};
Loading
Loading