async createEndpoints()

in provider-utils/awscloudformation/cloudformation-templates/livestream-helpers/LambdaFunctions/psdemo-js-live-workflow_v0.4.0/lib/babelfish.js [270:332]


  async createEndpoints() {
    const promises = this.endpoints.map((endpoint) => {
      let params;
      switch (endpoint.toLowerCase()) {
        case 'hls':
          params = this.createHlsPackageParams();
          break;
        case 'dash':
          params = this.createDashPackageParams();
          break;
        case 'mss':
          params = this.createMssPackageParams();
          break;
        case 'cmaf':
          params = this.createCmafPackageParams();
          break;
        default:
          console.log(`${endpoint} NOT IMPL`);
          params = undefined;
      }

      return (params !== undefined)
        ? this.babelfish.createOriginEndpoint(params).promise()
        : undefined;
    });
    const responses = await Promise.all(promises);
    /* even if package is not created, we still need to report it to CF */
    const initSettings = {
      HlsEndpoint: '',
      DashEndpoint: '',
      MssEndpoint: '',
      CmafEndpoint: '',
    };
    const results = responses.filter(x => x).reduce((acc, cur) => {
      const {
        Url, CmafPackage, DashPackage, HlsPackage, MssPackage,
      } = cur;
      acc.DomainEndpoint = acc.DomainEndpoint || new Set();
      acc.DomainEndpoint.add(URL.parse(Url).hostname);
      if (HlsPackage) {
        return Object.assign({}, acc, { HlsEndpoint: Url });
      }
      if (DashPackage) {
        return Object.assign({}, acc, { DashEndpoint: Url });
      }
      if (MssPackage) {
        return Object.assign({}, acc, { MssEndpoint: Url });
      }
      if (CmafPackage) {
        return Object.assign({}, acc, { CmafEndpoint: CmafPackage.HlsManifests[0].Url });
      }
      return acc;
    }, initSettings);
    /* serialize DomainName array */
    // results.DomainEndpoint = Array.from(results.DomainEndpoint).join(',');
    /**
     * CAUTION: AWS::CloudFront::Distribution could only take a single origin (string)
     * If we would need to support multiple origins, we might need to go with CustomResource!
     */
    const [DomainEndpoint] = Array.from(results.DomainEndpoint);
    results.DomainEndpoint = DomainEndpoint;
    return results;
  }