> ## Documentation Index
> Fetch the complete documentation index at: https://doc.lucidworks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SharePoint V1

> The SharePoint connector retrieves content and metadata from an on-premises SharePoint repository.

export const schema = {
  "type": "object",
  "title": "SharePoint (deprecated)",
  "description": "A crawler for SharePoint 2010 and 2013 sites, lists, and libraries.",
  "required": ["id", "connector", "type", "pipeline", "properties"],
  "properties": {
    "category": {
      "type": "string",
      "title": "Category",
      "default": "Repository",
      "hints": ["hidden", "readonly"]
    },
    "id": {
      "type": "string",
      "title": "Datasource ID",
      "description": "Unique name for this datasource.",
      "minLength": 1,
      "pattern": "^[a-zA-Z0-9_-]+$"
    },
    "connector": {
      "type": "string",
      "title": "Connector Type",
      "description": "Connector Type.",
      "hints": ["hidden"],
      "minLength": 1
    },
    "type": {
      "type": "string",
      "title": "Datasource Type",
      "description": "Datasource type supported by the selected connector type.",
      "hints": ["hidden"],
      "minLength": 1
    },
    "pipeline": {
      "type": "string",
      "title": "Pipeline ID",
      "description": "Name of an existing index pipeline for processing documents.",
      "minLength": 1
    },
    "description": {
      "type": "string",
      "title": "Description",
      "description": "Optional description for this datasource."
    },
    "type_description": {
      "type": "string",
      "title": "Type Description",
      "default": "A crawler for SharePoint 2010 and 2013 sites, lists, and libraries.",
      "hints": ["hidden", "readonly"]
    },
    "parserId": {
      "type": "string",
      "title": "Parser",
      "description": "Parser used when parsing raw content. For some connectors, a configuration to 'retry' parsing if an error occurs is available as an advanced setting"
    },
    "properties": {
      "type": "object",
      "title": "Properties",
      "description": "Datasource configuration properties",
      "required": ["startLinks", "enable_security_trimming"],
      "properties": {
        "startLinks": {
          "type": "array",
          "title": "Start Links",
          "description": "SharePoint Sites, SharePoint Lists e.g. http(s)://<site_url>/Lists/<list_name>/AllItems.aspx and SharePoint Libraries e.g. http(s)://<site_url>/<library_name>/Forms/AllItems.aspx are allowed.",
          "items": {
            "type": "string",
            "minLength": 1
          }
        },
        "collection": {
          "type": "string",
          "title": "Collection",
          "description": "Collection documents will be indexed to.",
          "hints": ["hidden"],
          "pattern": "^[a-zA-Z0-9_-]+$"
        },
        "db": {
          "type": "object",
          "title": "Connector DB",
          "description": "Type and properties for a ConnectorDB implementation to use with this datasource.",
          "required": ["type"],
          "properties": {
            "type": {
              "type": "string",
              "title": "Implementation Class Name",
              "description": "Fully qualified class name of ConnectorDb implementation.",
              "default": "com.lucidworks.connectors.db.impl.MapDbConnectorDb",
              "minLength": 1
            },
            "inlinks": {
              "type": "boolean",
              "title": "Process Inlinks?",
              "description": "Keep track of incoming links. This negatively impacts performance and size of DB.",
              "default": false
            },
            "aliases": {
              "type": "boolean",
              "title": "Process Aliases?",
              "description": "Keep track of original URI-s that resolved to the current URI. This negatively impacts performance and size of DB.",
              "default": false
            },
            "inv_aliases": {
              "type": "boolean",
              "title": "Process Inverted Aliases?",
              "description": "Keep track of target URI-s that the current URI resolves to. This negatively impacts performance and size of DB.",
              "default": false
            }
          },
          "hints": ["hidden"]
        },
        "dedupe": {
          "type": "boolean",
          "title": "Dedupe documents",
          "description": "If true, documents will be deduplicated. Deduplication can be done based on an analysis of the content, on the content of a specific field, or by a JavaScript function. If neither a field nor a script are defined, content analysis will be used.",
          "default": false,
          "hints": ["advanced"]
        },
        "dedupeField": {
          "type": "string",
          "title": "Dedupe field",
          "description": "Field to be used for dedupe. Define either a field or a dedupe script, otherwise the full raw content of each document will be used.",
          "hints": ["advanced"]
        },
        "dedupeScript": {
          "type": "string",
          "title": "Dedupe script",
          "description": "Custom javascript to dedupe documents. The script must define a 'genSignature(content){}' function, but can use any combination of document fields. The function must return a string.",
          "hints": ["advanced", "code", "code/javascript"]
        },
        "dedupeSaveSignature": {
          "type": "boolean",
          "title": "Save dedupe signature",
          "description": "If true,the signature used for dedupe will be stored in a 'dedupeSignature_s' field. Note this may cause errors about 'immense terms' in that field.",
          "default": false,
          "hints": ["advanced"]
        },
        "delete": {
          "type": "boolean",
          "title": "Delete dead URIs",
          "description": "Set to true to remove documents from the index when they can no longer be accessed as unique documents.",
          "default": true
        },
        "deleteErrorsAfter": {
          "type": "integer",
          "title": "Fetch failure allowance",
          "description": "Number of fetch failures to tolerate before removing a document from the index. The default of -1 means no fetch failures will be removed.",
          "default": -1
        },
        "fetchThreads": {
          "type": "integer",
          "title": "Fetch threads",
          "description": "The number of threads to use during fetching. The default is 5.",
          "default": 5
        },
        "emitThreads": {
          "type": "integer",
          "title": "Emit threads",
          "description": "The number of threads used to send documents from the connector to the index pipeline. The default is 5.",
          "default": 5
        },
        "chunkSize": {
          "type": "integer",
          "title": "Fetch batch size",
          "description": "The number of items to batch for each round of fetching. A higher value can make crawling faster, but memory usage is also increased. The default is 1.",
          "default": 1,
          "hints": ["advanced"]
        },
        "fetchDelayMS": {
          "type": "integer",
          "title": "Fetch delay",
          "description": "Number of milliseconds to wait between fetch requests. The default is 0. This property can be used to throttle a crawl if necessary.",
          "default": 0,
          "hints": ["advanced"]
        },
        "refreshAll": {
          "type": "boolean",
          "title": "Recrawl all items",
          "description": "Set to true to always recrawl all items found in the crawldb.",
          "default": true,
          "hints": ["advanced"]
        },
        "refreshStartLinks": {
          "type": "boolean",
          "title": "Recrawl start links",
          "description": "Set to true to recrawl items specified in the list of start links.",
          "default": false,
          "hints": ["advanced"]
        },
        "refreshErrors": {
          "type": "boolean",
          "title": "Recrawl errors",
          "description": "Set to true to recrawl items that failed during the last crawl.",
          "default": false,
          "hints": ["advanced"]
        },
        "refreshOlderThan": {
          "type": "integer",
          "title": "Recrawl age",
          "description": "Number of seconds to recrawl items whose last fetched date is longer ago than this value.",
          "default": -1,
          "hints": ["advanced"]
        },
        "refreshIDPrefixes": {
          "type": "array",
          "title": "Recrawl ID prefixes",
          "description": "A prefix to recrawl all items whose IDs begin with this value.",
          "hints": ["advanced"],
          "items": {
            "type": "string"
          }
        },
        "refreshIDRegexes": {
          "type": "array",
          "title": "Recrawl ID regexes",
          "description": "A regular expression to recrawl all items whose IDs match this pattern.",
          "hints": ["advanced"],
          "items": {
            "type": "string"
          }
        },
        "refreshScript": {
          "type": "string",
          "title": "Recrawl script",
          "description": "A JavaScript function ('shouldRefresh()') to customize the items recrawled. ",
          "hints": ["advanced", "code", "code/javascript"]
        },
        "forceRefresh": {
          "type": "boolean",
          "title": "Force recrawl",
          "description": "Set to true to recrawl all items even if they have not changed since the last crawl.",
          "default": false,
          "hints": ["advanced"]
        },
        "forceRefreshClearSignatures": {
          "type": "boolean",
          "title": "Clear signatures",
          "description": "If true, signatures will be cleared if force recrawl is enabled.",
          "default": true,
          "hints": ["advanced"]
        },
        "retryEmit": {
          "type": "boolean",
          "title": "Retry emits",
          "description": "Set to true for emit batch failures to be retried on a document-by-document basis.",
          "default": true,
          "hints": ["advanced"]
        },
        "depth": {
          "type": "integer",
          "title": "Max crawl depth",
          "description": "Number of levels in a directory or site tree to descend for documents.",
          "default": -1
        },
        "maxItems": {
          "type": "integer",
          "title": "Max items",
          "description": "Maximum number of documents to fetch. The default (-1) means no limit.",
          "default": -1
        },
        "failFastOnStartLinkFailure": {
          "type": "boolean",
          "title": "Fail crawl if start links are invalid",
          "description": "If true, when Fusion cannot connect to any of the provided start links, the crawl is stopped and an exception logged.",
          "default": true,
          "hints": ["advanced"]
        },
        "crawlDBType": {
          "type": "string",
          "title": "Crawl database type",
          "description": "The type of crawl database to use, in-memory or on-disk.",
          "enum": ["in-memory", "on-disk"],
          "default": "on-disk",
          "hints": ["advanced"]
        },
        "commitAfterItems": {
          "type": "integer",
          "title": "Commit After This Many Items",
          "description": "Commit the crawlDB to disk after this many items have been received. A smaller number here will result in a slower crawl because of commits to disk being more frequent; conversely, a larger number here will cause a resumed job after a crash to need to recrawl more records.",
          "default": 10000,
          "hints": ["advanced"]
        },
        "initial_mapping": {
          "type": "object",
          "title": "Initial field mapping",
          "description": "Provides mapping of fields before documents are sent to an index pipeline.",
          "properties": {
            "skip": {
              "type": "boolean",
              "title": "Skip This Stage",
              "description": "Set to true to skip this stage.",
              "default": false,
              "hints": ["advanced"]
            },
            "label": {
              "type": "string",
              "title": "Label",
              "description": "A unique label for this stage.",
              "hints": ["advanced"],
              "maxLength": 255
            },
            "condition": {
              "type": "string",
              "title": "Condition",
              "description": "Define a conditional script that must result in true or false. This can be used to determine if the stage should process or not.",
              "hints": ["code", "code/javascript", "advanced"]
            },
            "reservedFieldsMappingAllowed": {
              "type": "boolean",
              "title": "Allow System Fields Mapping?",
              "default": false,
              "hints": ["advanced"]
            },
            "retentionMappings": {
              "type": "array",
              "title": "Field Retention",
              "description": "Fields that should be kept or deleted",
              "default": [],
              "hints": ["advanced"],
              "items": {
                "type": "object",
                "required": ["field"],
                "properties": {
                  "field": {
                    "type": "string",
                    "title": "Field",
                    "description": "The name of the field to operate on.",
                    "hints": ["advanced"]
                  },
                  "operation": {
                    "type": "string",
                    "title": "Operation",
                    "description": "The type of operation to perform: keep (default) or delete",
                    "enum": ["keep", "delete"],
                    "default": "keep",
                    "hints": ["advanced"]
                  }
                }
              }
            },
            "updateMappings": {
              "type": "array",
              "title": "Field Value Updates",
              "description": "Values that should be added to or set on a field. When a value is added, any values previously on the field will be retained. When a value is set, any values previously on the field will be overwritten.",
              "default": [],
              "hints": ["advanced"],
              "items": {
                "type": "object",
                "required": ["field", "value"],
                "properties": {
                  "field": {
                    "type": "string",
                    "title": "Field",
                    "description": "The name of the field to operate on.",
                    "hints": ["advanced"]
                  },
                  "value": {
                    "type": "string",
                    "title": "Value",
                    "description": "The value to add to or set on the field.",
                    "hints": ["advanced"]
                  },
                  "operation": {
                    "type": "string",
                    "title": "Operation",
                    "description": "The type of operation to perform: add (default) or set.",
                    "enum": ["add", "set"],
                    "default": "add",
                    "hints": ["advanced"]
                  }
                }
              }
            },
            "translationMappings": {
              "type": "array",
              "title": "Field Translations",
              "description": "Fields that should be moved or copied to another field. When a field is moved, the values from the source field are moved over to the target field and the source field is removed. When a field is copied, the values from the source field are copied over to the target field and the source field is retained.",
              "default": [{
                "source": "charSet",
                "target": "charSet_s",
                "operation": "move"
              }, {
                "source": "fetchedDate",
                "target": "fetchedDate_dt",
                "operation": "move"
              }, {
                "source": "lastModified",
                "target": "lastModified_dt",
                "operation": "move"
              }, {
                "source": "signature",
                "target": "dedupeSignature_s",
                "operation": "move"
              }, {
                "source": "length",
                "target": "length_l",
                "operation": "move"
              }, {
                "source": "mimeType",
                "target": "mimeType_s",
                "operation": "move"
              }, {
                "source": "parent",
                "target": "parent_s",
                "operation": "move"
              }, {
                "source": "owner",
                "target": "owner_s",
                "operation": "move"
              }, {
                "source": "group",
                "target": "group_s",
                "operation": "move"
              }],
              "hints": ["advanced"],
              "items": {
                "type": "object",
                "required": ["source", "target"],
                "properties": {
                  "source": {
                    "type": "string",
                    "title": "Source Field",
                    "description": "The name of the field to operate on.",
                    "hints": ["advanced"]
                  },
                  "target": {
                    "type": "string",
                    "title": "Target Field",
                    "description": "The name of the target field.",
                    "hints": ["advanced"]
                  },
                  "operation": {
                    "type": "string",
                    "title": "Operation",
                    "description": "The type of operation to perform: copy (default) or move.",
                    "enum": ["copy", "move"],
                    "default": "copy",
                    "hints": ["advanced"]
                  }
                }
              }
            },
            "unmappedRule": {
              "type": "object",
              "title": "Unmapped Fields",
              "description": "Fields not mapped by the above rules. By default, any remaining fields will be kept on the document.",
              "properties": {
                "keep": {
                  "type": "boolean",
                  "title": "Keep",
                  "description": "Keep all unmapped fields",
                  "default": true,
                  "hints": ["advanced"]
                },
                "delete": {
                  "type": "boolean",
                  "title": "Delete",
                  "description": "Delete all unmapped fields",
                  "default": false,
                  "hints": ["advanced"]
                },
                "fieldToMoveValuesTo": {
                  "type": "string",
                  "title": "Move",
                  "description": "Move all unmapped field values to this field",
                  "hints": ["advanced"]
                },
                "fieldToCopyValuesTo": {
                  "type": "string",
                  "title": "Copy",
                  "description": "Copy all unmapped field values to this field",
                  "hints": ["advanced"]
                },
                "valueToAddToUnmappedFields": {
                  "type": "string",
                  "title": "Add",
                  "description": "Add this value to all unmapped fields",
                  "hints": ["advanced"]
                },
                "valueToSetOnUnmappedFields": {
                  "type": "string",
                  "title": "Set",
                  "description": "Set this value on all unmapped fields",
                  "hints": ["advanced"]
                }
              },
              "default": {
                "keep": true,
                "delete": false,
                "fieldToMoveValuesTo": "",
                "fieldToCopyValuesTo": "",
                "valueToAddToUnmappedFields": "",
                "valueToSetOnUnmappedFields": ""
              }
            }
          },
          "category": "Field Transformation",
          "categoryPriority": 7,
          "hints": ["advanced"],
          "unsafe": false
        },
        "enable_security_trimming": {
          "type": "object",
          "title": "Enable Security Trimming",
          "properties": {
            "f.enable_sharepoint_security_trimming": {
              "type": "boolean",
              "title": "Enable security trimming",
              "description": "Enable indexing and query-time security-trimming of SharePoint users/groups (i.e. in addition to users/groups in Active Directory)",
              "default": true
            },
            "f.security_filter_cache": {
              "type": "boolean",
              "title": "Enable local security filter cache",
              "description": "Cache of document access control rules. This cache will not be shared with any other SharePoint datasources.",
              "default": false
            },
            "f.global_security_filter_cache": {
              "type": "boolean",
              "title": "Enable global security filter cache",
              "description": "Enable shared caching of access-control filters across datasources. This cache will be shared with other SharePoint datasources.",
              "default": false
            },
            "f.cache_expiration_time": {
              "type": "integer",
              "title": "Security cache expiration time",
              "description": "Time in seconds before the local and global security filter cache entries expire.",
              "default": 7200,
              "hints": ["advanced"]
            },
            "f.user_group_cache": {
              "type": "boolean",
              "title": "Enable User Group Caching in Solr",
              "description": "When this option is selected, the crawl process will store all user's LDAP and SharePoint groups a Solr sidecar collection such that a user's groups do not need to be looked up at query time. This is not to be mistaken with the other global and local security-filter caches of which cache the access-control filter of the user.",
              "default": true
            },
            "f.user_group_cache_collection_name": {
              "type": "string",
              "title": "User group cache Solr collection name",
              "description": "The name of the solr collection that will store this datsources' user group cache. This user group cache collection can be shared with other datasources. There is a `ds_id_s` field that is used to query user/groups separately.",
              "default": "sp_usr_grp_{datasource}"
            },
            "f.cache_max_size": {
              "type": "integer",
              "title": "Security cache max size",
              "description": "Maximum number of items to hold in the security filter cache.",
              "default": 1000,
              "hints": ["advanced"]
            },
            "f.ldap_host": {
              "type": "string",
              "title": "LDAP server host",
              "description": "Hostname of the LDAP or AD server where user information is stored."
            },
            "f.ldap_port": {
              "type": "integer",
              "title": "LDAP server port",
              "description": "Port for the LDAP or AD server.",
              "default": 389
            },
            "f.ldap_use_ssl": {
              "type": "boolean",
              "title": "LDAP server use ssl",
              "description": "Enable to use SSL when connecting to the LDAP or AD server.",
              "default": false
            },
            "f.ldap_search_base": {
              "type": "string",
              "title": "LDAP search base",
              "description": "Base node for LDAP or AD user and group searches."
            },
            "f.ldap_read_groups_type": {
              "type": "string",
              "title": "LDAP read groups type",
              "description": "Mode for reading groups from LDAP or AD.",
              "default": "TOKEN_GROUPS"
            },
            "f.ldap_follow_referrals": {
              "type": "boolean",
              "title": "LDAP referral",
              "description": "Indicates whether or not to follow LDAP referrals. Select this checkbox to \"follow\" referrals and un-select it to \"ignore\" referrals.",
              "default": true
            }
          }
        },
        "excludeExtensions": {
          "type": "array",
          "title": "Excluded file extensions",
          "description": "File extensions that should not to be fetched. This will limit this datasource to all extensions except this list.",
          "items": {
            "type": "string"
          }
        },
        "excludeRegexes": {
          "type": "array",
          "title": "Exclusive regexes",
          "description": "Regular expressions for URI patterns to exclude. This will limit this datasource to only URIs that do not match the regular expression.",
          "items": {
            "type": "string"
          }
        },
        "includeExtensions": {
          "type": "array",
          "title": "Included file extensions",
          "description": "File extensions to be fetched. This will limit this datasource to only these file extensions.",
          "items": {
            "type": "string"
          }
        },
        "includeRegexes": {
          "type": "array",
          "title": "Inclusive regexes",
          "description": "Regular expressions for URI patterns to include. This will limit this datasource to only URIs that match the regular expression.",
          "items": {
            "type": "string"
          }
        },
        "rewriteLinkScript": {
          "type": "string",
          "title": "URI rewrite script",
          "description": "A Javascript function 'rewriteLink(link) { }' to modify links to documents before they are fetched.",
          "hints": ["advanced", "code", "code/javascript"]
        },
        "diagnosticMode": {
          "type": "boolean",
          "title": "Diagnostic mode",
          "description": "Enable to print more detailed information to the logs about each request.",
          "default": false,
          "hints": ["advanced"]
        },
        "trackEmbeddedIDs": {
          "type": "boolean",
          "title": "Track embedded IDs?",
          "description": "Track IDs produced by splitters to enable dedupe and deletion of embedded content?",
          "default": true,
          "hints": ["advanced"]
        },
        "f.username": {
          "type": "string",
          "title": "SharePoint username",
          "description": "Name of a SharePoint user who has the required permissions to access SharePoint via the SOAP API."
        },
        "f.password": {
          "type": "string",
          "title": "SharePoint password",
          "description": "Password for the SharePoint user.",
          "hints": ["secret"]
        },
        "f.domain": {
          "type": "string",
          "title": "SharePoint domain",
          "description": "Authentication domain for the SharePoint user."
        },
        "f.maxSizeBytes": {
          "type": "integer",
          "title": "Maximum file size (bytes)",
          "description": "Maximum size, in bytes, of a document to crawl.",
          "default": 4194304
        },
        "f.minSizeBytes": {
          "type": "integer",
          "title": "Minimum file size (bytes)",
          "description": "Minimum size, in bytes, of a document to crawl.",
          "default": 0
        },
        "f.avoid_ssl_hostname_verification": {
          "type": "boolean",
          "title": " Avoid SSL hostname verification ",
          "description": "Enable this in cases when the CN on the SSL certificate does not match the host name of the server.",
          "default": true
        },
        "f.sharepoint_services_timeout": {
          "type": "integer",
          "title": "SharePoint services timeout",
          "description": "Time in milliseconds to wait for a server response.",
          "default": 600000,
          "hints": ["advanced"]
        },
        "f.enable_http_headers_debugging": {
          "type": "boolean",
          "title": "Enable HTTP headers debugging",
          "description": "Prints DEBUG level information to the logs.",
          "default": false,
          "hints": ["advanced"]
        },
        "f.remove_prepended_ids": {
          "type": "boolean",
          "title": "Remove prepended IDs",
          "description": "If fields have been defined to include PrependIds, this option will remove those IDs before indexing.",
          "default": true,
          "hints": ["advanced"]
        },
        "f.log_sharepoint_xml": {
          "type": "boolean",
          "title": "Log SharePoint Soap XML",
          "description": "When analyzing SharePoint crawls, it can be helpful to log the Soap XML messages between Fusion and SharePoint. By selecting this, SharePoint will log the xml of all messages to the connectors log.",
          "default": false,
          "hints": ["advanced"]
        },
        "f.replace_invalid_xml_entities": {
          "type": "boolean",
          "title": "Replace invalid xml entities",
          "description": "Replace invalid xml entities to avoid the error: \\\"Unmarshalling Error: Illegal character entity: expansion character ...\\\"",
          "default": false,
          "hints": ["advanced"]
        },
        "f.sharepoint_online": {
          "type": "boolean",
          "title": "SharePoint Online",
          "default": false,
          "hints": ["hidden"]
        },
        "parserRetryCount": {
          "type": "integer",
          "title": "Max Parser Retries",
          "description": "The maximum number of times the configured parser will try getting content before giving up",
          "default": 0,
          "maximum": 5,
          "exclusiveMaximum": true,
          "minimum": 0,
          "exclusiveMinimum": false
        },
        "f.kerberosEnabled": {
          "type": "boolean",
          "title": "kerberosEnabled",
          "description": "This property is no longer in use, and is only in place due to backwards compatible configuration validation purposes.",
          "hints": ["hidden"]
        },
        "f.kerberosLoginContextName": {
          "type": "string",
          "title": "kerberosLoginContextName",
          "description": "This property is no longer in use, and is only in place due to backwards compatible configuration validation purposes.",
          "hints": ["hidden"]
        },
        "f.kerberosSpn": {
          "type": "string",
          "title": "kerberosSpn",
          "description": "This property is no longer in use, and is only in place due to backwards compatible configuration validation purposes.",
          "hints": ["hidden"]
        },
        "f.kerberosPrincipal": {
          "type": "string",
          "title": "kerberosPrincipal",
          "description": "This property is no longer in use, and is only in place due to backwards compatible configuration validation purposes.",
          "hints": ["hidden"]
        },
        "f.kerberosKeytabFile": {
          "type": "string",
          "title": "kerberosKeytabFile",
          "description": "This property is no longer in use, and is only in place due to backwards compatible configuration validation purposes.",
          "hints": ["hidden"]
        },
        "f.kerberosKeytabBase64": {
          "type": "string",
          "title": "kerberosKeytabBase64",
          "description": "This property is no longer in use, and is only in place due to backwards compatible configuration validation purposes.",
          "hints": ["hidden"]
        },
        "f.kerberosPassword": {
          "type": "string",
          "title": "kerberosPassword",
          "description": "This property is no longer in use, and is only in place due to backwards compatible configuration validation purposes.",
          "hints": ["secret", "hidden"]
        },
        "f.firstLoginUrl": {
          "type": "string",
          "title": "First Login URL",
          "description": "You will need to specify this property if your SharePoint instance has Forms authentication enabled. This will resolve the error: \"Before opening files in this location you must first browse to the web site and select the option to login automatically\". If your SharePoint url is http://sphost/sites/test_site the first login URL will be http://sphost/_windows/default.aspx?ReturnUrl=%2f_layouts%2f15%2fAuthenticate.aspx%3fSource%3d%252Fsites%252Ftest%255Fsite%252F&Source=%2Fsites%2Ftest_site%2F",
          "hints": ["advanced"]
        },
        "f.proxyType": {
          "type": "string",
          "title": "Proxy type",
          "description": "Type of proxy to use, if any. Allowed values are 'HTTP' and 'SOCKS'. Leave empty for no proxy.",
          "default": "HTTP",
          "hints": ["hidden"]
        },
        "f.proxyHost": {
          "type": "string",
          "title": "Proxy host",
          "description": "The address to use when connecting through the proxy."
        },
        "f.proxyPort": {
          "type": "integer",
          "title": "Proxy port",
          "description": "The port to use when connecting through the proxy. (HTTP or SOCKS)"
        },
        "f.bulkStartLinks": {
          "type": "string",
          "title": "Bulk Start Links",
          "description": "If a large number of start links must be defined, you can provide them here. One link per line.",
          "hints": ["lengthy"]
        },
        "f.enable_retry": {
          "type": "boolean",
          "title": "Retry requests",
          "description": "Enable this to make the connector automatically try again if a request to SharePoint fails unexpectedly.",
          "default": false
        },
        "f.retry_attempts": {
          "type": "integer",
          "title": "Number of retries",
          "description": "If Retry requests is enabled, this number determines how many times the connector should retry a request before giving up.",
          "default": 4
        },
        "f.index_items_discarded": {
          "type": "boolean",
          "title": "Index discarded document metadata",
          "description": "Enable to index discarded document metadata",
          "default": true
        }
      },
      "propertyGroups": [{
        "label": "Crawl History",
        "properties": ["crawlDBType", "commitAfterItems"]
      }, {
        "label": "Security Trimming",
        "properties": ["enable_security_trimming"]
      }, {
        "label": "Dedupe",
        "properties": ["dedupe", "dedupeSaveSignature", "dedupeField", "dedupeScript"]
      }, {
        "label": "Crawl Performance",
        "properties": ["chunkSize", "fetchThreads", "fetchDelayMS", "emitThreads", "retryEmit", "failFastOnStartLinkFailure", "parserRetryCount", "f.enable_retry", "f.retry_attempts"]
      }, {
        "label": "Authentication",
        "properties": ["f.username", "f.password", "f.domain", "f.avoid_ssl_hostname_verification", "f.sharepoint_services_timeout", "f.enable_http_headers_debugging", "f.remove_prepended_ids", "f.proxyType", "f.proxyHost", "f.proxyPort", "f.firstLoginUrl", "f.kerberosEnabled", "f.kerberosLoginContextName", "f.kerberosSpn", "f.kerberosPrincipal", "f.kerberosKeytabFile", "f.kerberosKeytabBase64", "f.kerberosPassword"]
      }, {
        "label": "Recrawl Rules",
        "properties": ["refreshAll", "refreshStartLinks", "refreshErrors", "refreshOlderThan", "refreshIDPrefixes", "refreshIDRegexes", "refreshScript", "forceRefresh", "forceRefreshClearSignatures"]
      }, {
        "label": "Field Mapping",
        "properties": ["initial_mapping"]
      }, {
        "label": "Limit Documents",
        "properties": ["includeRegexes", "excludeRegexes", "includeExtensions", "excludeExtensions", "depth", "maxItems", "f.maxSizeBytes", "f.minSizeBytes", "delete", "deleteErrorsAfter", "f.index_items_discarded"]
      }]
    }
  },
  "category": "Other",
  "categoryPriority": 1,
  "unsafe": false
};

