@ file : Jvm Name (" Not ation ") Ċ Ċ package Ġcom . keeper security . secrets Manager . core Ċ Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . encode ToString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġkotlin . reflect . full . member Properties Ċ Ċ @ Experimental Serialization Api Ċ fun ĠgetValue ( secrets : ĠK eeper Secrets , Ġnotation : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval Ġ( record , Ġquery Parts ) Ġ= Ġget Record ( secrets , Ġnotation ) ĊĠĠĠ Ġval Ġfields : ĠList < Keeper Record Field > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( query Parts [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" field " Ġ-> Ġrecord . data . fields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" custom _ field " Ġ-> Ġrecord . data . custom Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Expected Ġ/ field Ġor Ġ/ custom _ field Ġbut Ġfound Ġ/ ${ query Parts [ 1 ]} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Field ( fieldName : ĠString ): ĠK eeper Record Field Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfields . find Ġ{ Ġx Ġ-> Ġx . label Ġ== ĠfieldName Ġ|| ĠfieldType ( x ) Ġ== ĠfieldName Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠException (" Field Ġ$ fieldName Ġnot Ġfound Ġin Ġthe Ġrecord Ġ${ record . record Uid }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( query Parts [ 2 ]. endsWith (" [] ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġfind Field ( query Parts [ 2 ]. slice ( 0 .. query Parts [ 2 ]. length Ġ- Ġ 3 )) ĊĠĠĠĠĠĠĠ Ġreturn Ġget Field JsonValue ( field ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfield Parts Ġ= Ġquery Parts [ 2 ] ĊĠĠĠĠĠĠĠ Ġ. replace ( Regex (""" [\ [\ ]] "" "), Ġ"/") ĊĠĠĠĠĠĠĠ Ġ. split ('/') ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġx Ġ-> Ġx . isNotEmpty () Ġ} ĊĊĠĠĠ Ġval Ġfield Ġ= Ġfind Field ( field Parts [ 0 ]) ĊĊĠĠĠ Ġif Ġ( field Parts . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Field StringValue ( field , Ġ 0 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġfield Value Idx Ġ= Ġfield Parts [ 1 ]. toInt OrNull () Ġ?: Ġreturn Ġget FieldValue Property ( field , Ġ 0 , Ġfield Parts [ 1 ]) ĊĊĠĠĠ Ġif Ġ( field Parts . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Field StringValue ( field , Ġfield Value Idx ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġget FieldValue Property ( field , Ġfield Value Idx , Ġfield Parts [ 2 ]) Ċ } Ċ Ċ fun ĠgetFile ( secrets : ĠK eeper Secrets , Ġnotation : ĠString ): ĠK eeper File Ġ{ ĊĠĠĠ Ġval Ġ( record , Ġquery Parts ) Ġ= Ġget Record ( secrets , Ġnotation ) ĊĠĠĠ Ġif Ġ( query Parts [ 1 ] Ġ== Ġ" file ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Id Ġ= Ġquery Parts [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġrecord . files ?. find Ġ{ Ġx Ġ-> Ġx . data . title Ġ== Ġfile Id Ġ|| Ġx . data . name Ġ== Ġfile Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠException (" File Ġ$ file Id Ġnot Ġfound Ġin Ġthe Ġrecord Ġ${ record . record Uid }") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠException (" Not ation Ġshould Ġinclude Ġfile Ġtag ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġdata Ġclass ĠRecord And Not ation ( val Ġrecord : ĠK eeper Record , Ġval Ġquery Parts : ĠList < String >) Ċ Ċ private Ġfun Ġget Record ( secrets : ĠK eeper Secrets , Ġnotation : ĠString ): ĠRecord And Not ation Ġ{ ĊĠĠĠ Ġvar Ġquery Ġ= Ġnotation ĊĠĠĠ Ġval Ġschema Not ation Ġ= Ġquery . split (" :// ") ĊĠĠĠ Ġif Ġ( schema Not ation . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( schema Not ation [ 0 ] Ġ!= Ġ" keeper ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Invalid Ġnotation Ġschema : Ġ${ schema Not ation [ 0 ]} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery . slice ( 9 Ġuntil Ġquery . length ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġquery Parts Ġ= Ġquery . split ('/') ĊĠĠĠ Ġif Ġ( query Parts . size Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠException (" invalid Ġnotation Ġ$ notation ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġrecord Ġ= Ġsecrets . get Record By Uid ( query Parts [ 0 ]) Ġ?: Ġthrow ĠError (" Record Ġ${ query Parts [ 0 ]} Ġnot Ġfound ") ĊĠĠĠ Ġreturn ĠRecord And Not ation ( record , Ġquery Parts ) Ċ } Ċ Ċ private Ġfun ĠfieldType ( field : ĠK eeper Record Field ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ( field :: class . annotations . find Ġ{ Ġx Ġ-> Ġx Ġis ĠSerial Name Ġ} Ġas ĠSerial Name ). value Ċ } Ċ Ċ @ Experimental Serialization Api Ċ private Ġfun Ġget Field StringValue ( field : ĠK eeper Record Field , Ġvalue Idx : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠAccount Number Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠAddress Ref Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠAdd resses Ġ-> ĠJson . encode ToString ( field . value [ value Idx ]) ĊĠĠĠĠĠĠĠ Ġis ĠBank Accounts Ġ-> ĠJson . encode ToString ( field . value [ value Idx ]) ĊĠĠĠĠĠĠĠ Ġis ĠB irth Date Ġ-> Ġfield . value [ value Idx ]. toString () ĊĠĠĠĠĠĠĠ Ġis ĠCard Ref Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠDate Ġ-> Ġfield . value [ value Idx ]. toString () ĊĠĠĠĠĠĠĠ Ġis ĠEmail Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠExp iration Date Ġ-> Ġfield . value [ value Idx ]. toString () ĊĠĠĠĠĠĠĠ Ġis ĠFile Ref Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠHidden Field Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠHost s Ġ-> ĠJson . encode ToString ( field . value [ value Idx ]) ĊĠĠĠĠĠĠĠ Ġis ĠKey Pairs Ġ-> Ġfield . value [ value Idx ]. toString () ĊĠĠĠĠĠĠĠ Ġis ĠLicense Number Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠLogin Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠMult iline Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠNames Ġ-> ĠJson . encode ToString ( field . value [ value Idx ]) ĊĠĠĠĠĠĠĠ Ġis ĠOne Time Code Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠOne Time Password Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠPassword Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠPayment Cards Ġ-> ĠJson . encode ToString ( field . value [ value Idx ]) ĊĠĠĠĠĠĠĠ Ġis ĠPh ones Ġ-> ĠJson . encode ToString ( field . value [ value Idx ]) ĊĠĠĠĠĠĠĠ Ġis ĠPin Code Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠSecure Note Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠSecurity Questions Ġ-> ĠJson . encode ToString ( field . value [ value Idx ]) ĊĠĠĠĠĠĠĠ Ġis ĠText Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠĠĠĠĠ Ġis ĠUrl Ġ-> Ġfield . value [ value Idx ] ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġget FieldValue Property ( field : ĠK eeper Record Field , Ġvalue Idx : ĠInt , ĠpropertyName : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠAdd resses Ġ-> ĠgetObject Property ( field . value [ value Idx ], ĠpropertyName ) ĊĠĠĠĠĠĠĠ Ġis ĠBank Accounts Ġ-> ĠgetObject Property ( field . value [ value Idx ], ĠpropertyName ) ĊĠĠĠĠĠĠĠ Ġis ĠHost s Ġ-> ĠgetObject Property ( field . value [ value Idx ], ĠpropertyName ) ĊĠĠĠĠĠĠĠ Ġis ĠNames Ġ-> ĠgetObject Property ( field . value [ value Idx ], ĠpropertyName ) ĊĠĠĠĠĠĠĠ Ġis ĠPayment Cards Ġ-> ĠgetObject Property ( field . value [ value Idx ], ĠpropertyName ) ĊĠĠĠĠĠĠĠ Ġis ĠPh ones Ġ-> ĠgetObject Property ( field . value [ value Idx ], ĠpropertyName ) ĊĠĠĠĠĠĠĠ Ġis ĠSecurity Questions Ġ-> ĠgetObject Property ( field . value [ value Idx ], ĠpropertyName ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Property Ġname Ġnotation Ġis Ġnot Ġsupported Ġfor Ġ${ fieldType ( field )} ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠgetObject Property ( obj : ĠAny , ĠpropertyName : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġobj . java Class . kotlin . member Properties . first Ġ{ Ġit . name Ġ== ĠpropertyName Ġ}. get ( obj ). toString () Ċ } Ċ Ċ @ Experimental Serialization Api Ċ private Ġfun Ġget Field JsonValue ( field : ĠK eeper Record Field ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠAccount Number Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠAddress Ref Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠAdd resses Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠBank Accounts Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠB irth Date Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠCard Ref Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠDate Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠEmail Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠExp iration Date Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠFile Ref Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠHidden Field Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠHost s Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠKey Pairs Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠLicense Number Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠLogin Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠMult iline Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠNames Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠOne Time Code Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠOne Time Password Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠPassword Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠPayment Cards Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠPh ones Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠPin Code Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠSecure Note Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠSecurity Questions Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠText Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠĠĠĠĠ Ġis ĠUrl Ġ-> ĠJson . encode ToString ( field . value ) ĊĠĠĠ Ġ} Ċ }