static create()

in provisioning/device/src/client.ts [40:87]


  static create(provisioningHost: string, idScope: string, transport: X509ProvisioningTransport | TpmProvisioningTransport | SymmetricKeyProvisioningTransport, securityClient: X509SecurityClient | TpmSecurityClient | SymmetricKeySecurityClient): RegistrationClient {
    /*Codes_SRS_PROVISIONING_CLIENT_06_001: [The `create` method shall throw `ReferenceError` if the `provisioningHost` argument is falsy.] */
    if (!provisioningHost) {
      throw new ReferenceError('Required argument provisioningHost not present.');
    }

    /*Codes_SRS_PROVISIONING_CLIENT_06_002: [The `create` method shall throw `ReferenceError` if the `idScope` argument is falsy.] */
    if (!idScope) {
      throw new ReferenceError('Required argument idScope not present.');
    }

    const isX509Security: boolean = ((securityClient as X509SecurityClient).getCertificate !== undefined);
    const isX509Transport: boolean = ((transport as X509ProvisioningTransport).setAuthentication !== undefined);
    const isTpmSecurity: boolean = ((securityClient as TpmSecurityClient).getEndorsementKey !== undefined);
    const isTpmTransport: boolean = ((transport as TpmProvisioningTransport).getAuthenticationChallenge !== undefined);
    const isSymmetricKeySecurity: boolean = ((securityClient as SymmetricKeySecurityClient).createSharedAccessSignature !== undefined);
    const isSymmetricKeyTransport: boolean = ((transport as SymmetricKeyProvisioningTransport).setSharedAccessSignature !== undefined);

    if (isX509Security) {
      if (isX509Transport) {
        /* Codes_SRS_PROVISIONING_CLIENT_18_001: [ If `securityClient` implements `X509SecurityClient` and the `transport` implements `X509ProvisioningTransport`, then `create` shall return an `X509Registration` object. ] */
        return new X509Registration(provisioningHost, idScope, transport as X509ProvisioningTransport, securityClient as X509SecurityClient);
      } else {
        /* Codes_SRS_PROVISIONING_CLIENT_18_002: [ If `securityClient` implements `X509SecurityClient` and the `transport` does not implement `X509ProvisioningTransport`, then `create` shall throw an `ArgumentError` exception. ] */
        throw new errors.ArgumentError('Transport does not support X509 authentication');
      }
    } else if (isTpmSecurity) {
      if (isTpmTransport) {
        /* Codes_SRS_PROVISIONING_CLIENT_18_003: [ If `securityClient` implements `TPMSecurityClient` and the `transport` supports TPM authentication, then `create` shall return a `TpmRegistration` object. ] */
        return new TpmRegistration(provisioningHost, idScope, transport as TpmProvisioningTransport, securityClient as TpmSecurityClient);
      } else {
        /* Codes_SRS_PROVISIONING_CLIENT_18_004: [ If `securityClient` implements `TPMSecurityClient` and the `transport` dos not implement `TPMProvisioningTransport`, then `create` shall throw an `ArgumentError` exception. ] */
        throw new errors.ArgumentError('Transport does not support TPM authentication');
      }
    } else if (isSymmetricKeySecurity) {
      if (isSymmetricKeyTransport) {
        /* Codes_SRS_PROVISIONING_CLIENT_06_003: [If `securityClient` implements `SymmetricKeySecurityClient` and the `transport` implements `SymmetricKeyProvisioningTransport`, then `create` shall return an `SymmetricKeyRegistration` object.] */
        return new SymmetricKeyRegistration(provisioningHost, idScope, transport as SymmetricKeyProvisioningTransport, securityClient as SymmetricKeySecurityClient);

      } else {
        /* Codes_SRS_PROVISIONING_CLIENT_06_004: [If `securityClient` implements `SymmetricKeySecurityClient` and the `transport` does not implement `SymmetricKeyProvisioningTransport`, then `create` shall throw an `ArgumentError` exception.] */
        throw new errors.ArgumentError('Transport does not support SymmetricKey authentication');
      }
    } else {
      /* Codes_SRS_PROVISIONING_CLIENT_18_005: [ If `securityClient` does not implement `X509SecurityClient`, `TPMSecurityClient`,  or `SymmetricKeySecurityClient` then `create` shall show an `ArgumentError` exception. ] */
      throw new errors.ArgumentError('Invalid security object');
    }
  }