From ecfee6732eae2d4bc710084b431ec5754ef0b7db Mon Sep 17 00:00:00 2001 From: Yash-946 Date: Fri, 16 Jan 2026 12:37:08 +0530 Subject: [PATCH] first commit --- .gitignore | 175 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 15 ++++ bun.lockb | Bin 0 -> 78954 bytes client.ts | 3 + docker-compose.yml | 28 ++++++++ index.ts | 1 + package.json | 17 +++++ s3.js | 74 +++++++++++++++++++ server.js | 35 +++++++++ tsconfig.json | 27 +++++++ vector.ts | 32 +++++++++ 11 files changed, 407 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 bun.lockb create mode 100644 client.ts create mode 100644 docker-compose.yml create mode 100644 index.ts create mode 100644 package.json create mode 100644 s3.js create mode 100644 server.js create mode 100644 tsconfig.json create mode 100644 vector.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b1ee42 --- /dev/null +++ b/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..de38ec1 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# redis-playground + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.1.7. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..a78c79f8aba33aaf449560cc68552a59cf084a01 GIT binary patch literal 78954 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 { + // Create a bucket first (you need to create buckets via console or CLI) + const buckets = await listBuckets(); + // console.log('Available buckets:', buckets); + + // Upload a file + await uploadFile('cap-web', 'textfiles/test2.txt', 'Hello MinIO from Node.js!'); + + // // Download the file + // await downloadFile('cap-web', 'test.txt'); +})(); \ No newline at end of file diff --git a/server.js b/server.js new file mode 100644 index 0000000..772ca61 --- /dev/null +++ b/server.js @@ -0,0 +1,35 @@ +import Redis from 'ioredis'; + +// Create a new Redis client (default localhost:6379) +const redis = new Redis({ + host: '72.60.220.57', + port: 6379, + username: 'default', + password: '4~pI27tEpI4(', + +}); + +async function run() { + try { + // Set a key + // await redis.set('username', 'yash946'); + + // Get the key + const value = await redis.get('username'); + console.log('Fetched from Redis:', value); + + // Set a key with expiry (in seconds) + await redis.set('session', 'xyz123', 'EX', 20); // expires in 10 seconds + + // Get all keys + const keys = await redis.keys('*'); + console.log('All keys:', keys); + + // Close the connection` + redis.disconnect(); + } catch (err) { + console.error('Redis error:', err); + } +} + +run(); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..238655f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} diff --git a/vector.ts b/vector.ts new file mode 100644 index 0000000..c2128d7 --- /dev/null +++ b/vector.ts @@ -0,0 +1,32 @@ +import { QdrantClient } from "@qdrant/js-client-rest"; + +const client = new QdrantClient({ url: "http://72.60.220.57:6333", apiKey:"yyz9cggxpudyjc8uqktm0lixnqagfsrl" }); + +// await client.createCollection("test_collection", { +// vectors: { size: 4, distance: "Dot" }, +// }); + + +// const operationInfo = await client.upsert("test_collection", { +// wait: true, +// points: [ +// { id: 1, vector: [0.05, 0.61, 0.76, 0.74], payload: { city: "Berlin" } }, +// { id: 2, vector: [0.19, 0.81, 0.75, 0.11], payload: { city: "London" } }, +// { id: 3, vector: [0.36, 0.55, 0.47, 0.94], payload: { city: "Moscow" } }, +// { id: 4, vector: [0.18, 0.01, 0.85, 0.80], payload: { city: "New York" } }, +// { id: 5, vector: [0.24, 0.18, 0.22, 0.44], payload: { city: "Beijing" } }, +// { id: 6, vector: [0.35, 0.08, 0.11, 0.44], payload: { city: "Mumbai" } }, +// ], +// }); + +// console.debug(operationInfo); + +let searchResult = await client.query( + "test_collection", { + query: [0.2, 0.1, 0.9, 0.7], + with_vector: true, + with_payload: true, + limit: 3 +}); + +console.debug(searchResult.points); \ No newline at end of file