/******************************************************************************
* Copyright (c) 2000-2019  Ericsson AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
*   Gabor Szalai - initial implementation and initial documentation
******************************************************************************/
//
//  File:               TS29510_NRF_OAuth2_v15.ttcn
//  Description:	      Type definitions for 3GPP TS29510
/////////////////////////////////////////////// 
module TS29510_NRF_OAuth2_v15 {

  import from TS29571_CommonData all
  import from TS29510_Nnrf_NFManagement all

  external function f_enc_AccessTokenRsp(in AccessTokenRsp pdu) return octetstring 
  with { extension "prototype(convert) encode(JSON)" }

  external function f_dec_AccessTokenRsp(in octetstring stream, out AccessTokenRsp pdu) return integer 
  with { extension "prototype(backtrack) decode(JSON)" }

  external function f_enc_AccessTokenErr(in AccessTokenErr pdu) return octetstring 
  with { extension "prototype(convert) encode(JSON)" }

  external function f_dec_AccessTokenErr(in octetstring stream, out AccessTokenErr pdu) return integer 
  with { extension "prototype(backtrack) decode(JSON)" }


  type set AccessTokenReq {
    enumerated { client_credentials} grant_type,
    TS29571_CommonData.NfInstanceId    nfInstanceId,
    TS29510_Nnrf_NFManagement.NFType    nfType,
    TS29510_Nnrf_NFManagement.NFType    targetNfType,
    charstring scope // (pattern "^([a-zA-Z0-9_]*[*]{0,1})$")
  }

  type set AccessTokenRsp {
    charstring access_token,
    charstring token_type,
    integer expires_in optional,
    charstring scope optional // (pattern "^([a-zA-Z0-9_]*[*]{0,1})$") 
  }

  type set AccessTokenClaims {
    TS29571_CommonData.NfInstanceId    issuer,
    charstring subject,
    set of       TS29571_CommonData.NfInstanceId    audience,
    charstring scope, // (pattern "^([a-zA-Z0-9_]*[*]{0,1})$"),
    integer expiration
  }

  type set AccessTokenErr {
    enumerated { invalid_request, invalid_client, invalid_grant, unauthorized_client, unsupported_grant_type, invalid_sope} error_,
    charstring error_description optional,
    charstring error_uri optional
  } with {
    variant (error_) "name as 'error'"
  }





} with {
  encode "JSON"
}
