> ## 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 V2

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

export const schema = {
  "type": "object",
  "title": "SharePoint (v2)",
  "description": "Connector for SharePoint",
  "required": ["parserId", "id", "properties", "pipeline"],
  "properties": {
    "created": {
      "type": "string",
      "title": "Date Created",
      "description": "The date at which this Configuration was created.",
      "hints": ["readonly", "hidden"]
    },
    "description": {
      "type": "string",
      "title": "Description",
      "description": "Optional description",
      "hints": ["lengthy"],
      "maxLength": 125
    },
    "collection": {
      "type": "string",
      "title": "Collection ID",
      "description": "The associated content Collection.",
      "hints": ["readonly", "hidden"],
      "minLength": 1,
      "pattern": "^[a-zA-Z0-9_-]+$"
    },
    "type": {
      "type": "string",
      "title": "Type",
      "description": "A type ID for this connector.",
      "hints": ["readonly", "hidden"]
    },
    "pipeline": {
      "type": "string",
      "title": "Pipeline ID",
      "description": "Name of the IndexPipeline used for processing output.",
      "default": "lucidworks-sharepoint",
      "minLength": 1,
      "pattern": "^[a-zA-Z0-9_-]+$"
    },
    "diagnosticLogging": {
      "type": "boolean",
      "title": "Diagnostic Logging",
      "description": "Enable diagnostic logging; disabled by default",
      "default": false
    },
    "connector": {
      "title": "Connector Type",
      "description": "Connector type.",
      "minLength": 1,
      "type": "string",
      "hints": ["hidden"]
    },
    "parserId": {
      "type": "string",
      "title": "Parser ID",
      "description": "The Parser to use in the associated IndexPipeline.",
      "default": "lucidworks-sharepoint"
    },
    "coreProperties": {
      "type": "object",
      "title": "Core Properties",
      "description": "Common behavior and performance settings.",
      "required": [],
      "properties": {
        "fetchSettings": {
          "type": "object",
          "title": "Fetch Settings",
          "description": "System level settings for controlling fetch behavior and performance.",
          "required": [],
          "properties": {
            "numFetchThreads": {
              "type": "number",
              "title": "Fetch Threads",
              "description": "Maximum number of fetch threads; defaults to 5.This setting controls the number of threads that call the Connectors fetch method.Higher values can, but not always, help with overall fetch performance.",
              "default": 5,
              "maximum": 500,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "indexingThreads": {
              "type": "number",
              "title": "Index Subscription Threads",
              "description": "Maximum number of indexing threads; defaults to 4.This setting controls the number of threads in the indexing service used for processing content documents emitted by this datasource.Higher values can sometimes help with overall fetch performance.",
              "default": 4,
              "maximum": 10,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "pluginInstances": {
              "type": "number",
              "title": "Number of plugin instances for distributed fetching",
              "description": "Maximum number of plugin instances for distributed fetching. Only specified number of plugin instanceswill do fetching. This is useful for distributing load between different instances.",
              "default": 0,
              "maximum": 500,
              "exclusiveMaximum": false,
              "minimum": 0,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "fetchItemQueueSize": {
              "type": "number",
              "title": "Fetch Item Queue Size",
              "description": "Size of the fetch item queue.Larger values result in increased memory usage, but potentially higher performance.Default is 10k.",
              "default": 10000,
              "hints": ["hidden"],
              "maximum": 500000,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "fetchRequestCheckInterval": {
              "type": "number",
              "title": "Fetch request check interval(ms)",
              "description": "The amount of time to wait before check if a request is done",
              "default": 15000,
              "hints": ["hidden"],
              "maximum": 500000,
              "exclusiveMaximum": false,
              "minimum": 1000,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "fetchResponseScheduledTimeout": {
              "type": "number",
              "title": "Fetch response scheduled timeout(ms)",
              "description": "The maximum amount of time for a response to be scheduled. The task will be canceled if this setting is exceeded.",
              "default": 300000,
              "maximum": 500000,
              "exclusiveMaximum": false,
              "minimum": 1000,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "fetchResponseCompletedTimeout": {
              "type": "number",
              "title": "Fetch response completion timeout(ms)",
              "description": "The maximum amount of time for a response to be completed. If exceeded, the task will be retried if the job is still running",
              "default": 300000,
              "hints": ["hidden"],
              "maximum": 600000,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "indexingInactivityTimeout": {
              "type": "number",
              "title": "Indexing inactivity timeout(seconds)",
              "description": "The maximum amount of time to wait for indexing results (in seconds). If exceeded, the job will fail with an indexing inactivity timeout.",
              "default": 86400,
              "maximum": 691200,
              "exclusiveMaximum": false,
              "minimum": 60,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "pluginInactivityTimeout": {
              "type": "number",
              "title": "Plugin inactivity timeout(seconds)",
              "description": "The maximum amount of time to wait for plugin activity (in seconds). If exceeded, the job will fail with a plugin inactivity timeout.",
              "default": 600,
              "maximum": 691200,
              "exclusiveMaximum": false,
              "minimum": 60,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "indexMetadata": {
              "type": "boolean",
              "title": "Index metadata",
              "description": "When enabled the metadata of skipped items will be indexed to the content collection.",
              "default": false
            },
            "indexContentFields": {
              "type": "boolean",
              "title": "Index content fields",
              "description": "When enabled, content fields will be indexed to the crawl-db collection.",
              "default": false
            },
            "asyncParsing": {
              "type": "boolean",
              "title": "Async Parsing",
              "description": "When enabled, content will be indexed asynchronously.",
              "default": false
            }
          },
          "interfaces": ["com.lucidworks.fusion.connector.plugin.api.config.CoreConfig$FetchSystemSettings"]
        }
      },
      "interfaces": ["com.lucidworks.fusion.connector.plugin.api.config.CoreConfig"],
      "hints": ["advanced"]
    },
    "modified": {
      "type": "string",
      "title": "Date Modified",
      "description": "The date at which this Configuration was last modified.",
      "hints": ["readonly", "hidden"]
    },
    "id": {
      "type": "string",
      "title": "Configuration ID",
      "description": "A unique identifier for this Configuration.",
      "minLength": 1,
      "pattern": "^[a-zA-Z0-9_-]+$"
    },
    "category": {
      "type": "string",
      "title": "Category",
      "default": "Connector for SharePoint",
      "hints": ["hidden", "readonly"]
    },
    "properties": {
      "type": "object",
      "title": "SharePoint properties",
      "description": "Plugin specific properties.",
      "required": [],
      "properties": {
        "webApplicationSettings": {
          "type": "object",
          "title": "Web application settings",
          "description": "Web application settings to control site collections, web and lists to be included or excluded from the fetching process.",
          "required": ["webApplicationUrl"],
          "properties": {
            "webApplicationUrl": {
              "type": "string",
              "title": "Web application URL",
              "description": "The URL must have the format https://<hostname>[:port].",
              "minLength": 1
            },
            "includeSiteCollections": {
              "type": "array",
              "title": "Include Site Collections",
              "description": "A list of site collections with specific inner containers to crawl. Because only site collection administrators or site collection auditors can list the site collections in a SharePoint web application, use this when you are crawling as a user that is not an admin/auditor. This allows you to explicitly list site collections you want to crawl. The paths specified in this property must be relative to the web application url",
              "items": {
                "type": "object",
                "required": [],
                "properties": {
                  "siteCollectionPath": {
                    "type": "string",
                    "title": "Site collection path",
                    "description": "The path of the specific Site Collection to crawl.",
                    "minLength": 1
                  },
                  "includeWebs": {
                    "type": "array",
                    "title": "Include SharePoint Webs",
                    "description": "A list of specific SharePoint Web Names (within the specific Collection) to include in the fetching process.",
                    "items": {
                      "type": "object",
                      "required": [],
                      "properties": {
                        "relativePath": {
                          "type": "string",
                          "title": "Sharepoint Web relative path",
                          "description": "Relative path of a specific SharePoint Web/Site within the Site Collection context. The path must not start with the leading '/', and need to be decoded, i.e: \n- https://host/sites/collection/sub_site: the relative path is 'sub_site'\n- https://host/sites/collection/sub_site/sub_sub_site: the relative path is 'sub_site/sub_sub_site'\n- https://host/sites/collection/sub%20site/sub%20sub%20site: the relative path is 'sub site/sub sub site'\n- https://host/sites/collection/sub%5Esite: the relative path is 'sub^site'",
                          "minLength": 1
                        },
                        "includeLists": {
                          "type": "array",
                          "title": "Include Sharepoint List or Libraries",
                          "description": "A set of list or library names (within the Web) to include in the fetching process.",
                          "items": {
                            "type": "object",
                            "required": [],
                            "properties": {
                              "relativePath": {
                                "type": "string",
                                "title": "SharePoint List or Library name",
                                "description": "Name of a List or library, that is inside a specific Site Collection or Web. The name must not start with the leading slash '/', and need to be decoded, i.e: \n- https://host/sites/collection/Lists/listName: the list name is 'listName'\n- https://host/sites/collection/libraryName: the library name is 'libraryName'\n- https://host/sites/collection/sub_site/Lists/listName: the list name is 'listName'\n- https://host/sites/collection/sub_site/libraryName: the library name is 'libraryName'\n- https://host/sites/collection/sub_site/library%20name: the library name is 'library name\n- https://host/sites/collection/sub_site/sub_sub_site/libraryName: the library name is 'libraryName'",
                                "minLength": 1
                              },
                              "folders": {
                                "type": "array",
                                "title": "SharePoint Folders",
                                "description": "A set of folder names (within the List or Library) to include in the fetching process.The name must not start with the leading slash '/', and need to be decoded. It also support include of nestedFolders. I.e: \n- https://host/sites/collection/libraryName/folderName: the folder name is 'folderName' (it will crawl content under 'folderName')\n- https://host/sites/collection/sub_site/folderName/folderName2: the folder name is 'folderName/folderName2 (it will crawl content under 'folderName/folderName2')\n- https://host/sites/collection/sub_site/folder%20name: the folder name is 'folder Name\n- https://host/sites/collection/sub_site/folder%5Ename: the folder name is 'folder^Name",
                                "default": [],
                                "items": {
                                  "type": "string",
                                  "minLength": 2
                                }
                              }
                            },
                            "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.webapp.WebAppIncludeListConfig"]
                          }
                        }
                      },
                      "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.webapp.WebAppIncludeWebConfig"]
                    }
                  },
                  "excludeWebs": {
                    "type": "array",
                    "title": "Exclude SharePoint Webs",
                    "description": "A list of SharePoint Web Names (within the specific Site Collection) to exclude from the fetching process.",
                    "items": {
                      "type": "object",
                      "required": [],
                      "properties": {
                        "relativePath": {
                          "type": "string",
                          "title": "Sharepoint Web relative path",
                          "description": "Relative path of a SharePoint web/site under the SharePoint site collection context, i.e - https://sharepoint/sites/collection/sub_site: the relative path is 'sub_site', - https://sharepoint/sites/collection/sub_site/sub_sub_site: the relative path is 'sub_site/sub_sub_site'",
                          "minLength": 1
                        },
                        "excludeLists": {
                          "type": "array",
                          "title": "Exclude Sharepoint List or Libraries",
                          "description": "A set of list or libraries within Web to be excluded from the fetching process",
                          "default": [],
                          "items": {
                            "type": "string",
                            "minLength": 1
                          }
                        }
                      },
                      "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.webapp.WebAppExcludeWebConfig"]
                    }
                  },
                  "includeLists": {
                    "type": "array",
                    "title": "Include Sharepoint List or Libraries",
                    "description": "A set of List or Library names (within the specific Site Collection) to include in the fetching process.",
                    "items": {
                      "type": "object",
                      "required": [],
                      "properties": {
                        "relativePath": {
                          "type": "string",
                          "title": "SharePoint List or Library name",
                          "description": "Name of a List or library, that is inside a specific Site Collection or Web. The name must not start with the leading slash '/', and need to be decoded, i.e: \n- https://host/sites/collection/Lists/listName: the list name is 'listName'\n- https://host/sites/collection/libraryName: the library name is 'libraryName'\n- https://host/sites/collection/sub_site/Lists/listName: the list name is 'listName'\n- https://host/sites/collection/sub_site/libraryName: the library name is 'libraryName'\n- https://host/sites/collection/sub_site/library%20name: the library name is 'library name\n- https://host/sites/collection/sub_site/sub_sub_site/libraryName: the library name is 'libraryName'",
                          "minLength": 1
                        },
                        "folders": {
                          "type": "array",
                          "title": "SharePoint Folders",
                          "description": "A set of folder names (within the List or Library) to include in the fetching process.The name must not start with the leading slash '/', and need to be decoded. It also support include of nestedFolders. I.e: \n- https://host/sites/collection/libraryName/folderName: the folder name is 'folderName' (it will crawl content under 'folderName')\n- https://host/sites/collection/sub_site/folderName/folderName2: the folder name is 'folderName/folderName2 (it will crawl content under 'folderName/folderName2')\n- https://host/sites/collection/sub_site/folder%20name: the folder name is 'folder Name\n- https://host/sites/collection/sub_site/folder%5Ename: the folder name is 'folder^Name",
                          "default": [],
                          "items": {
                            "type": "string",
                            "minLength": 2
                          }
                        }
                      },
                      "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.webapp.WebAppIncludeListConfig"]
                    }
                  },
                  "excludeLists": {
                    "type": "array",
                    "title": "Exclude Sharepoint List or Libraries",
                    "description": "A set of list or libraries names (within the specific Collection) to  exclude in the fetching process.",
                    "default": [],
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.webapp.WebAppIncludeSiteCollectionConfig"]
              }
            },
            "excludeSiteCollections": {
              "type": "array",
              "title": "Exclude Site Collections",
              "description": "A list of site collections paths to be excluded from the fetching process. The paths specified in this property must be relative to the web application url.",
              "default": [],
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "inclusiveSiteCollectionRegexes": {
              "type": "array",
              "title": "Inclusive Site Collection Regexes",
              "description": "A list of regexes that will be used to include matching site collection paths e.g \"/sites/a.*\" or \"/sites/[a-mA-M].*\". All site collections will be listed from the web application to carry out the filtering.",
              "default": [],
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "exclusiveSiteCollectionRegexes": {
              "type": "array",
              "title": "Exclusive Site Collection Regexes",
              "description": "A list of regexes that will be used to exclude matching site collection paths e.g \"/sites/h.*\", \"/sites/[h-zH-Z].*\", exact matches \"/sites/name\" or \"/\" to exclude default site collection. All site collections will be listed from the web application to carry out the filtering.",
              "default": [],
              "items": {
                "type": "string",
                "minLength": 1
              }
            }
          },
          "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.webapp.WebAppSettingsConfig"]
        },
        "webApplications": {
          "type": "array",
          "title": "Web applications(Deprecated)",
          "description": "Web applications to crawl. This property accepts a single web application only. This property was deprecated, use Web application settings instead.",
          "items": {
            "type": "object",
            "required": ["webApplicationName", "webApplicationUrl"],
            "properties": {
              "webApplicationName": {
                "type": "string",
                "title": "Web application Name",
                "description": "Unique name of this web app",
                "minLength": 1
              },
              "webApplicationUrl": {
                "type": "string",
                "title": "Web application URL",
                "description": "The URL must have the format https://<hostname>[:port].",
                "minLength": 1
              },
              "siteCollectionsWithChildren": {
                "type": "array",
                "title": "Included Site Collections",
                "description": "A list of site collections with specific inner containers to crawl. Because only site collection administrators or site collection auditors can list the site collections in a SharePoint web application... use this when you are crawling as a user that is not an admin/auditor. This allows you to explicitly list site collections you want to crawl. The urls you specify must be relative urls to the web application url.",
                "items": {
                  "type": "object",
                  "required": [],
                  "properties": {
                    "siteCollectionPath": {
                      "type": "string",
                      "title": "Site collection path",
                      "description": "Site collection path",
                      "minLength": 1
                    },
                    "lists": {
                      "type": "array",
                      "title": "Sharepoint List or Libraries in the site collection",
                      "description": "A set of list or libraries within the site collection to crawl",
                      "items": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "relativePath": {
                            "type": "string",
                            "title": "SharePoint List or library name",
                            "description": "Name of a List or library under the SharePoint web context",
                            "minLength": 1
                          },
                          "folders": {
                            "type": "array",
                            "title": "SharePoint Folders",
                            "description": "A list of folders within the list to crawl",
                            "default": [],
                            "items": {
                              "type": "string",
                              "minLength": 2
                            }
                          }
                        },
                        "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.crawl.SharepointListCrawlProperties"]
                      }
                    },
                    "webs": {
                      "type": "array",
                      "title": "Sharepoint webs",
                      "description": "A list of webs to crawl within the parent site collection",
                      "items": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "relativePath": {
                            "type": "string",
                            "title": "Sharepoint Web relative path",
                            "description": "Relative path of aWeb under the SharePoint site collection context, i.e - https://sharepoint/sites/collection/sub_site: the relative path is 'sub_site', - https://sharepoint/sites/collection/sub_site/sub_sub_site: the relative path is 'sub_site/sub_sub_site'",
                            "minLength": 1
                          },
                          "lists": {
                            "type": "array",
                            "title": "Sharepoint List or Libraries",
                            "description": "A set of list or libraries within the parent Web to crawl",
                            "items": {
                              "type": "object",
                              "required": [],
                              "properties": {
                                "relativePath": {
                                  "type": "string",
                                  "title": "SharePoint List or library name",
                                  "description": "Name of a List or library under the SharePoint web context",
                                  "minLength": 1
                                },
                                "folders": {
                                  "type": "array",
                                  "title": "SharePoint Folders",
                                  "description": "A list of folders within the list to crawl",
                                  "default": [],
                                  "items": {
                                    "type": "string",
                                    "minLength": 2
                                  }
                                }
                              },
                              "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.crawl.SharepointListCrawlProperties"]
                            }
                          }
                        },
                        "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.crawl.SharepointWebCrawlProperties"]
                      }
                    }
                  },
                  "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.crawl.SharePointSiteCollectionCrawlProperties"]
                }
              },
              "excludeSiteCollections": {
                "type": "array",
                "title": "Excluded Site Collections",
                "description": "A list of site collections to exclude from the crawl. Useful to exclude certain site collections at crawling all the sharepoint instance",
                "default": [],
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "includedFileExtensions": {
                "type": "array",
                "title": "Included file extensions (Deprecated, use Limit documents > Limit by extension)",
                "description": "Set of file extensions to be fetched. If specified, all non-matching files will be skipped.",
                "default": [],
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "excludedFileExtensions": {
                "type": "array",
                "title": "Excluded file extensions (Deprecated, use Limit documents > Limit by extension)",
                "description": "A set of all file extensions to be skipped from the fetch.",
                "default": [],
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "inclusiveRegexes": {
                "type": "array",
                "title": "Inclusive regexes (Deprecated, use Limit documents > Limit by regular expression)",
                "description": "Regular expressions for URI patterns to include. This will limit this datasource to only URIs that match the regular expression.",
                "default": [],
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "exclusiveRegexes": {
                "type": "array",
                "title": "Exclusive regexes (Deprecated, use Limit documents > Limit by regular expression)",
                "description": "Regular expressions for URI patterns to exclude. This will limit this datasource to only URIs that do not match the regular expression.",
                "default": [],
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "regexCacheSize": {
                "type": "number",
                "title": "",
                "default": 10000,
                "hints": ["hidden"],
                "maximum": 2147483647,
                "exclusiveMaximum": false,
                "minimum": -2147483648,
                "exclusiveMinimum": false,
                "multipleOf": 1
              },
              "siteCollections": {
                "type": "array",
                "title": "Deprecated: Site collection list",
                "description": "Deprecated: Use the 'Site Collection List' property instead. A list of site collections to crawl. Because only site collection administrators or site collection auditors can list the site collections in a SharePoint web application... use this when you are crawling as a user that is not an admin/auditor. This allows you to explicitly list site collections you want to crawl. The urls you specify must be relative urls to the web application url.Only the collection listed here will be fetch.",
                "default": [],
                "hints": ["advanced"],
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              }
            },
            "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharePointWebApplicationConfig", "com.lucidworks.fusion.connector.checker.config.ExtensionConfig$Properties", "com.lucidworks.fusion.connector.checker.config.RegexConfig$Properties", "com.lucidworks.fusion.connector.checker.config.RegexCacheConfig"]
          }
        },
        "authenticationProperties": {
          "type": "object",
          "title": "Authentication settings",
          "description": "Select only one option",
          "required": [],
          "properties": {
            "ntlmProperties": {
              "type": "object",
              "title": "NTLM Authentication settings",
              "description": "Settings for on premise NTLM authorization",
              "required": ["password", "user"],
              "properties": {
                "user": {
                  "type": "string",
                  "title": "User",
                  "description": "User",
                  "minLength": 1
                },
                "password": {
                  "type": "string",
                  "title": "Password",
                  "description": "Password",
                  "hints": ["secret"],
                  "minLength": 1
                },
                "domain": {
                  "type": "string",
                  "title": "Domain",
                  "description": "Domain",
                  "minLength": 1
                },
                "workstation": {
                  "type": "string",
                  "title": "Workstation",
                  "description": "Workstation",
                  "minLength": 1
                }
              },
              "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.auth.SharePointNTLMProperties", "com.lucidworks.connector.components.httpclient.config.authentication.NTLMConfig$Properties", "com.lucidworks.connector.components.httpclient.config.authentication.AuthConfig$Properties"]
            },
            "fbaProperties": {
              "type": "object",
              "title": "Form based authentication settings",
              "description": "Settings for on premise FBA authorization",
              "required": ["password", "user"],
              "properties": {
                "user": {
                  "type": "string",
                  "title": "User",
                  "description": "User",
                  "minLength": 1
                },
                "password": {
                  "type": "string",
                  "title": "Password",
                  "description": "Password",
                  "hints": ["secret"],
                  "minLength": 1
                }
              },
              "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.auth.SharePointFbaProperties"]
            },
            "spoidcrlProperties": {
              "type": "object",
              "title": "Credential based Authentication (SharePoint online)",
              "description": "Settings for SharePoint Online authentication based on account/password credentials - used for both Native and ADFS (Active Directory Federation Services) authorization.",
              "required": ["password", "account"],
              "properties": {
                "account": {
                  "type": "string",
                  "title": "SharePoint Online Account",
                  "description": "Your Microsoft SharePoint Online Account name which takes the form of username@domain.com",
                  "minLength": 1
                },
                "password": {
                  "type": "string",
                  "title": "Password",
                  "description": "Password for your Microsoft SharePoint Online Account.",
                  "hints": ["secret"],
                  "minLength": 1
                },
                "sessionExpirationMs": {
                  "type": "number",
                  "title": "Deprecated",
                  "description": "Deprecated value, not used anymore, to be removed with migration process fix",
                  "hints": ["hidden", "advanced"],
                  "maximum": 9223372036854776000,
                  "exclusiveMaximum": false,
                  "minimum": -9223372036854776000,
                  "exclusiveMinimum": false,
                  "multipleOf": 1
                },
                "microsoftOnlineLoginServerUrl": {
                  "type": "string",
                  "title": "Microsoft Online Login URL",
                  "description": "URL to microsoft login server.",
                  "default": "https://login.microsoftonline.com",
                  "hints": ["advanced"]
                }
              },
              "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.auth.SPOIDCRLAuthenticationProperties"]
            },
            "appOnlyOauthProperties": {
              "type": "object",
              "title": "App-Only Authentication (OAuth protocol)",
              "description": "Settings for App-Only/Oauth authorization.",
              "required": ["clientSecret", "azureLoginEndpoint", "appAuthClientId", "tenant"],
              "properties": {
                "appAuthClientId": {
                  "type": "string",
                  "title": "Azure AD Client ID",
                  "description": "The Azure client ID of your application.",
                  "maxLength": 100,
                  "minLength": 1
                },
                "tenant": {
                  "type": "string",
                  "title": "Azure AD Tenant",
                  "description": "The Office365 tenant name to use when authenticating with Azure AD. E.g. exampleapp.onmicrosoft.com",
                  "maxLength": 2083,
                  "minLength": 1
                },
                "clientSecret": {
                  "type": "string",
                  "title": "Azure AD Client Secret",
                  "description": "The Azure secret related to Your Client ID.",
                  "hints": ["secret"],
                  "maxLength": 2083,
                  "minLength": 1
                },
                "azureLoginEndpoint": {
                  "type": "string",
                  "title": "Azure AD Login Endpoint",
                  "description": "The Azure login endpoint to use when authenticating.",
                  "default": "https://login.windows.net",
                  "hints": ["advanced"],
                  "maxLength": 2083,
                  "minLength": 1
                }
              },
              "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.auth.SharePointAppOnlyOAuthAuthProperties"]
            },
            "appOnlyPrivateKeyProperties": {
              "type": "object",
              "title": "App-Only Authentication with private key",
              "description": "Settings for App-Only authorization with private key credentials.",
              "required": ["clientId", "pkcs12KeystoreBase64String", "azureLoginEndpoint", "tenant", "pkcs12KeystorePassword"],
              "properties": {
                "clientId": {
                  "type": "string",
                  "title": "Azure AD Client ID",
                  "description": "The Azure client ID of your application.",
                  "maxLength": 100,
                  "minLength": 1
                },
                "tenant": {
                  "type": "string",
                  "title": "Azure AD Tenant",
                  "description": "The Office365 tenant name to use when authenticating with Azure AD. E.g. exampleapp.onmicrosoft.com",
                  "maxLength": 2083,
                  "minLength": 1
                },
                "azureLoginEndpoint": {
                  "type": "string",
                  "title": "Azure AD Login Endpoint",
                  "description": "The Azure login endpoint to use when authenticating.",
                  "default": "https://login.windows.net",
                  "hints": ["advanced"],
                  "maxLength": 2083,
                  "minLength": 1
                },
                "pkcs12KeystoreBase64String": {
                  "type": "string",
                  "title": "Azure AD PKCS12 Base64 Keystore",
                  "description": "This is the base64 string of your PKCS12 keystore loaded with the PFX certificate file supplied by Azure AD. To get this value, first take the Azure AD yourcert.pfx you recieved from Azure and convert to PKCS12 keystore format (example \"keytool -importkeystore -srckeystore yourcert.pfx -srcstoretype pkcs12 -destkeystore yourcert.p12 -deststoretype pkcs12\"). Next convert your cert.p12 to base64 string.",
                  "hints": ["secret"],
                  "maxLength": 10000,
                  "minLength": 1
                },
                "pkcs12KeystorePassword": {
                  "type": "string",
                  "title": "Azure AD PKCS12 Keystore Password",
                  "description": "Password of the PKCS12 keystore.",
                  "hints": ["secret"],
                  "maxLength": 100,
                  "minLength": 1
                }
              },
              "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.auth.SharePointAppOnlyKeyAuthProperties"]
            },
            "sessionExpirationMs": {
              "type": "number",
              "title": "Session expiration (milliseconds)",
              "description": "How long (in milliseconds) before new authentication cookies should be fetched.",
              "default": 180000,
              "hints": ["advanced"],
              "maximum": 86400000,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "noIndexEvaluation": {
              "type": "boolean",
              "title": "Crawl searchable content",
              "description": "Crawl searchable content. See https://docs.microsoft.com/en-us/sharepoint/make-site-content-searchablefor more details",
              "default": false,
              "hints": ["advanced"]
            }
          },
          "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharePointAuthenticationConfig"]
        },
        "proxyProperties": {
          "type": "object",
          "title": "Proxy options",
          "description": "A set of options for configuring the proxy.",
          "required": [],
          "properties": {
            "url": {
              "type": "string",
              "title": "Proxy URL",
              "description": "The proxy URL",
              "minLength": 1
            },
            "username": {
              "type": "string",
              "title": "Proxy username",
              "description": "Proxy username",
              "minLength": 1
            },
            "password": {
              "type": "string",
              "title": "Proxy password",
              "description": "Proxy password",
              "hints": ["secret"],
              "minLength": 1
            }
          },
          "interfaces": ["com.lucidworks.connector.components.httpclient.config.ProxyConfig$Properties"],
          "hints": ["advanced"]
        },
        "maximumItemLimitConfig": {
          "type": "object",
          "title": "Item Count Limit",
          "required": [],
          "properties": {
            "maxItems": {
              "type": "number",
              "title": "Maximum Output Limit",
              "description": "Limits the number of items emitted to the configured IndexPipeline. The default is no limit (-1).",
              "default": -1,
              "maximum": 2147483647,
              "exclusiveMaximum": false,
              "minimum": -2147483648,
              "exclusiveMinimum": false,
              "multipleOf": 1
            }
          },
          "interfaces": ["com.lucidworks.fusion.connector.plugin.api.config.MaximumItemLimitConfig$Properties"],
          "hints": ["advanced"]
        },
        "sizeLimitProperties": {
          "type": "object",
          "title": "Item Size Limits",
          "description": "Options for including or excluding items based on size, in bytes.",
          "required": [],
          "properties": {
            "maxSizeBytes": {
              "type": "number",
              "title": "Maximum",
              "description": "Used for excluding items when the item size is larger than the configured value.",
              "default": -1,
              "maximum": 2147483647,
              "exclusiveMaximum": false,
              "minimum": -2147483648,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "minSizeBytes": {
              "type": "number",
              "title": "Minimum",
              "description": "Used for excluding items when the item size is smaller than the configured value.",
              "default": 1,
              "maximum": 2147483647,
              "exclusiveMaximum": false,
              "minimum": -2147483648,
              "exclusiveMinimum": false,
              "multipleOf": 1
            }
          },
          "interfaces": ["com.lucidworks.fusion.connector.checker.config.SizeLimitConfig$Properties"],
          "hints": ["advanced"]
        },
        "retryProperties": {
          "type": "object",
          "title": "Retry Options (This property is deprecated and should not be used",
          "description": "A set of options for configuring retry behavior.",
          "required": ["delayMs", "maxDelayTimeMs", "delayFactor"],
          "properties": {
            "maxDelayTimeMs": {
              "type": "number",
              "title": "Maximum Delay Time",
              "description": "The maximum time wait time between successive retries.",
              "default": 30000,
              "maximum": 600000,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "maxTimeLimitMs": {
              "type": "number",
              "title": "Maximum Time Limit",
              "description": "This setting is used to limit the maximum amount of time spent on retries. Note: this will be ignored if \"Maximum Retries\" is specified.",
              "default": 60000,
              "maximum": 28800000,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "errorExclusions": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              }
            },
            "maxRetries": {
              "type": "number",
              "title": "Maximum Retries",
              "description": "The retryer will retry failed operations in the case that they might succeed if attempted again. This parameter states the number of attempts to retry until giving up. This parameter, if specified, will override the \"Stop retrying after time (milliseconds)\" parameter.",
              "default": 7,
              "maximum": 100,
              "exclusiveMaximum": false,
              "minimum": 0,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "delayFactor": {
              "type": "number",
              "title": "Delay Factor",
              "description": "The retryer will retry failed operations in the case that they might succeed if attempted again. The retryer will sleep an exponential amount of time after the first failed attempt and retry in exponentially incrementing amounts after each failed attempt up to the maximumTime. nextWaitTime = exponentialIncrement * multiplier.",
              "default": 2,
              "maximum": 9999,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "delayMs": {
              "type": "number",
              "title": "Retry Delay",
              "description": "Sets the delay between retries, exponentially backing off to the maxDelayTimeMs and multiplying successive delays by the delayFactor",
              "default": 100,
              "maximum": 9223372036854776000,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            }
          },
          "interfaces": ["com.lucidworks.connector.components.httpclient.config.HttpRetryConfig$Properties"],
          "hints": ["hidden", "advanced"]
        },
        "timeoutsProperties": {
          "type": "object",
          "title": "Http timeout options",
          "description": "A set of options for configuring the http client.",
          "required": [],
          "properties": {
            "readTimeoutMs": {
              "type": "number",
              "title": "",
              "default": 300000,
              "maximum": 600000,
              "exclusiveMaximum": false,
              "minimum": 0,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "connectTimeoutMs": {
              "type": "number",
              "title": "",
              "default": 60000,
              "maximum": 300000,
              "exclusiveMaximum": false,
              "minimum": 0,
              "exclusiveMinimum": false,
              "multipleOf": 1
            }
          },
          "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharePointTimeoutsConfig$Properties", "com.lucidworks.connector.components.httpclient.config.TimeoutsConfig$Properties"],
          "hints": ["advanced"]
        },
        "connectionsProperties": {
          "type": "object",
          "title": "Http connection options",
          "required": ["maxConnections"],
          "properties": {
            "maxConnections": {
              "type": "number",
              "title": "Max connections",
              "description": "The maximum number of connections",
              "default": 20,
              "maximum": 2147483647,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "maxPerRoute": {
              "type": "number",
              "title": "Max per route",
              "description": "Defines a connection limit per one HTTP route. In simple cases you can understand this as a per target host limit. Under the hood things are a bit more interesting: HttpClient maintains a couple of HttpRoute objects, which represent a chain of hosts each, like proxy1 -> proxy2 -> targetHost. Connections are pooled on per-route basis. In simple cases, when you're using default route-building mechanism and provide no proxy suport, your routes are likely to include target host only, so per-route connection pool limit effectively becomes per-host limit.",
              "default": 20,
              "hints": ["hidden", "readonly"],
              "maximum": 2147483647,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "ignoreSSLValidationExceptions": {
              "type": "boolean",
              "title": "Ignore SSL Validation Exceptions",
              "description": "Do not attempt to do an SSL Handshake and do not verify the hostname of SSL certificates. Use this when accessing an https url with a self-signed or enterprise certificate authority that you do not want to put in the Java keystore.",
              "default": false
            },
            "maxIdleConnectionsTime": {
              "type": "number",
              "title": "Maximum idle connections time",
              "description": "Maximum time in milliseconds of connections can stay idle while kept alive in the connection pool. Connections whose inactivity period exceeds this value will get closed and evicted from the pool.",
              "default": 5000,
              "maximum": 9223372036854776000,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            }
          },
          "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharepointConnectionsConfig$Properties", "com.lucidworks.connector.components.httpclient.config.ConnectionsConfig$Properties"],
          "hints": ["advanced"]
        },
        "itemRetryProperties": {
          "type": "object",
          "title": "Item retry settings",
          "description": "Options to configure the retry operation for items.",
          "required": [],
          "properties": {
            "maxRetries": {
              "type": "number",
              "title": "Max retry attempts",
              "description": "The maximum number of attempts for a failed item",
              "default": 3,
              "maximum": 20,
              "exclusiveMaximum": false,
              "minimum": 0,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "retryDelayInSeconds": {
              "type": "number",
              "title": "Retry delay",
              "description": "The amount of time, in seconds, before process again a failed item",
              "default": 30,
              "maximum": 600,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            }
          },
          "interfaces": ["com.lucidworks.connectors.components.config.ItemRetryConfig$Properties"],
          "hints": ["advanced"]
        },
        "limitDocuments": {
          "type": "object",
          "title": "Limit Documents",
          "description": "A set of options for configuring indexing of Documents.",
          "required": [],
          "properties": {
            "fetchLists": {
              "type": "boolean",
              "title": "Fetch Lists",
              "description": "Check this to fetch SharePoint lists during the crawl. Set this to false to ignore all lists and its list items.",
              "default": true
            },
            "fetchListItems": {
              "type": "boolean",
              "title": "Fetch List Items",
              "description": "Check this to fetch SharePoint lists items during the crawl. Set this to false to ignore all list items and its children.",
              "default": true
            },
            "fetchAttachments": {
              "type": "boolean",
              "title": "Fetch Attachments",
              "description": "Set this to true if you want to fetch list item attachments, false otherwise.",
              "default": true
            },
            "indexSites": {
              "type": "boolean",
              "title": "Index Sites",
              "description": "Set this to true if you want to index each SharePoint site as a document in the content collection. If set to false, the contents of sites will still be fetched, but there will not be a document in the content collection for each Site and its metadata.",
              "default": true
            },
            "indexLists": {
              "type": "boolean",
              "title": "Index Lists",
              "description": "Set this to true if you want to index each SharePoint List as a document in the content collection. If set to false, the List content will still be indexed, but there will not be a document in the content collection for this List and its metadata.",
              "default": true
            },
            "indexEmptyLists": {
              "type": "boolean",
              "title": "Index Empty Lists",
              "description": "Set this to true if you want to index SharePoint Lists as a document in the content collection even when it has an List Item Count = 0.",
              "default": true
            },
            "indexFolders": {
              "type": "boolean",
              "title": "Index Folders",
              "description": "Set this to true if you want to index each folder within SharePoint Lists as a document in the content collection. If set to false, the contents of folders will still be indexed, but there will not be a document in the content collection for this folder and its metadata.",
              "default": true
            },
            "indexTaxonomyTerms": {
              "type": "boolean",
              "title": "Index Taxonomy Terms. (Experimental)",
              "description": "When enabled, the term(s) will be indexed as Documents.",
              "default": false,
              "hints": ["hidden"]
            },
            "expandTaxonomyTerms": {
              "type": "boolean",
              "title": "Expand Taxonomy Terms Path",
              "description": "When enabled, index the taxonomy term path of each list item with a taxonomy field. This feature doesn't support incremental crawls. If term labels change, it's necessary to re-index all documents to update the labels",
              "default": false
            },
            "indexDocumentMetadata": {
              "type": "boolean",
              "title": "Index Document Metadata",
              "description": "Index the document's metadata for those files/attachments that do not meet the maximum/minimum size limits. Content of the documents will not be indexed.",
              "default": false,
              "hints": ["hidden"]
            },
            "indexListItems": {
              "type": "boolean",
              "title": "Index List Item Containers",
              "description": "Set this to true if you want to index each SharePoint List Item Containers. This type of list items only contain metadata (they are not represented by physical files), Attachments will be fetched as long as the property fetchAttachments is enabled. If set to false, SharePoint List Item Containers will be skipped. but Attachments will be fetched as long as the property fetchAttachments is enabled",
              "default": true
            },
            "indexListItemDocuments": {
              "type": "boolean",
              "title": "Index List Item Documents",
              "description": "Set this to true if you want to index each SharePoint List Item Documents. This type of list items are represented by files (like pdf files or word documents), they will be parsed and indexed along side with its metadata. If set to false, SharePoint List Item Documents will be skipped",
              "default": true
            },
            "includeListBaseTypes": {
              "type": "array",
              "title": "Included List Base Types",
              "description": "If specified, the only SharePoint Lists that will be fetched are the ones that match one of these base types; if none is specified, all types will be fetched.In order to have this property working, set property 'Fetch Lists' to true.",
              "items": {
                "type": "string",
                "enum": ["DocumentLibrary", "GenericList", "Survey", "Issue"],
                "default": "DocumentLibrary"
              }
            },
            "limitByRegex": {
              "type": "object",
              "title": "Limit documents by regular expressions",
              "required": [],
              "properties": {
                "inclusiveRegexes": {
                  "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.",
                  "default": [],
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "exclusiveRegexes": {
                  "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.",
                  "default": [],
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "regexCacheSize": {
                  "type": "number",
                  "title": "",
                  "default": 10000,
                  "hints": ["hidden"],
                  "maximum": 2147483647,
                  "exclusiveMaximum": false,
                  "minimum": -2147483648,
                  "exclusiveMinimum": false,
                  "multipleOf": 1
                }
              },
              "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.limitdocuments.LimitDocumentsByRegexConfig", "com.lucidworks.fusion.connector.checker.config.RegexConfig$Properties", "com.lucidworks.fusion.connector.checker.config.RegexCacheConfig"]
            },
            "limitByExtension": {
              "type": "object",
              "title": "Limit documents by extension",
              "required": [],
              "properties": {
                "includedFileExtensions": {
                  "type": "array",
                  "title": "Included file extensions",
                  "description": "Set of file extensions to be fetched. If specified, all non-matching files will be skipped.",
                  "default": [],
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "excludedFileExtensions": {
                  "type": "array",
                  "title": "Excluded file extensions",
                  "description": "A set of all file extensions to be skipped from the fetch.",
                  "default": [],
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "regexCacheSize": {
                  "type": "number",
                  "title": "",
                  "default": 10000,
                  "hints": ["hidden"],
                  "maximum": 2147483647,
                  "exclusiveMaximum": false,
                  "minimum": -2147483648,
                  "exclusiveMinimum": false,
                  "multipleOf": 1
                }
              },
              "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.limitdocuments.LimitDocumentsByExtensionConfig", "com.lucidworks.fusion.connector.checker.config.ExtensionConfig$Properties", "com.lucidworks.fusion.connector.checker.config.RegexCacheConfig"]
            }
          },
          "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharePointLimitDocumentsProperties"]
        },
        "documentMetadata": {
          "type": "object",
          "title": "Document metadata",
          "description": "A set of options for configuring indexing of Documents Metadata in case of items filtering",
          "required": [],
          "properties": {
            "indexByRegex": {
              "type": "boolean",
              "title": "Index Document Metadata by Regex Filtering",
              "description": "Index the document's metadata for those files/attachments that do not meet the regexes limits. Content of the documents will not be indexed.",
              "default": false
            },
            "indexByExtension": {
              "type": "boolean",
              "title": "Index Document Metadata by Extension Filtering",
              "description": "Index the document's metadata for those files/attachments that do not meet the file extension limits. Content of the documents will not be indexed.",
              "default": false
            },
            "indexBySize": {
              "type": "boolean",
              "title": "Index Document Metadata by Size Filtering",
              "description": "Index the document's metadata for those files/attachments that do not meet the maximum/minimum size limits. Content of the documents will not be indexed.",
              "default": false
            }
          },
          "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharePointDocumentMetadataConfig"],
          "hints": ["advanced"]
        },
        "requestsProperties": {
          "type": "object",
          "title": "Requests settings",
          "description": "A set of options for configuring the requests the connector will send to the SharePoint server instance",
          "required": ["userAgent"],
          "properties": {
            "apiQueryRowLimit": {
              "type": "number",
              "title": "API query row limit",
              "default": 500,
              "hints": ["advanced"],
              "maximum": 2147483647,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "changeApiQueryRowLimit": {
              "type": "number",
              "title": "Changes API query row limit",
              "default": 200,
              "hints": ["advanced"],
              "maximum": 2147483647,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            },
            "userAgent": {
              "type": "string",
              "title": "User agent",
              "description": "The user agent header decorates the http traffic. This is important for preventing hard rate limiting by SharePointOnline. The user agent naming conventions are 'ISV|CompanyName|AppName/Version' and 'NONISV|CompanyName|AppName/Version', see here for more details about: https://docs.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online#what-is-definition-of-undecorated-traffic ",
              "default": "ISV|Lucidworks|Connector/2.0",
              "hints": ["advanced"]
            },
            "capUserAgent": {
              "type": "string",
              "title": "CAP User Agent",
              "description": "When \"O365 Conditional Access Policy (CAP) setting\" is enabled, it is needed to use a compliant User-Agent that matches one of the supported devices when doing O365 STS authentication. For example if iOS is a supported platform, set this to 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/60.0.3112.89 Mobile/14G60 Safari/602.1'",
              "hints": ["advanced"]
            }
          },
          "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharePointRequestsProperties"],
          "hints": ["advanced"]
        },
        "incrementalCrawlingProperties": {
          "type": "object",
          "title": "Incremental crawling settings",
          "description": "A set of options for configuring the incremental crawling behavior",
          "required": [],
          "properties": {
            "jobExecutionsForSiteCollections": {
              "type": "number",
              "title": "Max job executions for site collection deletion",
              "description": "Maximum number of job executions before removing a deleted site collection",
              "default": 5,
              "maximum": 2147483647,
              "exclusiveMaximum": false,
              "minimum": 1,
              "exclusiveMinimum": false,
              "multipleOf": 1
            }
          },
          "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharePointIncrementalCrawlingProperties"],
          "hints": ["advanced"]
        },
        "security": {
          "type": "object",
          "title": "Security filtering configuration",
          "required": [],
          "properties": {
            "enabled": {
              "type": "boolean",
              "title": "Enable security trimming",
              "description": "Enable query-time security-trimming",
              "default": true
            },
            "collectionId": {
              "type": "string",
              "title": "ACL collection id",
              "description": "Id of the collection to be used for storing ACL records. If not specified, ACL collection name will be generated automatically using pattern '<datasource_id>_access_control_hierarchy'."
            }
          },
          "interfaces": ["com.lucidworks.fusion.connector.plugin.api.config.security.StaticSecurityConfig$Properties", "com.lucidworks.fusion.connector.plugin.api.config.security.SecurityFilteringProperties", "com.lucidworks.fusion.connector.plugin.api.config.security.AccessControlConfig$Properties"]
        }
      },
      "interfaces": ["com.lucidworks.connector.plugins.sharepoint.config.SharePointConfig$Properties", "com.lucidworks.fusion.connector.plugin.api.config.ConnectorPluginProperties", "com.lucidworks.connector.components.httpclient.config.ProxyConfig", "com.lucidworks.connector.components.httpclient.config.HttpRetryConfig", "com.lucidworks.fusion.connector.plugin.api.config.MaximumItemLimitConfig", "com.lucidworks.fusion.connector.plugin.api.config.security.StaticSecurityConfig", "com.lucidworks.connectors.components.config.ItemRetryConfig", "com.lucidworks.connector.plugins.sharepoint.config.SharePointTimeoutsConfig", "com.lucidworks.fusion.connector.checker.config.SizeLimitConfig", "com.lucidworks.connector.plugins.sharepoint.config.SharepointConnectionsConfig"]
    },
    "type_description": {
      "type": "string",
      "title": "Type Description",
      "default": "Connector for SharePoint",
      "hints": ["hidden", "readonly"]
    }
  },
  "category": "Repository",
  "categoryPriority": 1
};

export const SchemaParamFields = ({schema}) => {
  const sanitize = str => {
    if (typeof str !== "string") return str;
    return str.replace(/^"(.*)"$/s, "$1").replace(/\\/g, "").replace(/"/g, "'");
  };
  const formatDescription = str => {
    const s = sanitize(str);
    return (/[.!?]\)*$/).test(s) ? s : `${s}.`;
  };
  const {description, properties = {}, required: requiredProps = []} = schema;
  const visibleProps = useMemo(() => Object.entries(properties).filter(([, prop]) => !prop.hints?.includes("hidden")), [properties]);
  return <div>
      {description && <p>{formatDescription(description)}</p>}

      {visibleProps.map(([name, prop]) => {
    const isRequired = requiredProps.includes(name);
    const hasDefault = prop.default !== undefined;
    const rawDefault = prop.default;
    const isComplexDefault = hasDefault && (typeof rawDefault === "object" || typeof rawDefault === "string" && (rawDefault.length > 20 || rawDefault.includes('"')));
    const fieldProps = {
      key: name,
      body: prop.title || name,
      type: prop.type,
      ...prop.title && ({
        post: [<><span className="text-stone-400 dark:text-stone-500">API property: </span>{name}</>]
      }),
      ...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>{formatDescription(prop.description)}</p>}

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

            {isArrayOfObjects && <div className="flex">
              <p>
                <strong>Object attributes:</strong>
              </p>
              <pre className="!my-0">
                <code>
                  {'{\n'}
                  {Object.entries(prop.items.properties).map(([iname, iprop]) => <>
                      {`  ${iname}`}
                      {prop.items?.required?.includes(iname) && <span style={{
      color: 'red'
    }}> required</span>}
                      {`: {\n    display name: ${sanitize(iprop.title || '')}\n    type: ${iprop.type}\n  }\n`}
                    </>)}
                  {'}'}
                </code>
              </pre>
              </div>}

            {isObject && <Expandable title="properties">
                <SchemaParamFields schema={{
      properties: prop.properties,
      required: prop.required
    }} />
              </Expandable>}
          </ParamField>;
  })}
    </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/sharepoint-v2

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

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

<Callout icon="plug" color="#A4C6F7" iconType="solid">
  * **Latest version:** v4.0.0
  * **Compatible with Fusion version:** 5.1.0 through 5.5.2
</Callout>

<Note>
  Deprecation and removal notice

  This connector is deprecated as of June 19, 2023 and is removed or expected to be removed as of January 31, 2024. The SharePoint V2 connector is not compatible with Fusion 5.6 and later, regardless of the removal date. 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>

This connector supports the following SharePoint server versions:

* Microsoft SharePoint 2013
* Microsoft SharePoint 2016
* Microsoft SharePoint 2019
* Microsoft SharePoint Online

<LwTemplate />

## Configuration

This section specifies the configuration properties for the SharePoint V2 connector.

<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>

### Web applications

<Tip>
  **Important**

  At least one web application must be defined in the configuration, which represents the SharePoint web application to crawl.
</Tip>

| Property                                            | Description                                                                                                                                                                                                                                                     |
| --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Web Application name                                | Unique name of the web application in the specific configuration. Required field. Type: string. For example, `webApp1`.                                                                                                                                         |
| Web Application URL                                 | URL of the web application. Required field. For example, `https://myWebApplication1`.                                                                                                                                                                           |
| Site Collection List                                | List of site collection paths. For example, if the **site collection URL** is `https://webApplication/sites/MySiteCollection`, the **site collection path** is `/sites/MySiteCollection` (which is the last portion of the URL). Multiple paths can be entered. |
| SharePoint List or libraries in the site collection | A set of list or library names within the site collection to crawl. For example, **Documents**.                                                                                                                                                                 |
| SharePoint webs                                     | List of web names to crawl within the parent site collection.                                                                                                                                                                                                   |
| SharePoint List or library name                     | Name of a list or library under the SharePoint web context. For example, **Documents**.                                                                                                                                                                         |
| SharePoint Folders                                  | Folders within the list to crawl.                                                                                                                                                                                                                               |
| Excluded Site Collections                           | List of site collections to exclude from the crawl. <Note> Exclusions can improve performance. </Note>                                                                                                                                                          |
| Included file extensions                            | Attachments with a file extension from this list are included (and indexed) when filtering occurs. For example, `.txt`. <Note> Attachments are the only object types with file extensions. </Note>                                                              |
| Excluded file extensions                            | Attachments with a file extension from this list are excluded (and discarded) when filtering occurs. For example, `.txt`.                                                                                                                                       |
| Inclusive regexes                                   | Regular expressions (regex) defined to index SharePoint objects including sites, lists, items, and attachments. The SharePoint object URL is used to match the regular expressions.                                                                             |
| Exclusive regexes                                   | Regular expressions (regex) defined to discard SharePoint objects including sites, lists, items, and attachments. The SharePoint object URL is used to match the regular expressions.                                                                           |

### Authentication

<Tip>
  **Important**

  Select only one authentication method for the configuration.
</Tip>

#### Windows NT LAN Manager (NTLM) authentication

| Property    | Description                                           |
| ----------- | ----------------------------------------------------- |
| User        | User name of the authenticating account               |
| Password    | Password of the authenticating account                |
| Domain      | Domain in which the client workstation has membership |
| Workstation | Client workstation name                               |

#### Forms-based authentication (FBA)

| Property | Description                                                  |
| -------- | ------------------------------------------------------------ |
| Username | User name created in the membership database                 |
| Password | Password of the user name created in the membership database |

#### SharePoint online authentication

| Property                  | Description                        |
| ------------------------- | ---------------------------------- |
| SharePoint online account | Valid SharePoint account           |
| Password                  | SharePoint online account password |
| Microsoft login URL       | URL of the Microsoft login server  |

#### App-only authentication (OAuth)

| Property                              | Description                          |
| ------------------------------------- | ------------------------------------ |
| Azure AD (Active Directory) client ID | Azure client ID of the application   |
| Azure AD tenant                       | Office365 tenant name                |
| Azure AD client secret                | Azure client secret of the client ID |
| Azure AD login endpoint               | Login URL for authentication         |

#### App-only authentication (OAuth) with private key

| Property                              | Description                                                                                                                   |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Azure AD (Active Directory) client ID | Azure client ID of the application                                                                                            |
| Azure AD tenant                       | Office365 tenant name                                                                                                         |
| Azure AD login endpoint               | Login URL for authentication                                                                                                  |
| Azure AD PKCS12 key                   | The base64 string of the PKCS12 keystore loaded with the PFX (personal exchange format) certificate file supplied by Azure AD |
| Azure AD PKCS12 keystore password     | Password of the Azure AD PKCS12 keystore                                                                                      |

#### Requirements to index all site collections

The following conditions *must* be met to index site collections:

* The authentication method must be one of the following:

  * Windows NT LAN Manager (NTLM)
  * SharePoint online
  * App-only (OAuth)
* Credentials must list *all* site collections. For:

  * **NTLM.** Credentials must be an administrative account in the configuration.
  * **SharePoint online.** Credentials must be a SharePoint admin account in the configuration, *not* a site collection admin account.
  * **App-only (OAuth).** The application registered in the SharePoint instance must have a tenant scope.

### Crawl searchable content

For detailed information about enabling and crawling searchable content, see [Enable content on a site to be searchable](https://docs.microsoft.com/en-us/sharepoint/make-site-content-searchable).

### Limit documents

These properties limit the documents and how they are processed.

| Property                             | Description                                                                                                                                                                                                                                                                  |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Fetch lists                          | If enabled:  <br />● Fetches and indexes lists included in site collection. <br />● Discards lists and associated items not included in site collection.                                                                                                                     |
| Fetch list items                     | If enabled, retrieves and indexes list items.                                                                                                                                                                                                                                |
| Fetch attachments                    | If enabled, retrieves and indexes item attachments.                                                                                                                                                                                                                          |
| Index sites                          | If enabled, indexes sites. <Note> This option does not affect the list or subsites retrieval. </Note>                                                                                                                                                                        |
| Index lists                          | If enabled, indexes lists. <Note> This option does not affect the list item retrieval. </Note>                                                                                                                                                                               |
| Index empty lists                    | <br />● If enabled, indexes lists with no items (empty lists). <br />● If disabled, discards empty lists.                                                                                                                                                                    |
| Index folders                        | <br />● If enabled, indexes folder items. <br />● If disabled, discards folder items.                                                                                                                                                                                        |
| Index taxonomy terms  (Experimental) | If enabled, indexes taxonomy terms from the default term store and places those terms in the content collection.                                                                                                                                                             |
| Index Document Metadata              | Indexes metadata for files and attachments that do *not* meet maximum or minimum size limits. <Note> Does *not* index the content of the documents. </Note>                                                                                                                  |
| Included List Base Types             | If the **Fetch Lists** property is set to **true** *and* base type is:  <br />● Specified, fetches only SharePoint lists with that base type. <br />● Not specified, fetches *all* SharePoint lists.  Base list types are Document Library, Generic List, Issue, and Survey. |

### Request settings

| Property                    | Description                                                                                                                                |            |                 |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | --------------- |
| API query row limit         | Number of items to retrieve per page. Default value is **500**. The connector paginates requests to retrieve list items.                   |            |                 |
| Changes API query row limit | Number of events to retrieve per page. Default value is **200**. The connector paginates requests to retrieve changes per site collection. |            |                 |
| User agent                  | Value of the `http` header `User-Agent` for each request. Default value is \*\*ISV                                                         | Lucidworks | Fusion/1.0\*\*. |

### Security trimming configuration

| Property                 | Description                                                                                                                                              |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Enable security trimming | If enabled, the connector indexes SharePoint groups and the role assignments of each object type. Object types are sites, lists, items, and attachments. |
| ACL collection name      | Access Control List (ACL) collection name. Role assignments and SharePoint groups are indexed in this collection.                                        |

#### Security filtering

Security filtering in the SharePoint connector requires the ACL (LDAP) connector to function correctly.

<Note>
  For more information, see [Active Directory Connector for ACLs V2 Configuration Reference](/docs/fusion-connectors/connectors/ad-acl-v2).
</Note>

For content collection, the SharePoint connector indexes documents. The value in the `acl_ss` field in each document contains **roleAssignment IDs**, where the role assignments define each object.

For the access control collection, the SharePoint connector indexes:

* SharePoint groups that contain Active Directory (AD) users and groups
* Role assignment

  <Note>
    The LDAP ACL connector indexes the AD users and AD groups to the same access control collection.
  </Note>

### Common properties

#### Proxy options

| Property       | Description                             |
| -------------- | --------------------------------------- |
| Proxy URL      | URL of proxy server                     |
| Proxy username | User name to log in to the proxy server |
| Proxy password | Password of the proxy username          |

#### Item count limit

| Property             | Description                                                                                     |
| -------------------- | ----------------------------------------------------------------------------------------------- |
| Maximum output limit | Maximum number of indexed documents. Default value is **-1**, which specifies no maximum limit. |

#### Item size limit

| Property | Description                        |
| -------- | ---------------------------------- |
| Maximum  | Maximum byte size of an attachment |
| Minimum  | Minimum byte size of an attachment |

#### Item retry options

| Property           | Description                                                 |
| ------------------ | ----------------------------------------------------------- |
| Max retry attempts | Maximum of attempts to retry if an item fails.              |
| Retry delay        | Number of seconds (delay) between retries if an item fails. |

<Note>
  Other retry options are deprecated.
</Note>

#### HTTP timeout options

| Property           | Description                                                                                                                        |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| Read timeout       | Number of milliseconds before timeout occurs. Value is passed to the `http` client. Default value is **300 000 ms**.               |
| Connection timeout | Number of milliseconds before a connection attempt times out. Value is passed to the `http` client. Default value is **6 000 ms**. |

#### HTTP connection options

| Property                                                | Description                                                                                                            |
| ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Maximum connections                                     | Maximum number of connections available in the pool. Default value is **1000**.                                        |
| Maximum per route                                       | Maximum number of connections per route in the same target URL. Default value is **200**.                              |
| Ignore SSL (Secure Sockets Layer) validation exceptions | If enabled, the `http` client does not fail if the server certificate cannot be validated. Default value is **false**. |

## Test NTLM permissions to successfully crawl a site collection

<Note>
  This is only applicable to SharePoint on-premise deployments.
</Note>

To verify the NTLM account has appropriate permissions to crawl a site collection using the SharePoint V2 connector:

1. Copy the `check-ntlm-account-can-crawl-sharepoint-site-collection.ps1` PowerShell script below to a folder on your computer.

```shell wrap  theme={"dark"}
$site_col_url="https://your.sharepoint-site.com/sites/mysitecol"

$cred = (Get-Credential)

if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
{
$certCallback = @"
    using System;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    public class ServerCertificateValidationCallback
    {
        public static void Ignore()
        {
            if(ServicePointManager.ServerCertificateValidationCallback ==null)
            {
                ServicePointManager.ServerCertificateValidationCallback +=
                    delegate
                    (
                        Object obj,
                        X509Certificate certificate,
                        X509Chain chain,
                        SslPolicyErrors errors
                    )
                    {
                        return true;
                    };
            }
        }
    }
"@
    Add-Type $certCallback
 }

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
[ServerCertificateValidationCallback]::Ignore()

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "text/xml")
$headers.Add("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetUpdatedFormDigestInformation")
$headers.Add("X-RequestForceAuthentication", "true")
$headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f")

$body = "<?xml version=`"1.0`" encoding=`"utf-8`"?>`n<soap:Envelope xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`" xmlns:xsd=`"http://www.w3.org/2001/XMLSchema`" xmlns:soap=`"http://schemas.xmlsoap.org/soap/envelope/`">`n  <soap:Body>`n    <GetUpdatedFormDigestInformation xmlns=`"http://schemas.microsoft.com/sharepoint/soap/`" />`n  </soap:Body>`n</soap:Envelope>"

$response = Invoke-RestMethod "${site_col_url}/_vti_bin/sites.asmx" -Method 'POST' -Headers $headers -Body $body -Credential $cred

$digest_value = $response.Envelope.Body.GetUpdatedFormDigestInformationResponse.FirstChild.DigestValue

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "text/xml")
$headers.Add("X-RequestForceAuthentication", "true")
$headers.Add("X-RequestDigest", $digest_value)
$headers.Add("Accept", "application/json")
$headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f")

$body = @'
<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="14.0.0.0" LibraryVersion="16.0.0.0"
         ApplicationName=".NET Library" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009">
    <Actions>
        <ObjectPath Id="2" ObjectPathId="1"/>
        <ObjectPath Id="4" ObjectPathId="3"/>
        <Query Id="5" ObjectPathId="3">
            <Query SelectAllProperties="false">
                <Properties>
                    <Property Name="Webs" SelectAll="true">
                        <Query SelectAllProperties="false">
                            <Properties/>
                        </Query>
                    </Property>
                    <Property Name="Title" ScalarProperty="true"/>
                    <Property Name="ServerRelativeUrl" ScalarProperty="true"/>
                    <Property Name="RoleDefinitions" SelectAll="true">
                        <Query SelectAllProperties="false">
                            <Properties/>
                        </Query>
                    </Property>
                    <Property Name="RoleAssignments" SelectAll="true">
                        <Query SelectAllProperties="false">
                            <Properties/>
                        </Query>
                    </Property>
                    <Property Name="HasUniqueRoleAssignments" ScalarProperty="true"/>
                    <Property Name="Description" ScalarProperty="true"/>
                    <Property Name="Id" ScalarProperty="true"/>
                    <Property Name="LastItemModifiedDate" ScalarProperty="true"/>
                </Properties>
            </Query>
        </Query>
    </Actions>
    <ObjectPaths>
        <StaticProperty Id="1" TypeId="{3747adcd-a3c3-41b9-bfab-4a64dd2f1e0a}" Name="Current"/>
        <Property Id="3" ParentId="1" Name="Web"/>
    </ObjectPaths>
</Request>
'@

$response = Invoke-RestMethod "${site_col_url}/_vti_bin/client.svc/ProcessQuery" -Method 'POST' -Headers $headers -Body $body -Credential $cred
$response | ConvertTo-Json -Depth 100
```

2. Change the value in the first line: `$site_col_url="https://your.sharepoint-site.com/sites/mysitecol"` to the URL of your site collection.
3. Execute the script. If the result is:

   * A JSON output of your site’s metadata, the account permissions are set correctly.
   * An error such as a 403, 401, or other error, the account permissions are *not* set correctly. Set permissions correctly and run the script again to verify it executes successfully.

<SchemaParamFields schema={schema} />
