@lindle/sharepoint_requests 0.1.21 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -218,6 +218,34 @@ type UserPermission = {
218
218
  };
219
219
  /** @deprecated Use `UserPermission` instead. */
220
220
  type UserPermision = UserPermission;
221
+ type SPFieldSchema = {
222
+ __metadata: Metadata;
223
+ Id: string;
224
+ Title: string;
225
+ InternalName: string;
226
+ StaticName: string;
227
+ EntityPropertyName: string;
228
+ TypeAsString: string;
229
+ FieldTypeKind: number;
230
+ Required: boolean;
231
+ Hidden: boolean;
232
+ ReadOnlyField: boolean;
233
+ DefaultValue: string | null;
234
+ Description: string;
235
+ EnforceUniqueValues: boolean;
236
+ Indexed: boolean;
237
+ /** Present when FieldTypeKind is 6 (Choice) or 15 (MultiChoice) */
238
+ Choices?: {
239
+ results: string[];
240
+ };
241
+ FillInChoice?: boolean;
242
+ /** Present when FieldTypeKind is 7 (Lookup) or 20 (LookupMulti) */
243
+ LookupField?: string;
244
+ LookupList?: string;
245
+ LookupWebId?: string;
246
+ AllowMultipleValues?: boolean;
247
+ [key: string]: unknown;
248
+ };
221
249
  type SPGroup = {
222
250
  Id: number;
223
251
  Title: string;
@@ -342,7 +370,7 @@ declare class HTTPSharePointRequests<T extends {
342
370
  deleteFile: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
343
371
  removeFile: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
344
372
  fields: (options?: Field_Options<T["LISTS"][K], "2010">) => {
345
- get: () => Promise<any>;
373
+ get: () => Promise<SPFieldSchema | SPFieldSchema[] | undefined>;
346
374
  };
347
375
  items: {
348
376
  create: (data: ListData<T["LISTS"][K]>) => Promise<axios.AxiosResponse<any, any, {}>>;
@@ -385,7 +413,7 @@ declare class HTTPSharePointRequests<T extends {
385
413
  deleteFile: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
386
414
  removeFile: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
387
415
  fields: (options?: Field_Options<T["LISTS"][K], V>) => {
388
- get: () => Promise<any>;
416
+ get: () => Promise<SPFieldSchema | SPFieldSchema[] | undefined>;
389
417
  };
390
418
  items: {
391
419
  create: (data: ListData<T["LISTS"][K]>) => Promise<axios.AxiosResponse<any, any, {}>>;
@@ -409,7 +437,7 @@ declare class HTTPSharePointRequests<T extends {
409
437
  remove: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
410
438
  };
411
439
  };
412
- field<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(listName: K, fieldName?: Extract<keyof T['LISTS'][K], string>, sharepointVersion?: V): Promise<any>;
440
+ field<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(listName: K, fieldName?: Extract<keyof T['LISTS'][K], string>, sharepointVersion?: V): Promise<SPFieldSchema | SPFieldSchema[] | undefined>;
413
441
  lists(options?: Options<Record<string, unknown>, '2013'>): {
414
442
  get: () => Promise<{
415
443
  data: Pick<Record<string, unknown> & Partial<SPItem2013>, string> | Pick<Record<string, unknown> & Partial<SPItem2013>, string>[];
@@ -458,7 +486,7 @@ declare class HTTPSharePointRequests<T extends {
458
486
  get: () => Promise<UserProfile>;
459
487
  };
460
488
  searchSiteUser: (searchValue: string) => Promise<any>;
461
- searchUser: (input: string, filter?: string) => Promise<PersonField>;
489
+ searchUser: (input: string, filter?: string, maxSuggestions?: number) => Promise<PersonField[]>;
462
490
  current: (options?: {
463
491
  expand?: "Groups" | Array<"Groups">;
464
492
  }) => {
@@ -487,4 +515,4 @@ declare function createBase<T extends {
487
515
  }) => HTTPSharePointRequests<T>;
488
516
  };
489
517
 
490
- export { type ChoiceField, type CreateFileProps, type CurrentUser, type DeleteFileProps, type EmailProps, type Field_Options, type Folder_Options, type IListName, type ItemID, type ListData, type LookupField, type Metadata, type MultiPersonField, type Options, type PermissionLabel, type PersonField, type SHAREPOINT_VER, type SPGroup, type SPItem, type SPItem2010, type SPItem2013, type UploadFileProps, type UserPermision, type UserPermission, type UserProfile, type UserProfilePropKey, createBase as default };
518
+ export { type ChoiceField, type CreateFileProps, type CurrentUser, type DeleteFileProps, type EmailProps, type Field_Options, type Folder_Options, type IListName, type ItemID, type ListData, type LookupField, type Metadata, type MultiPersonField, type Options, type PermissionLabel, type PersonField, type SHAREPOINT_VER, type SPFieldSchema, type SPGroup, type SPItem, type SPItem2010, type SPItem2013, type UploadFileProps, type UserPermision, type UserPermission, type UserProfile, type UserProfilePropKey, createBase as default };
package/dist/index.d.ts CHANGED
@@ -218,6 +218,34 @@ type UserPermission = {
218
218
  };
219
219
  /** @deprecated Use `UserPermission` instead. */
220
220
  type UserPermision = UserPermission;
221
+ type SPFieldSchema = {
222
+ __metadata: Metadata;
223
+ Id: string;
224
+ Title: string;
225
+ InternalName: string;
226
+ StaticName: string;
227
+ EntityPropertyName: string;
228
+ TypeAsString: string;
229
+ FieldTypeKind: number;
230
+ Required: boolean;
231
+ Hidden: boolean;
232
+ ReadOnlyField: boolean;
233
+ DefaultValue: string | null;
234
+ Description: string;
235
+ EnforceUniqueValues: boolean;
236
+ Indexed: boolean;
237
+ /** Present when FieldTypeKind is 6 (Choice) or 15 (MultiChoice) */
238
+ Choices?: {
239
+ results: string[];
240
+ };
241
+ FillInChoice?: boolean;
242
+ /** Present when FieldTypeKind is 7 (Lookup) or 20 (LookupMulti) */
243
+ LookupField?: string;
244
+ LookupList?: string;
245
+ LookupWebId?: string;
246
+ AllowMultipleValues?: boolean;
247
+ [key: string]: unknown;
248
+ };
221
249
  type SPGroup = {
222
250
  Id: number;
223
251
  Title: string;
@@ -342,7 +370,7 @@ declare class HTTPSharePointRequests<T extends {
342
370
  deleteFile: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
343
371
  removeFile: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
344
372
  fields: (options?: Field_Options<T["LISTS"][K], "2010">) => {
345
- get: () => Promise<any>;
373
+ get: () => Promise<SPFieldSchema | SPFieldSchema[] | undefined>;
346
374
  };
347
375
  items: {
348
376
  create: (data: ListData<T["LISTS"][K]>) => Promise<axios.AxiosResponse<any, any, {}>>;
@@ -385,7 +413,7 @@ declare class HTTPSharePointRequests<T extends {
385
413
  deleteFile: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
386
414
  removeFile: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
387
415
  fields: (options?: Field_Options<T["LISTS"][K], V>) => {
388
- get: () => Promise<any>;
416
+ get: () => Promise<SPFieldSchema | SPFieldSchema[] | undefined>;
389
417
  };
390
418
  items: {
391
419
  create: (data: ListData<T["LISTS"][K]>) => Promise<axios.AxiosResponse<any, any, {}>>;
@@ -409,7 +437,7 @@ declare class HTTPSharePointRequests<T extends {
409
437
  remove: (props: DeleteFileProps) => Promise<axios.AxiosResponse<any, any, {}>>;
410
438
  };
411
439
  };
412
- field<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(listName: K, fieldName?: Extract<keyof T['LISTS'][K], string>, sharepointVersion?: V): Promise<any>;
440
+ field<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(listName: K, fieldName?: Extract<keyof T['LISTS'][K], string>, sharepointVersion?: V): Promise<SPFieldSchema | SPFieldSchema[] | undefined>;
413
441
  lists(options?: Options<Record<string, unknown>, '2013'>): {
414
442
  get: () => Promise<{
415
443
  data: Pick<Record<string, unknown> & Partial<SPItem2013>, string> | Pick<Record<string, unknown> & Partial<SPItem2013>, string>[];
@@ -458,7 +486,7 @@ declare class HTTPSharePointRequests<T extends {
458
486
  get: () => Promise<UserProfile>;
459
487
  };
460
488
  searchSiteUser: (searchValue: string) => Promise<any>;
461
- searchUser: (input: string, filter?: string) => Promise<PersonField>;
489
+ searchUser: (input: string, filter?: string, maxSuggestions?: number) => Promise<PersonField[]>;
462
490
  current: (options?: {
463
491
  expand?: "Groups" | Array<"Groups">;
464
492
  }) => {
@@ -487,4 +515,4 @@ declare function createBase<T extends {
487
515
  }) => HTTPSharePointRequests<T>;
488
516
  };
489
517
 
490
- export { type ChoiceField, type CreateFileProps, type CurrentUser, type DeleteFileProps, type EmailProps, type Field_Options, type Folder_Options, type IListName, type ItemID, type ListData, type LookupField, type Metadata, type MultiPersonField, type Options, type PermissionLabel, type PersonField, type SHAREPOINT_VER, type SPGroup, type SPItem, type SPItem2010, type SPItem2013, type UploadFileProps, type UserPermision, type UserPermission, type UserProfile, type UserProfilePropKey, createBase as default };
518
+ export { type ChoiceField, type CreateFileProps, type CurrentUser, type DeleteFileProps, type EmailProps, type Field_Options, type Folder_Options, type IListName, type ItemID, type ListData, type LookupField, type Metadata, type MultiPersonField, type Options, type PermissionLabel, type PersonField, type SHAREPOINT_VER, type SPFieldSchema, type SPGroup, type SPItem, type SPItem2010, type SPItem2013, type UploadFileProps, type UserPermision, type UserPermission, type UserProfile, type UserProfilePropKey, createBase as default };
package/dist/index.js CHANGED
@@ -166,6 +166,9 @@ function resolveLookupField(key, value) {
166
166
  return null;
167
167
  }
168
168
  if (Array.isArray(value)) {
169
+ if (value.some((item) => typeof item === "string")) {
170
+ return null;
171
+ }
169
172
  const targetKey2 = endsWithId ? key : `${key}Id`;
170
173
  return {
171
174
  key: targetKey2,
@@ -182,6 +185,9 @@ function resolveLookupField(key, value) {
182
185
  };
183
186
  }
184
187
  if (Array.isArray(value.results)) {
188
+ if (value.results.some((item) => typeof item === "string")) {
189
+ return null;
190
+ }
185
191
  const targetKey2 = endsWithId ? key : `${key}Id`;
186
192
  return {
187
193
  key: targetKey2,
@@ -530,27 +536,25 @@ var PERMISSION_PRIORITY = [
530
536
  "Contribute",
531
537
  "Read"
532
538
  ];
533
- async function typeAhead(instance2, input, filter) {
539
+ async function typeAhead(instance2, input, filter, maxSuggestions = 10) {
534
540
  var _a, _b, _c;
535
541
  const requestUrl = `_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`;
536
- const data = {
537
- queryParams: {
538
- __metadata: {
539
- type: "SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters"
540
- },
541
- AllowEmailAddresses: true,
542
- AllowMultipleEntities: false,
543
- AllUrlZones: false,
544
- MaximumEntitySuggestions: 10,
545
- PrincipalSource: 15,
546
- PrincipalType: 1,
547
- QueryString: input
548
- }
542
+ const queryParams = {
543
+ __metadata: {
544
+ type: "SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters"
545
+ },
546
+ AllowEmailAddresses: true,
547
+ AllowMultipleEntities: false,
548
+ AllUrlZones: false,
549
+ MaximumEntitySuggestions: maxSuggestions,
550
+ PrincipalSource: 15,
551
+ PrincipalType: 1,
552
+ QueryString: input
549
553
  };
550
554
  if (filter) {
551
- data.queryParams.RequiredProperties = [filter];
555
+ queryParams.RequiredProperties = [filter];
552
556
  }
553
- const response = await instance2.post(requestUrl, JSON.stringify(data), {
557
+ const response = await instance2.post(requestUrl, JSON.stringify({ queryParams }), {
554
558
  headers: {
555
559
  Accept: "application/json; odata=verbose",
556
560
  "Content-Type": "application/json;odata=verbose"
@@ -559,17 +563,10 @@ async function typeAhead(instance2, input, filter) {
559
563
  const searchResults = ((_b = (_a = response.data) == null ? void 0 : _a.d) == null ? void 0 : _b.ClientPeoplePickerSearchUser) ?? ((_c = response.data) == null ? void 0 : _c.ClientPeoplePickerSearchUser);
560
564
  if (typeof searchResults === "string") {
561
565
  const parsed = JSON.parse(searchResults);
562
- if (Array.isArray(parsed) && parsed.length > 0) {
563
- return parsed[0];
564
- }
566
+ if (Array.isArray(parsed)) return parsed;
565
567
  throw new Error("People picker returned no results.");
566
568
  }
567
- if (Array.isArray(searchResults) && searchResults.length > 0) {
568
- return searchResults[0];
569
- }
570
- if (searchResults && typeof searchResults === "object") {
571
- return searchResults;
572
- }
569
+ if (Array.isArray(searchResults)) return searchResults;
573
570
  throw new Error("Invalid people picker response.");
574
571
  }
575
572
  async function currentUserProperties(instance2) {
@@ -845,7 +842,7 @@ var HTTPSharePointRequests = class {
845
842
  get: () => currentUserProperties(this.instance)
846
843
  }),
847
844
  searchSiteUser: (searchValue) => getSiteUser(this.instance, searchValue),
848
- searchUser: (input, filter) => typeAhead(this.instance, input, filter),
845
+ searchUser: (input, filter, maxSuggestions) => typeAhead(this.instance, input, filter, maxSuggestions),
849
846
  current: (options) => ({
850
847
  get: () => getOnly(this.instance, "_api/web/currentUser", options)
851
848
  }),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/root/instance.ts","../src/root/internal/digest.ts","../src/root/internal/emailRequests.ts","../src/root/internal/listRequests/normalizePayload.ts","../src/root/internal/listRequests/resolveMetadataType.ts","../src/root/internal/listRequests/createListItem.ts","../src/root/internal/sharepointUrl.ts","../src/root/internal/listRequests/utils.ts","../src/root/internal/listRequests/createAttachment.ts","../src/root/internal/listRequests/deleteItem.ts","../src/root/internal/listRequests/deleteFile.ts","../src/root/internal/odata.ts","../src/root/internal/listRequests/getFiles.ts","../src/root/internal/listRequests/getListItems.ts","../src/root/internal/listRequests/getOnly.ts","../src/root/internal/listRequests/updateListItem.ts","../src/root/internal/listRequests/uploadFile.ts","../src/root/internal/userRequests.ts","../src/root/index.ts"],"sourcesContent":["import SHAREPOINT_REQUESTS from './root';\n\nimport { CreateAxiosDefaults as AxiosConfig } from 'axios';\n// Load environment variables from .env file\n\nexport default function createBase<\n T extends { LISTS: Record<string, any>; FOLDERS?: Record<string, any> } = any\n>() {\n function create({\n baseURL,\n config,\n }: {\n baseURL: string;\n config?: AxiosConfig;\n }) {\n if (!baseURL) {\n throw new Error('A valid SharePoint URL must be provided.');\n }\n return new SHAREPOINT_REQUESTS<T>(baseURL, config);\n }\n\n return {\n /**\n * @deprecated Use `create` instead.\n */\n baseURL(url: string, config?: AxiosConfig) {\n return create({ baseURL: url, config });\n },\n create,\n };\n}\n\nexport type {\n Metadata,\n SPItem,\n SPItem2010,\n SPItem2013,\n SHAREPOINT_VER,\n Options,\n Folder_Options,\n Field_Options,\n ItemID,\n CreateFileProps,\n UploadFileProps,\n DeleteFileProps,\n EmailProps,\n LookupField,\n ChoiceField,\n ListData,\n PersonField,\n MultiPersonField,\n PermissionLabel,\n UserPermission,\n /** @deprecated Use `UserPermission` instead */\n UserPermision,\n SPGroup,\n CurrentUser,\n UserProfilePropKey,\n UserProfile,\n IListName,\n} from './types';\n","import axios, { AxiosHeaders, CreateAxiosDefaults as AxiosConfig } from 'axios';\n\nconst defaultConfig: AxiosConfig = {\n headers: {\n Accept: 'application/json; odata=verbose',\n 'Content-Type': 'application/json; odata=verbose',\n },\n timeout: 15000,\n withCredentials: true,\n paramsSerializer: {\n serialize: (params: Record<string, string | number | undefined>) =>\n Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${k}=${String(v)}`)\n .join('&'),\n },\n};\n\nexport const instance = (baseURL: string, config?: AxiosConfig) => {\n const userHeaders =\n config?.headers instanceof AxiosHeaders\n ? config.headers.toJSON()\n : config?.headers ?? {};\n\n return axios.create({\n ...defaultConfig,\n ...config,\n baseURL,\n headers: {\n ...defaultConfig.headers,\n ...userHeaders,\n },\n });\n};\n\nexport default instance;\n","import { AxiosInstance } from 'axios';\n\ntype DigestEntry = { value: string; expiresAt: number };\nconst cache = new WeakMap<AxiosInstance, DigestEntry>();\n\nexport async function fetchDigest(instance: AxiosInstance): Promise<string> {\n const cached = cache.get(instance);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.value;\n }\n\n try {\n const response = await instance.post('_api/contextinfo');\n const info = response.data?.d?.GetContextWebInformation;\n const formDigestValue = info?.FormDigestValue;\n\n if (!formDigestValue) {\n throw new Error('Invalid response structure: Missing FormDigestValue');\n }\n\n const ttl = (info?.FormDigestTimeoutSeconds ?? 1800) - 60;\n cache.set(instance, { value: formDigestValue, expiresAt: Date.now() + ttl * 1000 });\n\n return formDigestValue;\n } catch (error) {\n const cause = error instanceof Error ? error.message : 'Unknown contextinfo error';\n throw new Error(`Error retrieving Form Digest Value: ${cause}`);\n }\n}\n","import { AxiosResponse } from 'axios';\nimport { EmailProps } from '../../types';\nimport { fetchDigest } from './digest';\nimport { RequestContext } from './context';\n\ntype SendEmailResponse = AxiosResponse<{\n d: {\n SendEmail: null;\n };\n}>;\n\nexport async function sendEmail(\n context: RequestContext,\n { From, To, Subject, Body }: EmailProps\n): Promise<SendEmailResponse> {\n const response = await context.instance({\n url: '_api/SP.Utilities.Utility.SendEmail',\n method: 'POST',\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n 'Content-Type': 'application/json;odata=verbose',\n },\n data: JSON.stringify({\n properties: {\n __metadata: {\n type: 'SP.Utilities.EmailProperties',\n },\n From,\n To: {\n results: Array.isArray(To) ? To : [To],\n },\n Body,\n Subject,\n },\n }),\n });\n\n return response;\n}\n","import { ListData } from '../../../types';\n\ntype AnyRecord = Record<string, unknown>;\n\nconst LOOKUP_ID_KEYS = [\n 'lookupId',\n 'LookupId',\n 'lookupID',\n 'LookupID',\n 'Id',\n 'ID',\n];\n\nfunction isPlainObject(value: unknown): value is AnyRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction extractLookupPrimitive(\n value: AnyRecord,\n allowGenericId: boolean\n): unknown | undefined {\n for (const key of LOOKUP_ID_KEYS) {\n if (!allowGenericId && (key === 'Id' || key === 'ID')) {\n continue;\n }\n if (value[key] !== undefined && value[key] !== null) {\n return value[key];\n }\n }\n return undefined;\n}\n\nfunction normalizeLookupValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return { results: value };\n }\n\n if (isPlainObject(value)) {\n if (Array.isArray(value.results)) {\n return { results: value.results };\n }\n\n const primitive = extractLookupPrimitive(value, true);\n if (primitive !== undefined) {\n return primitive;\n }\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return value;\n }\n const numeric = Number(trimmed);\n return Number.isNaN(numeric) ? trimmed : numeric;\n }\n\n return value;\n}\n\nfunction resolveLookupField(key: string, value: unknown) {\n const lower = key.toLowerCase();\n const endsWithId = lower.endsWith('id');\n const endsWithRef = lower.endsWith('ref');\n const endsWithLookup = lower.endsWith('lookup');\n const hasLookupHint = endsWithId || endsWithRef || endsWithLookup;\n\n if (value === undefined) {\n return null;\n }\n\n if (Array.isArray(value)) {\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: { results: value },\n };\n }\n\n if (isPlainObject(value)) {\n const primitive = extractLookupPrimitive(value, hasLookupHint);\n if (primitive !== undefined) {\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: normalizeLookupValue(primitive),\n };\n }\n\n if (Array.isArray(value.results)) {\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: { results: value.results },\n };\n }\n\n if (!hasLookupHint) {\n return null;\n }\n } else if (!hasLookupHint) {\n return null;\n }\n\n const targetKey = endsWithId ? key : `${key}Id`;\n\n if (value === null) {\n return {\n key: targetKey,\n value: null,\n };\n }\n\n if (typeof value === 'number') {\n return {\n key: targetKey,\n value,\n };\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return {\n key: targetKey,\n value: '',\n };\n }\n const numeric = Number(trimmed);\n return {\n key: targetKey,\n value: Number.isNaN(numeric) ? trimmed : numeric,\n };\n }\n\n return null;\n}\n\nexport function normalizeListPayload<D = Record<string, unknown>>(\n data: ListData<D>\n): AnyRecord {\n const result: AnyRecord = {};\n\n if (!data) {\n return result;\n }\n\n for (const [key, value] of Object.entries(data as AnyRecord)) {\n if (key === '__metadata') {\n continue;\n }\n\n const lookupField = resolveLookupField(key, value);\n if (lookupField) {\n result[lookupField.key] = lookupField.value;\n continue;\n }\n\n if (value !== undefined) {\n result[key] = value;\n }\n }\n\n return result;\n}\n","import { SHAREPOINT_VER } from '../../../types';\nimport { RequestContext } from '../context';\n\nexport async function resolveMetadataType<V extends SHAREPOINT_VER>(\n context: RequestContext<V>\n): Promise<string> {\n if (context.resolveListItemEntityType) {\n return context.resolveListItemEntityType();\n }\n if (context.listItemEntityTypeFullName) {\n return context.listItemEntityTypeFullName;\n }\n return `SP.Data.${context.listName}ListItem`;\n}\n","import { ListData, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { normalizeListPayload } from './normalizePayload';\nimport { resolveMetadataType } from './resolveMetadataType';\n\nexport async function createListItem<\n D = Record<string, unknown>,\n V extends SHAREPOINT_VER = '2013'\n>(context: RequestContext<V>, listData: ListData<D>) {\n const normalizedData = normalizeListPayload(listData);\n let payload: Record<string, unknown> = normalizedData;\n\n if (context.sharepointVersion === '2013') {\n const metadataType = await resolveMetadataType(context);\n const userMetadata = (listData as { __metadata?: Record<string, unknown> })\n .__metadata;\n payload = {\n ...normalizedData,\n __metadata: {\n ...(userMetadata && typeof userMetadata === 'object' ? userMetadata : {}),\n type: metadataType,\n },\n };\n }\n\n const response = await context.instance({\n url: context.endpoint,\n method: 'POST',\n data: JSON.stringify(payload),\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n },\n });\n\n return response;\n}\n","export function escapeODataStringLiteral(value: string) {\n return value.replace(/'/g, \"''\");\n}\n\nexport function buildListByTitleEndpoint(listName: string) {\n return `_api/web/lists/GetByTitle('${escapeODataStringLiteral(listName)}')`;\n}\n","export function buildLibraryPath(folderPath?: string | string[]) {\n if (!folderPath) {\n return '';\n }\n\n const segments = Array.isArray(folderPath)\n ? folderPath\n : folderPath.split('/').filter(Boolean);\n\n if (!segments.length) {\n return '';\n }\n\n const escapedSegments = segments.map(segment => {\n if (!segment.trim()) {\n throw new Error('Folder path segments cannot be empty.');\n }\n\n const sanitized = segment.replace(/'/g, \"''\");\n\n return `/Folders('${encodeURIComponent(sanitized)}')`;\n });\n\n return escapedSegments.join('');\n}\n\nexport function encodeFileName(fileName: string) {\n if (!fileName.trim()) {\n throw new Error('File name cannot be empty.');\n }\n\n return encodeURIComponent(fileName.replace(/'/g, \"''\"));\n}\n","import { CreateFileProps, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\nimport { encodeFileName } from './utils';\n\nexport async function createAttachment<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { file, itemId }: CreateFileProps\n) {\n if (context.sharepointVersion !== '2013') {\n throw new Error(\n 'createAttachment is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n const encodedFileName = encodeFileName(file.name);\n const requestUrl = `${buildListByTitleEndpoint(\n context.listName\n )}/items(${itemId})/AttachmentFiles/add(FileName='${encodedFileName}')`;\n\n const response = await context.instance.post(requestUrl, file, {\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n },\n });\n\n return response;\n}\n","import { SHAREPOINT_VER } from '../../../types';\nimport { RequestContext } from '../context';\nimport { fetchDigest } from '../digest';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nexport async function deleteItem<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n id: number | string\n) {\n const requestDigest = await fetchDigest(context.instance);\n const url =\n context.sharepointVersion === '2013'\n ? `${buildListByTitleEndpoint(context.listName)}/items(${id})`\n : `${context.endpoint}(${id})`;\n\n const response = await context.instance.post(url, undefined, {\n headers: {\n 'X-RequestDigest': requestDigest,\n 'IF-MATCH': '*',\n 'X-HTTP-Method': 'DELETE',\n },\n });\n return response;\n}\n","import { SHAREPOINT_VER, DeleteFileProps } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildLibraryPath, encodeFileName } from './utils';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nconst SUPPORTED_VERSION: SHAREPOINT_VER = '2013';\n\nexport async function deleteFile<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { fileName, folderPath }: DeleteFileProps\n) {\n if (context.sharepointVersion !== SUPPORTED_VERSION) {\n throw new Error(\n 'deleteFile is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n const encodedFileName = encodeFileName(fileName);\n let requestUrl = `${buildListByTitleEndpoint(context.listName)}/RootFolder`;\n requestUrl += buildLibraryPath(folderPath);\n requestUrl += `/Files('${encodedFileName}')`;\n\n const digest = await fetchDigest(context.instance);\n\n const response = await context.instance.post(requestUrl, undefined, {\n headers: {\n 'X-HTTP-Method': 'DELETE',\n 'IF-MATCH': '*',\n 'X-RequestDigest': digest,\n },\n });\n\n return response;\n}\n","import { Folder_Options, Options, SHAREPOINT_VER } from '../../types';\n\ntype QueryableOptions<T, V extends SHAREPOINT_VER = '2013'> =\n | Options<T, V>\n | Folder_Options<T>;\n\nexport function buildODataParams<T, V extends SHAREPOINT_VER = '2013'>(\n options: QueryableOptions<T, V> | undefined,\n orderBySeparator: ',' | ' ' = ','\n) {\n const { expand, orderBy, limit, filter, cols, skip } = options || {};\n\n const params: Record<string, string | number | undefined> = {\n $expand: Array.isArray(expand) ? expand.join(',') : expand,\n $top: limit,\n $skip: skip,\n $select: Array.isArray(cols) ? cols.join(',') : cols,\n $filter: filter,\n $orderby: Array.isArray(orderBy) ? orderBy.join(orderBySeparator) : orderBy,\n };\n\n return params;\n}\n\nexport function appendParamsToUrl(\n baseUrl: URL,\n params: Record<string, string | number | undefined | null>\n) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n baseUrl.searchParams.append(key, String(value));\n }\n });\n}\n","import { Folder_Options, SHAREPOINT_VER } from '../../../types';\nimport { appendParamsToUrl, buildODataParams } from '../odata';\nimport { RequestContext } from '../context';\n\nexport async function getFiles<T, V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n options?: Folder_Options<T>\n) {\n const params = buildODataParams(options, ',');\n const url = new URL(context.endpoint, context.instance.defaults.baseURL);\n\n appendParamsToUrl(url, params);\n\n const response = await context.instance.request({\n url: context.endpoint,\n method: 'GET',\n params,\n });\n\n const data = response.data?.d?.results ?? response.data?.d ?? response.data;\n\n const meta = { url };\n\n return { data, meta };\n}\n","import { Options, SPItem, SHAREPOINT_VER } from '../../../types';\nimport { appendParamsToUrl, buildODataParams } from '../odata';\nimport { RequestContext } from '../context';\n\ntype ListItemShape<K, V extends SHAREPOINT_VER> = K & Partial<SPItem<V>>;\n\ntype SelectedColumns<\n K,\n V extends SHAREPOINT_VER,\n O extends Options<K, V> | undefined\n> = O extends { cols?: infer C }\n ? C extends readonly (infer Key)[]\n ? Extract<Key, keyof ListItemShape<K, V>>\n : Extract<C, keyof ListItemShape<K, V>>\n : never;\n\ntype ListItemResponseData<\n K,\n V extends SHAREPOINT_VER,\n O extends Options<K, V> | undefined\n> = [SelectedColumns<K, V, O>] extends [never]\n ? ListItemShape<K, V>\n : Pick<ListItemShape<K, V>, SelectedColumns<K, V, O>>;\n\nexport async function getListItems<\n K,\n V extends SHAREPOINT_VER = '2013',\n O extends Options<K, V> | undefined = Options<K, V> | undefined\n>(\n context: RequestContext<V>,\n options?: O\n): Promise<{\n data: ListItemResponseData<K, V, O> | ListItemResponseData<K, V, O>[] | undefined;\n meta: { url: URL };\n}> {\n const params = buildODataParams(options, ' ');\n\n const url = new URL(context.endpoint, context.instance.defaults.baseURL);\n appendParamsToUrl(url, params);\n\n const response = await context.instance.request({\n url: context.endpoint,\n method: 'GET',\n params,\n });\n\n const rawData =\n response.data?.d?.results ?? response.data?.d ?? response.data;\n const cols = options?.cols as Options<K, V>['cols'] | undefined;\n const keys = cols\n ? (Array.isArray(cols) ? cols : [cols]).filter(\n (key): key is Extract<keyof ListItemShape<K, V>, string> =>\n typeof key === 'string'\n )\n : undefined;\n\n const filterItem = (item: unknown) => {\n if (!keys || !item || typeof item !== 'object') {\n return item;\n }\n\n return keys.reduce<Record<string, unknown>>((acc, key) => {\n if (key in item) {\n acc[key] = (item as Record<string, unknown>)[key];\n }\n\n return acc;\n }, {});\n };\n\n const data = Array.isArray(rawData)\n ? rawData.map(filterItem)\n : filterItem(rawData);\n\n const meta = { url };\n\n return {\n data: data as\n | ListItemResponseData<K, V, O>\n | ListItemResponseData<K, V, O>[]\n | undefined,\n meta,\n };\n}\n","import { AxiosInstance } from 'axios';\nimport { Options, SHAREPOINT_VER } from '../../../types';\nimport { buildODataParams } from '../odata';\n\nexport async function getOnly<T, V extends SHAREPOINT_VER = '2013'>(\n instance: AxiosInstance,\n endpoint: string,\n options?: Options<T, V>\n) {\n const params = buildODataParams(options, ',');\n const { data } = await instance.get(endpoint, { params });\n if (!data) {\n return undefined;\n }\n\n if (data.d) {\n return data.d.results ? data.d.results : data.d;\n }\n\n return data;\n}\n","import { ListData, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { normalizeListPayload } from './normalizePayload';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\nimport { resolveMetadataType } from './resolveMetadataType';\n\nexport async function updateListItem<\n D = Record<string, unknown>,\n V extends SHAREPOINT_VER = '2013'\n>(\n context: RequestContext<V>,\n id: number | string,\n data: ListData<D>,\n digest?: string\n) {\n const formDigestValue = digest ?? (await fetchDigest(context.instance));\n\n const normalizedData = normalizeListPayload(data);\n let payload: Record<string, unknown> = normalizedData;\n\n if (context.sharepointVersion === '2013') {\n const metadataType = await resolveMetadataType(context);\n const userMetadata = (data as { __metadata?: Record<string, unknown> })\n .__metadata;\n payload = {\n ...normalizedData,\n __metadata: {\n ...(userMetadata && typeof userMetadata === 'object' ? userMetadata : {}),\n type: metadataType,\n },\n };\n }\n\n const url =\n context.sharepointVersion === '2013'\n ? `${buildListByTitleEndpoint(context.listName)}/items(${id})`\n : `${context.endpoint}(${id})`;\n\n const response = await context.instance({\n url,\n method: 'POST',\n data: JSON.stringify(payload),\n headers: {\n 'X-RequestDigest': formDigestValue,\n 'IF-MATCH': '*',\n 'X-HTTP-Method': 'MERGE',\n },\n });\n\n return response;\n}\n","import { AxiosResponse } from 'axios';\nimport { ItemID, SHAREPOINT_VER, UploadFileProps } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildLibraryPath, encodeFileName } from './utils';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nconst SUPPORTED_VERSION: SHAREPOINT_VER = '2013';\n\nexport async function uploadFile<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { file, folderPath, overwrite = true }: UploadFileProps\n): Promise<{ response: AxiosResponse; itemId?: ItemID }> {\n if (context.sharepointVersion !== SUPPORTED_VERSION) {\n throw new Error(\n 'uploadFile is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n if (!file?.name) {\n throw new Error('A file with a valid name must be provided.');\n }\n\n let requestUrl = `${buildListByTitleEndpoint(context.listName)}/RootFolder`;\n requestUrl += buildLibraryPath(folderPath);\n\n const encodedFileName = encodeFileName(file.name);\n requestUrl += `/Files/add(url='${encodedFileName}',overwrite=${\n overwrite ? 'true' : 'false'\n })?$expand=ListItemAllFields&$select=ListItemAllFields/Id`;\n\n const digest = await fetchDigest(context.instance);\n\n const response = await context.instance.post(requestUrl, file, {\n headers: {\n 'Content-Type': file.type || 'application/octet-stream',\n 'X-RequestDigest': digest,\n },\n });\n\n const responseData = response.data?.d ?? response.data;\n const listItemFields = responseData?.ListItemAllFields;\n let itemId: ItemID | undefined =\n listItemFields?.Id ??\n listItemFields?.ID ??\n responseData?.Id ??\n responseData?.ID;\n\n if (typeof itemId === 'undefined' && listItemFields?.__deferred?.uri) {\n const listItemResponse = await context.instance.get(\n listItemFields.__deferred.uri\n );\n const deferredId =\n listItemResponse.data?.d?.Id ?? listItemResponse.data?.Id;\n if (typeof deferredId !== 'undefined') {\n itemId = deferredId;\n }\n }\n\n return { response, itemId };\n}\n","import { AxiosInstance } from 'axios';\nimport { PermissionLabel, PersonField, UserPermision, UserProfile } from '../../types';\nimport { RequestContext } from './context';\nimport { escapeODataStringLiteral } from './sharepointUrl';\n\ntype RoleDefinition = {\n Name: string;\n Description: string;\n Hidden: boolean;\n Id: number;\n Order: number;\n RoleTypeKind: number;\n BasePermissions: {\n High: string;\n Low: string;\n };\n};\n\nconst PERMISSION_PRIORITY: PermissionLabel[] = [\n 'Full Control',\n 'Edit',\n 'Contribute',\n 'Read',\n];\n\nexport async function typeAhead(\n instance: AxiosInstance,\n input: string,\n filter?: string\n): Promise<PersonField> {\n const requestUrl = `_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`;\n\n const data = {\n queryParams: {\n __metadata: {\n type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters',\n },\n AllowEmailAddresses: true,\n AllowMultipleEntities: false,\n AllUrlZones: false,\n MaximumEntitySuggestions: 10,\n PrincipalSource: 15,\n PrincipalType: 1,\n QueryString: input,\n },\n };\n\n if (filter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (data.queryParams as any).RequiredProperties = [filter];\n }\n\n const response = await instance.post(requestUrl, JSON.stringify(data), {\n headers: {\n Accept: 'application/json; odata=verbose',\n 'Content-Type': 'application/json;odata=verbose',\n },\n });\n\n const searchResults =\n response.data?.d?.ClientPeoplePickerSearchUser ??\n response.data?.ClientPeoplePickerSearchUser;\n\n if (typeof searchResults === 'string') {\n const parsed = JSON.parse(searchResults);\n if (Array.isArray(parsed) && parsed.length > 0) {\n return parsed[0] as PersonField;\n }\n throw new Error('People picker returned no results.');\n }\n\n if (Array.isArray(searchResults) && searchResults.length > 0) {\n return searchResults[0] as PersonField;\n }\n\n if (searchResults && typeof searchResults === 'object') {\n return searchResults as PersonField;\n }\n\n throw new Error('Invalid people picker response.');\n}\n\nexport async function currentUserProperties(\n instance: AxiosInstance\n): Promise<UserProfile> {\n const requestUrl = '_api/sp.userprofiles.peoplemanager/getmyproperties';\n const response = await instance.get(requestUrl);\n\n const profile = (response.data?.d ?? response.data) as UserProfile | undefined;\n if (!profile) {\n throw new Error('Unable to retrieve user profile.');\n }\n\n profile.UserProfileProperties?.results?.forEach(\n (prop: { Key: string; Value: string }) => {\n if (prop.Key === 'FirstName') profile.FirstName = prop.Value;\n else if (prop.Key === 'LastName') profile.LastName = prop.Value;\n else if (prop.Key === 'Country') profile.Country = prop.Value;\n else if (prop.Key === 'UserName') profile.UserName = prop.Value;\n }\n );\n\n return profile;\n}\n\nexport async function getSiteUser(\n instance: AxiosInstance,\n searchValue: string\n) {\n const safeSearchValue = escapeODataStringLiteral(searchValue);\n const response = await instance.get('_api/web/siteusers', {\n params: {\n $filter: `substringof('${safeSearchValue}', Title) or substringof('${safeSearchValue}', LoginName) or substringof('${safeSearchValue}', Email)`,\n $top: 50,\n $expand: 'Groups',\n },\n });\n return response.data.d;\n}\n\nasync function roleDefinitions(instance: AxiosInstance): Promise<RoleDefinition[]> {\n const response = await instance.get('_api/Web/RoleDefinitions');\n return response.data.d.results as RoleDefinition[];\n}\n\nasync function getEffectiveBasePermissions(\n instance: AxiosInstance\n): Promise<{ High: string; Low: string }> {\n const response = await instance.get('_api/Web/effectiveBasePermissions');\n return response.data.d.EffectiveBasePermissions;\n}\n\nexport async function currentUserPermissions(\n context: RequestContext\n): Promise<UserPermision> {\n const { High: userHigh, Low: userLow } = await getEffectiveBasePermissions(\n context.instance\n );\n const definitions = await roleDefinitions(context.instance);\n\n const userHighInt = parseInt(userHigh, 10);\n const userLowInt = parseInt(userLow, 10);\n\n const matching = definitions\n .filter((def): def is RoleDefinition =>\n PERMISSION_PRIORITY.includes(def.Name as PermissionLabel) &&\n (userHighInt & parseInt(def.BasePermissions.High, 10)) === parseInt(def.BasePermissions.High, 10) &&\n (userLowInt & parseInt(def.BasePermissions.Low, 10)) === parseInt(def.BasePermissions.Low, 10)\n )\n .sort(\n (a, b) =>\n PERMISSION_PRIORITY.indexOf(a.Name as PermissionLabel) -\n PERMISSION_PRIORITY.indexOf(b.Name as PermissionLabel)\n );\n\n const result = matching[0];\n\n if (!result) {\n throw new Error(\n `Unable to resolve current user permission. Effective: High=\"${userHigh}\", Low=\"${userLow}\"`\n );\n }\n\n return result as unknown as UserPermision;\n}\n","import { AxiosInstance, CreateAxiosDefaults as AxiosConfig } from 'axios';\nimport instance from './instance';\nimport {\n CreateFileProps,\n CurrentUser,\n DeleteFileProps,\n EmailProps,\n Field_Options,\n Folder_Options,\n ItemID,\n ListData,\n Options,\n PersonField,\n SHAREPOINT_VER,\n UploadFileProps,\n UserPermision,\n UserProfile,\n} from '../types';\nimport { RequestContext } from './internal/context';\nimport { sendEmail as sendEmailRequest } from './internal/emailRequests';\nimport { fetchDigest } from './internal/digest';\nimport {\n createAttachment,\n createListItem,\n deleteFile as deleteLibraryFile,\n deleteItem,\n getFiles,\n getListItems,\n getOnly,\n updateListItem,\n uploadFile,\n} from './internal/listRequests';\nimport {\n buildListByTitleEndpoint,\n escapeODataStringLiteral,\n} from './internal/sharepointUrl';\nimport {\n currentUserPermissions as resolveCurrentUserPermissions,\n currentUserProperties as loadCurrentUserProperties,\n getSiteUser as fetchSiteUser,\n typeAhead,\n} from './internal/userRequests';\n\ntype ListKey<T extends { LISTS: Record<string, unknown> }> = Extract<\n keyof T['LISTS'],\n string\n>;\n\n/**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31\n * and no longer sends emails. Migrate to Microsoft Graph API:\n * POST /v1.0/me/sendMail (delegated) or POST /v1.0/users/{id}/sendMail (app)\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\ntype EmailApi = ((\n from: string,\n to: string[] | string,\n subject: string | undefined,\n body: string\n) => ReturnType<typeof sendEmailRequest>) & {\n send: (props: EmailProps) => ReturnType<typeof sendEmailRequest>;\n};\n\nclass HTTPSharePointRequests<\n T extends {\n LISTS: Record<string, unknown>;\n FOLDERS?: Record<string, unknown>;\n }\n> {\n private readonly baseURL: string;\n private readonly instance: AxiosInstance;\n private readonly listItemEntityTypeCache: Map<string, string>;\n /**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31.\n * Migrate to Microsoft Graph API POST /v1.0/me/sendMail\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\n public readonly email: EmailApi;\n\n constructor(baseURL: string, config?: AxiosConfig) {\n this.baseURL = baseURL.endsWith('/') ? baseURL : `${baseURL}/`;\n this.instance = instance(this.baseURL, config);\n this.listItemEntityTypeCache = new Map<string, string>();\n const buildEmailContext = () =>\n this.createContext<'2013'>({\n endpoint: '_api/SP.Utilities.Utility.SendEmail',\n listName: '',\n sharepointVersion: '2013',\n });\n this.email = Object.assign(\n (\n from: string,\n to: string[] | string,\n subject: string | undefined,\n body: string\n ) =>\n sendEmailRequest(buildEmailContext(), {\n From: from,\n To: to,\n Subject: subject,\n Body: body,\n }),\n {\n send: (props: EmailProps) => sendEmailRequest(buildEmailContext(), props),\n }\n );\n }\n\n private createContext<V extends SHAREPOINT_VER = '2013'>({\n endpoint,\n listName,\n sharepointVersion,\n listItemEntityTypeFullName,\n resolveListItemEntityType,\n }: {\n endpoint: string;\n listName: string;\n sharepointVersion: V;\n listItemEntityTypeFullName?: string;\n resolveListItemEntityType?: () => Promise<string>;\n }): RequestContext<V> {\n return {\n instance: this.instance,\n endpoint,\n listName,\n sharepointVersion,\n listItemEntityTypeFullName,\n resolveListItemEntityType,\n };\n }\n\n private async resolveListItemEntityTypeFullName(\n listName: string\n ): Promise<string> {\n const cacheKey = listName;\n const cachedType = this.listItemEntityTypeCache.get(cacheKey);\n if (cachedType) {\n return cachedType;\n }\n\n const response = await this.instance.get(\n `${buildListByTitleEndpoint(listName)}?$select=ListItemEntityTypeFullName`\n );\n\n const entityType =\n response.data?.d?.ListItemEntityTypeFullName ??\n response.data?.ListItemEntityTypeFullName;\n\n if (!entityType || typeof entityType !== 'string') {\n throw new Error(\n `Unable to resolve ListItemEntityTypeFullName for list \"${listName}\".`\n );\n }\n\n this.listItemEntityTypeCache.set(cacheKey, entityType);\n return entityType;\n }\n\n private buildListScope<\n K extends ListKey<T>,\n V extends SHAREPOINT_VER = '2013'\n >(listName: K, version: V) {\n const listNameValue = String(listName);\n const endpoint =\n version === '2013'\n ? `${buildListByTitleEndpoint(listNameValue)}/items`\n : `_vti_bin/ListData.svc/${encodeURIComponent(listNameValue)}`;\n\n let scopedEntityType: string | undefined;\n const resolveListItemEntityType = async () => {\n if (scopedEntityType) {\n return scopedEntityType;\n }\n\n if (version !== '2013') {\n scopedEntityType = `SP.Data.${listNameValue}ListItem`;\n return scopedEntityType;\n }\n\n scopedEntityType = await this.resolveListItemEntityTypeFullName(\n listNameValue\n );\n return scopedEntityType;\n };\n\n const getContext = () =>\n this.createContext<V>({\n endpoint,\n listName: listNameValue,\n sharepointVersion: version,\n listItemEntityTypeFullName: scopedEntityType,\n resolveListItemEntityType,\n });\n\n const removeItem = (id: ItemID) => deleteItem(getContext(), id);\n const removeFile = (props: DeleteFileProps) =>\n deleteLibraryFile(getContext(), props);\n\n return {\n create: (data: ListData<T['LISTS'][K]>) =>\n createListItem<T['LISTS'][K], V>(getContext(), data),\n get: (options?: Options<T['LISTS'][K], V>) =>\n getListItems<T['LISTS'][K], V>(getContext(), options),\n update: (id: ItemID, data: ListData<T['LISTS'][K]>, digest?: string) =>\n updateListItem<T['LISTS'][K], V>(getContext(), id, data, digest),\n delete: removeItem,\n remove: removeItem,\n createFile: (props: CreateFileProps) =>\n createAttachment(getContext(), props),\n uploadFile: (props: UploadFileProps) => uploadFile(getContext(), props),\n deleteFile: removeFile,\n removeFile,\n fields: (options?: Field_Options<T['LISTS'][K], V>) => {\n const fieldsEndpoint = !options?.fieldName\n ? `${buildListByTitleEndpoint(listNameValue)}/fields`\n : `${buildListByTitleEndpoint(\n listNameValue\n )}/fields/getbytitle('${escapeODataStringLiteral(\n String(options.fieldName)\n )}')`;\n return {\n get: () =>\n getOnly<T['LISTS'][K], V>(this.instance, fieldsEndpoint, options),\n };\n },\n items: {\n create: (data: ListData<T['LISTS'][K]>) =>\n createListItem<T['LISTS'][K], V>(getContext(), data),\n get: (options?: Options<T['LISTS'][K], V>) =>\n getListItems<T['LISTS'][K], V>(getContext(), options),\n update: (id: ItemID, data: ListData<T['LISTS'][K]>, digest?: string) =>\n updateListItem<T['LISTS'][K], V>(getContext(), id, data, digest),\n delete: removeItem,\n remove: removeItem,\n },\n files: {\n attach: (props: CreateFileProps) =>\n createAttachment(getContext(), props),\n upload: (props: UploadFileProps) => uploadFile(getContext(), props),\n delete: removeFile,\n remove: removeFile,\n },\n };\n }\n\n /**\n * @deprecated Use `from(listName, '2010')` instead.\n */\n list<K extends ListKey<T>>(listName: K) {\n return this.from<K, '2010'>(listName, '2010');\n }\n\n public from<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(\n listName: K,\n sharepointVersion?: V\n ) {\n const version = (sharepointVersion ?? '2013') as V;\n return this.buildListScope<K, V>(listName, version);\n }\n\n public field<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(\n listName: K,\n fieldName?: Extract<keyof T['LISTS'][K], string>,\n sharepointVersion?: V\n ) {\n return this.from<K, V>(listName, sharepointVersion)\n .fields({\n fieldName,\n } as Field_Options<T['LISTS'][K], V>)\n .get();\n }\n\n public lists(options?: Options<Record<string, unknown>, '2013'>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/lists',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getListItems<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n public getDigest() {\n return fetchDigest(this.instance);\n }\n\n public folders(options?: Folder_Options<Record<string, unknown>>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/folders',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getFiles<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n public folder(folderName?: string | string[]) {\n const defaultPath = ['Shared Documents'];\n const segments = folderName\n ? Array.isArray(folderName)\n ? [...defaultPath, ...folderName]\n : [...defaultPath, ...folderName.split('/').filter(Boolean)]\n : defaultPath;\n\n const serverRelativePath = escapeODataStringLiteral(segments.join('/'));\n const baseEndpoint = `_api/web/GetFolderByServerRelativeUrl('${serverRelativePath}')`;\n\n return {\n get: (options?: Folder_Options<Record<string, unknown>>) => {\n const folderType = options?.type ?? 'Files';\n const endpoint = `${baseEndpoint}/${folderType}`;\n const context = this.createContext<'2013'>({\n endpoint,\n listName: '',\n sharepointVersion: '2013',\n });\n\n return getFiles<Record<string, unknown>, '2013'>(context, {\n ...options,\n type: folderType,\n });\n },\n };\n }\n\n public users(options?: Options<Record<string, unknown>, '2013'>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/SiteUserInfoList/items',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getListItems<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n /**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31.\n * Migrate to Microsoft Graph API POST /v1.0/me/sendMail\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\n public sendEmail(props: EmailProps) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/SP.Utilities.Utility.SendEmail',\n listName: '',\n sharepointVersion: '2013',\n });\n return sendEmailRequest(context, props);\n }\n\n public readonly user = {\n properties: () => ({\n get: (): Promise<UserProfile> => loadCurrentUserProperties(this.instance),\n }),\n searchSiteUser: (searchValue: string) =>\n fetchSiteUser(this.instance, searchValue),\n searchUser: (input: string, filter?: string): Promise<PersonField> =>\n typeAhead(this.instance, input, filter),\n current: (options?: { expand?: 'Groups' | Array<'Groups'> }) => ({\n get: (): Promise<CurrentUser> =>\n getOnly(this.instance, '_api/web/currentUser', options as Options),\n }),\n currentPermission: () => ({\n get: (): Promise<UserPermision> =>\n resolveCurrentUserPermissions(\n this.createContext<'2013'>({\n endpoint: '_api/web/effectiveBasePermissions',\n listName: '',\n sharepointVersion: '2013',\n })\n ),\n }),\n };\n\n public getCurrentUser() {\n return this.user.current().get();\n }\n\n public currentUserProperties() {\n return this.user.properties().get();\n }\n\n public currentUserPermission() {\n return this.user.currentPermission().get();\n }\n}\n\nexport default HTTPSharePointRequests;\n"],"mappings":"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","names":["axios","instance","targetKey","instance","SUPPORTED_VERSION","instance"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/root/instance.ts","../src/root/internal/digest.ts","../src/root/internal/emailRequests.ts","../src/root/internal/listRequests/normalizePayload.ts","../src/root/internal/listRequests/resolveMetadataType.ts","../src/root/internal/listRequests/createListItem.ts","../src/root/internal/sharepointUrl.ts","../src/root/internal/listRequests/utils.ts","../src/root/internal/listRequests/createAttachment.ts","../src/root/internal/listRequests/deleteItem.ts","../src/root/internal/listRequests/deleteFile.ts","../src/root/internal/odata.ts","../src/root/internal/listRequests/getFiles.ts","../src/root/internal/listRequests/getListItems.ts","../src/root/internal/listRequests/getOnly.ts","../src/root/internal/listRequests/updateListItem.ts","../src/root/internal/listRequests/uploadFile.ts","../src/root/internal/userRequests.ts","../src/root/index.ts"],"sourcesContent":["import SHAREPOINT_REQUESTS from './root';\n\nimport { CreateAxiosDefaults as AxiosConfig } from 'axios';\n// Load environment variables from .env file\n\nexport default function createBase<\n T extends { LISTS: Record<string, any>; FOLDERS?: Record<string, any> } = any\n>() {\n function create({\n baseURL,\n config,\n }: {\n baseURL: string;\n config?: AxiosConfig;\n }) {\n if (!baseURL) {\n throw new Error('A valid SharePoint URL must be provided.');\n }\n return new SHAREPOINT_REQUESTS<T>(baseURL, config);\n }\n\n return {\n /**\n * @deprecated Use `create` instead.\n */\n baseURL(url: string, config?: AxiosConfig) {\n return create({ baseURL: url, config });\n },\n create,\n };\n}\n\nexport type {\n Metadata,\n SPItem,\n SPItem2010,\n SPItem2013,\n SHAREPOINT_VER,\n Options,\n Folder_Options,\n Field_Options,\n ItemID,\n CreateFileProps,\n UploadFileProps,\n DeleteFileProps,\n EmailProps,\n LookupField,\n ChoiceField,\n ListData,\n PersonField,\n MultiPersonField,\n PermissionLabel,\n UserPermission,\n /** @deprecated Use `UserPermission` instead */\n UserPermision,\n SPGroup,\n SPFieldSchema,\n CurrentUser,\n UserProfilePropKey,\n UserProfile,\n IListName,\n} from './types';\n","import axios, { AxiosHeaders, CreateAxiosDefaults as AxiosConfig } from 'axios';\n\nconst defaultConfig: AxiosConfig = {\n headers: {\n Accept: 'application/json; odata=verbose',\n 'Content-Type': 'application/json; odata=verbose',\n },\n timeout: 15000,\n withCredentials: true,\n paramsSerializer: {\n serialize: (params: Record<string, string | number | undefined>) =>\n Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${k}=${String(v)}`)\n .join('&'),\n },\n};\n\nexport const instance = (baseURL: string, config?: AxiosConfig) => {\n const userHeaders =\n config?.headers instanceof AxiosHeaders\n ? config.headers.toJSON()\n : config?.headers ?? {};\n\n return axios.create({\n ...defaultConfig,\n ...config,\n baseURL,\n headers: {\n ...defaultConfig.headers,\n ...userHeaders,\n },\n });\n};\n\nexport default instance;\n","import { AxiosInstance } from 'axios';\n\ntype DigestEntry = { value: string; expiresAt: number };\nconst cache = new WeakMap<AxiosInstance, DigestEntry>();\n\nexport async function fetchDigest(instance: AxiosInstance): Promise<string> {\n const cached = cache.get(instance);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.value;\n }\n\n try {\n const response = await instance.post('_api/contextinfo');\n const info = response.data?.d?.GetContextWebInformation;\n const formDigestValue = info?.FormDigestValue;\n\n if (!formDigestValue) {\n throw new Error('Invalid response structure: Missing FormDigestValue');\n }\n\n const ttl = (info?.FormDigestTimeoutSeconds ?? 1800) - 60;\n cache.set(instance, { value: formDigestValue, expiresAt: Date.now() + ttl * 1000 });\n\n return formDigestValue;\n } catch (error) {\n const cause = error instanceof Error ? error.message : 'Unknown contextinfo error';\n throw new Error(`Error retrieving Form Digest Value: ${cause}`);\n }\n}\n","import { AxiosResponse } from 'axios';\nimport { EmailProps } from '../../types';\nimport { fetchDigest } from './digest';\nimport { RequestContext } from './context';\n\ntype SendEmailResponse = AxiosResponse<{\n d: {\n SendEmail: null;\n };\n}>;\n\nexport async function sendEmail(\n context: RequestContext,\n { From, To, Subject, Body }: EmailProps\n): Promise<SendEmailResponse> {\n const response = await context.instance({\n url: '_api/SP.Utilities.Utility.SendEmail',\n method: 'POST',\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n 'Content-Type': 'application/json;odata=verbose',\n },\n data: JSON.stringify({\n properties: {\n __metadata: {\n type: 'SP.Utilities.EmailProperties',\n },\n From,\n To: {\n results: Array.isArray(To) ? To : [To],\n },\n Body,\n Subject,\n },\n }),\n });\n\n return response;\n}\n","import { ListData } from '../../../types';\n\ntype AnyRecord = Record<string, unknown>;\n\nconst LOOKUP_ID_KEYS = [\n 'lookupId',\n 'LookupId',\n 'lookupID',\n 'LookupID',\n 'Id',\n 'ID',\n];\n\nfunction isPlainObject(value: unknown): value is AnyRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction extractLookupPrimitive(\n value: AnyRecord,\n allowGenericId: boolean\n): unknown | undefined {\n for (const key of LOOKUP_ID_KEYS) {\n if (!allowGenericId && (key === 'Id' || key === 'ID')) {\n continue;\n }\n if (value[key] !== undefined && value[key] !== null) {\n return value[key];\n }\n }\n return undefined;\n}\n\nfunction normalizeLookupValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return { results: value };\n }\n\n if (isPlainObject(value)) {\n if (Array.isArray(value.results)) {\n return { results: value.results };\n }\n\n const primitive = extractLookupPrimitive(value, true);\n if (primitive !== undefined) {\n return primitive;\n }\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return value;\n }\n const numeric = Number(trimmed);\n return Number.isNaN(numeric) ? trimmed : numeric;\n }\n\n return value;\n}\n\nfunction resolveLookupField(key: string, value: unknown) {\n const lower = key.toLowerCase();\n const endsWithId = lower.endsWith('id');\n const endsWithRef = lower.endsWith('ref');\n const endsWithLookup = lower.endsWith('lookup');\n const hasLookupHint = endsWithId || endsWithRef || endsWithLookup;\n\n if (value === undefined) {\n return null;\n }\n\n if (Array.isArray(value)) {\n if (value.some(item => typeof item === 'string')) {\n return null;\n }\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: { results: value },\n };\n }\n\n if (isPlainObject(value)) {\n const primitive = extractLookupPrimitive(value, hasLookupHint);\n if (primitive !== undefined) {\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: normalizeLookupValue(primitive),\n };\n }\n\n if (Array.isArray(value.results)) {\n if (value.results.some(item => typeof item === 'string')) {\n return null;\n }\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: { results: value.results },\n };\n }\n\n if (!hasLookupHint) {\n return null;\n }\n } else if (!hasLookupHint) {\n return null;\n }\n\n const targetKey = endsWithId ? key : `${key}Id`;\n\n if (value === null) {\n return {\n key: targetKey,\n value: null,\n };\n }\n\n if (typeof value === 'number') {\n return {\n key: targetKey,\n value,\n };\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return {\n key: targetKey,\n value: '',\n };\n }\n const numeric = Number(trimmed);\n return {\n key: targetKey,\n value: Number.isNaN(numeric) ? trimmed : numeric,\n };\n }\n\n return null;\n}\n\nexport function normalizeListPayload<D = Record<string, unknown>>(\n data: ListData<D>\n): AnyRecord {\n const result: AnyRecord = {};\n\n if (!data) {\n return result;\n }\n\n for (const [key, value] of Object.entries(data as AnyRecord)) {\n if (key === '__metadata') {\n continue;\n }\n\n const lookupField = resolveLookupField(key, value);\n if (lookupField) {\n result[lookupField.key] = lookupField.value;\n continue;\n }\n\n if (value !== undefined) {\n result[key] = value;\n }\n }\n\n return result;\n}\n","import { SHAREPOINT_VER } from '../../../types';\nimport { RequestContext } from '../context';\n\nexport async function resolveMetadataType<V extends SHAREPOINT_VER>(\n context: RequestContext<V>\n): Promise<string> {\n if (context.resolveListItemEntityType) {\n return context.resolveListItemEntityType();\n }\n if (context.listItemEntityTypeFullName) {\n return context.listItemEntityTypeFullName;\n }\n return `SP.Data.${context.listName}ListItem`;\n}\n","import { ListData, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { normalizeListPayload } from './normalizePayload';\nimport { resolveMetadataType } from './resolveMetadataType';\n\nexport async function createListItem<\n D = Record<string, unknown>,\n V extends SHAREPOINT_VER = '2013'\n>(context: RequestContext<V>, listData: ListData<D>) {\n const normalizedData = normalizeListPayload(listData);\n let payload: Record<string, unknown> = normalizedData;\n\n if (context.sharepointVersion === '2013') {\n const metadataType = await resolveMetadataType(context);\n const userMetadata = (listData as { __metadata?: Record<string, unknown> })\n .__metadata;\n payload = {\n ...normalizedData,\n __metadata: {\n ...(userMetadata && typeof userMetadata === 'object' ? userMetadata : {}),\n type: metadataType,\n },\n };\n }\n\n const response = await context.instance({\n url: context.endpoint,\n method: 'POST',\n data: JSON.stringify(payload),\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n },\n });\n\n return response;\n}\n","export function escapeODataStringLiteral(value: string) {\n return value.replace(/'/g, \"''\");\n}\n\nexport function buildListByTitleEndpoint(listName: string) {\n return `_api/web/lists/GetByTitle('${escapeODataStringLiteral(listName)}')`;\n}\n","export function buildLibraryPath(folderPath?: string | string[]) {\n if (!folderPath) {\n return '';\n }\n\n const segments = Array.isArray(folderPath)\n ? folderPath\n : folderPath.split('/').filter(Boolean);\n\n if (!segments.length) {\n return '';\n }\n\n const escapedSegments = segments.map(segment => {\n if (!segment.trim()) {\n throw new Error('Folder path segments cannot be empty.');\n }\n\n const sanitized = segment.replace(/'/g, \"''\");\n\n return `/Folders('${encodeURIComponent(sanitized)}')`;\n });\n\n return escapedSegments.join('');\n}\n\nexport function encodeFileName(fileName: string) {\n if (!fileName.trim()) {\n throw new Error('File name cannot be empty.');\n }\n\n return encodeURIComponent(fileName.replace(/'/g, \"''\"));\n}\n","import { CreateFileProps, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\nimport { encodeFileName } from './utils';\n\nexport async function createAttachment<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { file, itemId }: CreateFileProps\n) {\n if (context.sharepointVersion !== '2013') {\n throw new Error(\n 'createAttachment is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n const encodedFileName = encodeFileName(file.name);\n const requestUrl = `${buildListByTitleEndpoint(\n context.listName\n )}/items(${itemId})/AttachmentFiles/add(FileName='${encodedFileName}')`;\n\n const response = await context.instance.post(requestUrl, file, {\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n },\n });\n\n return response;\n}\n","import { SHAREPOINT_VER } from '../../../types';\nimport { RequestContext } from '../context';\nimport { fetchDigest } from '../digest';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nexport async function deleteItem<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n id: number | string\n) {\n const requestDigest = await fetchDigest(context.instance);\n const url =\n context.sharepointVersion === '2013'\n ? `${buildListByTitleEndpoint(context.listName)}/items(${id})`\n : `${context.endpoint}(${id})`;\n\n const response = await context.instance.post(url, undefined, {\n headers: {\n 'X-RequestDigest': requestDigest,\n 'IF-MATCH': '*',\n 'X-HTTP-Method': 'DELETE',\n },\n });\n return response;\n}\n","import { SHAREPOINT_VER, DeleteFileProps } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildLibraryPath, encodeFileName } from './utils';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nconst SUPPORTED_VERSION: SHAREPOINT_VER = '2013';\n\nexport async function deleteFile<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { fileName, folderPath }: DeleteFileProps\n) {\n if (context.sharepointVersion !== SUPPORTED_VERSION) {\n throw new Error(\n 'deleteFile is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n const encodedFileName = encodeFileName(fileName);\n let requestUrl = `${buildListByTitleEndpoint(context.listName)}/RootFolder`;\n requestUrl += buildLibraryPath(folderPath);\n requestUrl += `/Files('${encodedFileName}')`;\n\n const digest = await fetchDigest(context.instance);\n\n const response = await context.instance.post(requestUrl, undefined, {\n headers: {\n 'X-HTTP-Method': 'DELETE',\n 'IF-MATCH': '*',\n 'X-RequestDigest': digest,\n },\n });\n\n return response;\n}\n","import { Folder_Options, Options, SHAREPOINT_VER } from '../../types';\n\ntype QueryableOptions<T, V extends SHAREPOINT_VER = '2013'> =\n | Options<T, V>\n | Folder_Options<T>;\n\nexport function buildODataParams<T, V extends SHAREPOINT_VER = '2013'>(\n options: QueryableOptions<T, V> | undefined,\n orderBySeparator: ',' | ' ' = ','\n) {\n const { expand, orderBy, limit, filter, cols, skip } = options || {};\n\n const params: Record<string, string | number | undefined> = {\n $expand: Array.isArray(expand) ? expand.join(',') : expand,\n $top: limit,\n $skip: skip,\n $select: Array.isArray(cols) ? cols.join(',') : cols,\n $filter: filter,\n $orderby: Array.isArray(orderBy) ? orderBy.join(orderBySeparator) : orderBy,\n };\n\n return params;\n}\n\nexport function appendParamsToUrl(\n baseUrl: URL,\n params: Record<string, string | number | undefined | null>\n) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n baseUrl.searchParams.append(key, String(value));\n }\n });\n}\n","import { Folder_Options, SHAREPOINT_VER } from '../../../types';\nimport { appendParamsToUrl, buildODataParams } from '../odata';\nimport { RequestContext } from '../context';\n\nexport async function getFiles<T, V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n options?: Folder_Options<T>\n) {\n const params = buildODataParams(options, ',');\n const url = new URL(context.endpoint, context.instance.defaults.baseURL);\n\n appendParamsToUrl(url, params);\n\n const response = await context.instance.request({\n url: context.endpoint,\n method: 'GET',\n params,\n });\n\n const data = response.data?.d?.results ?? response.data?.d ?? response.data;\n\n const meta = { url };\n\n return { data, meta };\n}\n","import { Options, SPItem, SHAREPOINT_VER } from '../../../types';\nimport { appendParamsToUrl, buildODataParams } from '../odata';\nimport { RequestContext } from '../context';\n\ntype ListItemShape<K, V extends SHAREPOINT_VER> = K & Partial<SPItem<V>>;\n\ntype SelectedColumns<\n K,\n V extends SHAREPOINT_VER,\n O extends Options<K, V> | undefined\n> = O extends { cols?: infer C }\n ? C extends readonly (infer Key)[]\n ? Extract<Key, keyof ListItemShape<K, V>>\n : Extract<C, keyof ListItemShape<K, V>>\n : never;\n\ntype ListItemResponseData<\n K,\n V extends SHAREPOINT_VER,\n O extends Options<K, V> | undefined\n> = [SelectedColumns<K, V, O>] extends [never]\n ? ListItemShape<K, V>\n : Pick<ListItemShape<K, V>, SelectedColumns<K, V, O>>;\n\nexport async function getListItems<\n K,\n V extends SHAREPOINT_VER = '2013',\n O extends Options<K, V> | undefined = Options<K, V> | undefined\n>(\n context: RequestContext<V>,\n options?: O\n): Promise<{\n data: ListItemResponseData<K, V, O> | ListItemResponseData<K, V, O>[] | undefined;\n meta: { url: URL };\n}> {\n const params = buildODataParams(options, ' ');\n\n const url = new URL(context.endpoint, context.instance.defaults.baseURL);\n appendParamsToUrl(url, params);\n\n const response = await context.instance.request({\n url: context.endpoint,\n method: 'GET',\n params,\n });\n\n const rawData =\n response.data?.d?.results ?? response.data?.d ?? response.data;\n const cols = options?.cols as Options<K, V>['cols'] | undefined;\n const keys = cols\n ? (Array.isArray(cols) ? cols : [cols]).filter(\n (key): key is Extract<keyof ListItemShape<K, V>, string> =>\n typeof key === 'string'\n )\n : undefined;\n\n const filterItem = (item: unknown) => {\n if (!keys || !item || typeof item !== 'object') {\n return item;\n }\n\n return keys.reduce<Record<string, unknown>>((acc, key) => {\n if (key in item) {\n acc[key] = (item as Record<string, unknown>)[key];\n }\n\n return acc;\n }, {});\n };\n\n const data = Array.isArray(rawData)\n ? rawData.map(filterItem)\n : filterItem(rawData);\n\n const meta = { url };\n\n return {\n data: data as\n | ListItemResponseData<K, V, O>\n | ListItemResponseData<K, V, O>[]\n | undefined,\n meta,\n };\n}\n","import { AxiosInstance } from 'axios';\nimport { Options, SHAREPOINT_VER } from '../../../types';\nimport { buildODataParams } from '../odata';\n\nexport async function getOnly<T, V extends SHAREPOINT_VER = '2013'>(\n instance: AxiosInstance,\n endpoint: string,\n options?: Options<T, V>\n) {\n const params = buildODataParams(options, ',');\n const { data } = await instance.get(endpoint, { params });\n if (!data) {\n return undefined;\n }\n\n if (data.d) {\n return data.d.results ? data.d.results : data.d;\n }\n\n return data;\n}\n","import { ListData, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { normalizeListPayload } from './normalizePayload';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\nimport { resolveMetadataType } from './resolveMetadataType';\n\nexport async function updateListItem<\n D = Record<string, unknown>,\n V extends SHAREPOINT_VER = '2013'\n>(\n context: RequestContext<V>,\n id: number | string,\n data: ListData<D>,\n digest?: string\n) {\n const formDigestValue = digest ?? (await fetchDigest(context.instance));\n\n const normalizedData = normalizeListPayload(data);\n let payload: Record<string, unknown> = normalizedData;\n\n if (context.sharepointVersion === '2013') {\n const metadataType = await resolveMetadataType(context);\n const userMetadata = (data as { __metadata?: Record<string, unknown> })\n .__metadata;\n payload = {\n ...normalizedData,\n __metadata: {\n ...(userMetadata && typeof userMetadata === 'object' ? userMetadata : {}),\n type: metadataType,\n },\n };\n }\n\n const url =\n context.sharepointVersion === '2013'\n ? `${buildListByTitleEndpoint(context.listName)}/items(${id})`\n : `${context.endpoint}(${id})`;\n\n const response = await context.instance({\n url,\n method: 'POST',\n data: JSON.stringify(payload),\n headers: {\n 'X-RequestDigest': formDigestValue,\n 'IF-MATCH': '*',\n 'X-HTTP-Method': 'MERGE',\n },\n });\n\n return response;\n}\n","import { AxiosResponse } from 'axios';\nimport { ItemID, SHAREPOINT_VER, UploadFileProps } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildLibraryPath, encodeFileName } from './utils';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nconst SUPPORTED_VERSION: SHAREPOINT_VER = '2013';\n\nexport async function uploadFile<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { file, folderPath, overwrite = true }: UploadFileProps\n): Promise<{ response: AxiosResponse; itemId?: ItemID }> {\n if (context.sharepointVersion !== SUPPORTED_VERSION) {\n throw new Error(\n 'uploadFile is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n if (!file?.name) {\n throw new Error('A file with a valid name must be provided.');\n }\n\n let requestUrl = `${buildListByTitleEndpoint(context.listName)}/RootFolder`;\n requestUrl += buildLibraryPath(folderPath);\n\n const encodedFileName = encodeFileName(file.name);\n requestUrl += `/Files/add(url='${encodedFileName}',overwrite=${\n overwrite ? 'true' : 'false'\n })?$expand=ListItemAllFields&$select=ListItemAllFields/Id`;\n\n const digest = await fetchDigest(context.instance);\n\n const response = await context.instance.post(requestUrl, file, {\n headers: {\n 'Content-Type': file.type || 'application/octet-stream',\n 'X-RequestDigest': digest,\n },\n });\n\n const responseData = response.data?.d ?? response.data;\n const listItemFields = responseData?.ListItemAllFields;\n let itemId: ItemID | undefined =\n listItemFields?.Id ??\n listItemFields?.ID ??\n responseData?.Id ??\n responseData?.ID;\n\n if (typeof itemId === 'undefined' && listItemFields?.__deferred?.uri) {\n const listItemResponse = await context.instance.get(\n listItemFields.__deferred.uri\n );\n const deferredId =\n listItemResponse.data?.d?.Id ?? listItemResponse.data?.Id;\n if (typeof deferredId !== 'undefined') {\n itemId = deferredId;\n }\n }\n\n return { response, itemId };\n}\n","import { AxiosInstance } from 'axios';\nimport { PermissionLabel, PersonField, UserPermision, UserProfile } from '../../types';\nimport { RequestContext } from './context';\nimport { escapeODataStringLiteral } from './sharepointUrl';\n\ntype RoleDefinition = {\n Name: string;\n Description: string;\n Hidden: boolean;\n Id: number;\n Order: number;\n RoleTypeKind: number;\n BasePermissions: {\n High: string;\n Low: string;\n };\n};\n\nconst PERMISSION_PRIORITY: PermissionLabel[] = [\n 'Full Control',\n 'Edit',\n 'Contribute',\n 'Read',\n];\n\ntype PeoplePickerQueryParameters = {\n __metadata: { type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters' };\n AllowEmailAddresses: boolean;\n AllowMultipleEntities: boolean;\n AllUrlZones: boolean;\n MaximumEntitySuggestions: number;\n PrincipalSource: number;\n PrincipalType: number;\n QueryString: string;\n RequiredProperties?: string[];\n};\n\nexport async function typeAhead(\n instance: AxiosInstance,\n input: string,\n filter?: string,\n maxSuggestions = 10\n): Promise<PersonField[]> {\n const requestUrl = `_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`;\n\n const queryParams: PeoplePickerQueryParameters = {\n __metadata: {\n type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters',\n },\n AllowEmailAddresses: true,\n AllowMultipleEntities: false,\n AllUrlZones: false,\n MaximumEntitySuggestions: maxSuggestions,\n PrincipalSource: 15,\n PrincipalType: 1,\n QueryString: input,\n };\n\n if (filter) {\n queryParams.RequiredProperties = [filter];\n }\n\n const response = await instance.post(requestUrl, JSON.stringify({ queryParams }), {\n headers: {\n Accept: 'application/json; odata=verbose',\n 'Content-Type': 'application/json;odata=verbose',\n },\n });\n\n const searchResults =\n response.data?.d?.ClientPeoplePickerSearchUser ??\n response.data?.ClientPeoplePickerSearchUser;\n\n if (typeof searchResults === 'string') {\n const parsed = JSON.parse(searchResults);\n if (Array.isArray(parsed)) return parsed as PersonField[];\n throw new Error('People picker returned no results.');\n }\n\n if (Array.isArray(searchResults)) return searchResults as PersonField[];\n\n throw new Error('Invalid people picker response.');\n}\n\nexport async function currentUserProperties(\n instance: AxiosInstance\n): Promise<UserProfile> {\n const requestUrl = '_api/sp.userprofiles.peoplemanager/getmyproperties';\n const response = await instance.get(requestUrl);\n\n const profile = (response.data?.d ?? response.data) as UserProfile | undefined;\n if (!profile) {\n throw new Error('Unable to retrieve user profile.');\n }\n\n profile.UserProfileProperties?.results?.forEach(\n (prop: { Key: string; Value: string }) => {\n if (prop.Key === 'FirstName') profile.FirstName = prop.Value;\n else if (prop.Key === 'LastName') profile.LastName = prop.Value;\n else if (prop.Key === 'Country') profile.Country = prop.Value;\n else if (prop.Key === 'UserName') profile.UserName = prop.Value;\n }\n );\n\n return profile;\n}\n\nexport async function getSiteUser(\n instance: AxiosInstance,\n searchValue: string\n) {\n const safeSearchValue = escapeODataStringLiteral(searchValue);\n const response = await instance.get('_api/web/siteusers', {\n params: {\n $filter: `substringof('${safeSearchValue}', Title) or substringof('${safeSearchValue}', LoginName) or substringof('${safeSearchValue}', Email)`,\n $top: 50,\n $expand: 'Groups',\n },\n });\n return response.data.d;\n}\n\nasync function roleDefinitions(instance: AxiosInstance): Promise<RoleDefinition[]> {\n const response = await instance.get('_api/Web/RoleDefinitions');\n return response.data.d.results as RoleDefinition[];\n}\n\nasync function getEffectiveBasePermissions(\n instance: AxiosInstance\n): Promise<{ High: string; Low: string }> {\n const response = await instance.get('_api/Web/effectiveBasePermissions');\n return response.data.d.EffectiveBasePermissions;\n}\n\nexport async function currentUserPermissions(\n context: RequestContext\n): Promise<UserPermision> {\n const { High: userHigh, Low: userLow } = await getEffectiveBasePermissions(\n context.instance\n );\n const definitions = await roleDefinitions(context.instance);\n\n const userHighInt = parseInt(userHigh, 10);\n const userLowInt = parseInt(userLow, 10);\n\n const matching = definitions\n .filter((def): def is RoleDefinition =>\n PERMISSION_PRIORITY.includes(def.Name as PermissionLabel) &&\n (userHighInt & parseInt(def.BasePermissions.High, 10)) === parseInt(def.BasePermissions.High, 10) &&\n (userLowInt & parseInt(def.BasePermissions.Low, 10)) === parseInt(def.BasePermissions.Low, 10)\n )\n .sort(\n (a, b) =>\n PERMISSION_PRIORITY.indexOf(a.Name as PermissionLabel) -\n PERMISSION_PRIORITY.indexOf(b.Name as PermissionLabel)\n );\n\n const result = matching[0];\n\n if (!result) {\n throw new Error(\n `Unable to resolve current user permission. Effective: High=\"${userHigh}\", Low=\"${userLow}\"`\n );\n }\n\n return result as unknown as UserPermision;\n}\n","import { AxiosInstance, CreateAxiosDefaults as AxiosConfig } from 'axios';\nimport instance from './instance';\nimport {\n CreateFileProps,\n CurrentUser,\n DeleteFileProps,\n EmailProps,\n Field_Options,\n Folder_Options,\n ItemID,\n ListData,\n Options,\n PersonField,\n SHAREPOINT_VER,\n SPFieldSchema,\n UploadFileProps,\n UserPermision,\n UserProfile,\n} from '../types';\nimport { RequestContext } from './internal/context';\nimport { sendEmail as sendEmailRequest } from './internal/emailRequests';\nimport { fetchDigest } from './internal/digest';\nimport {\n createAttachment,\n createListItem,\n deleteFile as deleteLibraryFile,\n deleteItem,\n getFiles,\n getListItems,\n getOnly,\n updateListItem,\n uploadFile,\n} from './internal/listRequests';\nimport {\n buildListByTitleEndpoint,\n escapeODataStringLiteral,\n} from './internal/sharepointUrl';\nimport {\n currentUserPermissions as resolveCurrentUserPermissions,\n currentUserProperties as loadCurrentUserProperties,\n getSiteUser as fetchSiteUser,\n typeAhead,\n} from './internal/userRequests';\n\ntype ListKey<T extends { LISTS: Record<string, unknown> }> = Extract<\n keyof T['LISTS'],\n string\n>;\n\n/**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31\n * and no longer sends emails. Migrate to Microsoft Graph API:\n * POST /v1.0/me/sendMail (delegated) or POST /v1.0/users/{id}/sendMail (app)\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\ntype EmailApi = ((\n from: string,\n to: string[] | string,\n subject: string | undefined,\n body: string\n) => ReturnType<typeof sendEmailRequest>) & {\n send: (props: EmailProps) => ReturnType<typeof sendEmailRequest>;\n};\n\nclass HTTPSharePointRequests<\n T extends {\n LISTS: Record<string, unknown>;\n FOLDERS?: Record<string, unknown>;\n }\n> {\n private readonly baseURL: string;\n private readonly instance: AxiosInstance;\n private readonly listItemEntityTypeCache: Map<string, string>;\n /**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31.\n * Migrate to Microsoft Graph API POST /v1.0/me/sendMail\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\n public readonly email: EmailApi;\n\n constructor(baseURL: string, config?: AxiosConfig) {\n this.baseURL = baseURL.endsWith('/') ? baseURL : `${baseURL}/`;\n this.instance = instance(this.baseURL, config);\n this.listItemEntityTypeCache = new Map<string, string>();\n const buildEmailContext = () =>\n this.createContext<'2013'>({\n endpoint: '_api/SP.Utilities.Utility.SendEmail',\n listName: '',\n sharepointVersion: '2013',\n });\n this.email = Object.assign(\n (\n from: string,\n to: string[] | string,\n subject: string | undefined,\n body: string\n ) =>\n sendEmailRequest(buildEmailContext(), {\n From: from,\n To: to,\n Subject: subject,\n Body: body,\n }),\n {\n send: (props: EmailProps) => sendEmailRequest(buildEmailContext(), props),\n }\n );\n }\n\n private createContext<V extends SHAREPOINT_VER = '2013'>({\n endpoint,\n listName,\n sharepointVersion,\n listItemEntityTypeFullName,\n resolveListItemEntityType,\n }: {\n endpoint: string;\n listName: string;\n sharepointVersion: V;\n listItemEntityTypeFullName?: string;\n resolveListItemEntityType?: () => Promise<string>;\n }): RequestContext<V> {\n return {\n instance: this.instance,\n endpoint,\n listName,\n sharepointVersion,\n listItemEntityTypeFullName,\n resolveListItemEntityType,\n };\n }\n\n private async resolveListItemEntityTypeFullName(\n listName: string\n ): Promise<string> {\n const cacheKey = listName;\n const cachedType = this.listItemEntityTypeCache.get(cacheKey);\n if (cachedType) {\n return cachedType;\n }\n\n const response = await this.instance.get(\n `${buildListByTitleEndpoint(listName)}?$select=ListItemEntityTypeFullName`\n );\n\n const entityType =\n response.data?.d?.ListItemEntityTypeFullName ??\n response.data?.ListItemEntityTypeFullName;\n\n if (!entityType || typeof entityType !== 'string') {\n throw new Error(\n `Unable to resolve ListItemEntityTypeFullName for list \"${listName}\".`\n );\n }\n\n this.listItemEntityTypeCache.set(cacheKey, entityType);\n return entityType;\n }\n\n private buildListScope<\n K extends ListKey<T>,\n V extends SHAREPOINT_VER = '2013'\n >(listName: K, version: V) {\n const listNameValue = String(listName);\n const endpoint =\n version === '2013'\n ? `${buildListByTitleEndpoint(listNameValue)}/items`\n : `_vti_bin/ListData.svc/${encodeURIComponent(listNameValue)}`;\n\n let scopedEntityType: string | undefined;\n const resolveListItemEntityType = async () => {\n if (scopedEntityType) {\n return scopedEntityType;\n }\n\n if (version !== '2013') {\n scopedEntityType = `SP.Data.${listNameValue}ListItem`;\n return scopedEntityType;\n }\n\n scopedEntityType = await this.resolveListItemEntityTypeFullName(\n listNameValue\n );\n return scopedEntityType;\n };\n\n const getContext = () =>\n this.createContext<V>({\n endpoint,\n listName: listNameValue,\n sharepointVersion: version,\n listItemEntityTypeFullName: scopedEntityType,\n resolveListItemEntityType,\n });\n\n const removeItem = (id: ItemID) => deleteItem(getContext(), id);\n const removeFile = (props: DeleteFileProps) =>\n deleteLibraryFile(getContext(), props);\n\n return {\n create: (data: ListData<T['LISTS'][K]>) =>\n createListItem<T['LISTS'][K], V>(getContext(), data),\n get: (options?: Options<T['LISTS'][K], V>) =>\n getListItems<T['LISTS'][K], V>(getContext(), options),\n update: (id: ItemID, data: ListData<T['LISTS'][K]>, digest?: string) =>\n updateListItem<T['LISTS'][K], V>(getContext(), id, data, digest),\n delete: removeItem,\n remove: removeItem,\n createFile: (props: CreateFileProps) =>\n createAttachment(getContext(), props),\n uploadFile: (props: UploadFileProps) => uploadFile(getContext(), props),\n deleteFile: removeFile,\n removeFile,\n fields: (options?: Field_Options<T['LISTS'][K], V>) => {\n const fieldsEndpoint = !options?.fieldName\n ? `${buildListByTitleEndpoint(listNameValue)}/fields`\n : `${buildListByTitleEndpoint(\n listNameValue\n )}/fields/getbytitle('${escapeODataStringLiteral(\n String(options.fieldName)\n )}')`;\n return {\n get: (): Promise<SPFieldSchema | SPFieldSchema[] | undefined> =>\n getOnly<SPFieldSchema, V>(this.instance, fieldsEndpoint, options),\n };\n },\n items: {\n create: (data: ListData<T['LISTS'][K]>) =>\n createListItem<T['LISTS'][K], V>(getContext(), data),\n get: (options?: Options<T['LISTS'][K], V>) =>\n getListItems<T['LISTS'][K], V>(getContext(), options),\n update: (id: ItemID, data: ListData<T['LISTS'][K]>, digest?: string) =>\n updateListItem<T['LISTS'][K], V>(getContext(), id, data, digest),\n delete: removeItem,\n remove: removeItem,\n },\n files: {\n attach: (props: CreateFileProps) =>\n createAttachment(getContext(), props),\n upload: (props: UploadFileProps) => uploadFile(getContext(), props),\n delete: removeFile,\n remove: removeFile,\n },\n };\n }\n\n /**\n * @deprecated Use `from(listName, '2010')` instead.\n */\n list<K extends ListKey<T>>(listName: K) {\n return this.from<K, '2010'>(listName, '2010');\n }\n\n public from<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(\n listName: K,\n sharepointVersion?: V\n ) {\n const version = (sharepointVersion ?? '2013') as V;\n return this.buildListScope<K, V>(listName, version);\n }\n\n public field<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(\n listName: K,\n fieldName?: Extract<keyof T['LISTS'][K], string>,\n sharepointVersion?: V\n ): Promise<SPFieldSchema | SPFieldSchema[] | undefined> {\n return this.from<K, V>(listName, sharepointVersion)\n .fields({\n fieldName,\n } as Field_Options<T['LISTS'][K], V>)\n .get();\n }\n\n public lists(options?: Options<Record<string, unknown>, '2013'>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/lists',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getListItems<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n public getDigest() {\n return fetchDigest(this.instance);\n }\n\n public folders(options?: Folder_Options<Record<string, unknown>>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/folders',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getFiles<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n public folder(folderName?: string | string[]) {\n const defaultPath = ['Shared Documents'];\n const segments = folderName\n ? Array.isArray(folderName)\n ? [...defaultPath, ...folderName]\n : [...defaultPath, ...folderName.split('/').filter(Boolean)]\n : defaultPath;\n\n const serverRelativePath = escapeODataStringLiteral(segments.join('/'));\n const baseEndpoint = `_api/web/GetFolderByServerRelativeUrl('${serverRelativePath}')`;\n\n return {\n get: (options?: Folder_Options<Record<string, unknown>>) => {\n const folderType = options?.type ?? 'Files';\n const endpoint = `${baseEndpoint}/${folderType}`;\n const context = this.createContext<'2013'>({\n endpoint,\n listName: '',\n sharepointVersion: '2013',\n });\n\n return getFiles<Record<string, unknown>, '2013'>(context, {\n ...options,\n type: folderType,\n });\n },\n };\n }\n\n public users(options?: Options<Record<string, unknown>, '2013'>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/SiteUserInfoList/items',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getListItems<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n /**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31.\n * Migrate to Microsoft Graph API POST /v1.0/me/sendMail\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\n public sendEmail(props: EmailProps) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/SP.Utilities.Utility.SendEmail',\n listName: '',\n sharepointVersion: '2013',\n });\n return sendEmailRequest(context, props);\n }\n\n public readonly user = {\n properties: () => ({\n get: (): Promise<UserProfile> => loadCurrentUserProperties(this.instance),\n }),\n searchSiteUser: (searchValue: string) =>\n fetchSiteUser(this.instance, searchValue),\n searchUser: (input: string, filter?: string, maxSuggestions?: number): Promise<PersonField[]> =>\n typeAhead(this.instance, input, filter, maxSuggestions),\n current: (options?: { expand?: 'Groups' | Array<'Groups'> }) => ({\n get: (): Promise<CurrentUser> =>\n getOnly(this.instance, '_api/web/currentUser', options as Options),\n }),\n currentPermission: () => ({\n get: (): Promise<UserPermision> =>\n resolveCurrentUserPermissions(\n this.createContext<'2013'>({\n endpoint: '_api/web/effectiveBasePermissions',\n listName: '',\n sharepointVersion: '2013',\n })\n ),\n }),\n };\n\n public getCurrentUser() {\n return this.user.current().get();\n }\n\n public currentUserProperties() {\n return this.user.properties().get();\n }\n\n public currentUserPermission() {\n return this.user.currentPermission().get();\n }\n}\n\nexport default HTTPSharePointRequests;\n"],"mappings":"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","names":["axios","instance","targetKey","instance","SUPPORTED_VERSION","instance"]}
package/dist/index.mjs CHANGED
@@ -131,6 +131,9 @@ function resolveLookupField(key, value) {
131
131
  return null;
132
132
  }
133
133
  if (Array.isArray(value)) {
134
+ if (value.some((item) => typeof item === "string")) {
135
+ return null;
136
+ }
134
137
  const targetKey2 = endsWithId ? key : `${key}Id`;
135
138
  return {
136
139
  key: targetKey2,
@@ -147,6 +150,9 @@ function resolveLookupField(key, value) {
147
150
  };
148
151
  }
149
152
  if (Array.isArray(value.results)) {
153
+ if (value.results.some((item) => typeof item === "string")) {
154
+ return null;
155
+ }
150
156
  const targetKey2 = endsWithId ? key : `${key}Id`;
151
157
  return {
152
158
  key: targetKey2,
@@ -495,27 +501,25 @@ var PERMISSION_PRIORITY = [
495
501
  "Contribute",
496
502
  "Read"
497
503
  ];
498
- async function typeAhead(instance2, input, filter) {
504
+ async function typeAhead(instance2, input, filter, maxSuggestions = 10) {
499
505
  var _a, _b, _c;
500
506
  const requestUrl = `_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`;
501
- const data = {
502
- queryParams: {
503
- __metadata: {
504
- type: "SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters"
505
- },
506
- AllowEmailAddresses: true,
507
- AllowMultipleEntities: false,
508
- AllUrlZones: false,
509
- MaximumEntitySuggestions: 10,
510
- PrincipalSource: 15,
511
- PrincipalType: 1,
512
- QueryString: input
513
- }
507
+ const queryParams = {
508
+ __metadata: {
509
+ type: "SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters"
510
+ },
511
+ AllowEmailAddresses: true,
512
+ AllowMultipleEntities: false,
513
+ AllUrlZones: false,
514
+ MaximumEntitySuggestions: maxSuggestions,
515
+ PrincipalSource: 15,
516
+ PrincipalType: 1,
517
+ QueryString: input
514
518
  };
515
519
  if (filter) {
516
- data.queryParams.RequiredProperties = [filter];
520
+ queryParams.RequiredProperties = [filter];
517
521
  }
518
- const response = await instance2.post(requestUrl, JSON.stringify(data), {
522
+ const response = await instance2.post(requestUrl, JSON.stringify({ queryParams }), {
519
523
  headers: {
520
524
  Accept: "application/json; odata=verbose",
521
525
  "Content-Type": "application/json;odata=verbose"
@@ -524,17 +528,10 @@ async function typeAhead(instance2, input, filter) {
524
528
  const searchResults = ((_b = (_a = response.data) == null ? void 0 : _a.d) == null ? void 0 : _b.ClientPeoplePickerSearchUser) ?? ((_c = response.data) == null ? void 0 : _c.ClientPeoplePickerSearchUser);
525
529
  if (typeof searchResults === "string") {
526
530
  const parsed = JSON.parse(searchResults);
527
- if (Array.isArray(parsed) && parsed.length > 0) {
528
- return parsed[0];
529
- }
531
+ if (Array.isArray(parsed)) return parsed;
530
532
  throw new Error("People picker returned no results.");
531
533
  }
532
- if (Array.isArray(searchResults) && searchResults.length > 0) {
533
- return searchResults[0];
534
- }
535
- if (searchResults && typeof searchResults === "object") {
536
- return searchResults;
537
- }
534
+ if (Array.isArray(searchResults)) return searchResults;
538
535
  throw new Error("Invalid people picker response.");
539
536
  }
540
537
  async function currentUserProperties(instance2) {
@@ -810,7 +807,7 @@ var HTTPSharePointRequests = class {
810
807
  get: () => currentUserProperties(this.instance)
811
808
  }),
812
809
  searchSiteUser: (searchValue) => getSiteUser(this.instance, searchValue),
813
- searchUser: (input, filter) => typeAhead(this.instance, input, filter),
810
+ searchUser: (input, filter, maxSuggestions) => typeAhead(this.instance, input, filter, maxSuggestions),
814
811
  current: (options) => ({
815
812
  get: () => getOnly(this.instance, "_api/web/currentUser", options)
816
813
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/root/instance.ts","../src/root/internal/digest.ts","../src/root/internal/emailRequests.ts","../src/root/internal/listRequests/normalizePayload.ts","../src/root/internal/listRequests/resolveMetadataType.ts","../src/root/internal/listRequests/createListItem.ts","../src/root/internal/sharepointUrl.ts","../src/root/internal/listRequests/utils.ts","../src/root/internal/listRequests/createAttachment.ts","../src/root/internal/listRequests/deleteItem.ts","../src/root/internal/listRequests/deleteFile.ts","../src/root/internal/odata.ts","../src/root/internal/listRequests/getFiles.ts","../src/root/internal/listRequests/getListItems.ts","../src/root/internal/listRequests/getOnly.ts","../src/root/internal/listRequests/updateListItem.ts","../src/root/internal/listRequests/uploadFile.ts","../src/root/internal/userRequests.ts","../src/root/index.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosHeaders, CreateAxiosDefaults as AxiosConfig } from 'axios';\n\nconst defaultConfig: AxiosConfig = {\n headers: {\n Accept: 'application/json; odata=verbose',\n 'Content-Type': 'application/json; odata=verbose',\n },\n timeout: 15000,\n withCredentials: true,\n paramsSerializer: {\n serialize: (params: Record<string, string | number | undefined>) =>\n Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${k}=${String(v)}`)\n .join('&'),\n },\n};\n\nexport const instance = (baseURL: string, config?: AxiosConfig) => {\n const userHeaders =\n config?.headers instanceof AxiosHeaders\n ? config.headers.toJSON()\n : config?.headers ?? {};\n\n return axios.create({\n ...defaultConfig,\n ...config,\n baseURL,\n headers: {\n ...defaultConfig.headers,\n ...userHeaders,\n },\n });\n};\n\nexport default instance;\n","import { AxiosInstance } from 'axios';\n\ntype DigestEntry = { value: string; expiresAt: number };\nconst cache = new WeakMap<AxiosInstance, DigestEntry>();\n\nexport async function fetchDigest(instance: AxiosInstance): Promise<string> {\n const cached = cache.get(instance);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.value;\n }\n\n try {\n const response = await instance.post('_api/contextinfo');\n const info = response.data?.d?.GetContextWebInformation;\n const formDigestValue = info?.FormDigestValue;\n\n if (!formDigestValue) {\n throw new Error('Invalid response structure: Missing FormDigestValue');\n }\n\n const ttl = (info?.FormDigestTimeoutSeconds ?? 1800) - 60;\n cache.set(instance, { value: formDigestValue, expiresAt: Date.now() + ttl * 1000 });\n\n return formDigestValue;\n } catch (error) {\n const cause = error instanceof Error ? error.message : 'Unknown contextinfo error';\n throw new Error(`Error retrieving Form Digest Value: ${cause}`);\n }\n}\n","import { AxiosResponse } from 'axios';\nimport { EmailProps } from '../../types';\nimport { fetchDigest } from './digest';\nimport { RequestContext } from './context';\n\ntype SendEmailResponse = AxiosResponse<{\n d: {\n SendEmail: null;\n };\n}>;\n\nexport async function sendEmail(\n context: RequestContext,\n { From, To, Subject, Body }: EmailProps\n): Promise<SendEmailResponse> {\n const response = await context.instance({\n url: '_api/SP.Utilities.Utility.SendEmail',\n method: 'POST',\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n 'Content-Type': 'application/json;odata=verbose',\n },\n data: JSON.stringify({\n properties: {\n __metadata: {\n type: 'SP.Utilities.EmailProperties',\n },\n From,\n To: {\n results: Array.isArray(To) ? To : [To],\n },\n Body,\n Subject,\n },\n }),\n });\n\n return response;\n}\n","import { ListData } from '../../../types';\n\ntype AnyRecord = Record<string, unknown>;\n\nconst LOOKUP_ID_KEYS = [\n 'lookupId',\n 'LookupId',\n 'lookupID',\n 'LookupID',\n 'Id',\n 'ID',\n];\n\nfunction isPlainObject(value: unknown): value is AnyRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction extractLookupPrimitive(\n value: AnyRecord,\n allowGenericId: boolean\n): unknown | undefined {\n for (const key of LOOKUP_ID_KEYS) {\n if (!allowGenericId && (key === 'Id' || key === 'ID')) {\n continue;\n }\n if (value[key] !== undefined && value[key] !== null) {\n return value[key];\n }\n }\n return undefined;\n}\n\nfunction normalizeLookupValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return { results: value };\n }\n\n if (isPlainObject(value)) {\n if (Array.isArray(value.results)) {\n return { results: value.results };\n }\n\n const primitive = extractLookupPrimitive(value, true);\n if (primitive !== undefined) {\n return primitive;\n }\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return value;\n }\n const numeric = Number(trimmed);\n return Number.isNaN(numeric) ? trimmed : numeric;\n }\n\n return value;\n}\n\nfunction resolveLookupField(key: string, value: unknown) {\n const lower = key.toLowerCase();\n const endsWithId = lower.endsWith('id');\n const endsWithRef = lower.endsWith('ref');\n const endsWithLookup = lower.endsWith('lookup');\n const hasLookupHint = endsWithId || endsWithRef || endsWithLookup;\n\n if (value === undefined) {\n return null;\n }\n\n if (Array.isArray(value)) {\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: { results: value },\n };\n }\n\n if (isPlainObject(value)) {\n const primitive = extractLookupPrimitive(value, hasLookupHint);\n if (primitive !== undefined) {\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: normalizeLookupValue(primitive),\n };\n }\n\n if (Array.isArray(value.results)) {\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: { results: value.results },\n };\n }\n\n if (!hasLookupHint) {\n return null;\n }\n } else if (!hasLookupHint) {\n return null;\n }\n\n const targetKey = endsWithId ? key : `${key}Id`;\n\n if (value === null) {\n return {\n key: targetKey,\n value: null,\n };\n }\n\n if (typeof value === 'number') {\n return {\n key: targetKey,\n value,\n };\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return {\n key: targetKey,\n value: '',\n };\n }\n const numeric = Number(trimmed);\n return {\n key: targetKey,\n value: Number.isNaN(numeric) ? trimmed : numeric,\n };\n }\n\n return null;\n}\n\nexport function normalizeListPayload<D = Record<string, unknown>>(\n data: ListData<D>\n): AnyRecord {\n const result: AnyRecord = {};\n\n if (!data) {\n return result;\n }\n\n for (const [key, value] of Object.entries(data as AnyRecord)) {\n if (key === '__metadata') {\n continue;\n }\n\n const lookupField = resolveLookupField(key, value);\n if (lookupField) {\n result[lookupField.key] = lookupField.value;\n continue;\n }\n\n if (value !== undefined) {\n result[key] = value;\n }\n }\n\n return result;\n}\n","import { SHAREPOINT_VER } from '../../../types';\nimport { RequestContext } from '../context';\n\nexport async function resolveMetadataType<V extends SHAREPOINT_VER>(\n context: RequestContext<V>\n): Promise<string> {\n if (context.resolveListItemEntityType) {\n return context.resolveListItemEntityType();\n }\n if (context.listItemEntityTypeFullName) {\n return context.listItemEntityTypeFullName;\n }\n return `SP.Data.${context.listName}ListItem`;\n}\n","import { ListData, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { normalizeListPayload } from './normalizePayload';\nimport { resolveMetadataType } from './resolveMetadataType';\n\nexport async function createListItem<\n D = Record<string, unknown>,\n V extends SHAREPOINT_VER = '2013'\n>(context: RequestContext<V>, listData: ListData<D>) {\n const normalizedData = normalizeListPayload(listData);\n let payload: Record<string, unknown> = normalizedData;\n\n if (context.sharepointVersion === '2013') {\n const metadataType = await resolveMetadataType(context);\n const userMetadata = (listData as { __metadata?: Record<string, unknown> })\n .__metadata;\n payload = {\n ...normalizedData,\n __metadata: {\n ...(userMetadata && typeof userMetadata === 'object' ? userMetadata : {}),\n type: metadataType,\n },\n };\n }\n\n const response = await context.instance({\n url: context.endpoint,\n method: 'POST',\n data: JSON.stringify(payload),\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n },\n });\n\n return response;\n}\n","export function escapeODataStringLiteral(value: string) {\n return value.replace(/'/g, \"''\");\n}\n\nexport function buildListByTitleEndpoint(listName: string) {\n return `_api/web/lists/GetByTitle('${escapeODataStringLiteral(listName)}')`;\n}\n","export function buildLibraryPath(folderPath?: string | string[]) {\n if (!folderPath) {\n return '';\n }\n\n const segments = Array.isArray(folderPath)\n ? folderPath\n : folderPath.split('/').filter(Boolean);\n\n if (!segments.length) {\n return '';\n }\n\n const escapedSegments = segments.map(segment => {\n if (!segment.trim()) {\n throw new Error('Folder path segments cannot be empty.');\n }\n\n const sanitized = segment.replace(/'/g, \"''\");\n\n return `/Folders('${encodeURIComponent(sanitized)}')`;\n });\n\n return escapedSegments.join('');\n}\n\nexport function encodeFileName(fileName: string) {\n if (!fileName.trim()) {\n throw new Error('File name cannot be empty.');\n }\n\n return encodeURIComponent(fileName.replace(/'/g, \"''\"));\n}\n","import { CreateFileProps, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\nimport { encodeFileName } from './utils';\n\nexport async function createAttachment<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { file, itemId }: CreateFileProps\n) {\n if (context.sharepointVersion !== '2013') {\n throw new Error(\n 'createAttachment is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n const encodedFileName = encodeFileName(file.name);\n const requestUrl = `${buildListByTitleEndpoint(\n context.listName\n )}/items(${itemId})/AttachmentFiles/add(FileName='${encodedFileName}')`;\n\n const response = await context.instance.post(requestUrl, file, {\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n },\n });\n\n return response;\n}\n","import { SHAREPOINT_VER } from '../../../types';\nimport { RequestContext } from '../context';\nimport { fetchDigest } from '../digest';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nexport async function deleteItem<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n id: number | string\n) {\n const requestDigest = await fetchDigest(context.instance);\n const url =\n context.sharepointVersion === '2013'\n ? `${buildListByTitleEndpoint(context.listName)}/items(${id})`\n : `${context.endpoint}(${id})`;\n\n const response = await context.instance.post(url, undefined, {\n headers: {\n 'X-RequestDigest': requestDigest,\n 'IF-MATCH': '*',\n 'X-HTTP-Method': 'DELETE',\n },\n });\n return response;\n}\n","import { SHAREPOINT_VER, DeleteFileProps } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildLibraryPath, encodeFileName } from './utils';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nconst SUPPORTED_VERSION: SHAREPOINT_VER = '2013';\n\nexport async function deleteFile<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { fileName, folderPath }: DeleteFileProps\n) {\n if (context.sharepointVersion !== SUPPORTED_VERSION) {\n throw new Error(\n 'deleteFile is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n const encodedFileName = encodeFileName(fileName);\n let requestUrl = `${buildListByTitleEndpoint(context.listName)}/RootFolder`;\n requestUrl += buildLibraryPath(folderPath);\n requestUrl += `/Files('${encodedFileName}')`;\n\n const digest = await fetchDigest(context.instance);\n\n const response = await context.instance.post(requestUrl, undefined, {\n headers: {\n 'X-HTTP-Method': 'DELETE',\n 'IF-MATCH': '*',\n 'X-RequestDigest': digest,\n },\n });\n\n return response;\n}\n","import { Folder_Options, Options, SHAREPOINT_VER } from '../../types';\n\ntype QueryableOptions<T, V extends SHAREPOINT_VER = '2013'> =\n | Options<T, V>\n | Folder_Options<T>;\n\nexport function buildODataParams<T, V extends SHAREPOINT_VER = '2013'>(\n options: QueryableOptions<T, V> | undefined,\n orderBySeparator: ',' | ' ' = ','\n) {\n const { expand, orderBy, limit, filter, cols, skip } = options || {};\n\n const params: Record<string, string | number | undefined> = {\n $expand: Array.isArray(expand) ? expand.join(',') : expand,\n $top: limit,\n $skip: skip,\n $select: Array.isArray(cols) ? cols.join(',') : cols,\n $filter: filter,\n $orderby: Array.isArray(orderBy) ? orderBy.join(orderBySeparator) : orderBy,\n };\n\n return params;\n}\n\nexport function appendParamsToUrl(\n baseUrl: URL,\n params: Record<string, string | number | undefined | null>\n) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n baseUrl.searchParams.append(key, String(value));\n }\n });\n}\n","import { Folder_Options, SHAREPOINT_VER } from '../../../types';\nimport { appendParamsToUrl, buildODataParams } from '../odata';\nimport { RequestContext } from '../context';\n\nexport async function getFiles<T, V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n options?: Folder_Options<T>\n) {\n const params = buildODataParams(options, ',');\n const url = new URL(context.endpoint, context.instance.defaults.baseURL);\n\n appendParamsToUrl(url, params);\n\n const response = await context.instance.request({\n url: context.endpoint,\n method: 'GET',\n params,\n });\n\n const data = response.data?.d?.results ?? response.data?.d ?? response.data;\n\n const meta = { url };\n\n return { data, meta };\n}\n","import { Options, SPItem, SHAREPOINT_VER } from '../../../types';\nimport { appendParamsToUrl, buildODataParams } from '../odata';\nimport { RequestContext } from '../context';\n\ntype ListItemShape<K, V extends SHAREPOINT_VER> = K & Partial<SPItem<V>>;\n\ntype SelectedColumns<\n K,\n V extends SHAREPOINT_VER,\n O extends Options<K, V> | undefined\n> = O extends { cols?: infer C }\n ? C extends readonly (infer Key)[]\n ? Extract<Key, keyof ListItemShape<K, V>>\n : Extract<C, keyof ListItemShape<K, V>>\n : never;\n\ntype ListItemResponseData<\n K,\n V extends SHAREPOINT_VER,\n O extends Options<K, V> | undefined\n> = [SelectedColumns<K, V, O>] extends [never]\n ? ListItemShape<K, V>\n : Pick<ListItemShape<K, V>, SelectedColumns<K, V, O>>;\n\nexport async function getListItems<\n K,\n V extends SHAREPOINT_VER = '2013',\n O extends Options<K, V> | undefined = Options<K, V> | undefined\n>(\n context: RequestContext<V>,\n options?: O\n): Promise<{\n data: ListItemResponseData<K, V, O> | ListItemResponseData<K, V, O>[] | undefined;\n meta: { url: URL };\n}> {\n const params = buildODataParams(options, ' ');\n\n const url = new URL(context.endpoint, context.instance.defaults.baseURL);\n appendParamsToUrl(url, params);\n\n const response = await context.instance.request({\n url: context.endpoint,\n method: 'GET',\n params,\n });\n\n const rawData =\n response.data?.d?.results ?? response.data?.d ?? response.data;\n const cols = options?.cols as Options<K, V>['cols'] | undefined;\n const keys = cols\n ? (Array.isArray(cols) ? cols : [cols]).filter(\n (key): key is Extract<keyof ListItemShape<K, V>, string> =>\n typeof key === 'string'\n )\n : undefined;\n\n const filterItem = (item: unknown) => {\n if (!keys || !item || typeof item !== 'object') {\n return item;\n }\n\n return keys.reduce<Record<string, unknown>>((acc, key) => {\n if (key in item) {\n acc[key] = (item as Record<string, unknown>)[key];\n }\n\n return acc;\n }, {});\n };\n\n const data = Array.isArray(rawData)\n ? rawData.map(filterItem)\n : filterItem(rawData);\n\n const meta = { url };\n\n return {\n data: data as\n | ListItemResponseData<K, V, O>\n | ListItemResponseData<K, V, O>[]\n | undefined,\n meta,\n };\n}\n","import { AxiosInstance } from 'axios';\nimport { Options, SHAREPOINT_VER } from '../../../types';\nimport { buildODataParams } from '../odata';\n\nexport async function getOnly<T, V extends SHAREPOINT_VER = '2013'>(\n instance: AxiosInstance,\n endpoint: string,\n options?: Options<T, V>\n) {\n const params = buildODataParams(options, ',');\n const { data } = await instance.get(endpoint, { params });\n if (!data) {\n return undefined;\n }\n\n if (data.d) {\n return data.d.results ? data.d.results : data.d;\n }\n\n return data;\n}\n","import { ListData, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { normalizeListPayload } from './normalizePayload';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\nimport { resolveMetadataType } from './resolveMetadataType';\n\nexport async function updateListItem<\n D = Record<string, unknown>,\n V extends SHAREPOINT_VER = '2013'\n>(\n context: RequestContext<V>,\n id: number | string,\n data: ListData<D>,\n digest?: string\n) {\n const formDigestValue = digest ?? (await fetchDigest(context.instance));\n\n const normalizedData = normalizeListPayload(data);\n let payload: Record<string, unknown> = normalizedData;\n\n if (context.sharepointVersion === '2013') {\n const metadataType = await resolveMetadataType(context);\n const userMetadata = (data as { __metadata?: Record<string, unknown> })\n .__metadata;\n payload = {\n ...normalizedData,\n __metadata: {\n ...(userMetadata && typeof userMetadata === 'object' ? userMetadata : {}),\n type: metadataType,\n },\n };\n }\n\n const url =\n context.sharepointVersion === '2013'\n ? `${buildListByTitleEndpoint(context.listName)}/items(${id})`\n : `${context.endpoint}(${id})`;\n\n const response = await context.instance({\n url,\n method: 'POST',\n data: JSON.stringify(payload),\n headers: {\n 'X-RequestDigest': formDigestValue,\n 'IF-MATCH': '*',\n 'X-HTTP-Method': 'MERGE',\n },\n });\n\n return response;\n}\n","import { AxiosResponse } from 'axios';\nimport { ItemID, SHAREPOINT_VER, UploadFileProps } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildLibraryPath, encodeFileName } from './utils';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nconst SUPPORTED_VERSION: SHAREPOINT_VER = '2013';\n\nexport async function uploadFile<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { file, folderPath, overwrite = true }: UploadFileProps\n): Promise<{ response: AxiosResponse; itemId?: ItemID }> {\n if (context.sharepointVersion !== SUPPORTED_VERSION) {\n throw new Error(\n 'uploadFile is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n if (!file?.name) {\n throw new Error('A file with a valid name must be provided.');\n }\n\n let requestUrl = `${buildListByTitleEndpoint(context.listName)}/RootFolder`;\n requestUrl += buildLibraryPath(folderPath);\n\n const encodedFileName = encodeFileName(file.name);\n requestUrl += `/Files/add(url='${encodedFileName}',overwrite=${\n overwrite ? 'true' : 'false'\n })?$expand=ListItemAllFields&$select=ListItemAllFields/Id`;\n\n const digest = await fetchDigest(context.instance);\n\n const response = await context.instance.post(requestUrl, file, {\n headers: {\n 'Content-Type': file.type || 'application/octet-stream',\n 'X-RequestDigest': digest,\n },\n });\n\n const responseData = response.data?.d ?? response.data;\n const listItemFields = responseData?.ListItemAllFields;\n let itemId: ItemID | undefined =\n listItemFields?.Id ??\n listItemFields?.ID ??\n responseData?.Id ??\n responseData?.ID;\n\n if (typeof itemId === 'undefined' && listItemFields?.__deferred?.uri) {\n const listItemResponse = await context.instance.get(\n listItemFields.__deferred.uri\n );\n const deferredId =\n listItemResponse.data?.d?.Id ?? listItemResponse.data?.Id;\n if (typeof deferredId !== 'undefined') {\n itemId = deferredId;\n }\n }\n\n return { response, itemId };\n}\n","import { AxiosInstance } from 'axios';\nimport { PermissionLabel, PersonField, UserPermision, UserProfile } from '../../types';\nimport { RequestContext } from './context';\nimport { escapeODataStringLiteral } from './sharepointUrl';\n\ntype RoleDefinition = {\n Name: string;\n Description: string;\n Hidden: boolean;\n Id: number;\n Order: number;\n RoleTypeKind: number;\n BasePermissions: {\n High: string;\n Low: string;\n };\n};\n\nconst PERMISSION_PRIORITY: PermissionLabel[] = [\n 'Full Control',\n 'Edit',\n 'Contribute',\n 'Read',\n];\n\nexport async function typeAhead(\n instance: AxiosInstance,\n input: string,\n filter?: string\n): Promise<PersonField> {\n const requestUrl = `_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`;\n\n const data = {\n queryParams: {\n __metadata: {\n type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters',\n },\n AllowEmailAddresses: true,\n AllowMultipleEntities: false,\n AllUrlZones: false,\n MaximumEntitySuggestions: 10,\n PrincipalSource: 15,\n PrincipalType: 1,\n QueryString: input,\n },\n };\n\n if (filter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (data.queryParams as any).RequiredProperties = [filter];\n }\n\n const response = await instance.post(requestUrl, JSON.stringify(data), {\n headers: {\n Accept: 'application/json; odata=verbose',\n 'Content-Type': 'application/json;odata=verbose',\n },\n });\n\n const searchResults =\n response.data?.d?.ClientPeoplePickerSearchUser ??\n response.data?.ClientPeoplePickerSearchUser;\n\n if (typeof searchResults === 'string') {\n const parsed = JSON.parse(searchResults);\n if (Array.isArray(parsed) && parsed.length > 0) {\n return parsed[0] as PersonField;\n }\n throw new Error('People picker returned no results.');\n }\n\n if (Array.isArray(searchResults) && searchResults.length > 0) {\n return searchResults[0] as PersonField;\n }\n\n if (searchResults && typeof searchResults === 'object') {\n return searchResults as PersonField;\n }\n\n throw new Error('Invalid people picker response.');\n}\n\nexport async function currentUserProperties(\n instance: AxiosInstance\n): Promise<UserProfile> {\n const requestUrl = '_api/sp.userprofiles.peoplemanager/getmyproperties';\n const response = await instance.get(requestUrl);\n\n const profile = (response.data?.d ?? response.data) as UserProfile | undefined;\n if (!profile) {\n throw new Error('Unable to retrieve user profile.');\n }\n\n profile.UserProfileProperties?.results?.forEach(\n (prop: { Key: string; Value: string }) => {\n if (prop.Key === 'FirstName') profile.FirstName = prop.Value;\n else if (prop.Key === 'LastName') profile.LastName = prop.Value;\n else if (prop.Key === 'Country') profile.Country = prop.Value;\n else if (prop.Key === 'UserName') profile.UserName = prop.Value;\n }\n );\n\n return profile;\n}\n\nexport async function getSiteUser(\n instance: AxiosInstance,\n searchValue: string\n) {\n const safeSearchValue = escapeODataStringLiteral(searchValue);\n const response = await instance.get('_api/web/siteusers', {\n params: {\n $filter: `substringof('${safeSearchValue}', Title) or substringof('${safeSearchValue}', LoginName) or substringof('${safeSearchValue}', Email)`,\n $top: 50,\n $expand: 'Groups',\n },\n });\n return response.data.d;\n}\n\nasync function roleDefinitions(instance: AxiosInstance): Promise<RoleDefinition[]> {\n const response = await instance.get('_api/Web/RoleDefinitions');\n return response.data.d.results as RoleDefinition[];\n}\n\nasync function getEffectiveBasePermissions(\n instance: AxiosInstance\n): Promise<{ High: string; Low: string }> {\n const response = await instance.get('_api/Web/effectiveBasePermissions');\n return response.data.d.EffectiveBasePermissions;\n}\n\nexport async function currentUserPermissions(\n context: RequestContext\n): Promise<UserPermision> {\n const { High: userHigh, Low: userLow } = await getEffectiveBasePermissions(\n context.instance\n );\n const definitions = await roleDefinitions(context.instance);\n\n const userHighInt = parseInt(userHigh, 10);\n const userLowInt = parseInt(userLow, 10);\n\n const matching = definitions\n .filter((def): def is RoleDefinition =>\n PERMISSION_PRIORITY.includes(def.Name as PermissionLabel) &&\n (userHighInt & parseInt(def.BasePermissions.High, 10)) === parseInt(def.BasePermissions.High, 10) &&\n (userLowInt & parseInt(def.BasePermissions.Low, 10)) === parseInt(def.BasePermissions.Low, 10)\n )\n .sort(\n (a, b) =>\n PERMISSION_PRIORITY.indexOf(a.Name as PermissionLabel) -\n PERMISSION_PRIORITY.indexOf(b.Name as PermissionLabel)\n );\n\n const result = matching[0];\n\n if (!result) {\n throw new Error(\n `Unable to resolve current user permission. Effective: High=\"${userHigh}\", Low=\"${userLow}\"`\n );\n }\n\n return result as unknown as UserPermision;\n}\n","import { AxiosInstance, CreateAxiosDefaults as AxiosConfig } from 'axios';\nimport instance from './instance';\nimport {\n CreateFileProps,\n CurrentUser,\n DeleteFileProps,\n EmailProps,\n Field_Options,\n Folder_Options,\n ItemID,\n ListData,\n Options,\n PersonField,\n SHAREPOINT_VER,\n UploadFileProps,\n UserPermision,\n UserProfile,\n} from '../types';\nimport { RequestContext } from './internal/context';\nimport { sendEmail as sendEmailRequest } from './internal/emailRequests';\nimport { fetchDigest } from './internal/digest';\nimport {\n createAttachment,\n createListItem,\n deleteFile as deleteLibraryFile,\n deleteItem,\n getFiles,\n getListItems,\n getOnly,\n updateListItem,\n uploadFile,\n} from './internal/listRequests';\nimport {\n buildListByTitleEndpoint,\n escapeODataStringLiteral,\n} from './internal/sharepointUrl';\nimport {\n currentUserPermissions as resolveCurrentUserPermissions,\n currentUserProperties as loadCurrentUserProperties,\n getSiteUser as fetchSiteUser,\n typeAhead,\n} from './internal/userRequests';\n\ntype ListKey<T extends { LISTS: Record<string, unknown> }> = Extract<\n keyof T['LISTS'],\n string\n>;\n\n/**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31\n * and no longer sends emails. Migrate to Microsoft Graph API:\n * POST /v1.0/me/sendMail (delegated) or POST /v1.0/users/{id}/sendMail (app)\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\ntype EmailApi = ((\n from: string,\n to: string[] | string,\n subject: string | undefined,\n body: string\n) => ReturnType<typeof sendEmailRequest>) & {\n send: (props: EmailProps) => ReturnType<typeof sendEmailRequest>;\n};\n\nclass HTTPSharePointRequests<\n T extends {\n LISTS: Record<string, unknown>;\n FOLDERS?: Record<string, unknown>;\n }\n> {\n private readonly baseURL: string;\n private readonly instance: AxiosInstance;\n private readonly listItemEntityTypeCache: Map<string, string>;\n /**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31.\n * Migrate to Microsoft Graph API POST /v1.0/me/sendMail\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\n public readonly email: EmailApi;\n\n constructor(baseURL: string, config?: AxiosConfig) {\n this.baseURL = baseURL.endsWith('/') ? baseURL : `${baseURL}/`;\n this.instance = instance(this.baseURL, config);\n this.listItemEntityTypeCache = new Map<string, string>();\n const buildEmailContext = () =>\n this.createContext<'2013'>({\n endpoint: '_api/SP.Utilities.Utility.SendEmail',\n listName: '',\n sharepointVersion: '2013',\n });\n this.email = Object.assign(\n (\n from: string,\n to: string[] | string,\n subject: string | undefined,\n body: string\n ) =>\n sendEmailRequest(buildEmailContext(), {\n From: from,\n To: to,\n Subject: subject,\n Body: body,\n }),\n {\n send: (props: EmailProps) => sendEmailRequest(buildEmailContext(), props),\n }\n );\n }\n\n private createContext<V extends SHAREPOINT_VER = '2013'>({\n endpoint,\n listName,\n sharepointVersion,\n listItemEntityTypeFullName,\n resolveListItemEntityType,\n }: {\n endpoint: string;\n listName: string;\n sharepointVersion: V;\n listItemEntityTypeFullName?: string;\n resolveListItemEntityType?: () => Promise<string>;\n }): RequestContext<V> {\n return {\n instance: this.instance,\n endpoint,\n listName,\n sharepointVersion,\n listItemEntityTypeFullName,\n resolveListItemEntityType,\n };\n }\n\n private async resolveListItemEntityTypeFullName(\n listName: string\n ): Promise<string> {\n const cacheKey = listName;\n const cachedType = this.listItemEntityTypeCache.get(cacheKey);\n if (cachedType) {\n return cachedType;\n }\n\n const response = await this.instance.get(\n `${buildListByTitleEndpoint(listName)}?$select=ListItemEntityTypeFullName`\n );\n\n const entityType =\n response.data?.d?.ListItemEntityTypeFullName ??\n response.data?.ListItemEntityTypeFullName;\n\n if (!entityType || typeof entityType !== 'string') {\n throw new Error(\n `Unable to resolve ListItemEntityTypeFullName for list \"${listName}\".`\n );\n }\n\n this.listItemEntityTypeCache.set(cacheKey, entityType);\n return entityType;\n }\n\n private buildListScope<\n K extends ListKey<T>,\n V extends SHAREPOINT_VER = '2013'\n >(listName: K, version: V) {\n const listNameValue = String(listName);\n const endpoint =\n version === '2013'\n ? `${buildListByTitleEndpoint(listNameValue)}/items`\n : `_vti_bin/ListData.svc/${encodeURIComponent(listNameValue)}`;\n\n let scopedEntityType: string | undefined;\n const resolveListItemEntityType = async () => {\n if (scopedEntityType) {\n return scopedEntityType;\n }\n\n if (version !== '2013') {\n scopedEntityType = `SP.Data.${listNameValue}ListItem`;\n return scopedEntityType;\n }\n\n scopedEntityType = await this.resolveListItemEntityTypeFullName(\n listNameValue\n );\n return scopedEntityType;\n };\n\n const getContext = () =>\n this.createContext<V>({\n endpoint,\n listName: listNameValue,\n sharepointVersion: version,\n listItemEntityTypeFullName: scopedEntityType,\n resolveListItemEntityType,\n });\n\n const removeItem = (id: ItemID) => deleteItem(getContext(), id);\n const removeFile = (props: DeleteFileProps) =>\n deleteLibraryFile(getContext(), props);\n\n return {\n create: (data: ListData<T['LISTS'][K]>) =>\n createListItem<T['LISTS'][K], V>(getContext(), data),\n get: (options?: Options<T['LISTS'][K], V>) =>\n getListItems<T['LISTS'][K], V>(getContext(), options),\n update: (id: ItemID, data: ListData<T['LISTS'][K]>, digest?: string) =>\n updateListItem<T['LISTS'][K], V>(getContext(), id, data, digest),\n delete: removeItem,\n remove: removeItem,\n createFile: (props: CreateFileProps) =>\n createAttachment(getContext(), props),\n uploadFile: (props: UploadFileProps) => uploadFile(getContext(), props),\n deleteFile: removeFile,\n removeFile,\n fields: (options?: Field_Options<T['LISTS'][K], V>) => {\n const fieldsEndpoint = !options?.fieldName\n ? `${buildListByTitleEndpoint(listNameValue)}/fields`\n : `${buildListByTitleEndpoint(\n listNameValue\n )}/fields/getbytitle('${escapeODataStringLiteral(\n String(options.fieldName)\n )}')`;\n return {\n get: () =>\n getOnly<T['LISTS'][K], V>(this.instance, fieldsEndpoint, options),\n };\n },\n items: {\n create: (data: ListData<T['LISTS'][K]>) =>\n createListItem<T['LISTS'][K], V>(getContext(), data),\n get: (options?: Options<T['LISTS'][K], V>) =>\n getListItems<T['LISTS'][K], V>(getContext(), options),\n update: (id: ItemID, data: ListData<T['LISTS'][K]>, digest?: string) =>\n updateListItem<T['LISTS'][K], V>(getContext(), id, data, digest),\n delete: removeItem,\n remove: removeItem,\n },\n files: {\n attach: (props: CreateFileProps) =>\n createAttachment(getContext(), props),\n upload: (props: UploadFileProps) => uploadFile(getContext(), props),\n delete: removeFile,\n remove: removeFile,\n },\n };\n }\n\n /**\n * @deprecated Use `from(listName, '2010')` instead.\n */\n list<K extends ListKey<T>>(listName: K) {\n return this.from<K, '2010'>(listName, '2010');\n }\n\n public from<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(\n listName: K,\n sharepointVersion?: V\n ) {\n const version = (sharepointVersion ?? '2013') as V;\n return this.buildListScope<K, V>(listName, version);\n }\n\n public field<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(\n listName: K,\n fieldName?: Extract<keyof T['LISTS'][K], string>,\n sharepointVersion?: V\n ) {\n return this.from<K, V>(listName, sharepointVersion)\n .fields({\n fieldName,\n } as Field_Options<T['LISTS'][K], V>)\n .get();\n }\n\n public lists(options?: Options<Record<string, unknown>, '2013'>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/lists',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getListItems<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n public getDigest() {\n return fetchDigest(this.instance);\n }\n\n public folders(options?: Folder_Options<Record<string, unknown>>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/folders',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getFiles<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n public folder(folderName?: string | string[]) {\n const defaultPath = ['Shared Documents'];\n const segments = folderName\n ? Array.isArray(folderName)\n ? [...defaultPath, ...folderName]\n : [...defaultPath, ...folderName.split('/').filter(Boolean)]\n : defaultPath;\n\n const serverRelativePath = escapeODataStringLiteral(segments.join('/'));\n const baseEndpoint = `_api/web/GetFolderByServerRelativeUrl('${serverRelativePath}')`;\n\n return {\n get: (options?: Folder_Options<Record<string, unknown>>) => {\n const folderType = options?.type ?? 'Files';\n const endpoint = `${baseEndpoint}/${folderType}`;\n const context = this.createContext<'2013'>({\n endpoint,\n listName: '',\n sharepointVersion: '2013',\n });\n\n return getFiles<Record<string, unknown>, '2013'>(context, {\n ...options,\n type: folderType,\n });\n },\n };\n }\n\n public users(options?: Options<Record<string, unknown>, '2013'>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/SiteUserInfoList/items',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getListItems<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n /**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31.\n * Migrate to Microsoft Graph API POST /v1.0/me/sendMail\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\n public sendEmail(props: EmailProps) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/SP.Utilities.Utility.SendEmail',\n listName: '',\n sharepointVersion: '2013',\n });\n return sendEmailRequest(context, props);\n }\n\n public readonly user = {\n properties: () => ({\n get: (): Promise<UserProfile> => loadCurrentUserProperties(this.instance),\n }),\n searchSiteUser: (searchValue: string) =>\n fetchSiteUser(this.instance, searchValue),\n searchUser: (input: string, filter?: string): Promise<PersonField> =>\n typeAhead(this.instance, input, filter),\n current: (options?: { expand?: 'Groups' | Array<'Groups'> }) => ({\n get: (): Promise<CurrentUser> =>\n getOnly(this.instance, '_api/web/currentUser', options as Options),\n }),\n currentPermission: () => ({\n get: (): Promise<UserPermision> =>\n resolveCurrentUserPermissions(\n this.createContext<'2013'>({\n endpoint: '_api/web/effectiveBasePermissions',\n listName: '',\n sharepointVersion: '2013',\n })\n ),\n }),\n };\n\n public getCurrentUser() {\n return this.user.current().get();\n }\n\n public currentUserProperties() {\n return this.user.properties().get();\n }\n\n public currentUserPermission() {\n return this.user.currentPermission().get();\n }\n}\n\nexport default HTTPSharePointRequests;\n","import SHAREPOINT_REQUESTS from './root';\n\nimport { CreateAxiosDefaults as AxiosConfig } from 'axios';\n// Load environment variables from .env file\n\nexport default function createBase<\n T extends { LISTS: Record<string, any>; FOLDERS?: Record<string, any> } = any\n>() {\n function create({\n baseURL,\n config,\n }: {\n baseURL: string;\n config?: AxiosConfig;\n }) {\n if (!baseURL) {\n throw new Error('A valid SharePoint URL must be provided.');\n }\n return new SHAREPOINT_REQUESTS<T>(baseURL, config);\n }\n\n return {\n /**\n * @deprecated Use `create` instead.\n */\n baseURL(url: string, config?: AxiosConfig) {\n return create({ baseURL: url, config });\n },\n create,\n };\n}\n\nexport type {\n Metadata,\n SPItem,\n SPItem2010,\n SPItem2013,\n SHAREPOINT_VER,\n Options,\n Folder_Options,\n Field_Options,\n ItemID,\n CreateFileProps,\n UploadFileProps,\n DeleteFileProps,\n EmailProps,\n LookupField,\n ChoiceField,\n ListData,\n PersonField,\n MultiPersonField,\n PermissionLabel,\n UserPermission,\n /** @deprecated Use `UserPermission` instead */\n UserPermision,\n SPGroup,\n CurrentUser,\n UserProfilePropKey,\n UserProfile,\n IListName,\n} from './types';\n"],"mappings":"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","names":["instance","targetKey","instance","SUPPORTED_VERSION","instance"]}
1
+ {"version":3,"sources":["../src/root/instance.ts","../src/root/internal/digest.ts","../src/root/internal/emailRequests.ts","../src/root/internal/listRequests/normalizePayload.ts","../src/root/internal/listRequests/resolveMetadataType.ts","../src/root/internal/listRequests/createListItem.ts","../src/root/internal/sharepointUrl.ts","../src/root/internal/listRequests/utils.ts","../src/root/internal/listRequests/createAttachment.ts","../src/root/internal/listRequests/deleteItem.ts","../src/root/internal/listRequests/deleteFile.ts","../src/root/internal/odata.ts","../src/root/internal/listRequests/getFiles.ts","../src/root/internal/listRequests/getListItems.ts","../src/root/internal/listRequests/getOnly.ts","../src/root/internal/listRequests/updateListItem.ts","../src/root/internal/listRequests/uploadFile.ts","../src/root/internal/userRequests.ts","../src/root/index.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosHeaders, CreateAxiosDefaults as AxiosConfig } from 'axios';\n\nconst defaultConfig: AxiosConfig = {\n headers: {\n Accept: 'application/json; odata=verbose',\n 'Content-Type': 'application/json; odata=verbose',\n },\n timeout: 15000,\n withCredentials: true,\n paramsSerializer: {\n serialize: (params: Record<string, string | number | undefined>) =>\n Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${k}=${String(v)}`)\n .join('&'),\n },\n};\n\nexport const instance = (baseURL: string, config?: AxiosConfig) => {\n const userHeaders =\n config?.headers instanceof AxiosHeaders\n ? config.headers.toJSON()\n : config?.headers ?? {};\n\n return axios.create({\n ...defaultConfig,\n ...config,\n baseURL,\n headers: {\n ...defaultConfig.headers,\n ...userHeaders,\n },\n });\n};\n\nexport default instance;\n","import { AxiosInstance } from 'axios';\n\ntype DigestEntry = { value: string; expiresAt: number };\nconst cache = new WeakMap<AxiosInstance, DigestEntry>();\n\nexport async function fetchDigest(instance: AxiosInstance): Promise<string> {\n const cached = cache.get(instance);\n if (cached && Date.now() < cached.expiresAt) {\n return cached.value;\n }\n\n try {\n const response = await instance.post('_api/contextinfo');\n const info = response.data?.d?.GetContextWebInformation;\n const formDigestValue = info?.FormDigestValue;\n\n if (!formDigestValue) {\n throw new Error('Invalid response structure: Missing FormDigestValue');\n }\n\n const ttl = (info?.FormDigestTimeoutSeconds ?? 1800) - 60;\n cache.set(instance, { value: formDigestValue, expiresAt: Date.now() + ttl * 1000 });\n\n return formDigestValue;\n } catch (error) {\n const cause = error instanceof Error ? error.message : 'Unknown contextinfo error';\n throw new Error(`Error retrieving Form Digest Value: ${cause}`);\n }\n}\n","import { AxiosResponse } from 'axios';\nimport { EmailProps } from '../../types';\nimport { fetchDigest } from './digest';\nimport { RequestContext } from './context';\n\ntype SendEmailResponse = AxiosResponse<{\n d: {\n SendEmail: null;\n };\n}>;\n\nexport async function sendEmail(\n context: RequestContext,\n { From, To, Subject, Body }: EmailProps\n): Promise<SendEmailResponse> {\n const response = await context.instance({\n url: '_api/SP.Utilities.Utility.SendEmail',\n method: 'POST',\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n 'Content-Type': 'application/json;odata=verbose',\n },\n data: JSON.stringify({\n properties: {\n __metadata: {\n type: 'SP.Utilities.EmailProperties',\n },\n From,\n To: {\n results: Array.isArray(To) ? To : [To],\n },\n Body,\n Subject,\n },\n }),\n });\n\n return response;\n}\n","import { ListData } from '../../../types';\n\ntype AnyRecord = Record<string, unknown>;\n\nconst LOOKUP_ID_KEYS = [\n 'lookupId',\n 'LookupId',\n 'lookupID',\n 'LookupID',\n 'Id',\n 'ID',\n];\n\nfunction isPlainObject(value: unknown): value is AnyRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction extractLookupPrimitive(\n value: AnyRecord,\n allowGenericId: boolean\n): unknown | undefined {\n for (const key of LOOKUP_ID_KEYS) {\n if (!allowGenericId && (key === 'Id' || key === 'ID')) {\n continue;\n }\n if (value[key] !== undefined && value[key] !== null) {\n return value[key];\n }\n }\n return undefined;\n}\n\nfunction normalizeLookupValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return { results: value };\n }\n\n if (isPlainObject(value)) {\n if (Array.isArray(value.results)) {\n return { results: value.results };\n }\n\n const primitive = extractLookupPrimitive(value, true);\n if (primitive !== undefined) {\n return primitive;\n }\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return value;\n }\n const numeric = Number(trimmed);\n return Number.isNaN(numeric) ? trimmed : numeric;\n }\n\n return value;\n}\n\nfunction resolveLookupField(key: string, value: unknown) {\n const lower = key.toLowerCase();\n const endsWithId = lower.endsWith('id');\n const endsWithRef = lower.endsWith('ref');\n const endsWithLookup = lower.endsWith('lookup');\n const hasLookupHint = endsWithId || endsWithRef || endsWithLookup;\n\n if (value === undefined) {\n return null;\n }\n\n if (Array.isArray(value)) {\n if (value.some(item => typeof item === 'string')) {\n return null;\n }\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: { results: value },\n };\n }\n\n if (isPlainObject(value)) {\n const primitive = extractLookupPrimitive(value, hasLookupHint);\n if (primitive !== undefined) {\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: normalizeLookupValue(primitive),\n };\n }\n\n if (Array.isArray(value.results)) {\n if (value.results.some(item => typeof item === 'string')) {\n return null;\n }\n const targetKey = endsWithId ? key : `${key}Id`;\n return {\n key: targetKey,\n value: { results: value.results },\n };\n }\n\n if (!hasLookupHint) {\n return null;\n }\n } else if (!hasLookupHint) {\n return null;\n }\n\n const targetKey = endsWithId ? key : `${key}Id`;\n\n if (value === null) {\n return {\n key: targetKey,\n value: null,\n };\n }\n\n if (typeof value === 'number') {\n return {\n key: targetKey,\n value,\n };\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return {\n key: targetKey,\n value: '',\n };\n }\n const numeric = Number(trimmed);\n return {\n key: targetKey,\n value: Number.isNaN(numeric) ? trimmed : numeric,\n };\n }\n\n return null;\n}\n\nexport function normalizeListPayload<D = Record<string, unknown>>(\n data: ListData<D>\n): AnyRecord {\n const result: AnyRecord = {};\n\n if (!data) {\n return result;\n }\n\n for (const [key, value] of Object.entries(data as AnyRecord)) {\n if (key === '__metadata') {\n continue;\n }\n\n const lookupField = resolveLookupField(key, value);\n if (lookupField) {\n result[lookupField.key] = lookupField.value;\n continue;\n }\n\n if (value !== undefined) {\n result[key] = value;\n }\n }\n\n return result;\n}\n","import { SHAREPOINT_VER } from '../../../types';\nimport { RequestContext } from '../context';\n\nexport async function resolveMetadataType<V extends SHAREPOINT_VER>(\n context: RequestContext<V>\n): Promise<string> {\n if (context.resolveListItemEntityType) {\n return context.resolveListItemEntityType();\n }\n if (context.listItemEntityTypeFullName) {\n return context.listItemEntityTypeFullName;\n }\n return `SP.Data.${context.listName}ListItem`;\n}\n","import { ListData, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { normalizeListPayload } from './normalizePayload';\nimport { resolveMetadataType } from './resolveMetadataType';\n\nexport async function createListItem<\n D = Record<string, unknown>,\n V extends SHAREPOINT_VER = '2013'\n>(context: RequestContext<V>, listData: ListData<D>) {\n const normalizedData = normalizeListPayload(listData);\n let payload: Record<string, unknown> = normalizedData;\n\n if (context.sharepointVersion === '2013') {\n const metadataType = await resolveMetadataType(context);\n const userMetadata = (listData as { __metadata?: Record<string, unknown> })\n .__metadata;\n payload = {\n ...normalizedData,\n __metadata: {\n ...(userMetadata && typeof userMetadata === 'object' ? userMetadata : {}),\n type: metadataType,\n },\n };\n }\n\n const response = await context.instance({\n url: context.endpoint,\n method: 'POST',\n data: JSON.stringify(payload),\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n },\n });\n\n return response;\n}\n","export function escapeODataStringLiteral(value: string) {\n return value.replace(/'/g, \"''\");\n}\n\nexport function buildListByTitleEndpoint(listName: string) {\n return `_api/web/lists/GetByTitle('${escapeODataStringLiteral(listName)}')`;\n}\n","export function buildLibraryPath(folderPath?: string | string[]) {\n if (!folderPath) {\n return '';\n }\n\n const segments = Array.isArray(folderPath)\n ? folderPath\n : folderPath.split('/').filter(Boolean);\n\n if (!segments.length) {\n return '';\n }\n\n const escapedSegments = segments.map(segment => {\n if (!segment.trim()) {\n throw new Error('Folder path segments cannot be empty.');\n }\n\n const sanitized = segment.replace(/'/g, \"''\");\n\n return `/Folders('${encodeURIComponent(sanitized)}')`;\n });\n\n return escapedSegments.join('');\n}\n\nexport function encodeFileName(fileName: string) {\n if (!fileName.trim()) {\n throw new Error('File name cannot be empty.');\n }\n\n return encodeURIComponent(fileName.replace(/'/g, \"''\"));\n}\n","import { CreateFileProps, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\nimport { encodeFileName } from './utils';\n\nexport async function createAttachment<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { file, itemId }: CreateFileProps\n) {\n if (context.sharepointVersion !== '2013') {\n throw new Error(\n 'createAttachment is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n const encodedFileName = encodeFileName(file.name);\n const requestUrl = `${buildListByTitleEndpoint(\n context.listName\n )}/items(${itemId})/AttachmentFiles/add(FileName='${encodedFileName}')`;\n\n const response = await context.instance.post(requestUrl, file, {\n headers: {\n 'X-RequestDigest': await fetchDigest(context.instance),\n },\n });\n\n return response;\n}\n","import { SHAREPOINT_VER } from '../../../types';\nimport { RequestContext } from '../context';\nimport { fetchDigest } from '../digest';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nexport async function deleteItem<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n id: number | string\n) {\n const requestDigest = await fetchDigest(context.instance);\n const url =\n context.sharepointVersion === '2013'\n ? `${buildListByTitleEndpoint(context.listName)}/items(${id})`\n : `${context.endpoint}(${id})`;\n\n const response = await context.instance.post(url, undefined, {\n headers: {\n 'X-RequestDigest': requestDigest,\n 'IF-MATCH': '*',\n 'X-HTTP-Method': 'DELETE',\n },\n });\n return response;\n}\n","import { SHAREPOINT_VER, DeleteFileProps } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildLibraryPath, encodeFileName } from './utils';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nconst SUPPORTED_VERSION: SHAREPOINT_VER = '2013';\n\nexport async function deleteFile<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { fileName, folderPath }: DeleteFileProps\n) {\n if (context.sharepointVersion !== SUPPORTED_VERSION) {\n throw new Error(\n 'deleteFile is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n const encodedFileName = encodeFileName(fileName);\n let requestUrl = `${buildListByTitleEndpoint(context.listName)}/RootFolder`;\n requestUrl += buildLibraryPath(folderPath);\n requestUrl += `/Files('${encodedFileName}')`;\n\n const digest = await fetchDigest(context.instance);\n\n const response = await context.instance.post(requestUrl, undefined, {\n headers: {\n 'X-HTTP-Method': 'DELETE',\n 'IF-MATCH': '*',\n 'X-RequestDigest': digest,\n },\n });\n\n return response;\n}\n","import { Folder_Options, Options, SHAREPOINT_VER } from '../../types';\n\ntype QueryableOptions<T, V extends SHAREPOINT_VER = '2013'> =\n | Options<T, V>\n | Folder_Options<T>;\n\nexport function buildODataParams<T, V extends SHAREPOINT_VER = '2013'>(\n options: QueryableOptions<T, V> | undefined,\n orderBySeparator: ',' | ' ' = ','\n) {\n const { expand, orderBy, limit, filter, cols, skip } = options || {};\n\n const params: Record<string, string | number | undefined> = {\n $expand: Array.isArray(expand) ? expand.join(',') : expand,\n $top: limit,\n $skip: skip,\n $select: Array.isArray(cols) ? cols.join(',') : cols,\n $filter: filter,\n $orderby: Array.isArray(orderBy) ? orderBy.join(orderBySeparator) : orderBy,\n };\n\n return params;\n}\n\nexport function appendParamsToUrl(\n baseUrl: URL,\n params: Record<string, string | number | undefined | null>\n) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n baseUrl.searchParams.append(key, String(value));\n }\n });\n}\n","import { Folder_Options, SHAREPOINT_VER } from '../../../types';\nimport { appendParamsToUrl, buildODataParams } from '../odata';\nimport { RequestContext } from '../context';\n\nexport async function getFiles<T, V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n options?: Folder_Options<T>\n) {\n const params = buildODataParams(options, ',');\n const url = new URL(context.endpoint, context.instance.defaults.baseURL);\n\n appendParamsToUrl(url, params);\n\n const response = await context.instance.request({\n url: context.endpoint,\n method: 'GET',\n params,\n });\n\n const data = response.data?.d?.results ?? response.data?.d ?? response.data;\n\n const meta = { url };\n\n return { data, meta };\n}\n","import { Options, SPItem, SHAREPOINT_VER } from '../../../types';\nimport { appendParamsToUrl, buildODataParams } from '../odata';\nimport { RequestContext } from '../context';\n\ntype ListItemShape<K, V extends SHAREPOINT_VER> = K & Partial<SPItem<V>>;\n\ntype SelectedColumns<\n K,\n V extends SHAREPOINT_VER,\n O extends Options<K, V> | undefined\n> = O extends { cols?: infer C }\n ? C extends readonly (infer Key)[]\n ? Extract<Key, keyof ListItemShape<K, V>>\n : Extract<C, keyof ListItemShape<K, V>>\n : never;\n\ntype ListItemResponseData<\n K,\n V extends SHAREPOINT_VER,\n O extends Options<K, V> | undefined\n> = [SelectedColumns<K, V, O>] extends [never]\n ? ListItemShape<K, V>\n : Pick<ListItemShape<K, V>, SelectedColumns<K, V, O>>;\n\nexport async function getListItems<\n K,\n V extends SHAREPOINT_VER = '2013',\n O extends Options<K, V> | undefined = Options<K, V> | undefined\n>(\n context: RequestContext<V>,\n options?: O\n): Promise<{\n data: ListItemResponseData<K, V, O> | ListItemResponseData<K, V, O>[] | undefined;\n meta: { url: URL };\n}> {\n const params = buildODataParams(options, ' ');\n\n const url = new URL(context.endpoint, context.instance.defaults.baseURL);\n appendParamsToUrl(url, params);\n\n const response = await context.instance.request({\n url: context.endpoint,\n method: 'GET',\n params,\n });\n\n const rawData =\n response.data?.d?.results ?? response.data?.d ?? response.data;\n const cols = options?.cols as Options<K, V>['cols'] | undefined;\n const keys = cols\n ? (Array.isArray(cols) ? cols : [cols]).filter(\n (key): key is Extract<keyof ListItemShape<K, V>, string> =>\n typeof key === 'string'\n )\n : undefined;\n\n const filterItem = (item: unknown) => {\n if (!keys || !item || typeof item !== 'object') {\n return item;\n }\n\n return keys.reduce<Record<string, unknown>>((acc, key) => {\n if (key in item) {\n acc[key] = (item as Record<string, unknown>)[key];\n }\n\n return acc;\n }, {});\n };\n\n const data = Array.isArray(rawData)\n ? rawData.map(filterItem)\n : filterItem(rawData);\n\n const meta = { url };\n\n return {\n data: data as\n | ListItemResponseData<K, V, O>\n | ListItemResponseData<K, V, O>[]\n | undefined,\n meta,\n };\n}\n","import { AxiosInstance } from 'axios';\nimport { Options, SHAREPOINT_VER } from '../../../types';\nimport { buildODataParams } from '../odata';\n\nexport async function getOnly<T, V extends SHAREPOINT_VER = '2013'>(\n instance: AxiosInstance,\n endpoint: string,\n options?: Options<T, V>\n) {\n const params = buildODataParams(options, ',');\n const { data } = await instance.get(endpoint, { params });\n if (!data) {\n return undefined;\n }\n\n if (data.d) {\n return data.d.results ? data.d.results : data.d;\n }\n\n return data;\n}\n","import { ListData, SHAREPOINT_VER } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { normalizeListPayload } from './normalizePayload';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\nimport { resolveMetadataType } from './resolveMetadataType';\n\nexport async function updateListItem<\n D = Record<string, unknown>,\n V extends SHAREPOINT_VER = '2013'\n>(\n context: RequestContext<V>,\n id: number | string,\n data: ListData<D>,\n digest?: string\n) {\n const formDigestValue = digest ?? (await fetchDigest(context.instance));\n\n const normalizedData = normalizeListPayload(data);\n let payload: Record<string, unknown> = normalizedData;\n\n if (context.sharepointVersion === '2013') {\n const metadataType = await resolveMetadataType(context);\n const userMetadata = (data as { __metadata?: Record<string, unknown> })\n .__metadata;\n payload = {\n ...normalizedData,\n __metadata: {\n ...(userMetadata && typeof userMetadata === 'object' ? userMetadata : {}),\n type: metadataType,\n },\n };\n }\n\n const url =\n context.sharepointVersion === '2013'\n ? `${buildListByTitleEndpoint(context.listName)}/items(${id})`\n : `${context.endpoint}(${id})`;\n\n const response = await context.instance({\n url,\n method: 'POST',\n data: JSON.stringify(payload),\n headers: {\n 'X-RequestDigest': formDigestValue,\n 'IF-MATCH': '*',\n 'X-HTTP-Method': 'MERGE',\n },\n });\n\n return response;\n}\n","import { AxiosResponse } from 'axios';\nimport { ItemID, SHAREPOINT_VER, UploadFileProps } from '../../../types';\nimport { fetchDigest } from '../digest';\nimport { RequestContext } from '../context';\nimport { buildLibraryPath, encodeFileName } from './utils';\nimport { buildListByTitleEndpoint } from '../sharepointUrl';\n\nconst SUPPORTED_VERSION: SHAREPOINT_VER = '2013';\n\nexport async function uploadFile<V extends SHAREPOINT_VER = '2013'>(\n context: RequestContext<V>,\n { file, folderPath, overwrite = true }: UploadFileProps\n): Promise<{ response: AxiosResponse; itemId?: ItemID }> {\n if (context.sharepointVersion !== SUPPORTED_VERSION) {\n throw new Error(\n 'uploadFile is only supported for SharePoint 2013 REST endpoints.'\n );\n }\n\n if (!file?.name) {\n throw new Error('A file with a valid name must be provided.');\n }\n\n let requestUrl = `${buildListByTitleEndpoint(context.listName)}/RootFolder`;\n requestUrl += buildLibraryPath(folderPath);\n\n const encodedFileName = encodeFileName(file.name);\n requestUrl += `/Files/add(url='${encodedFileName}',overwrite=${\n overwrite ? 'true' : 'false'\n })?$expand=ListItemAllFields&$select=ListItemAllFields/Id`;\n\n const digest = await fetchDigest(context.instance);\n\n const response = await context.instance.post(requestUrl, file, {\n headers: {\n 'Content-Type': file.type || 'application/octet-stream',\n 'X-RequestDigest': digest,\n },\n });\n\n const responseData = response.data?.d ?? response.data;\n const listItemFields = responseData?.ListItemAllFields;\n let itemId: ItemID | undefined =\n listItemFields?.Id ??\n listItemFields?.ID ??\n responseData?.Id ??\n responseData?.ID;\n\n if (typeof itemId === 'undefined' && listItemFields?.__deferred?.uri) {\n const listItemResponse = await context.instance.get(\n listItemFields.__deferred.uri\n );\n const deferredId =\n listItemResponse.data?.d?.Id ?? listItemResponse.data?.Id;\n if (typeof deferredId !== 'undefined') {\n itemId = deferredId;\n }\n }\n\n return { response, itemId };\n}\n","import { AxiosInstance } from 'axios';\nimport { PermissionLabel, PersonField, UserPermision, UserProfile } from '../../types';\nimport { RequestContext } from './context';\nimport { escapeODataStringLiteral } from './sharepointUrl';\n\ntype RoleDefinition = {\n Name: string;\n Description: string;\n Hidden: boolean;\n Id: number;\n Order: number;\n RoleTypeKind: number;\n BasePermissions: {\n High: string;\n Low: string;\n };\n};\n\nconst PERMISSION_PRIORITY: PermissionLabel[] = [\n 'Full Control',\n 'Edit',\n 'Contribute',\n 'Read',\n];\n\ntype PeoplePickerQueryParameters = {\n __metadata: { type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters' };\n AllowEmailAddresses: boolean;\n AllowMultipleEntities: boolean;\n AllUrlZones: boolean;\n MaximumEntitySuggestions: number;\n PrincipalSource: number;\n PrincipalType: number;\n QueryString: string;\n RequiredProperties?: string[];\n};\n\nexport async function typeAhead(\n instance: AxiosInstance,\n input: string,\n filter?: string,\n maxSuggestions = 10\n): Promise<PersonField[]> {\n const requestUrl = `_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`;\n\n const queryParams: PeoplePickerQueryParameters = {\n __metadata: {\n type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters',\n },\n AllowEmailAddresses: true,\n AllowMultipleEntities: false,\n AllUrlZones: false,\n MaximumEntitySuggestions: maxSuggestions,\n PrincipalSource: 15,\n PrincipalType: 1,\n QueryString: input,\n };\n\n if (filter) {\n queryParams.RequiredProperties = [filter];\n }\n\n const response = await instance.post(requestUrl, JSON.stringify({ queryParams }), {\n headers: {\n Accept: 'application/json; odata=verbose',\n 'Content-Type': 'application/json;odata=verbose',\n },\n });\n\n const searchResults =\n response.data?.d?.ClientPeoplePickerSearchUser ??\n response.data?.ClientPeoplePickerSearchUser;\n\n if (typeof searchResults === 'string') {\n const parsed = JSON.parse(searchResults);\n if (Array.isArray(parsed)) return parsed as PersonField[];\n throw new Error('People picker returned no results.');\n }\n\n if (Array.isArray(searchResults)) return searchResults as PersonField[];\n\n throw new Error('Invalid people picker response.');\n}\n\nexport async function currentUserProperties(\n instance: AxiosInstance\n): Promise<UserProfile> {\n const requestUrl = '_api/sp.userprofiles.peoplemanager/getmyproperties';\n const response = await instance.get(requestUrl);\n\n const profile = (response.data?.d ?? response.data) as UserProfile | undefined;\n if (!profile) {\n throw new Error('Unable to retrieve user profile.');\n }\n\n profile.UserProfileProperties?.results?.forEach(\n (prop: { Key: string; Value: string }) => {\n if (prop.Key === 'FirstName') profile.FirstName = prop.Value;\n else if (prop.Key === 'LastName') profile.LastName = prop.Value;\n else if (prop.Key === 'Country') profile.Country = prop.Value;\n else if (prop.Key === 'UserName') profile.UserName = prop.Value;\n }\n );\n\n return profile;\n}\n\nexport async function getSiteUser(\n instance: AxiosInstance,\n searchValue: string\n) {\n const safeSearchValue = escapeODataStringLiteral(searchValue);\n const response = await instance.get('_api/web/siteusers', {\n params: {\n $filter: `substringof('${safeSearchValue}', Title) or substringof('${safeSearchValue}', LoginName) or substringof('${safeSearchValue}', Email)`,\n $top: 50,\n $expand: 'Groups',\n },\n });\n return response.data.d;\n}\n\nasync function roleDefinitions(instance: AxiosInstance): Promise<RoleDefinition[]> {\n const response = await instance.get('_api/Web/RoleDefinitions');\n return response.data.d.results as RoleDefinition[];\n}\n\nasync function getEffectiveBasePermissions(\n instance: AxiosInstance\n): Promise<{ High: string; Low: string }> {\n const response = await instance.get('_api/Web/effectiveBasePermissions');\n return response.data.d.EffectiveBasePermissions;\n}\n\nexport async function currentUserPermissions(\n context: RequestContext\n): Promise<UserPermision> {\n const { High: userHigh, Low: userLow } = await getEffectiveBasePermissions(\n context.instance\n );\n const definitions = await roleDefinitions(context.instance);\n\n const userHighInt = parseInt(userHigh, 10);\n const userLowInt = parseInt(userLow, 10);\n\n const matching = definitions\n .filter((def): def is RoleDefinition =>\n PERMISSION_PRIORITY.includes(def.Name as PermissionLabel) &&\n (userHighInt & parseInt(def.BasePermissions.High, 10)) === parseInt(def.BasePermissions.High, 10) &&\n (userLowInt & parseInt(def.BasePermissions.Low, 10)) === parseInt(def.BasePermissions.Low, 10)\n )\n .sort(\n (a, b) =>\n PERMISSION_PRIORITY.indexOf(a.Name as PermissionLabel) -\n PERMISSION_PRIORITY.indexOf(b.Name as PermissionLabel)\n );\n\n const result = matching[0];\n\n if (!result) {\n throw new Error(\n `Unable to resolve current user permission. Effective: High=\"${userHigh}\", Low=\"${userLow}\"`\n );\n }\n\n return result as unknown as UserPermision;\n}\n","import { AxiosInstance, CreateAxiosDefaults as AxiosConfig } from 'axios';\nimport instance from './instance';\nimport {\n CreateFileProps,\n CurrentUser,\n DeleteFileProps,\n EmailProps,\n Field_Options,\n Folder_Options,\n ItemID,\n ListData,\n Options,\n PersonField,\n SHAREPOINT_VER,\n SPFieldSchema,\n UploadFileProps,\n UserPermision,\n UserProfile,\n} from '../types';\nimport { RequestContext } from './internal/context';\nimport { sendEmail as sendEmailRequest } from './internal/emailRequests';\nimport { fetchDigest } from './internal/digest';\nimport {\n createAttachment,\n createListItem,\n deleteFile as deleteLibraryFile,\n deleteItem,\n getFiles,\n getListItems,\n getOnly,\n updateListItem,\n uploadFile,\n} from './internal/listRequests';\nimport {\n buildListByTitleEndpoint,\n escapeODataStringLiteral,\n} from './internal/sharepointUrl';\nimport {\n currentUserPermissions as resolveCurrentUserPermissions,\n currentUserProperties as loadCurrentUserProperties,\n getSiteUser as fetchSiteUser,\n typeAhead,\n} from './internal/userRequests';\n\ntype ListKey<T extends { LISTS: Record<string, unknown> }> = Extract<\n keyof T['LISTS'],\n string\n>;\n\n/**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31\n * and no longer sends emails. Migrate to Microsoft Graph API:\n * POST /v1.0/me/sendMail (delegated) or POST /v1.0/users/{id}/sendMail (app)\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\ntype EmailApi = ((\n from: string,\n to: string[] | string,\n subject: string | undefined,\n body: string\n) => ReturnType<typeof sendEmailRequest>) & {\n send: (props: EmailProps) => ReturnType<typeof sendEmailRequest>;\n};\n\nclass HTTPSharePointRequests<\n T extends {\n LISTS: Record<string, unknown>;\n FOLDERS?: Record<string, unknown>;\n }\n> {\n private readonly baseURL: string;\n private readonly instance: AxiosInstance;\n private readonly listItemEntityTypeCache: Map<string, string>;\n /**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31.\n * Migrate to Microsoft Graph API POST /v1.0/me/sendMail\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\n public readonly email: EmailApi;\n\n constructor(baseURL: string, config?: AxiosConfig) {\n this.baseURL = baseURL.endsWith('/') ? baseURL : `${baseURL}/`;\n this.instance = instance(this.baseURL, config);\n this.listItemEntityTypeCache = new Map<string, string>();\n const buildEmailContext = () =>\n this.createContext<'2013'>({\n endpoint: '_api/SP.Utilities.Utility.SendEmail',\n listName: '',\n sharepointVersion: '2013',\n });\n this.email = Object.assign(\n (\n from: string,\n to: string[] | string,\n subject: string | undefined,\n body: string\n ) =>\n sendEmailRequest(buildEmailContext(), {\n From: from,\n To: to,\n Subject: subject,\n Body: body,\n }),\n {\n send: (props: EmailProps) => sendEmailRequest(buildEmailContext(), props),\n }\n );\n }\n\n private createContext<V extends SHAREPOINT_VER = '2013'>({\n endpoint,\n listName,\n sharepointVersion,\n listItemEntityTypeFullName,\n resolveListItemEntityType,\n }: {\n endpoint: string;\n listName: string;\n sharepointVersion: V;\n listItemEntityTypeFullName?: string;\n resolveListItemEntityType?: () => Promise<string>;\n }): RequestContext<V> {\n return {\n instance: this.instance,\n endpoint,\n listName,\n sharepointVersion,\n listItemEntityTypeFullName,\n resolveListItemEntityType,\n };\n }\n\n private async resolveListItemEntityTypeFullName(\n listName: string\n ): Promise<string> {\n const cacheKey = listName;\n const cachedType = this.listItemEntityTypeCache.get(cacheKey);\n if (cachedType) {\n return cachedType;\n }\n\n const response = await this.instance.get(\n `${buildListByTitleEndpoint(listName)}?$select=ListItemEntityTypeFullName`\n );\n\n const entityType =\n response.data?.d?.ListItemEntityTypeFullName ??\n response.data?.ListItemEntityTypeFullName;\n\n if (!entityType || typeof entityType !== 'string') {\n throw new Error(\n `Unable to resolve ListItemEntityTypeFullName for list \"${listName}\".`\n );\n }\n\n this.listItemEntityTypeCache.set(cacheKey, entityType);\n return entityType;\n }\n\n private buildListScope<\n K extends ListKey<T>,\n V extends SHAREPOINT_VER = '2013'\n >(listName: K, version: V) {\n const listNameValue = String(listName);\n const endpoint =\n version === '2013'\n ? `${buildListByTitleEndpoint(listNameValue)}/items`\n : `_vti_bin/ListData.svc/${encodeURIComponent(listNameValue)}`;\n\n let scopedEntityType: string | undefined;\n const resolveListItemEntityType = async () => {\n if (scopedEntityType) {\n return scopedEntityType;\n }\n\n if (version !== '2013') {\n scopedEntityType = `SP.Data.${listNameValue}ListItem`;\n return scopedEntityType;\n }\n\n scopedEntityType = await this.resolveListItemEntityTypeFullName(\n listNameValue\n );\n return scopedEntityType;\n };\n\n const getContext = () =>\n this.createContext<V>({\n endpoint,\n listName: listNameValue,\n sharepointVersion: version,\n listItemEntityTypeFullName: scopedEntityType,\n resolveListItemEntityType,\n });\n\n const removeItem = (id: ItemID) => deleteItem(getContext(), id);\n const removeFile = (props: DeleteFileProps) =>\n deleteLibraryFile(getContext(), props);\n\n return {\n create: (data: ListData<T['LISTS'][K]>) =>\n createListItem<T['LISTS'][K], V>(getContext(), data),\n get: (options?: Options<T['LISTS'][K], V>) =>\n getListItems<T['LISTS'][K], V>(getContext(), options),\n update: (id: ItemID, data: ListData<T['LISTS'][K]>, digest?: string) =>\n updateListItem<T['LISTS'][K], V>(getContext(), id, data, digest),\n delete: removeItem,\n remove: removeItem,\n createFile: (props: CreateFileProps) =>\n createAttachment(getContext(), props),\n uploadFile: (props: UploadFileProps) => uploadFile(getContext(), props),\n deleteFile: removeFile,\n removeFile,\n fields: (options?: Field_Options<T['LISTS'][K], V>) => {\n const fieldsEndpoint = !options?.fieldName\n ? `${buildListByTitleEndpoint(listNameValue)}/fields`\n : `${buildListByTitleEndpoint(\n listNameValue\n )}/fields/getbytitle('${escapeODataStringLiteral(\n String(options.fieldName)\n )}')`;\n return {\n get: (): Promise<SPFieldSchema | SPFieldSchema[] | undefined> =>\n getOnly<SPFieldSchema, V>(this.instance, fieldsEndpoint, options),\n };\n },\n items: {\n create: (data: ListData<T['LISTS'][K]>) =>\n createListItem<T['LISTS'][K], V>(getContext(), data),\n get: (options?: Options<T['LISTS'][K], V>) =>\n getListItems<T['LISTS'][K], V>(getContext(), options),\n update: (id: ItemID, data: ListData<T['LISTS'][K]>, digest?: string) =>\n updateListItem<T['LISTS'][K], V>(getContext(), id, data, digest),\n delete: removeItem,\n remove: removeItem,\n },\n files: {\n attach: (props: CreateFileProps) =>\n createAttachment(getContext(), props),\n upload: (props: UploadFileProps) => uploadFile(getContext(), props),\n delete: removeFile,\n remove: removeFile,\n },\n };\n }\n\n /**\n * @deprecated Use `from(listName, '2010')` instead.\n */\n list<K extends ListKey<T>>(listName: K) {\n return this.from<K, '2010'>(listName, '2010');\n }\n\n public from<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(\n listName: K,\n sharepointVersion?: V\n ) {\n const version = (sharepointVersion ?? '2013') as V;\n return this.buildListScope<K, V>(listName, version);\n }\n\n public field<K extends ListKey<T>, V extends SHAREPOINT_VER = '2013'>(\n listName: K,\n fieldName?: Extract<keyof T['LISTS'][K], string>,\n sharepointVersion?: V\n ): Promise<SPFieldSchema | SPFieldSchema[] | undefined> {\n return this.from<K, V>(listName, sharepointVersion)\n .fields({\n fieldName,\n } as Field_Options<T['LISTS'][K], V>)\n .get();\n }\n\n public lists(options?: Options<Record<string, unknown>, '2013'>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/lists',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getListItems<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n public getDigest() {\n return fetchDigest(this.instance);\n }\n\n public folders(options?: Folder_Options<Record<string, unknown>>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/folders',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getFiles<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n public folder(folderName?: string | string[]) {\n const defaultPath = ['Shared Documents'];\n const segments = folderName\n ? Array.isArray(folderName)\n ? [...defaultPath, ...folderName]\n : [...defaultPath, ...folderName.split('/').filter(Boolean)]\n : defaultPath;\n\n const serverRelativePath = escapeODataStringLiteral(segments.join('/'));\n const baseEndpoint = `_api/web/GetFolderByServerRelativeUrl('${serverRelativePath}')`;\n\n return {\n get: (options?: Folder_Options<Record<string, unknown>>) => {\n const folderType = options?.type ?? 'Files';\n const endpoint = `${baseEndpoint}/${folderType}`;\n const context = this.createContext<'2013'>({\n endpoint,\n listName: '',\n sharepointVersion: '2013',\n });\n\n return getFiles<Record<string, unknown>, '2013'>(context, {\n ...options,\n type: folderType,\n });\n },\n };\n }\n\n public users(options?: Options<Record<string, unknown>, '2013'>) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/web/SiteUserInfoList/items',\n listName: '',\n sharepointVersion: '2013',\n });\n\n return {\n get: () => getListItems<Record<string, unknown>, '2013'>(context, options),\n };\n }\n\n /**\n * @deprecated SP.Utilities.Utility.SendEmail was retired by Microsoft on 2025-10-31.\n * Migrate to Microsoft Graph API POST /v1.0/me/sendMail\n * https://learn.microsoft.com/en-us/graph/api/user-sendmail\n */\n public sendEmail(props: EmailProps) {\n const context = this.createContext<'2013'>({\n endpoint: '_api/SP.Utilities.Utility.SendEmail',\n listName: '',\n sharepointVersion: '2013',\n });\n return sendEmailRequest(context, props);\n }\n\n public readonly user = {\n properties: () => ({\n get: (): Promise<UserProfile> => loadCurrentUserProperties(this.instance),\n }),\n searchSiteUser: (searchValue: string) =>\n fetchSiteUser(this.instance, searchValue),\n searchUser: (input: string, filter?: string, maxSuggestions?: number): Promise<PersonField[]> =>\n typeAhead(this.instance, input, filter, maxSuggestions),\n current: (options?: { expand?: 'Groups' | Array<'Groups'> }) => ({\n get: (): Promise<CurrentUser> =>\n getOnly(this.instance, '_api/web/currentUser', options as Options),\n }),\n currentPermission: () => ({\n get: (): Promise<UserPermision> =>\n resolveCurrentUserPermissions(\n this.createContext<'2013'>({\n endpoint: '_api/web/effectiveBasePermissions',\n listName: '',\n sharepointVersion: '2013',\n })\n ),\n }),\n };\n\n public getCurrentUser() {\n return this.user.current().get();\n }\n\n public currentUserProperties() {\n return this.user.properties().get();\n }\n\n public currentUserPermission() {\n return this.user.currentPermission().get();\n }\n}\n\nexport default HTTPSharePointRequests;\n","import SHAREPOINT_REQUESTS from './root';\n\nimport { CreateAxiosDefaults as AxiosConfig } from 'axios';\n// Load environment variables from .env file\n\nexport default function createBase<\n T extends { LISTS: Record<string, any>; FOLDERS?: Record<string, any> } = any\n>() {\n function create({\n baseURL,\n config,\n }: {\n baseURL: string;\n config?: AxiosConfig;\n }) {\n if (!baseURL) {\n throw new Error('A valid SharePoint URL must be provided.');\n }\n return new SHAREPOINT_REQUESTS<T>(baseURL, config);\n }\n\n return {\n /**\n * @deprecated Use `create` instead.\n */\n baseURL(url: string, config?: AxiosConfig) {\n return create({ baseURL: url, config });\n },\n create,\n };\n}\n\nexport type {\n Metadata,\n SPItem,\n SPItem2010,\n SPItem2013,\n SHAREPOINT_VER,\n Options,\n Folder_Options,\n Field_Options,\n ItemID,\n CreateFileProps,\n UploadFileProps,\n DeleteFileProps,\n EmailProps,\n LookupField,\n ChoiceField,\n ListData,\n PersonField,\n MultiPersonField,\n PermissionLabel,\n UserPermission,\n /** @deprecated Use `UserPermission` instead */\n UserPermision,\n SPGroup,\n SPFieldSchema,\n CurrentUser,\n UserProfilePropKey,\n UserProfile,\n IListName,\n} from './types';\n"],"mappings":"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","names":["instance","targetKey","instance","SUPPORTED_VERSION","instance"]}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.21",
2
+ "version": "0.1.23",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -54,6 +54,7 @@ export type {
54
54
  /** @deprecated Use `UserPermission` instead */
55
55
  UserPermision,
56
56
  SPGroup,
57
+ SPFieldSchema,
57
58
  CurrentUser,
58
59
  UserProfilePropKey,
59
60
  UserProfile,
package/src/root/index.ts CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  Options,
13
13
  PersonField,
14
14
  SHAREPOINT_VER,
15
+ SPFieldSchema,
15
16
  UploadFileProps,
16
17
  UserPermision,
17
18
  UserProfile,
@@ -219,8 +220,8 @@ class HTTPSharePointRequests<
219
220
  String(options.fieldName)
220
221
  )}')`;
221
222
  return {
222
- get: () =>
223
- getOnly<T['LISTS'][K], V>(this.instance, fieldsEndpoint, options),
223
+ get: (): Promise<SPFieldSchema | SPFieldSchema[] | undefined> =>
224
+ getOnly<SPFieldSchema, V>(this.instance, fieldsEndpoint, options),
224
225
  };
225
226
  },
226
227
  items: {
@@ -262,7 +263,7 @@ class HTTPSharePointRequests<
262
263
  listName: K,
263
264
  fieldName?: Extract<keyof T['LISTS'][K], string>,
264
265
  sharepointVersion?: V
265
- ) {
266
+ ): Promise<SPFieldSchema | SPFieldSchema[] | undefined> {
266
267
  return this.from<K, V>(listName, sharepointVersion)
267
268
  .fields({
268
269
  fieldName,
@@ -359,8 +360,8 @@ class HTTPSharePointRequests<
359
360
  }),
360
361
  searchSiteUser: (searchValue: string) =>
361
362
  fetchSiteUser(this.instance, searchValue),
362
- searchUser: (input: string, filter?: string): Promise<PersonField> =>
363
- typeAhead(this.instance, input, filter),
363
+ searchUser: (input: string, filter?: string, maxSuggestions?: number): Promise<PersonField[]> =>
364
+ typeAhead(this.instance, input, filter, maxSuggestions),
364
365
  current: (options?: { expand?: 'Groups' | Array<'Groups'> }) => ({
365
366
  get: (): Promise<CurrentUser> =>
366
367
  getOnly(this.instance, '_api/web/currentUser', options as Options),
@@ -70,6 +70,9 @@ function resolveLookupField(key: string, value: unknown) {
70
70
  }
71
71
 
72
72
  if (Array.isArray(value)) {
73
+ if (value.some(item => typeof item === 'string')) {
74
+ return null;
75
+ }
73
76
  const targetKey = endsWithId ? key : `${key}Id`;
74
77
  return {
75
78
  key: targetKey,
@@ -88,6 +91,9 @@ function resolveLookupField(key: string, value: unknown) {
88
91
  }
89
92
 
90
93
  if (Array.isArray(value.results)) {
94
+ if (value.results.some(item => typeof item === 'string')) {
95
+ return null;
96
+ }
91
97
  const targetKey = endsWithId ? key : `${key}Id`;
92
98
  return {
93
99
  key: targetKey,
@@ -23,34 +23,44 @@ const PERMISSION_PRIORITY: PermissionLabel[] = [
23
23
  'Read',
24
24
  ];
25
25
 
26
+ type PeoplePickerQueryParameters = {
27
+ __metadata: { type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters' };
28
+ AllowEmailAddresses: boolean;
29
+ AllowMultipleEntities: boolean;
30
+ AllUrlZones: boolean;
31
+ MaximumEntitySuggestions: number;
32
+ PrincipalSource: number;
33
+ PrincipalType: number;
34
+ QueryString: string;
35
+ RequiredProperties?: string[];
36
+ };
37
+
26
38
  export async function typeAhead(
27
39
  instance: AxiosInstance,
28
40
  input: string,
29
- filter?: string
30
- ): Promise<PersonField> {
41
+ filter?: string,
42
+ maxSuggestions = 10
43
+ ): Promise<PersonField[]> {
31
44
  const requestUrl = `_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`;
32
45
 
33
- const data = {
34
- queryParams: {
35
- __metadata: {
36
- type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters',
37
- },
38
- AllowEmailAddresses: true,
39
- AllowMultipleEntities: false,
40
- AllUrlZones: false,
41
- MaximumEntitySuggestions: 10,
42
- PrincipalSource: 15,
43
- PrincipalType: 1,
44
- QueryString: input,
46
+ const queryParams: PeoplePickerQueryParameters = {
47
+ __metadata: {
48
+ type: 'SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters',
45
49
  },
50
+ AllowEmailAddresses: true,
51
+ AllowMultipleEntities: false,
52
+ AllUrlZones: false,
53
+ MaximumEntitySuggestions: maxSuggestions,
54
+ PrincipalSource: 15,
55
+ PrincipalType: 1,
56
+ QueryString: input,
46
57
  };
47
58
 
48
59
  if (filter) {
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
- (data.queryParams as any).RequiredProperties = [filter];
60
+ queryParams.RequiredProperties = [filter];
51
61
  }
52
62
 
53
- const response = await instance.post(requestUrl, JSON.stringify(data), {
63
+ const response = await instance.post(requestUrl, JSON.stringify({ queryParams }), {
54
64
  headers: {
55
65
  Accept: 'application/json; odata=verbose',
56
66
  'Content-Type': 'application/json;odata=verbose',
@@ -63,19 +73,11 @@ export async function typeAhead(
63
73
 
64
74
  if (typeof searchResults === 'string') {
65
75
  const parsed = JSON.parse(searchResults);
66
- if (Array.isArray(parsed) && parsed.length > 0) {
67
- return parsed[0] as PersonField;
68
- }
76
+ if (Array.isArray(parsed)) return parsed as PersonField[];
69
77
  throw new Error('People picker returned no results.');
70
78
  }
71
79
 
72
- if (Array.isArray(searchResults) && searchResults.length > 0) {
73
- return searchResults[0] as PersonField;
74
- }
75
-
76
- if (searchResults && typeof searchResults === 'object') {
77
- return searchResults as PersonField;
78
- }
80
+ if (Array.isArray(searchResults)) return searchResults as PersonField[];
79
81
 
80
82
  throw new Error('Invalid people picker response.');
81
83
  }
package/src/types.ts CHANGED
@@ -258,6 +258,33 @@ export type UserPermission = {
258
258
  /** @deprecated Use `UserPermission` instead. */
259
259
  export type UserPermision = UserPermission;
260
260
 
261
+ export type SPFieldSchema = {
262
+ __metadata: Metadata;
263
+ Id: string;
264
+ Title: string;
265
+ InternalName: string;
266
+ StaticName: string;
267
+ EntityPropertyName: string;
268
+ TypeAsString: string;
269
+ FieldTypeKind: number;
270
+ Required: boolean;
271
+ Hidden: boolean;
272
+ ReadOnlyField: boolean;
273
+ DefaultValue: string | null;
274
+ Description: string;
275
+ EnforceUniqueValues: boolean;
276
+ Indexed: boolean;
277
+ /** Present when FieldTypeKind is 6 (Choice) or 15 (MultiChoice) */
278
+ Choices?: { results: string[] };
279
+ FillInChoice?: boolean;
280
+ /** Present when FieldTypeKind is 7 (Lookup) or 20 (LookupMulti) */
281
+ LookupField?: string;
282
+ LookupList?: string;
283
+ LookupWebId?: string;
284
+ AllowMultipleValues?: boolean;
285
+ [key: string]: unknown;
286
+ };
287
+
261
288
  export type SPGroup = {
262
289
  Id: number;
263
290
  Title: string;