UNPKG

@kwiz/common

Version:

KWIZ common utilities and helpers for M365 platform

108 lines 7.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResolveLocationFromBingUri = exports.FindMeetingLocations = void 0; const browser_1 = require("../../helpers/browser"); const typecheckers_1 = require("../../helpers/typecheckers"); const auth_1 = require("../../types/auth"); const rest_types_1 = require("../../types/rest.types"); const common_1 = require("../auth/common"); const rest_1 = require("../rest"); async function _findMeetingLocations(options) { if ((0, typecheckers_1.isNullOrUndefined)(options) || ((0, typecheckers_1.isNullOrEmptyString)(options.bingUri) && (0, typecheckers_1.isNullOrEmptyString)(options.query))) { return null; } let contextReady = await (0, browser_1.waitFor)(() => { return !(0, typecheckers_1.isTypeofFullNameUndefined)("_spPageContextInfo"); }); if (!contextReady) { return null; } let authToken = await (0, common_1.GetSPFxClientAuthToken)(_spPageContextInfo.webServerRelativeUrl, auth_1.SPFxAuthTokenType.Outlook); if ((0, typecheckers_1.isNullOrEmptyString)(authToken)) { return null; } const { query, bingUri } = options; let useBingUri = !(0, typecheckers_1.isNullOrEmptyString)(bingUri); let queryData = { QueryConstraint: { Query: useBingUri === true ? "" : query, Id: useBingUri === true ? bingUri : undefined, ResolveAvailability: useBingUri === true ? false : undefined }, LocationProvider: useBingUri ? 8 : 32, BingMarket: _spPageContextInfo.currentCultureName }; let url = "https://outlook.office365.com/SchedulingB2/api/v1.0/me/findmeetinglocations"; let result = await (0, rest_1.GetJson)(url, JSON.stringify(queryData), { ...rest_1.shortLocalCache, postCacheKey: `${queryData.BingMarket}|${queryData.LocationProvider}|${useBingUri ? queryData.QueryConstraint.Id : queryData.QueryConstraint.Query}`, includeDigestInPost: false, headers: { "Accept": rest_types_1.jsonTypes.verbose, "Authorization": `Bearer ${authToken}`, "content-type": rest_types_1.jsonTypes.verbose, "x-anchormailbox": _spPageContextInfo.userEmail.toLowerCase(), "x-findmeetinglocations-appname": "sharepoint", "x-findmeetinglocations-appscenario": "locationfield", } }); if (!(0, typecheckers_1.isNullOrUndefined)(result) && !(0, typecheckers_1.isNullOrEmptyArray)(result.MeetingLocations)) { let value = result.MeetingLocations.map((loc) => { return loc.MeetingLocation; }); return value; } return null; } /** * Get meeting locations using outlook.office365.com/SchedulingB2/api/v1.0/me/findmeetinglocations * @param query The term to search for * @returns An array of meeting locations (https://learn.microsoft.com/en-us/graph/api/resources/location?view=graph-rest-1.0) sorted by relevance score */ async function FindMeetingLocations(query) { let results = await _findMeetingLocations({ query: query, bingUri: null }); return !(0, typecheckers_1.isNullOrEmptyArray)(results) ? results : null; } exports.FindMeetingLocations = FindMeetingLocations; /** * Resolve meeting locations using outlook.office365.com/SchedulingB2/api/v1.0/me/findmeetinglocations * @param bingUri The LocationUri for the meeting location * @returns A single meeting location */ async function ResolveLocationFromBingUri(bingUri) { let results = await _findMeetingLocations({ query: null, bingUri: bingUri }); return !(0, typecheckers_1.isNullOrEmptyArray)(results) ? results[0] : null; } exports.ResolveLocationFromBingUri = ResolveLocationFromBingUri; //example response //{ // "MeetingLocations": // [{ // "MeetingLocation": // { // "EntityType": "LocalBusiness", // "LocationSource": "Bing", // "LocationUri": // "https://www.bingapis.com/api/v6/localbusinesses/YN1226x25906078?setLang=en-CA", // "UniqueId": "https://www.bingapis.com/api/v6/localbusinesses/YN1226x25906078?setLang=en-CA", // "IsPreviouslyUsed": false, "DisplayName": "The Home Depot", // "Address": { // "Street": "99 Cross Ave", // "City": "Oakville", "State": "ON", "CountryOrRegion": "Canada", "PostalCode": "L6J 2W7" // }, "Coordinates": { "Latitude": 43.4548, "Longitude": -79.6886 } // }, // "LocationType": "LocalBusiness", // "RelevanceScore": -20.0, // "RelevanceHint": "NonHistory" // }, // { // "MeetingLocation": // { // "EntityType": "LocalBusiness", "LocationSource": "Bing", // "LocationUri": "https://www.bingapis.com/api/v6/localbusinesses/YN1226x262267234?setLang=en-CA", // "UniqueId": "https://www.bingapis.com/api/v6/localbusinesses/YN1226x262267234?setLang=en-CA", "IsPreviouslyUsed": false, "DisplayName": "The Home Depot", "Address": { "Street": "3300 South Service Rd W", "City": "Oakville", "State": "ON", "CountryOrRegion": "Canada", "PostalCode": "L6L 0B1" }, "Coordinates": { "Latitude": 43.3994, "Longitude": -79.7496 } // }, "LocationType": "LocalBusiness", "RelevanceScore": -20.0, "RelevanceHint": "NonHistory" // }, { "MeetingLocation": { "EntityType": "LocalBusiness", "LocationSource": "Bing", "LocationUri": "https://www.bingapis.com/api/v6/localbusinesses/YN1227x25906192?setLang=en-CA", "UniqueId": "https://www.bingapis.com/api/v6/localbusinesses/YN1227x25906192?setLang=en-CA", "IsPreviouslyUsed": false, "DisplayName": "The Home Depot", "Address": { "Street": "3050 Davidson Crt", "City": "Burlington", "State": "ON", "CountryOrRegion": "Canada", "PostalCode": "L7M 4M9" }, "Coordinates": { "Latitude": 43.3557, "Longitude": -79.8067 } }, "LocationType": "LocalBusiness", "RelevanceScore": -20.0, "RelevanceHint": "NonHistory" }, { "MeetingLocation": { "EntityType": "LocalBusiness", "LocationSource": "Bing", "LocationUri": "https://www.bingapis.com/api/v6/localbusinesses/YN1226x15474422097876230312?setLang=en-CA", "UniqueId": "https://www.bingapis.com/api/v6/localbusinesses/YN1226x15474422097876230312?setLang=en-CA", "IsPreviouslyUsed": false, "DisplayName": "The Home Depot", "Address": { "Street": "2555 Bristol Circle", "City": "Oakville", "State": "ON", "CountryOrRegion": "Canada", "PostalCode": "L6H 5W9" }, "Coordinates": { "Latitude": 43.518, "Longitude": -79.6847 } }, "LocationType": "LocalBusiness", "RelevanceScore": -20.0, "RelevanceHint": "NonHistory" }, { "MeetingLocation": { "EntityType": "LocalBusiness", "LocationSource": "Bing", "LocationUri": "https://www.bingapis.com/api/v6/localbusinesses/YN1228x262604067?setLang=en-CA", "UniqueId": "https://www.bingapis.com/api/v6/localbusinesses/YN1228x262604067?setLang=en-CA", "IsPreviouslyUsed": false, "DisplayName": "The Home Depot", "Address": { "Street": "350 Centennial Pky N", "City": "Hamilton", "State": "ON", "CountryOrRegion": "Canada", "PostalCode": "L8E 2X4" }, "Coordinates": { "Latitude": 43.2402, "Longitude": -79.7575 } }, "LocationType": "LocalBusiness", "RelevanceScore": -20.0, "RelevanceHint": "NonHistory" }], // "EmptyLocationsHint": "" // } //# sourceMappingURL=location.js.map