@tellescope/schema 1.253.0 → 1.254.0
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/lib/cjs/schema.d.ts +1 -0
- package/lib/cjs/schema.d.ts.map +1 -1
- package/lib/cjs/schema.js +85 -30
- package/lib/cjs/schema.js.map +1 -1
- package/lib/esm/schema.d.ts +1 -0
- package/lib/esm/schema.d.ts.map +1 -1
- package/lib/esm/schema.js +86 -31
- package/lib/esm/schema.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/src/schema.ts +123 -55
package/lib/cjs/schema.js
CHANGED
|
@@ -10,6 +10,15 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
14
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
15
|
+
if (ar || !(i in from)) {
|
|
16
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
17
|
+
ar[i] = from[i];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
|
+
};
|
|
13
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
23
|
exports.schema = exports.build_schema = exports.UNIQUE_LIST_FIELDS = exports.get_next_reminder_timestamp_for_ticket = void 0;
|
|
15
24
|
var types_models_1 = require("@tellescope/types-models");
|
|
@@ -189,9 +198,10 @@ exports.schema = (0, exports.build_schema)({
|
|
|
189
198
|
add_to_journey: {}, remove_from_journey: {}, begin_login_flow: {}, set_password: {},
|
|
190
199
|
unsubscribe: {},
|
|
191
200
|
},
|
|
192
|
-
fields: __assign(__assign({}, BuiltInFields), { recentViewers: { validator: validation_1.recentViewersValidator }, healthie_dietitian_id: { validator: validation_1.stringValidator100 }, mergedIds: { validator: validation_1.listOfMongoIdStringValidatorOptionalOrEmptyOk, readonly: true, redactions: ['enduser'] }, externalId: {
|
|
201
|
+
fields: __assign(__assign({}, BuiltInFields), { sharedWithOrganizations: __assign(__assign({}, BuiltInFields.sharedWithOrganizations), { enduserUpdatesDisabled: true }), recentViewers: { validator: validation_1.recentViewersValidator }, healthie_dietitian_id: { validator: validation_1.stringValidator100, enduserUpdatesDisabled: true }, mergedIds: { validator: validation_1.listOfMongoIdStringValidatorOptionalOrEmptyOk, readonly: true, redactions: ['enduser'] }, externalId: {
|
|
193
202
|
validator: validation_1.stringValidator250,
|
|
194
203
|
examples: ['addfed3e-ddea-415b-b52b-df820c944dbb'],
|
|
204
|
+
enduserUpdatesDisabled: true,
|
|
195
205
|
}, email: {
|
|
196
206
|
validator: validation_1.emailValidatorEmptyOkay,
|
|
197
207
|
examples: ['test@tellescope.com'],
|
|
@@ -233,6 +243,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
233
243
|
}, journeys: {
|
|
234
244
|
validator: validation_1.journeysValidator,
|
|
235
245
|
redactions: ['enduser'],
|
|
246
|
+
enduserUpdatesDisabled: true,
|
|
236
247
|
dependencies: [
|
|
237
248
|
{
|
|
238
249
|
dependsOn: ['journeys'],
|
|
@@ -249,14 +260,17 @@ exports.schema = (0, exports.build_schema)({
|
|
|
249
260
|
}, scheduledJourneys: { validator: validation_1.scheduledJourneysValidator }, tags: {
|
|
250
261
|
redactions: ['enduser'],
|
|
251
262
|
validator: validation_1.listOfStringsValidatorUniqueOptionalOrEmptyOkay,
|
|
263
|
+
enduserUpdatesDisabled: true,
|
|
252
264
|
}, accessTags: {
|
|
253
265
|
redactions: ['enduser'],
|
|
254
266
|
validator: validation_1.listOfStringsValidatorEmptyOk,
|
|
267
|
+
enduserUpdatesDisabled: true,
|
|
255
268
|
}, unredactedTags: {
|
|
256
269
|
validator: validation_1.listOfStringsValidatorEmptyOk,
|
|
257
270
|
}, fields: {
|
|
258
271
|
redactions: ['enduser'],
|
|
259
272
|
validator: validation_1.fieldsValidator,
|
|
273
|
+
enduserUpdatesDisabled: true, // intake forms write fields server-side; direct enduser PATCH is not a supported path
|
|
260
274
|
}, unredactedFields: {
|
|
261
275
|
validator: validation_1.fieldsValidator,
|
|
262
276
|
}, preference: {
|
|
@@ -265,12 +279,15 @@ exports.schema = (0, exports.build_schema)({
|
|
|
265
279
|
}, assignedTo: {
|
|
266
280
|
redactions: ['enduser'],
|
|
267
281
|
validator: validation_1.listOfUniqueStringsValidatorEmptyOk,
|
|
282
|
+
enduserUpdatesDisabled: true,
|
|
268
283
|
}, primaryAssignee: {
|
|
269
284
|
validator: validation_1.mongoIdStringRequired,
|
|
270
285
|
redactions: ['enduser'],
|
|
286
|
+
enduserUpdatesDisabled: true,
|
|
271
287
|
}, unread: {
|
|
272
288
|
redactions: ['enduser'],
|
|
273
289
|
validator: validation_1.booleanValidator,
|
|
290
|
+
enduserUpdatesDisabled: true,
|
|
274
291
|
}, lastActive: {
|
|
275
292
|
validator: validation_1.dateValidator,
|
|
276
293
|
}, lastLogout: { validator: validation_1.dateValidator }, invalidateSessionsBefore: { validator: validation_1.dateValidator }, termsSigned: { validator: validation_1.dateValidator }, termsVersion: { validator: validation_1.stringValidator100 }, lastCommunication: {
|
|
@@ -293,12 +310,12 @@ exports.schema = (0, exports.build_schema)({
|
|
|
293
310
|
// ]
|
|
294
311
|
},
|
|
295
312
|
// should allow any gender via API but our UI can limit to Tellescope types by default
|
|
296
|
-
gender: { validator: validation_1.stringValidator, redactions: ['enduser'] }, genderIdentity: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, pronouns: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, height: { validator: validation_1.genericUnitWithQuantityValidator, redactions: ['enduser'] }, weight: { validator: validation_1.genericUnitWithQuantityValidator, redactions: ['enduser'] }, source: { validator: validation_1.stringValidator1000Optional }, addressLineOne: { validator: validation_1.stringValidator5000EmptyOkay, redactions: ['enduser'] }, addressLineTwo: { validator: validation_1.stringValidator5000EmptyOkay, redactions: ['enduser'] }, city: { validator: validation_1.stringValidator5000EmptyOkay, redactions: ['enduser'] }, state: { validator: validation_1.stateValidator, redactions: ['enduser'] }, zipCode: { validator: validation_1.stringValidator25000EmptyOkay, redactions: ['enduser'] }, zipPlusFour: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, timezone: { validator: validation_1.timezoneValidator }, humanReadableId: { validator: validation_1.stringValidator100 }, displayName: { validator: validation_1.stringValidator250 }, unsubscribedFromPortalChatNotifications: { validator: validation_1.booleanValidator }, triggeredEvents: { validator: (0, validation_1.objectAnyFieldsValidator)(validation_1.numberValidator) }, customTypeId: { validator: validation_1.mongoIdStringRequired }, language: { validator: validation_1.languageValidator }, relationships: {
|
|
313
|
+
gender: { validator: validation_1.stringValidator, redactions: ['enduser'] }, genderIdentity: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, pronouns: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, height: { validator: validation_1.genericUnitWithQuantityValidator, redactions: ['enduser'] }, weight: { validator: validation_1.genericUnitWithQuantityValidator, redactions: ['enduser'] }, source: { validator: validation_1.stringValidator1000Optional, enduserUpdatesDisabled: true }, addressLineOne: { validator: validation_1.stringValidator5000EmptyOkay, redactions: ['enduser'] }, addressLineTwo: { validator: validation_1.stringValidator5000EmptyOkay, redactions: ['enduser'] }, city: { validator: validation_1.stringValidator5000EmptyOkay, redactions: ['enduser'] }, state: { validator: validation_1.stateValidator, redactions: ['enduser'] }, zipCode: { validator: validation_1.stringValidator25000EmptyOkay, redactions: ['enduser'] }, zipPlusFour: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, timezone: { validator: validation_1.timezoneValidator }, humanReadableId: { validator: validation_1.stringValidator100 }, displayName: { validator: validation_1.stringValidator250 }, unsubscribedFromPortalChatNotifications: { validator: validation_1.booleanValidator }, triggeredEvents: { validator: (0, validation_1.objectAnyFieldsValidator)(validation_1.numberValidator) }, customTypeId: { validator: validation_1.mongoIdStringRequired, enduserUpdatesDisabled: true }, language: { validator: validation_1.languageValidator }, relationships: {
|
|
297
314
|
validator: (0, validation_1.listValidatorOptionalOrEmptyOk)((0, validation_1.objectValidator)({
|
|
298
315
|
id: validation_1.mongoIdStringRequired,
|
|
299
316
|
type: validation_1.stringValidator100,
|
|
300
317
|
}))
|
|
301
|
-
}, markedReadAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, markedUnreadAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, note: { validator: validation_1.stringValidator25000EmptyOkay, redactions: ['enduser'] }, noteIsFlagged: { validator: validation_1.booleanValidator }, insurance: { validator: validation_1.insuranceOptionalValidator, redactions: ['enduser'] }, insuranceSecondary: { validator: validation_1.insuranceOptionalValidator, redactions: ['enduser'] }, bookingNotes: {
|
|
318
|
+
}, markedReadAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, markedUnreadAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, note: { validator: validation_1.stringValidator25000EmptyOkay, redactions: ['enduser'], enduserUpdatesDisabled: true }, noteIsFlagged: { validator: validation_1.booleanValidator }, insurance: { validator: validation_1.insuranceOptionalValidator, redactions: ['enduser'], enduserUpdatesDisabled: true }, insuranceSecondary: { validator: validation_1.insuranceOptionalValidator, redactions: ['enduser'], enduserUpdatesDisabled: true }, bookingNotes: {
|
|
302
319
|
validator: (0, validation_1.listValidatorOptionalOrEmptyOk)((0, validation_1.objectValidator)({
|
|
303
320
|
bookingPageId: validation_1.mongoIdStringRequired,
|
|
304
321
|
note: validation_1.stringValidator5000EmptyOkay,
|
|
@@ -313,10 +330,11 @@ exports.schema = (0, exports.build_schema)({
|
|
|
313
330
|
archivedAt: validation_1.dateValidatorOptional,
|
|
314
331
|
})),
|
|
315
332
|
redactions: ['enduser'],
|
|
316
|
-
}, references: { validator: validation_1.listOfRelatedRecordsValidator, redactions: ['enduser'] }, athenaDepartmentId: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, athenaPracticeId: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, salesforceId: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, vitalTriggersDisabled: { validator: validation_1.booleanValidator }, defaultFromPhone: { validator: validation_1.phoneValidator, redactions: ['enduser'] }, defaultFromEmail: { validator: validation_1.emailValidator, redactions: ['enduser'] }, useDefaultFromEmailInAutomations: { validator: validation_1.booleanValidator }, useDefaultFromPhoneInAutomations: { validator: validation_1.booleanValidator }, stripeCustomerId: { validator: validation_1.stringValidator100, redactions: ['enduser'] }, stripeKey: { validator: validation_1.stringValidator250, redactions: ['enduser'] }, diagnoses: {
|
|
333
|
+
}, references: { validator: validation_1.listOfRelatedRecordsValidator, redactions: ['enduser'], enduserUpdatesDisabled: true }, athenaDepartmentId: { validator: validation_1.stringValidator100, redactions: ['enduser'], enduserUpdatesDisabled: true }, athenaPracticeId: { validator: validation_1.stringValidator100, redactions: ['enduser'], enduserUpdatesDisabled: true }, salesforceId: { validator: validation_1.stringValidator100, redactions: ['enduser'], enduserUpdatesDisabled: true }, vitalTriggersDisabled: { validator: validation_1.booleanValidator }, defaultFromPhone: { validator: validation_1.phoneValidator, redactions: ['enduser'] }, defaultFromEmail: { validator: validation_1.emailValidator, redactions: ['enduser'] }, useDefaultFromEmailInAutomations: { validator: validation_1.booleanValidator }, useDefaultFromPhoneInAutomations: { validator: validation_1.booleanValidator }, stripeCustomerId: { validator: validation_1.stringValidator100, redactions: ['enduser'], enduserUpdatesDisabled: true }, stripeKey: { validator: validation_1.stringValidator250, redactions: ['enduser'], enduserUpdatesDisabled: true }, diagnoses: {
|
|
317
334
|
validator: (0, validation_1.listValidatorOptionalOrEmptyOk)(validation_1.enduserDiagnosisValidator),
|
|
318
|
-
redactions: ['enduser']
|
|
319
|
-
|
|
335
|
+
redactions: ['enduser'],
|
|
336
|
+
enduserUpdatesDisabled: true,
|
|
337
|
+
}, unsubscribedFromPhones: { validator: validation_1.listOfStringsValidatorUniqueOptionalOrEmptyOkay, redactions: ['enduser'] }, lockedFromPortal: { validator: validation_1.booleanValidator, enduserUpdatesDisabled: true }, eligibleForAutoMerge: { validator: validation_1.booleanValidator, enduserUpdatesDisabled: true }, preferredPharmacy: { validator: validation_1.pharmacyValidator, redactions: ['enduser'] } }),
|
|
320
338
|
customActions: {
|
|
321
339
|
rename_stored_custom_fields: {
|
|
322
340
|
op: "custom", access: 'update', method: "patch",
|
|
@@ -1180,7 +1198,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
1180
1198
|
},
|
|
1181
1199
|
journeys: {
|
|
1182
1200
|
info: {},
|
|
1183
|
-
fields: __assign(__assign({}, BuiltInFields), { archivedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, title: {
|
|
1201
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, archivedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, title: {
|
|
1184
1202
|
validator: validation_1.stringValidator100,
|
|
1185
1203
|
required: true,
|
|
1186
1204
|
examples: ['Test']
|
|
@@ -1872,8 +1890,10 @@ exports.schema = (0, exports.build_schema)({
|
|
|
1872
1890
|
var _c;
|
|
1873
1891
|
var _id = _a._id;
|
|
1874
1892
|
var updates = _b.updates;
|
|
1875
|
-
|
|
1876
|
-
|
|
1893
|
+
// editing a user's tags is a privilege-escalation vector whenever tags gate visibility:
|
|
1894
|
+
// enduser access tags (eat) OR resource access tags (erat). Skip only when neither is enabled.
|
|
1895
|
+
if (session.type === 'user' && !session.eat && !(session === null || session === void 0 ? void 0 : session.erat))
|
|
1896
|
+
return; // neither access-tags feature enabled
|
|
1877
1897
|
if ((_c = session === null || session === void 0 ? void 0 : session.roles) === null || _c === void 0 ? void 0 : _c.includes('Admin'))
|
|
1878
1898
|
return;
|
|
1879
1899
|
if (method === 'create')
|
|
@@ -2554,7 +2574,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
2554
2574
|
},
|
|
2555
2575
|
},
|
|
2556
2576
|
},
|
|
2557
|
-
fields: __assign(__assign({}, BuiltInFields), { archivedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, mmsAttachmentURLs: { validator: validation_1.listOfUniqueStringsValidatorEmptyOk }, title: {
|
|
2577
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, archivedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, mmsAttachmentURLs: { validator: validation_1.listOfUniqueStringsValidatorEmptyOk }, title: {
|
|
2558
2578
|
validator: validation_1.stringValidator100,
|
|
2559
2579
|
required: true,
|
|
2560
2580
|
examples: ["Template Name"],
|
|
@@ -2584,7 +2604,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
2584
2604
|
constraints: { unique: [], relationship: [] },
|
|
2585
2605
|
defaultActions: { read: {}, readMany: {}, update: {}, delete: {} },
|
|
2586
2606
|
enduserActions: { prepare_file_upload: {}, confirm_file_upload: {}, file_download_URL: {}, read: {}, readMany: {}, delete: {}, update: {} /* allow to hide from client side */ },
|
|
2587
|
-
fields: __assign(__assign({}, BuiltInFields), { source: { validator: validation_1.stringValidator100 }, tags: { validator: validation_1.listOfStringsValidatorUniqueOptionalOrEmptyOkay }, name: {
|
|
2607
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, source: { validator: validation_1.stringValidator100 }, tags: { validator: validation_1.listOfStringsValidatorUniqueOptionalOrEmptyOkay }, name: {
|
|
2588
2608
|
validator: validation_1.stringValidator250,
|
|
2589
2609
|
required: true,
|
|
2590
2610
|
}, size: {
|
|
@@ -2595,6 +2615,8 @@ exports.schema = (0, exports.build_schema)({
|
|
|
2595
2615
|
required: true
|
|
2596
2616
|
}, enduserId: {
|
|
2597
2617
|
validator: validation_1.mongoIdStringRequired,
|
|
2618
|
+
}, formResponseId: {
|
|
2619
|
+
validator: validation_1.mongoIdStringRequired,
|
|
2598
2620
|
}, secureName: {
|
|
2599
2621
|
validator: validation_1.stringValidator250,
|
|
2600
2622
|
readonly: true,
|
|
@@ -3075,7 +3097,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
3075
3097
|
},
|
|
3076
3098
|
},
|
|
3077
3099
|
},
|
|
3078
|
-
fields: __assign(__assign({}, BuiltInFields), { showByUserTags: { validator: validation_1.listOfStringsValidatorOptionalOrEmptyOk }, belugaVisitType: { validator: validation_1.stringValidator }, belugaVerificationId: { validator: validation_1.stringValidator }, belugaPharmacyMappings: {
|
|
3100
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, showByUserTags: { validator: validation_1.listOfStringsValidatorOptionalOrEmptyOk }, belugaVisitType: { validator: validation_1.stringValidator }, belugaVerificationId: { validator: validation_1.stringValidator }, belugaPharmacyMappings: {
|
|
3079
3101
|
validator: (0, validation_1.listValidatorOptionalOrEmptyOk)((0, validation_1.objectValidator)({
|
|
3080
3102
|
title: validation_1.stringValidatorOptionalEmptyOkay,
|
|
3081
3103
|
pharmacyId: validation_1.stringValidator100,
|
|
@@ -3190,7 +3212,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
3190
3212
|
unique: [],
|
|
3191
3213
|
relationship: [],
|
|
3192
3214
|
},
|
|
3193
|
-
fields: __assign(__assign({}, BuiltInFields), { discussionRoomId: { validator: validation_1.mongoIdStringRequired }, hiddenFromTimeline: { validator: validation_1.booleanValidator }, lockedAt: { validator: validation_1.dateValidator }, formId: {
|
|
3215
|
+
fields: __assign(__assign({}, BuiltInFields), { discussionRoomId: { validator: validation_1.mongoIdStringRequired }, hiddenFromTimeline: { validator: validation_1.booleanValidator, enduserUpdatesDisabled: true }, lockedAt: { validator: validation_1.dateValidator, enduserUpdatesDisabled: true }, formId: {
|
|
3194
3216
|
validator: validation_1.stringValidator100,
|
|
3195
3217
|
required: true,
|
|
3196
3218
|
dependencies: [
|
|
@@ -3215,12 +3237,13 @@ exports.schema = (0, exports.build_schema)({
|
|
|
3215
3237
|
updatesDisabled: true,
|
|
3216
3238
|
}, openedAt: {
|
|
3217
3239
|
validator: validation_1.dateValidator,
|
|
3218
|
-
}, copiedFrom: { validator: validation_1.mongoIdStringOptional }, copiedFromEnduserId: { validator: validation_1.mongoIdStringOptional }, publicSubmit: { validator: validation_1.booleanValidator }, submittedBy: { validator: validation_1.stringValidator250 }, submittedByIsPlaceholder: { validator: validation_1.booleanValidator }, markedAsSubmitted: { validator: validation_1.booleanValidator }, accessCode: { validator: validation_1.stringValidator250 }, userEmail: { validator: validation_1.emailValidator }, submittedAt: { validator: validation_1.dateValidator }, formTitle: { validator: validation_1.stringValidator250 }, responses: { validator: validation_1.formResponsesValidator }, draftSavedAt: { validator: validation_1.dateValidator }, draftSavedBy: { validator: validation_1.mongoIdStringRequired }, hideFromEnduserPortal: { validator: validation_1.booleanValidator }, sharedVia: { validator: validation_1.communicationsChannelValidator }, isInternalNote: { validator: validation_1.booleanValidator }, pinnedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, publicIdentifier: { validator: validation_1.stringValidator250 }, source: { validator: validation_1.stringValidator250 }, externalId: { validator: validation_1.stringValidator250 }, rootResponseId: { validator: validation_1.mongoIdStringRequired }, parentResponseId: { validator: validation_1.mongoIdStringRequired }, tags: { validator: validation_1.listOfStringsValidatorOptionalOrEmptyOk }, carePlanId: { validator: validation_1.mongoIdStringRequired }, context: { validator: validation_1.stringValidator1000 }, logoURL: { validator: validation_1.stringValidator5000 }, logoHeight: { validator: validation_1.numberValidator }, calendarEventId: { validator: validation_1.mongoIdStringRequired }, references: { validator: validation_1.listOfRelatedRecordsValidator, readonly: true }, groupId: { validator: validation_1.mongoIdStringRequired }, groupInstance: { validator: validation_1.stringValidator100 }, groupPosition: { validator: validation_1.nonNegNumberValidator }, hideAfterUnsubmittedInMS: { validator: validation_1.numberValidator }, addenda: {
|
|
3240
|
+
}, copiedFrom: { validator: validation_1.mongoIdStringOptional }, copiedFromEnduserId: { validator: validation_1.mongoIdStringOptional }, publicSubmit: { validator: validation_1.booleanValidator }, submittedBy: { validator: validation_1.stringValidator250, enduserUpdatesDisabled: true }, submittedByIsPlaceholder: { validator: validation_1.booleanValidator, enduserUpdatesDisabled: true }, markedAsSubmitted: { validator: validation_1.booleanValidator, enduserUpdatesDisabled: true }, accessCode: { validator: validation_1.stringValidator250 }, userEmail: { validator: validation_1.emailValidator, enduserUpdatesDisabled: true }, submittedAt: { validator: validation_1.dateValidator, enduserUpdatesDisabled: true }, formTitle: { validator: validation_1.stringValidator250, enduserUpdatesDisabled: true }, responses: { validator: validation_1.formResponsesValidator }, draftSavedAt: { validator: validation_1.dateValidator }, draftSavedBy: { validator: validation_1.mongoIdStringRequired }, hideFromEnduserPortal: { validator: validation_1.booleanValidator }, sharedVia: { validator: validation_1.communicationsChannelValidator }, isInternalNote: { validator: validation_1.booleanValidator, enduserUpdatesDisabled: true }, pinnedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator, enduserUpdatesDisabled: true }, publicIdentifier: { validator: validation_1.stringValidator250 }, source: { validator: validation_1.stringValidator250 }, externalId: { validator: validation_1.stringValidator250 }, rootResponseId: { validator: validation_1.mongoIdStringRequired }, parentResponseId: { validator: validation_1.mongoIdStringRequired }, tags: { validator: validation_1.listOfStringsValidatorOptionalOrEmptyOk, enduserUpdatesDisabled: true }, carePlanId: { validator: validation_1.mongoIdStringRequired }, context: { validator: validation_1.stringValidator1000 }, logoURL: { validator: validation_1.stringValidator5000, enduserUpdatesDisabled: true }, logoHeight: { validator: validation_1.numberValidator, enduserUpdatesDisabled: true }, calendarEventId: { validator: validation_1.mongoIdStringRequired }, references: { validator: validation_1.listOfRelatedRecordsValidator, readonly: true }, groupId: { validator: validation_1.mongoIdStringRequired }, groupInstance: { validator: validation_1.stringValidator100 }, groupPosition: { validator: validation_1.nonNegNumberValidator }, hideAfterUnsubmittedInMS: { validator: validation_1.numberValidator }, addenda: {
|
|
3219
3241
|
validator: (0, validation_1.listValidatorOptionalOrEmptyOk)((0, validation_1.objectValidator)({
|
|
3220
3242
|
text: validation_1.stringValidator25000EmptyOkay,
|
|
3221
3243
|
timestamp: validation_1.dateValidator,
|
|
3222
3244
|
userId: validation_1.mongoIdStringRequired,
|
|
3223
|
-
}))
|
|
3245
|
+
})),
|
|
3246
|
+
enduserUpdatesDisabled: true,
|
|
3224
3247
|
}, followups: {
|
|
3225
3248
|
validator: (0, validation_1.listValidatorOptionalOrEmptyOk)((0, validation_1.objectValidator)({
|
|
3226
3249
|
formId: validation_1.mongoIdStringRequired,
|
|
@@ -3233,7 +3256,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
3233
3256
|
fieldTitle: validation_1.stringValidator250,
|
|
3234
3257
|
timestamp: validation_1.dateValidator,
|
|
3235
3258
|
}))
|
|
3236
|
-
}, startedViaPinnedForm: { validator: validation_1.booleanValidator }, enduserAISummary: { validator: validation_1.stringValidator25000 }, procedureCodes: { validator: procedureCodesValidator }, diagnosisCodes: { validator: diagnosisCodesValidator } }),
|
|
3259
|
+
}, startedViaPinnedForm: { validator: validation_1.booleanValidator }, enduserAISummary: { validator: validation_1.stringValidator25000, enduserUpdatesDisabled: true }, procedureCodes: { validator: procedureCodesValidator, enduserUpdatesDisabled: true }, diagnosisCodes: { validator: diagnosisCodesValidator, enduserUpdatesDisabled: true } }),
|
|
3237
3260
|
defaultActions: constants_1.DEFAULT_OPERATIONS,
|
|
3238
3261
|
enduserActions: {
|
|
3239
3262
|
prepare_form_response: {}, info_for_access_code: {}, submit_form_response: {}, stripe_details: {}, chargebee_details: {},
|
|
@@ -3965,7 +3988,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
3965
3988
|
validator: validation_1.nonNegNumberValidator,
|
|
3966
3989
|
examples: [100],
|
|
3967
3990
|
required: true,
|
|
3968
|
-
}, locationId: { validator: validation_1.mongoIdStringRequired }, locationIds: { validator: validation_1.listOfMongoIdStringValidatorOptionalOrEmptyOk }, type: { validator: validation_1.stringValidator100 }, description: { validator: validation_1.stringValidator5000 }, agreedToTerms: { validator: validation_1.appointmentTermsValidator }, meetingId: { validator: validation_1.mongoIdStringRequired, readonly: true }, bookingPageId: { validator: validation_1.mongoIdStringRequired }, meetingStatus: { validator: validation_1.meetingStatusValidator }, attachments: { validator: validation_1.listOfGenericAttachmentsValidator }, cancelledAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, rescheduledAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, noShowedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, rescheduledTo: { validator: validation_1.mongoIdStringRequired }, chatRoomId: {
|
|
3991
|
+
}, locationId: { validator: validation_1.mongoIdStringRequired }, locationIds: { validator: validation_1.listOfMongoIdStringValidatorOptionalOrEmptyOk }, type: { validator: validation_1.stringValidator100 }, description: { validator: validation_1.stringValidator5000 }, agreedToTerms: { validator: validation_1.appointmentTermsValidator }, meetingId: { validator: validation_1.mongoIdStringRequired, readonly: true }, bookingPageId: { validator: validation_1.mongoIdStringRequired }, meetingStatus: { validator: validation_1.meetingStatusValidator }, videoCallAttendance: { validator: validation_1.listOfVideoCallParticipantEventsValidator, readonly: true }, attachments: { validator: validation_1.listOfGenericAttachmentsValidator }, cancelledAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, rescheduledAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, noShowedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, rescheduledTo: { validator: validation_1.mongoIdStringRequired }, chatRoomId: {
|
|
3969
3992
|
validator: validation_1.mongoIdStringRequired,
|
|
3970
3993
|
dependencies: [{
|
|
3971
3994
|
dependsOn: ['chat_rooms'],
|
|
@@ -4031,7 +4054,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
4031
4054
|
defaultActions: constants_1.DEFAULT_OPERATIONS,
|
|
4032
4055
|
customActions: {},
|
|
4033
4056
|
enduserActions: { read: {}, readMany: {} },
|
|
4034
|
-
fields: __assign(__assign({}, BuiltInFields), { dontSyncToElation: { validator: validation_1.booleanValidator }, sendIcsEmail: { validator: validation_1.booleanValidator }, createAndBookAthenaSlot: { validator: validation_1.booleanValidator }, athenaDepartmentId: { validator: validation_1.stringValidator1000 }, generateAthenaTelehealthLink: { validator: validation_1.booleanValidator }, athenaTypeId: { validator: validation_1.stringValidator1000 }, athenaBookingTypeId: { validator: validation_1.stringValidator1000 }, preventCancelMinutesInAdvance: { validator: validation_1.numberValidator }, preventRescheduleMinutesInAdvance: { validator: validation_1.numberValidator }, preventCancelInPortal: { validator: validation_1.booleanValidator }, preventRescheduleInPortal: { validator: validation_1.booleanValidator }, dontSyncToCanvas: { validator: validation_1.booleanValidator }, archivedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, allowGroupReschedule: { validator: validation_1.booleanValidator }, dontAutoSyncPatientToHealthie: { validator: validation_1.booleanValidator }, title: {
|
|
4057
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, dontSyncToElation: { validator: validation_1.booleanValidator }, sendIcsEmail: { validator: validation_1.booleanValidator }, createAndBookAthenaSlot: { validator: validation_1.booleanValidator }, athenaDepartmentId: { validator: validation_1.stringValidator1000 }, generateAthenaTelehealthLink: { validator: validation_1.booleanValidator }, athenaTypeId: { validator: validation_1.stringValidator1000 }, athenaBookingTypeId: { validator: validation_1.stringValidator1000 }, preventCancelMinutesInAdvance: { validator: validation_1.numberValidator }, preventRescheduleMinutesInAdvance: { validator: validation_1.numberValidator }, preventCancelInPortal: { validator: validation_1.booleanValidator }, preventRescheduleInPortal: { validator: validation_1.booleanValidator }, dontSyncToCanvas: { validator: validation_1.booleanValidator }, archivedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, allowGroupReschedule: { validator: validation_1.booleanValidator }, dontAutoSyncPatientToHealthie: { validator: validation_1.booleanValidator }, title: {
|
|
4035
4058
|
validator: validation_1.stringValidator250,
|
|
4036
4059
|
required: true,
|
|
4037
4060
|
examples: ["Text"],
|
|
@@ -4426,7 +4449,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
4426
4449
|
create: {}, createMany: {}, read: {}, readMany: {},
|
|
4427
4450
|
search: {},
|
|
4428
4451
|
},
|
|
4429
|
-
fields: __assign(__assign({}, BuiltInFields), { slug: { validator: validation_1.stringValidator250 }, title: {
|
|
4452
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, slug: { validator: validation_1.stringValidator250 }, title: {
|
|
4430
4453
|
validator: validation_1.stringValidator1000,
|
|
4431
4454
|
required: true,
|
|
4432
4455
|
examples: ["Template Name"],
|
|
@@ -4974,7 +4997,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
4974
4997
|
validator: (0, validation_1.objectValidator)({
|
|
4975
4998
|
type: validation_1.stringValidatorOptional,
|
|
4976
4999
|
}),
|
|
4977
|
-
}, onboardingStatus: { validator: validation_1.
|
|
5000
|
+
}, onboardingStatus: { validator: validation_1.userPortalSettingsValidator }, creditCount: { validator: validation_1.numberValidator, readonly: true }, stripeKeyDetails: {
|
|
4978
5001
|
validator: (0, validation_1.listValidatorOptionalOrEmptyOk)((0, validation_1.objectValidator)({
|
|
4979
5002
|
key: validation_1.stringValidator5000EmptyOkay,
|
|
4980
5003
|
title: validation_1.stringValidator5000EmptyOkay,
|
|
@@ -5251,7 +5274,10 @@ exports.schema = (0, exports.build_schema)({
|
|
|
5251
5274
|
}
|
|
5252
5275
|
},
|
|
5253
5276
|
]
|
|
5254
|
-
}, uiRestrictions: { validator: validation_1.userUIRestrictionsValidator }, fieldRedactions: { validator: validation_1.userFieldRedactionsValidator }
|
|
5277
|
+
}, uiRestrictions: { validator: validation_1.userUIRestrictionsValidator }, fieldRedactions: { validator: validation_1.userFieldRedactionsValidator }, portalSchemaRestrictions: {
|
|
5278
|
+
validator: validation_1.portalSchemaRestrictionsValidator,
|
|
5279
|
+
initializer: function () { return ({ disableEditContent: true, disableEditTheming: true, disableEditSnippets: true }); },
|
|
5280
|
+
}, color: { validator: validation_1.stringValidator1000 }, description: { validator: validation_1.stringValidator1000Optional } })
|
|
5255
5281
|
},
|
|
5256
5282
|
appointment_booking_pages: {
|
|
5257
5283
|
info: {},
|
|
@@ -5293,7 +5319,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
5293
5319
|
enduserActions: {
|
|
5294
5320
|
read: {}, readMany: {}, validate_access_token: {},
|
|
5295
5321
|
},
|
|
5296
|
-
fields: __assign(__assign({}, BuiltInFields), { dontRestrictRescheduleToOriginalHost: { validator: validation_1.booleanValidator }, gtmTag: { validator: validation_1.stringValidator100EscapeHTML }, archivedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, title: {
|
|
5322
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, dontRestrictRescheduleToOriginalHost: { validator: validation_1.booleanValidator }, gtmTag: { validator: validation_1.stringValidator100EscapeHTML }, archivedAt: { validator: validation_1.dateOptionalOrEmptyStringValidator }, title: {
|
|
5297
5323
|
validator: validation_1.stringValidator100,
|
|
5298
5324
|
required: true,
|
|
5299
5325
|
examples: ["Appointment Booking Title"]
|
|
@@ -5915,7 +5941,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
5915
5941
|
},
|
|
5916
5942
|
},
|
|
5917
5943
|
enduserActions: {},
|
|
5918
|
-
fields: __assign(__assign({}, BuiltInFields), { title: {
|
|
5944
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, title: {
|
|
5919
5945
|
validator: validation_1.stringValidator100,
|
|
5920
5946
|
required: true,
|
|
5921
5947
|
examples: ["Automation Trigger"]
|
|
@@ -6191,7 +6217,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
6191
6217
|
defaultActions: constants_1.DEFAULT_OPERATIONS,
|
|
6192
6218
|
customActions: {},
|
|
6193
6219
|
enduserActions: {},
|
|
6194
|
-
fields: __assign(__assign({}, BuiltInFields), { title: {
|
|
6220
|
+
fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: validation_1.listOfStringsValidatorEmptyOk }, title: {
|
|
6195
6221
|
validator: validation_1.stringValidator,
|
|
6196
6222
|
required: true,
|
|
6197
6223
|
examples: ["Title"]
|
|
@@ -6331,18 +6357,34 @@ exports.schema = (0, exports.build_schema)({
|
|
|
6331
6357
|
}
|
|
6332
6358
|
},
|
|
6333
6359
|
{
|
|
6334
|
-
explanation: "Locked time tracks only allow review field updates",
|
|
6335
|
-
evaluate: function (_v, _deps,
|
|
6360
|
+
explanation: "Locked time tracks only allow review field updates, or owner resubmission of rejected entries",
|
|
6361
|
+
evaluate: function (_v, _deps, session, method, _a) {
|
|
6336
6362
|
var original = _a.original, updates = _a.updates;
|
|
6337
6363
|
if (method !== 'update')
|
|
6338
6364
|
return;
|
|
6339
6365
|
var orig = original;
|
|
6340
6366
|
if (!(orig === null || orig === void 0 ? void 0 : orig.lockedAt))
|
|
6341
6367
|
return;
|
|
6368
|
+
var u = updates;
|
|
6342
6369
|
var reviewFields = ['reviewedAt', 'reviewedByUserId', 'reviewApproved', 'reviewNote'];
|
|
6343
6370
|
var nonReviewFields = Object.keys(updates || {}).filter(function (k) { return !reviewFields.includes(k); });
|
|
6344
|
-
if (nonReviewFields.length
|
|
6345
|
-
return
|
|
6371
|
+
if (nonReviewFields.length === 0)
|
|
6372
|
+
return; // pure review update — unchanged behavior
|
|
6373
|
+
var isRejected = !!orig.reviewedAt && orig.reviewApproved === false;
|
|
6374
|
+
var resubmitFields = __spreadArray(__spreadArray([], reviewFields, true), [
|
|
6375
|
+
'correctedAt', 'correctedByUserId', 'correctionNote',
|
|
6376
|
+
'originalTotalDurationInMS', 'totalDurationInMS',
|
|
6377
|
+
'lockedAt', 'lockedByUserId',
|
|
6378
|
+
], false);
|
|
6379
|
+
var disallowed = Object.keys(updates || {}).filter(function (k) { return !resubmitFields.includes(k); });
|
|
6380
|
+
if (isRejected && session.id === orig.userId && disallowed.length === 0) {
|
|
6381
|
+
if ((u === null || u === void 0 ? void 0 : u.reviewedAt) !== '')
|
|
6382
|
+
return "Resubmitting a rejected time track requires clearing reviewedAt (set to '')";
|
|
6383
|
+
if ((u === null || u === void 0 ? void 0 : u.reviewApproved) === true)
|
|
6384
|
+
return "Cannot approve your own time track during resubmission";
|
|
6385
|
+
return; // valid resubmit — entry returns to Pending
|
|
6386
|
+
}
|
|
6387
|
+
return "Time track is locked. Only review fields (".concat(reviewFields.join(', '), ") can be updated.");
|
|
6346
6388
|
}
|
|
6347
6389
|
},
|
|
6348
6390
|
{
|
|
@@ -6417,7 +6459,20 @@ exports.schema = (0, exports.build_schema)({
|
|
|
6417
6459
|
type: validation_1.stringValidator,
|
|
6418
6460
|
id: validation_1.stringValidator,
|
|
6419
6461
|
}, { isOptional: true, emptyOk: true }),
|
|
6420
|
-
}, isHistorical: { validator: validation_1.booleanValidatorOptional, updatesDisabled: true }, correctedAt: { validator: validation_1.dateValidatorOptional }, correctedByUserId: { validator: validation_1.mongoIdStringOptional }, correctionNote: { validator: validation_1.stringValidator1000Optional }, originalTotalDurationInMS: { validator: validation_1.numberValidatorOptional }, reviewedAt: { validator: validation_1.dateValidatorOptional }, reviewedByUserId: { validator: validation_1.mongoIdStringOptional }, reviewApproved: { validator: validation_1.booleanValidatorOptional }, reviewNote: { validator: validation_1.stringValidator1000Optional }, lockedAt: { validator: validation_1.dateValidatorOptional }, lockedByUserId: { validator: validation_1.mongoIdStringOptional }
|
|
6462
|
+
}, isHistorical: { validator: validation_1.booleanValidatorOptional, updatesDisabled: true }, correctedAt: { validator: validation_1.dateValidatorOptional }, correctedByUserId: { validator: validation_1.mongoIdStringOptional }, correctionNote: { validator: validation_1.stringValidator1000Optional }, originalTotalDurationInMS: { validator: validation_1.numberValidatorOptional }, reviewedAt: { validator: validation_1.dateValidatorOptional }, reviewedByUserId: { validator: validation_1.mongoIdStringOptional }, reviewApproved: { validator: validation_1.booleanValidatorOptional }, reviewNote: { validator: validation_1.stringValidator1000Optional }, lockedAt: { validator: validation_1.dateValidatorOptional }, lockedByUserId: { validator: validation_1.mongoIdStringOptional },
|
|
6463
|
+
// server-appended on resubmission of a rejected entry (see routing.ts update handler)
|
|
6464
|
+
// note: reviewApproved remains false after resubmit (booleans can't be cleared to '') — status logic must key off reviewedAt
|
|
6465
|
+
reviewHistory: {
|
|
6466
|
+
validator: (0, validation_1.listValidatorOptionalOrEmptyOk)((0, validation_1.objectValidator)({
|
|
6467
|
+
reviewedAt: validation_1.dateValidator,
|
|
6468
|
+
reviewedByUserId: validation_1.mongoIdStringOptional,
|
|
6469
|
+
reviewApproved: validation_1.booleanValidatorOptional,
|
|
6470
|
+
reviewNote: validation_1.stringValidator1000Optional,
|
|
6471
|
+
resubmittedAt: validation_1.dateValidatorOptional,
|
|
6472
|
+
resubmittedByUserId: validation_1.mongoIdStringOptional,
|
|
6473
|
+
})),
|
|
6474
|
+
readonly: true, // server-appended only — clients can read, never write
|
|
6475
|
+
} }),
|
|
6421
6476
|
},
|
|
6422
6477
|
ticket_queues: {
|
|
6423
6478
|
info: {},
|
|
@@ -6845,7 +6900,7 @@ exports.schema = (0, exports.build_schema)({
|
|
|
6845
6900
|
defaultActions: { read: {}, readMany: {} },
|
|
6846
6901
|
customActions: {},
|
|
6847
6902
|
enduserActions: {},
|
|
6848
|
-
fields: __assign(__assign({}, BuiltInFields), { integration: { validator: validation_1.stringValidator, readonly: true, examples: ['Canvas'] }, status: { validator: (0, validation_1.exactMatchValidator)(['Success', 'Error']), readonly: true, examples: ['Error'] }, type: { validator: validation_1.stringValidator, readonly: true, examples: ['Patient Create'] }, payload: { validator: validation_1.stringValidator, readonly: true, examples: ['{}'] }, response: { validator: validation_1.stringValidator, readonly: true, examples: ['{}'] }, url: { validator: validation_1.stringValidator, readonly: true, examples: ['https://www.tellescope.com'] }, enduserId: { validator: validation_1.mongoIdStringRequired, readonly: true } })
|
|
6903
|
+
fields: __assign(__assign({}, BuiltInFields), { integration: { validator: validation_1.stringValidator, readonly: true, examples: ['Canvas'] }, status: { validator: (0, validation_1.exactMatchValidator)(['Success', 'Error', 'Info']), readonly: true, examples: ['Error'] }, type: { validator: validation_1.stringValidator, readonly: true, examples: ['Patient Create'] }, payload: { validator: validation_1.stringValidator, readonly: true, examples: ['{}'] }, response: { validator: validation_1.stringValidator, readonly: true, examples: ['{}'] }, url: { validator: validation_1.stringValidator, readonly: true, examples: ['https://www.tellescope.com'] }, enduserId: { validator: validation_1.mongoIdStringRequired, readonly: true } })
|
|
6849
6904
|
},
|
|
6850
6905
|
organization_payments: {
|
|
6851
6906
|
info: { description: 'Read Only - Organization Payment Transaction Logs' },
|