export const SchemaParamFields = ({schema}) => {
  const sanitize = str => {
    if (typeof str !== "string") return str;
    return str.replace(/^"(.*)"$/s, "$1").replace(/\\/g, "").replace(/"/g, "'");
  };
  const renderMd = str => {
    const s = sanitize(str);
    const text = (/[.!?]\)*$/).test(s) ? s : `${s}.`;
    return text.split(/(\*\*[^*]+\*\*|_[^_]+_|`[^`]+`)/g).map((part, i) => {
      if (part.startsWith("**")) return <strong key={i}>{part.slice(2, -2)}</strong>;
      if (part.startsWith("_")) return <em key={i}>{part.slice(1, -1)}</em>;
      if (part.startsWith("`")) return <code key={i}>{part.slice(1, -1)}</code>;
      return part;
    });
  };
  const {description, properties = {}, required: requiredProps = []} = schema;
  const visibleProps = useMemo(() => Object.entries(properties).filter(([, prop]) => !prop.hints?.includes("hidden")), [properties]);
  const renderProp = ([name, prop]) => {
    const isRequired = requiredProps.includes(name);
    const hasDefault = prop.default !== undefined;
    const rawDefault = prop.default;
    const hints = prop.hints || [];
    const isComplexDefault = hasDefault && (typeof rawDefault === "object" || typeof rawDefault === "string" && (rawDefault.length > 20 || rawDefault.includes('"')));
    const postBadges = [];
    if (prop.title) {
      postBadges.push(<><span className="text-stone-400 dark:text-stone-500">API property: </span>{name}</>);
    }
    const constraints = [];
    if (prop.minimum !== undefined && prop.maximum !== undefined) {
      constraints.push(`Range: ${prop.minimum} – ${prop.maximum}`);
    } else if (prop.minimum !== undefined) {
      constraints.push(`Min: ${prop.minimum}`);
    } else if (prop.maximum !== undefined) {
      constraints.push(`Max: ${prop.maximum}`);
    }
    if (prop.minLength !== undefined && prop.maxLength !== undefined) {
      constraints.push(`Length: ${prop.minLength} – ${prop.maxLength}`);
    } else if (prop.minLength !== undefined) {
      constraints.push(`Min length: ${prop.minLength}`);
    } else if (prop.maxLength !== undefined) {
      constraints.push(`Max length: ${prop.maxLength}`);
    }
    const fieldProps = {
      key: name,
      body: prop.title || name,
      type: prop.type,
      ...postBadges.length > 0 && ({
        post: postBadges
      }),
      ...isRequired && ({
        required: true
      }),
      ...!isComplexDefault && hasDefault ? {
        default: sanitize(String(rawDefault))
      } : {}
    };
    const isObject = prop.type === "object" && prop.properties;
    const isArrayOfObjects = prop.type === "array" && prop.items?.type === "object" && prop.items.properties;
    return <ParamField {...fieldProps}>
        {prop.description && <p>{renderMd(prop.description)}</p>}

        {prop.enum && <p>
            Allowed values: 
            {prop.enum.map((v, i) => <>{i > 0 && ", "}<code key={i}>{String(v)}</code></>)}
          </p>}

        {constraints.length > 0 && <p className="text-stone-500 dark:text-stone-400 text-sm">
            {constraints.join(" · ")}
          </p>}

        {isComplexDefault && <div className="flex">
            <p>
              <strong>Default:</strong>
            </p>
            <pre className="!my-0">
              <code>
                {JSON.stringify(rawDefault, null, 2)}
              </code>
            </pre>
          </div>}

        {isArrayOfObjects && <Expandable title="item properties">
            <SchemaParamFields schema={{
      properties: prop.items.properties,
      required: prop.items.required
    }} />
          </Expandable>}

        {isObject && <Expandable title="properties">
            <SchemaParamFields schema={{
      properties: prop.properties,
      required: prop.required
    }} />
          </Expandable>}
      </ParamField>;
  };
  return <div>
      {description && <p>{renderMd(description)}</p>}

      {visibleProps.map(renderProp)}
    </div>;
};

