diff --git a/.env.example b/.env.example index 79c885e..5223b63 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,6 @@ CLOUDFLARE_API_TOKEN= MONGODB_URI= SG_CARS_TRENDS_API_TOKEN= + +UPSTASH_REDIS_REST_URL= +UPSTASH_REDIS_REST_TOKEN= diff --git a/.github/workflows/sst.prod.yml b/.github/workflows/sst.prod.yml index f7fa04e..cc91234 100644 --- a/.github/workflows/sst.prod.yml +++ b/.github/workflows/sst.prod.yml @@ -22,6 +22,8 @@ jobs: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} MONGODB_URI: ${{ secrets.MONGODB_URI }} SG_CARS_TRENDS_API_TOKEN: ${{ secrets.SG_CARS_TRENDS_API_TOKEN }} + UPSTASH_REDIS_REST_TOKEN: ${{ secrets.UPSTASH_REDIS_REST_TOKEN }} + UPSTASH_REDIS_REST_URL: ${{ secrets.UPSTASH_REDIS_REST_URL }} steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 diff --git a/.github/workflows/sst.staging.yml b/.github/workflows/sst.staging.yml index 78a85fc..5cf58cd 100644 --- a/.github/workflows/sst.staging.yml +++ b/.github/workflows/sst.staging.yml @@ -22,6 +22,8 @@ jobs: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} MONGODB_URI: ${{ secrets.MONGODB_URI }} SG_CARS_TRENDS_API_TOKEN: ${{ secrets.SG_CARS_TRENDS_API_TOKEN }} + UPSTASH_REDIS_REST_TOKEN: ${{ secrets.UPSTASH_REDIS_REST_TOKEN }} + UPSTASH_REDIS_REST_URL: ${{ secrets.UPSTASH_REDIS_REST_URL }} steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 diff --git a/package.json b/package.json index 7936805..31b7ecc 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@upstash/redis": "^1.34.0", "axios": "^1.6.2", "date-fns": "^2.30.0", "hono": "^4.2.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e21af51..0900c27 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@upstash/redis': + specifier: ^1.34.0 + version: 1.34.0 axios: specifier: ^1.6.2 version: 1.7.2 @@ -340,6 +343,9 @@ packages: '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + '@upstash/redis@1.34.0': + resolution: {integrity: sha512-TrXNoJLkysIl8SBc4u9bNnyoFYoILpCcFJcLyWCccb/QSUmaVKdvY0m5diZqc3btExsapcMbaw/s/wh9Sf1pJw==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -360,6 +366,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -1217,6 +1226,10 @@ snapshots: dependencies: '@types/webidl-conversions': 7.0.3 + '@upstash/redis@1.34.0': + dependencies: + crypto-js: 4.2.0 + asynckit@0.4.0: {} aws4fetch@1.0.19: {} @@ -1237,6 +1250,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + crypto-js@4.2.0: {} + date-fns@2.30.0: dependencies: '@babel/runtime': 7.25.0 diff --git a/src/config/redis.ts b/src/config/redis.ts new file mode 100644 index 0000000..5043245 --- /dev/null +++ b/src/config/redis.ts @@ -0,0 +1,8 @@ +import { Redis } from "@upstash/redis"; + +const redis = new Redis({ + url: process.env.UPSTASH_REDIS_REST_URL, + token: process.env.UPSTASH_REDIS_REST_TOKEN, +}); + +export default redis; diff --git a/sst.config.ts b/sst.config.ts index f663070..6599eb5 100644 --- a/sst.config.ts +++ b/sst.config.ts @@ -46,6 +46,8 @@ export default $config({ environment: { MONGODB_URI: process.env.MONGODB_URI, SG_CARS_TRENDS_API_TOKEN: process.env.SG_CARS_TRENDS_API_TOKEN, + UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN, + UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL, }, handler: "src/index.handler", url: {