Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
f1d5018
feat: reliable integrations [part 1] (#91)
andreabadesso Nov 20, 2023
6347482
feat: reliable integrations [part 2] (#90)
andreabadesso Nov 27, 2023
3fb988b
chore: wallet-service monorepo [part 1] - Unify projects (#92)
andreabadesso Dec 11, 2023
5b7d6bc
chore: wallet-service monorepo [part 2] - CI (#99)
andreabadesso Dec 11, 2023
bdf399a
feat: added ping/pong mechanism to websocket actor (#105)
andreabadesso Dec 19, 2023
71a8772
chore: removed unused lambdas and tests (#102)
andreabadesso Dec 22, 2023
50dd696
fix: real time txs + push notification (#104)
andreabadesso Jan 4, 2024
883f7aa
tests: integration tests (#103)
andreabadesso Jan 8, 2024
73dfd50
fix: invalid sqs message (#107)
andreabadesso Jan 10, 2024
b1bb6eb
fix: getting aws region for push notification lambda from env (#108)
andreabadesso Jan 17, 2024
2aed8ef
chore: wallet-service monorepo [part 3] - CD (#100)
andreabadesso Feb 8, 2024
e08f73d
fix: broken deploy (#114)
andreabadesso Feb 19, 2024
97b2a48
chore: updated nodejs on codebuild to v20 and using berry stable (#116)
andreabadesso Feb 19, 2024
1e3ecf3
chore: added missing TX_HISTORY_MAX_COUNT env on wallet-service codeb…
andreabadesso Feb 19, 2024
8826df8
chore: bump v1.4.3 (#120)
andreabadesso Feb 20, 2024
f1f27f8
Merge pull request #121 from HathorNetwork/dev
andreabadesso Feb 20, 2024
5d65469
fix: invalid build script on testnet and mainnet (#127)
andreabadesso Feb 21, 2024
5bbb909
chore: changed version to 1.4.4+beta (#128)
andreabadesso Feb 21, 2024
38d0a48
Merge pull request #129 from HathorNetwork/dev
andreabadesso Feb 21, 2024
dd90ffa
chore: single deploy process for both projects in the monorepo (#130)
andreabadesso Feb 23, 2024
5deef4e
chore: bumped to v1.4.5+beta (#132)
andreabadesso Feb 23, 2024
8b92ceb
chore: added pull request templates for the release guide (#131)
andreabadesso Feb 23, 2024
e4be8ff
Merge pull request #134 from HathorNetwork/master
andreabadesso Feb 23, 2024
80c20b3
choreL: bumped to v1.4.6
andreabadesso Feb 23, 2024
2c32940
Merge pull request #135 from HathorNetwork/chore/v1.4.6
andreabadesso Feb 23, 2024
7b236f0
fix: invalid region on lambda client
andreabadesso Feb 27, 2024
9ada024
Merge pull request #137 from HathorNetwork/fix/invalid-region
andreabadesso Feb 27, 2024
6dae885
fix: event.pathParameters might be null on get addresses api
andreabadesso Feb 28, 2024
20aa1dc
Merge pull request #140 from HathorNetwork/fix/get-addresses
andreabadesso Mar 1, 2024
78d5904
fix: also aggregating authorities in init wallet
andreabadesso Mar 4, 2024
c775822
tests: added tests for the authorities aggregation
andreabadesso Mar 4, 2024
1fa63fb
docs: updated comment on attribute order
andreabadesso Mar 4, 2024
2c5bfff
Merge pull request #141 from HathorNetwork/fix/no-authorities-in-init…
andreabadesso Mar 5, 2024
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
102 changes: 102 additions & 0 deletions .codebuild/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
set -e;

send_slack_message() {
MESSAGE=$1;

curl -H "Content-type: application/json" \
--data "{\"channel\":\"${SLACK_DEPLOYS_CHANNEL_ID}\",\"blocks\":[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*Hathor Wallet Service*\n${MESSAGE}\"}}]}" \
-H "Authorization: Bearer ${SLACK_OAUTH_TOKEN}" \
-X POST https://slack.com/api/chat.postMessage;
}

echo "Building git ref ${GIT_REF_TO_DEPLOY}..."

exit=false;

# Checks whether there is a file called "rollback_mainnet_production", which is used by our other CodeBuild to indicate that this is a mainnet-production rollback
if [ -f "rollback_mainnet_production" ]; then
# Gets all env vars with `mainnet_` prefix and re-exports them without the prefix
for var in "${!mainnet_@}"; do
export ${var#mainnet_}="${!var}"
done
make deploy-lambdas-mainnet;
send_slack_message "Rollback performed on mainnet-production to: ${GIT_REF_TO_DEPLOY}";
exit=true;
fi;

# Checks whether there is a file called "rollback_testnet_production", which is used by our other CodeBuild to indicate that this is a testnet-production rollback
if [ -f "rollback_testnet_production" ]; then
# Gets all env vars with `testnet_` prefix and re-exports them without the prefix
for var in "${!testnet_@}"; do
export ${var#testnet_}="${!var}"
done
make deploy-lambdas-testnet;
send_slack_message "Rollback performed on testnet-production to: ${GIT_REF_TO_DEPLOY}";
exit=true;
fi;

if [ "$exit" = true ]; then
echo "Rollbacks performed successfully. Exiting now.";
exit 0;
fi

if expr "${GIT_REF_TO_DEPLOY}" : "master" >/dev/null; then
# Gets all env vars with `dev_` prefix and re-exports them without the prefix
for var in "${!dev_@}"; do
export ${var#dev_}="${!var}"
done

make migrate;
make build-daemon;
make deploy-lambdas-dev-testnet;
# The idea here is that if the lambdas deploy fail, the built image won't be pushed:
make push-daemon;

elif expr "${GIT_REF_TO_DEPLOY}" : "v[0-9]\+\.[0-9]\+\.[0-9]\+-rc\.[0-9]\+" >/dev/null; then
# Gets all env vars with `mainnet_staging_` prefix and re-exports them without the prefix
for var in "${!mainnet_staging_@}"; do
export ${var#mainnet_staging_}="${!var}"
done

echo $GIT_REF_TO_DEPLOY > /tmp/docker_image_tag
make migrate;
make build-daemon;
make deploy-lambdas-mainnet-staging;
make push-daemon;
send_slack_message "New version deployed to mainnet-staging: ${GIT_REF_TO_DEPLOY}"
elif expr "${GIT_REF_TO_DEPLOY}" : "v.*" >/dev/null; then
# Gets all env vars with `testnet_` prefix and re-exports them without the prefix
for var in "${!testnet_@}"; do
export ${var#testnet_}="${!var}"
done

echo $GIT_REF_TO_DEPLOY > /tmp/docker_image_tag
make migrate;
make build-daemon;
make deploy-lambdas-testnet;
make push-daemon;

# Unsets all the testnet env vars so we make sure they don't leak to the mainnet deploy below
for var in "${!testnet_@}"; do
unset ${var#testnet_}
done

# Gets all env vars with `mainnet_` prefix and re-exports them without the prefix
for var in "${!mainnet_@}"; do
export ${var#mainnet_}="${!var}"
done
make migrate;
make build-daemon;
make deploy-lambdas-mainnet;
make push-daemon;
send_slack_message "New version deployed to testnet-production and mainnet-production: ${GIT_REF_TO_DEPLOY}"
else
# Gets all env vars with `dev_` prefix and re-exports them without the prefix
for var in "${!dev_@}"; do
export ${var#dev_}="${!var}"
done
make migrate;
make build-daemon;
make deploy-lambdas-dev-testnet;
make push-daemon;
fi;
184 changes: 184 additions & 0 deletions .codebuild/buildspec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
version: 0.2

# The envs are organized in a way that some of them will have prefixes, indicating the environment corresponding to them.
# In the build section we check which environment is being deployed and choose the envs accordingly.
# The ones without prefixes are used in all environments.
env:
shell: bash
git-credential-helper: yes
variables:
NODE_ENV: "production"
MAX_ADDRESS_GAP: 20
WALLET_CONN_LIMIT: 10
BLOCK_REWARD_LOCK: 300
CONFIRM_FIRST_ADDRESS: true
VOIDED_TX_OFFSET: 20
TX_HISTORY_MAX_COUNT: 50
dev_DEFAULT_SERVER: "https://wallet-service.private-nodes.testnet.hathor.network/v1a/"
dev_WS_DOMAIN: "ws.dev.wallet-service.testnet.hathor.network"
dev_NETWORK: "testnet"
dev_LOG_LEVEL: "debug"
dev_NFT_AUTO_REVIEW_ENABLED: "true"
dev_EXPLORER_STAGE: "dev"
dev_EXPLORER_SERVICE_LAMBDA_ENDPOINT: "https://lambda.eu-central-1.amazonaws.com"
dev_WALLET_SERVICE_LAMBDA_ENDPOINT: "https://lambda.eu-central-1.amazonaws.com"
dev_PUSH_NOTIFICATION_ENABLED: "true"
dev_PUSH_ALLOWED_PROVIDERS: "android,ios"
dev_APPLICATION_NAME: "wallet-service-dev"
testnet_DEFAULT_SERVER: "https://wallet-service.private-nodes.testnet.hathor.network/v1a/"
testnet_WS_DOMAIN: "ws.wallet-service.testnet.hathor.network"
testnet_NETWORK: "testnet"
testnet_LOG_LEVEL: "debug"
testnet_NFT_AUTO_REVIEW_ENABLED: "true"
testnet_EXPLORER_STAGE: "testnet"
testnet_EXPLORER_SERVICE_LAMBDA_ENDPOINT: "https://lambda.eu-central-1.amazonaws.com"
testnet_WALLET_SERVICE_LAMBDA_ENDPOINT: "https://lambda.eu-central-1.amazonaws.com"
testnet_PUSH_NOTIFICATION_ENABLED: "true"
testnet_PUSH_ALLOWED_PROVIDERS: "android,ios"
testnet_APPLICATION_NAME: "wallet-service-testnet"
mainnet_staging_DEFAULT_SERVER: "https://wallet-service.private-nodes.hathor.network/v1a/"
mainnet_staging_WS_DOMAIN: "ws.staging.wallet-service.hathor.network"
mainnet_staging_NETWORK: "mainnet"
mainnet_staging_LOG_LEVEL: "debug"
mainnet_staging_NFT_AUTO_REVIEW_ENABLED: "false"
mainnet_staging_EXPLORER_STAGE: "mainnet-staging" # This stage doesn't exist in explorer-service and we don't need it because we have disabled the integration.
mainnet_staging_EXPLORER_SERVICE_LAMBDA_ENDPOINT: "https://lambda.eu-central-1.amazonaws.com"
mainnet_staging_WALLET_SERVICE_LAMBDA_ENDPOINT: "https://lambda.eu-central-1.amazonaws.com"
mainnet_staging_PUSH_NOTIFICATION_ENABLED: "true"
mainnet_staging_PUSH_ALLOWED_PROVIDERS: "android,ios"
mainnet_staging_APPLICATION_NAME: "wallet-service-mainnet-staging"
mainnet_DEFAULT_SERVER: "https://wallet-service.private-nodes.hathor.network/v1a/"
mainnet_WS_DOMAIN: "ws.wallet-service.hathor.network"
mainnet_NETWORK: "mainnet"
mainnet_LOG_LEVEL: "debug"
mainnet_NFT_AUTO_REVIEW_ENABLED: "true"
mainnet_EXPLORER_STAGE: "mainnet"
mainnet_EXPLORER_SERVICE_LAMBDA_ENDPOINT: "https://lambda.eu-central-1.amazonaws.com"
mainnet_WALLET_SERVICE_LAMBDA_ENDPOINT: "https://lambda.eu-central-1.amazonaws.com"
mainnet_PUSH_NOTIFICATION_ENABLED: "true"
mainnet_PUSH_ALLOWED_PROVIDERS: "android,ios"
mainnet_APPLICATION_NAME: "wallet-service-mainnet"
# https://eu-central-1.console.aws.amazon.com/secretsmanager/home?region=eu-central-1#!/listSecrets
secrets-manager:
# CI secrets
SLACK_OAUTH_TOKEN: "WalletService/ci:slack_oauth_token"
SLACK_DEPLOYS_CHANNEL_ID: "WalletService/ci:slack_deploys_channel_id"
# Dev secrets
dev_ACCOUNT_ID: "WalletService/dev:account_id"
dev_AUTH_SECRET: "WalletService/dev:auth_secret"
dev_AWS_VPC_DEFAULT_SG_ID: "WalletService/dev:aws_vpc_default_sg_id"
dev_AWS_SUBNET_ID_1: "WalletService/dev:aws_subnet_id_1"
dev_AWS_SUBNET_ID_2: "WalletService/dev:aws_subnet_id_2"
dev_AWS_SUBNET_ID_3: "WalletService/dev:aws_subnet_id_3"
dev_DB_NAME: "WalletService/rds/dev:dbname"
dev_DB_USER: "WalletService/rds/dev:username"
dev_DB_PASS: "WalletService/rds/dev:password"
dev_DB_ENDPOINT: "WalletService/rds/dev:host"
dev_DB_PORT: "WalletService/rds/dev:port"
dev_REDIS_URL: "WalletService/redis/dev:url"
dev_REDIS_PASSWORD: "WalletService/redis/dev:password"
dev_FIREBASE_PROJECT_ID: "WalletService/dev:FIREBASE_PROJECT_ID"
dev_FIREBASE_PRIVATE_KEY_ID: "WalletService/dev:FIREBASE_PRIVATE_KEY_ID"
dev_FIREBASE_PRIVATE_KEY: "WalletService/dev:FIREBASE_PRIVATE_KEY"
dev_FIREBASE_CLIENT_EMAIL: "WalletService/dev:FIREBASE_CLIENT_EMAIL"
dev_FIREBASE_CLIENT_ID: "WalletService/dev:FIREBASE_CLIENT_ID"
dev_FIREBASE_AUTH_URI: "WalletService/dev:FIREBASE_AUTH_URI"
dev_FIREBASE_TOKEN_URI: "WalletService/dev:FIREBASE_TOKEN_URI"
dev_FIREBASE_AUTH_PROVIDER_X509_CERT_URL: "WalletService/dev:FIREBASE_AUTH_PROVIDER_X509_CERT_URL"
dev_FIREBASE_CLIENT_X509_CERT_URL: "WalletService/dev:FIREBASE_CLIENT_X509_CERT_URL"
dev_ALERT_MANAGER_REGION: "WalletService/dev:ALERT_MANAGER_REGION"
dev_ALERT_MANAGER_TOPIC: "WalletService/dev:ALERT_MANAGER_TOPIC"
# Testnet secrets
testnet_ACCOUNT_ID: "WalletService/testnet:account_id"
testnet_AUTH_SECRET: "WalletService/testnet:auth_secret"
testnet_AWS_VPC_DEFAULT_SG_ID: "WalletService/testnet:aws_vpc_default_sg_id"
testnet_AWS_SUBNET_ID_1: "WalletService/testnet:aws_subnet_id_1"
testnet_AWS_SUBNET_ID_2: "WalletService/testnet:aws_subnet_id_2"
testnet_AWS_SUBNET_ID_3: "WalletService/testnet:aws_subnet_id_3"
testnet_DB_NAME: "WalletService/rds/testnet:dbname"
testnet_DB_USER: "WalletService/rds/testnet:username"
testnet_DB_PASS: "WalletService/rds/testnet:password"
testnet_DB_ENDPOINT: "WalletService/rds/testnet:host"
testnet_DB_PORT: "WalletService/rds/testnet:port"
testnet_REDIS_URL: "WalletService/redis/testnet:url"
testnet_REDIS_PASSWORD: "WalletService/redis/testnet:password"
testnet_FIREBASE_PROJECT_ID: "WalletService/testnet:FIREBASE_PROJECT_ID"
testnet_FIREBASE_PRIVATE_KEY_ID: "WalletService/testnet:FIREBASE_PRIVATE_KEY_ID"
testnet_FIREBASE_PRIVATE_KEY: "WalletService/testnet:FIREBASE_PRIVATE_KEY"
testnet_FIREBASE_CLIENT_EMAIL: "WalletService/testnet:FIREBASE_CLIENT_EMAIL"
testnet_FIREBASE_CLIENT_ID: "WalletService/testnet:FIREBASE_CLIENT_ID"
testnet_FIREBASE_AUTH_URI: "WalletService/testnet:FIREBASE_AUTH_URI"
testnet_FIREBASE_TOKEN_URI: "WalletService/testnet:FIREBASE_TOKEN_URI"
testnet_FIREBASE_AUTH_PROVIDER_X509_CERT_URL: "WalletService/testnet:FIREBASE_AUTH_PROVIDER_X509_CERT_URL"
testnet_FIREBASE_CLIENT_X509_CERT_URL: "WalletService/testnet:FIREBASE_CLIENT_X509_CERT_URL"
testnet_ALERT_MANAGER_REGION: "WalletService/testnet:ALERT_MANAGER_REGION"
testnet_ALERT_MANAGER_TOPIC: "WalletService/testnet:ALERT_MANAGER_TOPIC"
# Mainnet Staging secrets
mainnet_staging_ACCOUNT_ID: "WalletService/mainnet_staging:account_id"
mainnet_staging_AUTH_SECRET: "WalletService/mainnet_staging:auth_secret"
mainnet_staging_AWS_VPC_DEFAULT_SG_ID: "WalletService/mainnet_staging:aws_vpc_default_sg_id"
mainnet_staging_AWS_SUBNET_ID_1: "WalletService/mainnet_staging:aws_subnet_id_1"
mainnet_staging_AWS_SUBNET_ID_2: "WalletService/mainnet_staging:aws_subnet_id_2"
mainnet_staging_AWS_SUBNET_ID_3: "WalletService/mainnet_staging:aws_subnet_id_3"
mainnet_staging_DB_NAME: "WalletService/rds/mainnet_staging:dbname"
mainnet_staging_DB_USER: "WalletService/rds/mainnet_staging:username"
mainnet_staging_DB_PASS: "WalletService/rds/mainnet_staging:password"
mainnet_staging_DB_ENDPOINT: "WalletService/rds/mainnet_staging:host"
mainnet_staging_DB_PORT: "WalletService/rds/mainnet_staging:port"
mainnet_staging_REDIS_URL: "WalletService/redis/mainnet_staging:url"
mainnet_staging_REDIS_PASSWORD: "WalletService/redis/mainnet_staging:password"
mainnet_staging_FIREBASE_PROJECT_ID: "WalletService/mainnet_staging:FIREBASE_PROJECT_ID"
mainnet_staging_FIREBASE_PRIVATE_KEY_ID: "WalletService/mainnet_staging:FIREBASE_PRIVATE_KEY_ID"
mainnet_staging_FIREBASE_PRIVATE_KEY: "WalletService/mainnet_staging:FIREBASE_PRIVATE_KEY"
mainnet_staging_FIREBASE_CLIENT_EMAIL: "WalletService/mainnet_staging:FIREBASE_CLIENT_EMAIL"
mainnet_staging_FIREBASE_CLIENT_ID: "WalletService/mainnet_staging:FIREBASE_CLIENT_ID"
mainnet_staging_FIREBASE_AUTH_URI: "WalletService/mainnet_staging:FIREBASE_AUTH_URI"
mainnet_staging_FIREBASE_TOKEN_URI: "WalletService/mainnet_staging:FIREBASE_TOKEN_URI"
mainnet_staging_FIREBASE_AUTH_PROVIDER_X509_CERT_URL: "WalletService/mainnet_staging:FIREBASE_AUTH_PROVIDER_X509_CERT_URL"
mainnet_staging_FIREBASE_CLIENT_X509_CERT_URL: "WalletService/mainnet_staging:FIREBASE_CLIENT_X509_CERT_URL"
mainnet_staging_ALERT_MANAGER_REGION: "WalletService/mainnet_staging:ALERT_MANAGER_REGION"
mainnet_staging_ALERT_MANAGER_TOPIC: "WalletService/mainnet_staging:ALERT_MANAGER_TOPIC"
# Mainnet secrets
mainnet_ACCOUNT_ID: "WalletService/mainnet:account_id"
mainnet_AUTH_SECRET: "WalletService/mainnet:auth_secret"
mainnet_AWS_VPC_DEFAULT_SG_ID: "WalletService/mainnet:aws_vpc_default_sg_id"
mainnet_AWS_SUBNET_ID_1: "WalletService/mainnet:aws_subnet_id_1"
mainnet_AWS_SUBNET_ID_2: "WalletService/mainnet:aws_subnet_id_2"
mainnet_AWS_SUBNET_ID_3: "WalletService/mainnet:aws_subnet_id_3"
mainnet_DB_NAME: "WalletService/rds/mainnet:dbname"
mainnet_DB_USER: "WalletService/rds/mainnet:username"
mainnet_DB_PASS: "WalletService/rds/mainnet:password"
mainnet_DB_ENDPOINT: "WalletService/rds/mainnet:host"
mainnet_DB_PORT: "WalletService/rds/mainnet:port"
mainnet_REDIS_URL: "WalletService/redis/mainnet:url"
mainnet_REDIS_PASSWORD: "WalletService/redis/mainnet:password"
mainnet_FIREBASE_PROJECT_ID: "WalletService/mainnet:FIREBASE_PROJECT_ID"
mainnet_FIREBASE_PRIVATE_KEY_ID: "WalletService/mainnet:FIREBASE_PRIVATE_KEY_ID"
mainnet_FIREBASE_PRIVATE_KEY: "WalletService/mainnet:FIREBASE_PRIVATE_KEY"
mainnet_FIREBASE_CLIENT_EMAIL: "WalletService/mainnet:FIREBASE_CLIENT_EMAIL"
mainnet_FIREBASE_CLIENT_ID: "WalletService/mainnet:FIREBASE_CLIENT_ID"
mainnet_FIREBASE_AUTH_URI: "WalletService/mainnet:FIREBASE_AUTH_URI"
mainnet_FIREBASE_TOKEN_URI: "WalletService/mainnet:FIREBASE_TOKEN_URI"
mainnet_FIREBASE_AUTH_PROVIDER_X509_CERT_URL: "WalletService/mainnet:FIREBASE_AUTH_PROVIDER_X509_CERT_URL"
mainnet_FIREBASE_CLIENT_X509_CERT_URL: "WalletService/mainnet:FIREBASE_CLIENT_X509_CERT_URL"
mainnet_ALERT_MANAGER_REGION: "WalletService/mainnet:ALERT_MANAGER_REGION"
mainnet_ALERT_MANAGER_TOPIC: "WalletService/mainnet:ALERT_MANAGER_TOPIC"
phases:
install:
#If you use the Ubuntu standard image 2.0 or later, you must specify runtime-versions.
#If you specify runtime-versions and use an image other than Ubuntu standard image 2.0, the build fails.
runtime-versions:
nodejs: 20
# name: version
commands:
- npm install -g yarn
- corepack enable
- yarn set version stable
- yarn install
pre_build:
commands:
# This file is created in another CodeBuild specification that runs before this and is not committed to this repo.
- export GIT_REF_TO_DEPLOY=$(cat git_ref_to_deploy)
build:
commands:
- bash .codebuild/build.sh
10 changes: 10 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
dist/
node_modules/
__tests__/
.git/
.github/
.direnv/
flake.*
node_modules/
packages/daemon/dist/
packages/daemon/node_modules/
packages/wallet-service
7 changes: 7 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
if [[ $(type -t use_flake) != function ]]; then
echo "ERROR: use_flake function missing."
echo "Please update direnv to v2.30.0 or later."
exit 1
fi

use flake
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
dist/
db/
Loading