{"version":3,"file":"utils.mjs","sources":["../../../src/sync/utils.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { GraphQLAuthError } from '@aws-amplify/api';\nimport { ConsoleLogger } from '@aws-amplify/core';\nimport { ModelOperation, OpType, isEnumFieldType, isGraphQLScalarType, isNonModelFieldType, isPredicateGroup, isPredicateObj, isSchemaModel, isSchemaModelWithAttributes, isTargetNameAssociation, } from '../types';\nimport { IDENTIFIER_KEY_SEPARATOR, establishRelationAndKeys, extractPrimaryKeyFieldNames, } from '../util';\nconst logger = new ConsoleLogger('DataStore');\nconst GraphQLOperationType = {\n    LIST: 'query',\n    CREATE: 'mutation',\n    UPDATE: 'mutation',\n    DELETE: 'mutation',\n    GET: 'query',\n};\nexport var TransformerMutationType;\n(function (TransformerMutationType) {\n    TransformerMutationType[\"CREATE\"] = \"Create\";\n    TransformerMutationType[\"UPDATE\"] = \"Update\";\n    TransformerMutationType[\"DELETE\"] = \"Delete\";\n    TransformerMutationType[\"GET\"] = \"Get\";\n})(TransformerMutationType || (TransformerMutationType = {}));\nconst dummyMetadata = {\n    _version: undefined,\n    _lastChangedAt: undefined,\n    _deleted: undefined,\n};\nconst metadataFields = Object.keys(dummyMetadata);\nexport function getMetadataFields() {\n    return metadataFields;\n}\nexport function generateSelectionSet(namespace, modelDefinition) {\n    const scalarFields = getScalarFields(modelDefinition);\n    const nonModelFields = getNonModelFields(namespace, modelDefinition);\n    const implicitOwnerField = getImplicitOwnerField(modelDefinition, scalarFields);\n    let scalarAndMetadataFields = Object.values(scalarFields)\n        .map(({ name }) => name)\n        .concat(implicitOwnerField)\n        .concat(nonModelFields);\n    if (isSchemaModel(modelDefinition)) {\n        scalarAndMetadataFields = scalarAndMetadataFields\n            .concat(getMetadataFields())\n            .concat(getConnectionFields(modelDefinition, namespace));\n    }\n    const result = scalarAndMetadataFields.join('\\n');\n    return result;\n}\nfunction getImplicitOwnerField(modelDefinition, scalarFields) {\n    const ownerFields = getOwnerFields(modelDefinition);\n    if (!scalarFields.owner && ownerFields.includes('owner')) {\n        return ['owner'];\n    }\n    return [];\n}\nfunction getOwnerFields(modelDefinition) {\n    const ownerFields = [];\n    if (isSchemaModelWithAttributes(modelDefinition)) {\n        modelDefinition.attributes.forEach(attr => {\n            if (attr.properties && attr.properties.rules) {\n                const rule = attr.properties.rules.find(currentRule => currentRule.allow === 'owner');\n                if (rule && rule.ownerField) {\n                    ownerFields.push(rule.ownerField);\n                }\n            }\n        });\n    }\n    return ownerFields;\n}\nfunction getScalarFields(modelDefinition) {\n    const { fields } = modelDefinition;\n    const result = Object.values(fields)\n        .filter(field => {\n        if (isGraphQLScalarType(field.type) || isEnumFieldType(field.type)) {\n            return true;\n        }\n        return false;\n    })\n        .reduce((acc, field) => {\n        acc[field.name] = field;\n        return acc;\n    }, {});\n    return result;\n}\n// Used for generating the selection set for queries and mutations\nfunction getConnectionFields(modelDefinition, namespace) {\n    const result = [];\n    Object.values(modelDefinition.fields)\n        .filter(({ association }) => association && Object.keys(association).length)\n        .forEach(({ name, association }) => {\n        const { connectionType } = association || {};\n        switch (connectionType) {\n            case 'HAS_ONE':\n            case 'HAS_MANY':\n                // Intentionally blank\n                break;\n            case 'BELONGS_TO':\n                if (isTargetNameAssociation(association)) {\n                    // New codegen (CPK)\n                    if (association.targetNames && association.targetNames.length > 0) {\n                        // Need to retrieve relations in order to get connected model keys\n                        const [relations] = establishRelationAndKeys(namespace);\n                        const connectedModelName = modelDefinition.fields[name].type.model;\n                        const byPkIndex = relations[connectedModelName].indexes.find(([currentName]) => currentName === 'byPk');\n                        const keyFields = byPkIndex && byPkIndex[1];\n                        const keyFieldSelectionSet = keyFields?.join(' ');\n                        // We rely on `_deleted` when we process the sync query (e.g. in batchSave in the adapters)\n                        result.push(`${name} { ${keyFieldSelectionSet} _deleted }`);\n                    }\n                    else {\n                        // backwards-compatability for schema generated prior to custom primary key support\n                        result.push(`${name} { id _deleted }`);\n                    }\n                }\n                break;\n            default:\n                throw new Error(`Invalid connection type ${connectionType}`);\n        }\n    });\n    return result;\n}\nfunction getNonModelFields(namespace, modelDefinition) {\n    const result = [];\n    Object.values(modelDefinition.fields).forEach(({ name, type }) => {\n        if (isNonModelFieldType(type)) {\n            const typeDefinition = namespace.nonModels[type.nonModel];\n            const scalarFields = Object.values(getScalarFields(typeDefinition)).map(({ name: currentName }) => currentName);\n            const nested = [];\n            Object.values(typeDefinition.fields).forEach(field => {\n                const { type: fieldType, name: fieldName } = field;\n                if (isNonModelFieldType(fieldType)) {\n                    const nonModelTypeDefinition = namespace.nonModels[fieldType.nonModel];\n                    nested.push(`${fieldName} { ${generateSelectionSet(namespace, nonModelTypeDefinition)} }`);\n                }\n            });\n            result.push(`${name} { ${scalarFields.join(' ')} ${nested.join(' ')} }`);\n        }\n    });\n    return result;\n}\nexport function getAuthorizationRules(modelDefinition) {\n    // Searching for owner authorization on attributes\n    const authConfig = []\n        .concat(modelDefinition.attributes || [])\n        .find(attr => attr && attr.type === 'auth');\n    const { properties: { rules = [] } = {} } = authConfig || {};\n    const resultRules = [];\n    // Multiple rules can be declared for allow: owner\n    rules.forEach(rule => {\n        // setting defaults for backwards compatibility with old cli\n        const { identityClaim = 'cognito:username', ownerField = 'owner', operations = ['create', 'update', 'delete', 'read'], provider = 'userPools', groupClaim = 'cognito:groups', allow: authStrategy = 'iam', groups = [], groupsField = '', } = rule;\n        const isReadAuthorized = operations.includes('read');\n        const isOwnerAuth = authStrategy === 'owner';\n        if (!isReadAuthorized && !isOwnerAuth) {\n            return;\n        }\n        const authRule = {\n            identityClaim,\n            ownerField,\n            provider,\n            groupClaim,\n            authStrategy,\n            groups,\n            groupsField,\n            areSubscriptionsPublic: false,\n        };\n        if (isOwnerAuth) {\n            // look for the subscription level override\n            // only pay attention to the public level\n            const modelConfig = []\n                .concat(modelDefinition.attributes || [])\n                .find(attr => attr && attr.type === 'model');\n            // find the subscriptions level. ON is default\n            const { properties: { subscriptions: { level = 'on' } = {} } = {} } = modelConfig || {};\n            // treat subscriptions as public for owner auth with unprotected reads\n            // when `read` is omitted from `operations`\n            authRule.areSubscriptionsPublic =\n                !operations.includes('read') || level === 'public';\n        }\n        if (isOwnerAuth) {\n            // owner rules has least priority\n            resultRules.push(authRule);\n            return;\n        }\n        resultRules.unshift(authRule);\n    });\n    return resultRules;\n}\nexport function buildSubscriptionGraphQLOperation(namespace, modelDefinition, transformerMutationType, isOwnerAuthorization, ownerField, filterArg = false) {\n    const selectionSet = generateSelectionSet(namespace, modelDefinition);\n    const { name: typeName } = modelDefinition;\n    const opName = `on${transformerMutationType}${typeName}`;\n    const docArgs = [];\n    const opArgs = [];\n    if (filterArg) {\n        docArgs.push(`$filter: ModelSubscription${typeName}FilterInput`);\n        opArgs.push('filter: $filter');\n    }\n    if (isOwnerAuthorization) {\n        docArgs.push(`$${ownerField}: String!`);\n        opArgs.push(`${ownerField}: $${ownerField}`);\n    }\n    const docStr = docArgs.length ? `(${docArgs.join(',')})` : '';\n    const opStr = opArgs.length ? `(${opArgs.join(',')})` : '';\n    return [\n        transformerMutationType,\n        opName,\n        `subscription operation${docStr}{\n\t\t\t${opName}${opStr}{\n\t\t\t\t${selectionSet}\n\t\t\t}\n\t\t}`,\n    ];\n}\nexport function buildGraphQLOperation(namespace, modelDefinition, graphQLOpType) {\n    let selectionSet = generateSelectionSet(namespace, modelDefinition);\n    const { name: typeName, pluralName: pluralTypeName } = modelDefinition;\n    let operation;\n    let documentArgs;\n    let operationArgs;\n    let transformerMutationType;\n    switch (graphQLOpType) {\n        case 'LIST':\n            operation = `sync${pluralTypeName}`;\n            documentArgs = `($limit: Int, $nextToken: String, $lastSync: AWSTimestamp, $filter: Model${typeName}FilterInput)`;\n            operationArgs =\n                '(limit: $limit, nextToken: $nextToken, lastSync: $lastSync, filter: $filter)';\n            selectionSet = `items {\n\t\t\t\t\t\t\t${selectionSet}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextToken\n\t\t\t\t\t\tstartedAt`;\n            break;\n        case 'CREATE':\n            operation = `create${typeName}`;\n            documentArgs = `($input: Create${typeName}Input!)`;\n            operationArgs = '(input: $input)';\n            transformerMutationType = TransformerMutationType.CREATE;\n            break;\n        case 'UPDATE':\n            operation = `update${typeName}`;\n            documentArgs = `($input: Update${typeName}Input!, $condition: Model${typeName}ConditionInput)`;\n            operationArgs = '(input: $input, condition: $condition)';\n            transformerMutationType = TransformerMutationType.UPDATE;\n            break;\n        case 'DELETE':\n            operation = `delete${typeName}`;\n            documentArgs = `($input: Delete${typeName}Input!, $condition: Model${typeName}ConditionInput)`;\n            operationArgs = '(input: $input, condition: $condition)';\n            transformerMutationType = TransformerMutationType.DELETE;\n            break;\n        case 'GET':\n            operation = `get${typeName}`;\n            documentArgs = `($id: ID!)`;\n            operationArgs = '(id: $id)';\n            transformerMutationType = TransformerMutationType.GET;\n            break;\n        default:\n            throw new Error(`Invalid graphQlOpType ${graphQLOpType}`);\n    }\n    return [\n        [\n            transformerMutationType,\n            operation,\n            `${GraphQLOperationType[graphQLOpType]} operation${documentArgs}{\n\t\t${operation}${operationArgs}{\n\t\t\t${selectionSet}\n\t\t}\n\t}`,\n        ],\n    ];\n}\nexport function createMutationInstanceFromModelOperation(relationships, modelDefinition, opType, model, element, condition, MutationEventConstructor, modelInstanceCreator, id) {\n    let operation;\n    switch (opType) {\n        case OpType.INSERT:\n            operation = TransformerMutationType.CREATE;\n            break;\n        case OpType.UPDATE:\n            operation = TransformerMutationType.UPDATE;\n            break;\n        case OpType.DELETE:\n            operation = TransformerMutationType.DELETE;\n            break;\n        default:\n            throw new Error(`Invalid opType ${opType}`);\n    }\n    // stringify nested objects of type AWSJSON\n    // this allows us to return parsed JSON to users (see `castInstanceType()` in datastore.ts),\n    // but still send the object correctly over the wire\n    const replacer = (k, v) => {\n        const isAWSJSON = k &&\n            v !== null &&\n            typeof v === 'object' &&\n            modelDefinition.fields[k] &&\n            modelDefinition.fields[k].type === 'AWSJSON';\n        if (isAWSJSON) {\n            return JSON.stringify(v);\n        }\n        return v;\n    };\n    const modelId = getIdentifierValue(modelDefinition, element);\n    const optionalId = OpType.INSERT && id ? { id } : {};\n    const mutationEvent = modelInstanceCreator(MutationEventConstructor, {\n        ...optionalId,\n        data: JSON.stringify(element, replacer),\n        modelId,\n        model: model.name,\n        operation: operation,\n        condition: JSON.stringify(condition),\n    });\n    return mutationEvent;\n}\nexport function predicateToGraphQLCondition(predicate, modelDefinition) {\n    const result = {};\n    if (!predicate || !Array.isArray(predicate.predicates)) {\n        return result;\n    }\n    // This is compatible with how the GQL Transform currently generates the Condition Input,\n    // i.e. any PK and SK fields are omitted and can't be used as conditions.\n    // However, I think this limits usability.\n    // What if we want to delete all records where SK > some value\n    // Or all records where PK = some value but SKs are different values\n    // TODO: if the Transform gets updated we'll need to modify this logic to only omit\n    // key fields from the predicate/condition when ALL of the keyFields are present and using `eq` operators\n    const keyFields = extractPrimaryKeyFieldNames(modelDefinition);\n    return predicateToGraphQLFilter(predicate, keyFields);\n}\n/**\n * @param predicatesGroup - Predicate Group\n    @returns GQL Filter Expression from Predicate Group\n\n    @remarks Flattens redundant list predicates\n    @example\n\n    ```js\n    { and:[{ and:[{ username:  { eq: 'bob' }}] }] }\n    ```\n    Becomes\n    ```js\n    { and:[{ username: { eq: 'bob' }}] }\n    ```\n    */\nexport function predicateToGraphQLFilter(predicatesGroup, fieldsToOmit = [], root = true) {\n    const result = {};\n    if (!predicatesGroup || !Array.isArray(predicatesGroup.predicates)) {\n        return result;\n    }\n    const { type, predicates } = predicatesGroup;\n    const isList = type === 'and' || type === 'or';\n    result[type] = isList ? [] : {};\n    const children = [];\n    predicates.forEach(predicate => {\n        if (isPredicateObj(predicate)) {\n            const { field, operator, operand } = predicate;\n            if (fieldsToOmit.includes(field))\n                return;\n            const gqlField = {\n                [field]: { [operator]: operand },\n            };\n            children.push(gqlField);\n            return;\n        }\n        const child = predicateToGraphQLFilter(predicate, fieldsToOmit, false);\n        if (Object.keys(child).length > 0) {\n            children.push(child);\n        }\n    });\n    // flatten redundant list predicates\n    if (children.length === 1) {\n        const [child] = children;\n        if (\n        // any nested list node\n        (isList && !root) ||\n            // root list node where the only child is also a list node\n            (isList && root && ('and' in child || 'or' in child))) {\n            delete result[type];\n            Object.assign(result, child);\n            return result;\n        }\n    }\n    children.forEach(child => {\n        if (isList) {\n            result[type].push(child);\n        }\n        else {\n            result[type] = child;\n        }\n    });\n    if (isList) {\n        if (result[type].length === 0)\n            return {};\n    }\n    else {\n        if (Object.keys(result[type]).length === 0)\n            return {};\n    }\n    return result;\n}\n/**\n *\n * @param group - selective sync predicate group\n * @returns set of distinct field names in the filter group\n */\nexport function filterFields(group) {\n    const fields = new Set();\n    if (!group || !Array.isArray(group.predicates))\n        return fields;\n    const { predicates } = group;\n    const stack = [...predicates];\n    while (stack.length > 0) {\n        const current = stack.pop();\n        if (isPredicateObj(current)) {\n            fields.add(current.field);\n        }\n        else if (isPredicateGroup(current)) {\n            stack.push(...current.predicates);\n        }\n    }\n    return fields;\n}\n/**\n *\n * @param modelDefinition\n * @returns set of field names used with dynamic auth modes configured for the provided model definition\n */\nexport function dynamicAuthFields(modelDefinition) {\n    const rules = getAuthorizationRules(modelDefinition);\n    const fields = new Set();\n    for (const rule of rules) {\n        if (rule.groupsField && !rule.groups.length) {\n            // dynamic group rule will have no values in `rule.groups`\n            fields.add(rule.groupsField);\n        }\n        else if (rule.ownerField) {\n            fields.add(rule.ownerField);\n        }\n    }\n    return fields;\n}\n/**\n *\n * @param group - selective sync predicate group\n * @returns the total number of OR'd predicates in the filter group\n *\n * @example returns 2\n * ```js\n * { type: \"or\", predicates: [\n * { field: \"username\", operator: \"beginsWith\", operand: \"a\" },\n * { field: \"title\", operator: \"contains\", operand: \"abc\" },\n * ]}\n * ```\n */\nexport function countFilterCombinations(group) {\n    if (!group || !Array.isArray(group.predicates))\n        return 0;\n    let count = 0;\n    const stack = [group];\n    while (stack.length > 0) {\n        const current = stack.pop();\n        if (isPredicateGroup(current)) {\n            const { predicates, type } = current;\n            // ignore length = 1; groups with 1 predicate will get flattened when converted to gqlFilter\n            if (type === 'or' && predicates.length > 1) {\n                count += predicates.length;\n            }\n            stack.push(...predicates);\n        }\n    }\n    // if we didn't encounter any OR groups, default to 1\n    return count || 1;\n}\n/**\n *\n * @param group - selective sync predicate group\n * @returns name of repeated field | null\n *\n * @example returns \"username\"\n * ```js\n * { type: \"and\", predicates: [\n * \t\t{ field: \"username\", operator: \"beginsWith\", operand: \"a\" },\n * \t\t{ field: \"username\", operator: \"contains\", operand: \"abc\" },\n * ] }\n * ```\n */\nexport function repeatedFieldInGroup(group) {\n    if (!group || !Array.isArray(group.predicates))\n        return null;\n    // convert to filter in order to flatten redundant groups\n    const gqlFilter = predicateToGraphQLFilter(group);\n    const stack = [gqlFilter];\n    const hasGroupRepeatedFields = (fields) => {\n        const seen = {};\n        for (const f of fields) {\n            const [fieldName] = Object.keys(f);\n            if (seen[fieldName]) {\n                return fieldName;\n            }\n            seen[fieldName] = true;\n        }\n        return null;\n    };\n    while (stack.length > 0) {\n        const current = stack.pop();\n        const [key] = Object.keys(current);\n        const values = current[key];\n        if (!Array.isArray(values)) {\n            return null;\n        }\n        // field value will be single object\n        const predicateObjects = values.filter(v => !Array.isArray(Object.values(v)[0]));\n        // group value will be an array\n        const predicateGroups = values.filter(v => Array.isArray(Object.values(v)[0]));\n        if (key === 'and') {\n            const repeatedField = hasGroupRepeatedFields(predicateObjects);\n            if (repeatedField) {\n                return repeatedField;\n            }\n        }\n        stack.push(...predicateGroups);\n    }\n    return null;\n}\nexport var RTFError;\n(function (RTFError) {\n    RTFError[RTFError[\"UnknownField\"] = 0] = \"UnknownField\";\n    RTFError[RTFError[\"MaxAttributes\"] = 1] = \"MaxAttributes\";\n    RTFError[RTFError[\"MaxCombinations\"] = 2] = \"MaxCombinations\";\n    RTFError[RTFError[\"RepeatedFieldname\"] = 3] = \"RepeatedFieldname\";\n    RTFError[RTFError[\"NotGroup\"] = 4] = \"NotGroup\";\n    RTFError[RTFError[\"FieldNotInType\"] = 5] = \"FieldNotInType\";\n})(RTFError || (RTFError = {}));\nexport function generateRTFRemediation(errorType, modelDefinition, predicatesGroup) {\n    const selSyncFields = filterFields(predicatesGroup);\n    const selSyncFieldStr = [...selSyncFields].join(', ');\n    const dynamicAuthModeFields = dynamicAuthFields(modelDefinition);\n    const dynamicAuthFieldsStr = [...dynamicAuthModeFields].join(', ');\n    const filterCombinations = countFilterCombinations(predicatesGroup);\n    const repeatedField = repeatedFieldInGroup(predicatesGroup);\n    switch (errorType) {\n        case RTFError.UnknownField:\n            return (`Your API was generated with an older version of the CLI that doesn't support backend subscription filtering.` +\n                'To enable backend subscription filtering, upgrade your Amplify CLI to the latest version and push your app by running `amplify upgrade` followed by `amplify push`');\n        case RTFError.MaxAttributes: {\n            let message = `Your selective sync expression for ${modelDefinition.name} contains ${selSyncFields.size} different model fields: ${selSyncFieldStr}.\\n\\n`;\n            if (dynamicAuthModeFields.size > 0) {\n                message +=\n                    `Note: the number of fields you can use with selective sync is affected by @auth rules configured on the model.\\n\\n` +\n                        `Dynamic auth modes, such as owner auth and dynamic group auth each utilize 1 field.\\n` +\n                        `You currently have ${dynamicAuthModeFields.size} dynamic auth mode(s) configured on this model: ${dynamicAuthFieldsStr}.`;\n            }\n            return message;\n        }\n        case RTFError.MaxCombinations: {\n            let message = `Your selective sync expression for ${modelDefinition.name} contains ${filterCombinations} field combinations (total number of predicates in an OR expression).\\n\\n`;\n            if (dynamicAuthModeFields.size > 0) {\n                message +=\n                    `Note: the number of fields you can use with selective sync is affected by @auth rules configured on the model.\\n\\n` +\n                        `Dynamic auth modes, such as owner auth and dynamic group auth factor in to the number of combinations you're using.\\n` +\n                        `You currently have ${dynamicAuthModeFields.size} dynamic auth mode(s) configured on this model: ${dynamicAuthFieldsStr}.`;\n            }\n            return message;\n        }\n        case RTFError.RepeatedFieldname:\n            return `Your selective sync expression for ${modelDefinition.name} contains multiple entries for ${repeatedField} in the same AND group.`;\n        case RTFError.NotGroup:\n            return (`Your selective sync expression for ${modelDefinition.name} uses a \\`not\\` group. If you'd like to filter subscriptions in the backend, ` +\n                `rewrite your expression using \\`ne\\` or \\`notContains\\` operators.`);\n        case RTFError.FieldNotInType:\n            // no remediation instructions. We'll surface the message directly\n            return '';\n    }\n}\nexport function getUserGroupsFromToken(token, rule) {\n    // validate token against groupClaim\n    let userGroups = token[rule.groupClaim] || [];\n    if (typeof userGroups === 'string') {\n        let parsedGroups;\n        try {\n            parsedGroups = JSON.parse(userGroups);\n        }\n        catch (e) {\n            parsedGroups = userGroups;\n        }\n        userGroups = [].concat(parsedGroups);\n    }\n    return userGroups;\n}\nexport async function getModelAuthModes({ authModeStrategy, defaultAuthMode, modelName, schema, }) {\n    const operations = Object.values(ModelOperation);\n    const modelAuthModes = {\n        CREATE: [],\n        READ: [],\n        UPDATE: [],\n        DELETE: [],\n    };\n    try {\n        await Promise.all(operations.map(async (operation) => {\n            const authModes = await authModeStrategy({\n                schema,\n                modelName,\n                operation,\n            });\n            if (typeof authModes === 'string') {\n                modelAuthModes[operation] = [authModes];\n            }\n            else if (Array.isArray(authModes) && authModes.length) {\n                modelAuthModes[operation] = authModes;\n            }\n            else {\n                // Use default auth mode if nothing is returned from authModeStrategy\n                modelAuthModes[operation] = [defaultAuthMode];\n            }\n        }));\n    }\n    catch (error) {\n        logger.debug(`Error getting auth modes for model: ${modelName}`, error);\n    }\n    return modelAuthModes;\n}\nexport function getForbiddenError(error) {\n    const forbiddenErrorCodes = [401, 403];\n    let forbiddenError;\n    if (error && error.errors) {\n        forbiddenError = error.errors.find(err => forbiddenErrorCodes.includes(resolveServiceErrorStatusCode(err)));\n    }\n    else if (error && error.message) {\n        forbiddenError = error;\n    }\n    if (forbiddenError) {\n        return (forbiddenError.message ??\n            `Request failed with status code ${resolveServiceErrorStatusCode(forbiddenError)}`);\n    }\n    return null;\n}\nexport function resolveServiceErrorStatusCode(error) {\n    if (error?.$metadata?.httpStatusCode) {\n        return Number(error?.$metadata?.httpStatusCode);\n    }\n    else if (error?.originalError) {\n        return resolveServiceErrorStatusCode(error?.originalError);\n    }\n    else {\n        return null;\n    }\n}\nexport function getClientSideAuthError(error) {\n    const clientSideAuthErrors = Object.values(GraphQLAuthError);\n    const clientSideError = error &&\n        error.message &&\n        clientSideAuthErrors.find(clientError => error.message.includes(clientError));\n    return clientSideError || null;\n}\nexport async function getTokenForCustomAuth(authMode, amplifyConfig = {}) {\n    if (authMode === 'lambda') {\n        const { authProviders: { functionAuthProvider } = { functionAuthProvider: null }, } = amplifyConfig;\n        if (functionAuthProvider && typeof functionAuthProvider === 'function') {\n            try {\n                const { token } = await functionAuthProvider();\n                return token;\n            }\n            catch (error) {\n                throw new Error(`Error retrieving token from \\`functionAuthProvider\\`: ${error}`);\n            }\n        }\n        else {\n            // TODO: add docs link once available\n            throw new Error('You must provide a `functionAuthProvider` function to `DataStore.configure` when using lambda');\n        }\n    }\n}\n// Util that takes a modelDefinition and model and returns either the id value(s) or the custom primary key value(s)\nexport function getIdentifierValue(modelDefinition, model) {\n    const pkFieldNames = extractPrimaryKeyFieldNames(modelDefinition);\n    const idOrPk = pkFieldNames.map(f => model[f]).join(IDENTIFIER_KEY_SEPARATOR);\n    return idOrPk;\n}\n"],"names":[],"mappings":"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"}