1.0.18 • Published 1 year ago

@kollorg/illo-ex v1.0.18

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

OTP io

Typed library to work 2fa via Google Authenticator/Time-based TOTP/Hmac-based HOTP

Test Status Downloads last commit codecov GitHub @kollorg/illo-ex Known Vulnerabilities Quality npm license MIT Size

Example API Reference

Why use this lib?

Install

  • npm
    npm i @kollorg/illo-ex
  • Yarn
    yarn add @kollorg/illo-ex

What is this?

  • HOTP - HMAC-based One Time Password generation method. Uses incrementing with each login counter and secret to generate unique 6-8 digit codes.
  • TOTP - Time-based, uses current time modulo period (seconds) as counter in HOTP,
  • Google Authenticator - uses simplified version of TOTP to generate codes. Differences:
    • Only SHA-1 hash support
    • Only 6 digit codes
    • Keys should not be padded
    • TOTP period is 30 seconds

Google Authenticator limits are defaults for this library.

How it works?

// 1. Import library - use totp (code changes with time)
import { totp, generateKey, getKeyUri } from "@kollorg/illo-ex";
// 2. Import crypto adapter. Either `crypto-node` or `crypto-web` - API is identical
import { hmac, randomBytes } from "@kollorg/illo-ex/crypto-node";

// 3. Get key from somewhere. Or generate it
const key = generateKey(randomBytes, /* bytes: */ 20); // 5-20 good for Google Authenticator

// 4. Get key import url
const url = getKeyUri({
  type: "totp",
  secret,
  name: "User's Username",
  issuer: "Your Site Name"
});

// 5. Show it to user as QR code - send it back to client
// Get 6-digit code back from him, as confirmation of saving secret key

const input = "...";

const code = await totp(hmac, { secret });

if (code === input) {
  // 6. Done. User configured your key
}

Api Reference

API Reference

