{"version":3,"file":"static/js/aws-all-7d822c77-1a11673e9470e785e6ec.js","mappings":"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","sources":["webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/location.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/error/printError.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/error/GraphQLError.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/visitor.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/printer.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/jsutils/inspect.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/jsutils/invariant.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/source.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/jsutils/defineToStringTag.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/error/syntaxError.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/blockStringValue.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/lexer.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/kinds.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/directiveLocation.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/node_modules/graphql/language/parser.mjs","webpack://leadsbridge/./node_modules/@aws-amplify/api-graphql/src/GraphQLAPI.ts","webpack://leadsbridge/./node_modules/@aws-amplify/api-rest/src/RestClient.ts","webpack://leadsbridge/./node_modules/@aws-amplify/api-rest/src/RestAPI.ts","webpack://leadsbridge/./node_modules/@aws-amplify/api/src/API.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/types/Auth.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/OAuth/urlOpener.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/OAuth/OAuth.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/OAuth/oauthStorage.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/Errors.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/Auth.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/urlListener.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/common/AuthErrorStrings.ts","webpack://leadsbridge/./node_modules/@aws-amplify/auth/src/index.ts","webpack://leadsbridge/./node_modules/@aws-amplify/cache/src/Utils/CacheUtils.ts","webpack://leadsbridge/./node_modules/@aws-amplify/cache/src/StorageCache.ts","webpack://leadsbridge/./node_modules/@aws-amplify/cache/src/BrowserStorageCache.ts","webpack://leadsbridge/./node_modules/@aws-amplify/cache/src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\n\n/**\n * Represents a location in a Source.\n */\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nexport function getLocation(source, position) {\n var lineRegexp = /\\r\\n|[\\n\\r]/g;\n var line = 1;\n var column = position + 1;\n var match;\n\n while ((match = lineRegexp.exec(source.body)) && match.index < position) {\n line += 1;\n column = position + 1 - (match.index + match[0].length);\n }\n\n return {\n line: line,\n column: column\n };\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\nimport { getLocation } from '../language/location';\n\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n */\nexport function printError(error) {\n var printedLocations = [];\n\n if (error.nodes) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = error.nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var node = _step.value;\n\n if (node.loc) {\n printedLocations.push(highlightSourceAtLocation(node.loc.source, getLocation(node.loc.source, node.loc.start)));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } else if (error.source && error.locations) {\n var source = error.source;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = error.locations[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var location = _step2.value;\n printedLocations.push(highlightSourceAtLocation(source, location));\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n\n return printedLocations.length === 0 ? error.message : [error.message].concat(printedLocations).join('\\n\\n') + '\\n';\n}\n/**\n * Render a helpful description of the location of the error in the GraphQL\n * Source document.\n */\n\nfunction highlightSourceAtLocation(source, location) {\n var firstLineColumnOffset = source.locationOffset.column - 1;\n var body = whitespace(firstLineColumnOffset) + source.body;\n var lineIndex = location.line - 1;\n var lineOffset = source.locationOffset.line - 1;\n var lineNum = location.line + lineOffset;\n var columnOffset = location.line === 1 ? firstLineColumnOffset : 0;\n var columnNum = location.column + columnOffset;\n var lines = body.split(/\\r\\n|[\\n\\r]/g);\n return \"\".concat(source.name, \" (\").concat(lineNum, \":\").concat(columnNum, \")\\n\") + printPrefixedLines([// Lines specified like this: [\"prefix\", \"string\"],\n [\"\".concat(lineNum - 1, \": \"), lines[lineIndex - 1]], [\"\".concat(lineNum, \": \"), lines[lineIndex]], ['', whitespace(columnNum - 1) + '^'], [\"\".concat(lineNum + 1, \": \"), lines[lineIndex + 1]]]);\n}\n\nfunction printPrefixedLines(lines) {\n var existingLines = lines.filter(function (_ref) {\n var _ = _ref[0],\n line = _ref[1];\n return line !== undefined;\n });\n var padLen = 0;\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = existingLines[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var _ref4 = _step3.value;\n var prefix = _ref4[0];\n padLen = Math.max(padLen, prefix.length);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return != null) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n return existingLines.map(function (_ref3) {\n var prefix = _ref3[0],\n line = _ref3[1];\n return lpad(padLen, prefix) + line;\n }).join('\\n');\n}\n\nfunction whitespace(len) {\n return Array(len + 1).join(' ');\n}\n\nfunction lpad(len, str) {\n return whitespace(len - str.length) + str;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\nimport { printError } from './printError';\nimport { getLocation } from '../language/location';\nexport function GraphQLError( // eslint-disable-line no-redeclare\nmessage, nodes, source, positions, path, originalError, extensions) {\n // Compute list of blame nodes.\n var _nodes = Array.isArray(nodes) ? nodes.length !== 0 ? nodes : undefined : nodes ? [nodes] : undefined; // Compute locations in the source for the given nodes/positions.\n\n\n var _source = source;\n\n if (!_source && _nodes) {\n var node = _nodes[0];\n _source = node && node.loc && node.loc.source;\n }\n\n var _positions = positions;\n\n if (!_positions && _nodes) {\n _positions = _nodes.reduce(function (list, node) {\n if (node.loc) {\n list.push(node.loc.start);\n }\n\n return list;\n }, []);\n }\n\n if (_positions && _positions.length === 0) {\n _positions = undefined;\n }\n\n var _locations;\n\n if (positions && source) {\n _locations = positions.map(function (pos) {\n return getLocation(source, pos);\n });\n } else if (_nodes) {\n _locations = _nodes.reduce(function (list, node) {\n if (node.loc) {\n list.push(getLocation(node.loc.source, node.loc.start));\n }\n\n return list;\n }, []);\n }\n\n var _extensions = extensions || originalError && originalError.extensions;\n\n Object.defineProperties(this, {\n message: {\n value: message,\n // By being enumerable, JSON.stringify will include `message` in the\n // resulting output. This ensures that the simplest possible GraphQL\n // service adheres to the spec.\n enumerable: true,\n writable: true\n },\n locations: {\n // Coercing falsey values to undefined ensures they will not be included\n // in JSON.stringify() when not provided.\n value: _locations || undefined,\n // By being enumerable, JSON.stringify will include `locations` in the\n // resulting output. This ensures that the simplest possible GraphQL\n // service adheres to the spec.\n enumerable: Boolean(_locations)\n },\n path: {\n // Coercing falsey values to undefined ensures they will not be included\n // in JSON.stringify() when not provided.\n value: path || undefined,\n // By being enumerable, JSON.stringify will include `path` in the\n // resulting output. This ensures that the simplest possible GraphQL\n // service adheres to the spec.\n enumerable: Boolean(path)\n },\n nodes: {\n value: _nodes || undefined\n },\n source: {\n value: _source || undefined\n },\n positions: {\n value: _positions || undefined\n },\n originalError: {\n value: originalError\n },\n extensions: {\n // Coercing falsey values to undefined ensures they will not be included\n // in JSON.stringify() when not provided.\n value: _extensions || undefined,\n // By being enumerable, JSON.stringify will include `path` in the\n // resulting output. This ensures that the simplest possible GraphQL\n // service adheres to the spec.\n enumerable: Boolean(_extensions)\n }\n }); // Include (non-enumerable) stack trace.\n\n if (originalError && originalError.stack) {\n Object.defineProperty(this, 'stack', {\n value: originalError.stack,\n writable: true,\n configurable: true\n });\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, GraphQLError);\n } else {\n Object.defineProperty(this, 'stack', {\n value: Error().stack,\n writable: true,\n configurable: true\n });\n }\n}\nGraphQLError.prototype = Object.create(Error.prototype, {\n constructor: {\n value: GraphQLError\n },\n name: {\n value: 'GraphQLError'\n },\n toString: {\n value: function toString() {\n return printError(this);\n }\n }\n});","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\n\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n\n/**\n * A visitor is comprised of visit functions, which are called on each node\n * during the visitor's traversal.\n */\n\n/**\n * A KeyMap describes each the traversable properties of each kind of node.\n */\nexport var QueryDocumentKeys = {\n Name: [],\n Document: ['definitions'],\n OperationDefinition: ['name', 'variableDefinitions', 'directives', 'selectionSet'],\n VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],\n Variable: ['name'],\n SelectionSet: ['selections'],\n Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n Argument: ['name', 'value'],\n FragmentSpread: ['name', 'directives'],\n InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n FragmentDefinition: ['name', // Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n 'variableDefinitions', 'typeCondition', 'directives', 'selectionSet'],\n IntValue: [],\n FloatValue: [],\n StringValue: [],\n BooleanValue: [],\n NullValue: [],\n EnumValue: [],\n ListValue: ['values'],\n ObjectValue: ['fields'],\n ObjectField: ['name', 'value'],\n Directive: ['name', 'arguments'],\n NamedType: ['name'],\n ListType: ['type'],\n NonNullType: ['type'],\n SchemaDefinition: ['directives', 'operationTypes'],\n OperationTypeDefinition: ['type'],\n ScalarTypeDefinition: ['description', 'name', 'directives'],\n ObjectTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n InputValueDefinition: ['description', 'name', 'type', 'defaultValue', 'directives'],\n InterfaceTypeDefinition: ['description', 'name', 'directives', 'fields'],\n UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n EnumValueDefinition: ['description', 'name', 'directives'],\n InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n SchemaExtension: ['directives', 'operationTypes'],\n ScalarTypeExtension: ['name', 'directives'],\n ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n InterfaceTypeExtension: ['name', 'directives', 'fields'],\n UnionTypeExtension: ['name', 'directives', 'types'],\n EnumTypeExtension: ['name', 'directives', 'values'],\n InputObjectTypeExtension: ['name', 'directives', 'fields']\n};\nexport var BREAK = {};\n/**\n * visit() will walk through an AST using a depth first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * const editedAST = visit(ast, {\n * enter(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: skip visiting this node\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * },\n * leave(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: no action\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * }\n * });\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to four permutations of\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node a specific kind.\n *\n * visit(ast, {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * })\n *\n * 2) Named visitors that trigger upon entering and leaving a node of\n * a specific kind.\n *\n * visit(ast, {\n * Kind: {\n * enter(node) {\n * // enter the \"Kind\" node\n * }\n * leave(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * visit(ast, {\n * enter(node) {\n * // enter any node\n * },\n * leave(node) {\n * // leave any node\n * }\n * })\n *\n * 4) Parallel visitors for entering and leaving nodes of a specific kind.\n *\n * visit(ast, {\n * enter: {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * },\n * leave: {\n * Kind(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n */\n\nexport function visit(root, visitor) {\n var visitorKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : QueryDocumentKeys;\n\n /* eslint-disable no-undef-init */\n var stack = undefined;\n var inArray = Array.isArray(root);\n var keys = [root];\n var index = -1;\n var edits = [];\n var node = undefined;\n var key = undefined;\n var parent = undefined;\n var path = [];\n var ancestors = [];\n var newRoot = root;\n /* eslint-enable no-undef-init */\n\n do {\n index++;\n var isLeaving = index === keys.length;\n var isEdited = isLeaving && edits.length !== 0;\n\n if (isLeaving) {\n key = ancestors.length === 0 ? undefined : path[path.length - 1];\n node = parent;\n parent = ancestors.pop();\n\n if (isEdited) {\n if (inArray) {\n node = node.slice();\n } else {\n var clone = {};\n\n for (var k in node) {\n if (node.hasOwnProperty(k)) {\n clone[k] = node[k];\n }\n }\n\n node = clone;\n }\n\n var editOffset = 0;\n\n for (var ii = 0; ii < edits.length; ii++) {\n var editKey = edits[ii][0];\n var editValue = edits[ii][1];\n\n if (inArray) {\n editKey -= editOffset;\n }\n\n if (inArray && editValue === null) {\n node.splice(editKey, 1);\n editOffset++;\n } else {\n node[editKey] = editValue;\n }\n }\n }\n\n index = stack.index;\n keys = stack.keys;\n edits = stack.edits;\n inArray = stack.inArray;\n stack = stack.prev;\n } else {\n key = parent ? inArray ? index : keys[index] : undefined;\n node = parent ? parent[key] : newRoot;\n\n if (node === null || node === undefined) {\n continue;\n }\n\n if (parent) {\n path.push(key);\n }\n }\n\n var result = void 0;\n\n if (!Array.isArray(node)) {\n if (!isNode(node)) {\n throw new Error('Invalid AST Node: ' + JSON.stringify(node));\n }\n\n var visitFn = getVisitFn(visitor, node.kind, isLeaving);\n\n if (visitFn) {\n result = visitFn.call(visitor, node, key, parent, path, ancestors);\n\n if (result === BREAK) {\n break;\n }\n\n if (result === false) {\n if (!isLeaving) {\n path.pop();\n continue;\n }\n } else if (result !== undefined) {\n edits.push([key, result]);\n\n if (!isLeaving) {\n if (isNode(result)) {\n node = result;\n } else {\n path.pop();\n continue;\n }\n }\n }\n }\n }\n\n if (result === undefined && isEdited) {\n edits.push([key, node]);\n }\n\n if (isLeaving) {\n path.pop();\n } else {\n stack = {\n inArray: inArray,\n index: index,\n keys: keys,\n edits: edits,\n prev: stack\n };\n inArray = Array.isArray(node);\n keys = inArray ? node : visitorKeys[node.kind] || [];\n index = -1;\n edits = [];\n\n if (parent) {\n ancestors.push(parent);\n }\n\n parent = node;\n }\n } while (stack !== undefined);\n\n if (edits.length !== 0) {\n newRoot = edits[edits.length - 1][1];\n }\n\n return newRoot;\n}\n\nfunction isNode(maybeNode) {\n return Boolean(maybeNode && typeof maybeNode.kind === 'string');\n}\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\n\n\nexport function visitInParallel(visitors) {\n var skipping = new Array(visitors.length);\n return {\n enter: function enter(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (!skipping[i]) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n false);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === false) {\n skipping[i] = node;\n } else if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined) {\n return result;\n }\n }\n }\n }\n },\n leave: function leave(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (!skipping[i]) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n true);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined && result !== false) {\n return result;\n }\n }\n } else if (skipping[i] === node) {\n skipping[i] = null;\n }\n }\n }\n };\n}\n/**\n * Creates a new visitor instance which maintains a provided TypeInfo instance\n * along with visiting visitor.\n */\n\nexport function visitWithTypeInfo(typeInfo, visitor) {\n return {\n enter: function enter(node) {\n typeInfo.enter(node);\n var fn = getVisitFn(visitor, node.kind,\n /* isLeaving */\n false);\n\n if (fn) {\n var result = fn.apply(visitor, arguments);\n\n if (result !== undefined) {\n typeInfo.leave(node);\n\n if (isNode(result)) {\n typeInfo.enter(result);\n }\n }\n\n return result;\n }\n },\n leave: function leave(node) {\n var fn = getVisitFn(visitor, node.kind,\n /* isLeaving */\n true);\n var result;\n\n if (fn) {\n result = fn.apply(visitor, arguments);\n }\n\n typeInfo.leave(node);\n return result;\n }\n };\n}\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n */\n\nexport function getVisitFn(visitor, kind, isLeaving) {\n var kindVisitor = visitor[kind];\n\n if (kindVisitor) {\n if (!isLeaving && typeof kindVisitor === 'function') {\n // { Kind() {} }\n return kindVisitor;\n }\n\n var kindSpecificVisitor = isLeaving ? kindVisitor.leave : kindVisitor.enter;\n\n if (typeof kindSpecificVisitor === 'function') {\n // { Kind: { enter() {}, leave() {} } }\n return kindSpecificVisitor;\n }\n } else {\n var specificVisitor = isLeaving ? visitor.leave : visitor.enter;\n\n if (specificVisitor) {\n if (typeof specificVisitor === 'function') {\n // { enter() {}, leave() {} }\n return specificVisitor;\n }\n\n var specificKindVisitor = specificVisitor[kind];\n\n if (typeof specificKindVisitor === 'function') {\n // { enter: { Kind() {} }, leave: { Kind() {} } }\n return specificKindVisitor;\n }\n }\n }\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { visit } from './visitor';\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\n\nexport function print(ast) {\n return visit(ast, {\n leave: printDocASTReducer\n });\n}\nvar printDocASTReducer = {\n Name: function Name(node) {\n return node.value;\n },\n Variable: function Variable(node) {\n return '$' + node.name;\n },\n // Document\n Document: function Document(node) {\n return join(node.definitions, '\\n\\n') + '\\n';\n },\n OperationDefinition: function OperationDefinition(node) {\n var op = node.operation;\n var name = node.name;\n var varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n var directives = join(node.directives, ' ');\n var selectionSet = node.selectionSet; // Anonymous queries with no directives or variable definitions can use\n // the query short form.\n\n return !name && !directives && !varDefs && op === 'query' ? selectionSet : join([op, join([name, varDefs]), directives, selectionSet], ' ');\n },\n VariableDefinition: function VariableDefinition(_ref) {\n var variable = _ref.variable,\n type = _ref.type,\n defaultValue = _ref.defaultValue,\n directives = _ref.directives;\n return variable + ': ' + type + wrap(' = ', defaultValue) + wrap(' ', join(directives, ' '));\n },\n SelectionSet: function SelectionSet(_ref2) {\n var selections = _ref2.selections;\n return block(selections);\n },\n Field: function Field(_ref3) {\n var alias = _ref3.alias,\n name = _ref3.name,\n args = _ref3.arguments,\n directives = _ref3.directives,\n selectionSet = _ref3.selectionSet;\n return join([wrap('', alias, ': ') + name + wrap('(', join(args, ', '), ')'), join(directives, ' '), selectionSet], ' ');\n },\n Argument: function Argument(_ref4) {\n var name = _ref4.name,\n value = _ref4.value;\n return name + ': ' + value;\n },\n // Fragments\n FragmentSpread: function FragmentSpread(_ref5) {\n var name = _ref5.name,\n directives = _ref5.directives;\n return '...' + name + wrap(' ', join(directives, ' '));\n },\n InlineFragment: function InlineFragment(_ref6) {\n var typeCondition = _ref6.typeCondition,\n directives = _ref6.directives,\n selectionSet = _ref6.selectionSet;\n return join(['...', wrap('on ', typeCondition), join(directives, ' '), selectionSet], ' ');\n },\n FragmentDefinition: function FragmentDefinition(_ref7) {\n var name = _ref7.name,\n typeCondition = _ref7.typeCondition,\n variableDefinitions = _ref7.variableDefinitions,\n directives = _ref7.directives,\n selectionSet = _ref7.selectionSet;\n return (// Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n \"fragment \".concat(name).concat(wrap('(', join(variableDefinitions, ', '), ')'), \" \") + \"on \".concat(typeCondition, \" \").concat(wrap('', join(directives, ' '), ' ')) + selectionSet\n );\n },\n // Value\n IntValue: function IntValue(_ref8) {\n var value = _ref8.value;\n return value;\n },\n FloatValue: function FloatValue(_ref9) {\n var value = _ref9.value;\n return value;\n },\n StringValue: function StringValue(_ref10, key) {\n var value = _ref10.value,\n isBlockString = _ref10.block;\n return isBlockString ? printBlockString(value, key === 'description') : JSON.stringify(value);\n },\n BooleanValue: function BooleanValue(_ref11) {\n var value = _ref11.value;\n return value ? 'true' : 'false';\n },\n NullValue: function NullValue() {\n return 'null';\n },\n EnumValue: function EnumValue(_ref12) {\n var value = _ref12.value;\n return value;\n },\n ListValue: function ListValue(_ref13) {\n var values = _ref13.values;\n return '[' + join(values, ', ') + ']';\n },\n ObjectValue: function ObjectValue(_ref14) {\n var fields = _ref14.fields;\n return '{' + join(fields, ', ') + '}';\n },\n ObjectField: function ObjectField(_ref15) {\n var name = _ref15.name,\n value = _ref15.value;\n return name + ': ' + value;\n },\n // Directive\n Directive: function Directive(_ref16) {\n var name = _ref16.name,\n args = _ref16.arguments;\n return '@' + name + wrap('(', join(args, ', '), ')');\n },\n // Type\n NamedType: function NamedType(_ref17) {\n var name = _ref17.name;\n return name;\n },\n ListType: function ListType(_ref18) {\n var type = _ref18.type;\n return '[' + type + ']';\n },\n NonNullType: function NonNullType(_ref19) {\n var type = _ref19.type;\n return type + '!';\n },\n // Type System Definitions\n SchemaDefinition: function SchemaDefinition(_ref20) {\n var directives = _ref20.directives,\n operationTypes = _ref20.operationTypes;\n return join(['schema', join(directives, ' '), block(operationTypes)], ' ');\n },\n OperationTypeDefinition: function OperationTypeDefinition(_ref21) {\n var operation = _ref21.operation,\n type = _ref21.type;\n return operation + ': ' + type;\n },\n ScalarTypeDefinition: addDescription(function (_ref22) {\n var name = _ref22.name,\n directives = _ref22.directives;\n return join(['scalar', name, join(directives, ' ')], ' ');\n }),\n ObjectTypeDefinition: addDescription(function (_ref23) {\n var name = _ref23.name,\n interfaces = _ref23.interfaces,\n directives = _ref23.directives,\n fields = _ref23.fields;\n return join(['type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n FieldDefinition: addDescription(function (_ref24) {\n var name = _ref24.name,\n args = _ref24.arguments,\n type = _ref24.type,\n directives = _ref24.directives;\n return name + (args.every(function (arg) {\n return arg.indexOf('\\n') === -1;\n }) ? wrap('(', join(args, ', '), ')') : wrap('(\\n', indent(join(args, '\\n')), '\\n)')) + ': ' + type + wrap(' ', join(directives, ' '));\n }),\n InputValueDefinition: addDescription(function (_ref25) {\n var name = _ref25.name,\n type = _ref25.type,\n defaultValue = _ref25.defaultValue,\n directives = _ref25.directives;\n return join([name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')], ' ');\n }),\n InterfaceTypeDefinition: addDescription(function (_ref26) {\n var name = _ref26.name,\n directives = _ref26.directives,\n fields = _ref26.fields;\n return join(['interface', name, join(directives, ' '), block(fields)], ' ');\n }),\n UnionTypeDefinition: addDescription(function (_ref27) {\n var name = _ref27.name,\n directives = _ref27.directives,\n types = _ref27.types;\n return join(['union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n }),\n EnumTypeDefinition: addDescription(function (_ref28) {\n var name = _ref28.name,\n directives = _ref28.directives,\n values = _ref28.values;\n return join(['enum', name, join(directives, ' '), block(values)], ' ');\n }),\n EnumValueDefinition: addDescription(function (_ref29) {\n var name = _ref29.name,\n directives = _ref29.directives;\n return join([name, join(directives, ' ')], ' ');\n }),\n InputObjectTypeDefinition: addDescription(function (_ref30) {\n var name = _ref30.name,\n directives = _ref30.directives,\n fields = _ref30.fields;\n return join(['input', name, join(directives, ' '), block(fields)], ' ');\n }),\n DirectiveDefinition: addDescription(function (_ref31) {\n var name = _ref31.name,\n args = _ref31.arguments,\n locations = _ref31.locations;\n return 'directive @' + name + (args.every(function (arg) {\n return arg.indexOf('\\n') === -1;\n }) ? wrap('(', join(args, ', '), ')') : wrap('(\\n', indent(join(args, '\\n')), '\\n)')) + ' on ' + join(locations, ' | ');\n }),\n SchemaExtension: function SchemaExtension(_ref32) {\n var directives = _ref32.directives,\n operationTypes = _ref32.operationTypes;\n return join(['extend schema', join(directives, ' '), block(operationTypes)], ' ');\n },\n ScalarTypeExtension: function ScalarTypeExtension(_ref33) {\n var name = _ref33.name,\n directives = _ref33.directives;\n return join(['extend scalar', name, join(directives, ' ')], ' ');\n },\n ObjectTypeExtension: function ObjectTypeExtension(_ref34) {\n var name = _ref34.name,\n interfaces = _ref34.interfaces,\n directives = _ref34.directives,\n fields = _ref34.fields;\n return join(['extend type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n InterfaceTypeExtension: function InterfaceTypeExtension(_ref35) {\n var name = _ref35.name,\n directives = _ref35.directives,\n fields = _ref35.fields;\n return join(['extend interface', name, join(directives, ' '), block(fields)], ' ');\n },\n UnionTypeExtension: function UnionTypeExtension(_ref36) {\n var name = _ref36.name,\n directives = _ref36.directives,\n types = _ref36.types;\n return join(['extend union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n },\n EnumTypeExtension: function EnumTypeExtension(_ref37) {\n var name = _ref37.name,\n directives = _ref37.directives,\n values = _ref37.values;\n return join(['extend enum', name, join(directives, ' '), block(values)], ' ');\n },\n InputObjectTypeExtension: function InputObjectTypeExtension(_ref38) {\n var name = _ref38.name,\n directives = _ref38.directives,\n fields = _ref38.fields;\n return join(['extend input', name, join(directives, ' '), block(fields)], ' ');\n }\n};\n\nfunction addDescription(cb) {\n return function (node) {\n return join([node.description, cb(node)], '\\n');\n };\n}\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\n\n\nfunction join(maybeArray, separator) {\n return maybeArray ? maybeArray.filter(function (x) {\n return x;\n }).join(separator || '') : '';\n}\n/**\n * Given array, print each item on its own line, wrapped in an\n * indented \"{ }\" block.\n */\n\n\nfunction block(array) {\n return array && array.length !== 0 ? '{\\n' + indent(join(array, '\\n')) + '\\n}' : '';\n}\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise\n * print an empty string.\n */\n\n\nfunction wrap(start, maybeString, end) {\n return maybeString ? start + maybeString + (end || '') : '';\n}\n\nfunction indent(maybeString) {\n return maybeString && ' ' + maybeString.replace(/\\n/g, '\\n ');\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n */\n\n\nfunction printBlockString(value, isDescription) {\n var escaped = value.replace(/\"\"\"/g, '\\\\\"\"\"');\n return (value[0] === ' ' || value[0] === '\\t') && value.indexOf('\\n') === -1 ? \"\\\"\\\"\\\"\".concat(escaped.replace(/\"$/, '\"\\n'), \"\\\"\\\"\\\"\") : \"\\\"\\\"\\\"\\n\".concat(isDescription ? escaped : indent(escaped), \"\\n\\\"\\\"\\\"\");\n}","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\n\n/**\n * Used to print values in error messages.\n */\nexport default function inspect(value) {\n return value && _typeof(value) === 'object' ? typeof value.inspect === 'function' ? value.inspect() : Array.isArray(value) ? '[' + value.map(inspect).join(', ') + ']' : '{' + Object.keys(value).map(function (k) {\n return \"\".concat(k, \": \").concat(inspect(value[k]));\n }).join(', ') + '}' : typeof value === 'string' ? '\"' + value + '\"' : typeof value === 'function' ? \"[function \".concat(value.name, \"]\") : String(value);\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\nexport default function invariant(condition, message) {\n /* istanbul ignore else */\n if (!condition) {\n throw new Error(message);\n }\n}","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\nimport invariant from '../jsutils/invariant';\nimport defineToStringTag from '../jsutils/defineToStringTag';\n\n/**\n * A representation of source input to GraphQL.\n * `name` and `locationOffset` are optional. They are useful for clients who\n * store GraphQL documents in source files; for example, if the GraphQL input\n * starts at line 40 in a file named Foo.graphql, it might be useful for name to\n * be \"Foo.graphql\" and location to be `{ line: 40, column: 0 }`.\n * line and column in locationOffset are 1-indexed\n */\nexport var Source = function Source(body, name, locationOffset) {\n _defineProperty(this, \"body\", void 0);\n\n _defineProperty(this, \"name\", void 0);\n\n _defineProperty(this, \"locationOffset\", void 0);\n\n this.body = body;\n this.name = name || 'GraphQL request';\n this.locationOffset = locationOffset || {\n line: 1,\n column: 1\n };\n !(this.locationOffset.line > 0) ? invariant(0, 'line in locationOffset is 1-indexed and must be positive') : void 0;\n !(this.locationOffset.column > 0) ? invariant(0, 'column in locationOffset is 1-indexed and must be positive') : void 0;\n}; // Conditionally apply `[Symbol.toStringTag]` if `Symbol`s are supported\n\ndefineToStringTag(Source);","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\n\n/**\n * The `applyToStringTag()` function checks first to see if the runtime\n * supports the `Symbol` class and then if the `Symbol.toStringTag` constant\n * is defined as a `Symbol` instance. If both conditions are met, the\n * Symbol.toStringTag property is defined as a getter that returns the\n * supplied class constructor's name.\n *\n * @method applyToStringTag\n *\n * @param {Class} classObject a class such as Object, String, Number but\n * typically one of your own creation through the class keyword; `class A {}`,\n * for example.\n */\nexport default function applyToStringTag(classObject) {\n if (typeof Symbol === 'function' && Symbol.toStringTag) {\n Object.defineProperty(classObject.prototype, Symbol.toStringTag, {\n get: function get() {\n return this.constructor.name;\n }\n });\n }\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\nimport { GraphQLError } from './GraphQLError';\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\n\nexport function syntaxError(source, position, description) {\n return new GraphQLError(\"Syntax Error: \".concat(description), undefined, source, [position]);\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\n\n/**\n * Produces the value of a block string from its parsed raw value, similar to\n * Coffeescript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n */\nexport default function blockStringValue(rawString) {\n // Expand a block string's raw value into independent lines.\n var lines = rawString.split(/\\r\\n|[\\n\\r]/g); // Remove common indentation from all lines but first.\n\n var commonIndent = null;\n\n for (var i = 1; i < lines.length; i++) {\n var line = lines[i];\n var indent = leadingWhitespace(line);\n\n if (indent < line.length && (commonIndent === null || indent < commonIndent)) {\n commonIndent = indent;\n\n if (commonIndent === 0) {\n break;\n }\n }\n }\n\n if (commonIndent) {\n for (var _i = 1; _i < lines.length; _i++) {\n lines[_i] = lines[_i].slice(commonIndent);\n }\n } // Remove leading and trailing blank lines.\n\n\n while (lines.length > 0 && isBlank(lines[0])) {\n lines.shift();\n }\n\n while (lines.length > 0 && isBlank(lines[lines.length - 1])) {\n lines.pop();\n } // Return a string of the lines joined with U+000A.\n\n\n return lines.join('\\n');\n}\n\nfunction leadingWhitespace(str) {\n var i = 0;\n\n while (i < str.length && (str[i] === ' ' || str[i] === '\\t')) {\n i++;\n }\n\n return i;\n}\n\nfunction isBlank(str) {\n return leadingWhitespace(str) === str.length;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\nimport { syntaxError } from '../error';\nimport blockStringValue from './blockStringValue';\n/**\n * Given a Source object, this returns a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\n\nexport function createLexer(source, options) {\n var startOfFileToken = new Tok(TokenKind.SOF, 0, 0, 0, 0, null);\n var lexer = {\n source: source,\n options: options,\n lastToken: startOfFileToken,\n token: startOfFileToken,\n line: 1,\n lineStart: 0,\n advance: advanceLexer,\n lookahead: lookahead\n };\n return lexer;\n}\n\nfunction advanceLexer() {\n this.lastToken = this.token;\n var token = this.token = this.lookahead();\n return token;\n}\n\nfunction lookahead() {\n var token = this.token;\n\n if (token.kind !== TokenKind.EOF) {\n do {\n // Note: next is only mutable during parsing, so we cast to allow this.\n token = token.next || (token.next = readToken(this, token));\n } while (token.kind === TokenKind.COMMENT);\n }\n\n return token;\n}\n/**\n * The return type of createLexer.\n */\n\n\n/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nexport var TokenKind = Object.freeze({\n SOF: '',\n EOF: '',\n BANG: '!',\n DOLLAR: '$',\n AMP: '&',\n PAREN_L: '(',\n PAREN_R: ')',\n SPREAD: '...',\n COLON: ':',\n EQUALS: '=',\n AT: '@',\n BRACKET_L: '[',\n BRACKET_R: ']',\n BRACE_L: '{',\n PIPE: '|',\n BRACE_R: '}',\n NAME: 'Name',\n INT: 'Int',\n FLOAT: 'Float',\n STRING: 'String',\n BLOCK_STRING: 'BlockString',\n COMMENT: 'Comment'\n});\n/**\n * The enum type representing the token kinds values.\n */\n\n/**\n * A helper function to describe a token as a string for debugging\n */\nexport function getTokenDesc(token) {\n var value = token.value;\n return value ? \"\".concat(token.kind, \" \\\"\").concat(value, \"\\\"\") : token.kind;\n}\nvar charCodeAt = String.prototype.charCodeAt;\nvar slice = String.prototype.slice;\n/**\n * Helper function for constructing the Token object.\n */\n\nfunction Tok(kind, start, end, line, column, prev, value) {\n this.kind = kind;\n this.start = start;\n this.end = end;\n this.line = line;\n this.column = column;\n this.value = value;\n this.prev = prev;\n this.next = null;\n} // Print a simplified form when appearing in JSON/util.inspect.\n\n\nTok.prototype.toJSON = Tok.prototype.inspect = function toJSON() {\n return {\n kind: this.kind,\n value: this.value,\n line: this.line,\n column: this.column\n };\n};\n\nfunction printCharCode(code) {\n return (// NaN/undefined represents access beyond the end of the file.\n isNaN(code) ? TokenKind.EOF : // Trust JSON for ASCII.\n code < 0x007f ? JSON.stringify(String.fromCharCode(code)) : // Otherwise print the escaped form.\n \"\\\"\\\\u\".concat(('00' + code.toString(16).toUpperCase()).slice(-4), \"\\\"\")\n );\n}\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace and comments until it finds the next lexable\n * token, then lexes punctuators immediately or calls the appropriate helper\n * function for more complicated tokens.\n */\n\n\nfunction readToken(lexer, prev) {\n var source = lexer.source;\n var body = source.body;\n var bodyLength = body.length;\n var pos = positionAfterWhitespace(body, prev.end, lexer);\n var line = lexer.line;\n var col = 1 + pos - lexer.lineStart;\n\n if (pos >= bodyLength) {\n return new Tok(TokenKind.EOF, bodyLength, bodyLength, line, col, prev);\n }\n\n var code = charCodeAt.call(body, pos); // SourceCharacter\n\n switch (code) {\n // !\n case 33:\n return new Tok(TokenKind.BANG, pos, pos + 1, line, col, prev);\n // #\n\n case 35:\n return readComment(source, pos, line, col, prev);\n // $\n\n case 36:\n return new Tok(TokenKind.DOLLAR, pos, pos + 1, line, col, prev);\n // &\n\n case 38:\n return new Tok(TokenKind.AMP, pos, pos + 1, line, col, prev);\n // (\n\n case 40:\n return new Tok(TokenKind.PAREN_L, pos, pos + 1, line, col, prev);\n // )\n\n case 41:\n return new Tok(TokenKind.PAREN_R, pos, pos + 1, line, col, prev);\n // .\n\n case 46:\n if (charCodeAt.call(body, pos + 1) === 46 && charCodeAt.call(body, pos + 2) === 46) {\n return new Tok(TokenKind.SPREAD, pos, pos + 3, line, col, prev);\n }\n\n break;\n // :\n\n case 58:\n return new Tok(TokenKind.COLON, pos, pos + 1, line, col, prev);\n // =\n\n case 61:\n return new Tok(TokenKind.EQUALS, pos, pos + 1, line, col, prev);\n // @\n\n case 64:\n return new Tok(TokenKind.AT, pos, pos + 1, line, col, prev);\n // [\n\n case 91:\n return new Tok(TokenKind.BRACKET_L, pos, pos + 1, line, col, prev);\n // ]\n\n case 93:\n return new Tok(TokenKind.BRACKET_R, pos, pos + 1, line, col, prev);\n // {\n\n case 123:\n return new Tok(TokenKind.BRACE_L, pos, pos + 1, line, col, prev);\n // |\n\n case 124:\n return new Tok(TokenKind.PIPE, pos, pos + 1, line, col, prev);\n // }\n\n case 125:\n return new Tok(TokenKind.BRACE_R, pos, pos + 1, line, col, prev);\n // A-Z _ a-z\n\n case 65:\n case 66:\n case 67:\n case 68:\n case 69:\n case 70:\n case 71:\n case 72:\n case 73:\n case 74:\n case 75:\n case 76:\n case 77:\n case 78:\n case 79:\n case 80:\n case 81:\n case 82:\n case 83:\n case 84:\n case 85:\n case 86:\n case 87:\n case 88:\n case 89:\n case 90:\n case 95:\n case 97:\n case 98:\n case 99:\n case 100:\n case 101:\n case 102:\n case 103:\n case 104:\n case 105:\n case 106:\n case 107:\n case 108:\n case 109:\n case 110:\n case 111:\n case 112:\n case 113:\n case 114:\n case 115:\n case 116:\n case 117:\n case 118:\n case 119:\n case 120:\n case 121:\n case 122:\n return readName(source, pos, line, col, prev);\n // - 0-9\n\n case 45:\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n return readNumber(source, pos, code, line, col, prev);\n // \"\n\n case 34:\n if (charCodeAt.call(body, pos + 1) === 34 && charCodeAt.call(body, pos + 2) === 34) {\n return readBlockString(source, pos, line, col, prev);\n }\n\n return readString(source, pos, line, col, prev);\n }\n\n throw syntaxError(source, pos, unexpectedCharacterMessage(code));\n}\n/**\n * Report a message that an unexpected character was encountered.\n */\n\n\nfunction unexpectedCharacterMessage(code) {\n if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {\n return \"Cannot contain the invalid character \".concat(printCharCode(code), \".\");\n }\n\n if (code === 39) {\n // '\n return \"Unexpected single quote character ('), did you mean to use \" + 'a double quote (\")?';\n }\n\n return \"Cannot parse the unexpected character \".concat(printCharCode(code), \".\");\n}\n/**\n * Reads from body starting at startPosition until it finds a non-whitespace\n * or commented character, then returns the position of that character for\n * lexing.\n */\n\n\nfunction positionAfterWhitespace(body, startPosition, lexer) {\n var bodyLength = body.length;\n var position = startPosition;\n\n while (position < bodyLength) {\n var code = charCodeAt.call(body, position); // tab | space | comma | BOM\n\n if (code === 9 || code === 32 || code === 44 || code === 0xfeff) {\n ++position;\n } else if (code === 10) {\n // new line\n ++position;\n ++lexer.line;\n lexer.lineStart = position;\n } else if (code === 13) {\n // carriage return\n if (charCodeAt.call(body, position + 1) === 10) {\n position += 2;\n } else {\n ++position;\n }\n\n ++lexer.line;\n lexer.lineStart = position;\n } else {\n break;\n }\n }\n\n return position;\n}\n/**\n * Reads a comment token from the source file.\n *\n * #[\\u0009\\u0020-\\uFFFF]*\n */\n\n\nfunction readComment(source, start, line, col, prev) {\n var body = source.body;\n var code;\n var position = start;\n\n do {\n code = charCodeAt.call(body, ++position);\n } while (code !== null && ( // SourceCharacter but not LineTerminator\n code > 0x001f || code === 0x0009));\n\n return new Tok(TokenKind.COMMENT, start, position, line, col, prev, slice.call(body, start + 1, position));\n}\n/**\n * Reads a number token from the source file, either a float\n * or an int depending on whether a decimal point appears.\n *\n * Int: -?(0|[1-9][0-9]*)\n * Float: -?(0|[1-9][0-9]*)(\\.[0-9]+)?((E|e)(+|-)?[0-9]+)?\n */\n\n\nfunction readNumber(source, start, firstCode, line, col, prev) {\n var body = source.body;\n var code = firstCode;\n var position = start;\n var isFloat = false;\n\n if (code === 45) {\n // -\n code = charCodeAt.call(body, ++position);\n }\n\n if (code === 48) {\n // 0\n code = charCodeAt.call(body, ++position);\n\n if (code >= 48 && code <= 57) {\n throw syntaxError(source, position, \"Invalid number, unexpected digit after 0: \".concat(printCharCode(code), \".\"));\n }\n } else {\n position = readDigits(source, position, code);\n code = charCodeAt.call(body, position);\n }\n\n if (code === 46) {\n // .\n isFloat = true;\n code = charCodeAt.call(body, ++position);\n position = readDigits(source, position, code);\n code = charCodeAt.call(body, position);\n }\n\n if (code === 69 || code === 101) {\n // E e\n isFloat = true;\n code = charCodeAt.call(body, ++position);\n\n if (code === 43 || code === 45) {\n // + -\n code = charCodeAt.call(body, ++position);\n }\n\n position = readDigits(source, position, code);\n }\n\n return new Tok(isFloat ? TokenKind.FLOAT : TokenKind.INT, start, position, line, col, prev, slice.call(body, start, position));\n}\n/**\n * Returns the new position in the source after reading digits.\n */\n\n\nfunction readDigits(source, start, firstCode) {\n var body = source.body;\n var position = start;\n var code = firstCode;\n\n if (code >= 48 && code <= 57) {\n // 0 - 9\n do {\n code = charCodeAt.call(body, ++position);\n } while (code >= 48 && code <= 57); // 0 - 9\n\n\n return position;\n }\n\n throw syntaxError(source, position, \"Invalid number, expected digit but got: \".concat(printCharCode(code), \".\"));\n}\n/**\n * Reads a string token from the source file.\n *\n * \"([^\"\\\\\\u000A\\u000D]|(\\\\(u[0-9a-fA-F]{4}|[\"\\\\/bfnrt])))*\"\n */\n\n\nfunction readString(source, start, line, col, prev) {\n var body = source.body;\n var position = start + 1;\n var chunkStart = position;\n var code = 0;\n var value = '';\n\n while (position < body.length && (code = charCodeAt.call(body, position)) !== null && // not LineTerminator\n code !== 0x000a && code !== 0x000d) {\n // Closing Quote (\")\n if (code === 34) {\n value += slice.call(body, chunkStart, position);\n return new Tok(TokenKind.STRING, start, position + 1, line, col, prev, value);\n } // SourceCharacter\n\n\n if (code < 0x0020 && code !== 0x0009) {\n throw syntaxError(source, position, \"Invalid character within String: \".concat(printCharCode(code), \".\"));\n }\n\n ++position;\n\n if (code === 92) {\n // \\\n value += slice.call(body, chunkStart, position - 1);\n code = charCodeAt.call(body, position);\n\n switch (code) {\n case 34:\n value += '\"';\n break;\n\n case 47:\n value += '/';\n break;\n\n case 92:\n value += '\\\\';\n break;\n\n case 98:\n value += '\\b';\n break;\n\n case 102:\n value += '\\f';\n break;\n\n case 110:\n value += '\\n';\n break;\n\n case 114:\n value += '\\r';\n break;\n\n case 116:\n value += '\\t';\n break;\n\n case 117:\n // u\n var charCode = uniCharCode(charCodeAt.call(body, position + 1), charCodeAt.call(body, position + 2), charCodeAt.call(body, position + 3), charCodeAt.call(body, position + 4));\n\n if (charCode < 0) {\n throw syntaxError(source, position, 'Invalid character escape sequence: ' + \"\\\\u\".concat(body.slice(position + 1, position + 5), \".\"));\n }\n\n value += String.fromCharCode(charCode);\n position += 4;\n break;\n\n default:\n throw syntaxError(source, position, \"Invalid character escape sequence: \\\\\".concat(String.fromCharCode(code), \".\"));\n }\n\n ++position;\n chunkStart = position;\n }\n }\n\n throw syntaxError(source, position, 'Unterminated string.');\n}\n/**\n * Reads a block string token from the source file.\n *\n * \"\"\"(\"?\"?(\\\\\"\"\"|\\\\(?!=\"\"\")|[^\"\\\\]))*\"\"\"\n */\n\n\nfunction readBlockString(source, start, line, col, prev) {\n var body = source.body;\n var position = start + 3;\n var chunkStart = position;\n var code = 0;\n var rawValue = '';\n\n while (position < body.length && (code = charCodeAt.call(body, position)) !== null) {\n // Closing Triple-Quote (\"\"\")\n if (code === 34 && charCodeAt.call(body, position + 1) === 34 && charCodeAt.call(body, position + 2) === 34) {\n rawValue += slice.call(body, chunkStart, position);\n return new Tok(TokenKind.BLOCK_STRING, start, position + 3, line, col, prev, blockStringValue(rawValue));\n } // SourceCharacter\n\n\n if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {\n throw syntaxError(source, position, \"Invalid character within String: \".concat(printCharCode(code), \".\"));\n } // Escape Triple-Quote (\\\"\"\")\n\n\n if (code === 92 && charCodeAt.call(body, position + 1) === 34 && charCodeAt.call(body, position + 2) === 34 && charCodeAt.call(body, position + 3) === 34) {\n rawValue += slice.call(body, chunkStart, position) + '\"\"\"';\n position += 4;\n chunkStart = position;\n } else {\n ++position;\n }\n }\n\n throw syntaxError(source, position, 'Unterminated string.');\n}\n/**\n * Converts four hexidecimal chars to the integer that the\n * string represents. For example, uniCharCode('0','0','0','f')\n * will return 15, and uniCharCode('0','0','f','f') returns 255.\n *\n * Returns a negative number on error, if a char was invalid.\n *\n * This is implemented by noting that char2hex() returns -1 on error,\n * which means the result of ORing the char2hex() will also be negative.\n */\n\n\nfunction uniCharCode(a, b, c, d) {\n return char2hex(a) << 12 | char2hex(b) << 8 | char2hex(c) << 4 | char2hex(d);\n}\n/**\n * Converts a hex character to its integer value.\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 on error.\n */\n\n\nfunction char2hex(a) {\n return a >= 48 && a <= 57 ? a - 48 // 0-9\n : a >= 65 && a <= 70 ? a - 55 // A-F\n : a >= 97 && a <= 102 ? a - 87 // a-f\n : -1;\n}\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * [_A-Za-z][_0-9A-Za-z]*\n */\n\n\nfunction readName(source, start, line, col, prev) {\n var body = source.body;\n var bodyLength = body.length;\n var position = start + 1;\n var code = 0;\n\n while (position !== bodyLength && (code = charCodeAt.call(body, position)) !== null && (code === 95 || // _\n code >= 48 && code <= 57 || // 0-9\n code >= 65 && code <= 90 || // A-Z\n code >= 97 && code <= 122) // a-z\n ) {\n ++position;\n }\n\n return new Tok(TokenKind.NAME, start, position, line, col, prev, slice.call(body, start, position));\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\n\n/**\n * The set of allowed kind values for AST nodes.\n */\nexport var Kind = Object.freeze({\n // Name\n NAME: 'Name',\n // Document\n DOCUMENT: 'Document',\n OPERATION_DEFINITION: 'OperationDefinition',\n VARIABLE_DEFINITION: 'VariableDefinition',\n SELECTION_SET: 'SelectionSet',\n FIELD: 'Field',\n ARGUMENT: 'Argument',\n // Fragments\n FRAGMENT_SPREAD: 'FragmentSpread',\n INLINE_FRAGMENT: 'InlineFragment',\n FRAGMENT_DEFINITION: 'FragmentDefinition',\n // Values\n VARIABLE: 'Variable',\n INT: 'IntValue',\n FLOAT: 'FloatValue',\n STRING: 'StringValue',\n BOOLEAN: 'BooleanValue',\n NULL: 'NullValue',\n ENUM: 'EnumValue',\n LIST: 'ListValue',\n OBJECT: 'ObjectValue',\n OBJECT_FIELD: 'ObjectField',\n // Directives\n DIRECTIVE: 'Directive',\n // Types\n NAMED_TYPE: 'NamedType',\n LIST_TYPE: 'ListType',\n NON_NULL_TYPE: 'NonNullType',\n // Type System Definitions\n SCHEMA_DEFINITION: 'SchemaDefinition',\n OPERATION_TYPE_DEFINITION: 'OperationTypeDefinition',\n // Type Definitions\n SCALAR_TYPE_DEFINITION: 'ScalarTypeDefinition',\n OBJECT_TYPE_DEFINITION: 'ObjectTypeDefinition',\n FIELD_DEFINITION: 'FieldDefinition',\n INPUT_VALUE_DEFINITION: 'InputValueDefinition',\n INTERFACE_TYPE_DEFINITION: 'InterfaceTypeDefinition',\n UNION_TYPE_DEFINITION: 'UnionTypeDefinition',\n ENUM_TYPE_DEFINITION: 'EnumTypeDefinition',\n ENUM_VALUE_DEFINITION: 'EnumValueDefinition',\n INPUT_OBJECT_TYPE_DEFINITION: 'InputObjectTypeDefinition',\n // Directive Definitions\n DIRECTIVE_DEFINITION: 'DirectiveDefinition',\n // Type System Extensions\n SCHEMA_EXTENSION: 'SchemaExtension',\n // Type Extensions\n SCALAR_TYPE_EXTENSION: 'ScalarTypeExtension',\n OBJECT_TYPE_EXTENSION: 'ObjectTypeExtension',\n INTERFACE_TYPE_EXTENSION: 'InterfaceTypeExtension',\n UNION_TYPE_EXTENSION: 'UnionTypeExtension',\n ENUM_TYPE_EXTENSION: 'EnumTypeExtension',\n INPUT_OBJECT_TYPE_EXTENSION: 'InputObjectTypeExtension'\n});\n/**\n * The enum type representing the possible kind values of AST nodes.\n */","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\n\n/**\n * The set of allowed directive location values.\n */\nexport var DirectiveLocation = Object.freeze({\n // Request Definitions\n QUERY: 'QUERY',\n MUTATION: 'MUTATION',\n SUBSCRIPTION: 'SUBSCRIPTION',\n FIELD: 'FIELD',\n FRAGMENT_DEFINITION: 'FRAGMENT_DEFINITION',\n FRAGMENT_SPREAD: 'FRAGMENT_SPREAD',\n INLINE_FRAGMENT: 'INLINE_FRAGMENT',\n VARIABLE_DEFINITION: 'VARIABLE_DEFINITION',\n // Type System Definitions\n SCHEMA: 'SCHEMA',\n SCALAR: 'SCALAR',\n OBJECT: 'OBJECT',\n FIELD_DEFINITION: 'FIELD_DEFINITION',\n ARGUMENT_DEFINITION: 'ARGUMENT_DEFINITION',\n INTERFACE: 'INTERFACE',\n UNION: 'UNION',\n ENUM: 'ENUM',\n ENUM_VALUE: 'ENUM_VALUE',\n INPUT_OBJECT: 'INPUT_OBJECT',\n INPUT_FIELD_DEFINITION: 'INPUT_FIELD_DEFINITION'\n});\n/**\n * The enum type representing the directive location values.\n */","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * strict\n */\nimport inspect from '../jsutils/inspect';\nimport { Source } from './source';\nimport { syntaxError } from '../error';\nimport { createLexer, TokenKind, getTokenDesc } from './lexer';\nimport { Kind } from './kinds';\nimport { DirectiveLocation } from './directiveLocation';\n/**\n * Configuration options to control parser behavior\n */\n\n/**\n * Given a GraphQL source, parses it into a Document.\n * Throws GraphQLError if a syntax error is encountered.\n */\nexport function parse(source, options) {\n var sourceObj = typeof source === 'string' ? new Source(source) : source;\n\n if (!(sourceObj instanceof Source)) {\n throw new TypeError(\"Must provide Source. Received: \".concat(inspect(sourceObj)));\n }\n\n var lexer = createLexer(sourceObj, options || {});\n return parseDocument(lexer);\n}\n/**\n * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for\n * that value.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Values directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: valueFromAST().\n */\n\nexport function parseValue(source, options) {\n var sourceObj = typeof source === 'string' ? new Source(source) : source;\n var lexer = createLexer(sourceObj, options || {});\n expect(lexer, TokenKind.SOF);\n var value = parseValueLiteral(lexer, false);\n expect(lexer, TokenKind.EOF);\n return value;\n}\n/**\n * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for\n * that type.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Types directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: typeFromAST().\n */\n\nexport function parseType(source, options) {\n var sourceObj = typeof source === 'string' ? new Source(source) : source;\n var lexer = createLexer(sourceObj, options || {});\n expect(lexer, TokenKind.SOF);\n var type = parseTypeReference(lexer);\n expect(lexer, TokenKind.EOF);\n return type;\n}\n/**\n * Converts a name lex token into a name parse node.\n */\n\nfunction parseName(lexer) {\n var token = expect(lexer, TokenKind.NAME);\n return {\n kind: Kind.NAME,\n value: token.value,\n loc: loc(lexer, token)\n };\n} // Implements the parsing rules in the Document section.\n\n/**\n * Document : Definition+\n */\n\n\nfunction parseDocument(lexer) {\n var start = lexer.token;\n return {\n kind: Kind.DOCUMENT,\n definitions: many(lexer, TokenKind.SOF, parseDefinition, TokenKind.EOF),\n loc: loc(lexer, start)\n };\n}\n/**\n * Definition :\n * - ExecutableDefinition\n * - TypeSystemDefinition\n * - TypeSystemExtension\n */\n\n\nfunction parseDefinition(lexer) {\n if (peek(lexer, TokenKind.NAME)) {\n switch (lexer.token.value) {\n case 'query':\n case 'mutation':\n case 'subscription':\n case 'fragment':\n return parseExecutableDefinition(lexer);\n\n case 'schema':\n case 'scalar':\n case 'type':\n case 'interface':\n case 'union':\n case 'enum':\n case 'input':\n case 'directive':\n return parseTypeSystemDefinition(lexer);\n\n case 'extend':\n return parseTypeSystemExtension(lexer);\n }\n } else if (peek(lexer, TokenKind.BRACE_L)) {\n return parseExecutableDefinition(lexer);\n } else if (peekDescription(lexer)) {\n return parseTypeSystemDefinition(lexer);\n }\n\n throw unexpected(lexer);\n}\n/**\n * ExecutableDefinition :\n * - OperationDefinition\n * - FragmentDefinition\n */\n\n\nfunction parseExecutableDefinition(lexer) {\n if (peek(lexer, TokenKind.NAME)) {\n switch (lexer.token.value) {\n case 'query':\n case 'mutation':\n case 'subscription':\n return parseOperationDefinition(lexer);\n\n case 'fragment':\n return parseFragmentDefinition(lexer);\n }\n } else if (peek(lexer, TokenKind.BRACE_L)) {\n return parseOperationDefinition(lexer);\n }\n\n throw unexpected(lexer);\n} // Implements the parsing rules in the Operations section.\n\n/**\n * OperationDefinition :\n * - SelectionSet\n * - OperationType Name? VariableDefinitions? Directives? SelectionSet\n */\n\n\nfunction parseOperationDefinition(lexer) {\n var start = lexer.token;\n\n if (peek(lexer, TokenKind.BRACE_L)) {\n return {\n kind: Kind.OPERATION_DEFINITION,\n operation: 'query',\n name: undefined,\n variableDefinitions: [],\n directives: [],\n selectionSet: parseSelectionSet(lexer),\n loc: loc(lexer, start)\n };\n }\n\n var operation = parseOperationType(lexer);\n var name;\n\n if (peek(lexer, TokenKind.NAME)) {\n name = parseName(lexer);\n }\n\n return {\n kind: Kind.OPERATION_DEFINITION,\n operation: operation,\n name: name,\n variableDefinitions: parseVariableDefinitions(lexer),\n directives: parseDirectives(lexer, false),\n selectionSet: parseSelectionSet(lexer),\n loc: loc(lexer, start)\n };\n}\n/**\n * OperationType : one of query mutation subscription\n */\n\n\nfunction parseOperationType(lexer) {\n var operationToken = expect(lexer, TokenKind.NAME);\n\n switch (operationToken.value) {\n case 'query':\n return 'query';\n\n case 'mutation':\n return 'mutation';\n\n case 'subscription':\n return 'subscription';\n }\n\n throw unexpected(lexer, operationToken);\n}\n/**\n * VariableDefinitions : ( VariableDefinition+ )\n */\n\n\nfunction parseVariableDefinitions(lexer) {\n return peek(lexer, TokenKind.PAREN_L) ? many(lexer, TokenKind.PAREN_L, parseVariableDefinition, TokenKind.PAREN_R) : [];\n}\n/**\n * VariableDefinition : Variable : Type DefaultValue? Directives[Const]?\n */\n\n\nfunction parseVariableDefinition(lexer) {\n var start = lexer.token;\n\n if (lexer.options.experimentalVariableDefinitionDirectives) {\n return {\n kind: Kind.VARIABLE_DEFINITION,\n variable: parseVariable(lexer),\n type: (expect(lexer, TokenKind.COLON), parseTypeReference(lexer)),\n defaultValue: skip(lexer, TokenKind.EQUALS) ? parseValueLiteral(lexer, true) : undefined,\n directives: parseDirectives(lexer, true),\n loc: loc(lexer, start)\n };\n }\n\n return {\n kind: Kind.VARIABLE_DEFINITION,\n variable: parseVariable(lexer),\n type: (expect(lexer, TokenKind.COLON), parseTypeReference(lexer)),\n defaultValue: skip(lexer, TokenKind.EQUALS) ? parseValueLiteral(lexer, true) : undefined,\n loc: loc(lexer, start)\n };\n}\n/**\n * Variable : $ Name\n */\n\n\nfunction parseVariable(lexer) {\n var start = lexer.token;\n expect(lexer, TokenKind.DOLLAR);\n return {\n kind: Kind.VARIABLE,\n name: parseName(lexer),\n loc: loc(lexer, start)\n };\n}\n/**\n * SelectionSet : { Selection+ }\n */\n\n\nfunction parseSelectionSet(lexer) {\n var start = lexer.token;\n return {\n kind: Kind.SELECTION_SET,\n selections: many(lexer, TokenKind.BRACE_L, parseSelection, TokenKind.BRACE_R),\n loc: loc(lexer, start)\n };\n}\n/**\n * Selection :\n * - Field\n * - FragmentSpread\n * - InlineFragment\n */\n\n\nfunction parseSelection(lexer) {\n return peek(lexer, TokenKind.SPREAD) ? parseFragment(lexer) : parseField(lexer);\n}\n/**\n * Field : Alias? Name Arguments? Directives? SelectionSet?\n *\n * Alias : Name :\n */\n\n\nfunction parseField(lexer) {\n var start = lexer.token;\n var nameOrAlias = parseName(lexer);\n var alias;\n var name;\n\n if (skip(lexer, TokenKind.COLON)) {\n alias = nameOrAlias;\n name = parseName(lexer);\n } else {\n name = nameOrAlias;\n }\n\n return {\n kind: Kind.FIELD,\n alias: alias,\n name: name,\n arguments: parseArguments(lexer, false),\n directives: parseDirectives(lexer, false),\n selectionSet: peek(lexer, TokenKind.BRACE_L) ? parseSelectionSet(lexer) : undefined,\n loc: loc(lexer, start)\n };\n}\n/**\n * Arguments[Const] : ( Argument[?Const]+ )\n */\n\n\nfunction parseArguments(lexer, isConst) {\n var item = isConst ? parseConstArgument : parseArgument;\n return peek(lexer, TokenKind.PAREN_L) ? many(lexer, TokenKind.PAREN_L, item, TokenKind.PAREN_R) : [];\n}\n/**\n * Argument[Const] : Name : Value[?Const]\n */\n\n\nfunction parseArgument(lexer) {\n var start = lexer.token;\n return {\n kind: Kind.ARGUMENT,\n name: parseName(lexer),\n value: (expect(lexer, TokenKind.COLON), parseValueLiteral(lexer, false)),\n loc: loc(lexer, start)\n };\n}\n\nfunction parseConstArgument(lexer) {\n var start = lexer.token;\n return {\n kind: Kind.ARGUMENT,\n name: parseName(lexer),\n value: (expect(lexer, TokenKind.COLON), parseConstValue(lexer)),\n loc: loc(lexer, start)\n };\n} // Implements the parsing rules in the Fragments section.\n\n/**\n * Corresponds to both FragmentSpread and InlineFragment in the spec.\n *\n * FragmentSpread : ... FragmentName Directives?\n *\n * InlineFragment : ... TypeCondition? Directives? SelectionSet\n */\n\n\nfunction parseFragment(lexer) {\n var start = lexer.token;\n expect(lexer, TokenKind.SPREAD);\n\n if (peek(lexer, TokenKind.NAME) && lexer.token.value !== 'on') {\n return {\n kind: Kind.FRAGMENT_SPREAD,\n name: parseFragmentName(lexer),\n directives: parseDirectives(lexer, false),\n loc: loc(lexer, start)\n };\n }\n\n var typeCondition;\n\n if (lexer.token.value === 'on') {\n lexer.advance();\n typeCondition = parseNamedType(lexer);\n }\n\n return {\n kind: Kind.INLINE_FRAGMENT,\n typeCondition: typeCondition,\n directives: parseDirectives(lexer, false),\n selectionSet: parseSelectionSet(lexer),\n loc: loc(lexer, start)\n };\n}\n/**\n * FragmentDefinition :\n * - fragment FragmentName on TypeCondition Directives? SelectionSet\n *\n * TypeCondition : NamedType\n */\n\n\nfunction parseFragmentDefinition(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'fragment'); // Experimental support for defining variables within fragments changes\n // the grammar of FragmentDefinition:\n // - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet\n\n if (lexer.options.experimentalFragmentVariables) {\n return {\n kind: Kind.FRAGMENT_DEFINITION,\n name: parseFragmentName(lexer),\n variableDefinitions: parseVariableDefinitions(lexer),\n typeCondition: (expectKeyword(lexer, 'on'), parseNamedType(lexer)),\n directives: parseDirectives(lexer, false),\n selectionSet: parseSelectionSet(lexer),\n loc: loc(lexer, start)\n };\n }\n\n return {\n kind: Kind.FRAGMENT_DEFINITION,\n name: parseFragmentName(lexer),\n typeCondition: (expectKeyword(lexer, 'on'), parseNamedType(lexer)),\n directives: parseDirectives(lexer, false),\n selectionSet: parseSelectionSet(lexer),\n loc: loc(lexer, start)\n };\n}\n/**\n * FragmentName : Name but not `on`\n */\n\n\nfunction parseFragmentName(lexer) {\n if (lexer.token.value === 'on') {\n throw unexpected(lexer);\n }\n\n return parseName(lexer);\n} // Implements the parsing rules in the Values section.\n\n/**\n * Value[Const] :\n * - [~Const] Variable\n * - IntValue\n * - FloatValue\n * - StringValue\n * - BooleanValue\n * - NullValue\n * - EnumValue\n * - ListValue[?Const]\n * - ObjectValue[?Const]\n *\n * BooleanValue : one of `true` `false`\n *\n * NullValue : `null`\n *\n * EnumValue : Name but not `true`, `false` or `null`\n */\n\n\nfunction parseValueLiteral(lexer, isConst) {\n var token = lexer.token;\n\n switch (token.kind) {\n case TokenKind.BRACKET_L:\n return parseList(lexer, isConst);\n\n case TokenKind.BRACE_L:\n return parseObject(lexer, isConst);\n\n case TokenKind.INT:\n lexer.advance();\n return {\n kind: Kind.INT,\n value: token.value,\n loc: loc(lexer, token)\n };\n\n case TokenKind.FLOAT:\n lexer.advance();\n return {\n kind: Kind.FLOAT,\n value: token.value,\n loc: loc(lexer, token)\n };\n\n case TokenKind.STRING:\n case TokenKind.BLOCK_STRING:\n return parseStringLiteral(lexer);\n\n case TokenKind.NAME:\n if (token.value === 'true' || token.value === 'false') {\n lexer.advance();\n return {\n kind: Kind.BOOLEAN,\n value: token.value === 'true',\n loc: loc(lexer, token)\n };\n } else if (token.value === 'null') {\n lexer.advance();\n return {\n kind: Kind.NULL,\n loc: loc(lexer, token)\n };\n }\n\n lexer.advance();\n return {\n kind: Kind.ENUM,\n value: token.value,\n loc: loc(lexer, token)\n };\n\n case TokenKind.DOLLAR:\n if (!isConst) {\n return parseVariable(lexer);\n }\n\n break;\n }\n\n throw unexpected(lexer);\n}\n\nfunction parseStringLiteral(lexer) {\n var token = lexer.token;\n lexer.advance();\n return {\n kind: Kind.STRING,\n value: token.value,\n block: token.kind === TokenKind.BLOCK_STRING,\n loc: loc(lexer, token)\n };\n}\n\nexport function parseConstValue(lexer) {\n return parseValueLiteral(lexer, true);\n}\n\nfunction parseValueValue(lexer) {\n return parseValueLiteral(lexer, false);\n}\n/**\n * ListValue[Const] :\n * - [ ]\n * - [ Value[?Const]+ ]\n */\n\n\nfunction parseList(lexer, isConst) {\n var start = lexer.token;\n var item = isConst ? parseConstValue : parseValueValue;\n return {\n kind: Kind.LIST,\n values: any(lexer, TokenKind.BRACKET_L, item, TokenKind.BRACKET_R),\n loc: loc(lexer, start)\n };\n}\n/**\n * ObjectValue[Const] :\n * - { }\n * - { ObjectField[?Const]+ }\n */\n\n\nfunction parseObject(lexer, isConst) {\n var start = lexer.token;\n expect(lexer, TokenKind.BRACE_L);\n var fields = [];\n\n while (!skip(lexer, TokenKind.BRACE_R)) {\n fields.push(parseObjectField(lexer, isConst));\n }\n\n return {\n kind: Kind.OBJECT,\n fields: fields,\n loc: loc(lexer, start)\n };\n}\n/**\n * ObjectField[Const] : Name : Value[?Const]\n */\n\n\nfunction parseObjectField(lexer, isConst) {\n var start = lexer.token;\n return {\n kind: Kind.OBJECT_FIELD,\n name: parseName(lexer),\n value: (expect(lexer, TokenKind.COLON), parseValueLiteral(lexer, isConst)),\n loc: loc(lexer, start)\n };\n} // Implements the parsing rules in the Directives section.\n\n/**\n * Directives[Const] : Directive[?Const]+\n */\n\n\nfunction parseDirectives(lexer, isConst) {\n var directives = [];\n\n while (peek(lexer, TokenKind.AT)) {\n directives.push(parseDirective(lexer, isConst));\n }\n\n return directives;\n}\n/**\n * Directive[Const] : @ Name Arguments[?Const]?\n */\n\n\nfunction parseDirective(lexer, isConst) {\n var start = lexer.token;\n expect(lexer, TokenKind.AT);\n return {\n kind: Kind.DIRECTIVE,\n name: parseName(lexer),\n arguments: parseArguments(lexer, isConst),\n loc: loc(lexer, start)\n };\n} // Implements the parsing rules in the Types section.\n\n/**\n * Type :\n * - NamedType\n * - ListType\n * - NonNullType\n */\n\n\nexport function parseTypeReference(lexer) {\n var start = lexer.token;\n var type;\n\n if (skip(lexer, TokenKind.BRACKET_L)) {\n type = parseTypeReference(lexer);\n expect(lexer, TokenKind.BRACKET_R);\n type = {\n kind: Kind.LIST_TYPE,\n type: type,\n loc: loc(lexer, start)\n };\n } else {\n type = parseNamedType(lexer);\n }\n\n if (skip(lexer, TokenKind.BANG)) {\n return {\n kind: Kind.NON_NULL_TYPE,\n type: type,\n loc: loc(lexer, start)\n };\n }\n\n return type;\n}\n/**\n * NamedType : Name\n */\n\nexport function parseNamedType(lexer) {\n var start = lexer.token;\n return {\n kind: Kind.NAMED_TYPE,\n name: parseName(lexer),\n loc: loc(lexer, start)\n };\n} // Implements the parsing rules in the Type Definition section.\n\n/**\n * TypeSystemDefinition :\n * - SchemaDefinition\n * - TypeDefinition\n * - DirectiveDefinition\n *\n * TypeDefinition :\n * - ScalarTypeDefinition\n * - ObjectTypeDefinition\n * - InterfaceTypeDefinition\n * - UnionTypeDefinition\n * - EnumTypeDefinition\n * - InputObjectTypeDefinition\n */\n\nfunction parseTypeSystemDefinition(lexer) {\n // Many definitions begin with a description and require a lookahead.\n var keywordToken = peekDescription(lexer) ? lexer.lookahead() : lexer.token;\n\n if (keywordToken.kind === TokenKind.NAME) {\n switch (keywordToken.value) {\n case 'schema':\n return parseSchemaDefinition(lexer);\n\n case 'scalar':\n return parseScalarTypeDefinition(lexer);\n\n case 'type':\n return parseObjectTypeDefinition(lexer);\n\n case 'interface':\n return parseInterfaceTypeDefinition(lexer);\n\n case 'union':\n return parseUnionTypeDefinition(lexer);\n\n case 'enum':\n return parseEnumTypeDefinition(lexer);\n\n case 'input':\n return parseInputObjectTypeDefinition(lexer);\n\n case 'directive':\n return parseDirectiveDefinition(lexer);\n }\n }\n\n throw unexpected(lexer, keywordToken);\n}\n\nfunction peekDescription(lexer) {\n return peek(lexer, TokenKind.STRING) || peek(lexer, TokenKind.BLOCK_STRING);\n}\n/**\n * Description : StringValue\n */\n\n\nfunction parseDescription(lexer) {\n if (peekDescription(lexer)) {\n return parseStringLiteral(lexer);\n }\n}\n/**\n * SchemaDefinition : schema Directives[Const]? { OperationTypeDefinition+ }\n */\n\n\nfunction parseSchemaDefinition(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'schema');\n var directives = parseDirectives(lexer, true);\n var operationTypes = many(lexer, TokenKind.BRACE_L, parseOperationTypeDefinition, TokenKind.BRACE_R);\n return {\n kind: Kind.SCHEMA_DEFINITION,\n directives: directives,\n operationTypes: operationTypes,\n loc: loc(lexer, start)\n };\n}\n/**\n * OperationTypeDefinition : OperationType : NamedType\n */\n\n\nfunction parseOperationTypeDefinition(lexer) {\n var start = lexer.token;\n var operation = parseOperationType(lexer);\n expect(lexer, TokenKind.COLON);\n var type = parseNamedType(lexer);\n return {\n kind: Kind.OPERATION_TYPE_DEFINITION,\n operation: operation,\n type: type,\n loc: loc(lexer, start)\n };\n}\n/**\n * ScalarTypeDefinition : Description? scalar Name Directives[Const]?\n */\n\n\nfunction parseScalarTypeDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n expectKeyword(lexer, 'scalar');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n return {\n kind: Kind.SCALAR_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n loc: loc(lexer, start)\n };\n}\n/**\n * ObjectTypeDefinition :\n * Description?\n * type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition?\n */\n\n\nfunction parseObjectTypeDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n expectKeyword(lexer, 'type');\n var name = parseName(lexer);\n var interfaces = parseImplementsInterfaces(lexer);\n var directives = parseDirectives(lexer, true);\n var fields = parseFieldsDefinition(lexer);\n return {\n kind: Kind.OBJECT_TYPE_DEFINITION,\n description: description,\n name: name,\n interfaces: interfaces,\n directives: directives,\n fields: fields,\n loc: loc(lexer, start)\n };\n}\n/**\n * ImplementsInterfaces :\n * - implements `&`? NamedType\n * - ImplementsInterfaces & NamedType\n */\n\n\nfunction parseImplementsInterfaces(lexer) {\n var types = [];\n\n if (lexer.token.value === 'implements') {\n lexer.advance(); // Optional leading ampersand\n\n skip(lexer, TokenKind.AMP);\n\n do {\n types.push(parseNamedType(lexer));\n } while (skip(lexer, TokenKind.AMP) || // Legacy support for the SDL?\n lexer.options.allowLegacySDLImplementsInterfaces && peek(lexer, TokenKind.NAME));\n }\n\n return types;\n}\n/**\n * FieldsDefinition : { FieldDefinition+ }\n */\n\n\nfunction parseFieldsDefinition(lexer) {\n // Legacy support for the SDL?\n if (lexer.options.allowLegacySDLEmptyFields && peek(lexer, TokenKind.BRACE_L) && lexer.lookahead().kind === TokenKind.BRACE_R) {\n lexer.advance();\n lexer.advance();\n return [];\n }\n\n return peek(lexer, TokenKind.BRACE_L) ? many(lexer, TokenKind.BRACE_L, parseFieldDefinition, TokenKind.BRACE_R) : [];\n}\n/**\n * FieldDefinition :\n * - Description? Name ArgumentsDefinition? : Type Directives[Const]?\n */\n\n\nfunction parseFieldDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n var name = parseName(lexer);\n var args = parseArgumentDefs(lexer);\n expect(lexer, TokenKind.COLON);\n var type = parseTypeReference(lexer);\n var directives = parseDirectives(lexer, true);\n return {\n kind: Kind.FIELD_DEFINITION,\n description: description,\n name: name,\n arguments: args,\n type: type,\n directives: directives,\n loc: loc(lexer, start)\n };\n}\n/**\n * ArgumentsDefinition : ( InputValueDefinition+ )\n */\n\n\nfunction parseArgumentDefs(lexer) {\n if (!peek(lexer, TokenKind.PAREN_L)) {\n return [];\n }\n\n return many(lexer, TokenKind.PAREN_L, parseInputValueDef, TokenKind.PAREN_R);\n}\n/**\n * InputValueDefinition :\n * - Description? Name : Type DefaultValue? Directives[Const]?\n */\n\n\nfunction parseInputValueDef(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n var name = parseName(lexer);\n expect(lexer, TokenKind.COLON);\n var type = parseTypeReference(lexer);\n var defaultValue;\n\n if (skip(lexer, TokenKind.EQUALS)) {\n defaultValue = parseConstValue(lexer);\n }\n\n var directives = parseDirectives(lexer, true);\n return {\n kind: Kind.INPUT_VALUE_DEFINITION,\n description: description,\n name: name,\n type: type,\n defaultValue: defaultValue,\n directives: directives,\n loc: loc(lexer, start)\n };\n}\n/**\n * InterfaceTypeDefinition :\n * - Description? interface Name Directives[Const]? FieldsDefinition?\n */\n\n\nfunction parseInterfaceTypeDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n expectKeyword(lexer, 'interface');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n var fields = parseFieldsDefinition(lexer);\n return {\n kind: Kind.INTERFACE_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n fields: fields,\n loc: loc(lexer, start)\n };\n}\n/**\n * UnionTypeDefinition :\n * - Description? union Name Directives[Const]? UnionMemberTypes?\n */\n\n\nfunction parseUnionTypeDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n expectKeyword(lexer, 'union');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n var types = parseUnionMemberTypes(lexer);\n return {\n kind: Kind.UNION_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n types: types,\n loc: loc(lexer, start)\n };\n}\n/**\n * UnionMemberTypes :\n * - = `|`? NamedType\n * - UnionMemberTypes | NamedType\n */\n\n\nfunction parseUnionMemberTypes(lexer) {\n var types = [];\n\n if (skip(lexer, TokenKind.EQUALS)) {\n // Optional leading pipe\n skip(lexer, TokenKind.PIPE);\n\n do {\n types.push(parseNamedType(lexer));\n } while (skip(lexer, TokenKind.PIPE));\n }\n\n return types;\n}\n/**\n * EnumTypeDefinition :\n * - Description? enum Name Directives[Const]? EnumValuesDefinition?\n */\n\n\nfunction parseEnumTypeDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n expectKeyword(lexer, 'enum');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n var values = parseEnumValuesDefinition(lexer);\n return {\n kind: Kind.ENUM_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n values: values,\n loc: loc(lexer, start)\n };\n}\n/**\n * EnumValuesDefinition : { EnumValueDefinition+ }\n */\n\n\nfunction parseEnumValuesDefinition(lexer) {\n return peek(lexer, TokenKind.BRACE_L) ? many(lexer, TokenKind.BRACE_L, parseEnumValueDefinition, TokenKind.BRACE_R) : [];\n}\n/**\n * EnumValueDefinition : Description? EnumValue Directives[Const]?\n *\n * EnumValue : Name\n */\n\n\nfunction parseEnumValueDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n return {\n kind: Kind.ENUM_VALUE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n loc: loc(lexer, start)\n };\n}\n/**\n * InputObjectTypeDefinition :\n * - Description? input Name Directives[Const]? InputFieldsDefinition?\n */\n\n\nfunction parseInputObjectTypeDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n expectKeyword(lexer, 'input');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n var fields = parseInputFieldsDefinition(lexer);\n return {\n kind: Kind.INPUT_OBJECT_TYPE_DEFINITION,\n description: description,\n name: name,\n directives: directives,\n fields: fields,\n loc: loc(lexer, start)\n };\n}\n/**\n * InputFieldsDefinition : { InputValueDefinition+ }\n */\n\n\nfunction parseInputFieldsDefinition(lexer) {\n return peek(lexer, TokenKind.BRACE_L) ? many(lexer, TokenKind.BRACE_L, parseInputValueDef, TokenKind.BRACE_R) : [];\n}\n/**\n * TypeSystemExtension :\n * - SchemaExtension\n * - TypeExtension\n *\n * TypeExtension :\n * - ScalarTypeExtension\n * - ObjectTypeExtension\n * - InterfaceTypeExtension\n * - UnionTypeExtension\n * - EnumTypeExtension\n * - InputObjectTypeDefinition\n */\n\n\nfunction parseTypeSystemExtension(lexer) {\n var keywordToken = lexer.lookahead();\n\n if (keywordToken.kind === TokenKind.NAME) {\n switch (keywordToken.value) {\n case 'schema':\n return parseSchemaExtension(lexer);\n\n case 'scalar':\n return parseScalarTypeExtension(lexer);\n\n case 'type':\n return parseObjectTypeExtension(lexer);\n\n case 'interface':\n return parseInterfaceTypeExtension(lexer);\n\n case 'union':\n return parseUnionTypeExtension(lexer);\n\n case 'enum':\n return parseEnumTypeExtension(lexer);\n\n case 'input':\n return parseInputObjectTypeExtension(lexer);\n }\n }\n\n throw unexpected(lexer, keywordToken);\n}\n/**\n * SchemaExtension :\n * - extend schema Directives[Const]? { OperationTypeDefinition+ }\n * - extend schema Directives[Const]\n */\n\n\nfunction parseSchemaExtension(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'extend');\n expectKeyword(lexer, 'schema');\n var directives = parseDirectives(lexer, true);\n var operationTypes = peek(lexer, TokenKind.BRACE_L) ? many(lexer, TokenKind.BRACE_L, parseOperationTypeDefinition, TokenKind.BRACE_R) : [];\n\n if (directives.length === 0 && operationTypes.length === 0) {\n throw unexpected(lexer);\n }\n\n return {\n kind: Kind.SCHEMA_EXTENSION,\n directives: directives,\n operationTypes: operationTypes,\n loc: loc(lexer, start)\n };\n}\n/**\n * ScalarTypeExtension :\n * - extend scalar Name Directives[Const]\n */\n\n\nfunction parseScalarTypeExtension(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'extend');\n expectKeyword(lexer, 'scalar');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n\n if (directives.length === 0) {\n throw unexpected(lexer);\n }\n\n return {\n kind: Kind.SCALAR_TYPE_EXTENSION,\n name: name,\n directives: directives,\n loc: loc(lexer, start)\n };\n}\n/**\n * ObjectTypeExtension :\n * - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n * - extend type Name ImplementsInterfaces? Directives[Const]\n * - extend type Name ImplementsInterfaces\n */\n\n\nfunction parseObjectTypeExtension(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'extend');\n expectKeyword(lexer, 'type');\n var name = parseName(lexer);\n var interfaces = parseImplementsInterfaces(lexer);\n var directives = parseDirectives(lexer, true);\n var fields = parseFieldsDefinition(lexer);\n\n if (interfaces.length === 0 && directives.length === 0 && fields.length === 0) {\n throw unexpected(lexer);\n }\n\n return {\n kind: Kind.OBJECT_TYPE_EXTENSION,\n name: name,\n interfaces: interfaces,\n directives: directives,\n fields: fields,\n loc: loc(lexer, start)\n };\n}\n/**\n * InterfaceTypeExtension :\n * - extend interface Name Directives[Const]? FieldsDefinition\n * - extend interface Name Directives[Const]\n */\n\n\nfunction parseInterfaceTypeExtension(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'extend');\n expectKeyword(lexer, 'interface');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n var fields = parseFieldsDefinition(lexer);\n\n if (directives.length === 0 && fields.length === 0) {\n throw unexpected(lexer);\n }\n\n return {\n kind: Kind.INTERFACE_TYPE_EXTENSION,\n name: name,\n directives: directives,\n fields: fields,\n loc: loc(lexer, start)\n };\n}\n/**\n * UnionTypeExtension :\n * - extend union Name Directives[Const]? UnionMemberTypes\n * - extend union Name Directives[Const]\n */\n\n\nfunction parseUnionTypeExtension(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'extend');\n expectKeyword(lexer, 'union');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n var types = parseUnionMemberTypes(lexer);\n\n if (directives.length === 0 && types.length === 0) {\n throw unexpected(lexer);\n }\n\n return {\n kind: Kind.UNION_TYPE_EXTENSION,\n name: name,\n directives: directives,\n types: types,\n loc: loc(lexer, start)\n };\n}\n/**\n * EnumTypeExtension :\n * - extend enum Name Directives[Const]? EnumValuesDefinition\n * - extend enum Name Directives[Const]\n */\n\n\nfunction parseEnumTypeExtension(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'extend');\n expectKeyword(lexer, 'enum');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n var values = parseEnumValuesDefinition(lexer);\n\n if (directives.length === 0 && values.length === 0) {\n throw unexpected(lexer);\n }\n\n return {\n kind: Kind.ENUM_TYPE_EXTENSION,\n name: name,\n directives: directives,\n values: values,\n loc: loc(lexer, start)\n };\n}\n/**\n * InputObjectTypeExtension :\n * - extend input Name Directives[Const]? InputFieldsDefinition\n * - extend input Name Directives[Const]\n */\n\n\nfunction parseInputObjectTypeExtension(lexer) {\n var start = lexer.token;\n expectKeyword(lexer, 'extend');\n expectKeyword(lexer, 'input');\n var name = parseName(lexer);\n var directives = parseDirectives(lexer, true);\n var fields = parseInputFieldsDefinition(lexer);\n\n if (directives.length === 0 && fields.length === 0) {\n throw unexpected(lexer);\n }\n\n return {\n kind: Kind.INPUT_OBJECT_TYPE_EXTENSION,\n name: name,\n directives: directives,\n fields: fields,\n loc: loc(lexer, start)\n };\n}\n/**\n * DirectiveDefinition :\n * - Description? directive @ Name ArgumentsDefinition? on DirectiveLocations\n */\n\n\nfunction parseDirectiveDefinition(lexer) {\n var start = lexer.token;\n var description = parseDescription(lexer);\n expectKeyword(lexer, 'directive');\n expect(lexer, TokenKind.AT);\n var name = parseName(lexer);\n var args = parseArgumentDefs(lexer);\n expectKeyword(lexer, 'on');\n var locations = parseDirectiveLocations(lexer);\n return {\n kind: Kind.DIRECTIVE_DEFINITION,\n description: description,\n name: name,\n arguments: args,\n locations: locations,\n loc: loc(lexer, start)\n };\n}\n/**\n * DirectiveLocations :\n * - `|`? DirectiveLocation\n * - DirectiveLocations | DirectiveLocation\n */\n\n\nfunction parseDirectiveLocations(lexer) {\n // Optional leading pipe\n skip(lexer, TokenKind.PIPE);\n var locations = [];\n\n do {\n locations.push(parseDirectiveLocation(lexer));\n } while (skip(lexer, TokenKind.PIPE));\n\n return locations;\n}\n/*\n * DirectiveLocation :\n * - ExecutableDirectiveLocation\n * - TypeSystemDirectiveLocation\n *\n * ExecutableDirectiveLocation : one of\n * `QUERY`\n * `MUTATION`\n * `SUBSCRIPTION`\n * `FIELD`\n * `FRAGMENT_DEFINITION`\n * `FRAGMENT_SPREAD`\n * `INLINE_FRAGMENT`\n *\n * TypeSystemDirectiveLocation : one of\n * `SCHEMA`\n * `SCALAR`\n * `OBJECT`\n * `FIELD_DEFINITION`\n * `ARGUMENT_DEFINITION`\n * `INTERFACE`\n * `UNION`\n * `ENUM`\n * `ENUM_VALUE`\n * `INPUT_OBJECT`\n * `INPUT_FIELD_DEFINITION`\n */\n\n\nfunction parseDirectiveLocation(lexer) {\n var start = lexer.token;\n var name = parseName(lexer);\n\n if (DirectiveLocation.hasOwnProperty(name.value)) {\n return name;\n }\n\n throw unexpected(lexer, start);\n} // Core parsing utility functions\n\n/**\n * Returns a location object, used to identify the place in\n * the source that created a given parsed object.\n */\n\n\nfunction loc(lexer, startToken) {\n if (!lexer.options.noLocation) {\n return new Loc(startToken, lexer.lastToken, lexer.source);\n }\n}\n\nfunction Loc(startToken, endToken, source) {\n this.start = startToken.start;\n this.end = endToken.end;\n this.startToken = startToken;\n this.endToken = endToken;\n this.source = source;\n} // Print a simplified form when appearing in JSON/util.inspect.\n\n\nLoc.prototype.toJSON = Loc.prototype.inspect = function toJSON() {\n return {\n start: this.start,\n end: this.end\n };\n};\n/**\n * Determines if the next token is of a given kind\n */\n\n\nfunction peek(lexer, kind) {\n return lexer.token.kind === kind;\n}\n/**\n * If the next token is of the given kind, return true after advancing\n * the lexer. Otherwise, do not change the parser state and return false.\n */\n\n\nfunction skip(lexer, kind) {\n var match = lexer.token.kind === kind;\n\n if (match) {\n lexer.advance();\n }\n\n return match;\n}\n/**\n * If the next token is of the given kind, return that token after advancing\n * the lexer. Otherwise, do not change the parser state and throw an error.\n */\n\n\nfunction expect(lexer, kind) {\n var token = lexer.token;\n\n if (token.kind === kind) {\n lexer.advance();\n return token;\n }\n\n throw syntaxError(lexer.source, token.start, \"Expected \".concat(kind, \", found \").concat(getTokenDesc(token)));\n}\n/**\n * If the next token is a keyword with the given value, return that token after\n * advancing the lexer. Otherwise, do not change the parser state and return\n * false.\n */\n\n\nfunction expectKeyword(lexer, value) {\n var token = lexer.token;\n\n if (token.kind === TokenKind.NAME && token.value === value) {\n lexer.advance();\n return token;\n }\n\n throw syntaxError(lexer.source, token.start, \"Expected \\\"\".concat(value, \"\\\", found \").concat(getTokenDesc(token)));\n}\n/**\n * Helper function for creating an error when an unexpected lexed token\n * is encountered.\n */\n\n\nfunction unexpected(lexer, atToken) {\n var token = atToken || lexer.token;\n return syntaxError(lexer.source, token.start, \"Unexpected \".concat(getTokenDesc(token)));\n}\n/**\n * Returns a possibly empty list of parse nodes, determined by\n * the parseFn. This list begins with a lex token of openKind\n * and ends with a lex token of closeKind. Advances the parser\n * to the next lex token after the closing token.\n */\n\n\nfunction any(lexer, openKind, parseFn, closeKind) {\n expect(lexer, openKind);\n var nodes = [];\n\n while (!skip(lexer, closeKind)) {\n nodes.push(parseFn(lexer));\n }\n\n return nodes;\n}\n/**\n * Returns a non-empty list of parse nodes, determined by\n * the parseFn. This list begins with a lex token of openKind\n * and ends with a lex token of closeKind. Advances the parser\n * to the next lex token after the closing token.\n */\n\n\nfunction many(lexer, openKind, parseFn, closeKind) {\n expect(lexer, openKind);\n var nodes = [parseFn(lexer)];\n\n while (!skip(lexer, closeKind)) {\n nodes.push(parseFn(lexer));\n }\n\n return nodes;\n}","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { GraphQLError } from 'graphql/error/GraphQLError';\n// @ts-ignore\nimport { OperationDefinitionNode } from 'graphql/language';\nimport { print } from 'graphql/language/printer';\nimport { parse } from 'graphql/language/parser';\nimport Observable from 'zen-observable-ts';\nimport {\n\tAmplify,\n\tConsoleLogger as Logger,\n\tConstants,\n\tCredentials,\n\tINTERNAL_AWS_APPSYNC_REALTIME_PUBSUB_PROVIDER,\n} from '@aws-amplify/core';\nimport PubSub from '@aws-amplify/pubsub';\nimport Auth from '@aws-amplify/auth';\nimport Cache from '@aws-amplify/cache';\nimport { GraphQLOptions, GraphQLResult } from './types';\nimport { RestClient } from '@aws-amplify/api-rest';\nconst USER_AGENT_HEADER = 'x-amz-user-agent';\n\nconst logger = new Logger('GraphQLAPI');\n\nexport const graphqlOperation = (query, variables = {}) => ({\n\tquery,\n\tvariables,\n});\n\n/**\n * Export Cloud Logic APIs\n */\nexport class GraphQLAPIClass {\n\t/**\n\t * @private\n\t */\n\tprivate _options;\n\tprivate _api = null;\n\n\tAuth = Auth;\n\tCache = Cache;\n\tCredentials = Credentials;\n\n\t/**\n\t * Initialize GraphQL API with AWS configuration\n\t * @param {Object} options - Configuration object for API\n\t */\n\tconstructor(options) {\n\t\tthis._options = options;\n\t\tlogger.debug('API Options', this._options);\n\t}\n\n\tpublic getModuleName() {\n\t\treturn 'GraphQLAPI';\n\t}\n\n\t/**\n\t * Configure API\n\t * @param {Object} config - Configuration of the API\n\t * @return {Object} - The current configuration\n\t */\n\tconfigure(options) {\n\t\tconst { API = {}, ...otherOptions } = options || {};\n\t\tlet opt = { ...otherOptions, ...API };\n\t\tlogger.debug('configure GraphQL API', { opt });\n\n\t\tif (opt['aws_project_region']) {\n\t\t\topt = Object.assign({}, opt, {\n\t\t\t\tregion: opt['aws_project_region'],\n\t\t\t\theader: {},\n\t\t\t});\n\t\t}\n\n\t\tif (\n\t\t\ttypeof opt.graphql_headers !== 'undefined' &&\n\t\t\ttypeof opt.graphql_headers !== 'function'\n\t\t) {\n\t\t\tlogger.warn('graphql_headers should be a function');\n\t\t\topt.graphql_headers = undefined;\n\t\t}\n\n\t\tthis._options = Object.assign({}, this._options, opt);\n\n\t\tthis.createInstance();\n\n\t\treturn this._options;\n\t}\n\n\t/**\n\t * Create an instance of API for the library\n\t * @return - A promise of true if Success\n\t */\n\tcreateInstance() {\n\t\tlogger.debug('create Rest instance');\n\t\tif (this._options) {\n\t\t\tthis._api = new RestClient(this._options);\n\t\t\t// Share instance Credentials with client for SSR\n\t\t\tthis._api.Credentials = this.Credentials;\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn Promise.reject('API not configured');\n\t\t}\n\t}\n\n\tprivate async _headerBasedAuth(defaultAuthenticationType?) {\n\t\tconst {\n\t\t\taws_appsync_authenticationType,\n\t\t\taws_appsync_apiKey: apiKey,\n\t\t} = this._options;\n\t\tconst authenticationType =\n\t\t\tdefaultAuthenticationType || aws_appsync_authenticationType || 'AWS_IAM';\n\t\tlet headers = {};\n\n\t\tswitch (authenticationType) {\n\t\t\tcase 'API_KEY':\n\t\t\t\tif (!apiKey) {\n\t\t\t\t\tthrow new Error('No api-key configured');\n\t\t\t\t}\n\t\t\t\theaders = {\n\t\t\t\t\tAuthorization: null,\n\t\t\t\t\t'X-Api-Key': apiKey,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'AWS_IAM':\n\t\t\t\tconst credentialsOK = await this._ensureCredentials();\n\t\t\t\tif (!credentialsOK) {\n\t\t\t\t\tthrow new Error('No credentials');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'OPENID_CONNECT':\n\t\t\t\tlet token;\n\t\t\t\t// backwards compatibility\n\t\t\t\tconst federatedInfo = await Cache.getItem('federatedInfo');\n\t\t\t\tif (federatedInfo) {\n\t\t\t\t\ttoken = federatedInfo.token;\n\t\t\t\t} else {\n\t\t\t\t\tconst currentUser = await Auth.currentAuthenticatedUser();\n\t\t\t\t\tif (currentUser) {\n\t\t\t\t\t\ttoken = currentUser.token;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!token) {\n\t\t\t\t\tthrow new Error('No federated jwt');\n\t\t\t\t}\n\t\t\t\theaders = {\n\t\t\t\t\tAuthorization: token,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'AMAZON_COGNITO_USER_POOLS':\n\t\t\t\tconst session = await this.Auth.currentSession();\n\t\t\t\theaders = {\n\t\t\t\t\tAuthorization: session.getAccessToken().getJwtToken(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\theaders = {\n\t\t\t\t\tAuthorization: null,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\t/**\n\t * to get the operation type\n\t * @param operation\n\t */\n\tgetGraphqlOperationType(operation) {\n\t\tconst doc = parse(operation);\n\t\tconst {\n\t\t\tdefinitions: [{ operation: operationType }],\n\t\t} = doc;\n\n\t\treturn operationType;\n\t}\n\n\t/**\n\t * Executes a GraphQL operation\n\t *\n\t * @param {GraphQLOptions} GraphQL Options\n\t * @param {object} additionalHeaders headers to merge in after any `graphql_headers` set in the config\n\t * @returns {Promise | Observable}\n\t */\n\tgraphql(\n\t\t{ query: paramQuery, variables = {}, authMode }: GraphQLOptions,\n\t\tadditionalHeaders?: { [key: string]: string }\n\t) {\n\t\tconst query =\n\t\t\ttypeof paramQuery === 'string'\n\t\t\t\t? parse(paramQuery)\n\t\t\t\t: parse(print(paramQuery));\n\n\t\tconst [operationDef = {}] = query.definitions.filter(\n\t\t\tdef => def.kind === 'OperationDefinition'\n\t\t);\n\t\tconst {\n\t\t\toperation: operationType,\n\t\t} = operationDef as OperationDefinitionNode;\n\n\t\tswitch (operationType) {\n\t\t\tcase 'query':\n\t\t\tcase 'mutation':\n\t\t\t\tconst cancellableToken = this._api.getCancellableToken();\n\t\t\t\tconst initParams = { cancellableToken };\n\t\t\t\tconst responsePromise = this._graphql(\n\t\t\t\t\t{ query, variables, authMode },\n\t\t\t\t\tadditionalHeaders,\n\t\t\t\t\tinitParams\n\t\t\t\t);\n\t\t\t\tthis._api.updateRequestToBeCancellable(\n\t\t\t\t\tresponsePromise,\n\t\t\t\t\tcancellableToken\n\t\t\t\t);\n\t\t\t\treturn responsePromise;\n\t\t\tcase 'subscription':\n\t\t\t\treturn this._graphqlSubscribe(\n\t\t\t\t\t{ query, variables, authMode },\n\t\t\t\t\tadditionalHeaders\n\t\t\t\t);\n\t\t}\n\n\t\tthrow new Error(`invalid operation type: ${operationType}`);\n\t}\n\n\tprivate async _graphql(\n\t\t{ query, variables, authMode }: GraphQLOptions,\n\t\tadditionalHeaders = {},\n\t\tinitParams = {}\n\t): Promise {\n\t\tif (!this._api) {\n\t\t\tawait this.createInstance();\n\t\t}\n\n\t\tconst {\n\t\t\taws_appsync_region: region,\n\t\t\taws_appsync_graphqlEndpoint: appSyncGraphqlEndpoint,\n\t\t\tgraphql_headers = () => ({}),\n\t\t\tgraphql_endpoint: customGraphqlEndpoint,\n\t\t\tgraphql_endpoint_iam_region: customEndpointRegion,\n\t\t} = this._options;\n\n\t\tconst headers = {\n\t\t\t...(!customGraphqlEndpoint && (await this._headerBasedAuth(authMode))),\n\t\t\t...(customGraphqlEndpoint &&\n\t\t\t\t(customEndpointRegion\n\t\t\t\t\t? await this._headerBasedAuth(authMode)\n\t\t\t\t\t: { Authorization: null })),\n\t\t\t...(await graphql_headers({ query, variables })),\n\t\t\t...additionalHeaders,\n\t\t\t...(!customGraphqlEndpoint && {\n\t\t\t\t[USER_AGENT_HEADER]: Constants.userAgent,\n\t\t\t}),\n\t\t};\n\n\t\tconst body = {\n\t\t\tquery: print(query),\n\t\t\tvariables,\n\t\t};\n\n\t\tconst init = Object.assign(\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t\tsignerServiceInfo: {\n\t\t\t\t\tservice: !customGraphqlEndpoint ? 'appsync' : 'execute-api',\n\t\t\t\t\tregion: !customGraphqlEndpoint ? region : customEndpointRegion,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinitParams\n\t\t);\n\n\t\tconst endpoint = customGraphqlEndpoint || appSyncGraphqlEndpoint;\n\n\t\tif (!endpoint) {\n\t\t\tconst error = new GraphQLError('No graphql endpoint provided.');\n\n\t\t\tthrow {\n\t\t\t\tdata: {},\n\t\t\t\terrors: [error],\n\t\t\t};\n\t\t}\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await this._api.post(endpoint, init);\n\t\t} catch (err) {\n\t\t\t// If the exception is because user intentionally\n\t\t\t// cancelled the request, do not modify the exception\n\t\t\t// so that clients can identify the exception correctly.\n\t\t\tif (this._api.isCancel(err)) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tresponse = {\n\t\t\t\tdata: {},\n\t\t\t\terrors: [new GraphQLError(err.message)],\n\t\t\t};\n\t\t}\n\n\t\tconst { errors } = response;\n\n\t\tif (errors && errors.length) {\n\t\t\tthrow response;\n\t\t}\n\n\t\treturn response;\n\t}\n\n\t/**\n\t * Checks to see if an error thrown is from an api request cancellation\n\t * @param {any} error - Any error\n\t * @return {boolean} - A boolean indicating if the error was from an api request cancellation\n\t */\n\tisCancel(error) {\n\t\treturn this._api.isCancel(error);\n\t}\n\n\t/**\n\t * Cancels an inflight request. Only applicable for graphql queries and mutations\n\t * @param {any} request - request to cancel\n\t * @return {boolean} - A boolean indicating if the request was cancelled\n\t */\n\tcancel(request: Promise, message?: string) {\n\t\treturn this._api.cancel(request, message);\n\t}\n\n\tprivate _graphqlSubscribe(\n\t\t{ query, variables, authMode: defaultAuthenticationType }: GraphQLOptions,\n\t\tadditionalHeaders = {}\n\t): Observable {\n\t\tconst {\n\t\t\taws_appsync_region: region,\n\t\t\taws_appsync_graphqlEndpoint: appSyncGraphqlEndpoint,\n\t\t\taws_appsync_authenticationType,\n\t\t\taws_appsync_apiKey: apiKey,\n\t\t\tgraphql_headers = () => ({}),\n\t\t} = this._options;\n\t\tconst authenticationType =\n\t\t\tdefaultAuthenticationType || aws_appsync_authenticationType || 'AWS_IAM';\n\n\t\tif (PubSub && typeof PubSub.subscribe === 'function') {\n\t\t\treturn PubSub.subscribe('', {\n\t\t\t\tprovider: INTERNAL_AWS_APPSYNC_REALTIME_PUBSUB_PROVIDER,\n\t\t\t\tappSyncGraphqlEndpoint,\n\t\t\t\tauthenticationType,\n\t\t\t\tapiKey,\n\t\t\t\tquery: print(query),\n\t\t\t\tregion,\n\t\t\t\tvariables,\n\t\t\t\tgraphql_headers,\n\t\t\t\tadditionalHeaders,\n\t\t\t});\n\t\t} else {\n\t\t\tlogger.debug('No pubsub module applied for subscription');\n\t\t\tthrow new Error('No pubsub module applied for subscription');\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_ensureCredentials() {\n\t\treturn this.Credentials.get()\n\t\t\t.then(credentials => {\n\t\t\t\tif (!credentials) return false;\n\t\t\t\tconst cred = this.Credentials.shear(credentials);\n\t\t\t\tlogger.debug('set credentials for api', cred);\n\n\t\t\t\treturn true;\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tlogger.warn('ensure credentials error', err);\n\t\t\t\treturn false;\n\t\t\t});\n\t}\n}\n\nexport const GraphQLAPI = new GraphQLAPIClass(null);\nAmplify.register(GraphQLAPI);\n","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport {\n\tConsoleLogger as Logger,\n\tCredentials,\n\tDateUtils,\n\tSigner,\n\tPlatform,\n} from '@aws-amplify/core';\n\nimport { apiOptions, ApiInfo } from './types';\nimport axios, { CancelTokenSource } from 'axios';\nimport { parse, format } from 'url';\n\nconst logger = new Logger('RestClient');\n\n/**\n* HTTP Client for REST requests. Send and receive JSON data.\n* Sign request with AWS credentials if available\n* Usage:\n
\nconst restClient = new RestClient();\nrestClient.get('...')\n    .then(function(data) {\n        console.log(data);\n    })\n    .catch(err => console.log(err));\n
\n*/\nexport class RestClient {\n\tprivate _options;\n\tprivate _region: string = 'us-east-1'; // this will be updated by endpoint function\n\tprivate _service: string = 'execute-api'; // this can be updated by endpoint function\n\tprivate _custom_header = undefined; // this can be updated by endpoint function\n\n\t/**\n\t * This weak map provides functionality to let clients cancel\n\t * in-flight axios requests. https://github.com/axios/axios#cancellation\n\t *\n\t * 1. For every axios request, a unique cancel token is generated and added in the request.\n\t * 2. Promise for fulfilling the request is then mapped to that unique cancel token.\n\t * 3. The promise is returned to the client.\n\t * 4. Clients can either wait for the promise to fulfill or call `API.cancel(promise)` to cancel the request.\n\t * 5. If `API.cancel(promise)` is called, then the corresponding cancel token is retrieved from the map below.\n\t * 6. Promise returned to the client will be in rejected state with the error provided during cancel.\n\t * 7. Clients can check if the error is because of cancelling by calling `API.isCancel(error)`.\n\t *\n\t * For more details, see https://github.com/aws-amplify/amplify-js/pull/3769#issuecomment-552660025\n\t */\n\tprivate _cancelTokenMap: WeakMap = null;\n\n\tCredentials = Credentials;\n\n\t/**\n\t * @param {RestClientOptions} [options] - Instance options\n\t */\n\tconstructor(options: apiOptions) {\n\t\tthis._options = options;\n\t\tlogger.debug('API Options', this._options);\n\t\tif (this._cancelTokenMap == null) {\n\t\t\tthis._cancelTokenMap = new WeakMap();\n\t\t}\n\t}\n\n\t/**\n * Update AWS credentials\n * @param {AWSCredentials} credentials - AWS credentials\n *\n updateCredentials(credentials: AWSCredentials) {\n this.options.credentials = credentials;\n }\n*/\n\t/**\n\t * Basic HTTP request. Customizable\n\t * @param {string | ApiInfo } urlOrApiInfo - Full request URL or Api information\n\t * @param {string} method - Request HTTP method\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tasync ajax(urlOrApiInfo: string | ApiInfo, method: string, init) {\n\t\tlogger.debug(method, urlOrApiInfo);\n\n\t\tlet parsed_url;\n\t\tlet url: string;\n\t\tlet region: string = 'us-east-1';\n\t\tlet service: string = 'execute-api';\n\t\tlet custom_header: () => {\n\t\t\t[key: string]: string;\n\t\t} = undefined;\n\n\t\tif (typeof urlOrApiInfo === 'string') {\n\t\t\tparsed_url = this._parseUrl(urlOrApiInfo);\n\t\t\turl = urlOrApiInfo;\n\t\t} else {\n\t\t\t({ endpoint: url, custom_header, region, service } = urlOrApiInfo);\n\t\t\tparsed_url = this._parseUrl(urlOrApiInfo.endpoint);\n\t\t}\n\n\t\tconst params = {\n\t\t\tmethod,\n\t\t\turl,\n\t\t\thost: parsed_url.host,\n\t\t\tpath: parsed_url.path,\n\t\t\theaders: {},\n\t\t\tdata: null,\n\t\t\tresponseType: 'json',\n\t\t\ttimeout: 0,\n\t\t\tcancelToken: null,\n\t\t};\n\n\t\tlet libraryHeaders = {};\n\n\t\tif (Platform.isReactNative) {\n\t\t\tconst userAgent = Platform.userAgent || 'aws-amplify/0.1.x';\n\t\t\tlibraryHeaders = {\n\t\t\t\t'User-Agent': userAgent,\n\t\t\t};\n\t\t}\n\n\t\tconst initParams = Object.assign({}, init);\n\t\tconst isAllResponse = initParams.response;\n\t\tif (initParams.body) {\n\t\t\tif (\n\t\t\t\ttypeof FormData === 'function' &&\n\t\t\t\tinitParams.body instanceof FormData\n\t\t\t) {\n\t\t\t\tlibraryHeaders['Content-Type'] = 'multipart/form-data';\n\t\t\t\tparams.data = initParams.body;\n\t\t\t} else {\n\t\t\t\tlibraryHeaders['Content-Type'] = 'application/json; charset=UTF-8';\n\t\t\t\tparams.data = JSON.stringify(initParams.body);\n\t\t\t}\n\t\t}\n\t\tif (initParams.responseType) {\n\t\t\tparams.responseType = initParams.responseType;\n\t\t}\n\t\tif (initParams.withCredentials) {\n\t\t\tparams['withCredentials'] = initParams.withCredentials;\n\t\t}\n\t\tif (initParams.timeout) {\n\t\t\tparams.timeout = initParams.timeout;\n\t\t}\n\t\tif (initParams.cancellableToken) {\n\t\t\tparams.cancelToken = initParams.cancellableToken.token;\n\t\t}\n\n\t\tparams['signerServiceInfo'] = initParams.signerServiceInfo;\n\n\t\t// custom_header callback\n\t\tconst custom_header_obj =\n\t\t\ttypeof custom_header === 'function' ? await custom_header() : undefined;\n\n\t\tparams.headers = {\n\t\t\t...libraryHeaders,\n\t\t\t...custom_header_obj,\n\t\t\t...initParams.headers,\n\t\t};\n\n\t\t// Intentionally discarding search\n\t\tconst { search, ...parsedUrl } = parse(url, true, true);\n\t\tparams.url = format({\n\t\t\t...parsedUrl,\n\t\t\tquery: {\n\t\t\t\t...parsedUrl.query,\n\t\t\t\t...(initParams.queryStringParameters || {}),\n\t\t\t},\n\t\t});\n\n\t\t// Do not sign the request if client has added 'Authorization' header,\n\t\t// which means custom authorizer.\n\t\tif (typeof params.headers['Authorization'] !== 'undefined') {\n\t\t\tparams.headers = Object.keys(params.headers).reduce((acc, k) => {\n\t\t\t\tif (params.headers[k]) {\n\t\t\t\t\tacc[k] = params.headers[k];\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t\t// tslint:disable-next-line:align\n\t\t\t}, {});\n\t\t\treturn this._request(params, isAllResponse);\n\t\t}\n\n\t\t// Signing the request in case there credentials are available\n\t\treturn this.Credentials.get().then(\n\t\t\tcredentials => {\n\t\t\t\treturn this._signed({ ...params }, credentials, isAllResponse, {\n\t\t\t\t\tregion,\n\t\t\t\t\tservice,\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tif (DateUtils.isClockSkewError(error)) {\n\t\t\t\t\t\tconst { headers } = error.response;\n\t\t\t\t\t\tconst dateHeader = headers && (headers.date || headers.Date);\n\t\t\t\t\t\tconst responseDate = new Date(dateHeader);\n\t\t\t\t\t\tconst requestDate = DateUtils.getDateFromHeaderString(\n\t\t\t\t\t\t\tparams.headers['x-amz-date']\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (DateUtils.isClockSkewed(requestDate, responseDate)) {\n\t\t\t\t\t\t\tDateUtils.setClockOffset(\n\t\t\t\t\t\t\t\tresponseDate.getTime() - requestDate.getTime()\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn this.ajax(urlOrApiInfo, method, init);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t},\n\t\t\terr => {\n\t\t\t\tlogger.debug('No credentials available, the request will be unsigned');\n\t\t\t\treturn this._request(params, isAllResponse);\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * GET HTTP request\n\t * @param {string | ApiInfo } urlOrApiInfo - Full request URL or Api information\n\t * @param {JSON} init - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tget(urlOrApiInfo: string | ApiInfo, init) {\n\t\treturn this.ajax(urlOrApiInfo, 'GET', init);\n\t}\n\n\t/**\n\t * PUT HTTP request\n\t * @param {string | ApiInfo } urlOrApiInfo - Full request URL or Api information\n\t * @param {json} init - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tput(urlOrApiInfo: string | ApiInfo, init) {\n\t\treturn this.ajax(urlOrApiInfo, 'PUT', init);\n\t}\n\n\t/**\n\t * PATCH HTTP request\n\t * @param {string | ApiInfo } urlOrApiInfo - Full request URL or Api information\n\t * @param {json} init - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tpatch(urlOrApiInfo: string | ApiInfo, init) {\n\t\treturn this.ajax(urlOrApiInfo, 'PATCH', init);\n\t}\n\n\t/**\n\t * POST HTTP request\n\t * @param {string | ApiInfo } urlOrApiInfo - Full request URL or Api information\n\t * @param {json} init - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tpost(urlOrApiInfo: string | ApiInfo, init) {\n\t\treturn this.ajax(urlOrApiInfo, 'POST', init);\n\t}\n\n\t/**\n\t * DELETE HTTP request\n\t * @param {string | ApiInfo } urlOrApiInfo - Full request URL or Api information\n\t * @param {json} init - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tdel(urlOrApiInfo: string | ApiInfo, init) {\n\t\treturn this.ajax(urlOrApiInfo, 'DELETE', init);\n\t}\n\n\t/**\n\t * HEAD HTTP request\n\t * @param {string | ApiInfo } urlOrApiInfo - Full request URL or Api information\n\t * @param {json} init - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\thead(urlOrApiInfo: string | ApiInfo, init) {\n\t\treturn this.ajax(urlOrApiInfo, 'HEAD', init);\n\t}\n\n\t/**\n\t * Cancel an inflight API request\n\t * @param {Promise} request - The request promise to cancel\n\t * @param {string} [message] - A message to include in the cancelation exception\n\t */\n\tcancel(request: Promise, message?: string) {\n\t\tconst source = this._cancelTokenMap.get(request);\n\t\tif (source) {\n\t\t\tsource.cancel(message);\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks to see if an error thrown is from an api request cancellation\n\t * @param {any} error - Any error\n\t * @return {boolean} - A boolean indicating if the error was from an api request cancellation\n\t */\n\tisCancel(error): boolean {\n\t\treturn axios.isCancel(error);\n\t}\n\n\t/**\n\t * Retrieves a new and unique cancel token which can be\n\t * provided in an axios request to be cancelled later.\n\t */\n\tgetCancellableToken(): CancelTokenSource {\n\t\treturn axios.CancelToken.source();\n\t}\n\n\t/**\n\t * Updates the weakmap with a response promise and its\n\t * cancel token such that the cancel token can be easily\n\t * retrieved (and used for cancelling the request)\n\t */\n\tupdateRequestToBeCancellable(\n\t\tpromise: Promise,\n\t\tcancelTokenSource: CancelTokenSource\n\t) {\n\t\tthis._cancelTokenMap.set(promise, cancelTokenSource);\n\t}\n\n\t/**\n\t * Getting endpoint for API\n\t * @param {string} apiName - The name of the api\n\t * @return {string} - The endpoint of the api\n\t */\n\tendpoint(apiName: string) {\n\t\tconst cloud_logic_array = this._options.endpoints;\n\t\tlet response = '';\n\n\t\tif (!Array.isArray(cloud_logic_array)) {\n\t\t\treturn response;\n\t\t}\n\n\t\tcloud_logic_array.forEach(v => {\n\t\t\tif (v.name === apiName) {\n\t\t\t\tresponse = v.endpoint;\n\t\t\t\tif (typeof v.region === 'string') {\n\t\t\t\t\tthis._region = v.region;\n\t\t\t\t} else if (typeof this._options.region === 'string') {\n\t\t\t\t\tthis._region = this._options.region;\n\t\t\t\t}\n\t\t\t\tif (typeof v.service === 'string') {\n\t\t\t\t\tthis._service = v.service || 'execute-api';\n\t\t\t\t} else {\n\t\t\t\t\tthis._service = 'execute-api';\n\t\t\t\t}\n\t\t\t\tif (typeof v.custom_header === 'function') {\n\t\t\t\t\tthis._custom_header = v.custom_header;\n\t\t\t\t} else {\n\t\t\t\t\tthis._custom_header = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn response;\n\t}\n\n\t/** private methods **/\n\n\tprivate _signed(params, credentials, isAllResponse, { service, region }) {\n\t\tconst {\n\t\t\tsignerServiceInfo: signerServiceInfoParams,\n\t\t\t...otherParams\n\t\t} = params;\n\n\t\tconst endpoint_region: string =\n\t\t\tregion || this._region || this._options.region;\n\t\tconst endpoint_service: string =\n\t\t\tservice || this._service || this._options.service;\n\n\t\tconst creds = {\n\t\t\tsecret_key: credentials.secretAccessKey,\n\t\t\taccess_key: credentials.accessKeyId,\n\t\t\tsession_token: credentials.sessionToken,\n\t\t};\n\n\t\tconst endpointInfo = {\n\t\t\tregion: endpoint_region,\n\t\t\tservice: endpoint_service,\n\t\t};\n\n\t\tconst signerServiceInfo = Object.assign(\n\t\t\tendpointInfo,\n\t\t\tsignerServiceInfoParams\n\t\t);\n\n\t\tconst signed_params = Signer.sign(otherParams, creds, signerServiceInfo);\n\n\t\tif (signed_params.data) {\n\t\t\tsigned_params.body = signed_params.data;\n\t\t}\n\n\t\tlogger.debug('Signed Request: ', signed_params);\n\n\t\tdelete signed_params.headers['host'];\n\n\t\treturn axios(signed_params)\n\t\t\t.then(response => (isAllResponse ? response : response.data))\n\t\t\t.catch(error => {\n\t\t\t\tlogger.debug(error);\n\t\t\t\tthrow error;\n\t\t\t});\n\t}\n\n\tprivate _request(params, isAllResponse = false) {\n\t\treturn axios(params)\n\t\t\t.then(response => (isAllResponse ? response : response.data))\n\t\t\t.catch(error => {\n\t\t\t\tlogger.debug(error);\n\t\t\t\tthrow error;\n\t\t\t});\n\t}\n\n\tprivate _parseUrl(url) {\n\t\tconst parts = url.split('/');\n\n\t\treturn {\n\t\t\thost: parts[2],\n\t\t\tpath: '/' + parts.slice(3).join('/'),\n\t\t};\n\t}\n}\n","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { RestClient } from './RestClient';\nimport {\n\tAmplify,\n\tConsoleLogger as Logger,\n\tCredentials,\n} from '@aws-amplify/core';\nimport { ApiInfo } from './types';\n\nconst logger = new Logger('RestAPI');\n\n/**\n * Export Cloud Logic APIs\n */\nexport class RestAPIClass {\n\t/**\n\t * @private\n\t */\n\tprivate _options;\n\tprivate _api: RestClient = null;\n\n\tCredentials = Credentials;\n\n\t/**\n\t * Initialize Rest API with AWS configuration\n\t * @param {Object} options - Configuration object for API\n\t */\n\tconstructor(options) {\n\t\tthis._options = options;\n\t\tlogger.debug('API Options', this._options);\n\t}\n\n\tpublic getModuleName() {\n\t\treturn 'RestAPI';\n\t}\n\n\t/**\n\t * Configure API part with aws configurations\n\t * @param {Object} config - Configuration of the API\n\t * @return {Object} - The current configuration\n\t */\n\tconfigure(options) {\n\t\tconst { API = {}, ...otherOptions } = options || {};\n\t\tlet opt = { ...otherOptions, ...API };\n\t\tlogger.debug('configure Rest API', { opt });\n\n\t\tif (opt['aws_project_region']) {\n\t\t\tif (opt['aws_cloud_logic_custom']) {\n\t\t\t\tconst custom = opt['aws_cloud_logic_custom'];\n\t\t\t\topt.endpoints =\n\t\t\t\t\ttypeof custom === 'string' ? JSON.parse(custom) : custom;\n\t\t\t}\n\n\t\t\topt = Object.assign({}, opt, {\n\t\t\t\tregion: opt['aws_project_region'],\n\t\t\t\theader: {},\n\t\t\t});\n\t\t}\n\n\t\tif (Array.isArray(opt.endpoints)) {\n\t\t\t// Check if endpoints has custom_headers and validate if is a function\n\t\t\topt.endpoints.forEach(endpoint => {\n\t\t\t\tif (\n\t\t\t\t\ttypeof endpoint.custom_header !== 'undefined' &&\n\t\t\t\t\ttypeof endpoint.custom_header !== 'function'\n\t\t\t\t) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t'Rest API ' + endpoint.name + ', custom_header should be a function'\n\t\t\t\t\t);\n\t\t\t\t\tendpoint.custom_header = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (this._options && Array.isArray(this._options.endpoints)) {\n\t\t\topt.endpoints = this._options.endpoints;\n\t\t} else {\n\t\t\topt.endpoints = [];\n\t\t}\n\n\t\tthis._options = Object.assign({}, this._options, opt);\n\n\t\tthis.createInstance();\n\n\t\treturn this._options;\n\t}\n\n\t/**\n\t * Create an instance of API for the library\n\t * @return - A promise of true if Success\n\t */\n\tcreateInstance() {\n\t\tlogger.debug('create Rest API instance');\n\t\tthis._api = new RestClient(this._options);\n\n\t\t// Share Amplify instance with client for SSR\n\t\tthis._api.Credentials = this.Credentials;\n\t\treturn true;\n\t}\n\n\t/**\n\t * Make a GET request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tget(apiName, path, init): Promise {\n\t\ttry {\n\t\t\tconst apiInfo = this.getEndpointInfo(apiName, path);\n\n\t\t\tconst cancellableToken = this._api.getCancellableToken();\n\n\t\t\tconst initParams = Object.assign({}, init);\n\t\t\tinitParams.cancellableToken = cancellableToken;\n\n\t\t\tconst responsePromise = this._api.get(apiInfo, initParams);\n\n\t\t\tthis._api.updateRequestToBeCancellable(responsePromise, cancellableToken);\n\n\t\t\treturn responsePromise;\n\t\t} catch (err) {\n\t\t\treturn Promise.reject(err.message);\n\t\t}\n\t}\n\n\t/**\n\t * Make a POST request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tpost(apiName, path, init): Promise {\n\t\ttry {\n\t\t\tconst apiInfo = this.getEndpointInfo(apiName, path);\n\n\t\t\tconst cancellableToken = this._api.getCancellableToken();\n\n\t\t\tconst initParams = Object.assign({}, init);\n\t\t\tinitParams.cancellableToken = cancellableToken;\n\n\t\t\tconst responsePromise = this._api.post(apiInfo, initParams);\n\n\t\t\tthis._api.updateRequestToBeCancellable(responsePromise, cancellableToken);\n\n\t\t\treturn responsePromise;\n\t\t} catch (err) {\n\t\t\treturn Promise.reject(err.message);\n\t\t}\n\t}\n\n\t/**\n\t * Make a PUT request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tput(apiName, path, init): Promise {\n\t\ttry {\n\t\t\tconst apiInfo = this.getEndpointInfo(apiName, path);\n\n\t\t\tconst cancellableToken = this._api.getCancellableToken();\n\n\t\t\tconst initParams = Object.assign({}, init);\n\t\t\tinitParams.cancellableToken = cancellableToken;\n\n\t\t\tconst responsePromise = this._api.put(apiInfo, initParams);\n\n\t\t\tthis._api.updateRequestToBeCancellable(responsePromise, cancellableToken);\n\n\t\t\treturn responsePromise;\n\t\t} catch (err) {\n\t\t\treturn Promise.reject(err.message);\n\t\t}\n\t}\n\n\t/**\n\t * Make a PATCH request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tpatch(apiName, path, init): Promise {\n\t\ttry {\n\t\t\tconst apiInfo = this.getEndpointInfo(apiName, path);\n\n\t\t\tconst cancellableToken = this._api.getCancellableToken();\n\n\t\t\tconst initParams = Object.assign({}, init);\n\t\t\tinitParams.cancellableToken = cancellableToken;\n\n\t\t\tconst responsePromise = this._api.patch(apiInfo, initParams);\n\n\t\t\tthis._api.updateRequestToBeCancellable(responsePromise, cancellableToken);\n\n\t\t\treturn responsePromise;\n\t\t} catch (err) {\n\t\t\treturn Promise.reject(err.message);\n\t\t}\n\t}\n\n\t/**\n\t * Make a DEL request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tdel(apiName, path, init): Promise {\n\t\ttry {\n\t\t\tconst apiInfo = this.getEndpointInfo(apiName, path);\n\n\t\t\tconst cancellableToken = this._api.getCancellableToken();\n\n\t\t\tconst initParams = Object.assign({}, init);\n\t\t\tinitParams.cancellableToken = cancellableToken;\n\n\t\t\tconst responsePromise = this._api.del(apiInfo, initParams);\n\n\t\t\tthis._api.updateRequestToBeCancellable(responsePromise, cancellableToken);\n\n\t\t\treturn responsePromise;\n\t\t} catch (err) {\n\t\t\treturn Promise.reject(err.message);\n\t\t}\n\t}\n\n\t/**\n\t * Make a HEAD request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\thead(apiName, path, init): Promise {\n\t\ttry {\n\t\t\tconst apiInfo = this.getEndpointInfo(apiName, path);\n\n\t\t\tconst cancellableToken = this._api.getCancellableToken();\n\n\t\t\tconst initParams = Object.assign({}, init);\n\t\t\tinitParams.cancellableToken = cancellableToken;\n\n\t\t\tconst responsePromise = this._api.head(apiInfo, initParams);\n\n\t\t\tthis._api.updateRequestToBeCancellable(responsePromise, cancellableToken);\n\n\t\t\treturn responsePromise;\n\t\t} catch (err) {\n\t\t\treturn Promise.reject(err.message);\n\t\t}\n\t}\n\n\t/**\n\t * Checks to see if an error thrown is from an api request cancellation\n\t * @param {any} error - Any error\n\t * @return {boolean} - A boolean indicating if the error was from an api request cancellation\n\t */\n\tisCancel(error) {\n\t\treturn this._api.isCancel(error);\n\t}\n\n\t/**\n\t * Cancels an inflight request\n\t * @param {any} request - request to cancel\n\t * @return {boolean} - A boolean indicating if the request was cancelled\n\t */\n\tcancel(request: Promise, message?: string) {\n\t\treturn this._api.cancel(request, message);\n\t}\n\n\t/**\n\t * Getting endpoint for API\n\t * @param {string} apiName - The name of the api\n\t * @return {string} - The endpoint of the api\n\t */\n\tasync endpoint(apiName) {\n\t\treturn this._api.endpoint(apiName);\n\t}\n\n\t/**\n\t * Getting endpoint info for API\n\t * @param {string} apiName - The name of the api\n\t * @param {string} path - The path of the api that is going to accessed\n\t * @return {ApiInfo} - The endpoint information for that api-name\n\t */\n\tprivate getEndpointInfo(apiName: string, path: string): ApiInfo {\n\t\tconst cloud_logic_array = this._options.endpoints;\n\n\t\tif (!Array.isArray(cloud_logic_array)) {\n\t\t\tthrow new Error(`API category not configured`);\n\t\t}\n\n\t\tconst apiConfig = cloud_logic_array.find(api => api.name === apiName);\n\n\t\tif (!apiConfig) {\n\t\t\tthrow new Error(`API ${apiName} does not exist`);\n\t\t}\n\n\t\tconst response: ApiInfo = {\n\t\t\tendpoint: apiConfig.endpoint + path,\n\t\t};\n\n\t\tif (typeof apiConfig.region === 'string') {\n\t\t\tresponse.region = apiConfig.region;\n\t\t} else if (typeof this._options.region === 'string') {\n\t\t\tresponse.region = this._options.region;\n\t\t}\n\n\t\tif (typeof apiConfig.service === 'string') {\n\t\t\tresponse.service = apiConfig.service || 'execute-api';\n\t\t} else {\n\t\t\tresponse.service = 'execute-api';\n\t\t}\n\n\t\tif (typeof apiConfig.custom_header === 'function') {\n\t\t\tresponse.custom_header = apiConfig.custom_header;\n\t\t} else {\n\t\t\tresponse.custom_header = undefined;\n\t\t}\n\n\t\treturn response;\n\t}\n}\n\nexport const RestAPI = new RestAPIClass(null);\nAmplify.register(RestAPI);\n","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { Auth } from '@aws-amplify/auth';\nimport Cache from '@aws-amplify/cache';\nimport { RestAPIClass } from '@aws-amplify/api-rest';\nimport {\n\tGraphQLAPIClass,\n\tGraphQLOptions,\n\tGraphQLResult,\n} from '@aws-amplify/api-graphql';\nimport {\n\tAmplify,\n\tConsoleLogger as Logger,\n\tCredentials,\n} from '@aws-amplify/core';\nimport Observable from 'zen-observable-ts';\n\nconst logger = new Logger('API');\n/**\n * @deprecated\n * Use RestApi or GraphQLAPI to reduce your application bundle size\n * Export Cloud Logic APIs\n */\nexport class APIClass {\n\t/**\n\t * Initialize API with AWS configuration\n\t * @param {Object} options - Configuration object for API\n\t */\n\tprivate _options;\n\tprivate _restApi: RestAPIClass;\n\tprivate _graphqlApi;\n\n\tAuth = Auth;\n\tCache = Cache;\n\tCredentials = Credentials;\n\n\t/**\n\t * Initialize API with AWS configuration\n\t * @param {Object} options - Configuration object for API\n\t */\n\tconstructor(options) {\n\t\tthis._options = options;\n\t\tthis._restApi = new RestAPIClass(options);\n\t\tthis._graphqlApi = new GraphQLAPIClass(options);\n\t\tlogger.debug('API Options', this._options);\n\t}\n\n\tpublic getModuleName() {\n\t\treturn 'API';\n\t}\n\n\t/**\n\t * Configure API part with aws configurations\n\t * @param {Object} config - Configuration of the API\n\t * @return {Object} - The current configuration\n\t */\n\tconfigure(options) {\n\t\tthis._options = Object.assign({}, this._options, options);\n\n\t\t// Share Amplify instance with client for SSR\n\t\tthis._restApi.Credentials = this.Credentials;\n\n\t\tthis._graphqlApi.Auth = this.Auth;\n\t\tthis._graphqlApi.Cache = this.Cache;\n\t\tthis._graphqlApi.Credentials = this.Credentials;\n\n\t\tconst restAPIConfig = this._restApi.configure(this._options);\n\t\tconst graphQLAPIConfig = this._graphqlApi.configure(this._options);\n\n\t\treturn { ...restAPIConfig, ...graphQLAPIConfig };\n\t}\n\n\t/**\n\t * Make a GET request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tget(apiName, path, init): Promise {\n\t\treturn this._restApi.get(apiName, path, init);\n\t}\n\n\t/**\n\t * Make a POST request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tpost(apiName, path, init): Promise {\n\t\treturn this._restApi.post(apiName, path, init);\n\t}\n\n\t/**\n\t * Make a PUT request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tput(apiName, path, init): Promise {\n\t\treturn this._restApi.put(apiName, path, init);\n\t}\n\n\t/**\n\t * Make a PATCH request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tpatch(apiName, path, init): Promise {\n\t\treturn this._restApi.patch(apiName, path, init);\n\t}\n\n\t/**\n\t * Make a DEL request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\tdel(apiName, path, init): Promise {\n\t\treturn this._restApi.del(apiName, path, init);\n\t}\n\n\t/**\n\t * Make a HEAD request\n\t * @param {string} apiName - The api name of the request\n\t * @param {string} path - The path of the request\n\t * @param {json} [init] - Request extra params\n\t * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n\t */\n\thead(apiName, path, init): Promise {\n\t\treturn this._restApi.head(apiName, path, init);\n\t}\n\n\t/**\n\t * Checks to see if an error thrown is from an api request cancellation\n\t * @param {any} error - Any error\n\t * @return {boolean} - A boolean indicating if the error was from an api request cancellation\n\t */\n\tisCancel(error) {\n\t\treturn this._restApi.isCancel(error);\n\t}\n\t/**\n\t * Cancels an inflight request\n\t * @param {any} request - request to cancel\n\t * @return {boolean} - A boolean indicating if the request was cancelled\n\t */\n\tcancel(request: Promise, message?: string) {\n\t\treturn this._restApi.cancel(request, message);\n\t}\n\n\t/**\n\t * Getting endpoint for API\n\t * @param {string} apiName - The name of the api\n\t * @return {string} - The endpoint of the api\n\t */\n\tasync endpoint(apiName) {\n\t\treturn this._restApi.endpoint(apiName);\n\t}\n\n\t/**\n\t * to get the operation type\n\t * @param operation\n\t */\n\tgetGraphqlOperationType(operation) {\n\t\treturn this._graphqlApi.getGraphqlOperationType(operation);\n\t}\n\n\t/**\n\t * Executes a GraphQL operation\n\t *\n\t * @param {GraphQLOptions} GraphQL Options\n\t * @param {object} additionalHeaders headers to merge in after any `graphql_headers` set in the config\n\t * @returns {Promise | Observable}\n\t */\n\tgraphql(\n\t\toptions: GraphQLOptions,\n\t\tadditionalHeaders?: { [key: string]: string }\n\t): Promise | Observable {\n\t\treturn this._graphqlApi.graphql(options, additionalHeaders);\n\t}\n}\n\nexport const API = new APIClass(null);\nAmplify.register(API);\n","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport {\n\tICookieStorageData,\n\tICognitoStorage,\n\tCognitoUserAttribute,\n} from 'amazon-cognito-identity-js';\n\n/**\n * Parameters for user sign up\n */\nexport interface SignUpParams {\n\tusername: string;\n\tpassword: string;\n\tattributes?: object;\n\tvalidationData?: CognitoUserAttribute[];\n\tclientMetadata?: { [key: string]: string };\n}\n\nexport interface AuthCache {\n\tsetItem();\n\tgetItem();\n\tremoveItem();\n}\n\n/**\n * Auth instance options\n */\nexport interface AuthOptions {\n\tuserPoolId?: string;\n\tuserPoolWebClientId?: string;\n\tidentityPoolId?: string;\n\tregion?: string;\n\tmandatorySignIn?: boolean;\n\tcookieStorage?: ICookieStorageData;\n\toauth?: OAuthOpts;\n\trefreshHandlers?: object;\n\tstorage?: ICognitoStorage;\n\tauthenticationFlowType?: string;\n\tidentityPoolRegion?: string;\n\tclientMetadata?: any;\n\tendpoint?: string;\n}\n\nexport enum CognitoHostedUIIdentityProvider {\n\tCognito = 'COGNITO',\n\tGoogle = 'Google',\n\tFacebook = 'Facebook',\n\tAmazon = 'LoginWithAmazon',\n\tApple = 'SignInWithApple',\n}\n\nexport type LegacyProvider =\n\t| 'google'\n\t| 'facebook'\n\t| 'amazon'\n\t| 'developer'\n\t| string;\n\nexport type FederatedSignInOptions = {\n\tprovider: CognitoHostedUIIdentityProvider;\n\tcustomState?: string;\n};\n\nexport type FederatedSignInOptionsCustom = {\n\tcustomProvider: string;\n\tcustomState?: string;\n};\n\nexport function isFederatedSignInOptions(\n\tobj: any\n): obj is FederatedSignInOptions {\n\tconst keys: (keyof FederatedSignInOptions)[] = ['provider'];\n\treturn obj && !!keys.find(k => obj.hasOwnProperty(k));\n}\n\nexport function isFederatedSignInOptionsCustom(\n\tobj: any\n): obj is FederatedSignInOptionsCustom {\n\tconst keys: (keyof FederatedSignInOptionsCustom)[] = ['customProvider'];\n\treturn obj && !!keys.find(k => obj.hasOwnProperty(k));\n}\n\nexport function hasCustomState(obj: any): boolean {\n\tconst keys: (keyof (\n\t\t| FederatedSignInOptions\n\t\t| FederatedSignInOptionsCustom\n\t))[] = ['customState'];\n\treturn obj && !!keys.find(k => obj.hasOwnProperty(k));\n}\n\n/**\n * Details for multi-factor authentication\n */\nexport interface MfaRequiredDetails {\n\tchallengeName: any;\n\tchallengeParameters: any;\n}\n\n/**\n * interface for federatedResponse\n */\nexport interface FederatedResponse {\n\t// access token\n\ttoken: string;\n\t// identity id\n\tidentity_id?: string;\n\t// the universal time when token expired\n\texpires_at: number;\n}\n\n/**\n * interface for federatedUser\n */\nexport interface FederatedUser {\n\tname: string;\n\temail?: string;\n\tpicture?: string;\n}\n\nexport interface AwsCognitoOAuthOpts {\n\tdomain: string;\n\tscope: Array;\n\tredirectSignIn: string;\n\tredirectSignOut: string;\n\tresponseType: string;\n\toptions?: object;\n\turlOpener?: (url: string, redirectUrl: string) => Promise;\n}\n\nexport function isCognitoHostedOpts(\n\toauth: OAuthOpts\n): oauth is AwsCognitoOAuthOpts {\n\treturn (oauth).redirectSignIn !== undefined;\n}\n\nexport interface Auth0OAuthOpts {\n\tdomain: string;\n\tclientID: string;\n\tscope: string;\n\tredirectUri: string;\n\taudience: string;\n\tresponseType: string;\n\treturnTo: string;\n\turlOpener?: (url: string, redirectUrl: string) => Promise;\n}\n\n// Replacing to fix typings\n// export interface OAuth {\n// awsCognito?: awsCognitoOAuthOpts,\n// auth0?: any\n// }\n\nexport type OAuthOpts = AwsCognitoOAuthOpts | Auth0OAuthOpts;\n\nexport interface ConfirmSignUpOptions {\n\tforceAliasCreation?: boolean;\n\tclientMetadata?: ClientMetaData;\n}\n\nexport interface SignOutOpts {\n\tglobal?: boolean;\n}\n\nexport interface CurrentUserOpts {\n\tbypassCache: boolean;\n}\n\nexport interface GetPreferredMFAOpts {\n\tbypassCache: boolean;\n}\n\nexport type UsernamePasswordOpts = {\n\tusername: string;\n\tpassword: string;\n\tvalidationData?: { [key: string]: any };\n};\n\nexport enum AuthErrorTypes {\n\tNoConfig = 'noConfig',\n\tMissingAuthConfig = 'missingAuthConfig',\n\tEmptyUsername = 'emptyUsername',\n\tInvalidUsername = 'invalidUsername',\n\tEmptyPassword = 'emptyPassword',\n\tEmptyCode = 'emptyCode',\n\tSignUpError = 'signUpError',\n\tNoMFA = 'noMFA',\n\tInvalidMFA = 'invalidMFA',\n\tEmptyChallengeResponse = 'emptyChallengeResponse',\n\tNoUserSession = 'noUserSession',\n\tDefault = 'default',\n}\n\nexport type AuthErrorMessages = { [key in AuthErrorTypes]: AuthErrorMessage };\n\nexport interface AuthErrorMessage {\n\tmessage: string;\n\tlog?: string;\n}\n\n// We can extend this in the future if needed\nexport type SignInOpts = UsernamePasswordOpts;\n\nexport type ClientMetaData =\n\t| {\n\t\t\t[key: string]: string;\n\t }\n\t| undefined;\n\nexport function isUsernamePasswordOpts(obj: any): obj is UsernamePasswordOpts {\n\treturn !!(obj as UsernamePasswordOpts).username;\n}\n","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nconst SELF = '_self';\n\nexport const launchUri = (url: string) => {\n\tconst windowProxy = window.open(url, SELF);\n\tif (windowProxy) {\n\t\treturn Promise.resolve(windowProxy);\n\t} else {\n\t\treturn Promise.reject();\n\t}\n};\n","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport { parse } from 'url'; // Used for OAuth parsing of Cognito Hosted UI\nimport { launchUri } from './urlOpener';\nimport * as oAuthStorage from './oauthStorage';\n\nimport {\n\tOAuthOpts,\n\tisCognitoHostedOpts,\n\tCognitoHostedUIIdentityProvider,\n} from '../types/Auth';\n\nimport { ConsoleLogger as Logger, Hub, urlSafeEncode } from '@aws-amplify/core';\n\nimport sha256 from 'crypto-js/sha256';\nimport Base64 from 'crypto-js/enc-base64';\n\nconst AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\ntypeof Symbol.for === 'function'\n\t? Symbol.for('amplify_default')\n\t: '@@amplify_default') as Symbol;\n\nconst dispatchAuthEvent = (event: string, data: any, message: string) => {\n\tHub.dispatch('auth', { event, data, message }, 'Auth', AMPLIFY_SYMBOL);\n};\n\nconst logger = new Logger('OAuth');\n\nexport default class OAuth {\n\tprivate _urlOpener;\n\tprivate _config;\n\tprivate _cognitoClientId;\n\tprivate _scopes;\n\n\tconstructor({\n\t\tconfig,\n\t\tcognitoClientId,\n\t\tscopes = [],\n\t}: {\n\t\tscopes: string[];\n\t\tconfig: OAuthOpts;\n\t\tcognitoClientId: string;\n\t}) {\n\t\tthis._urlOpener = config.urlOpener || launchUri;\n\t\tthis._config = config;\n\t\tthis._cognitoClientId = cognitoClientId;\n\n\t\tif (!this.isValidScopes(scopes))\n\t\t\tthrow Error('scopes must be a String Array');\n\t\tthis._scopes = scopes;\n\t}\n\n\tprivate isValidScopes(scopes: string[]) {\n\t\treturn (\n\t\t\tArray.isArray(scopes) && scopes.every(scope => typeof scope === 'string')\n\t\t);\n\t}\n\n\tpublic oauthSignIn(\n\t\tresponseType = 'code',\n\t\tdomain: string,\n\t\tredirectSignIn: string,\n\t\tclientId: string,\n\t\tprovider:\n\t\t\t| CognitoHostedUIIdentityProvider\n\t\t\t| string = CognitoHostedUIIdentityProvider.Cognito,\n\t\tcustomState?: string\n\t) {\n\t\tconst generatedState = this._generateState(32);\n\n\t\t/* encodeURIComponent is not URL safe, use urlSafeEncode instead. Cognito \n\t\tsingle-encodes/decodes url on first sign in and double-encodes/decodes url\n\t\twhen user already signed in. Using encodeURIComponent, Base32, Base64 add \n\t\tcharacters % or = which on further encoding becomes unsafe. '=' create issue \n\t\tfor parsing query params. \n\t\tRefer: https://github.com/aws-amplify/amplify-js/issues/5218 */\n\t\tconst state = customState\n\t\t\t? `${generatedState}-${urlSafeEncode(customState)}`\n\t\t\t: generatedState;\n\n\t\toAuthStorage.setState(state);\n\n\t\tconst pkce_key = this._generateRandom(128);\n\t\toAuthStorage.setPKCE(pkce_key);\n\n\t\tconst code_challenge = this._generateChallenge(pkce_key);\n\t\tconst code_challenge_method = 'S256';\n\n\t\tconst scopesString = this._scopes.join(' ');\n\n\t\tconst queryString = Object.entries({\n\t\t\tredirect_uri: redirectSignIn,\n\t\t\tresponse_type: responseType,\n\t\t\tclient_id: clientId,\n\t\t\tidentity_provider: provider,\n\t\t\tscope: scopesString,\n\t\t\tstate,\n\t\t\t...(responseType === 'code' ? { code_challenge } : {}),\n\t\t\t...(responseType === 'code' ? { code_challenge_method } : {}),\n\t\t})\n\t\t\t.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n\t\t\t.join('&');\n\n\t\tconst URL = `https://${domain}/oauth2/authorize?${queryString}`;\n\t\tlogger.debug(`Redirecting to ${URL}`);\n\t\tthis._urlOpener(URL, redirectSignIn);\n\t}\n\n\tprivate async _handleCodeFlow(currentUrl: string) {\n\t\t/* Convert URL into an object with parameters as keys\n { redirect_uri: 'http://localhost:3000/', response_type: 'code', ...} */\n\t\tconst { code } = (parse(currentUrl).query || '')\n\t\t\t.split('&')\n\t\t\t.map(pairings => pairings.split('='))\n\t\t\t.reduce((accum, [k, v]) => ({ ...accum, [k]: v }), { code: undefined });\n\n\t\tif (!code || parse(currentUrl).pathname !== parse(this._config.redirectSignIn).pathname) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst oAuthTokenEndpoint =\n\t\t\t'https://' + this._config.domain + '/oauth2/token';\n\n\t\tdispatchAuthEvent(\n\t\t\t'codeFlow',\n\t\t\t{},\n\t\t\t`Retrieving tokens from ${oAuthTokenEndpoint}`\n\t\t);\n\n\t\tconst client_id = isCognitoHostedOpts(this._config)\n\t\t\t? this._cognitoClientId\n\t\t\t: this._config.clientID;\n\n\t\tconst redirect_uri = isCognitoHostedOpts(this._config)\n\t\t\t? this._config.redirectSignIn\n\t\t\t: this._config.redirectUri;\n\n\t\tconst code_verifier = oAuthStorage.getPKCE();\n\n\t\tconst oAuthTokenBody = {\n\t\t\tgrant_type: 'authorization_code',\n\t\t\tcode,\n\t\t\tclient_id,\n\t\t\tredirect_uri,\n\t\t\t...(code_verifier ? { code_verifier } : {}),\n\t\t};\n\n\t\tlogger.debug(\n\t\t\t`Calling token endpoint: ${oAuthTokenEndpoint} with`,\n\t\t\toAuthTokenBody\n\t\t);\n\n\t\tconst body = Object.entries(oAuthTokenBody)\n\t\t\t.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n\t\t\t.join('&');\n\n\t\tconst {\n\t\t\taccess_token,\n\t\t\trefresh_token,\n\t\t\tid_token,\n\t\t\terror,\n\t\t} = await ((await fetch(oAuthTokenEndpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\n\t\t\t},\n\t\t\tbody,\n\t\t})) as any).json();\n\n\t\tif (error) {\n\t\t\tthrow new Error(error);\n\t\t}\n\n\t\treturn {\n\t\t\taccessToken: access_token,\n\t\t\trefreshToken: refresh_token,\n\t\t\tidToken: id_token,\n\t\t};\n\t}\n\n\tprivate async _handleImplicitFlow(currentUrl: string) {\n\t\t// hash is `null` if `#` doesn't exist on URL\n\t\tconst { id_token, access_token } = (parse(currentUrl).hash || '#')\n\t\t\t.substr(1) // Remove # from returned code\n\t\t\t.split('&')\n\t\t\t.map(pairings => pairings.split('='))\n\t\t\t.reduce((accum, [k, v]) => ({ ...accum, [k]: v }), {\n\t\t\t\tid_token: undefined,\n\t\t\t\taccess_token: undefined,\n\t\t\t});\n\n\t\tdispatchAuthEvent('implicitFlow', {}, `Got tokens from ${currentUrl}`);\n\t\tlogger.debug(`Retrieving implicit tokens from ${currentUrl} with`);\n\n\t\treturn {\n\t\t\taccessToken: access_token,\n\t\t\tidToken: id_token,\n\t\t\trefreshToken: null,\n\t\t};\n\t}\n\n\tpublic async handleAuthResponse(currentUrl?: string) {\n\t\ttry {\n\t\t\tconst urlParams = currentUrl\n\t\t\t\t? ({\n\t\t\t\t\t\t...(parse(currentUrl).hash || '#')\n\t\t\t\t\t\t\t.substr(1)\n\t\t\t\t\t\t\t.split('&')\n\t\t\t\t\t\t\t.map(entry => entry.split('='))\n\t\t\t\t\t\t\t.reduce((acc, [k, v]) => ((acc[k] = v), acc), {}),\n\t\t\t\t\t\t...(parse(currentUrl).query || '')\n\t\t\t\t\t\t\t.split('&')\n\t\t\t\t\t\t\t.map(entry => entry.split('='))\n\t\t\t\t\t\t\t.reduce((acc, [k, v]) => ((acc[k] = v), acc), {}),\n\t\t\t\t } as any)\n\t\t\t\t: {};\n\t\t\tconst { error, error_description } = urlParams;\n\n\t\t\tif (error) {\n\t\t\t\tthrow new Error(error_description);\n\t\t\t}\n\n\t\t\tconst state: string = this._validateState(urlParams);\n\n\t\t\tlogger.debug(\n\t\t\t\t`Starting ${this._config.responseType} flow with ${currentUrl}`\n\t\t\t);\n\t\t\tif (this._config.responseType === 'code') {\n\t\t\t\treturn { ...(await this._handleCodeFlow(currentUrl)), state };\n\t\t\t} else {\n\t\t\t\treturn { ...(await this._handleImplicitFlow(currentUrl)), state };\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tlogger.error(`Error handling auth response.`, e);\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tprivate _validateState(urlParams: any): string {\n\t\tif (!urlParams) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst savedState = oAuthStorage.getState();\n\t\tconst { state: returnedState } = urlParams;\n\n\t\t// This is because savedState only exists if the flow was initiated by Amplify\n\t\tif (savedState && savedState !== returnedState) {\n\t\t\tthrow new Error('Invalid state in OAuth flow');\n\t\t}\n\t\treturn returnedState;\n\t}\n\n\tpublic async signOut() {\n\t\tlet oAuthLogoutEndpoint = 'https://' + this._config.domain + '/logout?';\n\n\t\tconst client_id = isCognitoHostedOpts(this._config)\n\t\t\t? this._cognitoClientId\n\t\t\t: this._config.oauth.clientID;\n\n\t\tconst signout_uri = isCognitoHostedOpts(this._config)\n\t\t\t? this._config.redirectSignOut\n\t\t\t: this._config.returnTo;\n\n\t\toAuthLogoutEndpoint += Object.entries({\n\t\t\tclient_id,\n\t\t\tlogout_uri: encodeURIComponent(signout_uri),\n\t\t})\n\t\t\t.map(([k, v]) => `${k}=${v}`)\n\t\t\t.join('&');\n\n\t\tdispatchAuthEvent(\n\t\t\t'oAuthSignOut',\n\t\t\t{ oAuth: 'signOut' },\n\t\t\t`Signing out from ${oAuthLogoutEndpoint}`\n\t\t);\n\t\tlogger.debug(`Signing out from ${oAuthLogoutEndpoint}`);\n\n\t\treturn this._urlOpener(oAuthLogoutEndpoint);\n\t}\n\n\tprivate _generateState(length: number) {\n\t\tlet result = '';\n\t\tlet i = length;\n\t\tconst chars =\n\t\t\t'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\t\tfor (; i > 0; --i)\n\t\t\tresult += chars[Math.round(Math.random() * (chars.length - 1))];\n\t\treturn result;\n\t}\n\n\tprivate _generateChallenge(code: string) {\n\t\treturn this._base64URL(sha256(code));\n\t}\n\n\tprivate _base64URL(string) {\n\t\treturn string\n\t\t\t.toString(Base64)\n\t\t\t.replace(/=/g, '')\n\t\t\t.replace(/\\+/g, '-')\n\t\t\t.replace(/\\//g, '_');\n\t}\n\n\tprivate _generateRandom(size: number) {\n\t\tconst CHARSET =\n\t\t\t'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n\t\tconst buffer = new Uint8Array(size);\n\t\tif (typeof window !== 'undefined' && !!window.crypto) {\n\t\t\twindow.crypto.getRandomValues(buffer);\n\t\t} else {\n\t\t\tfor (let i = 0; i < size; i += 1) {\n\t\t\t\tbuffer[i] = (Math.random() * CHARSET.length) | 0;\n\t\t\t}\n\t\t}\n\t\treturn this._bufferToString(buffer);\n\t}\n\n\tprivate _bufferToString(buffer: Uint8Array) {\n\t\tconst CHARSET =\n\t\t\t'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\t\tconst state = [];\n\t\tfor (let i = 0; i < buffer.byteLength; i += 1) {\n\t\t\tconst index = buffer[i] % CHARSET.length;\n\t\t\tstate.push(CHARSET[index]);\n\t\t}\n\t\treturn state.join('');\n\t}\n}\n","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nexport const setState = (state: string) => {\n\twindow.sessionStorage.setItem('oauth_state', state);\n};\n\nexport const getState = () => {\n\tconst oauth_state = window.sessionStorage.getItem('oauth_state');\n\twindow.sessionStorage.removeItem('oauth_state');\n\treturn oauth_state;\n};\n\nexport const setPKCE = (private_key: string) => {\n\twindow.sessionStorage.setItem('ouath_pkce_key', private_key);\n};\n\nexport const getPKCE = () => {\n\tconst ouath_pkce_key = window.sessionStorage.getItem('ouath_pkce_key');\n\twindow.sessionStorage.removeItem('ouath_pkce_key');\n\treturn ouath_pkce_key;\n};\n\nexport const clearAll = () => {\n\twindow.sessionStorage.removeItem('ouath_pkce_key');\n\twindow.sessionStorage.removeItem('oauth_state');\n};\n","/*\n * Copyright 2019-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport { AuthErrorMessages, AuthErrorTypes } from './types';\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\nimport { AuthErrorStrings } from './common/AuthErrorStrings';\n\nconst logger = new Logger('AuthError');\n\nexport class AuthError extends Error {\n\tpublic log: string;\n\tconstructor(type: AuthErrorTypes) {\n\t\tconst { message, log } = authErrorMessages[type];\n\t\tsuper(message);\n\n\t\t// Hack for making the custom error class work when transpiled to es5\n\t\t// TODO: Delete the following 2 lines after we change the build target to >= es2015\n\t\tthis.constructor = AuthError;\n\t\tObject.setPrototypeOf(this, AuthError.prototype);\n\n\t\tthis.name = 'AuthError';\n\t\tthis.log = log || message;\n\n\t\tlogger.error(this.log);\n\t}\n}\n\nexport class NoUserPoolError extends AuthError {\n\tconstructor(type: AuthErrorTypes) {\n\t\tsuper(type);\n\n\t\t// Hack for making the custom error class work when transpiled to es5\n\t\t// TODO: Delete the following 2 lines after we change the build target to >= es2015\n\t\tthis.constructor = NoUserPoolError;\n\t\tObject.setPrototypeOf(this, NoUserPoolError.prototype);\n\n\t\tthis.name = 'NoUserPoolError';\n\t}\n}\n\nexport const authErrorMessages: AuthErrorMessages = {\n\tnoConfig: {\n\t\tmessage: AuthErrorStrings.DEFAULT_MSG,\n\t\tlog: `\n Error: Amplify has not been configured correctly.\n This error is typically caused by one of the following scenarios:\n\n 1. Make sure you're passing the awsconfig object to Amplify.configure() in your app's entry point\n See https://aws-amplify.github.io/docs/js/authentication#configure-your-app for more information\n \n 2. There might be multiple conflicting versions of aws-amplify or amplify packages in your node_modules.\n Try deleting your node_modules folder and reinstalling the dependencies with \\`yarn install\\`\n `,\n\t},\n\tmissingAuthConfig: {\n\t\tmessage: AuthErrorStrings.DEFAULT_MSG,\n\t\tlog: `\n Error: Amplify has not been configured correctly. \n The configuration object is missing required auth properties. \n Did you run \\`amplify push\\` after adding auth via \\`amplify add auth\\`?\n See https://aws-amplify.github.io/docs/js/authentication#amplify-project-setup for more information\n `,\n\t},\n\temptyUsername: {\n\t\tmessage: AuthErrorStrings.EMPTY_USERNAME,\n\t},\n\t// TODO: should include a list of valid sign-in types\n\tinvalidUsername: {\n\t\tmessage: AuthErrorStrings.INVALID_USERNAME,\n\t},\n\temptyPassword: {\n\t\tmessage: AuthErrorStrings.EMPTY_PASSWORD,\n\t},\n\temptyCode: {\n\t\tmessage: AuthErrorStrings.EMPTY_CODE,\n\t},\n\tsignUpError: {\n\t\tmessage: AuthErrorStrings.SIGN_UP_ERROR,\n\t\tlog: 'The first parameter should either be non-null string or object',\n\t},\n\tnoMFA: {\n\t\tmessage: AuthErrorStrings.NO_MFA,\n\t},\n\tinvalidMFA: {\n\t\tmessage: AuthErrorStrings.INVALID_MFA,\n\t},\n\temptyChallengeResponse: {\n\t\tmessage: AuthErrorStrings.EMPTY_CHALLENGE,\n\t},\n\tnoUserSession: {\n\t\tmessage: AuthErrorStrings.NO_USER_SESSION,\n\t},\n\tdefault: {\n\t\tmessage: AuthErrorStrings.DEFAULT_MSG,\n\t},\n};\n","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *\t http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport {\n\tAuthOptions,\n\tFederatedResponse,\n\tSignUpParams,\n\tFederatedUser,\n\tConfirmSignUpOptions,\n\tSignOutOpts,\n\tCurrentUserOpts,\n\tGetPreferredMFAOpts,\n\tSignInOpts,\n\tisUsernamePasswordOpts,\n\tisCognitoHostedOpts,\n\tisFederatedSignInOptions,\n\tisFederatedSignInOptionsCustom,\n\thasCustomState,\n\tFederatedSignInOptionsCustom,\n\tLegacyProvider,\n\tFederatedSignInOptions,\n\tAwsCognitoOAuthOpts,\n\tClientMetaData,\n} from './types';\n\nimport {\n\tAmplify,\n\tConsoleLogger as Logger,\n\tCredentials,\n\tHub,\n\tStorageHelper,\n\tICredentials,\n\tParser,\n\tJS,\n\tUniversalStorage,\n\turlSafeDecode,\n} from '@aws-amplify/core';\nimport {\n\tCookieStorage,\n\tCognitoUserPool,\n\tAuthenticationDetails,\n\tICognitoUserPoolData,\n\tICognitoUserData,\n\tISignUpResult,\n\tCognitoUser,\n\tMFAOption,\n\tCognitoUserSession,\n\tIAuthenticationCallback,\n\tICognitoUserAttributeData,\n\tCognitoUserAttribute,\n\tCognitoIdToken,\n\tCognitoRefreshToken,\n\tCognitoAccessToken,\n\tNodeCallback,\n} from 'amazon-cognito-identity-js';\n\nimport { parse } from 'url';\nimport OAuth from './OAuth/OAuth';\nimport { default as urlListener } from './urlListener';\nimport { AuthError, NoUserPoolError } from './Errors';\nimport { AuthErrorTypes, CognitoHostedUIIdentityProvider } from './types/Auth';\n\nconst logger = new Logger('AuthClass');\nconst USER_ADMIN_SCOPE = 'aws.cognito.signin.user.admin';\n\n// 10 sec, following this guide https://www.nngroup.com/articles/response-times-3-important-limits/\nconst OAUTH_FLOW_MS_TIMEOUT = 10 * 1000;\n\nconst AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\ntypeof Symbol.for === 'function'\n\t? Symbol.for('amplify_default')\n\t: '@@amplify_default') as Symbol;\n\nconst dispatchAuthEvent = (event: string, data: any, message: string) => {\n\tHub.dispatch('auth', { event, data, message }, 'Auth', AMPLIFY_SYMBOL);\n};\n\n/**\n * Provide authentication steps\n */\nexport class AuthClass {\n\tprivate _config: AuthOptions;\n\tprivate userPool: CognitoUserPool = null;\n\tprivate user: any = null;\n\tprivate _oAuthHandler: OAuth;\n\tprivate _storage;\n\tprivate _storageSync;\n\tprivate oAuthFlowInProgress: boolean = false;\n\tprivate pendingSignIn: ReturnType | null;\n\n\tCredentials = Credentials;\n\n\t/**\n\t * Initialize Auth with AWS configurations\n\t * @param {Object} config - Configuration of the Auth\n\t */\n\tconstructor(config: AuthOptions) {\n\t\tthis.configure(config);\n\t\tthis.currentCredentials = this.currentCredentials.bind(this);\n\t\tthis.currentUserCredentials = this.currentUserCredentials.bind(this);\n\n\t\tHub.listen('auth', ({ payload }) => {\n\t\t\tconst { event } = payload;\n\t\t\tswitch (event) {\n\t\t\t\tcase 'signIn':\n\t\t\t\t\tthis._storage.setItem('amplify-signin-with-hostedUI', 'false');\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'signOut':\n\t\t\t\t\tthis._storage.removeItem('amplify-signin-with-hostedUI');\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'cognitoHostedUI':\n\t\t\t\t\tthis._storage.setItem('amplify-signin-with-hostedUI', 'true');\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic getModuleName() {\n\t\treturn 'Auth';\n\t}\n\n\tconfigure(config?) {\n\t\tif (!config) return this._config || {};\n\t\tlogger.debug('configure Auth');\n\t\tconst conf = Object.assign(\n\t\t\t{},\n\t\t\tthis._config,\n\t\t\tParser.parseMobilehubConfig(config).Auth,\n\t\t\tconfig\n\t\t);\n\t\tthis._config = conf;\n\t\tconst {\n\t\t\tuserPoolId,\n\t\t\tuserPoolWebClientId,\n\t\t\tcookieStorage,\n\t\t\toauth,\n\t\t\tregion,\n\t\t\tidentityPoolId,\n\t\t\tmandatorySignIn,\n\t\t\trefreshHandlers,\n\t\t\tidentityPoolRegion,\n\t\t\tclientMetadata,\n\t\t\tendpoint,\n\t\t} = this._config;\n\n\t\tif (!this._config.storage) {\n\t\t\t// backward compatability\n\t\t\tif (cookieStorage) this._storage = new CookieStorage(cookieStorage);\n\t\t\telse {\n\t\t\t\tthis._storage = config.ssr\n\t\t\t\t\t? new UniversalStorage()\n\t\t\t\t\t: new StorageHelper().getStorage();\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this._isValidAuthStorage(this._config.storage)) {\n\t\t\t\tlogger.error('The storage in the Auth config is not valid!');\n\t\t\t\tthrow new Error('Empty storage object');\n\t\t\t}\n\t\t\tthis._storage = this._config.storage;\n\t\t}\n\n\t\tthis._storageSync = Promise.resolve();\n\t\tif (typeof this._storage['sync'] === 'function') {\n\t\t\tthis._storageSync = this._storage['sync']();\n\t\t}\n\n\t\tif (userPoolId) {\n\t\t\tconst userPoolData: ICognitoUserPoolData = {\n\t\t\t\tUserPoolId: userPoolId,\n\t\t\t\tClientId: userPoolWebClientId,\n\t\t\t\tendpoint,\n\t\t\t};\n\t\t\tuserPoolData.Storage = this._storage;\n\n\t\t\tthis.userPool = new CognitoUserPool(\n\t\t\t\tuserPoolData,\n\t\t\t\tthis.wrapRefreshSessionCallback\n\t\t\t);\n\t\t}\n\n\t\tthis.Credentials.configure({\n\t\t\tmandatorySignIn,\n\t\t\tregion: identityPoolRegion || region,\n\t\t\tuserPoolId,\n\t\t\tidentityPoolId,\n\t\t\trefreshHandlers,\n\t\t\tstorage: this._storage,\n\t\t});\n\n\t\t// initiailize cognitoauth client if hosted ui options provided\n\t\t// to keep backward compatibility:\n\t\tconst cognitoHostedUIConfig = oauth\n\t\t\t? isCognitoHostedOpts(this._config.oauth)\n\t\t\t\t? oauth\n\t\t\t\t: (oauth).awsCognito\n\t\t\t: undefined;\n\n\t\tif (cognitoHostedUIConfig) {\n\t\t\tconst cognitoAuthParams = Object.assign(\n\t\t\t\t{\n\t\t\t\t\tcognitoClientId: userPoolWebClientId,\n\t\t\t\t\tUserPoolId: userPoolId,\n\t\t\t\t\tdomain: cognitoHostedUIConfig['domain'],\n\t\t\t\t\tscopes: cognitoHostedUIConfig['scope'],\n\t\t\t\t\tredirectSignIn: cognitoHostedUIConfig['redirectSignIn'],\n\t\t\t\t\tredirectSignOut: cognitoHostedUIConfig['redirectSignOut'],\n\t\t\t\t\tresponseType: cognitoHostedUIConfig['responseType'],\n\t\t\t\t\tStorage: this._storage,\n\t\t\t\t\turlOpener: cognitoHostedUIConfig['urlOpener'],\n\t\t\t\t\tclientMetadata,\n\t\t\t\t},\n\t\t\t\tcognitoHostedUIConfig['options']\n\t\t\t);\n\n\t\t\tthis._oAuthHandler = new OAuth({\n\t\t\t\tscopes: cognitoAuthParams.scopes,\n\t\t\t\tconfig: cognitoAuthParams,\n\t\t\t\tcognitoClientId: cognitoAuthParams.cognitoClientId,\n\t\t\t});\n\n\t\t\t// **NOTE** - Remove this in a future major release as it is a breaking change\n\t\t\t// Prevents _handleAuthResponse from being called multiple times in Expo\n\t\t\t// See https://github.com/aws-amplify/amplify-js/issues/4388\n\t\t\tconst usedResponseUrls = {};\n\t\t\turlListener(({ url }) => {\n\t\t\t\tif (usedResponseUrls[url]) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tusedResponseUrls[url] = true;\n\t\t\t\tthis._handleAuthResponse(url);\n\t\t\t});\n\t\t}\n\n\t\tdispatchAuthEvent(\n\t\t\t'configured',\n\t\t\tnull,\n\t\t\t`The Auth category has been configured successfully`\n\t\t);\n\t\treturn this._config;\n\t}\n\n\twrapRefreshSessionCallback = (callback: NodeCallback.Any) => {\n\t\tconst wrapped: NodeCallback.Any = (error, data) => {\n\t\t\tif (data) {\n\t\t\t\tdispatchAuthEvent('tokenRefresh', undefined, `New token retrieved`);\n\t\t\t} else {\n\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t'tokenRefresh_failure',\n\t\t\t\t\terror,\n\t\t\t\t\t`Failed to retrieve new token`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn callback(error, data);\n\t\t};\n\t\treturn wrapped;\n\t} // prettier-ignore\n\n\t/**\n\t * Sign up with username, password and other attributes like phone, email\n\t * @param {String | object} params - The user attributes used for signin\n\t * @param {String[]} restOfAttrs - for the backward compatability\n\t * @return - A promise resolves callback data if success\n\t */\n\tpublic signUp(\n\t\tparams: string | SignUpParams,\n\t\t...restOfAttrs: string[]\n\t): Promise {\n\t\tif (!this.userPool) {\n\t\t\treturn this.rejectNoUserPool();\n\t\t}\n\n\t\tlet username: string = null;\n\t\tlet password: string = null;\n\t\tconst attributes: CognitoUserAttribute[] = [];\n\t\tlet validationData: CognitoUserAttribute[] = null;\n\t\tlet clientMetadata;\n\n\t\tif (params && typeof params === 'string') {\n\t\t\tusername = params;\n\t\t\tpassword = restOfAttrs ? restOfAttrs[0] : null;\n\t\t\tconst email: string = restOfAttrs ? restOfAttrs[1] : null;\n\t\t\tconst phone_number: string = restOfAttrs ? restOfAttrs[2] : null;\n\n\t\t\tif (email)\n\t\t\t\tattributes.push(\n\t\t\t\t\tnew CognitoUserAttribute({ Name: 'email', Value: email })\n\t\t\t\t);\n\n\t\t\tif (phone_number)\n\t\t\t\tattributes.push(\n\t\t\t\t\tnew CognitoUserAttribute({\n\t\t\t\t\t\tName: 'phone_number',\n\t\t\t\t\t\tValue: phone_number,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t} else if (params && typeof params === 'object') {\n\t\t\tusername = params['username'];\n\t\t\tpassword = params['password'];\n\n\t\t\tif (params && params.clientMetadata) {\n\t\t\t\tclientMetadata = params.clientMetadata;\n\t\t\t} else if (this._config.clientMetadata) {\n\t\t\t\tclientMetadata = this._config.clientMetadata;\n\t\t\t}\n\n\t\t\tconst attrs = params['attributes'];\n\t\t\tif (attrs) {\n\t\t\t\tObject.keys(attrs).map(key => {\n\t\t\t\t\tattributes.push(\n\t\t\t\t\t\tnew CognitoUserAttribute({ Name: key, Value: attrs[key] })\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst validationDataObject = params['validationData'];\n\t\t\tif (validationDataObject) {\n\t\t\t\tvalidationData = [];\n\t\t\t\tObject.keys(validationDataObject).map(key => {\n\t\t\t\t\tvalidationData.push(\n\t\t\t\t\t\tnew CognitoUserAttribute({ Name: key, Value: attrs[key] })\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.SignUpError);\n\t\t}\n\n\t\tif (!username) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n\t\t}\n\t\tif (!password) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n\t\t}\n\n\t\tlogger.debug('signUp attrs:', attributes);\n\t\tlogger.debug('signUp validation data:', validationData);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.userPool.signUp(\n\t\t\t\tusername,\n\t\t\t\tpassword,\n\t\t\t\tattributes,\n\t\t\t\tvalidationData,\n\t\t\t\t(err, data) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'signUp_failure',\n\t\t\t\t\t\t\terr,\n\t\t\t\t\t\t\t`${username} failed to signup`\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'signUp',\n\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t`${username} has signed up successfully`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tclientMetadata\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Send the verification code to confirm sign up\n\t * @param {String} username - The username to be confirmed\n\t * @param {String} code - The verification code\n\t * @param {ConfirmSignUpOptions} options - other options for confirm signup\n\t * @return - A promise resolves callback data if success\n\t */\n\tpublic confirmSignUp(\n\t\tusername: string,\n\t\tcode: string,\n\t\toptions?: ConfirmSignUpOptions\n\t): Promise {\n\t\tif (!this.userPool) {\n\t\t\treturn this.rejectNoUserPool();\n\t\t}\n\t\tif (!username) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n\t\t}\n\t\tif (!code) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyCode);\n\t\t}\n\n\t\tconst user = this.createCognitoUser(username);\n\t\tconst forceAliasCreation =\n\t\t\toptions && typeof options.forceAliasCreation === 'boolean'\n\t\t\t\t? options.forceAliasCreation\n\t\t\t\t: true;\n\n\t\tlet clientMetadata;\n\t\tif (options && options.clientMetadata) {\n\t\t\tclientMetadata = options.clientMetadata;\n\t\t} else if (this._config.clientMetadata) {\n\t\t\tclientMetadata = this._config.clientMetadata;\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.confirmRegistration(\n\t\t\t\tcode,\n\t\t\t\tforceAliasCreation,\n\t\t\t\t(err, data) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tclientMetadata\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Resend the verification code\n\t * @param {String} username - The username to be confirmed\n\t * @param {ClientMetadata} clientMetadata - Metadata to be passed to Cognito Lambda triggers\n\t * @return - A promise resolves code delivery details if successful\n\t */\n\tpublic resendSignUp(\n\t\tusername: string,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\tif (!this.userPool) {\n\t\t\treturn this.rejectNoUserPool();\n\t\t}\n\t\tif (!username) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n\t\t}\n\n\t\tconst user = this.createCognitoUser(username);\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.resendConfirmationCode((err, data) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(data);\n\t\t\t\t}\n\t\t\t}, clientMetadata);\n\t\t});\n\t}\n\n\t/**\n\t * Sign in\n\t * @param {String | SignInOpts} usernameOrSignInOpts - The username to be signed in or the sign in options\n\t * @param {String} password - The password of the username\n\t * @return - A promise resolves the CognitoUser\n\t */\n\tpublic signIn(\n\t\tusernameOrSignInOpts: string | SignInOpts,\n\t\tpw?: string,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\tif (!this.userPool) {\n\t\t\treturn this.rejectNoUserPool();\n\t\t}\n\n\t\tlet username = null;\n\t\tlet password = null;\n\t\tlet validationData = {};\n\n\t\t// for backward compatibility\n\t\tif (typeof usernameOrSignInOpts === 'string') {\n\t\t\tusername = usernameOrSignInOpts;\n\t\t\tpassword = pw;\n\t\t} else if (isUsernamePasswordOpts(usernameOrSignInOpts)) {\n\t\t\tif (typeof pw !== 'undefined') {\n\t\t\t\tlogger.warn(\n\t\t\t\t\t'The password should be defined under the first parameter object!'\n\t\t\t\t);\n\t\t\t}\n\t\t\tusername = usernameOrSignInOpts.username;\n\t\t\tpassword = usernameOrSignInOpts.password;\n\t\t\tvalidationData = usernameOrSignInOpts.validationData;\n\t\t} else {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.InvalidUsername);\n\t\t}\n\t\tif (!username) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n\t\t}\n\t\tconst authDetails = new AuthenticationDetails({\n\t\t\tUsername: username,\n\t\t\tPassword: password,\n\t\t\tValidationData: validationData,\n\t\t\tClientMetadata: clientMetadata,\n\t\t});\n\t\tif (password) {\n\t\t\treturn this.signInWithPassword(authDetails);\n\t\t} else {\n\t\t\treturn this.signInWithoutPassword(authDetails);\n\t\t}\n\t}\n\n\t/**\n\t * Return an object with the authentication callbacks\n\t * @param {CognitoUser} user - the cognito user object\n\t * @param {} resolve - function called when resolving the current step\n\t * @param {} reject - function called when rejecting the current step\n\t * @return - an object with the callback methods for user authentication\n\t */\n\tprivate authCallbacks(\n\t\tuser: CognitoUser,\n\t\tresolve: (value?: CognitoUser | any) => void,\n\t\treject: (value?: any) => void\n\t): IAuthenticationCallback {\n\t\tconst that = this;\n\t\treturn {\n\t\t\tonSuccess: async session => {\n\t\t\t\tlogger.debug(session);\n\t\t\t\tdelete user['challengeName'];\n\t\t\t\tdelete user['challengeParam'];\n\t\t\t\ttry {\n\t\t\t\t\tawait this.Credentials.clear();\n\t\t\t\t\tconst cred = await this.Credentials.set(session, 'session');\n\t\t\t\t\tlogger.debug('succeed to get cognito credentials', cred);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tlogger.debug('cannot get cognito credentials', e);\n\t\t\t\t} finally {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// In order to get user attributes and MFA methods\n\t\t\t\t\t\t// We need to trigger currentUserPoolUser again\n\t\t\t\t\t\tconst currentUser = await this.currentUserPoolUser();\n\t\t\t\t\t\tthat.user = currentUser;\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'signIn',\n\t\t\t\t\t\t\tcurrentUser,\n\t\t\t\t\t\t\t`A user ${user.getUsername()} has been signed in`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresolve(currentUser);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tlogger.error('Failed to get the signed in user', e);\n\t\t\t\t\t\treject(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailure: err => {\n\t\t\t\tlogger.debug('signIn failure', err);\n\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t'signIn_failure',\n\t\t\t\t\terr,\n\t\t\t\t\t`${user.getUsername()} failed to signin`\n\t\t\t\t);\n\t\t\t\treject(err);\n\t\t\t},\n\t\t\tcustomChallenge: challengeParam => {\n\t\t\t\tlogger.debug('signIn custom challenge answer required');\n\t\t\t\tuser['challengeName'] = 'CUSTOM_CHALLENGE';\n\t\t\t\tuser['challengeParam'] = challengeParam;\n\t\t\t\tresolve(user);\n\t\t\t},\n\t\t\tmfaRequired: (challengeName, challengeParam) => {\n\t\t\t\tlogger.debug('signIn MFA required');\n\t\t\t\tuser['challengeName'] = challengeName;\n\t\t\t\tuser['challengeParam'] = challengeParam;\n\t\t\t\tresolve(user);\n\t\t\t},\n\t\t\tmfaSetup: (challengeName, challengeParam) => {\n\t\t\t\tlogger.debug('signIn mfa setup', challengeName);\n\t\t\t\tuser['challengeName'] = challengeName;\n\t\t\t\tuser['challengeParam'] = challengeParam;\n\t\t\t\tresolve(user);\n\t\t\t},\n\t\t\tnewPasswordRequired: (userAttributes, requiredAttributes) => {\n\t\t\t\tlogger.debug('signIn new password');\n\t\t\t\tuser['challengeName'] = 'NEW_PASSWORD_REQUIRED';\n\t\t\t\tuser['challengeParam'] = {\n\t\t\t\t\tuserAttributes,\n\t\t\t\t\trequiredAttributes,\n\t\t\t\t};\n\t\t\t\tresolve(user);\n\t\t\t},\n\t\t\ttotpRequired: (challengeName, challengeParam) => {\n\t\t\t\tlogger.debug('signIn totpRequired');\n\t\t\t\tuser['challengeName'] = challengeName;\n\t\t\t\tuser['challengeParam'] = challengeParam;\n\t\t\t\tresolve(user);\n\t\t\t},\n\t\t\tselectMFAType: (challengeName, challengeParam) => {\n\t\t\t\tlogger.debug('signIn selectMFAType', challengeName);\n\t\t\t\tuser['challengeName'] = challengeName;\n\t\t\t\tuser['challengeParam'] = challengeParam;\n\t\t\t\tresolve(user);\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Sign in with a password\n\t * @private\n\t * @param {AuthenticationDetails} authDetails - the user sign in data\n\t * @return - A promise resolves the CognitoUser object if success or mfa required\n\t */\n\tprivate signInWithPassword(\n\t\tauthDetails: AuthenticationDetails\n\t): Promise {\n\t\tif (this.pendingSignIn) {\n\t\t\tthrow new Error('Pending sign-in attempt already in progress');\n\t\t}\n\n\t\tconst user = this.createCognitoUser(authDetails.getUsername());\n\n\t\tthis.pendingSignIn = new Promise((resolve, reject) => {\n\t\t\tuser.authenticateUser(\n\t\t\t\tauthDetails,\n\t\t\t\tthis.authCallbacks(\n\t\t\t\t\tuser,\n\t\t\t\t\tvalue => {\n\t\t\t\t\t\tthis.pendingSignIn = null;\n\t\t\t\t\t\tresolve(value);\n\t\t\t\t\t},\n\t\t\t\t\terror => {\n\t\t\t\t\t\tthis.pendingSignIn = null;\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\t\t});\n\n\t\treturn this.pendingSignIn;\n\t}\n\n\t/**\n\t * Sign in without a password\n\t * @private\n\t * @param {AuthenticationDetails} authDetails - the user sign in data\n\t * @return - A promise resolves the CognitoUser object if success or mfa required\n\t */\n\tprivate signInWithoutPassword(\n\t\tauthDetails: AuthenticationDetails\n\t): Promise {\n\t\tconst user = this.createCognitoUser(authDetails.getUsername());\n\t\tuser.setAuthenticationFlowType('CUSTOM_AUTH');\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.initiateAuth(authDetails, this.authCallbacks(user, resolve, reject));\n\t\t});\n\t}\n\n\t/**\n\t * get user current preferred mfa option\n\t * this method doesn't work with totp, we need to deprecate it.\n\t * @deprecated\n\t * @param {CognitoUser} user - the current user\n\t * @return - A promise resolves the current preferred mfa option if success\n\t */\n\tpublic getMFAOptions(user: CognitoUser | any): Promise {\n\t\treturn new Promise((res, rej) => {\n\t\t\tuser.getMFAOptions((err, mfaOptions) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tlogger.debug('get MFA Options failed', err);\n\t\t\t\t\trej(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlogger.debug('get MFA options success', mfaOptions);\n\t\t\t\tres(mfaOptions);\n\t\t\t\treturn;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * get preferred mfa method\n\t * @param {CognitoUser} user - the current cognito user\n\t * @param {GetPreferredMFAOpts} params - options for getting the current user preferred MFA\n\t */\n\tpublic getPreferredMFA(\n\t\tuser: CognitoUser | any,\n\t\tparams?: GetPreferredMFAOpts\n\t): Promise {\n\t\tconst that = this;\n\t\treturn new Promise((res, rej) => {\n\t\t\tconst clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n\n\t\t\tconst bypassCache = params ? params.bypassCache : false;\n\t\t\tuser.getUserData(\n\t\t\t\t(err, data) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tlogger.debug('getting preferred mfa failed', err);\n\t\t\t\t\t\trej(err);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst mfaType = that._getMfaTypeFromUserData(data);\n\t\t\t\t\tif (!mfaType) {\n\t\t\t\t\t\trej('invalid MFA Type');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tres(mfaType);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ bypassCache, clientMetadata }\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate _getMfaTypeFromUserData(data) {\n\t\tlet ret = null;\n\t\tconst preferredMFA = data.PreferredMfaSetting;\n\t\t// if the user has used Auth.setPreferredMFA() to setup the mfa type\n\t\t// then the \"PreferredMfaSetting\" would exist in the response\n\t\tif (preferredMFA) {\n\t\t\tret = preferredMFA;\n\t\t} else {\n\t\t\t// if mfaList exists but empty, then its noMFA\n\t\t\tconst mfaList = data.UserMFASettingList;\n\t\t\tif (!mfaList) {\n\t\t\t\t// if SMS was enabled by using Auth.enableSMS(),\n\t\t\t\t// the response would contain MFAOptions\n\t\t\t\t// as for now Cognito only supports for SMS, so we will say it is 'SMS_MFA'\n\t\t\t\t// if it does not exist, then it should be NOMFA\n\t\t\t\tconst MFAOptions = data.MFAOptions;\n\t\t\t\tif (MFAOptions) {\n\t\t\t\t\tret = 'SMS_MFA';\n\t\t\t\t} else {\n\t\t\t\t\tret = 'NOMFA';\n\t\t\t\t}\n\t\t\t} else if (mfaList.length === 0) {\n\t\t\t\tret = 'NOMFA';\n\t\t\t} else {\n\t\t\t\tlogger.debug('invalid case for getPreferredMFA', data);\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tprivate _getUserData(user, params) {\n\t\treturn new Promise((res, rej) => {\n\t\t\tuser.getUserData((err, data) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tlogger.debug('getting user data failed', err);\n\t\t\t\t\trej(err);\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tres(data);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}, params);\n\t\t});\n\t}\n\n\t/**\n\t * set preferred MFA method\n\t * @param {CognitoUser} user - the current Cognito user\n\t * @param {string} mfaMethod - preferred mfa method\n\t * @return - A promise resolve if success\n\t */\n\tpublic async setPreferredMFA(\n\t\tuser: CognitoUser | any,\n\t\tmfaMethod: 'TOTP' | 'SMS' | 'NOMFA'\n\t): Promise {\n\t\tconst clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n\n\t\tconst userData = await this._getUserData(user, {\n\t\t\tbypassCache: true,\n\t\t\tclientMetadata,\n\t\t});\n\t\tlet smsMfaSettings = null;\n\t\tlet totpMfaSettings = null;\n\n\t\tswitch (mfaMethod) {\n\t\t\tcase 'TOTP' || 'SOFTWARE_TOKEN_MFA':\n\t\t\t\ttotpMfaSettings = {\n\t\t\t\t\tPreferredMfa: true,\n\t\t\t\t\tEnabled: true,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'SMS' || 'SMS_MFA':\n\t\t\t\tsmsMfaSettings = {\n\t\t\t\t\tPreferredMfa: true,\n\t\t\t\t\tEnabled: true,\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'NOMFA':\n\t\t\t\tconst mfaList = userData['UserMFASettingList'];\n\t\t\t\tconst currentMFAType = await this._getMfaTypeFromUserData(userData);\n\t\t\t\tif (currentMFAType === 'NOMFA') {\n\t\t\t\t\treturn Promise.resolve('No change for mfa type');\n\t\t\t\t} else if (currentMFAType === 'SMS_MFA') {\n\t\t\t\t\tsmsMfaSettings = {\n\t\t\t\t\t\tPreferredMfa: false,\n\t\t\t\t\t\tEnabled: false,\n\t\t\t\t\t};\n\t\t\t\t} else if (currentMFAType === 'SOFTWARE_TOKEN_MFA') {\n\t\t\t\t\ttotpMfaSettings = {\n\t\t\t\t\t\tPreferredMfa: false,\n\t\t\t\t\t\tEnabled: false,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn this.rejectAuthError(AuthErrorTypes.InvalidMFA);\n\t\t\t\t}\n\t\t\t\t// if there is a UserMFASettingList in the response\n\t\t\t\t// we need to disable every mfa type in that list\n\t\t\t\tif (mfaList && mfaList.length !== 0) {\n\t\t\t\t\t// to disable SMS or TOTP if exists in that list\n\t\t\t\t\tmfaList.forEach(mfaType => {\n\t\t\t\t\t\tif (mfaType === 'SMS_MFA') {\n\t\t\t\t\t\t\tsmsMfaSettings = {\n\t\t\t\t\t\t\t\tPreferredMfa: false,\n\t\t\t\t\t\t\t\tEnabled: false,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (mfaType === 'SOFTWARE_TOKEN_MFA') {\n\t\t\t\t\t\t\ttotpMfaSettings = {\n\t\t\t\t\t\t\t\tPreferredMfa: false,\n\t\t\t\t\t\t\t\tEnabled: false,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlogger.debug('no validmfa method provided');\n\t\t\t\treturn this.rejectAuthError(AuthErrorTypes.NoMFA);\n\t\t}\n\n\t\tconst that = this;\n\t\treturn new Promise((res, rej) => {\n\t\t\tuser.setUserMfaPreference(\n\t\t\t\tsmsMfaSettings,\n\t\t\t\ttotpMfaSettings,\n\t\t\t\t(err, result) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tlogger.debug('Set user mfa preference error', err);\n\t\t\t\t\t\treturn rej(err);\n\t\t\t\t\t}\n\t\t\t\t\tlogger.debug('Set user mfa success', result);\n\t\t\t\t\tlogger.debug('Caching the latest user data into local');\n\t\t\t\t\t// cache the latest result into user data\n\t\t\t\t\tuser.getUserData(\n\t\t\t\t\t\t(err, data) => {\n\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\tlogger.debug('getting user data failed', err);\n\t\t\t\t\t\t\t\treturn rej(err);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn res(result);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbypassCache: true,\n\t\t\t\t\t\t\tclientMetadata,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * diable SMS\n\t * @deprecated\n\t * @param {CognitoUser} user - the current user\n\t * @return - A promise resolves is success\n\t */\n\tpublic disableSMS(user: CognitoUser): Promise {\n\t\treturn new Promise((res, rej) => {\n\t\t\tuser.disableMFA((err, data) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tlogger.debug('disable mfa failed', err);\n\t\t\t\t\trej(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlogger.debug('disable mfa succeed', data);\n\t\t\t\tres(data);\n\t\t\t\treturn;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * enable SMS\n\t * @deprecated\n\t * @param {CognitoUser} user - the current user\n\t * @return - A promise resolves is success\n\t */\n\tpublic enableSMS(user: CognitoUser): Promise {\n\t\treturn new Promise((res, rej) => {\n\t\t\tuser.enableMFA((err, data) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tlogger.debug('enable mfa failed', err);\n\t\t\t\t\trej(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlogger.debug('enable mfa succeed', data);\n\t\t\t\tres(data);\n\t\t\t\treturn;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Setup TOTP\n\t * @param {CognitoUser} user - the current user\n\t * @return - A promise resolves with the secret code if success\n\t */\n\tpublic setupTOTP(user: CognitoUser | any): Promise {\n\t\treturn new Promise((res, rej) => {\n\t\t\tuser.associateSoftwareToken({\n\t\t\t\tonFailure: err => {\n\t\t\t\t\tlogger.debug('associateSoftwareToken failed', err);\n\t\t\t\t\trej(err);\n\t\t\t\t\treturn;\n\t\t\t\t},\n\t\t\t\tassociateSecretCode: secretCode => {\n\t\t\t\t\tlogger.debug('associateSoftwareToken sucess', secretCode);\n\t\t\t\t\tres(secretCode);\n\t\t\t\t\treturn;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * verify TOTP setup\n\t * @param {CognitoUser} user - the current user\n\t * @param {string} challengeAnswer - challenge answer\n\t * @return - A promise resolves is success\n\t */\n\tpublic verifyTotpToken(\n\t\tuser: CognitoUser | any,\n\t\tchallengeAnswer: string\n\t): Promise {\n\t\tlogger.debug('verification totp token', user, challengeAnswer);\n\t\treturn new Promise((res, rej) => {\n\t\t\tuser.verifySoftwareToken(challengeAnswer, 'My TOTP device', {\n\t\t\t\tonFailure: err => {\n\t\t\t\t\tlogger.debug('verifyTotpToken failed', err);\n\t\t\t\t\trej(err);\n\t\t\t\t\treturn;\n\t\t\t\t},\n\t\t\t\tonSuccess: data => {\n\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t'signIn',\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\t`A user ${user.getUsername()} has been signed in`\n\t\t\t\t\t);\n\t\t\t\t\tlogger.debug('verifyTotpToken success', data);\n\t\t\t\t\tres(data);\n\t\t\t\t\treturn;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Send MFA code to confirm sign in\n\t * @param {Object} user - The CognitoUser object\n\t * @param {String} code - The confirmation code\n\t */\n\tpublic confirmSignIn(\n\t\tuser: CognitoUser | any,\n\t\tcode: string,\n\t\tmfaType?: 'SMS_MFA' | 'SOFTWARE_TOKEN_MFA' | null,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\tif (!code) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyCode);\n\t\t}\n\n\t\tconst that = this;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.sendMFACode(\n\t\t\t\tcode,\n\t\t\t\t{\n\t\t\t\t\tonSuccess: async session => {\n\t\t\t\t\t\tlogger.debug(session);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.Credentials.clear();\n\t\t\t\t\t\t\tconst cred = await this.Credentials.set(session, 'session');\n\t\t\t\t\t\t\tlogger.debug('succeed to get cognito credentials', cred);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tlogger.debug('cannot get cognito credentials', e);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tthat.user = user;\n\n\t\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t\t'signIn',\n\t\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t\t\t`A user ${user.getUsername()} has been signed in`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonFailure: err => {\n\t\t\t\t\t\tlogger.debug('confirm signIn failure', err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmfaType,\n\t\t\t\tclientMetadata\n\t\t\t);\n\t\t});\n\t}\n\n\tpublic completeNewPassword(\n\t\tuser: CognitoUser | any,\n\t\tpassword: string,\n\t\trequiredAttributes: any = {},\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\tif (!password) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n\t\t}\n\n\t\tconst that = this;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.completeNewPasswordChallenge(\n\t\t\t\tpassword,\n\t\t\t\trequiredAttributes,\n\t\t\t\t{\n\t\t\t\t\tonSuccess: async session => {\n\t\t\t\t\t\tlogger.debug(session);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.Credentials.clear();\n\t\t\t\t\t\t\tconst cred = await this.Credentials.set(session, 'session');\n\t\t\t\t\t\t\tlogger.debug('succeed to get cognito credentials', cred);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tlogger.debug('cannot get cognito credentials', e);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tthat.user = user;\n\t\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t\t'signIn',\n\t\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t\t\t`A user ${user.getUsername()} has been signed in`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonFailure: err => {\n\t\t\t\t\t\tlogger.debug('completeNewPassword failure', err);\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'completeNewPassword_failure',\n\t\t\t\t\t\t\terr,\n\t\t\t\t\t\t\t`${this.user} failed to complete the new password flow`\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t},\n\t\t\t\t\tmfaRequired: (challengeName, challengeParam) => {\n\t\t\t\t\t\tlogger.debug('signIn MFA required');\n\t\t\t\t\t\tuser['challengeName'] = challengeName;\n\t\t\t\t\t\tuser['challengeParam'] = challengeParam;\n\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t},\n\t\t\t\t\tmfaSetup: (challengeName, challengeParam) => {\n\t\t\t\t\t\tlogger.debug('signIn mfa setup', challengeName);\n\t\t\t\t\t\tuser['challengeName'] = challengeName;\n\t\t\t\t\t\tuser['challengeParam'] = challengeParam;\n\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t},\n\t\t\t\t\ttotpRequired: (challengeName, challengeParam) => {\n\t\t\t\t\t\tlogger.debug('signIn mfa setup', challengeName);\n\t\t\t\t\t\tuser['challengeName'] = challengeName;\n\t\t\t\t\t\tuser['challengeParam'] = challengeParam;\n\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tclientMetadata\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Send the answer to a custom challenge\n\t * @param {CognitoUser} user - The CognitoUser object\n\t * @param {String} challengeResponses - The confirmation code\n\t */\n\tpublic sendCustomChallengeAnswer(\n\t\tuser: CognitoUser | any,\n\t\tchallengeResponses: string,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\tif (!this.userPool) {\n\t\t\treturn this.rejectNoUserPool();\n\t\t}\n\t\tif (!challengeResponses) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyChallengeResponse);\n\t\t}\n\n\t\tconst that = this;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.sendCustomChallengeAnswer(\n\t\t\t\tchallengeResponses,\n\t\t\t\tthis.authCallbacks(user, resolve, reject),\n\t\t\t\tclientMetadata\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Update an authenticated users' attributes\n\t * @param {CognitoUser} - The currently logged in user object\n\t * @return {Promise}\n\t **/\n\tpublic updateUserAttributes(\n\t\tuser: CognitoUser | any,\n\t\tattributes: object,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\tconst attributeList: ICognitoUserAttributeData[] = [];\n\t\tconst that = this;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthat.userSession(user).then(session => {\n\t\t\t\tfor (const key in attributes) {\n\t\t\t\t\tif (key !== 'sub' && key.indexOf('_verified') < 0) {\n\t\t\t\t\t\tconst attr: ICognitoUserAttributeData = {\n\t\t\t\t\t\t\tName: key,\n\t\t\t\t\t\t\tValue: attributes[key],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tattributeList.push(attr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tuser.updateAttributes(\n\t\t\t\t\tattributeList,\n\t\t\t\t\t(err, result) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treturn reject(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn resolve(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tclientMetadata\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t * Return user attributes\n\t * @param {Object} user - The CognitoUser object\n\t * @return - A promise resolves to user attributes if success\n\t */\n\tpublic userAttributes(\n\t\tuser: CognitoUser | any\n\t): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.userSession(user).then(session => {\n\t\t\t\tuser.getUserAttributes((err, attributes) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(attributes);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic verifiedContact(user: CognitoUser | any) {\n\t\tconst that = this;\n\t\treturn this.userAttributes(user).then(attributes => {\n\t\t\tconst attrs = that.attributesToObject(attributes);\n\t\t\tconst unverified = {};\n\t\t\tconst verified = {};\n\t\t\tif (attrs['email']) {\n\t\t\t\tif (attrs['email_verified']) {\n\t\t\t\t\tverified['email'] = attrs['email'];\n\t\t\t\t} else {\n\t\t\t\t\tunverified['email'] = attrs['email'];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (attrs['phone_number']) {\n\t\t\t\tif (attrs['phone_number_verified']) {\n\t\t\t\t\tverified['phone_number'] = attrs['phone_number'];\n\t\t\t\t} else {\n\t\t\t\t\tunverified['phone_number'] = attrs['phone_number'];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tverified,\n\t\t\t\tunverified,\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Get current authenticated user\n\t * @return - A promise resolves to current authenticated CognitoUser if success\n\t */\n\tpublic currentUserPoolUser(\n\t\tparams?: CurrentUserOpts\n\t): Promise {\n\t\tif (!this.userPool) {\n\t\t\treturn this.rejectNoUserPool();\n\t\t}\n\n\t\treturn new Promise((res, rej) => {\n\t\t\tthis._storageSync\n\t\t\t\t.then(async () => {\n\t\t\t\t\tif (this.isOAuthInProgress()) {\n\t\t\t\t\t\tlogger.debug('OAuth signIn in progress, waiting for resolution...');\n\n\t\t\t\t\t\tawait new Promise(res => {\n\t\t\t\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\t\t\t\tlogger.debug('OAuth signIn in progress timeout');\n\n\t\t\t\t\t\t\t\tHub.remove('auth', hostedUISignCallback);\n\n\t\t\t\t\t\t\t\tres();\n\t\t\t\t\t\t\t}, OAUTH_FLOW_MS_TIMEOUT);\n\n\t\t\t\t\t\t\tHub.listen('auth', hostedUISignCallback);\n\n\t\t\t\t\t\t\tfunction hostedUISignCallback({ payload }) {\n\t\t\t\t\t\t\t\tconst { event } = payload;\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tevent === 'cognitoHostedUI' ||\n\t\t\t\t\t\t\t\t\tevent === 'cognitoHostedUI_failure'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tlogger.debug(`OAuth signIn resolved: ${event}`);\n\t\t\t\t\t\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\t\t\t\t\t\tHub.remove('auth', hostedUISignCallback);\n\n\t\t\t\t\t\t\t\t\tres();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst user = this.userPool.getCurrentUser();\n\n\t\t\t\t\tif (!user) {\n\t\t\t\t\t\tlogger.debug('Failed to get user from user pool');\n\t\t\t\t\t\trej('No current user');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n\n\t\t\t\t\t// refresh the session if the session expired.\n\t\t\t\t\tuser.getSession(\n\t\t\t\t\t\tasync (err, session) => {\n\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\tlogger.debug('Failed to get the user session', err);\n\t\t\t\t\t\t\t\trej(err);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// get user data from Cognito\n\t\t\t\t\t\t\tconst bypassCache = params ? params.bypassCache : false;\n\n\t\t\t\t\t\t\tif (bypassCache) {\n\t\t\t\t\t\t\t\tawait this.Credentials.clear();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n\n\t\t\t\t\t\t\t// validate the token's scope first before calling this function\n\t\t\t\t\t\t\tconst { scope = '' } = session.getAccessToken().decodePayload();\n\t\t\t\t\t\t\tif (scope.split(' ').includes(USER_ADMIN_SCOPE)) {\n\t\t\t\t\t\t\t\tuser.getUserData(\n\t\t\t\t\t\t\t\t\t(err, data) => {\n\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\tlogger.debug('getting user data failed', err);\n\t\t\t\t\t\t\t\t\t\t\t// Make sure the user is still valid\n\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\terr.message === 'User is disabled.' ||\n\t\t\t\t\t\t\t\t\t\t\t\terr.message === 'User does not exist.' ||\n\t\t\t\t\t\t\t\t\t\t\t\terr.message === 'Access Token has been revoked' // Session revoked by another app\n\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\trej(err);\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t// the error may also be thrown when lack of permissions to get user info etc\n\t\t\t\t\t\t\t\t\t\t\t\t// in that case we just bypass the error\n\t\t\t\t\t\t\t\t\t\t\t\tres(user);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tconst preferredMFA = data.PreferredMfaSetting || 'NOMFA';\n\t\t\t\t\t\t\t\t\t\tconst attributeList = [];\n\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < data.UserAttributes.length; i++) {\n\t\t\t\t\t\t\t\t\t\t\tconst attribute = {\n\t\t\t\t\t\t\t\t\t\t\t\tName: data.UserAttributes[i].Name,\n\t\t\t\t\t\t\t\t\t\t\t\tValue: data.UserAttributes[i].Value,\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\tconst userAttribute = new CognitoUserAttribute(attribute);\n\t\t\t\t\t\t\t\t\t\t\tattributeList.push(userAttribute);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst attributes = this.attributesToObject(attributeList);\n\t\t\t\t\t\t\t\t\t\tObject.assign(user, { attributes, preferredMFA });\n\t\t\t\t\t\t\t\t\t\treturn res(user);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{ bypassCache, clientMetadata }\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlogger.debug(\n\t\t\t\t\t\t\t\t\t`Unable to get the user data because the ${USER_ADMIN_SCOPE} ` +\n\t\t\t\t\t\t\t\t\t\t`is not in the scopes of the access token`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn res(user);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ clientMetadata }\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\tlogger.debug('Failed to sync cache info into memory', e);\n\t\t\t\t\treturn rej(e);\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate isOAuthInProgress(): boolean {\n\t\treturn this.oAuthFlowInProgress;\n\t}\n\n\t/**\n\t * Get current authenticated user\n\t * @param {CurrentUserOpts} - options for getting the current user\n\t * @return - A promise resolves to current authenticated CognitoUser if success\n\t */\n\tpublic async currentAuthenticatedUser(\n\t\tparams?: CurrentUserOpts\n\t): Promise {\n\t\tlogger.debug('getting current authenticated user');\n\t\tlet federatedUser = null;\n\t\ttry {\n\t\t\tawait this._storageSync;\n\t\t} catch (e) {\n\t\t\tlogger.debug('Failed to sync cache info into memory', e);\n\t\t\tthrow e;\n\t\t}\n\n\t\ttry {\n\t\t\tconst federatedInfo = JSON.parse(\n\t\t\t\tthis._storage.getItem('aws-amplify-federatedInfo')\n\t\t\t);\n\t\t\tif (federatedInfo) {\n\t\t\t\tfederatedUser = {\n\t\t\t\t\t...federatedInfo.user,\n\t\t\t\t\ttoken: federatedInfo.token,\n\t\t\t\t};\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tlogger.debug('cannot load federated user from auth storage');\n\t\t}\n\n\t\tif (federatedUser) {\n\t\t\tthis.user = federatedUser;\n\t\t\tlogger.debug('get current authenticated federated user', this.user);\n\t\t\treturn this.user;\n\t\t} else {\n\t\t\tlogger.debug('get current authenticated userpool user');\n\t\t\tlet user = null;\n\t\t\ttry {\n\t\t\t\tuser = await this.currentUserPoolUser(params);\n\t\t\t} catch (e) {\n\t\t\t\tif (e === 'No userPool') {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t'Cannot get the current user because the user pool is missing. ' +\n\t\t\t\t\t\t\t'Please make sure the Auth module is configured with a valid Cognito User Pool ID'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlogger.debug('The user is not authenticated by the error', e);\n\t\t\t\treturn Promise.reject('The user is not authenticated');\n\t\t\t}\n\t\t\tthis.user = user;\n\t\t\treturn this.user;\n\t\t}\n\t}\n\n\t/**\n\t * Get current user's session\n\t * @return - A promise resolves to session object if success\n\t */\n\tpublic currentSession(): Promise {\n\t\tconst that = this;\n\t\tlogger.debug('Getting current session');\n\t\t// Purposely not calling the reject method here because we don't need a console error\n\t\tif (!this.userPool) {\n\t\t\treturn Promise.reject();\n\t\t}\n\n\t\treturn new Promise((res, rej) => {\n\t\t\tthat\n\t\t\t\t.currentUserPoolUser()\n\t\t\t\t.then(user => {\n\t\t\t\t\tthat\n\t\t\t\t\t\t.userSession(user)\n\t\t\t\t\t\t.then(session => {\n\t\t\t\t\t\t\tres(session);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(e => {\n\t\t\t\t\t\t\tlogger.debug('Failed to get the current session', e);\n\t\t\t\t\t\t\trej(e);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\tlogger.debug('Failed to get the current user', e);\n\t\t\t\t\trej(e);\n\t\t\t\t\treturn;\n\t\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Get the corresponding user session\n\t * @param {Object} user - The CognitoUser object\n\t * @return - A promise resolves to the session\n\t */\n\tpublic userSession(user): Promise {\n\t\tif (!user) {\n\t\t\tlogger.debug('the user is null');\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.NoUserSession);\n\t\t}\n\t\tconst clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlogger.debug('Getting the session from this user:', user);\n\t\t\tuser.getSession(\n\t\t\t\t(err, session) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tlogger.debug('Failed to get the session from user', user);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogger.debug('Succeed to get the user session', session);\n\t\t\t\t\t\tresolve(session);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ clientMetadata }\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Get authenticated credentials of current user.\n\t * @return - A promise resolves to be current user's credentials\n\t */\n\tpublic async currentUserCredentials(): Promise {\n\t\tlogger.debug('Getting current user credentials');\n\n\t\ttry {\n\t\t\tawait this._storageSync;\n\t\t} catch (e) {\n\t\t\tlogger.debug('Failed to sync cache info into memory', e);\n\t\t\tthrow e;\n\t\t}\n\n\t\t// first to check whether there is federation info in the auth storage\n\t\tlet federatedInfo = null;\n\t\ttry {\n\t\t\tfederatedInfo = JSON.parse(\n\t\t\t\tthis._storage.getItem('aws-amplify-federatedInfo')\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tlogger.debug('failed to get or parse item aws-amplify-federatedInfo', e);\n\t\t}\n\n\t\tif (federatedInfo) {\n\t\t\t// refresh the jwt token here if necessary\n\t\t\treturn this.Credentials.refreshFederatedToken(federatedInfo);\n\t\t} else {\n\t\t\treturn this.currentSession()\n\t\t\t\t.then(session => {\n\t\t\t\t\tlogger.debug('getting session success', session);\n\t\t\t\t\treturn this.Credentials.set(session, 'session');\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tlogger.debug('getting session failed', error);\n\t\t\t\t\treturn this.Credentials.set(null, 'guest');\n\t\t\t\t});\n\t\t}\n\t}\n\n\tpublic currentCredentials(): Promise {\n\t\tlogger.debug('getting current credentials');\n\t\treturn this.Credentials.get();\n\t}\n\n\t/**\n\t * Initiate an attribute confirmation request\n\t * @param {Object} user - The CognitoUser\n\t * @param {Object} attr - The attributes to be verified\n\t * @return - A promise resolves to callback data if success\n\t */\n\tpublic verifyUserAttribute(\n\t\tuser: CognitoUser | any,\n\t\tattr: string,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.getAttributeVerificationCode(\n\t\t\t\tattr,\n\t\t\t\t{\n\t\t\t\t\tonSuccess() {\n\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t},\n\t\t\t\t\tonFailure(err) {\n\t\t\t\t\t\treturn reject(err);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tclientMetadata\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Confirm an attribute using a confirmation code\n\t * @param {Object} user - The CognitoUser\n\t * @param {Object} attr - The attribute to be verified\n\t * @param {String} code - The confirmation code\n\t * @return - A promise resolves to callback data if success\n\t */\n\tpublic verifyUserAttributeSubmit(\n\t\tuser: CognitoUser | any,\n\t\tattr: string,\n\t\tcode: string\n\t): Promise {\n\t\tif (!code) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyCode);\n\t\t}\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.verifyAttribute(attr, code, {\n\t\t\t\tonSuccess(data) {\n\t\t\t\t\tresolve(data);\n\t\t\t\t\treturn;\n\t\t\t\t},\n\t\t\t\tonFailure(err) {\n\t\t\t\t\treject(err);\n\t\t\t\t\treturn;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic verifyCurrentUserAttribute(attr: string): Promise {\n\t\tconst that = this;\n\t\treturn that\n\t\t\t.currentUserPoolUser()\n\t\t\t.then(user => that.verifyUserAttribute(user, attr));\n\t}\n\n\t/**\n\t * Confirm current user's attribute using a confirmation code\n\t * @param {Object} attr - The attribute to be verified\n\t * @param {String} code - The confirmation code\n\t * @return - A promise resolves to callback data if success\n\t */\n\tverifyCurrentUserAttributeSubmit(\n\t\tattr: string,\n\t\tcode: string\n\t): Promise {\n\t\tconst that = this;\n\t\treturn that\n\t\t\t.currentUserPoolUser()\n\t\t\t.then(user => that.verifyUserAttributeSubmit(user, attr, code));\n\t}\n\n\tprivate async cognitoIdentitySignOut(\n\t\topts: SignOutOpts,\n\t\tuser: CognitoUser | any\n\t) {\n\t\ttry {\n\t\t\tawait this._storageSync;\n\t\t} catch (e) {\n\t\t\tlogger.debug('Failed to sync cache info into memory', e);\n\t\t\tthrow e;\n\t\t}\n\n\t\tconst isSignedInHostedUI =\n\t\t\tthis._oAuthHandler &&\n\t\t\tthis._storage.getItem('amplify-signin-with-hostedUI') === 'true';\n\n\t\treturn new Promise((res, rej) => {\n\t\t\tif (opts && opts.global) {\n\t\t\t\tlogger.debug('user global sign out', user);\n\t\t\t\t// in order to use global signout\n\t\t\t\t// we must validate the user as an authenticated user by using getSession\n\t\t\t\tconst clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn\n\n\t\t\t\tuser.getSession(\n\t\t\t\t\t(err, result) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\tlogger.debug('failed to get the user session', err);\n\t\t\t\t\t\t\treturn rej(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tuser.globalSignOut({\n\t\t\t\t\t\t\tonSuccess: data => {\n\t\t\t\t\t\t\t\tlogger.debug('global sign out success');\n\t\t\t\t\t\t\t\tif (isSignedInHostedUI) {\n\t\t\t\t\t\t\t\t\tthis.oAuthSignOutRedirect(res, rej);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn res();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonFailure: err => {\n\t\t\t\t\t\t\t\tlogger.debug('global sign out failed', err);\n\t\t\t\t\t\t\t\treturn rej(err);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\t{ clientMetadata }\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlogger.debug('user sign out', user);\n\t\t\t\tuser.signOut();\n\t\t\t\tif (isSignedInHostedUI) {\n\t\t\t\t\tthis.oAuthSignOutRedirect(res, rej);\n\t\t\t\t} else {\n\t\t\t\t\treturn res();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate oAuthSignOutRedirect(\n\t\tresolve: () => void,\n\t\treject: (reason?: any) => void\n\t) {\n\t\tconst { isBrowser } = JS.browserOrNode();\n\n\t\tif (isBrowser) {\n\t\t\tthis.oAuthSignOutRedirectOrReject(reject);\n\t\t} else {\n\t\t\tthis.oAuthSignOutAndResolve(resolve);\n\t\t}\n\t}\n\n\tprivate oAuthSignOutAndResolve(resolve: () => void) {\n\t\tthis._oAuthHandler.signOut();\n\t\tresolve();\n\t}\n\n\tprivate oAuthSignOutRedirectOrReject(reject: (reason?: any) => void) {\n\t\tthis._oAuthHandler.signOut(); // this method redirects url\n\n\t\t// App should be redirected to another url otherwise it will reject\n\t\tsetTimeout(() => reject('Signout timeout fail'), 3000);\n\t}\n\n\t/**\n\t * Sign out method\n\t * @\n\t * @return - A promise resolved if success\n\t */\n\tpublic async signOut(opts?: SignOutOpts): Promise {\n\t\ttry {\n\t\t\tawait this.cleanCachedItems();\n\t\t} catch (e) {\n\t\t\tlogger.debug('failed to clear cached items');\n\t\t}\n\n\t\tif (this.userPool) {\n\t\t\tconst user = this.userPool.getCurrentUser();\n\t\t\tif (user) {\n\t\t\t\tawait this.cognitoIdentitySignOut(opts, user);\n\t\t\t} else {\n\t\t\t\tlogger.debug('no current Cognito user');\n\t\t\t}\n\t\t} else {\n\t\t\tlogger.debug('no Congito User pool');\n\t\t}\n\n\t\t/**\n\t\t * Note for future refactor - no reliable way to get username with\n\t\t * Cognito User Pools vs Identity when federating with Social Providers\n\t\t * This is why we need a well structured session object that can be inspected\n\t\t * and information passed back in the message below for Hub dispatch\n\t\t */\n\t\tdispatchAuthEvent('signOut', this.user, `A user has been signed out`);\n\t\tthis.user = null;\n\t}\n\n\tprivate async cleanCachedItems() {\n\t\t// clear cognito cached item\n\t\tawait this.Credentials.clear();\n\t}\n\n\t/**\n\t * Change a password for an authenticated user\n\t * @param {Object} user - The CognitoUser object\n\t * @param {String} oldPassword - the current password\n\t * @param {String} newPassword - the requested new password\n\t * @return - A promise resolves if success\n\t */\n\tpublic changePassword(\n\t\tuser: CognitoUser | any,\n\t\toldPassword: string,\n\t\tnewPassword: string,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise<'SUCCESS'> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.userSession(user).then(session => {\n\t\t\t\tuser.changePassword(\n\t\t\t\t\toldPassword,\n\t\t\t\t\tnewPassword,\n\t\t\t\t\t(err, data) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\tlogger.debug('change password failure', err);\n\t\t\t\t\t\t\treturn reject(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn resolve(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tclientMetadata\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Initiate a forgot password request\n\t * @param {String} username - the username to change password\n\t * @return - A promise resolves if success\n\t */\n\tpublic forgotPassword(\n\t\tusername: string,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\tif (!this.userPool) {\n\t\t\treturn this.rejectNoUserPool();\n\t\t}\n\t\tif (!username) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n\t\t}\n\n\t\tconst user = this.createCognitoUser(username);\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.forgotPassword(\n\t\t\t\t{\n\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t},\n\t\t\t\t\tonFailure: err => {\n\t\t\t\t\t\tlogger.debug('forgot password failure', err);\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'forgotPassword_failure',\n\t\t\t\t\t\t\terr,\n\t\t\t\t\t\t\t`${username} forgotPassword failed`\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t},\n\t\t\t\t\tinputVerificationCode: data => {\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'forgotPassword',\n\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t\t`${username} has initiated forgot password flow`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tclientMetadata\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Confirm a new password using a confirmation Code\n\t * @param {String} username - The username\n\t * @param {String} code - The confirmation code\n\t * @param {String} password - The new password\n\t * @return - A promise that resolves if success\n\t */\n\tpublic forgotPasswordSubmit(\n\t\tusername: string,\n\t\tcode: string,\n\t\tpassword: string,\n\t\tclientMetadata: ClientMetaData = this._config.clientMetadata\n\t): Promise {\n\t\tif (!this.userPool) {\n\t\t\treturn this.rejectNoUserPool();\n\t\t}\n\t\tif (!username) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n\t\t}\n\t\tif (!code) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyCode);\n\t\t}\n\t\tif (!password) {\n\t\t\treturn this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n\t\t}\n\n\t\tconst user = this.createCognitoUser(username);\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuser.confirmPassword(\n\t\t\t\tcode,\n\t\t\t\tpassword,\n\t\t\t\t{\n\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'forgotPasswordSubmit',\n\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t\t`${username} forgotPasswordSubmit successful`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t},\n\t\t\t\t\tonFailure: err => {\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'forgotPasswordSubmit_failure',\n\t\t\t\t\t\t\terr,\n\t\t\t\t\t\t\t`${username} forgotPasswordSubmit failed`\n\t\t\t\t\t\t);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tclientMetadata\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Get user information\n\t * @async\n\t * @return {Object }- current User's information\n\t */\n\tpublic async currentUserInfo() {\n\t\tconst source = this.Credentials.getCredSource();\n\n\t\tif (!source || source === 'aws' || source === 'userPool') {\n\t\t\tconst user = await this.currentUserPoolUser().catch(err =>\n\t\t\t\tlogger.debug(err)\n\t\t\t);\n\t\t\tif (!user) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst attributes = await this.userAttributes(user);\n\t\t\t\tconst userAttrs: object = this.attributesToObject(attributes);\n\t\t\t\tlet credentials = null;\n\t\t\t\ttry {\n\t\t\t\t\tcredentials = await this.currentCredentials();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tlogger.debug(\n\t\t\t\t\t\t'Failed to retrieve credentials while getting current user info',\n\t\t\t\t\t\te\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst info = {\n\t\t\t\t\tid: credentials ? credentials.identityId : undefined,\n\t\t\t\t\tusername: user.getUsername(),\n\t\t\t\t\tattributes: userAttrs,\n\t\t\t\t};\n\t\t\t\treturn info;\n\t\t\t} catch (err) {\n\t\t\t\tlogger.debug('currentUserInfo error', err);\n\t\t\t\treturn {};\n\t\t\t}\n\t\t}\n\n\t\tif (source === 'federated') {\n\t\t\tconst user = this.user;\n\t\t\treturn user ? user : {};\n\t\t}\n\t}\n\n\tpublic async federatedSignIn(\n\t\toptions?: FederatedSignInOptions\n\t): Promise;\n\tpublic async federatedSignIn(\n\t\tprovider: LegacyProvider,\n\t\tresponse: FederatedResponse,\n\t\tuser: FederatedUser\n\t): Promise;\n\tpublic async federatedSignIn(\n\t\toptions?: FederatedSignInOptionsCustom\n\t): Promise;\n\tpublic async federatedSignIn(\n\t\tproviderOrOptions:\n\t\t\t| LegacyProvider\n\t\t\t| FederatedSignInOptions\n\t\t\t| FederatedSignInOptionsCustom,\n\t\tresponse?: FederatedResponse,\n\t\tuser?: FederatedUser\n\t): Promise {\n\t\tif (!this._config.identityPoolId && !this._config.userPoolId) {\n\t\t\tthrow new Error(\n\t\t\t\t`Federation requires either a User Pool or Identity Pool in config`\n\t\t\t);\n\t\t}\n\n\t\t// Ensure backwards compatability\n\t\tif (typeof providerOrOptions === 'undefined') {\n\t\t\tif (this._config.identityPoolId && !this._config.userPoolId) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Federation with Identity Pools requires tokens passed as arguments`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tisFederatedSignInOptions(providerOrOptions) ||\n\t\t\tisFederatedSignInOptionsCustom(providerOrOptions) ||\n\t\t\thasCustomState(providerOrOptions) ||\n\t\t\ttypeof providerOrOptions === 'undefined'\n\t\t) {\n\t\t\tconst options = providerOrOptions || {\n\t\t\t\tprovider: CognitoHostedUIIdentityProvider.Cognito,\n\t\t\t};\n\t\t\tconst provider = isFederatedSignInOptions(options)\n\t\t\t\t? options.provider\n\t\t\t\t: (options as FederatedSignInOptionsCustom).customProvider;\n\n\t\t\tconst customState = isFederatedSignInOptions(options)\n\t\t\t\t? options.customState\n\t\t\t\t: (options as FederatedSignInOptionsCustom).customState;\n\n\t\t\tif (this._config.userPoolId) {\n\t\t\t\tconst client_id = isCognitoHostedOpts(this._config.oauth)\n\t\t\t\t\t? this._config.userPoolWebClientId\n\t\t\t\t\t: this._config.oauth.clientID;\n\t\t\t\t/*Note: Invenstigate automatically adding trailing slash */\n\t\t\t\tconst redirect_uri = isCognitoHostedOpts(this._config.oauth)\n\t\t\t\t\t? this._config.oauth.redirectSignIn\n\t\t\t\t\t: this._config.oauth.redirectUri;\n\n\t\t\t\tthis._oAuthHandler.oauthSignIn(\n\t\t\t\t\tthis._config.oauth.responseType,\n\t\t\t\t\tthis._config.oauth.domain,\n\t\t\t\t\tredirect_uri,\n\t\t\t\t\tclient_id,\n\t\t\t\t\tprovider,\n\t\t\t\t\tcustomState\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tconst provider = providerOrOptions;\n\t\t\t// To check if the user is already logged in\n\t\t\ttry {\n\t\t\t\tconst loggedInUser = JSON.stringify(\n\t\t\t\t\tJSON.parse(this._storage.getItem('aws-amplify-federatedInfo')).user\n\t\t\t\t);\n\t\t\t\tif (loggedInUser) {\n\t\t\t\t\tlogger.warn(`There is already a signed in user: ${loggedInUser} in your app.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tYou should not call Auth.federatedSignIn method again as it may cause unexpected behavior.`);\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tconst { token, identity_id, expires_at } = response;\n\t\t\t// Because this.Credentials.set would update the user info with identity id\n\t\t\t// So we need to retrieve the user again.\n\t\t\tconst credentials = await this.Credentials.set(\n\t\t\t\t{ provider, token, identity_id, user, expires_at },\n\t\t\t\t'federation'\n\t\t\t);\n\t\t\tconst currentUser = await this.currentAuthenticatedUser();\n\t\t\tdispatchAuthEvent(\n\t\t\t\t'signIn',\n\t\t\t\tcurrentUser,\n\t\t\t\t`A user ${currentUser.username} has been signed in`\n\t\t\t);\n\t\t\tlogger.debug('federated sign in credentials', credentials);\n\t\t\treturn credentials;\n\t\t}\n\t}\n\n\t/**\n\t * Used to complete the OAuth flow with or without the Cognito Hosted UI\n\t * @param {String} URL - optional parameter for customers to pass in the response URL\n\t */\n\tprivate async _handleAuthResponse(URL?: string) {\n\t\tif (this.oAuthFlowInProgress) {\n\t\t\tlogger.debug(`Skipping URL ${URL} current flow in progress`);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.oAuthFlowInProgress = true;\n\t\t\tif (!this._config.userPoolId) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`OAuth responses require a User Pool defined in config`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tdispatchAuthEvent(\n\t\t\t\t'parsingCallbackUrl',\n\t\t\t\t{ url: URL },\n\t\t\t\t`The callback url is being parsed`\n\t\t\t);\n\n\t\t\tconst currentUrl =\n\t\t\t\tURL || (JS.browserOrNode().isBrowser ? window.location.href : '');\n\n\t\t\tconst hasCodeOrError = !!(parse(currentUrl).query || '')\n\t\t\t\t.split('&')\n\t\t\t\t.map(entry => entry.split('='))\n\t\t\t\t.find(([k]) => k === 'code' || k === 'error');\n\n\t\t\tconst hasTokenOrError = !!(parse(currentUrl).hash || '#')\n\t\t\t\t.substr(1)\n\t\t\t\t.split('&')\n\t\t\t\t.map(entry => entry.split('='))\n\t\t\t\t.find(([k]) => k === 'access_token' || k === 'error');\n\n\t\t\tif (hasCodeOrError || hasTokenOrError) {\n\t\t\t\tthis._storage.setItem('amplify-redirected-from-hosted-ui', 'true');\n\t\t\t\ttry {\n\t\t\t\t\tconst {\n\t\t\t\t\t\taccessToken,\n\t\t\t\t\t\tidToken,\n\t\t\t\t\t\trefreshToken,\n\t\t\t\t\t\tstate,\n\t\t\t\t\t} = await this._oAuthHandler.handleAuthResponse(currentUrl);\n\t\t\t\t\tconst session = new CognitoUserSession({\n\t\t\t\t\t\tIdToken: new CognitoIdToken({ IdToken: idToken }),\n\t\t\t\t\t\tRefreshToken: new CognitoRefreshToken({\n\t\t\t\t\t\t\tRefreshToken: refreshToken,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tAccessToken: new CognitoAccessToken({\n\t\t\t\t\t\t\tAccessToken: accessToken,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\n\t\t\t\t\tlet credentials;\n\t\t\t\t\t// Get AWS Credentials & store if Identity Pool is defined\n\t\t\t\t\tif (this._config.identityPoolId) {\n\t\t\t\t\t\tcredentials = await this.Credentials.set(session, 'session');\n\t\t\t\t\t\tlogger.debug('AWS credentials', credentials);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* \n\t\t\t\tPrior to the request we do sign the custom state along with the state we set. This check will verify\n\t\t\t\tif there is a dash indicated when setting custom state from the request. If a dash is contained\n\t\t\t\tthen there is custom state present on the state string.\n\t\t\t\t*/\n\t\t\t\t\tconst isCustomStateIncluded = /-/.test(state);\n\n\t\t\t\t\t/*\n\t\t\t\tThe following is to create a user for the Cognito Identity SDK to store the tokens\n\t\t\t\tWhen we remove this SDK later that logic will have to be centralized in our new version\n\t\t\t\t*/\n\t\t\t\t\t//#region\n\t\t\t\t\tconst currentUser = this.createCognitoUser(\n\t\t\t\t\t\tsession.getIdToken().decodePayload()['cognito:username']\n\t\t\t\t\t);\n\n\t\t\t\t\t// This calls cacheTokens() in Cognito SDK\n\t\t\t\t\tcurrentUser.setSignInUserSession(session);\n\n\t\t\t\t\tif (window && typeof window.history !== 'undefined') {\n\t\t\t\t\t\twindow.history.replaceState(\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t(this._config.oauth as AwsCognitoOAuthOpts).redirectSignIn\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t'signIn',\n\t\t\t\t\t\tcurrentUser,\n\t\t\t\t\t\t`A user ${currentUser.getUsername()} has been signed in`\n\t\t\t\t\t);\n\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t'cognitoHostedUI',\n\t\t\t\t\t\tcurrentUser,\n\t\t\t\t\t\t`A user ${currentUser.getUsername()} has been signed in via Cognito Hosted UI`\n\t\t\t\t\t);\n\n\t\t\t\t\tif (isCustomStateIncluded) {\n\t\t\t\t\t\tconst customState = state\n\t\t\t\t\t\t\t.split('-')\n\t\t\t\t\t\t\t.splice(1)\n\t\t\t\t\t\t\t.join('-');\n\n\t\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t\t'customOAuthState',\n\t\t\t\t\t\t\turlSafeDecode(customState),\n\t\t\t\t\t\t\t`State for user ${currentUser.getUsername()}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//#endregion\n\n\t\t\t\t\treturn credentials;\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogger.debug('Error in cognito hosted auth response', err);\n\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t'signIn_failure',\n\t\t\t\t\t\terr,\n\t\t\t\t\t\t`The OAuth response flow failed`\n\t\t\t\t\t);\n\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t'cognitoHostedUI_failure',\n\t\t\t\t\t\terr,\n\t\t\t\t\t\t`A failure occurred when returning to the Cognito Hosted UI`\n\t\t\t\t\t);\n\t\t\t\t\tdispatchAuthEvent(\n\t\t\t\t\t\t'customState_failure',\n\t\t\t\t\t\terr,\n\t\t\t\t\t\t`A failure occurred when returning state`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.oAuthFlowInProgress = false;\n\t\t}\n\t}\n\n\t/**\n\t * Compact version of credentials\n\t * @param {Object} credentials\n\t * @return {Object} - Credentials\n\t */\n\tpublic essentialCredentials(credentials): ICredentials {\n\t\treturn {\n\t\t\taccessKeyId: credentials.accessKeyId,\n\t\t\tsessionToken: credentials.sessionToken,\n\t\t\tsecretAccessKey: credentials.secretAccessKey,\n\t\t\tidentityId: credentials.identityId,\n\t\t\tauthenticated: credentials.authenticated,\n\t\t};\n\t}\n\n\tprivate attributesToObject(attributes) {\n\t\tconst obj = {};\n\t\tif (attributes) {\n\t\t\tattributes.map(attribute => {\n\t\t\t\tif (\n\t\t\t\t\tattribute.Name === 'email_verified' ||\n\t\t\t\t\tattribute.Name === 'phone_number_verified'\n\t\t\t\t) {\n\t\t\t\t\tobj[attribute.Name] =\n\t\t\t\t\t\tattribute.Value === 'true' || attribute.Value === true;\n\t\t\t\t} else {\n\t\t\t\t\tobj[attribute.Name] = attribute.Value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn obj;\n\t}\n\n\tprivate createCognitoUser(username: string): CognitoUser {\n\t\tconst userData: ICognitoUserData = {\n\t\t\tUsername: username,\n\t\t\tPool: this.userPool,\n\t\t};\n\t\tuserData.Storage = this._storage;\n\n\t\tconst { authenticationFlowType } = this._config;\n\n\t\tconst user = new CognitoUser(userData);\n\t\tif (authenticationFlowType) {\n\t\t\tuser.setAuthenticationFlowType(authenticationFlowType);\n\t\t}\n\t\treturn user;\n\t}\n\n\tprivate _isValidAuthStorage(obj) {\n\t\t// We need to check if the obj has the functions of Storage\n\t\treturn (\n\t\t\t!!obj &&\n\t\t\ttypeof obj.getItem === 'function' &&\n\t\t\ttypeof obj.setItem === 'function' &&\n\t\t\ttypeof obj.removeItem === 'function' &&\n\t\t\ttypeof obj.clear === 'function'\n\t\t);\n\t}\n\n\tprivate noUserPoolErrorHandler(config: AuthOptions): AuthErrorTypes {\n\t\tif (config) {\n\t\t\tif (!config.userPoolId || !config.identityPoolId) {\n\t\t\t\treturn AuthErrorTypes.MissingAuthConfig;\n\t\t\t}\n\t\t}\n\t\treturn AuthErrorTypes.NoConfig;\n\t}\n\n\tprivate rejectAuthError(type: AuthErrorTypes): Promise {\n\t\treturn Promise.reject(new AuthError(type));\n\t}\n\n\tprivate rejectNoUserPool(): Promise {\n\t\tconst type = this.noUserPoolErrorHandler(this._config);\n\t\treturn Promise.reject(new NoUserPoolError(type));\n\t}\n}\n\nexport const Auth = new AuthClass(null);\n\nAmplify.register(Auth);\n","/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nimport { JS } from '@aws-amplify/core';\n\nexport default callback => {\n\tif (JS.browserOrNode().isBrowser && window.location) {\n\t\tconst url = window.location.href;\n\n\t\tcallback({ url });\n\t} else if (JS.browserOrNode().isNode) {\n\t\t// continue building on ssr\n\t\t() => {}; // noop\n\t} else {\n\t\tthrow new Error('Not supported');\n\t}\n};\n","export enum AuthErrorStrings {\n\tDEFAULT_MSG = 'Authentication Error',\n\tEMPTY_USERNAME = 'Username cannot be empty',\n\tINVALID_USERNAME = 'The username should either be a string or one of the sign in types',\n\tEMPTY_PASSWORD = 'Password cannot be empty',\n\tEMPTY_CODE = 'Confirmation code cannot be empty',\n\tSIGN_UP_ERROR = 'Error creating account',\n\tNO_MFA = 'No valid MFA method provided',\n\tINVALID_MFA = 'Invalid MFA type',\n\tEMPTY_CHALLENGE = 'Challenge response cannot be empty',\n\tNO_USER_SESSION = 'Failed to get the session because the user is empty',\n}\n","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport { Auth } from './Auth';\r\nimport { CognitoHostedUIIdentityProvider } from './types/Auth';\r\nimport {\r\n\tCognitoUser,\r\n\tCookieStorage,\r\n\tappendToCognitoUserAgent,\r\n} from 'amazon-cognito-identity-js';\r\nimport { AuthErrorStrings } from './common/AuthErrorStrings';\r\n\r\n/**\r\n * @deprecated use named import\r\n */\r\nexport default Auth;\r\nexport {\r\n\tAuth,\r\n\tCognitoUser,\r\n\tCookieStorage,\r\n\tCognitoHostedUIIdentityProvider,\r\n\tappendToCognitoUserAgent,\r\n\tAuthErrorStrings,\r\n};\r\n","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport { CacheConfig, CacheItem, CacheItemOptions } from '../types';\r\nimport { StorageHelper } from '@aws-amplify/core';\r\n/**\r\n * Default cache config\r\n */\r\nexport const defaultConfig: CacheConfig = {\r\n\tkeyPrefix: 'aws-amplify-cache',\r\n\tcapacityInBytes: 1048576, // 1MB\r\n\titemMaxSize: 210000, // about 200kb\r\n\tdefaultTTL: 259200000, // about 3 days\r\n\tdefaultPriority: 5,\r\n\twarningThreshold: 0.8,\r\n\t// the storage helper will check if localStorage exists,\r\n\t// if not, will use a in-memory object instead\r\n\tstorage: new StorageHelper().getStorage(),\r\n};\r\n\r\n/**\r\n * return the byte size of the string\r\n * @param str\r\n */\r\nexport function getByteLength(str: string): number {\r\n\tlet ret: number = 0;\r\n\tret = str.length;\r\n\r\n\tfor (let i = str.length; i >= 0; i -= 1) {\r\n\t\tconst charCode: number = str.charCodeAt(i);\r\n\t\tif (charCode > 0x7f && charCode <= 0x7ff) {\r\n\t\t\tret += 1;\r\n\t\t} else if (charCode > 0x7ff && charCode <= 0xffff) {\r\n\t\t\tret += 2;\r\n\t\t}\r\n\t\t// trail surrogate\r\n\t\tif (charCode >= 0xdc00 && charCode <= 0xdfff) {\r\n\t\t\ti -= 1;\r\n\t\t}\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\n/**\r\n * get current time\r\n */\r\nexport function getCurrTime(): number {\r\n\tconst currTime = new Date();\r\n\treturn currTime.getTime();\r\n}\r\n\r\n/**\r\n * check if passed value is an integer\r\n */\r\nexport function isInteger(value): boolean {\r\n\tif (Number.isInteger) {\r\n\t\treturn Number.isInteger(value);\r\n\t}\r\n\r\n\treturn _isInteger(value);\r\n}\r\n\r\nfunction _isInteger(value): boolean {\r\n\treturn (\r\n\t\ttypeof value === 'number' && isFinite(value) && Math.floor(value) === value\r\n\t);\r\n}\r\n\r\n/**\r\n * provide an object as the in-memory cache\r\n */\r\nlet store = {};\r\nexport class CacheObject {\r\n\tstatic clear(): void {\r\n\t\tstore = {};\r\n\t}\r\n\r\n\tstatic getItem(key: string): string | null {\r\n\t\treturn store[key] || null;\r\n\t}\r\n\r\n\tstatic setItem(key: string, value: string): void {\r\n\t\tstore[key] = value;\r\n\t}\r\n\r\n\tstatic removeItem(key: string): void {\r\n\t\tdelete store[key];\r\n\t}\r\n}\r\n","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport { getCurrTime, getByteLength, defaultConfig, isInteger } from './Utils';\r\n\r\nimport { CacheConfig, CacheItem, CacheItemOptions } from './types';\r\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\r\n\r\nconst logger = new Logger('StorageCache');\r\n\r\n/**\r\n * Initialization of the cache\r\n *\r\n */\r\nexport class StorageCache {\r\n\tprotected cacheCurSizeKey: string;\r\n\tprotected config: CacheConfig;\r\n\r\n\t/**\r\n\t * Initialize the cache\r\n\t * @param config - the configuration of the cache\r\n\t */\r\n\tconstructor(config: CacheConfig) {\r\n\t\tthis.config = Object.assign({}, config);\r\n\t\tthis.cacheCurSizeKey = this.config.keyPrefix + 'CurSize';\r\n\t\tthis.checkConfig();\r\n\t}\r\n\r\n\tpublic getModuleName() {\r\n\t\treturn 'Cache';\r\n\t}\r\n\r\n\tprivate checkConfig(): void {\r\n\t\t// check configuration\r\n\t\tif (!isInteger(this.config.capacityInBytes)) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'Invalid parameter: capacityInBytes. It should be an Integer. Setting back to default.'\r\n\t\t\t);\r\n\t\t\tthis.config.capacityInBytes = defaultConfig.capacityInBytes;\r\n\t\t}\r\n\r\n\t\tif (!isInteger(this.config.itemMaxSize)) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'Invalid parameter: itemMaxSize. It should be an Integer. Setting back to default.'\r\n\t\t\t);\r\n\t\t\tthis.config.itemMaxSize = defaultConfig.itemMaxSize;\r\n\t\t}\r\n\r\n\t\tif (!isInteger(this.config.defaultTTL)) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'Invalid parameter: defaultTTL. It should be an Integer. Setting back to default.'\r\n\t\t\t);\r\n\t\t\tthis.config.defaultTTL = defaultConfig.defaultTTL;\r\n\t\t}\r\n\r\n\t\tif (!isInteger(this.config.defaultPriority)) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'Invalid parameter: defaultPriority. It should be an Integer. Setting back to default.'\r\n\t\t\t);\r\n\t\t\tthis.config.defaultPriority = defaultConfig.defaultPriority;\r\n\t\t}\r\n\r\n\t\tif (this.config.itemMaxSize > this.config.capacityInBytes) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'Invalid parameter: itemMaxSize. It should be smaller than capacityInBytes. Setting back to default.'\r\n\t\t\t);\r\n\t\t\tthis.config.itemMaxSize = defaultConfig.itemMaxSize;\r\n\t\t}\r\n\r\n\t\tif (this.config.defaultPriority > 5 || this.config.defaultPriority < 1) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'Invalid parameter: defaultPriority. It should be between 1 and 5. Setting back to default.'\r\n\t\t\t);\r\n\t\t\tthis.config.defaultPriority = defaultConfig.defaultPriority;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tNumber(this.config.warningThreshold) > 1 ||\r\n\t\t\tNumber(this.config.warningThreshold) < 0\r\n\t\t) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'Invalid parameter: warningThreshold. It should be between 0 and 1. Setting back to default.'\r\n\t\t\t);\r\n\t\t\tthis.config.warningThreshold = defaultConfig.warningThreshold;\r\n\t\t}\r\n\t\t// set 5MB limit\r\n\t\tconst cacheLimit: number = 5 * 1024 * 1024;\r\n\t\tif (this.config.capacityInBytes > cacheLimit) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'Cache Capacity should be less than 5MB. Setting back to default. Setting back to default.'\r\n\t\t\t);\r\n\t\t\tthis.config.capacityInBytes = defaultConfig.capacityInBytes;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * produce a JSON object with meta-data and data value\r\n\t * @param value - the value of the item\r\n\t * @param options - optional, the specified meta-data\r\n\t *\r\n\t * @return - the item which has the meta-data and the value\r\n\t */\r\n\tprotected fillCacheItem(\r\n\t\tkey: string,\r\n\t\tvalue: object | number | string | boolean,\r\n\t\toptions: CacheItemOptions\r\n\t): CacheItem {\r\n\t\tconst ret: CacheItem = {\r\n\t\t\tkey,\r\n\t\t\tdata: value,\r\n\t\t\ttimestamp: getCurrTime(),\r\n\t\t\tvisitedTime: getCurrTime(),\r\n\t\t\tpriority: options.priority,\r\n\t\t\texpires: options.expires,\r\n\t\t\ttype: typeof value,\r\n\t\t\tbyteSize: 0,\r\n\t\t};\r\n\r\n\t\tret.byteSize = getByteLength(JSON.stringify(ret));\r\n\r\n\t\t// for accurate size\r\n\t\tret.byteSize = getByteLength(JSON.stringify(ret));\r\n\t\treturn ret;\r\n\t}\r\n\r\n\t/**\r\n\t * set cache with customized configuration\r\n\t * @param config - customized configuration\r\n\t *\r\n\t * @return - the current configuration\r\n\t */\r\n\tpublic configure(config?: CacheConfig): CacheConfig {\r\n\t\tif (!config) {\r\n\t\t\treturn this.config;\r\n\t\t}\r\n\t\tif (config.keyPrefix) {\r\n\t\t\tlogger.warn(`Don't try to configure keyPrefix!`);\r\n\t\t}\r\n\r\n\t\tthis.config = Object.assign({}, this.config, config, config.Cache);\r\n\t\tthis.checkConfig();\r\n\t\treturn this.config;\r\n\t}\r\n}\r\n\r\n/**\r\n * @deprecated use named import\r\n */\r\nexport default StorageCache;\r\n","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport { defaultConfig, getCurrTime } from './Utils';\r\n\r\nimport { StorageCache } from './StorageCache';\r\nimport { ICache, CacheConfig, CacheItem, CacheItemOptions } from './types';\r\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\r\n\r\nconst logger = new Logger('Cache');\r\n\r\n/**\r\n * Customized storage based on the SessionStorage or LocalStorage with LRU implemented\r\n */\r\nexport class BrowserStorageCacheClass extends StorageCache implements ICache {\r\n\t/**\r\n\t * initialize the cache\r\n\t * @param config - the configuration of the cache\r\n\t */\r\n\tconstructor(config?: CacheConfig) {\r\n\t\tconst cacheConfig = config\r\n\t\t\t? Object.assign({}, defaultConfig, config)\r\n\t\t\t: defaultConfig;\r\n\t\tsuper(cacheConfig);\r\n\t\tthis.config.storage = cacheConfig.storage;\r\n\t\tthis.getItem = this.getItem.bind(this);\r\n\t\tthis.setItem = this.setItem.bind(this);\r\n\t\tthis.removeItem = this.removeItem.bind(this);\r\n\t}\r\n\r\n\t/**\r\n\t * decrease current size of the cache\r\n\t *\r\n\t * @private\r\n\t * @param amount - the amount of the cache size which needs to be decreased\r\n\t */\r\n\tprivate _decreaseCurSizeInBytes(amount: number): void {\r\n\t\tconst curSize: number = this.getCacheCurSize();\r\n\t\tthis.config.storage.setItem(\r\n\t\t\tthis.cacheCurSizeKey,\r\n\t\t\t(curSize - amount).toString()\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * increase current size of the cache\r\n\t *\r\n\t * @private\r\n\t * @param amount - the amount of the cache szie which need to be increased\r\n\t */\r\n\tprivate _increaseCurSizeInBytes(amount: number): void {\r\n\t\tconst curSize: number = this.getCacheCurSize();\r\n\t\tthis.config.storage.setItem(\r\n\t\t\tthis.cacheCurSizeKey,\r\n\t\t\t(curSize + amount).toString()\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * update the visited time if item has been visited\r\n\t *\r\n\t * @private\r\n\t * @param item - the item which need to be refreshed\r\n\t * @param prefixedKey - the key of the item\r\n\t *\r\n\t * @return the refreshed item\r\n\t */\r\n\tprivate _refreshItem(item: CacheItem, prefixedKey: string): CacheItem {\r\n\t\titem.visitedTime = getCurrTime();\r\n\t\tthis.config.storage.setItem(prefixedKey, JSON.stringify(item));\r\n\t\treturn item;\r\n\t}\r\n\r\n\t/**\r\n\t * check wether item is expired\r\n\t *\r\n\t * @private\r\n\t * @param key - the key of the item\r\n\t *\r\n\t * @return true if the item is expired.\r\n\t */\r\n\tprivate _isExpired(key: string): boolean {\r\n\t\tconst text: string | null = this.config.storage.getItem(key);\r\n\t\tconst item: CacheItem = JSON.parse(text);\r\n\t\tif (getCurrTime() >= item.expires) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * delete item from cache\r\n\t *\r\n\t * @private\r\n\t * @param prefixedKey - the key of the item\r\n\t * @param size - optional, the byte size of the item\r\n\t */\r\n\tprivate _removeItem(prefixedKey: string, size?: number): void {\r\n\t\tconst itemSize: number = size\r\n\t\t\t? size\r\n\t\t\t: JSON.parse(this.config.storage.getItem(prefixedKey)).byteSize;\r\n\t\tthis._decreaseCurSizeInBytes(itemSize);\r\n\t\t// remove the cache item\r\n\t\tthis.config.storage.removeItem(prefixedKey);\r\n\t}\r\n\r\n\t/**\r\n\t * put item into cache\r\n\t *\r\n\t * @private\r\n\t * @param prefixedKey - the key of the item\r\n\t * @param itemData - the value of the item\r\n\t * @param itemSizeInBytes - the byte size of the item\r\n\t */\r\n\tprivate _setItem(prefixedKey: string, item: CacheItem): void {\r\n\t\t// update the cache size\r\n\t\tthis._increaseCurSizeInBytes(item.byteSize);\r\n\r\n\t\ttry {\r\n\t\t\tthis.config.storage.setItem(prefixedKey, JSON.stringify(item));\r\n\t\t} catch (setItemErr) {\r\n\t\t\t// if failed, we need to rollback the cache size\r\n\t\t\tthis._decreaseCurSizeInBytes(item.byteSize);\r\n\t\t\tlogger.error(`Failed to set item ${setItemErr}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * total space needed when poping out items\r\n\t *\r\n\t * @private\r\n\t * @param itemSize\r\n\t *\r\n\t * @return total space needed\r\n\t */\r\n\tprivate _sizeToPop(itemSize: number): number {\r\n\t\tconst spaceItemNeed =\r\n\t\t\tthis.getCacheCurSize() + itemSize - this.config.capacityInBytes;\r\n\t\tconst cacheThresholdSpace =\r\n\t\t\t(1 - this.config.warningThreshold) * this.config.capacityInBytes;\r\n\t\treturn spaceItemNeed > cacheThresholdSpace\r\n\t\t\t? spaceItemNeed\r\n\t\t\t: cacheThresholdSpace;\r\n\t}\r\n\r\n\t/**\r\n\t * see whether cache is full\r\n\t *\r\n\t * @private\r\n\t * @param itemSize\r\n\t *\r\n\t * @return true if cache is full\r\n\t */\r\n\tprivate _isCacheFull(itemSize: number): boolean {\r\n\t\treturn itemSize + this.getCacheCurSize() > this.config.capacityInBytes;\r\n\t}\r\n\r\n\t/**\r\n\t * scan the storage and find out all the keys owned by this cache\r\n\t * also clean the expired keys while scanning\r\n\t *\r\n\t * @private\r\n\t *\r\n\t * @return array of keys\r\n\t */\r\n\tprivate _findValidKeys(): string[] {\r\n\t\tconst keys: string[] = [];\r\n\t\tconst keyInCache: string[] = [];\r\n\t\t// get all keys in Storage\r\n\t\tfor (let i = 0; i < this.config.storage.length; i += 1) {\r\n\t\t\tkeyInCache.push(this.config.storage.key(i));\r\n\t\t}\r\n\r\n\t\t// find those items which belong to our cache and also clean those expired items\r\n\t\tfor (let i = 0; i < keyInCache.length; i += 1) {\r\n\t\t\tconst key: string = keyInCache[i];\r\n\t\t\tif (\r\n\t\t\t\tkey.indexOf(this.config.keyPrefix) === 0 &&\r\n\t\t\t\tkey !== this.cacheCurSizeKey\r\n\t\t\t) {\r\n\t\t\t\tif (this._isExpired(key)) {\r\n\t\t\t\t\tthis._removeItem(key);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tkeys.push(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn keys;\r\n\t}\r\n\r\n\t/**\r\n\t * get all the items we have, sort them by their priority,\r\n\t * if priority is same, sort them by their last visited time\r\n\t * pop out items from the low priority (5 is the lowest)\r\n\t *\r\n\t * @private\r\n\t * @param keys - all the keys in this cache\r\n\t * @param sizeToPop - the total size of the items which needed to be poped out\r\n\t */\r\n\tprivate _popOutItems(keys: string[], sizeToPop: number): void {\r\n\t\tconst items: CacheItem[] = [];\r\n\t\tlet remainedSize: number = sizeToPop;\r\n\t\t// get the items from Storage\r\n\t\tfor (let i = 0; i < keys.length; i += 1) {\r\n\t\t\tconst val: string | null = this.config.storage.getItem(keys[i]);\r\n\t\t\tif (val != null) {\r\n\t\t\t\tconst item: CacheItem = JSON.parse(val);\r\n\t\t\t\titems.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// first compare priority\r\n\t\t// then compare visited time\r\n\t\titems.sort((a, b) => {\r\n\t\t\tif (a.priority > b.priority) {\r\n\t\t\t\treturn -1;\r\n\t\t\t} else if (a.priority < b.priority) {\r\n\t\t\t\treturn 1;\r\n\t\t\t} else {\r\n\t\t\t\tif (a.visitedTime < b.visitedTime) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else return 1;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfor (let i = 0; i < items.length; i += 1) {\r\n\t\t\t// pop out items until we have enough room for new item\r\n\t\t\tthis._removeItem(items[i].key, items[i].byteSize);\r\n\t\t\tremainedSize -= items[i].byteSize;\r\n\t\t\tif (remainedSize <= 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Set item into cache. You can put number, string, boolean or object.\r\n\t * The cache will first check whether has the same key.\r\n\t * If it has, it will delete the old item and then put the new item in\r\n\t * The cache will pop out items if it is full\r\n\t * You can specify the cache item options. The cache will abort and output a warning:\r\n\t * If the key is invalid\r\n\t * If the size of the item exceeds itemMaxSize.\r\n\t * If the value is undefined\r\n\t * If incorrect cache item configuration\r\n\t * If error happened with browser storage\r\n\t *\r\n\t * @param key - the key of the item\r\n\t * @param value - the value of the item\r\n\t * @param {Object} [options] - optional, the specified meta-data\r\n\t */\r\n\tpublic setItem(\r\n\t\tkey: string,\r\n\t\tvalue: object | number | string | boolean,\r\n\t\toptions?: CacheItemOptions\r\n\t): void {\r\n\t\tlogger.log(\r\n\t\t\t`Set item: key is ${key}, value is ${value} with options: ${options}`\r\n\t\t);\r\n\t\tconst prefixedKey: string = this.config.keyPrefix + key;\r\n\t\t// invalid keys\r\n\t\tif (\r\n\t\t\tprefixedKey === this.config.keyPrefix ||\r\n\t\t\tprefixedKey === this.cacheCurSizeKey\r\n\t\t) {\r\n\t\t\tlogger.warn(`Invalid key: should not be empty or 'CurSize'`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (typeof value === 'undefined') {\r\n\t\t\tlogger.warn(`The value of item should not be undefined!`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cacheItemOptions: CacheItemOptions = {\r\n\t\t\tpriority:\r\n\t\t\t\toptions && options.priority !== undefined\r\n\t\t\t\t\t? options.priority\r\n\t\t\t\t\t: this.config.defaultPriority,\r\n\t\t\texpires:\r\n\t\t\t\toptions && options.expires !== undefined\r\n\t\t\t\t\t? options.expires\r\n\t\t\t\t\t: this.config.defaultTTL + getCurrTime(),\r\n\t\t};\r\n\r\n\t\tif (cacheItemOptions.priority < 1 || cacheItemOptions.priority > 5) {\r\n\t\t\tlogger.warn(\r\n\t\t\t\t`Invalid parameter: priority due to out or range. It should be within 1 and 5.`\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst item: CacheItem = this.fillCacheItem(\r\n\t\t\tprefixedKey,\r\n\t\t\tvalue,\r\n\t\t\tcacheItemOptions\r\n\t\t);\r\n\r\n\t\t// check wether this item is too big;\r\n\t\tif (item.byteSize > this.config.itemMaxSize) {\r\n\t\t\tlogger.warn(\r\n\t\t\t\t`Item with key: ${key} you are trying to put into is too big!`\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// first look into the storage, if it exists, delete it.\r\n\t\t\tconst val: string | null = this.config.storage.getItem(prefixedKey);\r\n\t\t\tif (val) {\r\n\t\t\t\tthis._removeItem(prefixedKey, JSON.parse(val).byteSize);\r\n\t\t\t}\r\n\r\n\t\t\t// check whether the cache is full\r\n\t\t\tif (this._isCacheFull(item.byteSize)) {\r\n\t\t\t\tconst validKeys: string[] = this._findValidKeys();\r\n\t\t\t\t// check again and then pop out items\r\n\t\t\t\tif (this._isCacheFull(item.byteSize)) {\r\n\t\t\t\t\tconst sizeToPop: number = this._sizeToPop(item.byteSize);\r\n\t\t\t\t\tthis._popOutItems(validKeys, sizeToPop);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// put item in the cache\r\n\t\t\t// may failed due to storage full\r\n\t\t\tthis._setItem(prefixedKey, item);\r\n\t\t} catch (e) {\r\n\t\t\tlogger.warn(`setItem failed! ${e}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get item from cache. It will return null if item doesn’t exist or it has been expired.\r\n\t * If you specified callback function in the options,\r\n\t * then the function will be executed if no such item in the cache\r\n\t * and finally put the return value into cache.\r\n\t * Please make sure the callback function will return the value you want to put into the cache.\r\n\t * The cache will abort output a warning:\r\n\t * If the key is invalid\r\n\t * If error happened with browser storage\r\n\t *\r\n\t * @param key - the key of the item\r\n\t * @param {Object} [options] - the options of callback function\r\n\t *\r\n\t * @return - return the value of the item\r\n\t */\r\n\tpublic getItem(key: string, options?: CacheItemOptions): any {\r\n\t\tlogger.log(`Get item: key is ${key} with options ${options}`);\r\n\t\tlet ret: string | null = null;\r\n\t\tconst prefixedKey: string = this.config.keyPrefix + key;\r\n\r\n\t\tif (\r\n\t\t\tprefixedKey === this.config.keyPrefix ||\r\n\t\t\tprefixedKey === this.cacheCurSizeKey\r\n\t\t) {\r\n\t\t\tlogger.warn(`Invalid key: should not be empty or 'CurSize'`);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tret = this.config.storage.getItem(prefixedKey);\r\n\t\t\tif (ret != null) {\r\n\t\t\t\tif (this._isExpired(prefixedKey)) {\r\n\t\t\t\t\t// if expired, remove that item and return null\r\n\t\t\t\t\tthis._removeItem(prefixedKey, JSON.parse(ret).byteSize);\r\n\t\t\t\t\tret = null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// if not expired, great, return the value and refresh it\r\n\t\t\t\t\tlet item: CacheItem = JSON.parse(ret);\r\n\t\t\t\t\titem = this._refreshItem(item, prefixedKey);\r\n\t\t\t\t\treturn item.data;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (options && options.callback !== undefined) {\r\n\t\t\t\tconst val: object | string | number | boolean = options.callback();\r\n\t\t\t\tif (val !== null) {\r\n\t\t\t\t\tthis.setItem(key, val, options);\r\n\t\t\t\t}\r\n\t\t\t\treturn val;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t} catch (e) {\r\n\t\t\tlogger.warn(`getItem failed! ${e}`);\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * remove item from the cache\r\n\t * The cache will abort output a warning:\r\n\t * If error happened with browser storage\r\n\t * @param key - the key of the item\r\n\t */\r\n\tpublic removeItem(key: string): void {\r\n\t\tlogger.log(`Remove item: key is ${key}`);\r\n\t\tconst prefixedKey: string = this.config.keyPrefix + key;\r\n\r\n\t\tif (\r\n\t\t\tprefixedKey === this.config.keyPrefix ||\r\n\t\t\tprefixedKey === this.cacheCurSizeKey\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tconst val: string | null = this.config.storage.getItem(prefixedKey);\r\n\t\t\tif (val) {\r\n\t\t\t\tthis._removeItem(prefixedKey, JSON.parse(val).byteSize);\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tlogger.warn(`removeItem failed! ${e}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * clear the entire cache\r\n\t * The cache will abort output a warning:\r\n\t * If error happened with browser storage\r\n\t */\r\n\tpublic clear(): void {\r\n\t\tlogger.log(`Clear Cache`);\r\n\t\tconst keysToRemove: string[] = [];\r\n\r\n\t\tfor (let i = 0; i < this.config.storage.length; i += 1) {\r\n\t\t\tconst key = this.config.storage.key(i);\r\n\t\t\tif (key.indexOf(this.config.keyPrefix) === 0) {\r\n\t\t\t\tkeysToRemove.push(key);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tfor (let i = 0; i < keysToRemove.length; i += 1) {\r\n\t\t\t\tthis.config.storage.removeItem(keysToRemove[i]);\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tlogger.warn(`clear failed! ${e}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Return all the keys in the cache.\r\n\t *\r\n\t * @return - all keys in the cache\r\n\t */\r\n\tpublic getAllKeys(): string[] {\r\n\t\tconst keys: string[] = [];\r\n\t\tfor (let i = 0; i < this.config.storage.length; i += 1) {\r\n\t\t\tconst key = this.config.storage.key(i);\r\n\t\t\tif (\r\n\t\t\t\tkey.indexOf(this.config.keyPrefix) === 0 &&\r\n\t\t\t\tkey !== this.cacheCurSizeKey\r\n\t\t\t) {\r\n\t\t\t\tkeys.push(key.substring(this.config.keyPrefix.length));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn keys;\r\n\t}\r\n\r\n\t/**\r\n\t * return the current size of the cache\r\n\t *\r\n\t * @return - current size of the cache\r\n\t */\r\n\tpublic getCacheCurSize(): number {\r\n\t\tlet ret: string | null = this.config.storage.getItem(this.cacheCurSizeKey);\r\n\t\tif (!ret) {\r\n\t\t\tthis.config.storage.setItem(this.cacheCurSizeKey, '0');\r\n\t\t\tret = '0';\r\n\t\t}\r\n\t\treturn Number(ret);\r\n\t}\r\n\r\n\t/**\r\n\t * Return a new instance of cache with customized configuration.\r\n\t * @param config - the customized configuration\r\n\t *\r\n\t * @return - new instance of Cache\r\n\t */\r\n\tpublic createInstance(config: CacheConfig): ICache {\r\n\t\tif (!config.keyPrefix || config.keyPrefix === defaultConfig.keyPrefix) {\r\n\t\t\tlogger.error('invalid keyPrefix, setting keyPrefix with timeStamp');\r\n\t\t\tconfig.keyPrefix = getCurrTime.toString();\r\n\t\t}\r\n\r\n\t\treturn new BrowserStorageCacheClass(config);\r\n\t}\r\n}\r\n\r\nexport const BrowserStorageCache: ICache = new BrowserStorageCacheClass();\r\n\r\n/**\r\n * @deprecated use named import\r\n */\r\nexport default BrowserStorageCache;\r\n","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport { Amplify } from '@aws-amplify/core';\r\nimport { BrowserStorageCache } from './BrowserStorageCache';\r\nimport { InMemoryCache } from './InMemoryCache';\r\nimport { CacheConfig } from './types';\r\n\r\nexport { BrowserStorageCache, InMemoryCache, CacheConfig };\r\n/**\r\n * @deprecated use named import\r\n */\r\nexport default BrowserStorageCache;\r\n\r\nAmplify.register(BrowserStorageCache);\r\n"],"names":["getLocation","source","position","match","lineRegexp","line","column","exec","body","index","length","highlightSourceAtLocation","location","firstLineColumnOffset","locationOffset","whitespace","lineIndex","lineNum","columnNum","lines","split","concat","name","existingLines","filter","_ref","undefined","padLen","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","Symbol","iterator","next","done","Math","max","value","err","return","map","_ref3","str","join","printPrefixedLines","len","Array","GraphQLError","message","nodes","positions","path","originalError","extensions","_nodes","isArray","_source","node","loc","_locations","_positions","reduce","list","push","start","pos","_extensions","Object","defineProperties","this","enumerable","writable","locations","Boolean","stack","defineProperty","configurable","Error","captureStackTrace","prototype","create","constructor","toString","error","printedLocations","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","printError","QueryDocumentKeys","Name","Document","OperationDefinition","VariableDefinition","Variable","SelectionSet","Field","Argument","FragmentSpread","InlineFragment","FragmentDefinition","IntValue","FloatValue","StringValue","BooleanValue","NullValue","EnumValue","ListValue","ObjectValue","ObjectField","Directive","NamedType","ListType","NonNullType","SchemaDefinition","OperationTypeDefinition","ScalarTypeDefinition","ObjectTypeDefinition","FieldDefinition","InputValueDefinition","InterfaceTypeDefinition","UnionTypeDefinition","EnumTypeDefinition","EnumValueDefinition","InputObjectTypeDefinition","DirectiveDefinition","SchemaExtension","ScalarTypeExtension","ObjectTypeExtension","InterfaceTypeExtension","UnionTypeExtension","EnumTypeExtension","InputObjectTypeExtension","BREAK","isNode","maybeNode","kind","getVisitFn","visitor","isLeaving","kindVisitor","kindSpecificVisitor","leave","enter","specificVisitor","specificKindVisitor","print","ast","root","visitorKeys","arguments","inArray","keys","edits","key","parent","ancestors","newRoot","isEdited","pop","slice","clone","k","hasOwnProperty","editOffset","ii","editKey","editValue","splice","prev","result","JSON","stringify","visitFn","call","visit","printDocASTReducer","definitions","op","operation","varDefs","wrap","variableDefinitions","directives","selectionSet","variable","type","defaultValue","_ref2","block","selections","args","alias","_ref4","_ref5","_ref6","typeCondition","_ref7","_ref8","_ref9","_ref10","isDescription","escaped","replace","indexOf","indent","printBlockString","_ref11","_ref12","_ref13","values","_ref14","fields","_ref15","_ref16","_ref17","_ref18","_ref19","_ref20","operationTypes","_ref21","addDescription","_ref22","_ref23","interfaces","_ref24","every","arg","_ref25","_ref26","_ref27","types","_ref28","_ref29","_ref30","_ref31","_ref32","_ref33","_ref34","_ref35","_ref36","_ref37","_ref38","cb","description","maybeArray","separator","x","array","maybeString","end","_typeof","obj","inspect","String","invariant","condition","_defineProperty","classObject","syntaxError","blockStringValue","rawString","commonIndent","i","leadingWhitespace","_i","isBlank","shift","advanceLexer","lastToken","token","lookahead","EOF","readToken","COMMENT","toStringTag","get","freeze","SOF","BANG","DOLLAR","AMP","PAREN_L","PAREN_R","SPREAD","COLON","EQUALS","AT","BRACKET_L","BRACKET_R","BRACE_L","PIPE","BRACE_R","NAME","INT","FLOAT","STRING","BLOCK_STRING","getTokenDesc","charCodeAt","Tok","printCharCode","code","isNaN","fromCharCode","toUpperCase","lexer","bodyLength","startPosition","lineStart","positionAfterWhitespace","col","readComment","readName","firstCode","isFloat","readDigits","readNumber","chunkStart","rawValue","readBlockString","charCode","uniCharCode","readString","unexpectedCharacterMessage","a","b","c","d","char2hex","toJSON","Kind","DOCUMENT","OPERATION_DEFINITION","VARIABLE_DEFINITION","SELECTION_SET","FIELD","ARGUMENT","FRAGMENT_SPREAD","INLINE_FRAGMENT","FRAGMENT_DEFINITION","VARIABLE","BOOLEAN","NULL","ENUM","LIST","OBJECT","OBJECT_FIELD","DIRECTIVE","NAMED_TYPE","LIST_TYPE","NON_NULL_TYPE","SCHEMA_DEFINITION","OPERATION_TYPE_DEFINITION","SCALAR_TYPE_DEFINITION","OBJECT_TYPE_DEFINITION","FIELD_DEFINITION","INPUT_VALUE_DEFINITION","INTERFACE_TYPE_DEFINITION","UNION_TYPE_DEFINITION","ENUM_TYPE_DEFINITION","ENUM_VALUE_DEFINITION","INPUT_OBJECT_TYPE_DEFINITION","DIRECTIVE_DEFINITION","SCHEMA_EXTENSION","SCALAR_TYPE_EXTENSION","OBJECT_TYPE_EXTENSION","INTERFACE_TYPE_EXTENSION","UNION_TYPE_EXTENSION","ENUM_TYPE_EXTENSION","INPUT_OBJECT_TYPE_EXTENSION","DirectiveLocation","QUERY","MUTATION","SUBSCRIPTION","SCHEMA","SCALAR","ARGUMENT_DEFINITION","INTERFACE","UNION","ENUM_VALUE","INPUT_OBJECT","INPUT_FIELD_DEFINITION","parse","options","sourceObj","TypeError","startOfFileToken","advance","many","parseDefinition","parseDocument","parseName","expect","peek","parseExecutableDefinition","parseTypeSystemDefinition","keywordToken","expectKeyword","parseDirectives","parseOperationTypeDefinition","unexpected","parseSchemaExtension","parseScalarTypeExtension","parseImplementsInterfaces","parseFieldsDefinition","parseObjectTypeExtension","parseInterfaceTypeExtension","parseUnionMemberTypes","parseUnionTypeExtension","parseEnumValuesDefinition","parseEnumTypeExtension","parseInputFieldsDefinition","parseInputObjectTypeExtension","parseTypeSystemExtension","peekDescription","parseOperationDefinition","experimentalFragmentVariables","parseFragmentName","parseVariableDefinitions","parseNamedType","parseSelectionSet","parseFragmentDefinition","parseOperationType","operationToken","parseVariableDefinition","experimentalVariableDefinitionDirectives","parseVariable","parseTypeReference","skip","parseValueLiteral","parseSelection","parseFragment","nameOrAlias","parseArguments","parseField","isConst","item","parseConstArgument","parseArgument","parseConstValue","any","parseValueValue","parseList","parseObjectField","parseObject","parseStringLiteral","parseDirective","parseSchemaDefinition","parseDescription","parseScalarTypeDefinition","parseObjectTypeDefinition","parseInterfaceTypeDefinition","parseUnionTypeDefinition","parseEnumTypeDefinition","parseInputObjectTypeDefinition","parseArgumentDefs","parseDirectiveLocation","parseDirectiveLocations","parseDirectiveDefinition","allowLegacySDLImplementsInterfaces","allowLegacySDLEmptyFields","parseFieldDefinition","parseInputValueDef","parseEnumValueDefinition","startToken","noLocation","Loc","endToken","atToken","openKind","parseFn","closeKind","logger","graphqlOperation","query","variables","_api","Auth","Cache","Credentials","_options","debug","getModuleName","configure","API","opt","otherOptions","assign","region","header","graphql_headers","warn","createInstance","RestClient","Promise","reject","_headerBasedAuth","defaultAuthenticationType","aws_appsync_authenticationType","apiKey","headers","Authorization","_ensureCredentials","federatedInfo","currentUser","currentSession","session","getAccessToken","getJwtToken","getGraphqlOperationType","doc","graphql","additionalHeaders","authMode","paramQuery","operationType","cancellableToken","getCancellableToken","responsePromise","_graphql","updateRequestToBeCancellable","_graphqlSubscribe","initParams","appSyncGraphqlEndpoint","customEndpointRegion","customGraphqlEndpoint","init","signerServiceInfo","service","endpoint","data","errors","post","response","isCancel","cancel","request","aws_appsync_region","provider","aws_appsync_graphqlEndpoint","authenticationType","aws_appsync_apiKey","then","credentials","cred","shear","catch","GraphQLAPI","GraphQLAPIClass","Amplify","_region","_service","_custom_header","_cancelTokenMap","WeakMap","ajax","urlOrApiInfo","method","custom_header","parsed_url","_parseUrl","url","params","host","responseType","timeout","cancelToken","libraryHeaders","isAllResponse","FormData","withCredentials","custom_header_obj","parsedUrl","queryStringParameters","acc","_request","_signed","responseDate","Date","date","requestDate","getTime","put","patch","del","head","promise","cancelTokenSource","set","apiName","cloud_logic_array","endpoints","forEach","v","creds","secret_key","secretAccessKey","access_key","accessKeyId","session_token","sessionToken","signerServiceInfoParams","signed_params","otherParams","parts","custom","apiInfo","getEndpointInfo","apiConfig","find","api","RestAPI","RestAPIClass","_restApi","_graphqlApi","restAPIConfig","graphQLAPIConfig","CognitoHostedUIIdentityProvider","AuthErrorTypes","isFederatedSignInOptions","isCognitoHostedOpts","oauth","redirectSignIn","launchUri","windowProxy","window","open","resolve","AMPLIFY_SYMBOL","for","dispatchAuthEvent","event","Hub","config","cognitoClientId","scopes","_urlOpener","urlOpener","_config","_cognitoClientId","isValidScopes","_scopes","scope","oauthSignIn","domain","clientId","customState","Cognito","generatedState","_generateState","state","sessionStorage","setItem","pkce_key","_generateRandom","code_challenge","_generateChallenge","scopesString","URL","entries","redirect_uri","response_type","client_id","identity_provider","code_challenge_method","encodeURIComponent","_handleCodeFlow","currentUrl","pairings","accum","pathname","oAuthTokenEndpoint","clientID","redirectUri","ouath_pkce_key","getItem","removeItem","oAuthTokenBody","grant_type","code_verifier","fetch","json","access_token","refresh_token","id_token","accessToken","refreshToken","idToken","_handleImplicitFlow","hash","substr","handleAuthResponse","urlParams","entry","error_description","_validateState","oauth_state","savedState","returnedState","signOut","oAuthLogoutEndpoint","signout_uri","redirectSignOut","returnTo","logout_uri","oAuth","chars","round","random","_base64URL","string","size","buffer","Uint8Array","crypto","getRandomValues","_bufferToString","CHARSET","byteLength","log","AuthError","setPrototypeOf","NoUserPoolError","authErrorMessages","noConfig","AuthErrorStrings","A","missingAuthConfig","emptyUsername","invalidUsername","emptyPassword","emptyCode","signUpError","noMFA","invalidMFA","emptyChallengeResponse","noUserSession","default","USER_ADMIN_SCOPE","userPool","user","oAuthFlowInProgress","wrapRefreshSessionCallback","callback","currentCredentials","bind","currentUserCredentials","payload","_storage","conf","Parser","userPoolId","userPoolWebClientId","cookieStorage","identityPoolId","mandatorySignIn","refreshHandlers","identityPoolRegion","clientMetadata","storage","_isValidAuthStorage","ssr","UniversalStorage","StorageHelper","getStorage","_storageSync","userPoolData","UserPoolId","ClientId","Storage","cognitoHostedUIConfig","awsCognito","cognitoAuthParams","_oAuthHandler","JS","isBrowser","href","urlListener","_handleAuthResponse","signUp","rejectNoUserPool","username","password","attributes","validationData","restOfAttrs","email","phone_number","Value","rejectAuthError","SignUpError","validationDataObject","EmptyPassword","EmptyUsername","confirmSignUp","EmptyCode","createCognitoUser","forceAliasCreation","confirmRegistration","resendSignUp","resendConfirmationCode","signIn","usernameOrSignInOpts","pw","InvalidUsername","authDetails","Username","Password","ValidationData","ClientMetadata","signInWithPassword","signInWithoutPassword","authCallbacks","that","onSuccess","clear","currentUserPoolUser","getUsername","onFailure","customChallenge","challengeParam","mfaRequired","challengeName","mfaSetup","newPasswordRequired","userAttributes","requiredAttributes","totpRequired","selectMFAType","pendingSignIn","authenticateUser","setAuthenticationFlowType","initiateAuth","getMFAOptions","res","rej","mfaOptions","getPreferredMFA","getUserData","mfaType","_getMfaTypeFromUserData","bypassCache","ret","preferredMFA","PreferredMfaSetting","mfaList","UserMFASettingList","MFAOptions","_getUserData","setPreferredMFA","mfaMethod","userData","smsMfaSettings","totpMfaSettings","PreferredMfa","Enabled","currentMFAType","InvalidMFA","NoMFA","setUserMfaPreference","disableSMS","disableMFA","enableSMS","enableMFA","setupTOTP","associateSoftwareToken","associateSecretCode","secretCode","verifyTotpToken","challengeAnswer","verifySoftwareToken","confirmSignIn","sendMFACode","completeNewPassword","completeNewPasswordChallenge","sendCustomChallengeAnswer","challengeResponses","EmptyChallengeResponse","updateUserAttributes","attributeList","userSession","updateAttributes","getUserAttributes","verifiedContact","attrs","attributesToObject","unverified","verified","isOAuthInProgress","timeoutId","setTimeout","hostedUISignCallback","clearTimeout","getCurrentUser","getSession","decodePayload","includes","UserAttributes","userAttribute","e","currentAuthenticatedUser","federatedUser","NoUserSession","refreshFederatedToken","verifyUserAttribute","attr","getAttributeVerificationCode","verifyUserAttributeSubmit","verifyAttribute","verifyCurrentUserAttribute","verifyCurrentUserAttributeSubmit","cognitoIdentitySignOut","opts","isSignedInHostedUI","global","globalSignOut","oAuthSignOutRedirect","oAuthSignOutRedirectOrReject","oAuthSignOutAndResolve","cleanCachedItems","changePassword","oldPassword","newPassword","forgotPassword","inputVerificationCode","forgotPasswordSubmit","confirmPassword","currentUserInfo","getCredSource","userAttrs","id","identityId","federatedSignIn","providerOrOptions","hasCustomState","customProvider","loggedInUser","identity_id","expires_at","hasCodeOrError","hasTokenOrError","IdToken","RefreshToken","AccessToken","isCustomStateIncluded","test","getIdToken","setSignInUserSession","history","replaceState","essentialCredentials","authenticated","attribute","Pool","authenticationFlowType","noUserPoolErrorHandler","NoConfig","MissingAuthConfig","defaultConfig","keyPrefix","capacityInBytes","itemMaxSize","defaultTTL","defaultPriority","warningThreshold","getByteLength","getCurrTime","isInteger","Number","isFinite","floor","_isInteger","store","cacheCurSizeKey","checkConfig","fillCacheItem","timestamp","visitedTime","priority","expires","byteSize","BrowserStorageCache","cacheConfig","_decreaseCurSizeInBytes","amount","curSize","getCacheCurSize","_increaseCurSizeInBytes","_refreshItem","prefixedKey","_isExpired","text","_removeItem","itemSize","_setItem","setItemErr","_sizeToPop","spaceItemNeed","cacheThresholdSpace","_isCacheFull","_findValidKeys","keyInCache","_popOutItems","sizeToPop","items","remainedSize","val","sort","cacheItemOptions","validKeys","keysToRemove","getAllKeys","substring","BrowserStorageCacheClass","StorageCache"],"sourceRoot":""}