export const LwTemplate = ({title = "Key questions to get you started", icon = "sparkles", cta = "Powered by Agent Studio", linkHref = "https://lucidworks.com/demo/?utm_source=docs&utm_medium=referral&utm_campaign=docs_cta_ai"}) => {
  const [isLoaded, setIsLoaded] = useState(false);
  useEffect(() => {
    const timer = setTimeout(() => {
      setIsLoaded(true);
    }, 500);
    return () => clearTimeout(timer);
  }, []);
  return <div className="lw-template-container">
      <Card title={title} icon={icon}>
        {isLoaded && <span dangerouslySetInnerHTML={{
    __html: `<lw-template id="a029c1a9-28be-427e-b0e1-5d918920246a"></lw-template
            >`
  }} />}
        <Link href={linkHref} className="agent-studio-link text-left text-gray-600 gap-2 dark:text-gray-400 text-sm font-medium flex flex-row items-center hover:text-primary dark:hover:text-primary-light group-hover:text-primary group-hover:dark:text-primary-light">Powered by Lucidworks Agent Studio</Link>
      </Card>
    </div>;
};

[localhost link]: http://localhost:3000/docs/fusion-connectors/connectors/v1/sharepoint

[mintlify link]: https://doc.lucidworks.com/docs/fusion-connectors/connectors/v1/sharepoint