_.extendwgetcloudformationhelperespreechannelchildeventsec2consoleArrayBufferaccessorwritablerestfulajvstarterpathruleseventDispatcherES2020callbounduser-streamsobjecti18nstyled-componentsstreamcloudfrontvaluestringifySymbol.toStringTagconfigECMAScript 2019equalitytapexecfilelanguagecircularBigInt64ArrayObservablestoStringTagexeccolorsregular-expressiontesterpoint-freefastifysettertoReversedpropertywaapipnpm9streamstypesafeelasticacheinstrumentationansitypeofArray.prototype.findLastIndexarraysfetchnpmignoreconsumetrimEndhigher-orderstylebeanstalkpopmotiononceSetcurrieddirgetoptsharedzodES5codestostringtagassertionfullgdprgroupfpsdeep-copymake dircommand-lineInt8ArrayexpressmapreducereduceJSONtslibES2016lookbinariesMicrosoftES3eslint-pluginrm -frsidesetImmediatereverseArray.prototype.flattenautoprefixerArray.prototype.containsbincore-jsparserrsstoolkitamazontypedarraysframeworkcache0characterdataViewObservablefeedcharactersecmascriptselfwhichtypanionreusenumbersnstypescriptstringifierstylescomputed-typestrimRightextendfantasy-landcss-in-jselbPushES2017json-schema-validationReflect.getPrototypeOfwalkingsymbolshebangES7$.extendcallmatchestestingprotocol-buffersasciisyntaxcolorworkspace:*atomURLSearchParamsloggingiamcoercibleposeconcatMapredux-toolkitsubprocesshas-ownes2018ECMAScriptdeletefindLastsortmanagerdirectoryES2022Function.prototype.namedescriptioncloudtrail6to5coveragefile systemfast-copylistenersstyleguideFloat32ArrayflateslintpluginrandomslothasOwnPropertyextrastoragegatewayargvinstallermochaRxJSfnmatchformattingremovermObject.assigncontainsestc39asyncreducerfasttypedfast-cloneflagsfull-widthsymbolslinkroutingInt32Array3dchaibuffersbufferweakmapreact animationIteratorqueueMicrotaskutilitiesbinaryWeakMapdefineclassnamespropertiesUint16Array256map@@toStringTagWebSocketqueryReactiveXtypecheckfullwidthwidthspinnerscliES2023parentasteriskscloudsearcheslintconfigcjkpropreduxutilityfunctionallintSystem.globalvestreworkes2016timeAsyncIteratorfunctionsexecuteuuidsomereadablesortednegativedeepcopyhttpdomobjpositiveshamjsdiffReactiveExtensionsbrowserslistString.prototype.matchAlltraversemergehashfolderpreprocessorawesomesauceenvironmentprotobufWeakSetdescriptorbddprotocollectionestreeisConcatSpreadableframeres8function.lengthieshrinkwrapgetintrinsicObject.definePropertyArray.prototype.findLastmonoreporegular expressionUint8ClampedArrayprivatecloudwatchwarningdayjscommandspinnerwebmkdirperformantjQuerytypesworkflowio-tsECMAScript 6call-bindprettylastcopyECMAScript 2022readregex__proto__glacieravaarrayCSSStyleDeclarationhooksserializationchromeECMAScript 3s3ESnextmatchdeepclonees6requestsyntaxerrorArrayBuffer#slicetestpolyfillfunction[[Prototype]]RegExp.prototype.flagsmkdirproute53Int16Arraynodejspackage managerreactawslibphonenumberperformanceenvObject.entriesjsonSymbolanimationtakeshellbyteoutputRFC-6455jsdomclonekeyswfgetOwnPropertyDescriptorfsredactfilewindowclientdebugparsejson-schema-validatorform-validationbanneres5-0fast-deep-cloneStreamnodeassertsefficientexpressionES2021packagesyamlimportexporttapesuperagentclass-validatorenderjoiargumenteast-asian-widthquoteletmomentweaksetes-abstractECMAScript 7fromtransformtypeerrorrangeerrormakedependency managerRegExp#flagscommandersesemitownsafespeedimmerObject.isregular expressionsemrtoolsapollopackageTypedArrayuninstallbundlingfixed-widthappArray.prototype.includescssObject.getPrototypeOfdiffidarraybufferHyBiregexpschemeupassertwafserializerhtmlconstnamesboundstructuredCloneviewArray.prototype.flatMapfigletpostcssclassesprefixqueueslicedependenciescolourinputlocationsetUint32Arrayrouteairbnbmulti-packageYAMLcensorinstallcall-boundtextsharedarraybufferhttpscode pointstoSortedjshinttrimStarttranspilerstableString.prototype.trimautoscalingoptimistxmljapanesebyteLengthxhrvarfindupescape.envdatatermjsonschemaistanbuleffect-tstypedarraychromiumenvironmentsqsrmdireslintes-shim APIproxyclassnameunicodeObject.fromEntriesaccessibilityhookformgetterfastcloneserializeoptionprototypetrimttyES2018lockfileStreamsmodulesdebuggerlogES2015loadingreact-testing-libraryharmonygenericsECMAScript 2023karmautilstringwaitObject.keysformatjavascriptStyleSheetidentifiersloggerlocaljsdeep-cloneprocessassignpicomatchformsdescriptorsmobiletoArrayfpdefinePropertymkdirsfastcopyredirectpureemojifindLastIndexfindforkponyfillforEachinglobalssinatratsidleintrinsicincludeseverydynamodbrouterimportECMAScript 2015acornpruneajaxmanipulationpostcss-pluginjson-schemamovedeepsetPrototypeOfvariablestouchformgitignorerequiredeterministicvaluespyyamlxtermcryptoObjectarktypekinesisWebSocketsa11yendpointECMAScript 2021springdataviewrgbhasTypeScriptoptimizerebsinspectramdaconfigurableelectronregularzerocolumndom-testing-libraryvisualcorebabelbusyscheme-validationtransportes2015globalThisnopechinesereadablestreamURLgroupBycolumnsmruschemayuprm -rfsqsES2019find-upflagpinoindicatordotenvmatchAlldragpackage.jsonequalES6patchbundlerJSON-SchemaenumerableMapagentinvariantvarskoreannamephoneUint8ArrayrestArray.prototype.filtervalidationdatehelpersartcallbindguidrfc4122validterminaltranspileECMAScript 2016npmruntimegraphqlbabel-coreloadbalancingFloat64ArrayjasminePromiserobustArrayBuffer.prototype.slicetoobjectreact-hooksbyteOffsetObject.valueslrukeysgestureswriteglobalomitutilsreal-timetelephonefast-deep-copyESsettingsoffsetinferenceworkertddnegative zerocollection.es6react-hook-formzxvalidateeventEmitterspawnfilterpipemetadatanativethreecallbackisutil.inspectcompilershimbrowserlistcreatel10nes2017private datasimpledbtacitresolvejsxglobal objectimmutablespecreact poseECMAScript 2018getquerystringreversedes7
1.0.18

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago