All files / src/tools/auth0/handlers emailProvider.ts

88.23% Statements 30/34
78.57% Branches 11/14
100% Functions 4/4
93.75% Lines 30/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 671x     1x     1x   1x   136x             10x 10x               5x       5x   5x   5x   5x 2x 1x 1x   2x     3x 2x   1x 1x 1x       3x 1x 1x 1x 1x   2x 2x 2x 2x        
import DefaultHandler from './default';
import { Asset, Assets } from '../../../types';
 
export const schema = { type: 'object' };
 
// The Management API requires the fields to be specified
const defaultFields = ['name', 'enabled', 'credentials', 'settings', 'default_from_address'];
 
export default class EmailProviderHandler extends DefaultHandler {
  constructor(options: DefaultHandler) {
    super({
      ...options,
      type: 'emailProvider',
    });
  }
 
  async getType(): Promise<Asset> {
    try {
      return await this.client.emailProvider.get({ include_fields: true, fields: defaultFields });
    } catch (err) {
      if (err.statusCode === 404) return {};
      throw err;
    }
  }
 
  objString(provider) {
    return super.objString({ name: provider.name, enabled: provider.enabled });
  }
 
  async processChanges(assets: Assets): Promise<void> {
    const { emailProvider } = assets;
 
    Iif (!emailProvider) return;
 
    let existing = await this.getType();
 
    if (Object.keys(emailProvider).length === 0) {
      if (this.config('AUTH0_ALLOW_DELETE') === true) {
        await this.client.emailProvider.delete();
        this.didDelete(existing);
      }
      return;
    }
 
    if (existing.name) {
      if (existing.name !== emailProvider.name) {
        // Delete the current provider as it's different
        await this.client.emailProvider.delete();
        this.didDelete(existing);
        existing = {};
      }
    }
 
    if (existing.name) {
      const provider = { name: emailProvider.name, enabled: emailProvider.enabled };
      const updated = await this.client.emailProvider.update(provider, emailProvider);
      this.updated += 1;
      this.didUpdate(updated);
    } else {
      const provider = { name: emailProvider.name, enabled: emailProvider.enabled };
      const created = await this.client.emailProvider.configure(provider, emailProvider);
      this.created += 1;
      this.didCreate(created);
    }
  }
}