openchs-models 1.33.69 → 1.33.70

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.
@@ -1,5 +1,5 @@
1
1
  # Check https://circleci.com/docs/2.0/language-javascript/ for more details
2
- version: 2
2
+ version: 2.1
3
3
  defaults: &defaults
4
4
  working_directory: ~/repo
5
5
  docker:
@@ -52,7 +52,6 @@ jobs:
52
52
  # command: npm publish
53
53
 
54
54
  workflows:
55
- version: 2
56
55
  test_deploy:
57
56
  jobs:
58
57
  - build
@@ -64,7 +63,3 @@ workflows:
64
63
  # only: /^v.*/
65
64
  # branches:
66
65
  # ignore: /.*/
67
-
68
- notify:
69
- webhooks:
70
- - url: https://webhooks.gitter.im/e/0fdffde721194986f2a0
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _BaseEntity = _interopRequireDefault(require("./BaseEntity"));
8
+ var _General = _interopRequireDefault(require("./utility/General"));
9
+ var _SchemaNames = _interopRequireDefault(require("./SchemaNames"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
13
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
14
+ /**
15
+ * Client mirror of the server's downloadable-content reference data
16
+ * (avniproject/avni-server#1019, avniproject/avni-models#67).
17
+ *
18
+ * Generic admin-configured metadata that declares a downloadable blob (e.g. an edge model).
19
+ * Synced to every device as reference/metadata data. The bytes referenced by {@code contentKey}
20
+ * are fetched during sync by the content-download capability (avniproject/avni-client#1948).
21
+ *
22
+ * The AES key for an encrypted blob is NEVER a field here - it lives in a server-only key
23
+ * store served via a device key-delivery endpoint (avniproject/avni-server#1020).
24
+ *
25
+ * {@code payload} is category-specific non-secret metadata (for the edge model:
26
+ * engine / inputShape / labelMap). Stored as a JSON string on Realm (mirrors how
27
+ * {@link CustomCardConfig} stores its {@code translations} JSON object).
28
+ */
29
+ class DownloadableContent extends _BaseEntity.default {
30
+ constructor(that = null) {
31
+ super(that);
32
+ }
33
+ get name() {
34
+ return this.that.name;
35
+ }
36
+ set name(x) {
37
+ this.that.name = x;
38
+ }
39
+ get category() {
40
+ return this.that.category;
41
+ }
42
+ set category(x) {
43
+ this.that.category = x;
44
+ }
45
+ get contentKey() {
46
+ return this.that.contentKey;
47
+ }
48
+ set contentKey(x) {
49
+ this.that.contentKey = x;
50
+ }
51
+ get sha256() {
52
+ return this.that.sha256;
53
+ }
54
+ set sha256(x) {
55
+ this.that.sha256 = x;
56
+ }
57
+ get needsKey() {
58
+ return this.that.needsKey;
59
+ }
60
+ set needsKey(x) {
61
+ this.that.needsKey = x;
62
+ }
63
+ get payload() {
64
+ return this.that.payload;
65
+ }
66
+ set payload(x) {
67
+ this.that.payload = x;
68
+ }
69
+ get voided() {
70
+ return this.that.voided;
71
+ }
72
+ set voided(x) {
73
+ this.that.voided = x;
74
+ }
75
+
76
+ /**
77
+ * Parsed {@code payload} JSON as an object (empty object when absent/invalid).
78
+ * Consumers (the edge-model consumer, avniproject/avni-client#1949) read engine /
79
+ * inputShape / labelMap from here.
80
+ */
81
+ getPayload() {
82
+ if (!this.payload) {
83
+ return {};
84
+ }
85
+ try {
86
+ const parsed = JSON.parse(this.payload);
87
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
88
+ } catch (e) {
89
+ return {};
90
+ }
91
+ }
92
+ static fromResource(resource) {
93
+ const content = _General.default.assignFields(resource, new DownloadableContent(), ["uuid", "name", "category", "contentKey", "sha256", "voided"]);
94
+ // needsKey is a non-optional Realm bool. The server may omit/null it; a direct field
95
+ // copy would write `undefined`, which throws on the Realm write and aborts the entire
96
+ // reference-data sync. Coerce explicitly so absent/null -> false, never undefined.
97
+ content.needsKey = resource && resource.needsKey === true;
98
+ // payload is category-specific metadata. The server normally sends it as a JSON object
99
+ // (JsonObject -> Map), but may serialize it as an already-JSON string. Handle both so
100
+ // metadata is never silently dropped: object -> stringify; non-empty string -> store as-is.
101
+ if (resource && resource.payload && typeof resource.payload === 'object') {
102
+ content.payload = JSON.stringify(resource.payload);
103
+ } else if (resource && typeof resource.payload === 'string' && resource.payload.length > 0) {
104
+ content.payload = resource.payload;
105
+ } else {
106
+ content.payload = null;
107
+ }
108
+ return content;
109
+ }
110
+ }
111
+ _defineProperty(DownloadableContent, "schema", {
112
+ name: _SchemaNames.default.DownloadableContent,
113
+ primaryKey: "uuid",
114
+ properties: {
115
+ uuid: "string",
116
+ name: "string",
117
+ category: "string",
118
+ contentKey: {
119
+ type: "string",
120
+ optional: true
121
+ },
122
+ sha256: {
123
+ type: "string",
124
+ optional: true
125
+ },
126
+ needsKey: {
127
+ type: "bool",
128
+ default: false
129
+ },
130
+ payload: {
131
+ type: "string",
132
+ optional: true
133
+ },
134
+ voided: {
135
+ type: "bool",
136
+ default: false
137
+ }
138
+ }
139
+ });
140
+ var _default = DownloadableContent;
141
+ exports.default = _default;
@@ -63,6 +63,7 @@ var _News = _interopRequireDefault(require("./News"));
63
63
  var _Comment = _interopRequireDefault(require("./Comment"));
64
64
  var _CommentThread = _interopRequireDefault(require("./CommentThread"));
65
65
  var _Extension = _interopRequireDefault(require("./Extension"));
66
+ var _DownloadableContent = _interopRequireDefault(require("./DownloadableContent"));
66
67
  var _SubjectMigration = _interopRequireDefault(require("./SubjectMigration"));
67
68
  var _ResetSync = _interopRequireDefault(require("./ResetSync"));
68
69
  var _Documentation = _interopRequireDefault(require("./Documentation"));
@@ -350,6 +351,13 @@ const extension = refData(_Extension.default, {
350
351
  syncWeight: 0,
351
352
  filter: ''
352
353
  });
354
+ // Mirrors the server endpoint /v2/downloadableContent/search/lastModified
355
+ // (avniproject/avni-server#1019). Reference/metadata data synced to every device.
356
+ const downloadableContent = refData(_DownloadableContent.default, {
357
+ res: "downloadableContent",
358
+ syncWeight: 0,
359
+ apiVersion: "v2"
360
+ });
353
361
  const groupRole = refData(_GroupRole.default, {
354
362
  res: "groupRole",
355
363
  syncWeight: 0
@@ -583,7 +591,7 @@ class EntityMetaData {
583
591
  }
584
592
  //order is important. last entity in each (tx and ref) with be executed first. parent should be synced before the child.
585
593
  static model() {
586
- return [groupDashboard, approvalStatus, dashboardSectionCardMapping, dashboardSection, dashboardFilter, dashboard, reportCard, customCardConfig, standardReportCardType, menuItem, locationHierarchy, video, checklistItemDetail, checklistDetail, rule, ruleDependency, individualRelationshipType, individualRelationGenderMapping, individualRelation, formMapping, formElement, formElementGroup, form, documentationItem, documentation, identifierSource, organisationConfig, platformTranslation, translation, locationMapping, addressLevel, taskStatus, taskType, encounterType, program, gender, groupRole, calendarDateMarker, calendar, attendanceType, subjectType, conceptAnswer, concept, myGroups, groupPrivileges, groups, privilege, resetSync, subjectMigration, userSubjectAssignment, task, taskUnAssigment, subjectProgramEligibility, news, videoTelemetric, groupSubject, comment, commentThread, entityApprovalStatus, subjectEntityApprovalStatus, encounterEntityApprovalStatus, programEncounterEntityApprovalStatus, programEnrolmentEntityApprovalStatus, checklistItemEntityApprovalStatus, individualRelationship, checklistItem, checklist, attendanceRecord, session, encounter, identifierAssignment, programEncounter, programEnrolment, individual, extension, userInfo, ruleFailureTelemetry, syncTelemetry];
594
+ return [groupDashboard, approvalStatus, dashboardSectionCardMapping, dashboardSection, dashboardFilter, dashboard, reportCard, customCardConfig, standardReportCardType, menuItem, locationHierarchy, video, checklistItemDetail, checklistDetail, rule, ruleDependency, individualRelationshipType, individualRelationGenderMapping, individualRelation, formMapping, formElement, formElementGroup, form, documentationItem, documentation, identifierSource, organisationConfig, platformTranslation, translation, locationMapping, addressLevel, taskStatus, taskType, encounterType, program, gender, groupRole, calendarDateMarker, calendar, attendanceType, subjectType, conceptAnswer, concept, myGroups, groupPrivileges, groups, privilege, resetSync, subjectMigration, userSubjectAssignment, task, taskUnAssigment, subjectProgramEligibility, news, videoTelemetric, groupSubject, comment, commentThread, entityApprovalStatus, subjectEntityApprovalStatus, encounterEntityApprovalStatus, programEncounterEntityApprovalStatus, programEnrolmentEntityApprovalStatus, checklistItemEntityApprovalStatus, individualRelationship, checklistItem, checklist, attendanceRecord, session, encounter, identifierAssignment, programEncounter, programEnrolment, individual, extension, downloadableContent, userInfo, ruleFailureTelemetry, syncTelemetry];
587
595
  }
588
596
  static entitiesLoadedFromServer() {
589
597
  return _lodash.default.differenceBy(_Schema.default.getInstance().getEntities(), [_Settings.default, _LocaleMapping.default].concat(EntityMetaData.embeddedEntities()), "schema.name");
package/dist/Schema.js CHANGED
@@ -65,6 +65,7 @@ var _DashboardCache = _interopRequireDefault(require("./DashboardCache"));
65
65
  var _LocationHierarchy = _interopRequireDefault(require("./LocationHierarchy"));
66
66
  var _ReportCard = _interopRequireDefault(require("./ReportCard"));
67
67
  var _CustomCardConfig = _interopRequireDefault(require("./CustomCardConfig"));
68
+ var _DownloadableContent = _interopRequireDefault(require("./DownloadableContent"));
68
69
  var _Dashboard = _interopRequireDefault(require("./Dashboard"));
69
70
  var _DashboardSectionCardMapping = _interopRequireDefault(require("./DashboardSectionCardMapping"));
70
71
  var _DraftSubject = _interopRequireDefault(require("./draft/DraftSubject"));
@@ -107,7 +108,7 @@ var _Session = _interopRequireDefault(require("./Session"));
107
108
  var _AttendanceRecord = _interopRequireDefault(require("./AttendanceRecord"));
108
109
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
109
110
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
110
- const entities = [_ReportCardResult.default, _NestedReportCardResult.default, _SubjectLocation.default, _DashboardFilter.default, _LocaleMapping.default, _Settings.default, _ConceptAnswer.default, _ConceptMedia.default, _Concept.default, _EncounterType.default, _Gender.default, _AddressLevel.LocationMapping, _AddressLevel.default, _KeyValue.default, _Form.default, _FormMapping.default, _FormElementGroup.default, _FormElement.default, _SubjectType.default, _Individual.default, _Program.default, _ProgramEnrolment.default, _Observation.default, _ProgramEncounter.default, _Encounter.default, _EntitySyncStatus.default, _EntityQueue.default, _Checklist.default, _ChecklistItem.default, _Format.default, _UserInfo.default, _StringKeyNumericValue.default, _Family.default, _IndividualRelation.default, _IndividualRelationGenderMapping.default, _IndividualRelationshipType.default, _IndividualRelationship.default, _RuleDependency.default, _Rule.default, _ChecklistItemStatus.default, _ChecklistDetail.default, _ChecklistItemDetail.default, _VideoTelemetric.default, _Video.default, _MediaQueue.default, _Point.default, _SyncTelemetry.default, _IdentifierSource.default, _IdentifierAssignment.default, _RuleFailureTelemetry.default, _BeneficiaryModePin.default, _OrganisationConfig.default, _PlatformTranslation.default, _Translation.default, _Groups.default, _MyGroups.default, _GroupPrivileges.default, _Privilege.default, _GroupRole.default, _GroupSubject.default, _DashboardCache.default, _CustomDashboardCache.default, _LocationHierarchy.default, _CustomCardConfig.default, _ReportCard.default, _Dashboard.default, _DashboardSectionCardMapping.default, _DraftSubject.default, _StandardReportCardType.default, _ApprovalStatus.default, _EntityApprovalStatus.default, _GroupDashboard.default, _DashboardSection.default, _News.default, _Comment.default, _CommentThread.default, _Extension.default, _SubjectMigration.default, _ResetSync.default, _Documentation.default, _DocumentationItem.default, _TaskType.default, _TaskStatus.default, _Task.default, _TaskUnAssignment.default, _DraftEncounter.default, _DraftEnrolment.default, _DraftProgramEncounter.default, _SubjectProgramEligibility.default, _MenuItem.default, _UserSubjectAssignment.default, _Calendar.default, _CalendarDateMarker.default, _AttendanceType.default, _Session.default, _AttendanceRecord.default];
111
+ const entities = [_ReportCardResult.default, _NestedReportCardResult.default, _SubjectLocation.default, _DashboardFilter.default, _LocaleMapping.default, _Settings.default, _ConceptAnswer.default, _ConceptMedia.default, _Concept.default, _EncounterType.default, _Gender.default, _AddressLevel.LocationMapping, _AddressLevel.default, _KeyValue.default, _Form.default, _FormMapping.default, _FormElementGroup.default, _FormElement.default, _SubjectType.default, _Individual.default, _Program.default, _ProgramEnrolment.default, _Observation.default, _ProgramEncounter.default, _Encounter.default, _EntitySyncStatus.default, _EntityQueue.default, _Checklist.default, _ChecklistItem.default, _Format.default, _UserInfo.default, _StringKeyNumericValue.default, _Family.default, _IndividualRelation.default, _IndividualRelationGenderMapping.default, _IndividualRelationshipType.default, _IndividualRelationship.default, _RuleDependency.default, _Rule.default, _ChecklistItemStatus.default, _ChecklistDetail.default, _ChecklistItemDetail.default, _VideoTelemetric.default, _Video.default, _MediaQueue.default, _Point.default, _SyncTelemetry.default, _IdentifierSource.default, _IdentifierAssignment.default, _RuleFailureTelemetry.default, _BeneficiaryModePin.default, _OrganisationConfig.default, _PlatformTranslation.default, _Translation.default, _Groups.default, _MyGroups.default, _GroupPrivileges.default, _Privilege.default, _GroupRole.default, _GroupSubject.default, _DashboardCache.default, _CustomDashboardCache.default, _LocationHierarchy.default, _CustomCardConfig.default, _ReportCard.default, _Dashboard.default, _DashboardSectionCardMapping.default, _DraftSubject.default, _StandardReportCardType.default, _ApprovalStatus.default, _EntityApprovalStatus.default, _GroupDashboard.default, _DashboardSection.default, _News.default, _Comment.default, _CommentThread.default, _Extension.default, _DownloadableContent.default, _SubjectMigration.default, _ResetSync.default, _Documentation.default, _DocumentationItem.default, _TaskType.default, _TaskStatus.default, _Task.default, _TaskUnAssignment.default, _DraftEncounter.default, _DraftEnrolment.default, _DraftProgramEncounter.default, _SubjectProgramEligibility.default, _MenuItem.default, _UserSubjectAssignment.default, _Calendar.default, _CalendarDateMarker.default, _AttendanceType.default, _Session.default, _AttendanceRecord.default];
111
112
  function migrateObjectTypeFieldToEmbedded(newDB, oldDB, schemaName, field, creatorFn) {
112
113
  console.log(`schema: ${schemaName}, field: ${field}`);
113
114
  newDB.objects(schemaName).forEach(newDbParentEntity => {
@@ -186,7 +187,7 @@ function createRealmConfig() {
186
187
  return doCompact;
187
188
  },
188
189
  //order is important, should be arranged according to the dependency
189
- schemaVersion: 216,
190
+ schemaVersion: 217,
190
191
  onMigration: function (oldDB, newDB) {
191
192
  console.log("[AvniModels.Schema]", `Running migration with old schema version: ${oldDB.schemaVersion} and new schema version: ${newDB.schemaVersion}`);
192
193
  if (oldDB.schemaVersion === VersionWithEmbeddedMigrationProblem) throw new Error(`Update from schema version ${VersionWithEmbeddedMigrationProblem} is not allowed. Please uninstall and install app.`);
@@ -852,6 +853,11 @@ function createRealmConfig() {
852
853
  if (oldDB.schemaVersion < 216) {
853
854
  // GroupSubject.removalReasonConceptUUID added (additive optional string). No backfill needed.
854
855
  }
856
+ if (oldDB.schemaVersion < 217) {
857
+ // Additive: introduces the DownloadableContent reference-data schema
858
+ // (avniproject/avni-models#67). New entity, no pre-existing rows; first
859
+ // reference-data sync populates it. Nothing to backfill.
860
+ }
855
861
  }
856
862
  };
857
863
  }
@@ -17,6 +17,7 @@ _defineProperty(SchemaNames, "ProgramEncounter", "ProgramEncounter");
17
17
  _defineProperty(SchemaNames, "Encounter", "Encounter");
18
18
  _defineProperty(SchemaNames, "ChecklistItem", "ChecklistItem");
19
19
  _defineProperty(SchemaNames, "Extension", "Extension");
20
+ _defineProperty(SchemaNames, "DownloadableContent", "DownloadableContent");
20
21
  _defineProperty(SchemaNames, "Identifier", "Identifier");
21
22
  _defineProperty(SchemaNames, "Form", "Form");
22
23
  _defineProperty(SchemaNames, "Format", "EmbeddedFormat");
package/dist/index.js CHANGED
@@ -543,6 +543,12 @@ Object.defineProperty(exports, "CustomCardConfig", {
543
543
  return _CustomCardConfig.default;
544
544
  }
545
545
  });
546
+ Object.defineProperty(exports, "DownloadableContent", {
547
+ enumerable: true,
548
+ get: function () {
549
+ return _DownloadableContent.default;
550
+ }
551
+ });
546
552
  Object.defineProperty(exports, "Dashboard", {
547
553
  enumerable: true,
548
554
  get: function () {
@@ -979,6 +985,7 @@ var _DashboardCache = _interopRequireDefault(require("./DashboardCache"));
979
985
  var _LocationHierarchy = _interopRequireDefault(require("./LocationHierarchy"));
980
986
  var _ReportCard = _interopRequireDefault(require("./ReportCard"));
981
987
  var _CustomCardConfig = _interopRequireDefault(require("./CustomCardConfig"));
988
+ var _DownloadableContent = _interopRequireDefault(require("./DownloadableContent"));
982
989
  var _Dashboard = _interopRequireDefault(require("./Dashboard"));
983
990
  var _DashboardSectionCardMapping = _interopRequireDefault(require("./DashboardSectionCardMapping"));
984
991
  var _DraftSubject = _interopRequireDefault(require("./draft/DraftSubject"));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "openchs-models",
3
3
  "description": "OpenCHS data model to be used by front end clients",
4
- "version": "1.33.69",
4
+ "version": "1.33.70",
5
5
  "private": false,
6
6
  "repository": {
7
7
  "type": "git",