@7365admin1/core 3.48.1-staging.186 → 3.48.1-staging.188
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/.changeset/resident-self-signup-field-pinning.md +53 -0
- package/.changeset/user-email-lookup-no-credentials.md +52 -0
- package/dist/index.d.ts +34 -1
- package/dist/index.js +97 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +93 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/test/e2e/harness.mjs +5 -0
- package/test/e2e/resident-self-signup-pinning.e2e.test.mjs +348 -0
- package/test/e2e/user-email-lookup-leak.e2e.test.mjs +190 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
"@7365admin1/core": minor
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Pin what a logged-out caller may set on the resident sign-up.
|
|
6
|
+
|
|
7
|
+
`POST /api/people/resident/create` (`person.route.ts:37`) has no guard, and it
|
|
8
|
+
shares the `add` handler with the guarded `POST /api/people/`. The handler
|
|
9
|
+
spread the request body into `schemaPerson` and inserted it.
|
|
10
|
+
|
|
11
|
+
`site.people` is the collection every site-reach decision on the platform reads
|
|
12
|
+
its verdict from. On that schema `status` was a free-form string, and `_id`,
|
|
13
|
+
`user`, `approvedBy`, `type`, `site` and `org` were all caller-supplied. So an
|
|
14
|
+
anonymous caller could insert an APPROVED row at any client's site, pointing at
|
|
15
|
+
an account they control, and be reachable into that estate from then on. That is
|
|
16
|
+
the manufacture-access path, not a theoretical one.
|
|
17
|
+
|
|
18
|
+
It cannot be closed with a session check: the only caller anywhere in the
|
|
19
|
+
organisation is the resident app's registration wizard
|
|
20
|
+
(`app/(auth)/createUser.tsx:449`), which by definition has no session yet. So
|
|
21
|
+
the route is field-pinned instead.
|
|
22
|
+
|
|
23
|
+
With no session the body is now validated against a new
|
|
24
|
+
`schemaResidentSelfSignUp` — an explicit ALLOW-list of exactly what
|
|
25
|
+
`createUser.tsx` sends, with `stripUnknown`, so `_id`, `user`, `approvedBy` and
|
|
26
|
+
anything else are dropped rather than written. Two fields are then set
|
|
27
|
+
server-side rather than accepted:
|
|
28
|
+
|
|
29
|
+
- `status` is forced to `"pending"`, the literal the wizard hard-codes at
|
|
30
|
+
`createUser.tsx:151` and re-sets at `:237`.
|
|
31
|
+
- `platform` is forced to `"mobile"`. This matters as much as `status`:
|
|
32
|
+
`person.service.ts:130` reads it to decide whether the USER ACCOUNT it creates
|
|
33
|
+
starts `"pending"` or `"active"`, so a caller who sent `platform: "web"` got a
|
|
34
|
+
live account with nobody reviewing them.
|
|
35
|
+
|
|
36
|
+
`type` is narrowed to `resident` or `tenant` — the only two the wizard derives
|
|
37
|
+
(`createUser.tsx:441`) — with `.valid(...)` and `.trim().lowercase()`, never
|
|
38
|
+
`.allow(...)`, which accepts any non-empty string and would restrict nothing.
|
|
39
|
+
This closes the `user` hole properly: the service only overwrites a
|
|
40
|
+
caller-supplied `user` on the resident/tenant branch, so sending
|
|
41
|
+
`type: "contractor"` was what left a nominated `user` standing.
|
|
42
|
+
|
|
43
|
+
The guarded `POST /api/people/` is UNCHANGED and still accepts the full
|
|
44
|
+
`schemaPerson` — staff legitimately create contractors and visitors, set their
|
|
45
|
+
own statuses, and record `approvedBy`.
|
|
46
|
+
|
|
47
|
+
`site`, `org`, `block`, `level`, `unit`, `isOwner`, `email`, `password`, `name`,
|
|
48
|
+
`nric`, `contact` and the files are NOT pinnable: a genuine self-registration
|
|
49
|
+
chooses its own estate and unit, so pinning any of them would block real
|
|
50
|
+
residents.
|
|
51
|
+
|
|
52
|
+
Covered by `test/e2e/resident-self-signup-pinning.e2e.test.mjs`. Both create
|
|
53
|
+
routes are now mounted in the e2e harness, mirroring `person.route.ts`.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
"@7365admin1/core": minor
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Stop the e-mail account lookup handing out the password hash and session id.
|
|
6
|
+
|
|
7
|
+
`GET /api/users/user/:email` (`user.route.ts:25`) has no guard on it at all, and
|
|
8
|
+
`GET /api/users/email/:email` next to it is the same handler behind
|
|
9
|
+
`requireAuth`. Both answered `res.json(user)` on the raw stored document, and
|
|
10
|
+
the users collection stores `password` — the hash — and `sid` — that account's
|
|
11
|
+
CURRENT session id.
|
|
12
|
+
|
|
13
|
+
So anyone at all, with no session, who knew or guessed an e-mail address got
|
|
14
|
+
that account's password hash back in the response body, to crack offline at
|
|
15
|
+
leisure, plus a live session id to reuse. On the authenticated twin, any signed
|
|
16
|
+
in account could read the same two fields for any other account, including an
|
|
17
|
+
administrator's.
|
|
18
|
+
|
|
19
|
+
The unguarded route cannot simply be guarded. Its only callers anywhere in the
|
|
20
|
+
organisation are pre-login signup screens — the resident app's e-mail check
|
|
21
|
+
(`user-registration.ts:103`) and the four `web-app-main/pages/sign-up-invite/*`
|
|
22
|
+
pages through `layer-common`'s `getUserByEmailV2` — so a session check would
|
|
23
|
+
break registration. The fix is therefore not authentication, it is not handing
|
|
24
|
+
out more than signup asks for.
|
|
25
|
+
|
|
26
|
+
All five of those callers read NO field off the reply. The mobile check does
|
|
27
|
+
`res !== null`; the four web pages do `if (response)`. So without a session the
|
|
28
|
+
handler no longer loads the document: a new `userExistsByEmail` does a
|
|
29
|
+
`findOne` with an explicit allow-list projection of `_id` alone and returns a
|
|
30
|
+
boolean, and the route answers `{ exists: true }` or `null` exactly as before.
|
|
31
|
+
An allow-list, deliberately — a deny-list would silently start leaking the next
|
|
32
|
+
credential-shaped field somebody adds to the collection.
|
|
33
|
+
|
|
34
|
+
`getUserByEmail` itself is UNCHANGED and still returns the whole document,
|
|
35
|
+
because signing in genuinely needs the hash to compare against. Putting the
|
|
36
|
+
projection on that function instead of beside it would have broken every login.
|
|
37
|
+
|
|
38
|
+
With a session the reply keeps its existing shape, minus `password` and `sid`,
|
|
39
|
+
via a small `withoutCredentials`. `_id` is the only field its callers read
|
|
40
|
+
(`web-app-main pages/verify/email`, `web-app-org onboarding/getting-started`)
|
|
41
|
+
and it survives. That path is narrowed by removal rather than by allow-list on
|
|
42
|
+
purpose: it is consumed by screens across web and mobile that cannot all be
|
|
43
|
+
enumerated from here, and removing two credential fields cannot break a
|
|
44
|
+
legitimate one, because no screen renders a password hash or a session id.
|
|
45
|
+
|
|
46
|
+
The v2 twin `GET /api/users/v2/email/:email` had the same leak — it is behind
|
|
47
|
+
`requireAuth`, so it was never anonymous, but "signed in" is not "entitled to
|
|
48
|
+
another account's credentials" — and is stripped the same way. v2 has no
|
|
49
|
+
anonymous `/user/:email` route and no pre-login caller.
|
|
50
|
+
|
|
51
|
+
Covered by `test/e2e/user-email-lookup-leak.e2e.test.mjs`, which asserts on the
|
|
52
|
+
absence of the key and never on its value.
|
package/dist/index.d.ts
CHANGED
|
@@ -168,6 +168,7 @@ declare function useUserRepo(): {
|
|
|
168
168
|
pageRange: string;
|
|
169
169
|
}>;
|
|
170
170
|
getUserByEmail: (email: string) => Promise<TUser | null>;
|
|
171
|
+
userExistsByEmail: (email: string) => Promise<boolean>;
|
|
171
172
|
getUserByReferralCode: (referralCode: string) => Promise<TUser | null>;
|
|
172
173
|
getByEmailApp: (email: string, app: string) => Promise<TUser | null>;
|
|
173
174
|
getUserById: (_id: string | ObjectId) => Promise<TUser & {
|
|
@@ -4367,6 +4368,38 @@ declare const schemaPlate: Joi.ObjectSchema<any>;
|
|
|
4367
4368
|
declare const schemaFiles: Joi.ObjectSchema<any>;
|
|
4368
4369
|
declare const schemaApprover: Joi.ObjectSchema<any>;
|
|
4369
4370
|
declare const schemaPerson: Joi.ObjectSchema<any>;
|
|
4371
|
+
/**
|
|
4372
|
+
* What a logged-OUT person may set on themselves at sign-up.
|
|
4373
|
+
*
|
|
4374
|
+
* `POST /api/people/resident/create` (`person.route.ts:37`) has no guard, and
|
|
4375
|
+
* it cannot be given one: its only caller anywhere in the organisation is the
|
|
4376
|
+
* resident app's registration wizard (`app/(auth)/createUser.tsx:449`), which
|
|
4377
|
+
* by definition has no session yet. It shares the `add` handler with the
|
|
4378
|
+
* guarded `POST /api/people/`, which spread the request body straight into
|
|
4379
|
+
* `schemaPerson` and inserted it.
|
|
4380
|
+
*
|
|
4381
|
+
* `site.people` is the collection every site-reach decision on the platform
|
|
4382
|
+
* reads its verdict from. So an anonymous caller could insert a row at any
|
|
4383
|
+
* site, with `status: "approved"`, and `user` pointed at an account they
|
|
4384
|
+
* control — manufacturing reach into another client's estate. `status` was a
|
|
4385
|
+
* free string, and `_id`, `user` and `approvedBy` were all caller-supplied.
|
|
4386
|
+
*
|
|
4387
|
+
* The answer is not a session check, it is to stop the route accepting more
|
|
4388
|
+
* than a self-service sign-up needs. This is an ALLOW-list, validated with
|
|
4389
|
+
* `stripUnknown` so anything not named here is dropped rather than written —
|
|
4390
|
+
* a deny-list would silently start accepting the next field added to
|
|
4391
|
+
* `schemaPerson`. `status` and `platform` are not listed at all because they
|
|
4392
|
+
* are pinned server-side afterwards, not taken from the caller.
|
|
4393
|
+
*
|
|
4394
|
+
* Every field below is one `createUser.tsx` genuinely sends. `type` uses
|
|
4395
|
+
* `.valid(...)` and NOT `.allow(...)` — `.allow()` accepts any non-empty
|
|
4396
|
+
* string and would restrict nothing, which is the bug the camera `type` field
|
|
4397
|
+
* had.
|
|
4398
|
+
*/
|
|
4399
|
+
declare const SELF_SIGNUP_STATUS = "pending";
|
|
4400
|
+
declare const SELF_SIGNUP_PLATFORM = "mobile";
|
|
4401
|
+
declare const SELF_SIGNUP_TYPES: readonly ["resident", "tenant"];
|
|
4402
|
+
declare const schemaResidentSelfSignUp: Joi.ObjectSchema<any>;
|
|
4370
4403
|
declare const schemaUpdatePerson: Joi.ObjectSchema<any>;
|
|
4371
4404
|
declare function MPerson(value: TPerson): {
|
|
4372
4405
|
createdAt: string | Date;
|
|
@@ -12400,4 +12433,4 @@ declare function useNotificationPreferenceController(): {
|
|
|
12400
12433
|
update: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
12401
12434
|
};
|
|
12402
12435
|
|
|
12403
|
-
export { ANPRMode, APP_BASE_URLS, AUDIT_VALUE_MAX_LENGTH, AccessTypeProps, AppKey, AppServiceType, AssignCardConfig, BidStatus, BidType, BuildingLevelStatus, BuildingStatus, BulkCardUpdate, BulletinOrder, BulletinRecipient, BulletinSort, BulletinStatus, BulletinVideoOrder, BulletinVideoSort, CAMERA_ANPR_PERMISSIONS, CAMERA_CAPABILITIES, CAMERA_CAPABILITY_REASONS, CAMERA_MANAGE_ANY_PERMISSIONS, CAMERA_NOT_PATROL_OR_CCTV, CAMERA_NO_SUB_STREAM_TTL_SECONDS, CAMERA_PTZ_PERMISSIONS, CAMERA_REQUEST_TIMEOUT_MS, CAMERA_RTSP_TIMEOUT_MS, CAMERA_SETUP_PERMISSIONS, CAMERA_SNAPSHOT_CACHE_SECONDS, CAMERA_SNAPSHOT_MAX_BYTES, CAMERA_TEST_MIN_INTERVAL_SECONDS, CAMERA_TEST_ROUND_LIMIT, CAMERA_TEST_ROUND_SECONDS, CAMERA_TYPE_ANPR, CAMERA_TYPE_IP, CAMERA_VIEW_PERMISSIONS, CLIENT_ACTIONS, CLOCK_DRIFT_WARN_SECONDS, CONSOLE_AUDIT_LABELS, CURRENT_TIME_ENDPOINT, Camera, CameraAddressInput, CameraCapability, CameraCapabilityContext, CameraCapabilityDescriptor, CameraCapabilityEntry, CameraCapabilityReason, CameraCapabilityState, CameraCapabilityTrace, CameraDevice, CameraFrame, CameraMembership, CameraStream, CameraTestStatus, CameraTransport, CameraType, ConsoleAuditAction, ConsoleAuditTarget, DEVICE_STATUS, DOBStatus, DUPLICATE_TERMS_VERSION_MESSAGE, DayOfWeek, DeviceHttpTarget, DeviceProbeResult, DynamicFormFields, EAccessCardTypes, EAccessCardUserTypes, EmailSender, EntryOrder, EntrySort, EventOrder, EventSort, EventStatus, EventType, FacilitySort, FacilityStatus, FormEntryStatus, GuestSort, GuestStatus, HID_CARD_VALUE_FACTOR, HID_PERMISSION_CATEGORIES, HID_UINT32_MAX, HID_UINT64_MAX, HidRawUint64, IAccessCard, IAccessCardTransaction, InviteActor, MAX_CAMERA_CHANNEL, MAccessCard, MAccessCardTransaction, MAddress, MAttendance, MAttendanceSettings, MBidPreloved, MBillingConfiguration, MBillingItem, MBuilding, MBuildingLevel, MBuildingUnit, MBulletinBoard, MBulletinVideo, MCategoryPreloved, MChannelPreloved, MChat, MChatPreloved, MConsoleAudit, MCustomer, MCustomerSite, MDocumentManagement, MEMBER_TYPES, MEntryPassSettings, MEventManagement, MFeedback, MFile, MFormEntry, MGuestManagement, MHidAmicoEvent, MHidAmicoIdentity, MHidAmicoReader, MHidSipAccount, MHidSitePermissions, MIncidentReport, MManpowerDesignations, MManpowerMonitoring, MManpowerRemarks, MManpowerSites, MMember, MNfcPatrolLog, MNfcPatrolRoute, MNfcPatrolSettings, MNfcPatrolSettingsUpdate, MNfcPatrolTag, MNotification, MNotificationPreference, MOccurrenceBook, MOccurrenceEntry, MOccurrenceSubject, MOnlineForm, MOrg, MOvernightParkingApprovalHours, MOvernightParkingRequest, MPatrolEmail, MPatrolLog, MPatrolQuestion, MPatrolRoute, MPerson, MPlatformTerms, MPost, MPostFavorite, MPromoCode, MRobot, MRole, MRoleV2, MServiceProvider, MServiceProviderBilling, MSession, MSite, MSiteCamera, MSiteFacility, MSiteFacilityBooking, MStatementOfAccount, MSubcategoryPreloved, MSubscription, MSubscriptionPlan, MUnitBilling, MUser, MVehicle, MVehicleTransaction, MVerification, MVerificationV2, MVisitorTransaction, MWorkOrder, NOTIFICATION_CATEGORIES, NOTIFICATION_CHANNELS, NOTIFICATION_CHANNEL_LABELS, NOTIFICATION_NAMESPACE, NotificationAppSlug, NotificationCategory, NotificationChannel, NotificationModule, NotificationPreferenceView, NotificationService, ORG_MARKETPLACE_VENDOR_FIELD, OrgNature, OvernightParkingRequestSort, OvernightParkingRequestStatus, PATROL_CCTV_CAMERA_FILTER, PATROL_EMAIL_MAX_LOGS, PATROL_EMAIL_MAX_RECIPIENTS, PERSON_TYPES, PLATFORM_STAFF_MEMBER_TYPE, PLATFORM_STAFF_ROLE_TYPE, PROPERTY_MANAGEMENT_MEMBER_TYPES, PStatus, PTZ_ALLOWED_ACTIONS, PTZ_ALLOWED_CODES, Period, PersonStatus, PersonType, PersonTypes, PlatformTermsStatus, PostOrder, PostSort, PostStatus, QrTagProps, REALTIME_MAX_FANOUT, ResidentAppModuleKey, SERVICE_PROVIDER_INVITE_LABELS, SERVICE_PROVIDER_INVITE_TRANSITIONS, SERVICE_PROVIDER_SIGN_IN_SUBJECT, SERVICE_PROVIDER_SIGN_IN_TYPE, SERVICE_PROVIDER_SIGN_UP_SUBJECT, SERVICE_PROVIDER_SIGN_UP_TYPE, SOFTWARE_VERSION_ENDPOINT, ServiceProviderInviteAction, ServiceProviderInviteDecision, ServiceProviderInviteFacts, SiteAddress, SiteCategories, SiteStatus, SortFields, SortOrder, Status, SubjectOrder, SubjectSort, SubscriptionBillingMode, SubscriptionType, TAccessMngmntSettings, TActionStatus, TAddress, TAffectedEntities, TAffectedInjured, TAppServiceType, TApprovedBy, TApprover, TAttendance, TAttendanceCheckIn, TAttendanceCheckOut, TAttendanceCheckTime, TAttendanceLocation, TAttendanceSettings, TAttendanceSettingsGetBySite, TAuthorities, TAuthoritiesCalled, TBidPreloved, TBilling, TBillingConfiguration, TBillingItem, TBuilding, TBuildingLevel, TBuildingUnit, TBulletinBoard, TBulletinVideo, TCamera, TCameraHealthClaim, TCategoryPreloved, TChannelPreloved, TChat, TChatPreloved, TCheckPoint$1 as TCheckPoint, TComplaintInfo, TComplaintReceivedTo, TConsoleAudit, TConsoleAuditQuery, TCounter, TCreateNfcPatrolLog, TCustomer, TCustomerSite, TCustomerSitePropertyField, TDayNumber, TDaySchedule, TDefaultAccessCard, TDesignations, TDocs, TDocumentCreate, TDocumentManagement, TEntryPassSettings, TEventManagement, TFeedback, TFeedbackMetadata, TFeedbackUpdate, TFeedbackUpdateCategory, TFeedbackUpdateServiceProvider, TFeedbackUpdateStatus, TFeedbackUpdateToCompleted, TFile, TFiles, TFolderUpdate, TFormEntry, TGetAttendancesByUserQuery, TGetAttendancesQuery, TGuestManagement, THidAmicoEvent, THidAmicoGatewayJob, THidAmicoIdentity, THidAmicoPhysicalCard, THidAmicoReader, THidPermissionAssignment, THidPermissionCategory, THidPhysicalCardInput, THidPhysicalCardType$1 as THidPhysicalCardType, THidSipAccount, THidSitePermissions, TIncidentInformation, TIncidentReport, TIncidentTypeAndTime, TInvoice, TKeyRef, TManpowerDesignations, TManpowerDesignationsUpdate, TManpowerMonitoring, TManpowerMonitoringUpdate, TManpowerRemarks, TManpowerRemarksStatusUpdate, TManpowerRemarksUpdate, TManpowerSearchFilter, TManpowerSites, TMember, TMemberUpdateStatus, TMessagePreloved, TMiniRole, TNfcPatrolLog, TNfcPatrolRoute, TNfcPatrolRouteEdit, TNfcPatrolSettings, TNfcPatrolSettingsGetBySite, TNfcPatrolSettingsUpdate, TNfcPatrolTag, TNfcPatrolTagConfigureReset, TNfcPatrolTagEdit, TNfcPatrolTagUpdateData, TNotification, TNotificationPreference, TNotificationPreferenceOff, TOccurrenceBook, TOccurrenceEntry, TOccurrenceSubject, TOnlineForm, TOrg, TOvernightParkingApprovalHours, TOvernightParkingRequest, TPatrolEmail, TPatrolEmailCreatedBy, TPatrolEmailLogRef, TPatrolLog, TPatrolQuestion, TPatrolRoute, TPerson, TPlaceOfIncident, TPlates, TPlatformTerms, TPost, TPostFavorite, TPrice, TPriceType, TPromoCode, TPromoCurrencyInput, TPromoTier, TRANSPORT_DEVICE_HTTP, TRANSPORT_RELAY_PLAYER, TRANSPORT_RTSP_FRAME, TRecipientOfComplaint, TRemarks, TResident, TResidentAppModules, TRobot, TRobotMetadata, TRole, TRoleV2, TRoute, TSOABillingItem, TSOAStatus, TServiceProvider, TServiceProviderBilling, TSession, TSessionCreate, TShifts, TSignNfcPatrolLog, TSite, TSiteCamera, TSiteFacility, TSiteFacilityBooking, TSiteInfo, TSiteInformation, TSiteMetadata, TSiteUpdateBlock, TStatementOfAccount, TSubcategoryPreloved, TSubmissionForm, TSubscription, TSubscriptionPlan, TSubscriptionPlanApplication, TUnitBilling, TUnits, TUpdateFormEntry, TUpdateName, TUser, TUserCreate, TVehicle, TVehicleTransaction, TVehicleUpdate, TVerification, TVerificationEvent, TVerificationMetadata, TVerificationMetadataV2, TVerificationV2, TVisitorTransaction, TWorkOrder, TWorkOrderMetadata, TWorkOrderUpdate, TWorkOrderUpdateStatus, TWorkOrderUpdateToCompleted, TanyoneDamageToProperty, UseAccessManagementRepo, UserStatus, VERIFICATION_OPEN_STATUSES, VehicleCategory, VehicleOrder, VehicleSort, VehicleStatus, VehicleType, VerificationLinkType, VerificationStatus, VerificationSubjectType, VerificationType, VisitorSort, VisitorStatus, addressSchema, allowedFieldsSite, allowedNatures, allowedPlanApplications, attendanceSchema, attendanceSettingsSchema, building_level_namespace_collection, building_units_namespace_collection, buildings_namespace_collection, bulletin_boards_namespace_collection, cameraBaseUrl, cameraCapabilitiesFor, cameraDevices, cameraGrant, cameraHealthClaim, cameraHealthSummary, cameraManagePermissions, cameraProbeCacheKey, cameraTransports, canRevokeRefreshTokenFamily, categoriesForPermissions, categorySupportsChannel, chatPrelovedEvents, chatSchema, clampPtzSpeed, clockDriftSeconds, console_audit_namespace_collection, createManpowerRemarksDaily, customerSchema, customerSitePropertyFields, decideServiceProviderInvite, decodeHidPacsCard, deriveCameraHost, describeCameraCapabilities, designationsSchema, deviceControlEnabled, deviceHttpEnabled, deviceHttpTargets, deviceHttpTimeoutMs, deviceProbeTtlSeconds, emitNotificationCreated, encodeHidPacsCard, events_namespace_collection, facility_bookings_namespace_collection, feedbackSchema, feedbacks2_namespace_collection, feedbacks_namespace_collection, ffmpegFrameArgs, ffmpegPath, formatCapabilityTrace, formatDahuaDate, getIO, getSessionIdFromRequest, grabWithSubStreamFallback, guests_namespace_collection, hasAnyCapability, hasAnyPermission, hidRawUint64, incidentReport, incidentReportLog, incidents_namespace_collection, isCameraEntitled, isDuplicateVersionError, isPatrolCctvCamera, isPlatformOwner, isPromoCodeExpired, isRelayPlayerUrl, isSafeRelativePath, isSuperAdmin, isTermsCurrent, logCamera, manpowerDesignationsSchema, manpowerEvents, manpowerMonitoringSchema, manpowerRemarksSchema, manpowerSitesSchema, mapWithLimit, nfcPatrolSettingsSchema, nfcPatrolSettingsSchemaUpdate, normalizeAcceptedTerms, normalizeHidCardValue, notificationCategory, notificationCategoryLabel, notificationEvents, notificationRoom, occurrence_book_namespace_collection, online_forms_namespace_collection, orgSchema, overnight_parking_requests_namespace_collection, parseCameraChannel, parseCameraHost, parseDahuaFind, parseDeviceTime, parseHidJsonLossless, parsePromoExpiry, parseSoftwareVersion, pickAuditFields, pickCustomerSiteProperties, platform_terms_namespace_collection, promoCodeRefusal, promoCodeSchema, promoCodeStatusSchema, promoCodeUpdate, promoCodeUpdateSchema, ptzEndpoint, publicCameraFields, recordConsoleAction, refuseServiceProviderInviteAction, registerCameraTransport, relayForRecorder, remarksSchema, renderPagePdf, resetCameraTransports, residentAppModuleKeys, residentFormEntry, resolutionRefusalReason, resolveCamera, resolveDeviceHttp, resolveHidPhysicalCardValue, resolveInviteActor, robotSchema, rtspUrl, schema, schemaAppSlugNotification, schemaApprovedBy, schemaApprover, schemaBidPreloved, schemaBilling, schemaBillingConfiguration, schemaBillingItem, schemaBuilding, schemaBuildingLevel, schemaBuildingUnit, schemaBuildingUpdateOptions, schemaBulletinBoard, schemaBulletinVideo, schemaCategoryPreloved, schemaChannelPreloved, schemaChatPreloved, schemaConsoleAudit, schemaCreateHidAmicoIdentity, schemaCreateNfcPatrolLog, schemaCreateNotification, schemaCustomerSite, schemaDiscoverHidAmicoReader, schemaDocumentManagement, schemaEntryPassSettings, schemaEventManagement, schemaFiles, schemaFormEntry, schemaGuestManagement, schemaHidAmicoAccessLogQuery, schemaHidAmicoAssignUserCard, schemaHidAmicoConfiguration, schemaHidAmicoEnrollUserCard, schemaHidAmicoEvent, schemaHidAmicoExecuteActions, schemaHidAmicoIdentity, schemaHidAmicoIdentityIdParams, schemaHidAmicoIdentityQuery, schemaHidAmicoIntercomCall, schemaHidAmicoLogQuery, schemaHidAmicoMonitor, schemaHidAmicoNotificationParams, schemaHidAmicoObjectOperation, schemaHidAmicoOperatingMode, schemaHidAmicoReader, schemaHidAmicoReaderIdParams, schemaHidAmicoReaderListQuery, schemaHidAmicoReaderUserQuery, schemaHidAmicoSetConfiguration, schemaHidAmicoSiteIdParams, schemaHidAmicoSync, schemaHidAmicoUserCardIdParams, schemaHidAmicoUserCardParams, schemaHidAmicoUserImageParams, schemaHidAmicoUserImageUploadQuery, schemaHidAmicoUserPin, schemaHidAmicoUserPinParams, schemaHidAmicoVisitorImageParams, schemaHidAmicoVisitorImageUploadQuery, schemaHidAmicoVisitorQr, schemaHidPermissionCandidateQuery, schemaHidPermissionScopeQuery, schemaHidSipAccountRequest, schemaIncidentReport, schemaListNotification, schemaMultipleDocumentManagement, schemaNfcPatrolLog, schemaNfcPatrolRoute, schemaNfcPatrolTag, schemaNfcPatrolTagUpdateData, schemaNotification, schemaNotificationPreference, schemaNotificationPreferenceOff, schemaOccurrenceBook, schemaOccurrenceEntry, schemaOccurrenceSubject, schemaOnlineForm, schemaOvernightParkingApprovalHours, schemaOvernightParkingRequest, schemaPatrolEmail, schemaPatrolEmailCreatedBy, schemaPatrolEmailLogRef, schemaPatrolLog, schemaPatrolQuestion, schemaPatrolRoute, schemaPerson, schemaPlate, schemaPlatformTerms, schemaPost, schemaPostFavorite, schemaSendPatrolEmail, schemaServiceProvider, schemaServiceProviderBilling, schemaSignNfcPatrolLog, schemaSiteCamera, schemaSiteFacility, schemaSiteFacilityBooking, schemaStatementOfAccount, schemaSubcategoryPreloved, schemaUnitBilling, schemaUpdateBidPreloved, schemaUpdateBuildingLevel, schemaUpdateBulletinBoard, schemaUpdateBulletinVideo, schemaUpdateCategoryPreloved, schemaUpdateChatPreloved, schemaUpdateDocumentManagement, schemaUpdateEntryPassSettings, schemaUpdateEventManagement, schemaUpdateFolderManagement, schemaUpdateFormEntry, schemaUpdateGuestManagement, schemaUpdateHidAmicoIdentity, schemaUpdateHidAmicoReader, schemaUpdateHidSitePermissions, schemaUpdateIncidentReport, schemaUpdateNotification, schemaUpdateNotificationPreference, schemaUpdateOccurrenceBook, schemaUpdateOccurrenceEntry, schemaUpdateOccurrenceSubject, schemaUpdateOnlineForm, schemaUpdateOptions, schemaUpdateOvernightParkingRequest, schemaUpdatePatrolLog, schemaUpdatePatrolQuestion, schemaUpdatePatrolRoute, schemaUpdatePerson, schemaUpdatePost, schemaUpdatePostFavorite, schemaUpdateServiceProviderBilling, schemaUpdateSiteBillingConfiguration, schemaUpdateSiteBillingItem, schemaUpdateSiteCamera, schemaUpdateSiteFacility, schemaUpdateSiteFacilityBooking, schemaUpdateSiteUnitBilling, schemaUpdateStatementOfAccount, schemaUpdateSubcategoryPreloved, schemaUpdateVisTrans, schemaVehicleTransaction, schemaVisitorTransaction, schemeCamera, schemeLogCamera, serviceProviderInviteLabel, sessionSchema, setIO, shiftSchema, siteSchema, site_people_namespace_collection, snapshotEndpoint, snapshotRefusalReason, stringifyHidJson, subscriptionPlanSchema, updateRemarksStatusEod, updateRemarksisAcknowledged, updateSiteSchema, useAccessManagementController, useAddressRepo, useAttendanceController, useAttendanceRepository, useAttendanceSettingsController, useAttendanceSettingsRepository, useAttendanceSettingsService, useAuthController, useAuthControllerV2, useAuthService, useAuthServiceV2, useBidPrelovedController, useBidPrelovedRepo, useBidPrelovedService, useBuildingController, useBuildingLevelController, useBuildingLevelRepo, useBuildingLevelService, useBuildingRepo, useBuildingService, useBuildingUnitController, useBuildingUnitRepo, useBuildingUnitService, useBulletinBoardController, useBulletinBoardRepo, useBulletinBoardService, useBulletinVideoController, useBulletinVideoRepo, useBulletinVideoService, useCameraViewController, useCameraViewService, useCategoryPrelovedController, useCategoryPrelovedRepo, useChannelPrelovedController, useChannelPrelovedRepo, useChatController, useChatPrelovedController, useChatPrelovedRepo, useChatPrelovedService, useChatRepo, useConsoleAuditController, useConsoleAuditRepo, useCounterModel, useCounterRepo, useCustomerController, useCustomerRepo, useCustomerSiteController, useCustomerSiteRepo, useCustomerSiteService, useDahuaService, useDashboardController, useDashboardRepo, useDocumentManagementController, useDocumentManagementRepo, useDocumentManagementService, useEntryPassSettingsController, useEntryPassSettingsRepo, useEventManagementController, useEventManagementRepo, useEventManagementService, useFeedbackController, useFeedbackRepo, useFeedbackService, useFileController, useFileRepo, useFileService, useFormEntryController, useFormEntryRepo, useGuestManagementController, useGuestManagementRepo, useGuestManagementService, useHidAmicoController, useHidAmicoRepo, useHidAmicoService, useHrmLabsAttendanceCtrl, useHrmLabsAttendanceSrvc, useIncidentReportController, useIncidentReportRepo, useIncidentReportService, useInvoiceController, useInvoiceModel, useInvoiceRepo, useManpowerDesignationCtrl, useManpowerDesignationRepo, useManpowerMonitoringCtrl, useManpowerMonitoringRepo, useManpowerMonitoringSrvc, useManpowerRemarkCtrl, useManpowerRemarksRepo, useManpowerSitesCtrl, useManpowerSitesRepo, useManpowerSitesSrvc, useMemberController, useMemberRepo, useMemberService, useNewDashboardController, useNewDashboardRepo, useNfcPatrolLogController, useNfcPatrolLogRepo, useNfcPatrolLogService, useNfcPatrolRouteController, useNfcPatrolRouteRepo, useNfcPatrolRouteService, useNfcPatrolSettingsController, useNfcPatrolSettingsRepository, useNfcPatrolSettingsService, useNfcPatrolTagController, useNfcPatrolTagRepo, useNfcPatrolTagService, useNotificationController, useNotificationPreferenceController, useNotificationPreferenceRepo, useNotificationPreferenceService, useNotificationRepo, useOccurrenceBookController, useOccurrenceBookRepo, useOccurrenceBookService, useOccurrenceEntryController, useOccurrenceEntryRepo, useOccurrenceEntryService, useOccurrenceSubjectController, useOccurrenceSubjectRepo, useOccurrenceSubjectService, useOnlineFormController, useOnlineFormRepo, useOrgController, useOrgControllerV2, useOrgRepo, useOvernightParkingController, useOvernightParkingRepo, useOvernightParkingRequestController, useOvernightParkingRequestRepo, useOvernightParkingRequestService, usePatrolEmailController, usePatrolEmailRepo, usePatrolEmailService, usePatrolLogController, usePatrolLogRepo, usePatrolLogService, usePatrolQuestionController, usePatrolQuestionRepo, usePatrolRouteController, usePatrolRouteRepo, usePersonController, usePersonRepo, usePlatformTermsController, usePlatformTermsRepo, usePlatformTermsService, usePostFavoriteController, usePostFavoriteRepo, usePostFavoriteService, usePostPrelovedController, usePostPrelovedRepo, usePriceController, usePriceModel, usePriceRepo, usePromoCodeController, usePromoCodeRepo, useRedDotPaymentController, useRedDotPaymentRepo, useRedDotPaymentSvc, useRobotController, useRobotRepo, useRobotService, useRoleController, useRoleControllerV2, useRoleRepo, useRoleRepoV2, useRoleServiceV2, useServiceProviderBillingController, useServiceProviderBillingRepo, useServiceProviderBillingService, useServiceProviderController, useServiceProviderInviteController, useServiceProviderInviteService, useServiceProviderRepo, useSessionRepo, useSiteBillingConfigurationController, useSiteBillingConfigurationRepo, useSiteBillingItemController, useSiteBillingItemRepo, useSiteCameraController, useSiteCameraRepo, useSiteCameraService, useSiteController, useSiteFacilityBookingController, useSiteFacilityBookingRepo, useSiteFacilityBookingService, useSiteFacilityController, useSiteFacilityRepo, useSiteFacilityService, useSiteRepo, useSiteService, useSiteUnitBillingController, useSiteUnitBillingRepo, useSiteUnitBillingService, useStatementOfAccountController, useStatementOfAccountRepo, useSubcategoryPrelovedController, useSubcategoryPrelovedRepo, useSubscriptionController, useSubscriptionPlanController, useSubscriptionPlanRepo, useSubscriptionRepo, useSubscriptionService, useUserController, useUserControllerV2, useUserRepo, useUserRepoV2, useUserService, useUserServiceV2, useVehicleController, useVehicleRepo, useVehicleService, useVerificationController, useVerificationControllerV2, useVerificationRepo, useVerificationRepoV2, useVerificationService, useVerificationServiceV2, useVisitorTransactionController, useVisitorTransactionRepo, useVisitorTransactionService, useWorkOrderController, useWorkOrderRepo, useWorkOrderService, userSchema, vehicleSchema, vehicles_namespace_collection, visitorPersonRepo, visitorPersonService, visitorType, visitors_namespace_collection, wallConfig, workOrderSchema, work_orders2_namespace_collection, work_orders_namespace_collection };
|
|
12436
|
+
export { ANPRMode, APP_BASE_URLS, AUDIT_VALUE_MAX_LENGTH, AccessTypeProps, AppKey, AppServiceType, AssignCardConfig, BidStatus, BidType, BuildingLevelStatus, BuildingStatus, BulkCardUpdate, BulletinOrder, BulletinRecipient, BulletinSort, BulletinStatus, BulletinVideoOrder, BulletinVideoSort, CAMERA_ANPR_PERMISSIONS, CAMERA_CAPABILITIES, CAMERA_CAPABILITY_REASONS, CAMERA_MANAGE_ANY_PERMISSIONS, CAMERA_NOT_PATROL_OR_CCTV, CAMERA_NO_SUB_STREAM_TTL_SECONDS, CAMERA_PTZ_PERMISSIONS, CAMERA_REQUEST_TIMEOUT_MS, CAMERA_RTSP_TIMEOUT_MS, CAMERA_SETUP_PERMISSIONS, CAMERA_SNAPSHOT_CACHE_SECONDS, CAMERA_SNAPSHOT_MAX_BYTES, CAMERA_TEST_MIN_INTERVAL_SECONDS, CAMERA_TEST_ROUND_LIMIT, CAMERA_TEST_ROUND_SECONDS, CAMERA_TYPE_ANPR, CAMERA_TYPE_IP, CAMERA_VIEW_PERMISSIONS, CLIENT_ACTIONS, CLOCK_DRIFT_WARN_SECONDS, CONSOLE_AUDIT_LABELS, CURRENT_TIME_ENDPOINT, Camera, CameraAddressInput, CameraCapability, CameraCapabilityContext, CameraCapabilityDescriptor, CameraCapabilityEntry, CameraCapabilityReason, CameraCapabilityState, CameraCapabilityTrace, CameraDevice, CameraFrame, CameraMembership, CameraStream, CameraTestStatus, CameraTransport, CameraType, ConsoleAuditAction, ConsoleAuditTarget, DEVICE_STATUS, DOBStatus, DUPLICATE_TERMS_VERSION_MESSAGE, DayOfWeek, DeviceHttpTarget, DeviceProbeResult, DynamicFormFields, EAccessCardTypes, EAccessCardUserTypes, EmailSender, EntryOrder, EntrySort, EventOrder, EventSort, EventStatus, EventType, FacilitySort, FacilityStatus, FormEntryStatus, GuestSort, GuestStatus, HID_CARD_VALUE_FACTOR, HID_PERMISSION_CATEGORIES, HID_UINT32_MAX, HID_UINT64_MAX, HidRawUint64, IAccessCard, IAccessCardTransaction, InviteActor, MAX_CAMERA_CHANNEL, MAccessCard, MAccessCardTransaction, MAddress, MAttendance, MAttendanceSettings, MBidPreloved, MBillingConfiguration, MBillingItem, MBuilding, MBuildingLevel, MBuildingUnit, MBulletinBoard, MBulletinVideo, MCategoryPreloved, MChannelPreloved, MChat, MChatPreloved, MConsoleAudit, MCustomer, MCustomerSite, MDocumentManagement, MEMBER_TYPES, MEntryPassSettings, MEventManagement, MFeedback, MFile, MFormEntry, MGuestManagement, MHidAmicoEvent, MHidAmicoIdentity, MHidAmicoReader, MHidSipAccount, MHidSitePermissions, MIncidentReport, MManpowerDesignations, MManpowerMonitoring, MManpowerRemarks, MManpowerSites, MMember, MNfcPatrolLog, MNfcPatrolRoute, MNfcPatrolSettings, MNfcPatrolSettingsUpdate, MNfcPatrolTag, MNotification, MNotificationPreference, MOccurrenceBook, MOccurrenceEntry, MOccurrenceSubject, MOnlineForm, MOrg, MOvernightParkingApprovalHours, MOvernightParkingRequest, MPatrolEmail, MPatrolLog, MPatrolQuestion, MPatrolRoute, MPerson, MPlatformTerms, MPost, MPostFavorite, MPromoCode, MRobot, MRole, MRoleV2, MServiceProvider, MServiceProviderBilling, MSession, MSite, MSiteCamera, MSiteFacility, MSiteFacilityBooking, MStatementOfAccount, MSubcategoryPreloved, MSubscription, MSubscriptionPlan, MUnitBilling, MUser, MVehicle, MVehicleTransaction, MVerification, MVerificationV2, MVisitorTransaction, MWorkOrder, NOTIFICATION_CATEGORIES, NOTIFICATION_CHANNELS, NOTIFICATION_CHANNEL_LABELS, NOTIFICATION_NAMESPACE, NotificationAppSlug, NotificationCategory, NotificationChannel, NotificationModule, NotificationPreferenceView, NotificationService, ORG_MARKETPLACE_VENDOR_FIELD, OrgNature, OvernightParkingRequestSort, OvernightParkingRequestStatus, PATROL_CCTV_CAMERA_FILTER, PATROL_EMAIL_MAX_LOGS, PATROL_EMAIL_MAX_RECIPIENTS, PERSON_TYPES, PLATFORM_STAFF_MEMBER_TYPE, PLATFORM_STAFF_ROLE_TYPE, PROPERTY_MANAGEMENT_MEMBER_TYPES, PStatus, PTZ_ALLOWED_ACTIONS, PTZ_ALLOWED_CODES, Period, PersonStatus, PersonType, PersonTypes, PlatformTermsStatus, PostOrder, PostSort, PostStatus, QrTagProps, REALTIME_MAX_FANOUT, ResidentAppModuleKey, SELF_SIGNUP_PLATFORM, SELF_SIGNUP_STATUS, SELF_SIGNUP_TYPES, SERVICE_PROVIDER_INVITE_LABELS, SERVICE_PROVIDER_INVITE_TRANSITIONS, SERVICE_PROVIDER_SIGN_IN_SUBJECT, SERVICE_PROVIDER_SIGN_IN_TYPE, SERVICE_PROVIDER_SIGN_UP_SUBJECT, SERVICE_PROVIDER_SIGN_UP_TYPE, SOFTWARE_VERSION_ENDPOINT, ServiceProviderInviteAction, ServiceProviderInviteDecision, ServiceProviderInviteFacts, SiteAddress, SiteCategories, SiteStatus, SortFields, SortOrder, Status, SubjectOrder, SubjectSort, SubscriptionBillingMode, SubscriptionType, TAccessMngmntSettings, TActionStatus, TAddress, TAffectedEntities, TAffectedInjured, TAppServiceType, TApprovedBy, TApprover, TAttendance, TAttendanceCheckIn, TAttendanceCheckOut, TAttendanceCheckTime, TAttendanceLocation, TAttendanceSettings, TAttendanceSettingsGetBySite, TAuthorities, TAuthoritiesCalled, TBidPreloved, TBilling, TBillingConfiguration, TBillingItem, TBuilding, TBuildingLevel, TBuildingUnit, TBulletinBoard, TBulletinVideo, TCamera, TCameraHealthClaim, TCategoryPreloved, TChannelPreloved, TChat, TChatPreloved, TCheckPoint$1 as TCheckPoint, TComplaintInfo, TComplaintReceivedTo, TConsoleAudit, TConsoleAuditQuery, TCounter, TCreateNfcPatrolLog, TCustomer, TCustomerSite, TCustomerSitePropertyField, TDayNumber, TDaySchedule, TDefaultAccessCard, TDesignations, TDocs, TDocumentCreate, TDocumentManagement, TEntryPassSettings, TEventManagement, TFeedback, TFeedbackMetadata, TFeedbackUpdate, TFeedbackUpdateCategory, TFeedbackUpdateServiceProvider, TFeedbackUpdateStatus, TFeedbackUpdateToCompleted, TFile, TFiles, TFolderUpdate, TFormEntry, TGetAttendancesByUserQuery, TGetAttendancesQuery, TGuestManagement, THidAmicoEvent, THidAmicoGatewayJob, THidAmicoIdentity, THidAmicoPhysicalCard, THidAmicoReader, THidPermissionAssignment, THidPermissionCategory, THidPhysicalCardInput, THidPhysicalCardType$1 as THidPhysicalCardType, THidSipAccount, THidSitePermissions, TIncidentInformation, TIncidentReport, TIncidentTypeAndTime, TInvoice, TKeyRef, TManpowerDesignations, TManpowerDesignationsUpdate, TManpowerMonitoring, TManpowerMonitoringUpdate, TManpowerRemarks, TManpowerRemarksStatusUpdate, TManpowerRemarksUpdate, TManpowerSearchFilter, TManpowerSites, TMember, TMemberUpdateStatus, TMessagePreloved, TMiniRole, TNfcPatrolLog, TNfcPatrolRoute, TNfcPatrolRouteEdit, TNfcPatrolSettings, TNfcPatrolSettingsGetBySite, TNfcPatrolSettingsUpdate, TNfcPatrolTag, TNfcPatrolTagConfigureReset, TNfcPatrolTagEdit, TNfcPatrolTagUpdateData, TNotification, TNotificationPreference, TNotificationPreferenceOff, TOccurrenceBook, TOccurrenceEntry, TOccurrenceSubject, TOnlineForm, TOrg, TOvernightParkingApprovalHours, TOvernightParkingRequest, TPatrolEmail, TPatrolEmailCreatedBy, TPatrolEmailLogRef, TPatrolLog, TPatrolQuestion, TPatrolRoute, TPerson, TPlaceOfIncident, TPlates, TPlatformTerms, TPost, TPostFavorite, TPrice, TPriceType, TPromoCode, TPromoCurrencyInput, TPromoTier, TRANSPORT_DEVICE_HTTP, TRANSPORT_RELAY_PLAYER, TRANSPORT_RTSP_FRAME, TRecipientOfComplaint, TRemarks, TResident, TResidentAppModules, TRobot, TRobotMetadata, TRole, TRoleV2, TRoute, TSOABillingItem, TSOAStatus, TServiceProvider, TServiceProviderBilling, TSession, TSessionCreate, TShifts, TSignNfcPatrolLog, TSite, TSiteCamera, TSiteFacility, TSiteFacilityBooking, TSiteInfo, TSiteInformation, TSiteMetadata, TSiteUpdateBlock, TStatementOfAccount, TSubcategoryPreloved, TSubmissionForm, TSubscription, TSubscriptionPlan, TSubscriptionPlanApplication, TUnitBilling, TUnits, TUpdateFormEntry, TUpdateName, TUser, TUserCreate, TVehicle, TVehicleTransaction, TVehicleUpdate, TVerification, TVerificationEvent, TVerificationMetadata, TVerificationMetadataV2, TVerificationV2, TVisitorTransaction, TWorkOrder, TWorkOrderMetadata, TWorkOrderUpdate, TWorkOrderUpdateStatus, TWorkOrderUpdateToCompleted, TanyoneDamageToProperty, UseAccessManagementRepo, UserStatus, VERIFICATION_OPEN_STATUSES, VehicleCategory, VehicleOrder, VehicleSort, VehicleStatus, VehicleType, VerificationLinkType, VerificationStatus, VerificationSubjectType, VerificationType, VisitorSort, VisitorStatus, addressSchema, allowedFieldsSite, allowedNatures, allowedPlanApplications, attendanceSchema, attendanceSettingsSchema, building_level_namespace_collection, building_units_namespace_collection, buildings_namespace_collection, bulletin_boards_namespace_collection, cameraBaseUrl, cameraCapabilitiesFor, cameraDevices, cameraGrant, cameraHealthClaim, cameraHealthSummary, cameraManagePermissions, cameraProbeCacheKey, cameraTransports, canRevokeRefreshTokenFamily, categoriesForPermissions, categorySupportsChannel, chatPrelovedEvents, chatSchema, clampPtzSpeed, clockDriftSeconds, console_audit_namespace_collection, createManpowerRemarksDaily, customerSchema, customerSitePropertyFields, decideServiceProviderInvite, decodeHidPacsCard, deriveCameraHost, describeCameraCapabilities, designationsSchema, deviceControlEnabled, deviceHttpEnabled, deviceHttpTargets, deviceHttpTimeoutMs, deviceProbeTtlSeconds, emitNotificationCreated, encodeHidPacsCard, events_namespace_collection, facility_bookings_namespace_collection, feedbackSchema, feedbacks2_namespace_collection, feedbacks_namespace_collection, ffmpegFrameArgs, ffmpegPath, formatCapabilityTrace, formatDahuaDate, getIO, getSessionIdFromRequest, grabWithSubStreamFallback, guests_namespace_collection, hasAnyCapability, hasAnyPermission, hidRawUint64, incidentReport, incidentReportLog, incidents_namespace_collection, isCameraEntitled, isDuplicateVersionError, isPatrolCctvCamera, isPlatformOwner, isPromoCodeExpired, isRelayPlayerUrl, isSafeRelativePath, isSuperAdmin, isTermsCurrent, logCamera, manpowerDesignationsSchema, manpowerEvents, manpowerMonitoringSchema, manpowerRemarksSchema, manpowerSitesSchema, mapWithLimit, nfcPatrolSettingsSchema, nfcPatrolSettingsSchemaUpdate, normalizeAcceptedTerms, normalizeHidCardValue, notificationCategory, notificationCategoryLabel, notificationEvents, notificationRoom, occurrence_book_namespace_collection, online_forms_namespace_collection, orgSchema, overnight_parking_requests_namespace_collection, parseCameraChannel, parseCameraHost, parseDahuaFind, parseDeviceTime, parseHidJsonLossless, parsePromoExpiry, parseSoftwareVersion, pickAuditFields, pickCustomerSiteProperties, platform_terms_namespace_collection, promoCodeRefusal, promoCodeSchema, promoCodeStatusSchema, promoCodeUpdate, promoCodeUpdateSchema, ptzEndpoint, publicCameraFields, recordConsoleAction, refuseServiceProviderInviteAction, registerCameraTransport, relayForRecorder, remarksSchema, renderPagePdf, resetCameraTransports, residentAppModuleKeys, residentFormEntry, resolutionRefusalReason, resolveCamera, resolveDeviceHttp, resolveHidPhysicalCardValue, resolveInviteActor, robotSchema, rtspUrl, schema, schemaAppSlugNotification, schemaApprovedBy, schemaApprover, schemaBidPreloved, schemaBilling, schemaBillingConfiguration, schemaBillingItem, schemaBuilding, schemaBuildingLevel, schemaBuildingUnit, schemaBuildingUpdateOptions, schemaBulletinBoard, schemaBulletinVideo, schemaCategoryPreloved, schemaChannelPreloved, schemaChatPreloved, schemaConsoleAudit, schemaCreateHidAmicoIdentity, schemaCreateNfcPatrolLog, schemaCreateNotification, schemaCustomerSite, schemaDiscoverHidAmicoReader, schemaDocumentManagement, schemaEntryPassSettings, schemaEventManagement, schemaFiles, schemaFormEntry, schemaGuestManagement, schemaHidAmicoAccessLogQuery, schemaHidAmicoAssignUserCard, schemaHidAmicoConfiguration, schemaHidAmicoEnrollUserCard, schemaHidAmicoEvent, schemaHidAmicoExecuteActions, schemaHidAmicoIdentity, schemaHidAmicoIdentityIdParams, schemaHidAmicoIdentityQuery, schemaHidAmicoIntercomCall, schemaHidAmicoLogQuery, schemaHidAmicoMonitor, schemaHidAmicoNotificationParams, schemaHidAmicoObjectOperation, schemaHidAmicoOperatingMode, schemaHidAmicoReader, schemaHidAmicoReaderIdParams, schemaHidAmicoReaderListQuery, schemaHidAmicoReaderUserQuery, schemaHidAmicoSetConfiguration, schemaHidAmicoSiteIdParams, schemaHidAmicoSync, schemaHidAmicoUserCardIdParams, schemaHidAmicoUserCardParams, schemaHidAmicoUserImageParams, schemaHidAmicoUserImageUploadQuery, schemaHidAmicoUserPin, schemaHidAmicoUserPinParams, schemaHidAmicoVisitorImageParams, schemaHidAmicoVisitorImageUploadQuery, schemaHidAmicoVisitorQr, schemaHidPermissionCandidateQuery, schemaHidPermissionScopeQuery, schemaHidSipAccountRequest, schemaIncidentReport, schemaListNotification, schemaMultipleDocumentManagement, schemaNfcPatrolLog, schemaNfcPatrolRoute, schemaNfcPatrolTag, schemaNfcPatrolTagUpdateData, schemaNotification, schemaNotificationPreference, schemaNotificationPreferenceOff, schemaOccurrenceBook, schemaOccurrenceEntry, schemaOccurrenceSubject, schemaOnlineForm, schemaOvernightParkingApprovalHours, schemaOvernightParkingRequest, schemaPatrolEmail, schemaPatrolEmailCreatedBy, schemaPatrolEmailLogRef, schemaPatrolLog, schemaPatrolQuestion, schemaPatrolRoute, schemaPerson, schemaPlate, schemaPlatformTerms, schemaPost, schemaPostFavorite, schemaResidentSelfSignUp, schemaSendPatrolEmail, schemaServiceProvider, schemaServiceProviderBilling, schemaSignNfcPatrolLog, schemaSiteCamera, schemaSiteFacility, schemaSiteFacilityBooking, schemaStatementOfAccount, schemaSubcategoryPreloved, schemaUnitBilling, schemaUpdateBidPreloved, schemaUpdateBuildingLevel, schemaUpdateBulletinBoard, schemaUpdateBulletinVideo, schemaUpdateCategoryPreloved, schemaUpdateChatPreloved, schemaUpdateDocumentManagement, schemaUpdateEntryPassSettings, schemaUpdateEventManagement, schemaUpdateFolderManagement, schemaUpdateFormEntry, schemaUpdateGuestManagement, schemaUpdateHidAmicoIdentity, schemaUpdateHidAmicoReader, schemaUpdateHidSitePermissions, schemaUpdateIncidentReport, schemaUpdateNotification, schemaUpdateNotificationPreference, schemaUpdateOccurrenceBook, schemaUpdateOccurrenceEntry, schemaUpdateOccurrenceSubject, schemaUpdateOnlineForm, schemaUpdateOptions, schemaUpdateOvernightParkingRequest, schemaUpdatePatrolLog, schemaUpdatePatrolQuestion, schemaUpdatePatrolRoute, schemaUpdatePerson, schemaUpdatePost, schemaUpdatePostFavorite, schemaUpdateServiceProviderBilling, schemaUpdateSiteBillingConfiguration, schemaUpdateSiteBillingItem, schemaUpdateSiteCamera, schemaUpdateSiteFacility, schemaUpdateSiteFacilityBooking, schemaUpdateSiteUnitBilling, schemaUpdateStatementOfAccount, schemaUpdateSubcategoryPreloved, schemaUpdateVisTrans, schemaVehicleTransaction, schemaVisitorTransaction, schemeCamera, schemeLogCamera, serviceProviderInviteLabel, sessionSchema, setIO, shiftSchema, siteSchema, site_people_namespace_collection, snapshotEndpoint, snapshotRefusalReason, stringifyHidJson, subscriptionPlanSchema, updateRemarksStatusEod, updateRemarksisAcknowledged, updateSiteSchema, useAccessManagementController, useAddressRepo, useAttendanceController, useAttendanceRepository, useAttendanceSettingsController, useAttendanceSettingsRepository, useAttendanceSettingsService, useAuthController, useAuthControllerV2, useAuthService, useAuthServiceV2, useBidPrelovedController, useBidPrelovedRepo, useBidPrelovedService, useBuildingController, useBuildingLevelController, useBuildingLevelRepo, useBuildingLevelService, useBuildingRepo, useBuildingService, useBuildingUnitController, useBuildingUnitRepo, useBuildingUnitService, useBulletinBoardController, useBulletinBoardRepo, useBulletinBoardService, useBulletinVideoController, useBulletinVideoRepo, useBulletinVideoService, useCameraViewController, useCameraViewService, useCategoryPrelovedController, useCategoryPrelovedRepo, useChannelPrelovedController, useChannelPrelovedRepo, useChatController, useChatPrelovedController, useChatPrelovedRepo, useChatPrelovedService, useChatRepo, useConsoleAuditController, useConsoleAuditRepo, useCounterModel, useCounterRepo, useCustomerController, useCustomerRepo, useCustomerSiteController, useCustomerSiteRepo, useCustomerSiteService, useDahuaService, useDashboardController, useDashboardRepo, useDocumentManagementController, useDocumentManagementRepo, useDocumentManagementService, useEntryPassSettingsController, useEntryPassSettingsRepo, useEventManagementController, useEventManagementRepo, useEventManagementService, useFeedbackController, useFeedbackRepo, useFeedbackService, useFileController, useFileRepo, useFileService, useFormEntryController, useFormEntryRepo, useGuestManagementController, useGuestManagementRepo, useGuestManagementService, useHidAmicoController, useHidAmicoRepo, useHidAmicoService, useHrmLabsAttendanceCtrl, useHrmLabsAttendanceSrvc, useIncidentReportController, useIncidentReportRepo, useIncidentReportService, useInvoiceController, useInvoiceModel, useInvoiceRepo, useManpowerDesignationCtrl, useManpowerDesignationRepo, useManpowerMonitoringCtrl, useManpowerMonitoringRepo, useManpowerMonitoringSrvc, useManpowerRemarkCtrl, useManpowerRemarksRepo, useManpowerSitesCtrl, useManpowerSitesRepo, useManpowerSitesSrvc, useMemberController, useMemberRepo, useMemberService, useNewDashboardController, useNewDashboardRepo, useNfcPatrolLogController, useNfcPatrolLogRepo, useNfcPatrolLogService, useNfcPatrolRouteController, useNfcPatrolRouteRepo, useNfcPatrolRouteService, useNfcPatrolSettingsController, useNfcPatrolSettingsRepository, useNfcPatrolSettingsService, useNfcPatrolTagController, useNfcPatrolTagRepo, useNfcPatrolTagService, useNotificationController, useNotificationPreferenceController, useNotificationPreferenceRepo, useNotificationPreferenceService, useNotificationRepo, useOccurrenceBookController, useOccurrenceBookRepo, useOccurrenceBookService, useOccurrenceEntryController, useOccurrenceEntryRepo, useOccurrenceEntryService, useOccurrenceSubjectController, useOccurrenceSubjectRepo, useOccurrenceSubjectService, useOnlineFormController, useOnlineFormRepo, useOrgController, useOrgControllerV2, useOrgRepo, useOvernightParkingController, useOvernightParkingRepo, useOvernightParkingRequestController, useOvernightParkingRequestRepo, useOvernightParkingRequestService, usePatrolEmailController, usePatrolEmailRepo, usePatrolEmailService, usePatrolLogController, usePatrolLogRepo, usePatrolLogService, usePatrolQuestionController, usePatrolQuestionRepo, usePatrolRouteController, usePatrolRouteRepo, usePersonController, usePersonRepo, usePlatformTermsController, usePlatformTermsRepo, usePlatformTermsService, usePostFavoriteController, usePostFavoriteRepo, usePostFavoriteService, usePostPrelovedController, usePostPrelovedRepo, usePriceController, usePriceModel, usePriceRepo, usePromoCodeController, usePromoCodeRepo, useRedDotPaymentController, useRedDotPaymentRepo, useRedDotPaymentSvc, useRobotController, useRobotRepo, useRobotService, useRoleController, useRoleControllerV2, useRoleRepo, useRoleRepoV2, useRoleServiceV2, useServiceProviderBillingController, useServiceProviderBillingRepo, useServiceProviderBillingService, useServiceProviderController, useServiceProviderInviteController, useServiceProviderInviteService, useServiceProviderRepo, useSessionRepo, useSiteBillingConfigurationController, useSiteBillingConfigurationRepo, useSiteBillingItemController, useSiteBillingItemRepo, useSiteCameraController, useSiteCameraRepo, useSiteCameraService, useSiteController, useSiteFacilityBookingController, useSiteFacilityBookingRepo, useSiteFacilityBookingService, useSiteFacilityController, useSiteFacilityRepo, useSiteFacilityService, useSiteRepo, useSiteService, useSiteUnitBillingController, useSiteUnitBillingRepo, useSiteUnitBillingService, useStatementOfAccountController, useStatementOfAccountRepo, useSubcategoryPrelovedController, useSubcategoryPrelovedRepo, useSubscriptionController, useSubscriptionPlanController, useSubscriptionPlanRepo, useSubscriptionRepo, useSubscriptionService, useUserController, useUserControllerV2, useUserRepo, useUserRepoV2, useUserService, useUserServiceV2, useVehicleController, useVehicleRepo, useVehicleService, useVerificationController, useVerificationControllerV2, useVerificationRepo, useVerificationRepoV2, useVerificationService, useVerificationServiceV2, useVisitorTransactionController, useVisitorTransactionRepo, useVisitorTransactionService, useWorkOrderController, useWorkOrderRepo, useWorkOrderService, userSchema, vehicleSchema, vehicles_namespace_collection, visitorPersonRepo, visitorPersonService, visitorType, visitors_namespace_collection, wallConfig, workOrderSchema, work_orders2_namespace_collection, work_orders_namespace_collection };
|
package/dist/index.js
CHANGED
|
@@ -6065,6 +6065,9 @@ __export(src_exports, {
|
|
|
6065
6065
|
PostSort: () => PostSort,
|
|
6066
6066
|
PostStatus: () => PostStatus,
|
|
6067
6067
|
REALTIME_MAX_FANOUT: () => REALTIME_MAX_FANOUT,
|
|
6068
|
+
SELF_SIGNUP_PLATFORM: () => SELF_SIGNUP_PLATFORM,
|
|
6069
|
+
SELF_SIGNUP_STATUS: () => SELF_SIGNUP_STATUS,
|
|
6070
|
+
SELF_SIGNUP_TYPES: () => SELF_SIGNUP_TYPES,
|
|
6068
6071
|
SERVICE_PROVIDER_INVITE_LABELS: () => SERVICE_PROVIDER_INVITE_LABELS,
|
|
6069
6072
|
SERVICE_PROVIDER_INVITE_TRANSITIONS: () => SERVICE_PROVIDER_INVITE_TRANSITIONS,
|
|
6070
6073
|
SERVICE_PROVIDER_SIGN_IN_SUBJECT: () => SERVICE_PROVIDER_SIGN_IN_SUBJECT,
|
|
@@ -6308,6 +6311,7 @@ __export(src_exports, {
|
|
|
6308
6311
|
schemaPlatformTerms: () => schemaPlatformTerms,
|
|
6309
6312
|
schemaPost: () => schemaPost,
|
|
6310
6313
|
schemaPostFavorite: () => schemaPostFavorite,
|
|
6314
|
+
schemaResidentSelfSignUp: () => schemaResidentSelfSignUp,
|
|
6311
6315
|
schemaSendPatrolEmail: () => schemaSendPatrolEmail,
|
|
6312
6316
|
schemaServiceProvider: () => schemaServiceProvider,
|
|
6313
6317
|
schemaServiceProviderBilling: () => schemaServiceProviderBilling,
|
|
@@ -8973,6 +8977,17 @@ function useUserRepo() {
|
|
|
8973
8977
|
throw new import_node_server_utils11.InternalServerError("Failed to get user by email.");
|
|
8974
8978
|
}
|
|
8975
8979
|
}
|
|
8980
|
+
async function userExistsByEmail(email) {
|
|
8981
|
+
try {
|
|
8982
|
+
const data = await collection.findOne(
|
|
8983
|
+
{ email: { $regex: `^${email}$`, $options: "i" } },
|
|
8984
|
+
{ projection: { _id: 1 } }
|
|
8985
|
+
);
|
|
8986
|
+
return Boolean(data);
|
|
8987
|
+
} catch (error) {
|
|
8988
|
+
throw new import_node_server_utils11.InternalServerError("Failed to get user by email.");
|
|
8989
|
+
}
|
|
8990
|
+
}
|
|
8976
8991
|
async function getUserByEmailStatus(email) {
|
|
8977
8992
|
try {
|
|
8978
8993
|
const cacheOptions = {
|
|
@@ -9624,6 +9639,7 @@ function useUserRepo() {
|
|
|
9624
9639
|
getAcceptedTerms,
|
|
9625
9640
|
listTermsAcceptance,
|
|
9626
9641
|
getUserByEmail,
|
|
9642
|
+
userExistsByEmail,
|
|
9627
9643
|
getUserByReferralCode,
|
|
9628
9644
|
getByEmailApp,
|
|
9629
9645
|
getUserById,
|
|
@@ -17171,6 +17187,29 @@ var schemaPerson = import_joi17.default.object({
|
|
|
17171
17187
|
acceptedTerms: import_joi17.default.string().hex().length(24).optional().allow(null),
|
|
17172
17188
|
acceptedTermsAt: import_joi17.default.string().optional().allow(null)
|
|
17173
17189
|
});
|
|
17190
|
+
var SELF_SIGNUP_STATUS = "pending";
|
|
17191
|
+
var SELF_SIGNUP_PLATFORM = "mobile";
|
|
17192
|
+
var SELF_SIGNUP_TYPES = ["resident", "tenant"];
|
|
17193
|
+
var schemaResidentSelfSignUp = import_joi17.default.object({
|
|
17194
|
+
name: import_joi17.default.string().required(),
|
|
17195
|
+
email: import_joi17.default.string().email().required(),
|
|
17196
|
+
password: import_joi17.default.string().required(),
|
|
17197
|
+
type: import_joi17.default.string().trim().lowercase().valid(...SELF_SIGNUP_TYPES).required(),
|
|
17198
|
+
isOwner: import_joi17.default.boolean().required(),
|
|
17199
|
+
site: import_joi17.default.string().hex().length(24).optional().allow(null, ""),
|
|
17200
|
+
org: import_joi17.default.string().hex().length(24).optional().allow(null, ""),
|
|
17201
|
+
block: import_joi17.default.string().hex().length(24).optional().allow(null, ""),
|
|
17202
|
+
level: import_joi17.default.string().hex().length(24).optional().allow(null, ""),
|
|
17203
|
+
unit: import_joi17.default.string().hex().length(24).optional().allow(null, ""),
|
|
17204
|
+
unitName: import_joi17.default.string().optional().allow(null, ""),
|
|
17205
|
+
contact: import_joi17.default.string().optional().allow(null, ""),
|
|
17206
|
+
countryCode: import_joi17.default.string().optional().allow(null, ""),
|
|
17207
|
+
callingCode: import_joi17.default.string().optional().allow(null, ""),
|
|
17208
|
+
nric: import_joi17.default.string().optional().allow(null, ""),
|
|
17209
|
+
plateNumber: import_joi17.default.string().optional().allow(null, ""),
|
|
17210
|
+
files: import_joi17.default.array().items(schemaFiles).optional().allow(null),
|
|
17211
|
+
acceptedTerms: import_joi17.default.string().hex().length(24).optional().allow(null)
|
|
17212
|
+
});
|
|
17174
17213
|
var schemaUpdatePerson = import_joi17.default.object({
|
|
17175
17214
|
_id: import_joi17.default.string().hex().required(),
|
|
17176
17215
|
name: import_joi17.default.string().optional().allow(null, ""),
|
|
@@ -18238,11 +18277,20 @@ async function requirePlatformOwner(req) {
|
|
|
18238
18277
|
return id;
|
|
18239
18278
|
}
|
|
18240
18279
|
|
|
18280
|
+
// src/utils/user-response.util.ts
|
|
18281
|
+
function withoutCredentials(user) {
|
|
18282
|
+
if (!user || typeof user !== "object")
|
|
18283
|
+
return user;
|
|
18284
|
+
const { password, sid, ...rest } = user;
|
|
18285
|
+
return rest;
|
|
18286
|
+
}
|
|
18287
|
+
|
|
18241
18288
|
// src/controllers/user.controller.ts
|
|
18242
18289
|
function useUserController() {
|
|
18243
18290
|
const {
|
|
18244
18291
|
getUserById: _getById,
|
|
18245
18292
|
getUserByEmail: _getByEmail,
|
|
18293
|
+
userExistsByEmail: _existsByEmail,
|
|
18246
18294
|
getUsers: _getUsers,
|
|
18247
18295
|
updateBirthday: _updateBirthday,
|
|
18248
18296
|
updateUserFieldById: _updateUserFieldById,
|
|
@@ -18320,8 +18368,13 @@ function useUserController() {
|
|
|
18320
18368
|
return;
|
|
18321
18369
|
}
|
|
18322
18370
|
try {
|
|
18371
|
+
if (!callerId(req)) {
|
|
18372
|
+
const exists = await _existsByEmail(email);
|
|
18373
|
+
res.json(exists ? { exists: true } : null);
|
|
18374
|
+
return;
|
|
18375
|
+
}
|
|
18323
18376
|
const user = await _getByEmail(email);
|
|
18324
|
-
res.json(user);
|
|
18377
|
+
res.json(withoutCredentials(user));
|
|
18325
18378
|
return;
|
|
18326
18379
|
} catch (error2) {
|
|
18327
18380
|
import_node_server_utils42.logger.log({ level: "error", message: `${error2.message}` });
|
|
@@ -50769,7 +50822,45 @@ function usePersonController() {
|
|
|
50769
50822
|
}
|
|
50770
50823
|
return actor;
|
|
50771
50824
|
}
|
|
50825
|
+
async function addResidentSelfSignUp(req, res, next) {
|
|
50826
|
+
const { error, value } = schemaResidentSelfSignUp.validate(req.body, {
|
|
50827
|
+
abortEarly: false,
|
|
50828
|
+
stripUnknown: true
|
|
50829
|
+
});
|
|
50830
|
+
if (error) {
|
|
50831
|
+
const messages = error.details.map((d) => d.message).join(", ");
|
|
50832
|
+
import_node_server_utils138.logger.log({ level: "error", message: messages });
|
|
50833
|
+
next(new import_node_server_utils138.BadRequestError(messages));
|
|
50834
|
+
return;
|
|
50835
|
+
}
|
|
50836
|
+
const payload = {
|
|
50837
|
+
...value,
|
|
50838
|
+
// Pinned, not accepted. The wizard hard-codes both
|
|
50839
|
+
// (`createUser.tsx:151` and `:237` for status, `:150` for platform) and
|
|
50840
|
+
// never sends anything else.
|
|
50841
|
+
//
|
|
50842
|
+
// `platform` matters as much as `status` here: `person.service.ts:130`
|
|
50843
|
+
// reads it to decide whether the USER ACCOUNT it creates starts
|
|
50844
|
+
// "pending" or "active", so a caller who sent `platform: "web"` got a
|
|
50845
|
+
// live account without anyone reviewing them.
|
|
50846
|
+
status: SELF_SIGNUP_STATUS,
|
|
50847
|
+
platform: SELF_SIGNUP_PLATFORM
|
|
50848
|
+
};
|
|
50849
|
+
try {
|
|
50850
|
+
const data = await _add(payload);
|
|
50851
|
+
res.status(201).json({ message: data });
|
|
50852
|
+
return;
|
|
50853
|
+
} catch (err) {
|
|
50854
|
+
import_node_server_utils138.logger.log({ level: "error", message: err.message });
|
|
50855
|
+
next(err);
|
|
50856
|
+
return;
|
|
50857
|
+
}
|
|
50858
|
+
}
|
|
50772
50859
|
async function add(req, res, next) {
|
|
50860
|
+
if (!callerId(req)) {
|
|
50861
|
+
await addResidentSelfSignUp(req, res, next);
|
|
50862
|
+
return;
|
|
50863
|
+
}
|
|
50773
50864
|
const payload = { ...req.body };
|
|
50774
50865
|
const { error } = schemaPerson.validate(payload, {
|
|
50775
50866
|
abortEarly: false
|
|
@@ -82167,7 +82258,7 @@ function useUserControllerV2() {
|
|
|
82167
82258
|
return rejectValidation(error, next);
|
|
82168
82259
|
try {
|
|
82169
82260
|
const user = await _getUserByEmail(value);
|
|
82170
|
-
res.json(user);
|
|
82261
|
+
res.json(withoutCredentials(user));
|
|
82171
82262
|
return;
|
|
82172
82263
|
} catch (err) {
|
|
82173
82264
|
import_node_server_utils267.logger.log({ level: "error", message: `${err.message}` });
|
|
@@ -87715,6 +87806,9 @@ function useNotificationPreferenceController() {
|
|
|
87715
87806
|
PostSort,
|
|
87716
87807
|
PostStatus,
|
|
87717
87808
|
REALTIME_MAX_FANOUT,
|
|
87809
|
+
SELF_SIGNUP_PLATFORM,
|
|
87810
|
+
SELF_SIGNUP_STATUS,
|
|
87811
|
+
SELF_SIGNUP_TYPES,
|
|
87718
87812
|
SERVICE_PROVIDER_INVITE_LABELS,
|
|
87719
87813
|
SERVICE_PROVIDER_INVITE_TRANSITIONS,
|
|
87720
87814
|
SERVICE_PROVIDER_SIGN_IN_SUBJECT,
|
|
@@ -87958,6 +88052,7 @@ function useNotificationPreferenceController() {
|
|
|
87958
88052
|
schemaPlatformTerms,
|
|
87959
88053
|
schemaPost,
|
|
87960
88054
|
schemaPostFavorite,
|
|
88055
|
+
schemaResidentSelfSignUp,
|
|
87961
88056
|
schemaSendPatrolEmail,
|
|
87962
88057
|
schemaServiceProvider,
|
|
87963
88058
|
schemaServiceProviderBilling,
|