export interface OS3Flow {
  /**
   * The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL.
   */
  refreshUrl?: string;
  /**
   * The available scopes for the OAuth2 security scheme. A map between the scope name and a short description for it.
   */
  scopes: {[key: string]: string};
}

export interface OS3FlowImplicit extends OS3Flow {
  /**
   * The authorization URL to be used for this flow. This MUST be in the form of a URL.
   */
  authorizationUrl: string;
}

export interface OS3FlowPassword extends OS3Flow {
  /**
   * The token URL to be used for this flow. This MUST be in the form of a URL.
   */
  tokenUrl: string;
}

export interface OS3FlowClientCredentials extends OS3Flow {
  /**
   * The token URL to be used for this flow. This MUST be in the form of a URL.
   */
  tokenUrl: string;
}

export interface OS3FlowAuthorizationCode extends OS3Flow {
  /**
   * The authorization URL to be used for this flow. This MUST be in the form of a URL.
   */
  authorizationUrl: string;
  /**
   * The token URL to be used for this flow. This MUST be in the form of a URL.
   */
  tokenUrl: string;
}

export interface OS3Flows {
  implicit?: OS3FlowImplicit;
  password?: OS3FlowPassword;
  clientCredentials?: OS3FlowClientCredentials;
  authorizationCode?: OS3FlowAuthorizationCode;
}
