Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jimmyn/angular-aws-apig
Angular interceptor for $http service that signs all requests to AWS APIGateway with IAM credentials.
https://github.com/jimmyn/angular-aws-apig
angular-interceptor aws aws-apigateway iam-credentials interceptor
Last synced: about 4 hours ago
JSON representation
Angular interceptor for $http service that signs all requests to AWS APIGateway with IAM credentials.
- Host: GitHub
- URL: https://github.com/jimmyn/angular-aws-apig
- Owner: jimmyn
- Created: 2016-04-14T10:03:12.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2016-05-16T14:40:35.000Z (over 8 years ago)
- Last Synced: 2024-11-10T04:02:47.234Z (6 days ago)
- Topics: angular-interceptor, aws, aws-apigateway, iam-credentials, interceptor
- Language: JavaScript
- Homepage:
- Size: 906 KB
- Stars: 13
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# angular-aws-apig
This library provides an **Interceptor** for angular `$http` service that signs all request to **AWS APIGateway** with IAM credentials. It is handy when you use **temprorary IAM Credentials** from `AWS Cognito` or `Auth0`. Although **AWS APIGateway** provides autogenerated Javascript SDK, you can't use it with angular `$http` service and you need to regenerate it every time you change something in the API.
## Installing it
You have several options:
````bash
bower install angular-aws-apig --save
````````bash
npm install angular-aws-apig --save
````Or just include `dist/angular-aws-apig.js` or `dist/angular-aws-apig.min.js` in to your index.html
## Basic usage
````js
angular.module('app', ['angular-aws-apig'])
.config(function Config($httpProvider, APIGInterceptorProvider) {
APIGInterceptorProvider.config({
headers: {},
region: 'us-east-1',
service: 'execute-api',
urlRegex: ''
})/* @ngInject */
APIGInterceptorProvider.headersGetter = function(myService, request) {
myService.doSomething();
return request.headers;
};/* @ngInject */
APIGInterceptorProvider.credentialsGetter = function(store, request) {
return store.get('credentials');
};$httpProvider.interceptors.push('APIGInterceptor');
});
````## APIGInterceptorProvider.config
* `headers` - global headers that would be added to all api requests (default: `{}`)
* `region` - AWS region (default: `us-east-1`)
* `service` - AWS service (default: `execute-api`)
* `urlRegex` - RegEx string, Interceptor would ignore requests to url that doesn't match this RegEx. (default: `''`)All options could be passed in `APIGInterceptorProvider.config` function as a single object or assigned directly
````js
APIGInterceptorProvider.urlRegex = 'myapi.com';
````## APIGInterceptorProvider.headersGetter
A function that provides dynamic headers. It accepts `$http request` object as a parameter and must return `headers` object. You can pass angular dependencies in this function.````js
APIGInterceptorProvider.headersGetter = function($rootScope, request) {
var headers = request.headers
headers.foo = $rootScope.foo;
return headers;
};
````## APIGInterceptorProvider.credentialsGetter
A function that provides dynamic AWS IAM Credentials. It accepts `$http request` object as a parameter and must return `credentials` object. You can pass angular dependencies in this function. Function can return `$q` promise.
**If this function is not specified `APIGInterceptor` will try to get credentials from `AWS.config.credentials`**````js
APIGInterceptorProvider.credentialsGetter = function(awsCredentials, auth) {
return awsCredentials.get(auth.idToken);
};
````In this example `awsCredentials.get` returns a promise that resolves with `credentials` object
````js
{
accessKeyId: 'accessKeyId',
secretAccessKey: 'secretAccessKey',
sessionToken: 'sessionToken'
}
````## $APIGError event
This event would be triggered on request error.
````js
$rootScope.$on('$APIGError', (event, error) => {
$log.debug(event, error);
});
````## Credits
This library is a wrapper around [aws4](https://github.com/mhart/aws4) npm package.