{"_id":"@anbari/aws-sign","_rev":"1-fceb81f40c20596e76472050473562c1","name":"@anbari/aws-sign","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@anbari/aws-sign","version":"1.0.0","author":{"name":"Anbari Dev Team","email":"dev@anbari.space","url":"https://anbari.space"},"description":"Sign, Parse and Validate AWS requests","keywords":["aws","typescript","signature"],"main":"./dist/index.js","license":"MIT","type":"module","dependencies":{"moment":"^2.29.3"},"devDependencies":{"@types/jest":"^27.5.1","@types/node":"^16.11","@typescript-eslint/eslint-plugin":"^5.14","@typescript-eslint/parser":"^5.14","eslint":"^8.11","eslint-config-prettier":"^8.5","eslint-plugin-jest":"^26.1","jest":"^28.1","node-mocks-http":"^1.11.0","prettier":"^2.5","ts-jest":"^28.0","typescript":"^4.6"},"scripts":{"build":"tsc -p tsconfig.json","build:watch":"tsc -w -p tsconfig.json","lint":"eslint . --ext .ts","test":"NODE_OPTIONS=--experimental-vm-modules jest","test:watch":"jest --watch"},"gitHead":"7ef1ed90f7a9259a4f9409a86606cece49ba5663","_id":"@anbari/aws-sign@1.0.0","_nodeVersion":"16.15.0","_npmVersion":"8.5.5","dist":{"integrity":"sha512-r9SFGhZLzrY8JCHE4WeJ2HfJzBEY8naIGLkoJGbPD3nNNPg9N4uJXzBIeu9qKlSL1XKvFdehVmyUMl91MFwXMg==","shasum":"0554318c477f1b159e9ebb439477d0723dc47d16","tarball":"https://registry.npmjs.org/@anbari/aws-sign/-/aws-sign-1.0.0.tgz","fileCount":20,"unpackedSize":38232,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJa4GKmw50AigobmM4C8VIOEaFfyp0674cYpdb1bzdYgIhAMvXDbhTOA/OO0/9LyKv2jbVrTsjsOnbD9/uuC/b/oAn"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJimOMbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqKDxAAhjvumIkOV7p8C6YaFmXBoB+wD9it+KeQPj/+6cdv2bH7WoRX\r\nx+y7nZLZypzW00kG3J9EDVRJk/h81gASw5rYjb1MuA7jmhTch7aGhNEdqnEZ\r\nWjgiMbi0F513JUxEOzHpf0Fe+n7+mPmxTRNN9QfeN5invqM99UoPR9hlCIPn\r\nJUc3Mpmaqo9DyHZJ9CnteLbxJ57pSDwWd4YnpnHKXG3ox1Q8sNdNYemdRBkS\r\nNXjgxmK6vrMuywPBHzPiHKYbeqk70SfNOixk+2eBzFOonaD1yScNiIKFb2d2\r\nkUAbi/gFL/82CmiBSCku2UQCG+jldZeptF+4svRDCRyAIRnYcInqb86q+qXJ\r\nDF7XFyhf+zByjDCNyaP/h/S3Dd4+4ZuTylV4aTm8XD86do1VfaxzkQaCEZ0o\r\n19Fv7NKi82gygvUHPoPq6AnSEsSzR9hFTFlil8exgfYF4+I2mwCOzRtny0x/\r\nun8l4AAsxTlkBc6xOIHB4Yc0ddaJciowDxaaSEd4mQzyb5/t5ZkpJxvyBbAL\r\nEWD5O4oaCGGx/XssheuWJg1qUqy0YykWx6Tvtahsaqcw1Jg51b9ZIYSOogmK\r\nCsl3LE87xyxQpnUC/ZUE/Z+QFo345G6pcQfrBO9YynRdYdrxeZbv+iV5p7vh\r\nRBtAmm2Z7cQ3g05+CqESYCMDGi/yYKCzLbg=\r\n=IrI5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"yeganemehr","email":"yeganemehr@jeyserver.com"},"directories":{},"maintainers":[{"name":"yeganemehr","email":"yeganemehr@jeyserver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aws-sign_1.0.0_1654186779280_0.03787703152708222"},"_hasShrinkwrap":false},"1.0.1":{"name":"@anbari/aws-sign","version":"1.0.1","author":{"name":"Anbari Dev Team","email":"dev@anbari.space","url":"https://anbari.space"},"description":"Sign, Parse and Validate AWS requests","keywords":["aws","typescript","signature"],"main":"./dist/index.js","license":"MIT","type":"module","dependencies":{"moment":"^2.29.3"},"devDependencies":{"@types/jest":"^27.5.1","@types/node":"^16.11","@typescript-eslint/eslint-plugin":"^5.14","@typescript-eslint/parser":"^5.14","eslint":"^8.11","eslint-config-prettier":"^8.5","eslint-plugin-jest":"^26.1","jest":"^28.1","node-mocks-http":"^1.11.0","prettier":"^2.5","ts-jest":"^28.0","typescript":"^4.6"},"scripts":{"build":"tsc -p tsconfig.json","build:watch":"tsc -w -p tsconfig.json","lint":"eslint . --ext .ts","test":"NODE_OPTIONS=--experimental-vm-modules jest","test:watch":"jest --watch"},"gitHead":"2b302132baca85df3780b8d9974886ebf9b485de","_id":"@anbari/aws-sign@1.0.1","_nodeVersion":"16.15.0","_npmVersion":"8.5.5","dist":{"integrity":"sha512-GEdTbPCuH46GNQc9QFvjQovoGvjUa5Ren+0w/7uJMzJHD7CCq8nDM+VZmasaXSUtXZwzXlKEemOOFd23HaHQcQ==","shasum":"3729580a90c1a2f6f080e1fa7e63dfe99beb518c","tarball":"https://registry.npmjs.org/@anbari/aws-sign/-/aws-sign-1.0.1.tgz","fileCount":20,"unpackedSize":37981,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFwgtq4Z+uAGYYJZWzYD/HZi0VFcKJAjZAmmmRbv8X3hAiAiNPjCwJAXMqIFbc27wZI7OrAEzzEX7bpD6kDBYJhWNQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJimOdPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr4yw/5AFueKAaKm7ERqHEfS/BqaashOxcN9R2iY81/ucHCnqdUCkIA\r\nM4h0tVXxs69X1wSyvEhJNM6r6tCXnl7ew10+HLPKJHiePq3WtF4zxO/uVtAI\r\nWI289EG0Ln1rQvcMmRcGV99ZgeIE5kq//NlHJ8uyBsSkZooXeI5tE4gDA5FV\r\ni4Kze+1yI9brUor9akZm605T7718PVZrDy6dgqdSNJeo0hBsyS/LKQWk3Aj1\r\ncBXrzGVm8nxgi5bwbq6UfoaH8m4IhtxHIrHxdBxJYJdS/k/gQFt9R7iKBfKY\r\n4dIaUVgtEJad799AsQSHlZMcjwYpecpwRkjLqZ0D4l7HkTqRc92wte7l6yv4\r\n2Y3kX47HbVwVwezjJxFeHttjGBzFp25rfkUa2i8aIHEraJAPsaophtbE7JnF\r\nllyfBtqzDNWqhaQ0Sch+P0Z75J7z/rltIzVD9qVSsPVvHAjW/s11G8b/KRBc\r\nFQqcoAGieytIey9hyezhRS89tqDVdTdyYJpsZa0NGRO1smN465M8gJV38ZnN\r\n9gXRZwsO9q8K4rOVwOGjOwl/e9PBTdwdB17oPT+LTY3yw1E2bwdDIF4z/M27\r\nUuUtXRmmlFX78Sx29iWHCBbV+EZSsGOOS2mDTEBcv3SMW5iawYlOaT+BKlFG\r\n8IXtT4K1rW3QXjH97+mFIdJTfYsjkSsErYQ=\r\n=qZpr\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"yeganemehr","email":"yeganemehr@jeyserver.com"},"directories":{},"maintainers":[{"name":"yeganemehr","email":"yeganemehr@jeyserver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aws-sign_1.0.1_1654187855541_0.5893260833214673"},"_hasShrinkwrap":false}},"time":{"created":"2022-06-02T16:19:39.229Z","1.0.0":"2022-06-02T16:19:39.493Z","modified":"2022-06-02T16:37:35.831Z","1.0.1":"2022-06-02T16:37:35.731Z"},"maintainers":[{"name":"yeganemehr","email":"yeganemehr@jeyserver.com"}],"description":"Sign, Parse and Validate AWS requests","keywords":["aws","typescript","signature"],"author":{"name":"Anbari Dev Team","email":"dev@anbari.space","url":"https://anbari.space"},"license":"MIT","readme":"This package can help to whomever wants to implement a AWS server or client.\nIt's goals is to provide some class to sign outgoing requests (client-side), parse and verify signatures for incoming requests (server-side).\n\nIt also contain some utility class to help you read and write [chunked streams](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html).\n\n## Installation\n\nYou can install using npm.\n```\nnpm install @anbari/aws-sign\n```\n\n## Usage\n\n### Sign V4\n```ts\nimport { SignerV4 } from \"@anbari/aws-sign\";\n\nconst accessKey = \"AKIDEXAMPLE\";\nconst secretKey = \"wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY\";\n\nconst signer = new SignerV4();\nconst headers = {\n\tHost: \"iam.amazonaws.com\",\n\t\"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n\t\"X-Amz-Date\": \"20150830T123600Z\",\n};\nconst signedHeaders = Object.keys(headers);\nconst credential = new Credential(\"us-east-1\", new Date(Date.UTC(2015, 7, 30, 12, 36, 0, 0)), \"iam\", accessKey);\n\nconst sign = signer.sign(\"GET\", \"/?Action=ListUsers&Version=2010-05-08\", headers, credential, secretKey, signedHeaders);\n\nconsole.log(sign.toString()); // \n```\n\n### Parse Authorization Header\n\n```ts\nimport { ParserV4 } from \"@anbari/aws-sign\";\n\nconst parser = new ParserV4();\nconst sign = parser.parseAuthorization(\"AWS4-HMAC-SHA512 Credential=AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=signature\");\nconsole.log(sign);\n```\n\n### Validate Incoming Request\n\n```ts\nimport {Server} from \"http\";\nimport { ParserV4, ParserV4, SignerV4, IUserRepository, Credential } from \"@anbari/aws-sign\";\n\nclass UserRepository implements IUserRepository {\n\tpublic async findByCredential(credential: Credential): Promise<IUser | undefined> {\n\t\tif (credential.accessKey === \"AKIDEXAMPLE\") {\n\t\t\treturn {\n\t\t\t\taccessKey: credential.accessKey,\n\t\t\t\tsecretKey: \"wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY\"\n\t\t\t};\n\t\t}\n\t\tif (credential.accessKey === \"AKIAIOSFODNN7EXAMPLE\") {\n\t\t\treturn {\n\t\t\t\taccessKey: credential.accessKey,\n\t\t\t\tsecretKey: \"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n}\n\nconst server = new Server((req, res) => {\n\tconst parser = new ParserV4();\n\tconst signer = new SignerV4();\n\tconst users = new UserRepository();\n\tconst validator = new ValidatorV4(parser, signer, users);\n\tconst result = await validator.validateIncomingRequest(req);\n\tresult.body.pipe(res);\n});\n\n```\n","readmeFilename":"README.md"}