Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

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.