func (_this *AssertionResponse) UserHandle() *javascript.ArrayBuffer {
	var ret *javascript.ArrayBuffer
	value := _this.Value_JS.Get("userHandle")
	if value.Type() != js.TypeNull && value.Type() != js.TypeUndefined {
		ret = javascript.ArrayBufferFromJS(value)
	}
	return ret
}
UserHandle returning attribute 'userHandle' with
type javascript.ArrayBuffer (idl: ArrayBuffer).
package authentication
import "syscall/js"
import (
	"github.com/gowebapi/webapi/device/sensor"
	"github.com/gowebapi/webapi/javascript"
)
func unused(value interface{}) {
}
type Union struct {
	Value js.Value
}
func (u *Union) JSValue() js.Value {
	return u.Value
}
func UnionFromJS(value js.Value) *Union {
	return &Union{Value: value}
}
type Attachment int
const (
	Platform Attachment = iota
	CrossPlatform
)
var authenticatorAttachmentToWasmTable = []string{
	"platform", "cross-platform",
}
var authenticatorAttachmentFromWasmTable = map[string]Attachment{
	"platform": Platform, "cross-platform": CrossPlatform,
}
func (this *Attachment) JSValue() js.Value {
	return js.ValueOf(this.Value())
}
func (this Attachment) Value() string {
	idx := int(this)
	if idx >= 0 && idx < len(authenticatorAttachmentToWasmTable) {
		return authenticatorAttachmentToWasmTable[idx]
	}
	panic("unknown input value")
}
func AttachmentFromJS(value js.Value) Attachment {
	key := value.String()
	conv, ok := authenticatorAttachmentFromWasmTable[key]
	if !ok {
		panic("unable to convert '" + key + "'")
	}
	return conv
}
type AttestationConveyancePreference int
const (
	None AttestationConveyancePreference = iota
	Indirect
	Direct
)
var attestationConveyancePreferenceToWasmTable = []string{
	"none", "indirect", "direct",
}
var attestationConveyancePreferenceFromWasmTable = map[string]AttestationConveyancePreference{
	"none": None, "indirect": Indirect, "direct": Direct,
}
func (this *AttestationConveyancePreference) JSValue() js.Value {
	return js.ValueOf(this.Value())
}
func (this AttestationConveyancePreference) Value() string {
	idx := int(this)
	if idx >= 0 && idx < len(attestationConveyancePreferenceToWasmTable) {
		return attestationConveyancePreferenceToWasmTable[idx]
	}
	panic("unknown input value")
}
func AttestationConveyancePreferenceFromJS(value js.Value) AttestationConveyancePreference {
	key := value.String()
	conv, ok := attestationConveyancePreferenceFromWasmTable[key]
	if !ok {
		panic("unable to convert '" + key + "'")
	}
	return conv
}
type TokenBindingStatus int
const (
	PresentTokenBindingStatus TokenBindingStatus = iota
	SupportedTokenBindingStatus
)
var tokenBindingStatusToWasmTable = []string{
	"present", "supported",
}
var tokenBindingStatusFromWasmTable = map[string]TokenBindingStatus{
	"present": PresentTokenBindingStatus, "supported": SupportedTokenBindingStatus,
}
func (this *TokenBindingStatus) JSValue() js.Value {
	return js.ValueOf(this.Value())
}
func (this TokenBindingStatus) Value() string {
	idx := int(this)
	if idx >= 0 && idx < len(tokenBindingStatusToWasmTable) {
		return tokenBindingStatusToWasmTable[idx]
	}
	panic("unknown input value")
}
func TokenBindingStatusFromJS(value js.Value) TokenBindingStatus {
	key := value.String()
	conv, ok := tokenBindingStatusFromWasmTable[key]
	if !ok {
		panic("unable to convert '" + key + "'")
	}
	return conv
}
type Transport int
const (
	TransportUsb Transport = iota
	TransportNfc
	TransportBle
	TransportInternal
)
var authenticatorTransportToWasmTable = []string{
	"usb", "nfc", "ble", "internal",
}
var authenticatorTransportFromWasmTable = map[string]Transport{
	"usb": TransportUsb, "nfc": TransportNfc, "ble": TransportBle, "internal": TransportInternal,
}
func (this *Transport) JSValue() js.Value {
	return js.ValueOf(this.Value())
}
func (this Transport) Value() string {
	idx := int(this)
	if idx >= 0 && idx < len(authenticatorTransportToWasmTable) {
		return authenticatorTransportToWasmTable[idx]
	}
	panic("unknown input value")
}
func TransportFromJS(value js.Value) Transport {
	key := value.String()
	conv, ok := authenticatorTransportFromWasmTable[key]
	if !ok {
		panic("unable to convert '" + key + "'")
	}
	return conv
}
type UserVerificationRequirement int
const (
	Required UserVerificationRequirement = iota
	Preferred
	Discouraged
)
var userVerificationRequirementToWasmTable = []string{
	"required", "preferred", "discouraged",
}
var userVerificationRequirementFromWasmTable = map[string]UserVerificationRequirement{
	"required": Required, "preferred": Preferred, "discouraged": Discouraged,
}
func (this *UserVerificationRequirement) JSValue() js.Value {
	return js.ValueOf(this.Value())
}
func (this UserVerificationRequirement) Value() string {
	idx := int(this)
	if idx >= 0 && idx < len(userVerificationRequirementToWasmTable) {
		return userVerificationRequirementToWasmTable[idx]
	}
	panic("unknown input value")
}
func UserVerificationRequirementFromJS(value js.Value) UserVerificationRequirement {
	key := value.String()
	conv, ok := userVerificationRequirementFromWasmTable[key]
	if !ok {
		panic("unable to convert '" + key + "'")
	}
	return conv
}
type AuthenticationExtensionsClientInputs struct {
	Appid         string
	TxAuthSimple  string
	TxAuthGeneric *TxAuthGenericArg
	AuthnSel      []*Union
	Exts          bool
	Uvi           bool
	Loc           bool
	Uvm           bool
}
func (_this *AuthenticationExtensionsClientInputs) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.Appid
	out.Set("appid", value0)
	value1 := _this.TxAuthSimple
	out.Set("txAuthSimple", value1)
	value2 := _this.TxAuthGeneric.JSValue()
	out.Set("txAuthGeneric", value2)
	value3 := js.Global().Get("Array").New(len(_this.AuthnSel))
	for __idx3, __seq_in3 := range _this.AuthnSel {
		__seq_out3 := __seq_in3.JSValue()
		value3.SetIndex(__idx3, __seq_out3)
	}
	out.Set("authnSel", value3)
	value4 := _this.Exts
	out.Set("exts", value4)
	value5 := _this.Uvi
	out.Set("uvi", value5)
	value6 := _this.Loc
	out.Set("loc", value6)
	value7 := _this.Uvm
	out.Set("uvm", value7)
	return out
}
func AuthenticationExtensionsClientInputsFromJS(value js.Wrapper) *AuthenticationExtensionsClientInputs {
	input := value.JSValue()
	var out AuthenticationExtensionsClientInputs
	var (
		value0 string             
		value1 string             
		value2 *TxAuthGenericArg  
		value3 []*Union           
		value4 bool               
		value5 bool               
		value6 bool               
		value7 bool               
	)
	value0 = (input.Get("appid")).String()
	out.Appid = value0
	value1 = (input.Get("txAuthSimple")).String()
	out.TxAuthSimple = value1
	value2 = TxAuthGenericArgFromJS(input.Get("txAuthGeneric"))
	out.TxAuthGeneric = value2
	__length3 := input.Get("authnSel").Length()
	__array3 := make([]*Union, __length3, __length3)
	for __idx3 := 0; __idx3 < __length3; __idx3++ {
		var __seq_out3 *Union
		__seq_in3 := input.Get("authnSel").Index(__idx3)
		__seq_out3 = UnionFromJS(__seq_in3)
		__array3[__idx3] = __seq_out3
	}
	value3 = __array3
	out.AuthnSel = value3
	value4 = (input.Get("exts")).Bool()
	out.Exts = value4
	value5 = (input.Get("uvi")).Bool()
	out.Uvi = value5
	value6 = (input.Get("loc")).Bool()
	out.Loc = value6
	value7 = (input.Get("uvm")).Bool()
	out.Uvm = value7
	return &out
}
type AuthenticationExtensionsClientOutputs struct {
	Appid         bool
	TxAuthSimple  string
	TxAuthGeneric *javascript.ArrayBuffer
	AuthnSel      bool
	Exts          []string
	Uvi           *javascript.ArrayBuffer
	Loc           *sensor.Coordinates
	Uvm           [][]uint
}
func (_this *AuthenticationExtensionsClientOutputs) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.Appid
	out.Set("appid", value0)
	value1 := _this.TxAuthSimple
	out.Set("txAuthSimple", value1)
	value2 := _this.TxAuthGeneric.JSValue()
	out.Set("txAuthGeneric", value2)
	value3 := _this.AuthnSel
	out.Set("authnSel", value3)
	value4 := js.Global().Get("Array").New(len(_this.Exts))
	for __idx4, __seq_in4 := range _this.Exts {
		__seq_out4 := __seq_in4
		value4.SetIndex(__idx4, __seq_out4)
	}
	out.Set("exts", value4)
	value5 := _this.Uvi.JSValue()
	out.Set("uvi", value5)
	value6 := _this.Loc.JSValue()
	out.Set("loc", value6)
	value7 := js.Global().Get("Array").New(len(_this.Uvm))
	for __idx7, __seq_in7 := range _this.Uvm {
		__seq_out7 := js.Global().Get("Array").New(len(__seq_in7))
		for __idx8, __seq_in8 := range __seq_in7 {
			__seq_out8 := __seq_in8
			__seq_out7.SetIndex(__idx8, __seq_out8)
		}
		value7.SetIndex(__idx7, __seq_out7)
	}
	out.Set("uvm", value7)
	return out
}
func AuthenticationExtensionsClientOutputsFromJS(value js.Wrapper) *AuthenticationExtensionsClientOutputs {
	input := value.JSValue()
	var out AuthenticationExtensionsClientOutputs
	var (
		value0 bool                     
		value1 string                   
		value2 *javascript.ArrayBuffer  
		value3 bool                     
		value4 []string                 
		value5 *javascript.ArrayBuffer  
		value6 *sensor.Coordinates      
		value7 [][]uint                 
	)
	value0 = (input.Get("appid")).Bool()
	out.Appid = value0
	value1 = (input.Get("txAuthSimple")).String()
	out.TxAuthSimple = value1
	value2 = javascript.ArrayBufferFromJS(input.Get("txAuthGeneric"))
	out.TxAuthGeneric = value2
	value3 = (input.Get("authnSel")).Bool()
	out.AuthnSel = value3
	__length4 := input.Get("exts").Length()
	__array4 := make([]string, __length4, __length4)
	for __idx4 := 0; __idx4 < __length4; __idx4++ {
		var __seq_out4 string
		__seq_in4 := input.Get("exts").Index(__idx4)
		__seq_out4 = (__seq_in4).String()
		__array4[__idx4] = __seq_out4
	}
	value4 = __array4
	out.Exts = value4
	value5 = javascript.ArrayBufferFromJS(input.Get("uvi"))
	out.Uvi = value5
	value6 = sensor.CoordinatesFromJS(input.Get("loc"))
	out.Loc = value6
	__length7 := input.Get("uvm").Length()
	__array7 := make([][]uint, __length7, __length7)
	for __idx7 := 0; __idx7 < __length7; __idx7++ {
		var __seq_out7 []uint
		__seq_in7 := input.Get("uvm").Index(__idx7)
		__length8 := __seq_in7.Length()
		__array8 := make([]uint, __length8, __length8)
		for __idx8 := 0; __idx8 < __length8; __idx8++ {
			var __seq_out8 uint
			__seq_in8 := __seq_in7.Index(__idx8)
			__seq_out8 = (uint)((__seq_in8).Int())
			__array8[__idx8] = __seq_out8
		}
		__seq_out7 = __array8
		__array7[__idx7] = __seq_out7
	}
	value7 = __array7
	out.Uvm = value7
	return &out
}
type AuthenticatorBiometricPerfBounds struct {
	FAR float32
	FRR float32
}
func (_this *AuthenticatorBiometricPerfBounds) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.FAR
	out.Set("FAR", value0)
	value1 := _this.FRR
	out.Set("FRR", value1)
	return out
}
func AuthenticatorBiometricPerfBoundsFromJS(value js.Wrapper) *AuthenticatorBiometricPerfBounds {
	input := value.JSValue()
	var out AuthenticatorBiometricPerfBounds
	var (
		value0 float32  
		value1 float32  
	)
	value0 = (float32)((input.Get("FAR")).Float())
	out.FAR = value0
	value1 = (float32)((input.Get("FRR")).Float())
	out.FRR = value1
	return &out
}
type CollectedClientData struct {
	Type         string
	Challenge    string
	Origin       string
	TokenBinding *TokenBinding
}
func (_this *CollectedClientData) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.Type
	out.Set("type", value0)
	value1 := _this.Challenge
	out.Set("challenge", value1)
	value2 := _this.Origin
	out.Set("origin", value2)
	value3 := _this.TokenBinding.JSValue()
	out.Set("tokenBinding", value3)
	return out
}
func CollectedClientDataFromJS(value js.Wrapper) *CollectedClientData {
	input := value.JSValue()
	var out CollectedClientData
	var (
		value0 string         
		value1 string         
		value2 string         
		value3 *TokenBinding  
	)
	value0 = (input.Get("type")).String()
	out.Type = value0
	value1 = (input.Get("challenge")).String()
	out.Challenge = value1
	value2 = (input.Get("origin")).String()
	out.Origin = value2
	value3 = TokenBindingFromJS(input.Get("tokenBinding"))
	out.TokenBinding = value3
	return &out
}
type SelectionCriteria struct {
	AuthenticatorAttachment Attachment
	RequireResidentKey      bool
	UserVerification        UserVerificationRequirement
}
func (_this *SelectionCriteria) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.AuthenticatorAttachment.JSValue()
	out.Set("authenticatorAttachment", value0)
	value1 := _this.RequireResidentKey
	out.Set("requireResidentKey", value1)
	value2 := _this.UserVerification.JSValue()
	out.Set("userVerification", value2)
	return out
}
func SelectionCriteriaFromJS(value js.Wrapper) *SelectionCriteria {
	input := value.JSValue()
	var out SelectionCriteria
	var (
		value0 Attachment                   
		value1 bool                         
		value2 UserVerificationRequirement  
	)
	value0 = AttachmentFromJS(input.Get("authenticatorAttachment"))
	out.AuthenticatorAttachment = value0
	value1 = (input.Get("requireResidentKey")).Bool()
	out.RequireResidentKey = value1
	value2 = UserVerificationRequirementFromJS(input.Get("userVerification"))
	out.UserVerification = value2
	return &out
}
type TokenBinding struct {
	Status TokenBindingStatus
	Id     string
}
func (_this *TokenBinding) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.Status.JSValue()
	out.Set("status", value0)
	value1 := _this.Id
	out.Set("id", value1)
	return out
}
func TokenBindingFromJS(value js.Wrapper) *TokenBinding {
	input := value.JSValue()
	var out TokenBinding
	var (
		value0 TokenBindingStatus  
		value1 string              
	)
	value0 = TokenBindingStatusFromJS(input.Get("status"))
	out.Status = value0
	value1 = (input.Get("id")).String()
	out.Id = value1
	return &out
}
type TxAuthGenericArg struct {
	ContentType string
	Content     *javascript.ArrayBuffer
}
func (_this *TxAuthGenericArg) JSValue() js.Value {
	out := js.Global().Get("Object").New()
	value0 := _this.ContentType
	out.Set("contentType", value0)
	value1 := _this.Content.JSValue()
	out.Set("content", value1)
	return out
}
func TxAuthGenericArgFromJS(value js.Wrapper) *TxAuthGenericArg {
	input := value.JSValue()
	var out TxAuthGenericArg
	var (
		value0 string                   
		value1 *javascript.ArrayBuffer  
	)
	value0 = (input.Get("contentType")).String()
	out.ContentType = value0
	value1 = javascript.ArrayBufferFromJS(input.Get("content"))
	out.Content = value1
	return &out
}
type AssertionResponse struct {
	Response
}
func AssertionResponseFromJS(value js.Wrapper) *AssertionResponse {
	input := value.JSValue()
	if typ := input.Type(); typ == js.TypeNull || typ == js.TypeUndefined {
		return nil
	}
	ret := &AssertionResponse{}
	ret.Value_JS = input
	return ret
}
func (_this *AssertionResponse) AuthenticatorData() *javascript.ArrayBuffer {
	var ret *javascript.ArrayBuffer
	value := _this.Value_JS.Get("authenticatorData")
	ret = javascript.ArrayBufferFromJS(value)
	return ret
}
func (_this *AssertionResponse) Signature() *javascript.ArrayBuffer {
	var ret *javascript.ArrayBuffer
	value := _this.Value_JS.Get("signature")
	ret = javascript.ArrayBufferFromJS(value)
	return ret
}