[old doc.lw link]: https://doc.lucidworks.com/fusion-connectors/61

<Callout icon="plug" color="#A4C6F7" iconType="solid">
  **Compatible with Fusion version:** 4.0.0 through 5.4.5
</Callout>

<Note>
  Deprecation and removal notice

  This connector is deprecated as of Fusion 5.4 and is removed or expected to be removed as of Fusion 5.5. Use the SharePoint Optimized V2 connector instead.

  For more information about deprecations and removals, including possible alternatives, see [Deprecations and Removals](/docs/fusion-connectors/deprecations-and-removals).
</Note>

<LwTemplate />

## Learn more

<Accordion title="Troubleshoot SharePoint Permissions">
  The SharePoint connector retrieves content and metadata from an on-premises SharePoint repository.

  When the connector is configured using a SharePoint username without sufficient privileges, the Fusion connectors log file `https://FUSION_HOST:FUSION_PORT/var/log/connectors/connectors.log` contains an error like the following:

  ```bash wrap theme={"dark"}
  crawler.common.sharepoint.exception.SharePointException: Server was unable to process request. ---> Attempted to perform an unauthorized operation. at crawler.common.sharepoint.service.BaseService.analyzeResponse(BaseService.java:194) ~[classes/:?] at crawler.common.sharepoint.service.SiteDataService.getContentBySiteOrList(SiteDataService.java:169) ~[classes/:?] at com.lucidworks.permissions.Main.test1(Main.java:50) [classes/:?] at com.lucidworks.permissions.Main.main(Main.java:32) [classes/:?]
  ```

  This user’s permissions may be sufficient to connect via SOAP and read the documents, but not sufficient to get the ACLs and other associated metadata. This may result in complete lack of access to documents, or access to unauthorized documents. Confirm that the configured SharePoint user has the required privileges.
</Accordion>

## Configuration

<Tip>
  When entering configuration values in the UI, use *unescaped* characters, such as `\t` for the tab character. When entering configuration values in the API, use *escaped* characters, such as `\\t` for the tab character.
</Tip>

<SchemaParamFields schema={schema} />
