{"_id":"@arkdiovierge/lambda-invoker","name":"@arkdiovierge/lambda-invoker","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@arkdiovierge/lambda-invoker","version":"1.0.0","description":"A TypeScript library for invoking AWS Lambda functions with encrypt/decrypt capabilities","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc --project tsconfig.json","build:lib":"tsc --project tsconfig.lib.json","start":"ts-node src/cli.ts","encrypt":"ts-node src/cli.ts encrypt","decrypt":"ts-node src/cli.ts decrypt","example:basic":"ts-node examples/basic-usage.ts","example:programmatic":"ts-node examples/programmatic-config.ts","example:mixed":"ts-node examples/mixed-config.ts","example:errors":"ts-node examples/error-handling.ts","prepublishOnly":"npm run build:lib"},"keywords":["aws","lambda","encrypt","decrypt","typescript","localstack"],"author":{"name":"Your Name"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/yourusername/lambda-invoker.git"},"bugs":{"url":"https://github.com/yourusername/lambda-invoker/issues"},"homepage":"https://github.com/yourusername/lambda-invoker#readme","dependencies":{"@aws-sdk/client-lambda":"^3.634.0","dotenv":"^16.4.5"},"devDependencies":{"@types/node":"^20.12.7","ts-node":"^10.9.2","typescript":"^5.5.4"},"peerDependencies":{"@aws-sdk/client-lambda":"^3.0.0"},"engines":{"node":">=18.0.0"},"_id":"@arkdiovierge/lambda-invoker@1.0.0","gitHead":"26529322e2d24746ea24ba749901f972ff8bd2ec","_nodeVersion":"24.5.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-86zGgHt26wt96CLuI8KWKtRaV3w0s/nMqerrGnc09gQj2wx9oqNELtKxJNtQ+ciLOOP4gPS+wppHB9SjQvLGRg==","shasum":"c71cc97bc7576174864dd8c1e45ff9ed4df7579e","tarball":"https://registry.npmjs.org/@arkdiovierge/lambda-invoker/-/lambda-invoker-1.0.0.tgz","fileCount":29,"unpackedSize":49583,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDIKpyctBztv9JePAYPuLvesSNyRE1ZvJ5msDnqRp8YSQIhAK1JY23TeLmGbY5C16ca3jQeJUnAR/LeSuMQMSDI16ga"}]},"_npmUser":{"name":"arkdiovierge","email":"arcadio.lopez@viergegroup.com"},"directories":{},"maintainers":[{"name":"arkdiovierge","email":"arcadio.lopez@viergegroup.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lambda-invoker_1.0.0_1758762128178_0.909627645044661"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-25T01:02:08.089Z","1.0.0":"2025-09-25T01:02:08.389Z","modified":"2025-09-25T01:02:08.610Z"},"maintainers":[{"name":"arkdiovierge","email":"arcadio.lopez@viergegroup.com"}],"description":"A TypeScript library for invoking AWS Lambda functions with encrypt/decrypt capabilities","homepage":"https://github.com/yourusername/lambda-invoker#readme","keywords":["aws","lambda","encrypt","decrypt","typescript","localstack"],"repository":{"type":"git","url":"git+https://github.com/yourusername/lambda-invoker.git"},"author":{"name":"Your Name"},"bugs":{"url":"https://github.com/yourusername/lambda-invoker/issues"},"license":"MIT","readme":"# LambdaInvoker\n\n[![npm version](https://badge.fury.io/js/lambda-invoker.svg)](https://badge.fury.io/js/lambda-invoker)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA TypeScript library for invoking AWS Lambda functions with encrypt/decrypt capabilities. Designed as a reusable library that can be easily integrated into other projects.\n\n## ✨ Features\n\n- 🔐 **Encrypt/Decrypt Operations**: Send any JSON to encrypt, receive an ID for decryption\n- 🏗️ **Library Design**: Clean class-based API for easy integration\n- 📚 **Full TypeScript Support**: Complete type definitions and JSDoc documentation\n- 🐳 **LocalStack Compatible**: Test locally with LocalStack\n- ⚙️ **Flexible Configuration**: Environment variables or programmatic configuration\n- 🚀 **AWS SDK v3**: Modern AWS SDK with tree-shaking support\n- 📦 **Zero Dependencies**: Only peer dependencies on AWS SDK\n\n## 📦 Installation\n\n```bash\nnpm install lambda-invoker @aws-sdk/client-lambda\n# or\nyarn add lambda-invoker @aws-sdk/client-lambda\n# or\npnpm add lambda-invoker @aws-sdk/client-lambda\n```\n\n## 🚀 Quick Start\n\n### 1. Basic Usage (Environment Variables)\n\n```typescript\nimport { createLambdaInvokerFromEnv } from 'lambda-invoker';\n\n// Automatically reads from .env file\nconst lambdaInvoker = createLambdaInvokerFromEnv();\n\n// Encrypt any JSON object\nconst result = await lambdaInvoker.encrypt({\n  name: 'Alice',\n  email: 'alice@example.com',\n  sensitiveData: 'secret123'\n});\n\nconsole.log('Encrypted ID:', result.payload?.id);\n\n// Decrypt using the ID\nconst decrypted = await lambdaInvoker.decrypt(result.payload!.id);\nconsole.log('Decrypted data:', decrypted.payload);\n```\n\n### 2. Programmatic Configuration\n\n```typescript\nimport { LambdaInvoker } from 'lambda-invoker';\n\nconst lambdaInvoker = new LambdaInvoker({\n  region: 'us-east-1',\n  encryptFunctionName: 'my-encrypt-function',\n  decryptFunctionName: 'my-decrypt-function',\n  accessKeyId: 'your-access-key',\n  secretAccessKey: 'your-secret-key',\n  // Optional: LocalStack endpoint\n  endpoint: 'http://localhost:4566'\n});\n\nconst result = await lambdaInvoker.encrypt({ message: 'Hello World' });\nconst decrypted = await lambdaInvoker.decrypt(result.payload!.id);\n```\n\n### 3. Mixed Configuration (Parameters + Environment Variables)\n\n```typescript\nimport { createLambdaInvoker } from 'lambda-invoker';\n\n// Override specific parameters, others fall back to environment variables\nconst lambdaInvoker = createLambdaInvoker({\n  region: 'us-west-2',  // Override env var\n  endpoint: 'http://localhost:4566',  // Override for LocalStack\n  // encryptFunctionName and decryptFunctionName will use env vars\n});\n\nconst result = await lambdaInvoker.encrypt({ data: 'test' });\n```\n\n## 📁 Project Structure\n\n```\nlambda-invoker/\n├── lib/                    # Compiled library (published to npm)\n│   └── index.js           # Main library entry point\n├── examples/              # Usage examples\n│   ├── basic-usage.ts     # Basic usage example\n│   ├── programmatic-config.ts\n│   ├── mixed-config.ts\n│   ├── error-handling.ts\n│   └── README.md\n├── src/                   # Source code\n│   ├── LambdaInvoker.ts   # Main library class\n│   ├── index.ts          # Library exports\n│   └── cli.ts            # CLI tool\n├── docs/                  # Documentation\n├── .example.env          # Environment variables template\n├── package.json\n├── tsconfig.json\n├── tsconfig.lib.json     # Library build config\n└── README.md\n```\n\n## 🔧 Configuration\n\n### Environment Variables\n\nCreate a `.env` file with:\n\n```bash\nAWS_REGION=us-east-1\nAWS_ACCESS_KEY_ID=your-access-key\nAWS_SECRET_ACCESS_KEY=your-secret-key\nAWS_SESSION_TOKEN=your-session-token  # Optional\n\nLAMBDA_ENCRYPT_FUNCTION_NAME=encrypt\nLAMBDA_DECRYPT_FUNCTION_NAME=decrypt\n\n# Optional: for LocalStack\nAWS_ENDPOINT_URL=http://localhost:4566\n```\n\n### Lambda Function Requirements\n\nYour Lambda functions should follow these contracts:\n\n#### Encrypt Function\n- **Input**: Any JSON object\n- **Output**: `{ id: string }`\n- **Example**:\n  ```json\n  // Input\n  { \"name\": \"Alice\", \"email\": \"alice@example.com\" }\n  \n  // Output\n  { \"id\": \"encrypted-id-12345\" }\n  ```\n\n#### Decrypt Function\n- **Input**: `{ id: string }`\n- **Output**: The original JSON object\n- **Example**:\n  ```json\n  // Input\n  { \"id\": \"encrypted-id-12345\" }\n  \n  // Output\n  { \"name\": \"Alice\", \"email\": \"alice@example.com\" }\n  ```\n\n## 📚 API Reference\n\n### Classes\n\n#### `LambdaInvoker`\n\nMain class for invoking encrypt/decrypt Lambda functions.\n\n```typescript\nclass LambdaInvoker {\n  constructor(config: LambdaInvokerConfig)\n  async encrypt(payload: Record<string, unknown>): Promise<LambdaInvokeResult<{ id: string }>>\n  async decrypt(id: string): Promise<LambdaInvokeResult<unknown>>\n}\n```\n\n### Functions\n\n#### `createLambdaInvokerFromEnv()`\n\nCreates a LambdaInvoker instance using only environment variables.\n\n```typescript\nfunction createLambdaInvokerFromEnv(): LambdaInvoker\n```\n\n#### `createLambdaInvoker(options?)`\n\nCreates a LambdaInvoker instance with optional parameters that fall back to environment variables.\n\n```typescript\nfunction createLambdaInvoker(options?: LambdaInvokerOptions): LambdaInvoker\n```\n\n### Types\n\n#### `LambdaInvokerConfig`\n\n```typescript\ninterface LambdaInvokerConfig {\n  region: string;                    // AWS region\n  accessKeyId?: string;             // Optional AWS access key\n  secretAccessKey?: string;         // Optional AWS secret key\n  sessionToken?: string;            // Optional session token\n  endpoint?: string;                // Optional custom endpoint\n  encryptFunctionName: string;      // Encrypt Lambda function name/ARN\n  decryptFunctionName: string;      // Decrypt Lambda function name/ARN\n}\n```\n\n#### `LambdaInvokerOptions`\n\n```typescript\ninterface LambdaInvokerOptions {\n  region?: string;                  // Optional AWS region (falls back to AWS_REGION env var)\n  accessKeyId?: string;             // Optional AWS access key (falls back to AWS_ACCESS_KEY_ID env var)\n  secretAccessKey?: string;         // Optional AWS secret key (falls back to AWS_SECRET_ACCESS_KEY env var)\n  sessionToken?: string;            // Optional session token (falls back to AWS_SESSION_TOKEN env var)\n  endpoint?: string;                // Optional custom endpoint (falls back to AWS_ENDPOINT_URL env var)\n  encryptFunctionName?: string;     // Optional encrypt function name (falls back to LAMBDA_ENCRYPT_FUNCTION_NAME env var)\n  decryptFunctionName?: string;     // Optional decrypt function name (falls back to LAMBDA_DECRYPT_FUNCTION_NAME env var)\n}\n```\n\n#### `LambdaInvokeResult<T>`\n\n```typescript\ninterface LambdaInvokeResult<T> {\n  statusCode: number;               // HTTP status code\n  requestId?: string;              // AWS request ID\n  payload?: T;                     // Parsed response payload\n  raw?: Uint8Array;               // Raw response data\n}\n```\n\n## 🧪 Examples\n\nRun the included examples:\n\n```bash\n# Basic usage\nnpm run example:basic\n\n# Programmatic configuration\nnpm run example:programmatic\n\n# Mixed configuration\nnpm run example:mixed\n\n# Error handling\nnpm run example:errors\n```\n\nOr run them directly:\n\n```bash\nnpx ts-node examples/basic-usage.ts\nnpx ts-node examples/programmatic-config.ts\nnpx ts-node examples/mixed-config.ts\nnpx ts-node examples/error-handling.ts\n```\n\n## 🐳 LocalStack Testing\n\nFor local development with LocalStack:\n\n```bash\n# Start LocalStack\ndocker run -p 4566:4566 localstack/localstack\n\n# Configure environment\nexport AWS_ENDPOINT_URL=http://localhost:4566\nexport AWS_ACCESS_KEY_ID=test\nexport AWS_SECRET_ACCESS_KEY=test\nexport LAMBDA_ENCRYPT_FUNCTION_NAME=encrypt\nexport LAMBDA_DECRYPT_FUNCTION_NAME=decrypt\n\n# Test\nnpx ts-node examples/basic-usage.ts\n```\n\n## 🛠️ Development\n\n### Building the Library\n\n```bash\n# Build for development\nnpm run build\n\n# Build library for publishing\nnpm run build:lib\n```\n\n### CLI Usage\n\nThe project includes a CLI for testing:\n\n```bash\n# Encrypt\nnpm run encrypt -- '{\"name\":\"Alice\",\"email\":\"alice@example.com\"}'\n\n# Decrypt\nnpm run decrypt -- \"encrypted-id-here\"\n```\n\n### With Makefile\n\n```bash\nmake init                    # Setup project\nmake encrypt TEXT='{\"name\":\"Alice\"}'\nmake decrypt CIPHERTEXT=\"encrypted-id\"\n```\n\n## 📋 Requirements\n\n- Node.js 18+\n- AWS credentials with `lambda:InvokeFunction` permission\n- TypeScript 4.5+ (for development)\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- AWS SDK v3 team for the excellent TypeScript support\n- LocalStack team for local AWS development\n- TypeScript team for the amazing language features","readmeFilename":"README.md","_rev":"1-4d3df7e41502212121edb969ef306507"}