New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@gomeddo/sdk

Package Overview
Dependencies
Maintainers
2
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@gomeddo/sdk - npm Package Compare versions

Comparing version 0.0.6 to 0.0.7

dist/cjs/dimension-record-request.d.ts

6

dist/cjs/api/gomeddo-api-requests.d.ts
import { Environment } from '../index';
import { SFResource } from '../s-objects/resource';
import { APIConditionElement } from './request-bodies/api-condition';

@@ -12,2 +11,5 @@ import AvailabilityTimeSlotResponse from './availability-reponse';

import ReservationCollection from './request-bodies/reservation-collection';
import FindAvailableIdsRequest from '../find-available-ids-request';
import { CustomSFSObject } from '../s-objects/s-object';
import { SFResource } from '../s-objects/resource';
export default class GoMeddoAPI {

@@ -18,2 +20,3 @@ private readonly baseUrl;

searchResources(parentIds: string[], parentNames: string[], apiCondition: APIConditionElement | undefined, fields: Set<string>): Promise<SFResource[]>;
searchDimensionRecords(parentIds: string[], parentNames: string[], apiCondition: APIConditionElement | undefined, fields: Set<string>, dimension: string): Promise<CustomSFSObject[]>;
searchReservations(reservationIds: Set<string>, rangeStart: Date | null, rangeEnd: Date | null, apiCondition: APIConditionElement | undefined, fields: Set<string>): Promise<SFReservation[]>;

@@ -26,2 +29,3 @@ saveReservation(saveRequest: ReservationSaveRequest): Promise<object>;

getServiceAvailability(requestBody: ServiceTimeSlotRequest): Promise<ServiceTimeSlotResponse[]>;
findAvailableDimensionIds(requestBody: FindAvailableIdsRequest): Promise<string[]>;
private getHeaders;

@@ -28,0 +32,0 @@ private addFieldsToUrl;

@@ -37,5 +37,10 @@ "use strict";

return __awaiter(this, void 0, void 0, function* () {
return yield this.searchDimensionRecords(parentIds, parentNames, apiCondition, fields, 'B25__Resource__c');
});
}
searchDimensionRecords(parentIds, parentNames, apiCondition, fields, dimension) {
return __awaiter(this, void 0, void 0, function* () {
const url = new URL('B25/v1/dimensionRecords/search', this.baseUrl);
this.addFieldsToUrl(url, fields);
const dimensionSearchBody = new dimension_search_body_1.default('B25__Resource__c', parentIds, parentNames, apiCondition, true);
const dimensionSearchBody = new dimension_search_body_1.default(dimension, parentIds, parentNames, apiCondition, true);
const response = yield fetch(url.href, {

@@ -135,2 +140,15 @@ method: 'POST',

}
findAvailableDimensionIds(requestBody) {
return __awaiter(this, void 0, void 0, function* () {
const url = new URL('B25/v1/findAvailableDimensionIds', this.baseUrl);
const response = yield fetch(url.href, {
method: 'POST',
body: JSON.stringify(requestBody),
headers: this.getHeaders()
});
yield this.checkResponse(response);
const data = yield response.json();
return data;
});
}
getHeaders() {

@@ -137,0 +155,0 @@ return {

@@ -16,2 +16,4 @@ import ResourceRequest from './resource-request';

import { Condition, AndCondition, OrCondition, Operator } from './filters/conditions';
import DimensionRecordRequest from './dimension-record-request';
import TimeSlotConfiguration from './utils/time-slot-configuration';
declare enum Environment {

@@ -42,2 +44,8 @@ DEVELOP = 0,

/**
* Creates a new request for resources. The request can then be specified using methods on the resource request.
*
* @returns new resource request using the authentication from this GoMeddo instance
*/
buildDimensionRecordRequest(dimensionName: string): DimensionRecordRequest;
/**
* Creates a new request for reservations. The request can then be specified using methods on the reservation request.

@@ -91,3 +99,3 @@ *

}
export { Environment, ResourceRequest, ReservationRequest, ResourceResult, ReservationResult, SObject, Reservation, Resource, Contact, Lead, Service, ServiceReservation, TimeSlot, AvailabilitySlotType, AvailabilityTimeSlot, ServiceTimeSlot, Condition, AndCondition, OrCondition, Operator };
export { Environment, ResourceRequest, DimensionRecordRequest, ReservationRequest, ResourceResult, ReservationResult, SObject, Reservation, Resource, Contact, Lead, Service, ServiceReservation, TimeSlot, AvailabilitySlotType, AvailabilityTimeSlot, ServiceTimeSlot, Condition, AndCondition, OrCondition, Operator, TimeSlotConfiguration };
export default GoMeddo;

@@ -12,3 +12,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.Operator = exports.OrCondition = exports.AndCondition = exports.Condition = exports.ServiceTimeSlot = exports.AvailabilityTimeSlot = exports.AvailabilitySlotType = exports.TimeSlot = exports.ServiceReservation = exports.Service = exports.Lead = exports.Contact = exports.Resource = exports.Reservation = exports.SObject = exports.ReservationResult = exports.ResourceResult = exports.ReservationRequest = exports.ResourceRequest = exports.Environment = void 0;
exports.TimeSlotConfiguration = exports.Operator = exports.OrCondition = exports.AndCondition = exports.Condition = exports.ServiceTimeSlot = exports.AvailabilityTimeSlot = exports.AvailabilitySlotType = exports.TimeSlot = exports.ServiceReservation = exports.Service = exports.Lead = exports.Contact = exports.Resource = exports.Reservation = exports.SObject = exports.ReservationResult = exports.ResourceResult = exports.ReservationRequest = exports.DimensionRecordRequest = exports.ResourceRequest = exports.Environment = void 0;
const gomeddo_api_requests_1 = require("./api/gomeddo-api-requests");

@@ -49,2 +49,6 @@ const resource_request_1 = require("./resource-request");

Object.defineProperty(exports, "Operator", { enumerable: true, get: function () { return conditions_1.Operator; } });
const dimension_record_request_1 = require("./dimension-record-request");
exports.DimensionRecordRequest = dimension_record_request_1.default;
const time_slot_configuration_1 = require("./utils/time-slot-configuration");
exports.TimeSlotConfiguration = time_slot_configuration_1.default;
var Environment;

@@ -79,2 +83,10 @@ (function (Environment) {

/**
* Creates a new request for resources. The request can then be specified using methods on the resource request.
*
* @returns new resource request using the authentication from this GoMeddo instance
*/
buildDimensionRecordRequest(dimensionName) {
return new dimension_record_request_1.default(this.api, dimensionName);
}
/**
* Creates a new request for reservations. The request can then be specified using methods on the reservation request.

@@ -81,0 +93,0 @@ *

44

dist/cjs/resource-request.d.ts

@@ -0,4 +1,4 @@

import ResourceResult from './resource-result';
import DimensionRecordRequest from './dimension-record-request';
import GoMeddoAPI from './api/gomeddo-api-requests';
import ResourceResult from './resource-result';
import { ConditionElement } from './filters/conditions';
/**

@@ -8,11 +8,5 @@ * Resource request by default will request all resources in an org.

*/
export default class ResourceRequest {
private readonly api;
private readonly standardFields;
private readonly additionalFields;
export default class ResourceRequest extends DimensionRecordRequest {
private readonly parents;
private readonly types;
private condition;
private startOfRange;
private endOfRange;
private fetchServices;

@@ -36,33 +30,2 @@ constructor(api: GoMeddoAPI);

/**
* Filter the resources on field values using conditions.
*
* @param conditions The conditions to filter on. Multiple conditions wil be combined using AND.
* @returns The updated resource request.
*/
withCondition(...conditions: ConditionElement[]): ResourceRequest;
/**
* Request an additional field to be returned for the resources
*
* @param fieldName The api name of the field to request
* @returns The updated resource request.
*/
includeAdditionalField(fieldName: string): ResourceRequest;
/**
* Request additional fields to be returned for the resources
*
* @param fieldName The api names of the fields to request
* @returns The updated resource request.
*/
includeAdditionalFields(fieldNames: Set<string> | string[]): ResourceRequest;
/**
* Request on resources that are not fully booked between the two datetime.
* The input datetimes are interpeted in GMT
* When this is requested timeslots for the requested range are provided for each resource.
*
* @param startOfRange The start of the timeslot range
* @param endOfRange The end of the timeslot range
* @returns The updated resource request.
*/
withAvailableSlotsBetween(startOfRange: Date, endOfRange: Date): ResourceRequest;
/**
* Also fetch the services including slot for when the services are available

@@ -82,3 +45,2 @@ * Only valid if withAvailableSlotsBetween has also been called.

private getStartingResourceScope;
private getRequestedFields;
}

@@ -17,2 +17,4 @@ "use strict";

const salesforce_utils_1 = require("./utils/salesforce-utils");
const find_available_ids_request_1 = require("./find-available-ids-request");
const dimension_record_request_1 = require("./dimension-record-request");
/**

@@ -22,14 +24,11 @@ * Resource request by default will request all resources in an org.

*/
class ResourceRequest {
class ResourceRequest extends dimension_record_request_1.default {
constructor(api) {
super(api, 'B25__Resource__c');
this.parents = new Set();
this.types = new Set();
this.fetchServices = false;
this.standardFields = new Set([
'Id', 'Name', 'B25__Resource_Type__c', 'B25__Parent__c'
]);
this.additionalFields = new Set();
this.parents = new Set();
this.types = new Set();
this.startOfRange = null;
this.endOfRange = null;
this.fetchServices = false;
this.api = api;
}

@@ -58,54 +57,2 @@ /**

/**
* Filter the resources on field values using conditions.
*
* @param conditions The conditions to filter on. Multiple conditions wil be combined using AND.
* @returns The updated resource request.
*/
withCondition(...conditions) {
if (this.condition === undefined) {
this.condition = new conditions_1.OrCondition([]);
}
if (conditions.length === 1) {
this.condition.conditions.push(conditions[0]);
}
else {
this.condition.conditions.push(new conditions_1.AndCondition(conditions));
}
return this;
}
/**
* Request an additional field to be returned for the resources
*
* @param fieldName The api name of the field to request
* @returns The updated resource request.
*/
includeAdditionalField(fieldName) {
this.additionalFields.add(fieldName);
return this;
}
/**
* Request additional fields to be returned for the resources
*
* @param fieldName The api names of the fields to request
* @returns The updated resource request.
*/
includeAdditionalFields(fieldNames) {
fieldNames.forEach(fieldName => this.includeAdditionalField(fieldName));
return this;
}
/**
* Request on resources that are not fully booked between the two datetime.
* The input datetimes are interpeted in GMT
* When this is requested timeslots for the requested range are provided for each resource.
*
* @param startOfRange The start of the timeslot range
* @param endOfRange The end of the timeslot range
* @returns The updated resource request.
*/
withAvailableSlotsBetween(startOfRange, endOfRange) {
this.startOfRange = startOfRange;
this.endOfRange = endOfRange;
return this;
}
/**
* Also fetch the services including slot for when the services are available

@@ -130,2 +77,8 @@ * Only valid if withAvailableSlotsBetween has also been called.

const resourceResult = new resource_result_1.default(resources);
if (this.reservation !== null) {
const resourceIds = resourceResult.getResourceIds();
const dimension = new find_available_ids_request_1.default('B25__Resource__c', resourceIds, null, this.reservation.getSFSObject());
const availableDimensionIds = yield this.api.findAvailableDimensionIds(dimension);
resourceResult.filterResourcesById(availableDimensionIds);
}
if (this.startOfRange !== null && this.endOfRange !== null) {

@@ -149,16 +102,16 @@ const availabilityData = yield this.api.getAvailability(new availability_request_1.default(this.startOfRange, this.endOfRange, resourceResult.getResourceIds()));

}
let condition = this.condition;
let condition = new conditions_1.AndCondition([]);
if (this.types.size !== 0) {
condition = new conditions_1.AndCondition([...this.types].map(type => new conditions_1.Condition('B25__Resource_Type__r.Name', conditions_1.Operator.EQUAL, type)));
if (this.condition !== undefined) {
condition.conditions.push(this.condition);
}
condition.conditions.push(new conditions_1.OrCondition([...this.types].map(type => new conditions_1.Condition('B25__Resource_Type__r.Name', conditions_1.Operator.EQUAL, type))));
}
return yield this.api.searchResources(parentIds, parentNames, condition === null || condition === void 0 ? void 0 : condition.getAPICondition(), this.getRequestedFields());
if (this.condition !== undefined) {
condition.conditions.push(this.condition);
}
if (condition.conditions.length === 0) {
condition = undefined;
}
return (yield this.api.searchDimensionRecords(parentIds, parentNames, condition === null || condition === void 0 ? void 0 : condition.getAPICondition(), this.getRequestedFields(), 'B25__Resource__c'));
});
}
getRequestedFields() {
return new Set([...this.standardFields, ...this.additionalFields]);
}
}
exports.default = ResourceRequest;
import AvailabilityTimeSlotResponse from './api/availability-reponse';
import ServiceTimeSlotResponse from './api/service-availability-response';
import DimensionRecordResult from './dimension-record-result';
import Resource, { SFResource } from './s-objects/resource';

@@ -7,7 +8,7 @@ /**

*/
export default class ResourceResult {
export default class ResourceResult extends DimensionRecordResult {
private readonly resourcesById;
constructor(sfResourceData: SFResource[]);
computeTreeStructure(): ResourceResult;
addAvailabilitySlotData(dimensionsSlotData: AvailabilityTimeSlotResponse[]): void;
addAvailabilitySlotData(resourceSlotData: AvailabilityTimeSlotResponse[]): void;
addServiceSlotData(dimensionsServiceSlotData: ServiceTimeSlotResponse[]): void;

@@ -27,2 +28,9 @@ /**

getResource(idOrName: string): Resource | undefined;
/**
* Filters the resources in the `resourcesById` map based on the allowed ids.
* @internal
* @param resourceIds The ids of the resources that are allowed to remain in the map.
* @returns void
*/
filterResourcesById(resourceIds: string[]): void;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const dimension_record_result_1 = require("./dimension-record-result");
const resource_1 = require("./s-objects/resource");

@@ -8,4 +9,5 @@ const salesforce_utils_1 = require("./utils/salesforce-utils");

*/
class ResourceResult {
class ResourceResult extends dimension_record_result_1.default {
constructor(sfResourceData) {
super(sfResourceData);
// Map all resources to their ids

@@ -33,4 +35,4 @@ this.resourcesById = sfResourceData.reduce((map, sfResourceData) => {

}
addAvailabilitySlotData(dimensionsSlotData) {
dimensionsSlotData.forEach((slotData) => {
addAvailabilitySlotData(resourceSlotData) {
resourceSlotData.forEach((slotData) => {
const matchingResource = this.resourcesById.get(slotData.dimensionId);

@@ -77,3 +79,16 @@ if (matchingResource === undefined) {

}
/**
* Filters the resources in the `resourcesById` map based on the allowed ids.
* @internal
* @param resourceIds The ids of the resources that are allowed to remain in the map.
* @returns void
*/
filterResourcesById(resourceIds) {
this.resourcesById.forEach((resource, id) => {
if (!resourceIds.includes(id)) {
this.resourcesById.delete(id);
}
});
}
}
exports.default = ResourceResult;

@@ -1,11 +0,9 @@

import AvailabilityTimeSlotResponse from '../api/availability-reponse';
import SObject, { CustomSFSObject } from './s-object';
import { AvailabilityTimeSlot } from '../time-slots/availability-time-slot';
import { CustomSFSObject } from './s-object';
import Service from './service';
import ServiceTimeSlotResponse from '../api/service-availability-response';
import DimensionRecord from '../dimension-record';
/**
* A Resource
*/
export default class Resource extends SObject {
name: string;
export default class Resource extends DimensionRecord {
parentId: string | null;

@@ -15,11 +13,5 @@ parent: Resource | null;

services: Map<string, Service>;
private timeSlots;
constructor(parsedResource: SFResource);
/**
* @internal
* Adds availability slot data for this resource to the resource.
*/
addAvailabilitySlotData(slotData: AvailabilityTimeSlotResponse): void;
/**
* @internal
* Adds service availability slot data for this resource to the resource.

@@ -34,7 +26,2 @@ */

/**
* Gets the timeslots for this resource. Only available if withAvailableSlotsBetween was called.
* @return The timeslots for this resource.
*/
getTimeSlots(): AvailabilityTimeSlot[];
/**
* Gets the available service for this resource. Only available if withAvailableSlotsBetween, and includeServices were called.

@@ -41,0 +28,0 @@ * @return The available services for this resource.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const s_object_1 = require("./s-object");
const availability_time_slot_1 = require("../time-slots/availability-time-slot");
const salesforce_utils_1 = require("../utils/salesforce-utils");
const dimension_record_1 = require("../dimension-record");
/**
* A Resource
*/
class Resource extends s_object_1.default {
class Resource extends dimension_record_1.default {
constructor(parsedResource) {

@@ -16,3 +16,2 @@ var _a;

this.services = new Map();
this.timeSlots = [];
this.name = parsedResource.Name;

@@ -23,9 +22,2 @@ this.parentId = (_a = parsedResource.B25__Parent__c) !== null && _a !== void 0 ? _a : null;

* @internal
* Adds availability slot data for this resource to the resource.
*/
addAvailabilitySlotData(slotData) {
this.timeSlots = slotData.timeSlots;
}
/**
* @internal
* Adds service availability slot data for this resource to the resource.

@@ -44,9 +36,2 @@ */

/**
* Gets the timeslots for this resource. Only available if withAvailableSlotsBetween was called.
* @return The timeslots for this resource.
*/
getTimeSlots() {
return this.timeSlots;
}
/**
* Gets the available service for this resource. Only available if withAvailableSlotsBetween, and includeServices were called.

@@ -53,0 +38,0 @@ * @return The available services for this resource.

import { Environment } from '../index';
import { SFResource } from '../s-objects/resource';
import { APIConditionElement } from './request-bodies/api-condition';

@@ -12,2 +11,5 @@ import AvailabilityTimeSlotResponse from './availability-reponse';

import ReservationCollection from './request-bodies/reservation-collection';
import FindAvailableIdsRequest from '../find-available-ids-request';
import { CustomSFSObject } from '../s-objects/s-object';
import { SFResource } from '../s-objects/resource';
export default class GoMeddoAPI {

@@ -18,2 +20,3 @@ private readonly baseUrl;

searchResources(parentIds: string[], parentNames: string[], apiCondition: APIConditionElement | undefined, fields: Set<string>): Promise<SFResource[]>;
searchDimensionRecords(parentIds: string[], parentNames: string[], apiCondition: APIConditionElement | undefined, fields: Set<string>, dimension: string): Promise<CustomSFSObject[]>;
searchReservations(reservationIds: Set<string>, rangeStart: Date | null, rangeEnd: Date | null, apiCondition: APIConditionElement | undefined, fields: Set<string>): Promise<SFReservation[]>;

@@ -26,2 +29,3 @@ saveReservation(saveRequest: ReservationSaveRequest): Promise<object>;

getServiceAvailability(requestBody: ServiceTimeSlotRequest): Promise<ServiceTimeSlotResponse[]>;
findAvailableDimensionIds(requestBody: FindAvailableIdsRequest): Promise<string[]>;
private getHeaders;

@@ -28,0 +32,0 @@ private addFieldsToUrl;

@@ -25,5 +25,8 @@ import { Environment } from '../index';

async searchResources(parentIds, parentNames, apiCondition, fields) {
return await this.searchDimensionRecords(parentIds, parentNames, apiCondition, fields, 'B25__Resource__c');
}
async searchDimensionRecords(parentIds, parentNames, apiCondition, fields, dimension) {
const url = new URL('B25/v1/dimensionRecords/search', this.baseUrl);
this.addFieldsToUrl(url, fields);
const dimensionSearchBody = new DimensionSearchBody('B25__Resource__c', parentIds, parentNames, apiCondition, true);
const dimensionSearchBody = new DimensionSearchBody(dimension, parentIds, parentNames, apiCondition, true);
const response = await fetch(url.href, {

@@ -108,2 +111,13 @@ method: 'POST',

}
async findAvailableDimensionIds(requestBody) {
const url = new URL('B25/v1/findAvailableDimensionIds', this.baseUrl);
const response = await fetch(url.href, {
method: 'POST',
body: JSON.stringify(requestBody),
headers: this.getHeaders()
});
await this.checkResponse(response);
const data = await response.json();
return data;
}
getHeaders() {

@@ -110,0 +124,0 @@ return {

@@ -16,2 +16,4 @@ import ResourceRequest from './resource-request';

import { Condition, AndCondition, OrCondition, Operator } from './filters/conditions';
import DimensionRecordRequest from './dimension-record-request';
import TimeSlotConfiguration from './utils/time-slot-configuration';
declare enum Environment {

@@ -42,2 +44,8 @@ DEVELOP = 0,

/**
* Creates a new request for resources. The request can then be specified using methods on the resource request.
*
* @returns new resource request using the authentication from this GoMeddo instance
*/
buildDimensionRecordRequest(dimensionName: string): DimensionRecordRequest;
/**
* Creates a new request for reservations. The request can then be specified using methods on the reservation request.

@@ -91,3 +99,3 @@ *

}
export { Environment, ResourceRequest, ReservationRequest, ResourceResult, ReservationResult, SObject, Reservation, Resource, Contact, Lead, Service, ServiceReservation, TimeSlot, AvailabilitySlotType, AvailabilityTimeSlot, ServiceTimeSlot, Condition, AndCondition, OrCondition, Operator };
export { Environment, ResourceRequest, DimensionRecordRequest, ReservationRequest, ResourceResult, ReservationResult, SObject, Reservation, Resource, Contact, Lead, Service, ServiceReservation, TimeSlot, AvailabilitySlotType, AvailabilityTimeSlot, ServiceTimeSlot, Condition, AndCondition, OrCondition, Operator, TimeSlotConfiguration };
export default GoMeddo;

@@ -17,2 +17,4 @@ import GoMeddoAPI from './api/gomeddo-api-requests';

import { Condition, AndCondition, OrCondition, Operator } from './filters/conditions';
import DimensionRecordRequest from './dimension-record-request';
import TimeSlotConfiguration from './utils/time-slot-configuration';
var Environment;

@@ -46,2 +48,10 @@ (function (Environment) {

/**
* Creates a new request for resources. The request can then be specified using methods on the resource request.
*
* @returns new resource request using the authentication from this GoMeddo instance
*/
buildDimensionRecordRequest(dimensionName) {
return new DimensionRecordRequest(this.api, dimensionName);
}
/**
* Creates a new request for reservations. The request can then be specified using methods on the reservation request.

@@ -185,3 +195,3 @@ *

GoMeddo.version = '0.0.5';
export { Environment, ResourceRequest, ReservationRequest, ResourceResult, ReservationResult, SObject, Reservation, Resource, Contact, Lead, Service, ServiceReservation, TimeSlot, AvailabilitySlotType, AvailabilityTimeSlot, ServiceTimeSlot, Condition, AndCondition, OrCondition, Operator };
export { Environment, ResourceRequest, DimensionRecordRequest, ReservationRequest, ResourceResult, ReservationResult, SObject, Reservation, Resource, Contact, Lead, Service, ServiceReservation, TimeSlot, AvailabilitySlotType, AvailabilityTimeSlot, ServiceTimeSlot, Condition, AndCondition, OrCondition, Operator, TimeSlotConfiguration };
export default GoMeddo;

@@ -0,4 +1,4 @@

import ResourceResult from './resource-result';
import DimensionRecordRequest from './dimension-record-request';
import GoMeddoAPI from './api/gomeddo-api-requests';
import ResourceResult from './resource-result';
import { ConditionElement } from './filters/conditions';
/**

@@ -8,11 +8,5 @@ * Resource request by default will request all resources in an org.

*/
export default class ResourceRequest {
private readonly api;
private readonly standardFields;
private readonly additionalFields;
export default class ResourceRequest extends DimensionRecordRequest {
private readonly parents;
private readonly types;
private condition;
private startOfRange;
private endOfRange;
private fetchServices;

@@ -36,33 +30,2 @@ constructor(api: GoMeddoAPI);

/**
* Filter the resources on field values using conditions.
*
* @param conditions The conditions to filter on. Multiple conditions wil be combined using AND.
* @returns The updated resource request.
*/
withCondition(...conditions: ConditionElement[]): ResourceRequest;
/**
* Request an additional field to be returned for the resources
*
* @param fieldName The api name of the field to request
* @returns The updated resource request.
*/
includeAdditionalField(fieldName: string): ResourceRequest;
/**
* Request additional fields to be returned for the resources
*
* @param fieldName The api names of the fields to request
* @returns The updated resource request.
*/
includeAdditionalFields(fieldNames: Set<string> | string[]): ResourceRequest;
/**
* Request on resources that are not fully booked between the two datetime.
* The input datetimes are interpeted in GMT
* When this is requested timeslots for the requested range are provided for each resource.
*
* @param startOfRange The start of the timeslot range
* @param endOfRange The end of the timeslot range
* @returns The updated resource request.
*/
withAvailableSlotsBetween(startOfRange: Date, endOfRange: Date): ResourceRequest;
/**
* Also fetch the services including slot for when the services are available

@@ -82,3 +45,2 @@ * Only valid if withAvailableSlotsBetween has also been called.

private getStartingResourceScope;
private getRequestedFields;
}
import AvailabilityTimeSlotRequest from './api/request-bodies/availability-request';
import ServiceTimeSlotRequest from './api/request-bodies/service-availability-request';
import ResourceResult from './resource-result';
import { AndCondition, OrCondition, Condition, Operator } from './filters/conditions';
import { AndCondition, Condition, Operator, OrCondition } from './filters/conditions';
import { isSalesforceId } from './utils/salesforce-utils';
import FindAvailableIdsRequest from './find-available-ids-request';
import DimensionRecordRequest from './dimension-record-request';
/**

@@ -10,14 +12,11 @@ * Resource request by default will request all resources in an org.

*/
export default class ResourceRequest {
export default class ResourceRequest extends DimensionRecordRequest {
constructor(api) {
super(api, 'B25__Resource__c');
this.parents = new Set();
this.types = new Set();
this.fetchServices = false;
this.standardFields = new Set([
'Id', 'Name', 'B25__Resource_Type__c', 'B25__Parent__c'
]);
this.additionalFields = new Set();
this.parents = new Set();
this.types = new Set();
this.startOfRange = null;
this.endOfRange = null;
this.fetchServices = false;
this.api = api;
}

@@ -46,54 +45,2 @@ /**

/**
* Filter the resources on field values using conditions.
*
* @param conditions The conditions to filter on. Multiple conditions wil be combined using AND.
* @returns The updated resource request.
*/
withCondition(...conditions) {
if (this.condition === undefined) {
this.condition = new OrCondition([]);
}
if (conditions.length === 1) {
this.condition.conditions.push(conditions[0]);
}
else {
this.condition.conditions.push(new AndCondition(conditions));
}
return this;
}
/**
* Request an additional field to be returned for the resources
*
* @param fieldName The api name of the field to request
* @returns The updated resource request.
*/
includeAdditionalField(fieldName) {
this.additionalFields.add(fieldName);
return this;
}
/**
* Request additional fields to be returned for the resources
*
* @param fieldName The api names of the fields to request
* @returns The updated resource request.
*/
includeAdditionalFields(fieldNames) {
fieldNames.forEach(fieldName => this.includeAdditionalField(fieldName));
return this;
}
/**
* Request on resources that are not fully booked between the two datetime.
* The input datetimes are interpeted in GMT
* When this is requested timeslots for the requested range are provided for each resource.
*
* @param startOfRange The start of the timeslot range
* @param endOfRange The end of the timeslot range
* @returns The updated resource request.
*/
withAvailableSlotsBetween(startOfRange, endOfRange) {
this.startOfRange = startOfRange;
this.endOfRange = endOfRange;
return this;
}
/**
* Also fetch the services including slot for when the services are available

@@ -117,2 +64,8 @@ * Only valid if withAvailableSlotsBetween has also been called.

const resourceResult = new ResourceResult(resources);
if (this.reservation !== null) {
const resourceIds = resourceResult.getResourceIds();
const dimension = new FindAvailableIdsRequest('B25__Resource__c', resourceIds, null, this.reservation.getSFSObject());
const availableDimensionIds = await this.api.findAvailableDimensionIds(dimension);
resourceResult.filterResourcesById(availableDimensionIds);
}
if (this.startOfRange !== null && this.endOfRange !== null) {

@@ -134,14 +87,14 @@ const availabilityData = await this.api.getAvailability(new AvailabilityTimeSlotRequest(this.startOfRange, this.endOfRange, resourceResult.getResourceIds()));

}
let condition = this.condition;
let condition = new AndCondition([]);
if (this.types.size !== 0) {
condition = new AndCondition([...this.types].map(type => new Condition('B25__Resource_Type__r.Name', Operator.EQUAL, type)));
if (this.condition !== undefined) {
condition.conditions.push(this.condition);
}
condition.conditions.push(new OrCondition([...this.types].map(type => new Condition('B25__Resource_Type__r.Name', Operator.EQUAL, type))));
}
return await this.api.searchResources(parentIds, parentNames, condition === null || condition === void 0 ? void 0 : condition.getAPICondition(), this.getRequestedFields());
if (this.condition !== undefined) {
condition.conditions.push(this.condition);
}
if (condition.conditions.length === 0) {
condition = undefined;
}
return (await this.api.searchDimensionRecords(parentIds, parentNames, condition === null || condition === void 0 ? void 0 : condition.getAPICondition(), this.getRequestedFields(), 'B25__Resource__c'));
}
getRequestedFields() {
return new Set([...this.standardFields, ...this.additionalFields]);
}
}
import AvailabilityTimeSlotResponse from './api/availability-reponse';
import ServiceTimeSlotResponse from './api/service-availability-response';
import DimensionRecordResult from './dimension-record-result';
import Resource, { SFResource } from './s-objects/resource';

@@ -7,7 +8,7 @@ /**

*/
export default class ResourceResult {
export default class ResourceResult extends DimensionRecordResult {
private readonly resourcesById;
constructor(sfResourceData: SFResource[]);
computeTreeStructure(): ResourceResult;
addAvailabilitySlotData(dimensionsSlotData: AvailabilityTimeSlotResponse[]): void;
addAvailabilitySlotData(resourceSlotData: AvailabilityTimeSlotResponse[]): void;
addServiceSlotData(dimensionsServiceSlotData: ServiceTimeSlotResponse[]): void;

@@ -27,2 +28,9 @@ /**

getResource(idOrName: string): Resource | undefined;
/**
* Filters the resources in the `resourcesById` map based on the allowed ids.
* @internal
* @param resourceIds The ids of the resources that are allowed to remain in the map.
* @returns void
*/
filterResourcesById(resourceIds: string[]): void;
}

@@ -0,1 +1,2 @@

import DimensionRecordResult from './dimension-record-result';
import Resource from './s-objects/resource';

@@ -6,4 +7,5 @@ import { isSalesforceId } from './utils/salesforce-utils';

*/
export default class ResourceResult {
export default class ResourceResult extends DimensionRecordResult {
constructor(sfResourceData) {
super(sfResourceData);
// Map all resources to their ids

@@ -31,4 +33,4 @@ this.resourcesById = sfResourceData.reduce((map, sfResourceData) => {

}
addAvailabilitySlotData(dimensionsSlotData) {
dimensionsSlotData.forEach((slotData) => {
addAvailabilitySlotData(resourceSlotData) {
resourceSlotData.forEach((slotData) => {
const matchingResource = this.resourcesById.get(slotData.dimensionId);

@@ -75,2 +77,15 @@ if (matchingResource === undefined) {

}
/**
* Filters the resources in the `resourcesById` map based on the allowed ids.
* @internal
* @param resourceIds The ids of the resources that are allowed to remain in the map.
* @returns void
*/
filterResourcesById(resourceIds) {
this.resourcesById.forEach((resource, id) => {
if (!resourceIds.includes(id)) {
this.resourcesById.delete(id);
}
});
}
}

@@ -1,11 +0,9 @@

import AvailabilityTimeSlotResponse from '../api/availability-reponse';
import SObject, { CustomSFSObject } from './s-object';
import { AvailabilityTimeSlot } from '../time-slots/availability-time-slot';
import { CustomSFSObject } from './s-object';
import Service from './service';
import ServiceTimeSlotResponse from '../api/service-availability-response';
import DimensionRecord from '../dimension-record';
/**
* A Resource
*/
export default class Resource extends SObject {
name: string;
export default class Resource extends DimensionRecord {
parentId: string | null;

@@ -15,11 +13,5 @@ parent: Resource | null;

services: Map<string, Service>;
private timeSlots;
constructor(parsedResource: SFResource);
/**
* @internal
* Adds availability slot data for this resource to the resource.
*/
addAvailabilitySlotData(slotData: AvailabilityTimeSlotResponse): void;
/**
* @internal
* Adds service availability slot data for this resource to the resource.

@@ -34,7 +26,2 @@ */

/**
* Gets the timeslots for this resource. Only available if withAvailableSlotsBetween was called.
* @return The timeslots for this resource.
*/
getTimeSlots(): AvailabilityTimeSlot[];
/**
* Gets the available service for this resource. Only available if withAvailableSlotsBetween, and includeServices were called.

@@ -41,0 +28,0 @@ * @return The available services for this resource.

@@ -1,8 +0,8 @@

import SObject from './s-object';
import { AvailabilitySlotType } from '../time-slots/availability-time-slot';
import { isSalesforceId } from '../utils/salesforce-utils';
import DimensionRecord from '../dimension-record';
/**
* A Resource
*/
export default class Resource extends SObject {
export default class Resource extends DimensionRecord {
constructor(parsedResource) {

@@ -14,3 +14,2 @@ var _a;

this.services = new Map();
this.timeSlots = [];
this.name = parsedResource.Name;

@@ -21,9 +20,2 @@ this.parentId = (_a = parsedResource.B25__Parent__c) !== null && _a !== void 0 ? _a : null;

* @internal
* Adds availability slot data for this resource to the resource.
*/
addAvailabilitySlotData(slotData) {
this.timeSlots = slotData.timeSlots;
}
/**
* @internal
* Adds service availability slot data for this resource to the resource.

@@ -42,9 +34,2 @@ */

/**
* Gets the timeslots for this resource. Only available if withAvailableSlotsBetween was called.
* @return The timeslots for this resource.
*/
getTimeSlots() {
return this.timeSlots;
}
/**
* Gets the available service for this resource. Only available if withAvailableSlotsBetween, and includeServices were called.

@@ -51,0 +36,0 @@ * @return The available services for this resource.

{
"name": "@gomeddo/sdk",
"version": "0.0.6",
"version": "0.0.7",
"description": "Package allowing for the easy use of GoMeddo APIs.",

@@ -14,2 +14,3 @@ "keywords": [

"scripts": {
"release": "yarn build && yarn publish --access public",
"build": "yarn build:cjs && yarn build:esm",

@@ -16,0 +17,0 @@ "build:cjs": "tsc --project tsconfig.build.json",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc