@saltcorn/server 1.6.0-beta.3 → 1.6.0-beta.5

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.
Files changed (1069) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/app.js +14 -5
  3. package/auth/routes.js +175 -60
  4. package/auth/testhelp.js +9 -19
  5. package/docs/assets/hierarchy.js +1 -1
  6. package/docs/assets/navigation.js +1 -1
  7. package/docs/assets/search.js +1 -1
  8. package/docs/classes/_saltcorn_admin-models.models_snapshot.Snapshot.html +2 -2
  9. package/docs/classes/_saltcorn_common-code.relations_relation.Relation.html +3 -3
  10. package/docs/classes/_saltcorn_common-code.relations_relations_finder.RelationsFinder.html +5 -5
  11. package/docs/classes/_saltcorn_data.diagram_cy_raster.CytoscapeRaster.html +4 -4
  12. package/docs/classes/_saltcorn_data.diagram_nodes_dummy_node.DummyNode.html +4 -4
  13. package/docs/classes/_saltcorn_data.diagram_nodes_node.Node.html +4 -4
  14. package/docs/classes/_saltcorn_data.diagram_nodes_page_node.PageNode.html +4 -4
  15. package/docs/classes/_saltcorn_data.diagram_nodes_table_node.TableNode.html +4 -4
  16. package/docs/classes/_saltcorn_data.diagram_nodes_trigger_node.TriggerNode.html +4 -4
  17. package/docs/classes/_saltcorn_data.diagram_nodes_view_node.ViewNode.html +4 -4
  18. package/docs/classes/_saltcorn_data.mobile-mocks_node_async_hooks.AsyncLocalStorage.html +2 -2
  19. package/docs/classes/_saltcorn_data.models_crash.Crash.html +2 -2
  20. package/docs/classes/_saltcorn_data.models_eventlog.EventLog.html +2 -2
  21. package/docs/classes/_saltcorn_data.models_field.Field.html +9 -9
  22. package/docs/classes/_saltcorn_data.models_fieldrepeat.FieldRepeat.html +2 -2
  23. package/docs/classes/_saltcorn_data.models_file.File.html +21 -21
  24. package/docs/classes/_saltcorn_data.models_form.Form.html +2 -2
  25. package/docs/classes/_saltcorn_data.models_internal_mail_queue.MailQueue.html +4 -4
  26. package/docs/classes/_saltcorn_data.models_internal_push_message_helper.PushMessageHelper.html +7 -7
  27. package/docs/classes/_saltcorn_data.models_library.Library.html +2 -2
  28. package/docs/classes/_saltcorn_data.models_model.Model.html +2 -2
  29. package/docs/classes/_saltcorn_data.models_model_instance.ModelInstance.html +2 -2
  30. package/docs/classes/_saltcorn_data.models_notification.Notification.html +2 -2
  31. package/docs/classes/_saltcorn_data.models_page.Page.html +12 -11
  32. package/docs/classes/_saltcorn_data.models_page_group.PageGroup.html +16 -16
  33. package/docs/classes/_saltcorn_data.models_page_group_member.PageGroupMember.html +8 -8
  34. package/docs/classes/_saltcorn_data.models_plugin.Plugin.html +44 -10
  35. package/docs/classes/_saltcorn_data.models_role.Role.html +2 -2
  36. package/docs/classes/_saltcorn_data.models_table.Table.html +67 -65
  37. package/docs/classes/_saltcorn_data.models_table_constraints.TableConstraint.html +2 -2
  38. package/docs/classes/_saltcorn_data.models_tag.Tag.html +2 -2
  39. package/docs/classes/_saltcorn_data.models_tag_entry.TagEntry.html +2 -2
  40. package/docs/classes/_saltcorn_data.models_trigger.Trigger.html +21 -20
  41. package/docs/classes/_saltcorn_data.models_user.User.html +32 -32
  42. package/docs/classes/_saltcorn_data.models_view.View.html +16 -15
  43. package/docs/classes/_saltcorn_data.models_workflow.Workflow.html +2 -2
  44. package/docs/classes/_saltcorn_data.models_workflow_run.WorkflowRun.html +2 -2
  45. package/docs/classes/_saltcorn_data.models_workflow_step.WorkflowStep.html +2 -2
  46. package/docs/classes/_saltcorn_data.models_workflow_trace.MetaData.html +2 -2
  47. package/docs/classes/_saltcorn_data.models_workflow_trace.WorkflowTrace.html +2 -2
  48. package/docs/classes/_saltcorn_mobile-builder.mobile-builder.MobileBuilder.html +2 -2
  49. package/docs/classes/_saltcorn_mobile-builder.utils_capacitor-helper.CapacitorHelper.html +2 -2
  50. package/docs/enums/_saltcorn_common-code.relations_relation_types.RelationType.html +2 -2
  51. package/docs/enums/_saltcorn_common-code.relations_relation_types.ViewDisplayType.html +2 -2
  52. package/docs/functions/_saltcorn_admin-models.models_config-check.runConfigurationCheck.html +1 -1
  53. package/docs/functions/_saltcorn_common-code.relations_relation_helpers.buildRelationPath.html +1 -1
  54. package/docs/functions/_saltcorn_common-code.relations_relation_helpers.buildTableCaches.html +1 -1
  55. package/docs/functions/_saltcorn_common-code.relations_relation_helpers.parseLegacyRelation.html +1 -1
  56. package/docs/functions/_saltcorn_common-code.relations_relation_helpers.parseRelationPath.html +1 -1
  57. package/docs/functions/_saltcorn_common-code.tests_test_data.fixturesData.html +1 -1
  58. package/docs/functions/_saltcorn_common-code.tests_test_data.withAnotherUserField.html +1 -1
  59. package/docs/functions/_saltcorn_common-code.tests_test_data.withKeyFromLayerThree.html +1 -1
  60. package/docs/functions/_saltcorn_common-code.tests_test_data.withKeyFromLayerTwo.html +1 -1
  61. package/docs/functions/_saltcorn_common-code.tests_test_data.withMultipleInbounds.html +1 -1
  62. package/docs/functions/_saltcorn_common-code.tests_test_data.withSecondTopicField.html +1 -1
  63. package/docs/functions/_saltcorn_common-code.tests_test_data.withSimplePostTopicrelation.html +1 -1
  64. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.action_link.html +1 -1
  65. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.action_url.html +1 -1
  66. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.fill_presets.html +1 -1
  67. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.getForm.html +1 -1
  68. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.get_view_link_query.html +1 -1
  69. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.get_viewable_fields.html +1 -1
  70. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.get_viewable_fields_from_layout.html +1 -1
  71. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.make_link.html +1 -1
  72. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.objToQueryString.html +1 -1
  73. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.parse_view_select.html +1 -1
  74. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.setDateLocales.html +1 -1
  75. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.splitUniques.html +1 -1
  76. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.standardBlockDispatch.html +1 -1
  77. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.standardLayoutRowVisitor.html +1 -1
  78. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.transformForm.html +1 -1
  79. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.updateViewSelect.html +1 -1
  80. package/docs/functions/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.view_linker.html +1 -1
  81. package/docs/functions/_saltcorn_data.db_connect_mobile.getConnectObject.html +1 -1
  82. package/docs/functions/_saltcorn_data.db_reset_schema.reset.html +1 -1
  83. package/docs/functions/_saltcorn_data.diagram_cy_generate_utils.generateCyCode.html +1 -1
  84. package/docs/functions/_saltcorn_data.diagram_cy_generate_utils.genereateCyCfg.html +1 -1
  85. package/docs/functions/_saltcorn_data.diagram_node_extract_utils.buildObjectTrees.html +1 -1
  86. package/docs/functions/_saltcorn_data.diagram_node_extract_utils.extractFromColumns.html +1 -1
  87. package/docs/functions/_saltcorn_data.diagram_node_extract_utils.extractFromLayout.html +1 -1
  88. package/docs/functions/_saltcorn_data.diagram_node_extract_utils.extractViewToCreate.html +1 -1
  89. package/docs/functions/_saltcorn_data.migrate.create_blank_migration.html +1 -1
  90. package/docs/functions/_saltcorn_data.migrate.getMigrationsInDB.html +1 -1
  91. package/docs/functions/_saltcorn_data.migrate.migrate.html +1 -1
  92. package/docs/functions/_saltcorn_data.migrations_202102091312.js.html +1 -1
  93. package/docs/functions/_saltcorn_data.migrations_202210051058.js.html +1 -1
  94. package/docs/functions/_saltcorn_data.migrations_202210101540.js.html +1 -1
  95. package/docs/functions/_saltcorn_data.migrations_202304281224.js.html +1 -1
  96. package/docs/functions/_saltcorn_data.migrations_202307211459.js.html +1 -1
  97. package/docs/functions/_saltcorn_data.migrations_202502131103.js.html +1 -1
  98. package/docs/functions/_saltcorn_data.migrations_202508011455.js.html +1 -1
  99. package/docs/functions/_saltcorn_data.migrations_202510152058.js.html +1 -1
  100. package/docs/functions/_saltcorn_data.migrations_202603101553.sql_pg.html +1 -1
  101. package/docs/functions/_saltcorn_data.migrations_202604111200.sql_pg.html +1 -0
  102. package/docs/functions/_saltcorn_data.mobile-mocks_node_child_process.execSync.html +1 -1
  103. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs.createReadStream.html +1 -1
  104. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs.readdirSync.html +1 -1
  105. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs.writeFileSync.html +1 -1
  106. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs_promises.mkdir.html +1 -1
  107. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs_promises.readFile.html +1 -1
  108. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs_promises.readdir.html +1 -1
  109. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs_promises.stat.html +1 -1
  110. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs_promises.unlink.html +1 -1
  111. package/docs/functions/_saltcorn_data.mobile-mocks_node_fs_promises.writeFile.html +1 -1
  112. package/docs/functions/_saltcorn_data.mobile-mocks_node_latest-version.latestVersion.html +1 -1
  113. package/docs/functions/_saltcorn_data.mobile-mocks_node_v8.deserialize.html +1 -1
  114. package/docs/functions/_saltcorn_data.mobile-mocks_node_v8.serialize.html +1 -1
  115. package/docs/functions/_saltcorn_data.mobile-mocks_npm_env-paths.envPaths.html +1 -1
  116. package/docs/functions/_saltcorn_data.model-helper.get_predictor.html +1 -1
  117. package/docs/functions/_saltcorn_data.model-helper.run_jupyter_model.html +1 -1
  118. package/docs/functions/_saltcorn_data.model-helper.shorten_trackback.html +1 -1
  119. package/docs/functions/_saltcorn_data.model-helper.write_csv.html +1 -1
  120. package/docs/functions/_saltcorn_data.models_internal_async_json_stream.async_json_stream.html +1 -1
  121. package/docs/functions/_saltcorn_data.models_internal_query.aggregation_query_fields.html +1 -1
  122. package/docs/functions/_saltcorn_data.models_internal_query.getAggAndField.html +1 -1
  123. package/docs/functions/_saltcorn_data.models_internal_query.joinfield_renamer.html +1 -1
  124. package/docs/functions/_saltcorn_data.models_internal_query.process_aggregations.html +1 -1
  125. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.buildKeyFromRelative.html +1 -1
  126. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.copyObject.html +1 -1
  127. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.deleteObject.html +1 -1
  128. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.downloadBuffer.html +1 -1
  129. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.getPublicFileUrl.html +1 -1
  130. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.getResolvedBucket.html +1 -1
  131. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.getS3Client.html +1 -1
  132. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.getServeUrl.html +1 -1
  133. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.getSignedFileUrl.html +1 -1
  134. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.headObject.html +1 -1
  135. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.isS3Enabled.html +1 -1
  136. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.listS3Folder.html +1 -1
  137. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.publicUrlToRelativePath.html +1 -1
  138. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.relativeKeyToPath.html +1 -1
  139. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.setObjectMetadata.html +1 -1
  140. package/docs/functions/_saltcorn_data.models_internal_s3_helpers.uploadBuffer.html +1 -1
  141. package/docs/functions/_saltcorn_data.models_internal_table_helper.boolExamples.html +1 -1
  142. package/docs/functions/_saltcorn_data.models_internal_table_helper.colorExamples.html +1 -1
  143. package/docs/functions/_saltcorn_data.models_internal_table_helper.floatExamples.html +1 -1
  144. package/docs/functions/_saltcorn_data.models_internal_table_helper.get_formula_examples.html +1 -1
  145. package/docs/functions/_saltcorn_data.models_internal_table_helper.intExamples.html +1 -1
  146. package/docs/functions/_saltcorn_data.models_internal_table_helper.stringExamples.html +1 -1
  147. package/docs/functions/_saltcorn_data.plugin-helper.build_schema_data.html +1 -1
  148. package/docs/functions/_saltcorn_data.plugin-helper.calcfldViewConfig.html +1 -1
  149. package/docs/functions/_saltcorn_data.plugin-helper.calcfldViewOptions.html +1 -1
  150. package/docs/functions/_saltcorn_data.plugin-helper.calcrelViewOptions.html +1 -1
  151. package/docs/functions/_saltcorn_data.plugin-helper.displayType.html +1 -1
  152. package/docs/functions/_saltcorn_data.plugin-helper.field_picker_fields.html +1 -1
  153. package/docs/functions/_saltcorn_data.plugin-helper.generate_joined_query.html +1 -1
  154. package/docs/functions/_saltcorn_data.plugin-helper.getActionConfigFields.html +1 -1
  155. package/docs/functions/_saltcorn_data.plugin-helper.get_child_views.html +1 -1
  156. package/docs/functions/_saltcorn_data.plugin-helper.get_inbound_relation_opts.html +1 -1
  157. package/docs/functions/_saltcorn_data.plugin-helper.get_inbound_self_relation_opts.html +1 -1
  158. package/docs/functions/_saltcorn_data.plugin-helper.get_link_view_opts.html +1 -1
  159. package/docs/functions/_saltcorn_data.plugin-helper.get_many_to_many_relation_opts.html +1 -1
  160. package/docs/functions/_saltcorn_data.plugin-helper.get_parent_views.html +1 -1
  161. package/docs/functions/_saltcorn_data.plugin-helper.initial_config_all_fields.html +1 -1
  162. package/docs/functions/_saltcorn_data.plugin-helper.json_list_to_external_table.html +1 -1
  163. package/docs/functions/_saltcorn_data.plugin-helper.link_view.html +1 -1
  164. package/docs/functions/_saltcorn_data.plugin-helper.pathToState.html +1 -1
  165. package/docs/functions/_saltcorn_data.plugin-helper.picked_fields_to_query.html +1 -1
  166. package/docs/functions/_saltcorn_data.plugin-helper.readState.html +1 -1
  167. package/docs/functions/_saltcorn_data.plugin-helper.readStateStrict.html +1 -1
  168. package/docs/functions/_saltcorn_data.plugin-helper.runCollabEvents.html +1 -1
  169. package/docs/functions/_saltcorn_data.plugin-helper.run_action_column.html +1 -1
  170. package/docs/functions/_saltcorn_data.plugin-helper.stateFieldsToQuery.html +1 -1
  171. package/docs/functions/_saltcorn_data.plugin-helper.stateFieldsToWhere.html +1 -1
  172. package/docs/functions/_saltcorn_data.plugin-helper.stateToQueryString.html +1 -1
  173. package/docs/functions/_saltcorn_data.plugin-helper.strictParseInt.html +1 -1
  174. package/docs/functions/_saltcorn_data.plugin-testing.auto_test_plugin.html +1 -1
  175. package/docs/functions/_saltcorn_data.plugin-testing.check_view_columns.html +1 -1
  176. package/docs/functions/_saltcorn_data.plugin-testing.generate_attributes.html +1 -1
  177. package/docs/functions/_saltcorn_data.standard-menu.create_standard_menu.html +1 -1
  178. package/docs/functions/_saltcorn_data.tests_assertions.assertIsErrorMsg.html +1 -1
  179. package/docs/functions/_saltcorn_data.tests_assertions.assertIsErrorsMsg.html +1 -1
  180. package/docs/functions/_saltcorn_data.tests_assertions.assertIsRow.html +1 -1
  181. package/docs/functions/_saltcorn_data.tests_assertions.assertIsSet.html +1 -1
  182. package/docs/functions/_saltcorn_data.tests_assertions.assertIsType.html +1 -1
  183. package/docs/functions/_saltcorn_data.tests_assertions.assertsIsSuccessMessage.html +1 -1
  184. package/docs/functions/_saltcorn_data.tests_assertions.assertsObjectIsUser.html +1 -1
  185. package/docs/functions/_saltcorn_data.tests_common_helpers.createAnotherUserField.html +1 -1
  186. package/docs/functions/_saltcorn_data.tests_common_helpers.createKeyFromLevelTwo.html +1 -1
  187. package/docs/functions/_saltcorn_data.tests_common_helpers.createLevelThreeInbound.html +1 -1
  188. package/docs/functions/_saltcorn_data.tests_common_helpers.createMultipleInbounds.html +1 -1
  189. package/docs/functions/_saltcorn_data.tests_common_helpers.createSecondTopicField.html +1 -1
  190. package/docs/functions/_saltcorn_data.tests_common_helpers.prepareEmployeeDepartment.html +1 -1
  191. package/docs/functions/_saltcorn_data.tests_common_helpers.prepareSimpleTopicPostRelation.html +1 -1
  192. package/docs/functions/_saltcorn_data.tests_remote_query_helper.deleteViewFromServer.html +1 -1
  193. package/docs/functions/_saltcorn_data.tests_remote_query_helper.prepareQueryEnviroment.html +1 -1
  194. package/docs/functions/_saltcorn_data.tests_remote_query_helper.sendViewToServer.html +1 -1
  195. package/docs/functions/_saltcorn_data.translate.hasLLM.html +1 -1
  196. package/docs/functions/_saltcorn_data.translate.translate.html +1 -1
  197. package/docs/functions/_saltcorn_db-common.internal.ftsFieldsSqlExpr.html +1 -1
  198. package/docs/functions/_saltcorn_db-common.internal.mkSelectOptions.html +1 -1
  199. package/docs/functions/_saltcorn_db-common.internal.mkWhere.html +1 -1
  200. package/docs/functions/_saltcorn_db-common.internal.orderByIsObject.html +1 -1
  201. package/docs/functions/_saltcorn_db-common.internal.orderByIsOperator.html +1 -1
  202. package/docs/functions/_saltcorn_db-common.internal.prefixFieldsInWhere.html +1 -1
  203. package/docs/functions/_saltcorn_db-common.internal.sqlBinOp.html +1 -1
  204. package/docs/functions/_saltcorn_db-common.internal.sqlFun.html +1 -1
  205. package/docs/functions/_saltcorn_db-common.internal.sqlsanitize.html +1 -1
  206. package/docs/functions/_saltcorn_db-common.internal.sqlsanitizeAllowDots.html +1 -1
  207. package/docs/functions/_saltcorn_db-common.internal.subSelectWhere.html +1 -1
  208. package/docs/functions/_saltcorn_db-common.multi-tenant.enable_multi_tenant.html +1 -1
  209. package/docs/functions/_saltcorn_db-common.multi-tenant.getRequestContext.html +1 -1
  210. package/docs/functions/_saltcorn_db-common.multi-tenant.getTenantSchema.html +1 -1
  211. package/docs/functions/_saltcorn_db-common.multi-tenant.init.html +1 -1
  212. package/docs/functions/_saltcorn_db-common.multi-tenant.is_it_multi_tenant.html +1 -1
  213. package/docs/functions/_saltcorn_db-common.multi-tenant.runWithTenant.html +1 -1
  214. package/docs/functions/_saltcorn_db-common.sqlite-commons.buildInsertBulkSql.html +1 -1
  215. package/docs/functions/_saltcorn_db-common.sqlite-commons.buildInsertSql.html +1 -1
  216. package/docs/functions/_saltcorn_db-common.sqlite-commons.commitAndBeginNewTransaction.html +1 -1
  217. package/docs/functions/_saltcorn_db-common.sqlite-commons.doCount.html +1 -1
  218. package/docs/functions/_saltcorn_db-common.sqlite-commons.doDeleteWhere.html +1 -1
  219. package/docs/functions/_saltcorn_db-common.sqlite-commons.doListScTables.html +1 -1
  220. package/docs/functions/_saltcorn_db-common.sqlite-commons.doListTables.html +1 -1
  221. package/docs/functions/_saltcorn_db-common.sqlite-commons.doListUserDefinedTables.html +1 -1
  222. package/docs/functions/_saltcorn_db-common.sqlite-commons.do_add_index.html +1 -1
  223. package/docs/functions/_saltcorn_db-common.sqlite-commons.do_drop_index.html +1 -1
  224. package/docs/functions/_saltcorn_db-common.sqlite-commons.mkVal.html +1 -1
  225. package/docs/functions/_saltcorn_db-common.sqlite-commons.openOrUseTransaction.html +1 -1
  226. package/docs/functions/_saltcorn_db-common.sqlite-commons.reprAsJson.html +1 -1
  227. package/docs/functions/_saltcorn_db-common.sqlite-commons.slugify.html +1 -1
  228. package/docs/functions/_saltcorn_db-common.sqlite-commons.tryCatchInTransaction.html +1 -1
  229. package/docs/functions/_saltcorn_db-common.sqlite-commons.whenTransactionisFree.html +1 -1
  230. package/docs/functions/_saltcorn_db-common.sqlite-commons.withTransaction.html +1 -1
  231. package/docs/functions/_saltcorn_markup.mktag.mkTag.html +1 -1
  232. package/docs/functions/_saltcorn_markup.tabs.tabs.html +1 -1
  233. package/docs/functions/_saltcorn_markup.workflow.renderWorkflow.html +1 -1
  234. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.androidFeatures.html +1 -1
  235. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.androidPermissions.html +1 -1
  236. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.buildTablesFile.html +1 -1
  237. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.copyPrepopulatedDb.html +1 -1
  238. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.copyServerFiles.html +1 -1
  239. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.copyShareExtFiles.html +1 -1
  240. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.copySiteLogo.html +1 -1
  241. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.copyTranslationFiles.html +1 -1
  242. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.createSqliteDb.html +1 -1
  243. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.extractDomain.html +1 -1
  244. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.generateAndroidVersionCode.html +1 -1
  245. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.hasAuthMethod.html +1 -1
  246. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.modifyAndroidManifest.html +1 -1
  247. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.modifyAppDelegate.html +1 -1
  248. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.modifyConfigXml.html +1 -1
  249. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.modifyGradleConfig.html +1 -1
  250. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.modifyInfoPlist.html +1 -1
  251. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.modifyShareViewController.html +1 -1
  252. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.modifyXcodeProjectFile.html +1 -1
  253. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.prepAppIcon.html +1 -1
  254. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.prepareAppIcon.html +1 -1
  255. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.prepareBuildDir.html +1 -1
  256. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.prepareExportOptionsPlist.html +1 -1
  257. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.prepareSplashIcon.html +1 -1
  258. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.prepareSplashPage.html +1 -1
  259. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.runAddEntitlementsScript.html +1 -1
  260. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.writeCapacitorConfig.html +1 -1
  261. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.writeCfgFile.html +1 -1
  262. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.writeDataExtractionRules.html +1 -1
  263. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.writeEntitlementsPlist.html +1 -1
  264. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.writeNetworkSecurityConfig.html +1 -1
  265. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.writePodfile.html +1 -1
  266. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.writePrivacyInfo.html +1 -1
  267. package/docs/functions/_saltcorn_mobile-builder.utils_package-bundle-utils.bundleMobileAppCode.html +1 -1
  268. package/docs/functions/_saltcorn_mobile-builder.utils_package-bundle-utils.bundlePackagesAndPlugins.html +1 -1
  269. package/docs/functions/_saltcorn_mobile-builder.utils_package-bundle-utils.copyOptionalSource.html +1 -1
  270. package/docs/functions/_saltcorn_mobile-builder.utils_package-bundle-utils.copyPluginMobileAppDirs.html +1 -1
  271. package/docs/functions/_saltcorn_mobile-builder.utils_package-bundle-utils.copyPublicDirs.html +1 -1
  272. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.add_index.html +1 -1
  273. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.add_unique_constraint.html +1 -1
  274. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.count.html +1 -1
  275. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.deleteWhere.html +1 -1
  276. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.drop_index.html +1 -1
  277. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.drop_reset_schema.html +1 -1
  278. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.drop_unique_constraint.html +1 -1
  279. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.init.html +1 -1
  280. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.insert.html +1 -1
  281. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.insertRows.html +1 -1
  282. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.listScTables.html +1 -1
  283. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.listTables.html +1 -1
  284. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.listUserDefinedTables.html +1 -1
  285. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.query.html +1 -1
  286. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.select.html +1 -1
  287. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.selectMaybeOne.html +1 -1
  288. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.selectOne.html +1 -1
  289. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.setConnectionObject.html +1 -1
  290. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.tableExists.html +1 -1
  291. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.time.html +1 -1
  292. package/docs/functions/_saltcorn_sqlite-mobile.sqlite_capacitor.update.html +1 -1
  293. package/docs/functions/_saltcorn_sqlite.sqlite.add_index.html +1 -1
  294. package/docs/functions/_saltcorn_sqlite.sqlite.add_unique_constraint.html +1 -1
  295. package/docs/functions/_saltcorn_sqlite.sqlite.begin.html +1 -1
  296. package/docs/functions/_saltcorn_sqlite.sqlite.changeConnection.html +1 -1
  297. package/docs/functions/_saltcorn_sqlite.sqlite.close.html +1 -1
  298. package/docs/functions/_saltcorn_sqlite.sqlite.commit.html +1 -1
  299. package/docs/functions/_saltcorn_sqlite.sqlite.count.html +1 -1
  300. package/docs/functions/_saltcorn_sqlite.sqlite.deleteWhere.html +1 -1
  301. package/docs/functions/_saltcorn_sqlite.sqlite.dropTable.html +1 -1
  302. package/docs/functions/_saltcorn_sqlite.sqlite.dropTables.html +1 -1
  303. package/docs/functions/_saltcorn_sqlite.sqlite.drop_index.html +1 -1
  304. package/docs/functions/_saltcorn_sqlite.sqlite.drop_reset_schema.html +1 -1
  305. package/docs/functions/_saltcorn_sqlite.sqlite.drop_unique_constraint.html +1 -1
  306. package/docs/functions/_saltcorn_sqlite.sqlite.getVersion.html +1 -1
  307. package/docs/functions/_saltcorn_sqlite.sqlite.get_db_filepath.html +1 -1
  308. package/docs/functions/_saltcorn_sqlite.sqlite.get_sql_logging.html +1 -1
  309. package/docs/functions/_saltcorn_sqlite.sqlite.init.html +1 -1
  310. package/docs/functions/_saltcorn_sqlite.sqlite.insert.html +1 -1
  311. package/docs/functions/_saltcorn_sqlite.sqlite.listScTables.html +1 -1
  312. package/docs/functions/_saltcorn_sqlite.sqlite.listTables.html +1 -1
  313. package/docs/functions/_saltcorn_sqlite.sqlite.listUserDefinedTables.html +1 -1
  314. package/docs/functions/_saltcorn_sqlite.sqlite.query.html +1 -1
  315. package/docs/functions/_saltcorn_sqlite.sqlite.rollback.html +1 -1
  316. package/docs/functions/_saltcorn_sqlite.sqlite.select.html +1 -1
  317. package/docs/functions/_saltcorn_sqlite.sqlite.selectMaybeOne.html +1 -1
  318. package/docs/functions/_saltcorn_sqlite.sqlite.selectOne.html +1 -1
  319. package/docs/functions/_saltcorn_sqlite.sqlite.set_sql_logging.html +1 -1
  320. package/docs/functions/_saltcorn_sqlite.sqlite.sql_log.html +1 -1
  321. package/docs/functions/_saltcorn_sqlite.sqlite.update.html +1 -1
  322. package/docs/functions/_saltcorn_sqlite.sqlite.updateWhere.html +1 -1
  323. package/docs/functions/_saltcorn_types.base_types.instanceOWithHtmlFile.html +1 -1
  324. package/docs/functions/_saltcorn_types.base_types.instanceOfFieldViewEdit.html +1 -1
  325. package/docs/functions/_saltcorn_types.base_types.instanceOfFieldViewShow.html +1 -1
  326. package/docs/functions/_saltcorn_types.base_types.instanceOfPack.html +1 -1
  327. package/docs/functions/_saltcorn_types.common_types.instanceOfErrorMsg.html +1 -1
  328. package/docs/functions/_saltcorn_types.common_types.instanceOfSuccessMsg.html +1 -1
  329. package/docs/functions/_saltcorn_types.common_types.instanceOfType.html +1 -1
  330. package/docs/functions/_saltcorn_types.model-abstracts_abstract_field.instanceOfField.html +1 -1
  331. package/docs/functions/_saltcorn_types.model-abstracts_abstract_page.instanceOfPage.html +1 -1
  332. package/docs/functions/_saltcorn_types.model-abstracts_abstract_plugin.instanceOfPlugin.html +1 -1
  333. package/docs/functions/_saltcorn_types.model-abstracts_abstract_table.instanceOfTable.html +1 -1
  334. package/docs/functions/_saltcorn_types.model-abstracts_abstract_view.instanceOfView.html +1 -1
  335. package/docs/hierarchy.html +1 -1
  336. package/docs/interfaces/_saltcorn_db-common.dbtypes.UserLike.html +2 -2
  337. package/docs/interfaces/_saltcorn_markup.types.TagExports.html +2 -2
  338. package/docs/interfaces/_saltcorn_mobile-builder.utils_common-build-utils.ScCapacitorConfig.html +2 -2
  339. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_field.AbstractField.html +2 -2
  340. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_field.AbstractFieldRepeat.html +2 -2
  341. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_form.AbstractForm.html +2 -2
  342. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_page.AbstractPage.html +2 -2
  343. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_page_group.AbstractPageGroup.html +2 -2
  344. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_page_group_member.AbstractPageGroupMember.html +2 -2
  345. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_plugin.AbstractPlugin.html +2 -2
  346. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_role.AbstractRole.html +2 -2
  347. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_table.AbstractTable.html +2 -2
  348. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_tag.AbstractTag.html +2 -2
  349. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_tag_entry.AbstractTagEntry.html +2 -2
  350. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_trigger.AbstractTrigger.html +2 -2
  351. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_user.AbstractUser.html +2 -2
  352. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_user.ForUserRequest.html +2 -2
  353. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_view.AbstractView.html +2 -2
  354. package/docs/interfaces/_saltcorn_types.model-abstracts_abstract_workflow.AbstractWorkflow.html +2 -2
  355. package/docs/modules/_saltcorn_data.html +1 -1
  356. package/docs/modules/_saltcorn_data.migrations_202604091531.html +1 -0
  357. package/docs/modules/_saltcorn_data.migrations_202604111200.html +1 -0
  358. package/docs/modules/_saltcorn_data.mobile-mocks_npm_npm-registry-fetch.html +1 -0
  359. package/docs/modules/_saltcorn_data.mobile-mocks_saltcorn_admin-models-tenant.html +1 -0
  360. package/docs/modules/_saltcorn_data.mobile-mocks_saltcorn_plugins-loader-plugin-installer.html +1 -0
  361. package/docs/modules/_saltcorn_data.mobile-mocks_saltcorn_plugins-loader-stable-versioning.html +1 -0
  362. package/docs/types/_saltcorn_data.diagram_node_extract_utils.ExtractOpts.html +2 -2
  363. package/docs/types/_saltcorn_data.diagram_node_extract_utils.ExtractResult.html +2 -2
  364. package/docs/types/_saltcorn_data.diagram_nodes_node.NodeType.html +1 -1
  365. package/docs/types/_saltcorn_data.models_config.ConfigTypes.html +1 -1
  366. package/docs/types/_saltcorn_data.models_config.SingleConfig.html +1 -1
  367. package/docs/types/_saltcorn_data.models_eventlog.EventLogCfg.html +2 -2
  368. package/docs/types/_saltcorn_data.models_file.FileCfg.html +2 -2
  369. package/docs/types/_saltcorn_data.models_form.AdditionalButton.html +1 -1
  370. package/docs/types/_saltcorn_data.models_form.FormCfg.html +2 -2
  371. package/docs/types/_saltcorn_data.models_internal_push_message_helper.MobileSubscription.html +2 -2
  372. package/docs/types/_saltcorn_data.models_internal_push_message_helper.WebPushSubscription.html +2 -2
  373. package/docs/types/_saltcorn_data.models_internal_s3_helpers.S3HeadResult.html +1 -1
  374. package/docs/types/_saltcorn_data.models_internal_s3_helpers.S3ListResult.html +2 -2
  375. package/docs/types/_saltcorn_data.models_page_group.ScreenInfoParams.html +2 -2
  376. package/docs/types/_saltcorn_data.models_table.ChildRelations.html +2 -2
  377. package/docs/types/_saltcorn_data.models_table.ParentRelations.html +2 -2
  378. package/docs/types/_saltcorn_data.models_table.RelationData.html +2 -2
  379. package/docs/types/_saltcorn_data.models_tag_entry.TagEntryCfg.html +1 -1
  380. package/docs/types/_saltcorn_data.models_view.FindViewsPred.html +1 -1
  381. package/docs/types/_saltcorn_db-common.dbtypes.AggregationOptions.html +2 -2
  382. package/docs/types/_saltcorn_db-common.dbtypes.CoordOpts.html +2 -2
  383. package/docs/types/_saltcorn_db-common.dbtypes.DatabaseClient.html +2 -2
  384. package/docs/types/_saltcorn_db-common.dbtypes.JoinField.html +2 -2
  385. package/docs/types/_saltcorn_db-common.dbtypes.JoinFields.html +1 -1
  386. package/docs/types/_saltcorn_db-common.dbtypes.JoinOptions.html +1 -1
  387. package/docs/types/_saltcorn_db-common.dbtypes.JsonPath.html +1 -1
  388. package/docs/types/_saltcorn_db-common.dbtypes.JsonPathElem.html +1 -1
  389. package/docs/types/_saltcorn_db-common.dbtypes.Operator.html +1 -1
  390. package/docs/types/_saltcorn_db-common.dbtypes.PartialSome.html +1 -1
  391. package/docs/types/_saltcorn_db-common.dbtypes.PrimaryKeyValue.html +1 -1
  392. package/docs/types/_saltcorn_db-common.dbtypes.Row.html +1 -1
  393. package/docs/types/_saltcorn_db-common.dbtypes.SelectOptions.html +2 -2
  394. package/docs/types/_saltcorn_db-common.dbtypes.StrongRow.html +1 -1
  395. package/docs/types/_saltcorn_db-common.dbtypes.SubselectOptions.html +2 -2
  396. package/docs/types/_saltcorn_db-common.dbtypes.Value.html +1 -1
  397. package/docs/types/_saltcorn_db-common.dbtypes.Where.html +2 -2
  398. package/docs/types/_saltcorn_db-common.sqlite-commons.SqlAndValues.html +2 -2
  399. package/docs/types/_saltcorn_db-common.types.DbExportsType.html +2 -2
  400. package/docs/types/_saltcorn_db-common.types.GenObj.html +1 -1
  401. package/docs/types/_saltcorn_markup.emergency_layout.WrapParams.html +2 -2
  402. package/docs/types/_saltcorn_markup.helpers.CheckBoxGroupOpts.html +2 -2
  403. package/docs/types/_saltcorn_markup.helpers.PaginationOpts.html +2 -2
  404. package/docs/types/_saltcorn_markup.helpers.RadioGroupOpts.html +2 -2
  405. package/docs/types/_saltcorn_markup.helpers.SearchBarOpts.html +2 -2
  406. package/docs/types/_saltcorn_markup.layout.RenderOpts-1.html +2 -2
  407. package/docs/types/_saltcorn_markup.layout.RenderOpts.html +2 -2
  408. package/docs/types/_saltcorn_markup.mjml-layout.RenderOpts.html +2 -2
  409. package/docs/types/_saltcorn_markup.table.HeadersParams.html +2 -2
  410. package/docs/types/_saltcorn_markup.table.OptsParams.html +2 -2
  411. package/docs/types/_saltcorn_markup.types.AttributeVal.html +1 -1
  412. package/docs/types/_saltcorn_markup.types.Attributes.html +2 -2
  413. package/docs/types/_saltcorn_markup.types.ClassVal.html +1 -1
  414. package/docs/types/_saltcorn_markup.types.Element.html +1 -1
  415. package/docs/types/_saltcorn_markup.types.Falsy.html +1 -1
  416. package/docs/types/_saltcorn_markup.types.StyleVal.html +1 -1
  417. package/docs/types/_saltcorn_markup.types.TagFunction.html +1 -1
  418. package/docs/types/_saltcorn_mobile-builder.mobile-builder.IosCfg.html +2 -2
  419. package/docs/types/_saltcorn_mobile-builder.utils_capacitor-helper.CapacitorCfg.html +2 -2
  420. package/docs/types/_saltcorn_types.base_types.Action.html +3 -3
  421. package/docs/types/_saltcorn_types.base_types.AuthenticationMethod.html +2 -2
  422. package/docs/types/_saltcorn_types.base_types.CalcJoinfield.html +2 -2
  423. package/docs/types/_saltcorn_types.base_types.CapacitorPlugin.html +2 -2
  424. package/docs/types/_saltcorn_types.base_types.CodePagePack.html +2 -2
  425. package/docs/types/_saltcorn_types.base_types.Column.html +2 -2
  426. package/docs/types/_saltcorn_types.base_types.ConnectObjType.html +2 -2
  427. package/docs/types/_saltcorn_types.base_types.ConnectedObjects.html +2 -2
  428. package/docs/types/_saltcorn_types.base_types.CopilotSkill.html +2 -2
  429. package/docs/types/_saltcorn_types.base_types.ErrorObj.html +2 -2
  430. package/docs/types/_saltcorn_types.base_types.FieldLike.html +1 -1
  431. package/docs/types/_saltcorn_types.base_types.FieldView.html +1 -1
  432. package/docs/types/_saltcorn_types.base_types.Header.html +2 -2
  433. package/docs/types/_saltcorn_types.base_types.JoinFieldOption.html +2 -2
  434. package/docs/types/_saltcorn_types.base_types.Layout.html +1 -1
  435. package/docs/types/_saltcorn_types.base_types.MenuItem.html +2 -2
  436. package/docs/types/_saltcorn_types.base_types.MobileConfig.html +2 -2
  437. package/docs/types/_saltcorn_types.base_types.ModelPattern.html +6 -6
  438. package/docs/types/_saltcorn_types.base_types.Pack.html +2 -2
  439. package/docs/types/_saltcorn_types.base_types.Plugin.html +1 -1
  440. package/docs/types/_saltcorn_types.base_types.PluginFunction.html +2 -2
  441. package/docs/types/_saltcorn_types.base_types.PluginLayout.html +2 -2
  442. package/docs/types/_saltcorn_types.base_types.PluginRoute.html +2 -2
  443. package/docs/types/_saltcorn_types.base_types.PluginSourceType.html +1 -1
  444. package/docs/types/_saltcorn_types.base_types.PluginType.html +2 -2
  445. package/docs/types/_saltcorn_types.base_types.PluginWrap.html +1 -1
  446. package/docs/types/_saltcorn_types.base_types.PluginWrapArg.html +2 -2
  447. package/docs/types/_saltcorn_types.base_types.RelationOption.html +2 -2
  448. package/docs/types/_saltcorn_types.base_types.Req.html +2 -2
  449. package/docs/types/_saltcorn_types.base_types.Res.html +2 -2
  450. package/docs/types/_saltcorn_types.base_types.ResultType.html +2 -2
  451. package/docs/types/_saltcorn_types.base_types.RouteAction.html +1 -1
  452. package/docs/types/_saltcorn_types.base_types.RunExtra.html +1 -1
  453. package/docs/types/_saltcorn_types.base_types.SlugStepType.html +2 -2
  454. package/docs/types/_saltcorn_types.base_types.StepResType.html +1 -1
  455. package/docs/types/_saltcorn_types.base_types.SubField.html +2 -2
  456. package/docs/types/_saltcorn_types.base_types.TableProvider.html +2 -2
  457. package/docs/types/_saltcorn_types.base_types.TableQuery.html +2 -2
  458. package/docs/types/_saltcorn_types.base_types.Tablely.html +1 -1
  459. package/docs/types/_saltcorn_types.base_types.ViewTemplate.html +2 -2
  460. package/docs/types/_saltcorn_types.common_types.ErrorMessage.html +2 -2
  461. package/docs/types/_saltcorn_types.common_types.GenObj.html +1 -1
  462. package/docs/types/_saltcorn_types.common_types.ReqRes.html +2 -2
  463. package/docs/types/_saltcorn_types.common_types.ResultMessage.html +1 -1
  464. package/docs/types/_saltcorn_types.common_types.SuccessMessage.html +2 -2
  465. package/docs/types/_saltcorn_types.common_types.Type.html +2 -2
  466. package/docs/types/_saltcorn_types.model-abstracts_abstract_event_log.EventLogPack.html +2 -2
  467. package/docs/types/_saltcorn_types.model-abstracts_abstract_field.FieldCfg.html +2 -2
  468. package/docs/types/_saltcorn_types.model-abstracts_abstract_field.InputType.html +1 -1
  469. package/docs/types/_saltcorn_types.model-abstracts_abstract_form.AdditionalButton.html +2 -2
  470. package/docs/types/_saltcorn_types.model-abstracts_abstract_library.LibraryCfg.html +2 -2
  471. package/docs/types/_saltcorn_types.model-abstracts_abstract_library.LibraryPack.html +1 -1
  472. package/docs/types/_saltcorn_types.model-abstracts_abstract_model.ModelCfg.html +2 -2
  473. package/docs/types/_saltcorn_types.model-abstracts_abstract_model.ModelPack.html +1 -1
  474. package/docs/types/_saltcorn_types.model-abstracts_abstract_model_instance.ModelInstanceCfg.html +2 -2
  475. package/docs/types/_saltcorn_types.model-abstracts_abstract_model_instance.ModelInstancePack.html +1 -1
  476. package/docs/types/_saltcorn_types.model-abstracts_abstract_page.PageCfg.html +3 -2
  477. package/docs/types/_saltcorn_types.model-abstracts_abstract_page.PagePack.html +1 -1
  478. package/docs/types/_saltcorn_types.model-abstracts_abstract_page_group.PageGroupCfg.html +2 -2
  479. package/docs/types/_saltcorn_types.model-abstracts_abstract_page_group.PageGroupPack.html +1 -1
  480. package/docs/types/_saltcorn_types.model-abstracts_abstract_page_group_member.PageGroupMemberCfg.html +2 -2
  481. package/docs/types/_saltcorn_types.model-abstracts_abstract_page_group_member.PageGroupMemberPack.html +1 -1
  482. package/docs/types/_saltcorn_types.model-abstracts_abstract_plugin.PluginCfg.html +2 -2
  483. package/docs/types/_saltcorn_types.model-abstracts_abstract_plugin.PluginPack.html +1 -1
  484. package/docs/types/_saltcorn_types.model-abstracts_abstract_role.RoleCfg.html +1 -1
  485. package/docs/types/_saltcorn_types.model-abstracts_abstract_role.RolePack.html +1 -1
  486. package/docs/types/_saltcorn_types.model-abstracts_abstract_table.TableCfg.html +3 -2
  487. package/docs/types/_saltcorn_types.model-abstracts_abstract_table.TablePack.html +1 -1
  488. package/docs/types/_saltcorn_types.model-abstracts_abstract_tag.TagPack.html +2 -2
  489. package/docs/types/_saltcorn_types.model-abstracts_abstract_tag_entry.TagEntryPack.html +2 -2
  490. package/docs/types/_saltcorn_types.model-abstracts_abstract_trigger.TriggerCfg.html +3 -2
  491. package/docs/types/_saltcorn_types.model-abstracts_abstract_trigger.TriggerPack.html +1 -1
  492. package/docs/types/_saltcorn_types.model-abstracts_abstract_view.ViewCfg.html +3 -2
  493. package/docs/types/_saltcorn_types.model-abstracts_abstract_view.ViewPack.html +1 -1
  494. package/docs/types/_saltcorn_types.model-abstracts_abstract_workflow.ConfigWorkflowStep.html +1 -1
  495. package/docs/types/_saltcorn_types.model-abstracts_abstract_workflow.RunResult.html +2 -2
  496. package/docs/types/_saltcorn_types.model-abstracts_abstract_workflow_run.WorkflowRunCfg.html +2 -2
  497. package/docs/types/_saltcorn_types.model-abstracts_abstract_workflow_step.WorkflowStepCfg.html +2 -2
  498. package/docs/types/_saltcorn_types.model-abstracts_abstract_workflow_step.WorkflowStepPack.html +1 -1
  499. package/docs/types/_saltcorn_types.model-abstracts_abstract_workflow_trace.WorkflowTraceCfg.html +2 -2
  500. package/docs/variables/_saltcorn_admin-models..backup.create_backup.html +1 -1
  501. package/docs/variables/_saltcorn_admin-models..backup.create_csv_from_rows.html +1 -1
  502. package/docs/variables/_saltcorn_admin-models..backup.restore.html +1 -1
  503. package/docs/variables/_saltcorn_admin-models..pack.add_to_menu.html +1 -1
  504. package/docs/variables/_saltcorn_admin-models..pack.can_install_pack.html +1 -1
  505. package/docs/variables/_saltcorn_admin-models..pack.fetch_available_packs.html +1 -1
  506. package/docs/variables/_saltcorn_admin-models..pack.fetch_pack_by_name.html +1 -1
  507. package/docs/variables/_saltcorn_admin-models..pack.install_pack.html +1 -1
  508. package/docs/variables/_saltcorn_admin-models..pack.library_pack.html +1 -1
  509. package/docs/variables/_saltcorn_admin-models..pack.model_instance_pack.html +1 -1
  510. package/docs/variables/_saltcorn_admin-models..pack.model_pack.html +1 -1
  511. package/docs/variables/_saltcorn_admin-models..pack.page_group_pack.html +1 -1
  512. package/docs/variables/_saltcorn_admin-models..pack.page_pack.html +1 -1
  513. package/docs/variables/_saltcorn_admin-models..pack.plugin_pack.html +1 -1
  514. package/docs/variables/_saltcorn_admin-models..pack.role_pack.html +1 -1
  515. package/docs/variables/_saltcorn_admin-models..pack.table_pack.html +1 -1
  516. package/docs/variables/_saltcorn_admin-models..pack.trigger_pack.html +1 -1
  517. package/docs/variables/_saltcorn_admin-models..pack.uninstall_pack.html +1 -1
  518. package/docs/variables/_saltcorn_admin-models..pack.view_pack.html +1 -1
  519. package/docs/variables/_saltcorn_admin-models..tenant.copy_tenant_template.html +1 -1
  520. package/docs/variables/_saltcorn_admin-models..tenant.create_tenant.html +1 -1
  521. package/docs/variables/_saltcorn_admin-models..tenant.deleteTenant.html +1 -1
  522. package/docs/variables/_saltcorn_admin-models..tenant.domain_sanitize.html +1 -1
  523. package/docs/variables/_saltcorn_admin-models..tenant.eachTenant.html +1 -1
  524. package/docs/variables/_saltcorn_admin-models..tenant.getAllTenantRows.html +1 -1
  525. package/docs/variables/_saltcorn_admin-models..tenant.getAllTenants.html +1 -1
  526. package/docs/variables/_saltcorn_admin-models..tenant.insertTenant.html +1 -1
  527. package/docs/variables/_saltcorn_admin-models..tenant.switchToTenant.html +1 -1
  528. package/docs/variables/_saltcorn_admin-models.models_backup.backup.html +1 -1
  529. package/docs/variables/_saltcorn_admin-models.pack.pack.html +1 -1
  530. package/docs/variables/_saltcorn_admin-models.tenant.tenant.html +1 -1
  531. package/docs/variables/_saltcorn_common-code.tests_expected_relations.expectedFive.html +1 -1
  532. package/docs/variables/_saltcorn_common-code.tests_expected_relations.expectedFour.html +1 -1
  533. package/docs/variables/_saltcorn_common-code.tests_expected_relations.expectedOne.html +1 -1
  534. package/docs/variables/_saltcorn_common-code.tests_expected_relations.expectedSix.html +1 -1
  535. package/docs/variables/_saltcorn_common-code.tests_expected_relations.expectedThree.html +1 -1
  536. package/docs/variables/_saltcorn_common-code.tests_expected_relations.expectedTwo.html +1 -1
  537. package/docs/variables/_saltcorn_data..migrations.html +1 -1
  538. package/docs/variables/_saltcorn_data..plugin_helper.run_action_column.html +1 -1
  539. package/docs/variables/_saltcorn_data..utils.NotAuthorized.html +1 -1
  540. package/docs/variables/_saltcorn_data..utils.isPushEnabled.html +1 -1
  541. package/docs/variables/_saltcorn_data..utils.sleep.html +1 -1
  542. package/docs/variables/_saltcorn_data.base-plugin_actions.actions.html +1 -1
  543. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.fieldviews.html +1 -1
  544. package/docs/variables/_saltcorn_data.base-plugin_fileview.fileviews.html +1 -1
  545. package/docs/variables/_saltcorn_data.base-plugin_index.index.html +1 -1
  546. package/docs/variables/_saltcorn_data.base-plugin_types.types.html +1 -1
  547. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_edit.edit.html +1 -1
  548. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_feed.feed.html +1 -1
  549. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_filter.filter.html +1 -1
  550. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_list.list.html +1 -1
  551. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_listshowlist.listshowlist.html +1 -1
  552. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_room.room-1.html +1 -1
  553. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_room.room.html +1 -1
  554. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_show.show.html +1 -1
  555. package/docs/variables/_saltcorn_data.base-plugin_viewtemplates_viewable_fields.edit_build_in_actions.html +1 -1
  556. package/docs/variables/_saltcorn_data.contract.contract.html +1 -1
  557. package/docs/variables/_saltcorn_data.db_connect.connect.html +1 -1
  558. package/docs/variables/_saltcorn_data.db_fa5-icons.fa5Icons.html +1 -1
  559. package/docs/variables/_saltcorn_data.db_fixtures.fixtures.html +1 -1
  560. package/docs/variables/_saltcorn_data.db_index.dbExports.html +1 -1
  561. package/docs/variables/_saltcorn_data.db_state.state.html +1 -1
  562. package/docs/variables/_saltcorn_data.migrations_202005141503.sql.html +1 -1
  563. package/docs/variables/_saltcorn_data.migrations_202005241712.sql.html +1 -1
  564. package/docs/variables/_saltcorn_data.migrations_202005251037.sql.html +1 -1
  565. package/docs/variables/_saltcorn_data.migrations_202005282134.sql.html +1 -1
  566. package/docs/variables/_saltcorn_data.migrations_202006022156.sql.html +1 -1
  567. package/docs/variables/_saltcorn_data.migrations_202006051507.sql.html +1 -1
  568. package/docs/variables/_saltcorn_data.migrations_202006240906.sql.html +1 -1
  569. package/docs/variables/_saltcorn_data.migrations_202007091707.sql.html +1 -1
  570. package/docs/variables/_saltcorn_data.migrations_202007202144.sql.html +1 -1
  571. package/docs/variables/_saltcorn_data.migrations_202008031500.sql.html +1 -1
  572. package/docs/variables/_saltcorn_data.migrations_202008051415.sql.html +1 -1
  573. package/docs/variables/_saltcorn_data.migrations_202008121149.sql_pg.html +1 -1
  574. package/docs/variables/_saltcorn_data.migrations_202008121149.sql_sqlite.html +1 -1
  575. package/docs/variables/_saltcorn_data.migrations_202009112140.sql_pg.html +1 -1
  576. package/docs/variables/_saltcorn_data.migrations_202009112140.sql_sqlite.html +1 -1
  577. package/docs/variables/_saltcorn_data.migrations_202009181655.sql.html +1 -1
  578. package/docs/variables/_saltcorn_data.migrations_202009221105.sql.html +1 -1
  579. package/docs/variables/_saltcorn_data.migrations_202009231331.sql.html +1 -1
  580. package/docs/variables/_saltcorn_data.migrations_202009301531.sql.html +1 -1
  581. package/docs/variables/_saltcorn_data.migrations_202010231444.sql.html +1 -1
  582. package/docs/variables/_saltcorn_data.migrations_202010251412.sql.html +1 -1
  583. package/docs/variables/_saltcorn_data.migrations_202011021749.sql.html +1 -1
  584. package/docs/variables/_saltcorn_data.migrations_202011051353.sql.html +1 -1
  585. package/docs/variables/_saltcorn_data.migrations_202011111127.sql.html +1 -1
  586. package/docs/variables/_saltcorn_data.migrations_202012011203.sql.html +1 -1
  587. package/docs/variables/_saltcorn_data.migrations_202012100841.sql.html +1 -1
  588. package/docs/variables/_saltcorn_data.migrations_202012281835.sql.html +1 -1
  589. package/docs/variables/_saltcorn_data.migrations_202101061051.sql.html +1 -1
  590. package/docs/variables/_saltcorn_data.migrations_202101141128.sql.html +1 -1
  591. package/docs/variables/_saltcorn_data.migrations_202102091312.sql.html +1 -1
  592. package/docs/variables/_saltcorn_data.migrations_202102101624.sql.html +1 -1
  593. package/docs/variables/_saltcorn_data.migrations_202102172148.sql.html +1 -1
  594. package/docs/variables/_saltcorn_data.migrations_202102261650.sql.html +1 -1
  595. package/docs/variables/_saltcorn_data.migrations_202106102347.sql.html +1 -1
  596. package/docs/variables/_saltcorn_data.migrations_202106112120.sql.html +1 -1
  597. package/docs/variables/_saltcorn_data.migrations_202106120012.sql.html +1 -1
  598. package/docs/variables/_saltcorn_data.migrations_202106120220.sql.html +1 -1
  599. package/docs/variables/_saltcorn_data.migrations_202106121701.sql.html +1 -1
  600. package/docs/variables/_saltcorn_data.migrations_202106121703.sql_pg.html +1 -1
  601. package/docs/variables/_saltcorn_data.migrations_202106121703.sql_sqlite.html +1 -1
  602. package/docs/variables/_saltcorn_data.migrations_202106251126.sql.html +1 -1
  603. package/docs/variables/_saltcorn_data.migrations_202107281619.sql.html +1 -1
  604. package/docs/variables/_saltcorn_data.migrations_202107302158.sql_pg.html +1 -1
  605. package/docs/variables/_saltcorn_data.migrations_202107302158.sql_sqlite.html +1 -1
  606. package/docs/variables/_saltcorn_data.migrations_202108022257.sql.html +1 -1
  607. package/docs/variables/_saltcorn_data.migrations_202109201624.sql.html +1 -1
  608. package/docs/variables/_saltcorn_data.migrations_202109301031.sql_pg.html +1 -1
  609. package/docs/variables/_saltcorn_data.migrations_202109301031.sql_sqlite.html +1 -1
  610. package/docs/variables/_saltcorn_data.migrations_202111290253.sql_pg.html +1 -1
  611. package/docs/variables/_saltcorn_data.migrations_202111290253.sql_sqlite.html +1 -1
  612. package/docs/variables/_saltcorn_data.migrations_202112282254.sql_pg.html +1 -1
  613. package/docs/variables/_saltcorn_data.migrations_202112282254.sql_sqlite.html +1 -1
  614. package/docs/variables/_saltcorn_data.migrations_202207022002.sql.html +1 -1
  615. package/docs/variables/_saltcorn_data.migrations_202207252150.sql_pg.html +1 -1
  616. package/docs/variables/_saltcorn_data.migrations_202207252150.sql_sqlite.html +1 -1
  617. package/docs/variables/_saltcorn_data.migrations_202207261221.sql.html +1 -1
  618. package/docs/variables/_saltcorn_data.migrations_202208101144.sql_pg.html +1 -1
  619. package/docs/variables/_saltcorn_data.migrations_202208101144.sql_sqlite.html +1 -1
  620. package/docs/variables/_saltcorn_data.migrations_202211040031.sql.html +1 -1
  621. package/docs/variables/_saltcorn_data.migrations_202212112152.sql_pg.html +1 -1
  622. package/docs/variables/_saltcorn_data.migrations_202212112152.sql_sqlite.html +1 -1
  623. package/docs/variables/_saltcorn_data.migrations_202301130917.sql.html +1 -1
  624. package/docs/variables/_saltcorn_data.migrations_202303201126.sql_pg.html +1 -1
  625. package/docs/variables/_saltcorn_data.migrations_202303201126.sql_sqlite.html +1 -1
  626. package/docs/variables/_saltcorn_data.migrations_202303221944.sql_pg.html +1 -1
  627. package/docs/variables/_saltcorn_data.migrations_202303221944.sql_sqlite.html +1 -1
  628. package/docs/variables/_saltcorn_data.migrations_202304281224.sql.html +1 -1
  629. package/docs/variables/_saltcorn_data.migrations_202305031518.sql_pg.html +1 -1
  630. package/docs/variables/_saltcorn_data.migrations_202305031518.sql_sqlite.html +1 -1
  631. package/docs/variables/_saltcorn_data.migrations_202308211648.sql.html +1 -1
  632. package/docs/variables/_saltcorn_data.migrations_202311011755.sql_pg.html +1 -1
  633. package/docs/variables/_saltcorn_data.migrations_202311011755.sql_sqlite.html +1 -1
  634. package/docs/variables/_saltcorn_data.migrations_202311231356.sql.html +1 -1
  635. package/docs/variables/_saltcorn_data.migrations_202402071125.sql.html +1 -1
  636. package/docs/variables/_saltcorn_data.migrations_202406260915.sql.html +1 -1
  637. package/docs/variables/_saltcorn_data.migrations_202412051957.sql_pg.html +1 -1
  638. package/docs/variables/_saltcorn_data.migrations_202412051957.sql_sqlite.html +1 -1
  639. package/docs/variables/_saltcorn_data.migrations_202412111526.sql_pg.html +1 -1
  640. package/docs/variables/_saltcorn_data.migrations_202412111526.sql_sqlite.html +1 -1
  641. package/docs/variables/_saltcorn_data.migrations_202501081226.sql_pg.html +1 -1
  642. package/docs/variables/_saltcorn_data.migrations_202501081226.sql_sqlite.html +1 -1
  643. package/docs/variables/_saltcorn_data.migrations_202501201239.sql_sqlite.html +1 -1
  644. package/docs/variables/_saltcorn_data.migrations_202501262157.sql.html +1 -1
  645. package/docs/variables/_saltcorn_data.migrations_202503071353.sql_pg.html +1 -1
  646. package/docs/variables/_saltcorn_data.migrations_202506050958.sql.html +1 -1
  647. package/docs/variables/_saltcorn_data.migrations_202510110312.sql_pg.html +1 -1
  648. package/docs/variables/_saltcorn_data.migrations_202510110312.sql_sqlite.html +1 -1
  649. package/docs/variables/_saltcorn_data.migrations_202511081024.sql.html +1 -1
  650. package/docs/variables/_saltcorn_data.migrations_202604091531.sql.html +1 -0
  651. package/docs/variables/_saltcorn_data.mobile-mocks_npm_npm-registry-fetch.npmRegistryFetch.html +1 -0
  652. package/docs/variables/_saltcorn_data.mobile-mocks_saltcorn_html-pdf-node.htmlPdfNode.html +1 -1
  653. package/docs/variables/_saltcorn_data.models_config.configExports.html +1 -1
  654. package/docs/variables/_saltcorn_data.models_discovery.discovery.html +1 -1
  655. package/docs/variables/_saltcorn_data.models_email.email.html +1 -1
  656. package/docs/variables/_saltcorn_data.models_expression.expression.html +1 -1
  657. package/docs/variables/_saltcorn_data.models_index.config.available_languages.html +1 -1
  658. package/docs/variables/_saltcorn_data.models_index.config.check_email_mask.html +1 -1
  659. package/docs/variables/_saltcorn_data.models_index.config.configTypes.html +1 -1
  660. package/docs/variables/_saltcorn_data.models_index.config.deleteConfig.html +1 -1
  661. package/docs/variables/_saltcorn_data.models_index.config.getAllConfig.html +1 -1
  662. package/docs/variables/_saltcorn_data.models_index.config.getConfig.html +1 -1
  663. package/docs/variables/_saltcorn_data.models_index.config.get_base_url.html +1 -1
  664. package/docs/variables/_saltcorn_data.models_index.config.get_latest_npm_version.html +1 -1
  665. package/docs/variables/_saltcorn_data.models_index.config.remove_from_menu.html +1 -1
  666. package/docs/variables/_saltcorn_data.models_index.config.save_menu_items.html +1 -1
  667. package/docs/variables/_saltcorn_data.models_index.config.setConfig.html +1 -1
  668. package/docs/variables/_saltcorn_data.models_index.discovery.discover_tables.html +1 -1
  669. package/docs/variables/_saltcorn_data.models_index.discovery.discoverable_tables.html +1 -1
  670. package/docs/variables/_saltcorn_data.models_index.discovery.findType.html +1 -1
  671. package/docs/variables/_saltcorn_data.models_index.discovery.get_existing_views.html +1 -1
  672. package/docs/variables/_saltcorn_data.models_index.discovery.implement_discovery.html +1 -1
  673. package/docs/variables/_saltcorn_data.models_index.email.getMailTransport.html +1 -1
  674. package/docs/variables/_saltcorn_data.models_index.email.send_verification_email.html +1 -1
  675. package/docs/variables/_saltcorn_data.models_index.email.viewToEmailHtml.html +1 -1
  676. package/docs/variables/_saltcorn_data.models_index.expression.apply_calculated_fields.html +1 -1
  677. package/docs/variables/_saltcorn_data.models_index.expression.apply_calculated_fields_stored.html +1 -1
  678. package/docs/variables/_saltcorn_data.models_index.expression.eval_expression.html +9 -1
  679. package/docs/variables/_saltcorn_data.models_index.expression.expressionValidator.html +1 -1
  680. package/docs/variables/_saltcorn_data.models_index.expression.get_async_expression_function.html +1 -1
  681. package/docs/variables/_saltcorn_data.models_index.expression.get_expression_function.html +1 -1
  682. package/docs/variables/_saltcorn_data.models_index.expression.jsexprToWhere.html +1 -1
  683. package/docs/variables/_saltcorn_data.models_index.expression.recalculate_for_stored.html +1 -1
  684. package/docs/variables/_saltcorn_data.models_index.expression.transform_for_async.html +1 -1
  685. package/docs/variables/_saltcorn_data.models_index.layout.eachView.html +1 -1
  686. package/docs/variables/_saltcorn_data.models_index.layout.getStringsForI18n.html +1 -1
  687. package/docs/variables/_saltcorn_data.models_index.layout.getViews.html +1 -1
  688. package/docs/variables/_saltcorn_data.models_index.layout.translateLayout.html +1 -1
  689. package/docs/variables/_saltcorn_data.models_index.layout.traverse.html +1 -1
  690. package/docs/variables/_saltcorn_data.models_index.layout.traverseSync.html +1 -1
  691. package/docs/variables/_saltcorn_data.models_index.random.all_views.html +1 -1
  692. package/docs/variables/_saltcorn_data.models_index.random.fill_table_row.html +1 -1
  693. package/docs/variables/_saltcorn_data.models_index.random.initial_view.html +1 -1
  694. package/docs/variables/_saltcorn_data.models_index.random.random_table.html +1 -1
  695. package/docs/variables/_saltcorn_data.models_index.scheduler.runScheduler.html +1 -1
  696. package/docs/variables/_saltcorn_data.models_layout.layout.html +1 -1
  697. package/docs/variables/_saltcorn_data.models_random.random.html +1 -1
  698. package/docs/variables/_saltcorn_data.models_scheduler.scheduler.html +1 -1
  699. package/docs/variables/_saltcorn_data.plugin-helper.add_free_variables_to_joinfields.html +1 -1
  700. package/docs/variables/_saltcorn_data.tests_mocks.mocks.html +1 -1
  701. package/docs/variables/_saltcorn_data.tests_remote_query_helper.renderEditInEditConfig.html +1 -1
  702. package/docs/variables/_saltcorn_data.utils.utils.html +1 -1
  703. package/docs/variables/_saltcorn_data.web-mobile-commons.webMobileCommons.html +1 -1
  704. package/docs/variables/_saltcorn_db-common.internal.dbCommonModulePath.html +1 -1
  705. package/docs/variables/_saltcorn_db-common.multi-tenant.tenantNamespace.html +1 -1
  706. package/docs/variables/_saltcorn_db-common.tenants.tenants.html +1 -1
  707. package/docs/variables/_saltcorn_markup..export_.html +1 -1
  708. package/docs/variables/_saltcorn_markup.builder.builder.html +1 -1
  709. package/docs/variables/_saltcorn_markup.emergency_layout.EmergencyLayoutExports.html +1 -1
  710. package/docs/variables/_saltcorn_markup.form.form.html +1 -1
  711. package/docs/variables/_saltcorn_markup.helpers.HelpersExports.html +1 -1
  712. package/docs/variables/_saltcorn_markup.layout.LayoutExports-1.html +1 -1
  713. package/docs/variables/_saltcorn_markup.layout.LayoutExports.html +1 -1
  714. package/docs/variables/_saltcorn_markup.layout_utils.layoutUtils.html +1 -1
  715. package/docs/variables/_saltcorn_markup.mjml-layout.LayoutExports.html +1 -1
  716. package/docs/variables/_saltcorn_markup.mjml-tags.tagsExports.html +1 -1
  717. package/docs/variables/_saltcorn_markup.table.TableExports.html +1 -1
  718. package/docs/variables/_saltcorn_markup.tags.tagsExports.html +1 -1
  719. package/docs/variables/_saltcorn_types..generators.generateBool.html +1 -1
  720. package/docs/variables/_saltcorn_types..generators.generateString.html +1 -1
  721. package/docs/variables/_saltcorn_types..generators.num_between.html +1 -1
  722. package/docs/variables/_saltcorn_types..generators.oneOf.html +1 -1
  723. package/docs/variables/_saltcorn_types.generators.generators.html +1 -1
  724. package/load_plugins.js +7 -398
  725. package/locales/en.json +5 -1
  726. package/package.json +12 -12
  727. package/public/saltcorn-common.js +1 -0
  728. package/public/saltcorn.js +1433 -0
  729. package/routes/actions.js +190 -4
  730. package/routes/admin.js +3 -5
  731. package/routes/api.js +59 -26
  732. package/routes/delete.js +2 -5
  733. package/routes/edit.js +2 -5
  734. package/routes/entities.js +65 -1245
  735. package/routes/eventlog.js +47 -0
  736. package/routes/fields.js +3 -0
  737. package/routes/files.js +23 -3
  738. package/routes/packs.js +2 -3
  739. package/routes/plugins.js +14 -16
  740. package/routes/scapi.js +1 -2
  741. package/routes/sync.js +161 -45
  742. package/routes/tables.js +4 -0
  743. package/routes/tenant.js +3 -3
  744. package/routes/utils.js +36 -2
  745. package/routes/viewedit.js +2 -2
  746. package/serve.js +9 -14
  747. package/tests/api.test.js +268 -2
  748. package/tests/auth.test.js +230 -1
  749. package/tests/files.test.js +4 -7
  750. package/tests/plugin_install.test.js +12 -13
  751. package/tests/plugins.test.js +1 -2
  752. package/tests/sync.test.js +868 -2
  753. package/docs/functions/_saltcorn_data.base-plugin_fieldviews.radio_select.run.html +0 -1
  754. package/docs/functions/_saltcorn_data.base-plugin_fieldviews.search_or_create.configFields.html +0 -1
  755. package/docs/functions/_saltcorn_data.base-plugin_fieldviews.search_or_create.run.html +0 -1
  756. package/docs/functions/_saltcorn_data.base-plugin_fieldviews.select.run.html +0 -1
  757. package/docs/functions/_saltcorn_data.base-plugin_fieldviews.select_from_table.fill_options.html +0 -1
  758. package/docs/functions/_saltcorn_data.base-plugin_fieldviews.select_from_table.run.html +0 -1
  759. package/docs/functions/_saltcorn_data.base-plugin_types.bool.contract.html +0 -1
  760. package/docs/functions/_saltcorn_data.base-plugin_types.bool.fieldviews.TrueFalse.run.html +0 -1
  761. package/docs/functions/_saltcorn_data.base-plugin_types.bool.fieldviews.checkboxes.run.html +0 -1
  762. package/docs/functions/_saltcorn_data.base-plugin_types.bool.fieldviews.edit.run.html +0 -1
  763. package/docs/functions/_saltcorn_data.base-plugin_types.bool.fieldviews.show.run.html +0 -1
  764. package/docs/functions/_saltcorn_data.base-plugin_types.bool.fieldviews.tristate.run.html +0 -1
  765. package/docs/functions/_saltcorn_data.base-plugin_types.bool.listAs.html +0 -1
  766. package/docs/functions/_saltcorn_data.base-plugin_types.bool.read.html +0 -1
  767. package/docs/functions/_saltcorn_data.base-plugin_types.bool.readFromDB.html +0 -1
  768. package/docs/functions/_saltcorn_data.base-plugin_types.bool.readFromFormRecord.html +0 -1
  769. package/docs/functions/_saltcorn_data.base-plugin_types.bool.validate.html +0 -1
  770. package/docs/functions/_saltcorn_data.base-plugin_types.color.contract.html +0 -1
  771. package/docs/functions/_saltcorn_data.base-plugin_types.color.fieldviews.edit.run.html +0 -1
  772. package/docs/functions/_saltcorn_data.base-plugin_types.color.fieldviews.show.run.html +0 -1
  773. package/docs/functions/_saltcorn_data.base-plugin_types.color.read.html +0 -1
  774. package/docs/functions/_saltcorn_data.base-plugin_types.color.validate.html +0 -1
  775. package/docs/functions/_saltcorn_data.base-plugin_types.date.contract.html +0 -1
  776. package/docs/functions/_saltcorn_data.base-plugin_types.date.equals.html +0 -3
  777. package/docs/functions/_saltcorn_data.base-plugin_types.date.fieldviews.edit.run.html +0 -1
  778. package/docs/functions/_saltcorn_data.base-plugin_types.date.fieldviews.editDay.run.html +0 -1
  779. package/docs/functions/_saltcorn_data.base-plugin_types.date.fieldviews.format.run.html +0 -1
  780. package/docs/functions/_saltcorn_data.base-plugin_types.date.fieldviews.relative.run.html +0 -1
  781. package/docs/functions/_saltcorn_data.base-plugin_types.date.fieldviews.show.run.html +0 -1
  782. package/docs/functions/_saltcorn_data.base-plugin_types.date.fieldviews.showDay.run.html +0 -1
  783. package/docs/functions/_saltcorn_data.base-plugin_types.date.fieldviews.yearsAgo.run.html +0 -1
  784. package/docs/functions/_saltcorn_data.base-plugin_types.date.presets.Now.html +0 -1
  785. package/docs/functions/_saltcorn_data.base-plugin_types.date.read.html +0 -1
  786. package/docs/functions/_saltcorn_data.base-plugin_types.date.validate.html +0 -1
  787. package/docs/functions/_saltcorn_data.base-plugin_types.float.contract.html +0 -1
  788. package/docs/functions/_saltcorn_data.base-plugin_types.float.equals.html +0 -3
  789. package/docs/functions/_saltcorn_data.base-plugin_types.float.fieldviews.edit.run.html +0 -1
  790. package/docs/functions/_saltcorn_data.base-plugin_types.float.fieldviews.show.run.html +0 -1
  791. package/docs/functions/_saltcorn_data.base-plugin_types.float.read.html +0 -1
  792. package/docs/functions/_saltcorn_data.base-plugin_types.float.validate.html +0 -1
  793. package/docs/functions/_saltcorn_data.base-plugin_types.int.contract.html +0 -1
  794. package/docs/functions/_saltcorn_data.base-plugin_types.int.read.html +0 -1
  795. package/docs/functions/_saltcorn_data.base-plugin_types.int.validate.html +0 -1
  796. package/docs/functions/_saltcorn_data.base-plugin_types.int.validate_attributes.html +0 -1
  797. package/docs/functions/_saltcorn_data.base-plugin_types.string.attributes.html +0 -1
  798. package/docs/functions/_saltcorn_data.base-plugin_types.string.contract.html +0 -1
  799. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.as_header.run.html +0 -1
  800. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.as_link.run.html +0 -1
  801. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.as_text.run.html +0 -1
  802. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.edit.configFields.html +0 -1
  803. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.edit.run.html +0 -1
  804. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.img_from_url.run.html +0 -1
  805. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.password.run.html +0 -1
  806. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.radio_group.run.html +0 -1
  807. package/docs/functions/_saltcorn_data.base-plugin_types.string.fieldviews.textarea.run.html +0 -1
  808. package/docs/functions/_saltcorn_data.base-plugin_types.string.presets.IP.html +0 -1
  809. package/docs/functions/_saltcorn_data.base-plugin_types.string.presets.SessionID.html +0 -1
  810. package/docs/functions/_saltcorn_data.base-plugin_types.string.read.html +0 -1
  811. package/docs/functions/_saltcorn_data.base-plugin_types.string.validate.html +0 -1
  812. package/docs/functions/_saltcorn_data.base-plugin_types.string.validate_attributes.html +0 -1
  813. package/docs/functions/_saltcorn_mobile-builder.utils_common-build-utils.decodeProvisioningProfile.html +0 -1
  814. package/docs/functions/_saltcorn_mobile-builder.utils_package-bundle-utils.copyMobileAppDirs.html +0 -1
  815. package/docs/modules/_saltcorn_admin-models.tests_backup.test.html +0 -1
  816. package/docs/modules/_saltcorn_admin-models.tests_cfgcheck.test.html +0 -1
  817. package/docs/modules/_saltcorn_admin-models.tests_pack.test.html +0 -1
  818. package/docs/modules/_saltcorn_admin-models.tests_random.test.html +0 -1
  819. package/docs/modules/_saltcorn_admin-models.tests_tenant.test.html +0 -1
  820. package/docs/modules/_saltcorn_data.base-plugin_fieldviews.radio_select.html +0 -2
  821. package/docs/modules/_saltcorn_data.base-plugin_fieldviews.search_or_create.html +0 -2
  822. package/docs/modules/_saltcorn_data.base-plugin_fieldviews.select.html +0 -2
  823. package/docs/modules/_saltcorn_data.base-plugin_fieldviews.select_from_table.html +0 -2
  824. package/docs/modules/_saltcorn_data.base-plugin_types.bool.fieldviews.TrueFalse.html +0 -2
  825. package/docs/modules/_saltcorn_data.base-plugin_types.bool.fieldviews.checkboxes.html +0 -2
  826. package/docs/modules/_saltcorn_data.base-plugin_types.bool.fieldviews.edit.html +0 -2
  827. package/docs/modules/_saltcorn_data.base-plugin_types.bool.fieldviews.html +0 -2
  828. package/docs/modules/_saltcorn_data.base-plugin_types.bool.fieldviews.show.html +0 -2
  829. package/docs/modules/_saltcorn_data.base-plugin_types.bool.fieldviews.tristate.html +0 -2
  830. package/docs/modules/_saltcorn_data.base-plugin_types.bool.html +0 -3
  831. package/docs/modules/_saltcorn_data.base-plugin_types.color.fieldviews.edit.html +0 -2
  832. package/docs/modules/_saltcorn_data.base-plugin_types.color.fieldviews.html +0 -2
  833. package/docs/modules/_saltcorn_data.base-plugin_types.color.fieldviews.show.html +0 -2
  834. package/docs/modules/_saltcorn_data.base-plugin_types.color.html +0 -4
  835. package/docs/modules/_saltcorn_data.base-plugin_types.date.fieldviews.edit.html +0 -2
  836. package/docs/modules/_saltcorn_data.base-plugin_types.date.fieldviews.editDay.html +0 -2
  837. package/docs/modules/_saltcorn_data.base-plugin_types.date.fieldviews.format.html +0 -2
  838. package/docs/modules/_saltcorn_data.base-plugin_types.date.fieldviews.html +0 -2
  839. package/docs/modules/_saltcorn_data.base-plugin_types.date.fieldviews.relative.html +0 -2
  840. package/docs/modules/_saltcorn_data.base-plugin_types.date.fieldviews.show.html +0 -2
  841. package/docs/modules/_saltcorn_data.base-plugin_types.date.fieldviews.showDay.html +0 -2
  842. package/docs/modules/_saltcorn_data.base-plugin_types.date.fieldviews.yearsAgo.html +0 -2
  843. package/docs/modules/_saltcorn_data.base-plugin_types.date.html +0 -3
  844. package/docs/modules/_saltcorn_data.base-plugin_types.date.presets.html +0 -2
  845. package/docs/modules/_saltcorn_data.base-plugin_types.float.fieldviews.edit.html +0 -2
  846. package/docs/modules/_saltcorn_data.base-plugin_types.float.fieldviews.html +0 -2
  847. package/docs/modules/_saltcorn_data.base-plugin_types.float.fieldviews.show.html +0 -2
  848. package/docs/modules/_saltcorn_data.base-plugin_types.float.html +0 -3
  849. package/docs/modules/_saltcorn_data.base-plugin_types.int.distance_operators.html +0 -2
  850. package/docs/modules/_saltcorn_data.base-plugin_types.int.html +0 -3
  851. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.as_header.html +0 -2
  852. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.as_link.html +0 -2
  853. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.as_text.html +0 -2
  854. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.edit.html +0 -2
  855. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.html +0 -2
  856. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.img_from_url.html +0 -2
  857. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.password.html +0 -2
  858. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.radio_group.html +0 -2
  859. package/docs/modules/_saltcorn_data.base-plugin_types.string.fieldviews.textarea.html +0 -2
  860. package/docs/modules/_saltcorn_data.base-plugin_types.string.html +0 -3
  861. package/docs/modules/_saltcorn_data.base-plugin_types.string.presets.html +0 -2
  862. package/docs/modules/_saltcorn_data.tests_actions.test.html +0 -1
  863. package/docs/modules/_saltcorn_data.tests_auth.test.html +0 -1
  864. package/docs/modules/_saltcorn_data.tests_auxtest.test.html +0 -1
  865. package/docs/modules/_saltcorn_data.tests_base.test.html +0 -1
  866. package/docs/modules/_saltcorn_data.tests_calc.test.html +0 -1
  867. package/docs/modules/_saltcorn_data.tests_composite_pk.test.html +0 -1
  868. package/docs/modules/_saltcorn_data.tests_config.test.html +0 -1
  869. package/docs/modules/_saltcorn_data.tests_db.test.html +0 -1
  870. package/docs/modules/_saltcorn_data.tests_discover.test.html +0 -1
  871. package/docs/modules/_saltcorn_data.tests_edit.test.html +0 -1
  872. package/docs/modules/_saltcorn_data.tests_email.test.html +0 -1
  873. package/docs/modules/_saltcorn_data.tests_exact_views.test.html +0 -1
  874. package/docs/modules/_saltcorn_data.tests_field.test.html +0 -1
  875. package/docs/modules/_saltcorn_data.tests_fieldviews.test.html +0 -1
  876. package/docs/modules/_saltcorn_data.tests_file.test.html +0 -1
  877. package/docs/modules/_saltcorn_data.tests_filter.test.html +0 -1
  878. package/docs/modules/_saltcorn_data.tests_form.test.html +0 -1
  879. package/docs/modules/_saltcorn_data.tests_list.test.html +0 -1
  880. package/docs/modules/_saltcorn_data.tests_models.test.html +0 -1
  881. package/docs/modules/_saltcorn_data.tests_page.test.html +0 -1
  882. package/docs/modules/_saltcorn_data.tests_page_group.test.html +0 -1
  883. package/docs/modules/_saltcorn_data.tests_plugin.test.html +0 -1
  884. package/docs/modules/_saltcorn_data.tests_show.test.html +0 -1
  885. package/docs/modules/_saltcorn_data.tests_state.test.html +0 -1
  886. package/docs/modules/_saltcorn_data.tests_table.test.html +0 -1
  887. package/docs/modules/_saltcorn_data.tests_table_history.test.html +0 -1
  888. package/docs/modules/_saltcorn_data.tests_tag.test.html +0 -1
  889. package/docs/modules/_saltcorn_data.tests_user.test.html +0 -1
  890. package/docs/modules/_saltcorn_data.tests_view.test.html +0 -1
  891. package/docs/modules/_saltcorn_data.tests_workflow.test.html +0 -1
  892. package/docs/modules/_saltcorn_data.tests_workflow_run.test.html +0 -1
  893. package/docs/modules/_saltcorn_mobile-builder.appium_tests_ui.test.html +0 -1
  894. package/docs/modules/_saltcorn_mobile-builder.tests_versioncode.test.html +0 -1
  895. package/docs/modules/_saltcorn_mobile-builder.tests_webpack.test.html +0 -1
  896. package/docs/types/_saltcorn_data.models_internal_push_message_helper.FcmSubscription.html +0 -4
  897. package/docs/types/_saltcorn_data.models_internal_push_message_helper.Subscription.html +0 -1
  898. package/docs/types/_saltcorn_db-common.internal.AggregationOptions.html +0 -11
  899. package/docs/types/_saltcorn_db-common.internal.CoordOpts.html +0 -5
  900. package/docs/types/_saltcorn_db-common.internal.DatabaseClient.html +0 -2
  901. package/docs/types/_saltcorn_db-common.internal.JoinField.html +0 -6
  902. package/docs/types/_saltcorn_db-common.internal.JoinFields.html +0 -1
  903. package/docs/types/_saltcorn_db-common.internal.JoinOptions.html +0 -1
  904. package/docs/types/_saltcorn_db-common.internal.JsonPath.html +0 -1
  905. package/docs/types/_saltcorn_db-common.internal.JsonPathElem.html +0 -1
  906. package/docs/types/_saltcorn_db-common.internal.Operator.html +0 -1
  907. package/docs/types/_saltcorn_db-common.internal.PartialSome.html +0 -1
  908. package/docs/types/_saltcorn_db-common.internal.PrimaryKeyValue.html +0 -1
  909. package/docs/types/_saltcorn_db-common.internal.Row.html +0 -1
  910. package/docs/types/_saltcorn_db-common.internal.SelectOptions.html +0 -21
  911. package/docs/types/_saltcorn_db-common.internal.StrongRow.html +0 -1
  912. package/docs/types/_saltcorn_db-common.internal.SubselectOptions.html +0 -5
  913. package/docs/types/_saltcorn_db-common.internal.Value.html +0 -1
  914. package/docs/types/_saltcorn_db-common.internal.Where.html +0 -5
  915. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.radio_select.description.html +0 -1
  916. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.radio_select.isEdit.html +0 -1
  917. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.radio_select.type.html +0 -1
  918. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.search_join_field.html +0 -1
  919. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.search_or_create.blockDisplay.html +0 -1
  920. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.search_or_create.description.html +0 -1
  921. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.search_or_create.isEdit.html +0 -1
  922. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.search_or_create.type.html +0 -1
  923. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select.blockDisplay.html +0 -1
  924. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select.configFields.html +0 -1
  925. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select.description.html +0 -1
  926. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select.isEdit.html +0 -1
  927. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select.type.html +0 -1
  928. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select_by_code.html +0 -1
  929. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select_by_view.html +0 -1
  930. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select_from_table.blockDisplay.html +0 -1
  931. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select_from_table.configFields.html +0 -1
  932. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select_from_table.description.html +0 -1
  933. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select_from_table.isEdit.html +0 -1
  934. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.select_from_table.type.html +0 -1
  935. package/docs/variables/_saltcorn_data.base-plugin_fieldviews.two_level_select.html +0 -1
  936. package/docs/variables/_saltcorn_data.base-plugin_fileview.fileview.html +0 -1
  937. package/docs/variables/_saltcorn_data.base-plugin_types.bool.attributes.html +0 -1
  938. package/docs/variables/_saltcorn_data.base-plugin_types.bool.description.html +0 -1
  939. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.TrueFalse.description.html +0 -1
  940. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.TrueFalse.isEdit.html +0 -1
  941. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.checkboxes.description.html +0 -1
  942. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.checkboxes.isEdit.html +0 -1
  943. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.edit.configFields.html +0 -1
  944. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.edit.description.html +0 -1
  945. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.edit.isEdit.html +0 -1
  946. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.show.description.html +0 -1
  947. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.show.isEdit.html +0 -1
  948. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.show_with_html.html +0 -1
  949. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.switch.html +0 -1
  950. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.thumbs_up_down.html +0 -1
  951. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.tristate.configFields.html +0 -1
  952. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.tristate.description.html +0 -1
  953. package/docs/variables/_saltcorn_data.base-plugin_types.bool.fieldviews.tristate.isEdit.html +0 -1
  954. package/docs/variables/_saltcorn_data.base-plugin_types.bool.js_type.html +0 -1
  955. package/docs/variables/_saltcorn_data.base-plugin_types.bool.name.html +0 -1
  956. package/docs/variables/_saltcorn_data.base-plugin_types.bool.sql_name.html +0 -1
  957. package/docs/variables/_saltcorn_data.base-plugin_types.color.attributes.html +0 -1
  958. package/docs/variables/_saltcorn_data.base-plugin_types.color.description.html +0 -1
  959. package/docs/variables/_saltcorn_data.base-plugin_types.color.fieldviews.edit.blockDisplay.html +0 -1
  960. package/docs/variables/_saltcorn_data.base-plugin_types.color.fieldviews.edit.description.html +0 -1
  961. package/docs/variables/_saltcorn_data.base-plugin_types.color.fieldviews.edit.isEdit.html +0 -1
  962. package/docs/variables/_saltcorn_data.base-plugin_types.color.fieldviews.show.description.html +0 -1
  963. package/docs/variables/_saltcorn_data.base-plugin_types.color.fieldviews.show.isEdit.html +0 -1
  964. package/docs/variables/_saltcorn_data.base-plugin_types.color.fieldviews.show_with_html.html +0 -1
  965. package/docs/variables/_saltcorn_data.base-plugin_types.color.js_type.html +0 -1
  966. package/docs/variables/_saltcorn_data.base-plugin_types.color.name.html +0 -1
  967. package/docs/variables/_saltcorn_data.base-plugin_types.color.sql_name.html +0 -1
  968. package/docs/variables/_saltcorn_data.base-plugin_types.date.attributes.html +0 -1
  969. package/docs/variables/_saltcorn_data.base-plugin_types.date.description.html +0 -1
  970. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.edit.blockDisplay.html +0 -1
  971. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.edit.configFields.html +0 -1
  972. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.edit.description.html +0 -1
  973. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.edit.isEdit.html +0 -1
  974. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.editDay.blockDisplay.html +0 -1
  975. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.editDay.configFields.html +0 -1
  976. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.editDay.description.html +0 -1
  977. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.editDay.isEdit.html +0 -1
  978. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.format.configFields.html +0 -1
  979. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.format.description.html +0 -1
  980. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.format.isEdit.html +0 -1
  981. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.relative.description.html +0 -1
  982. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.relative.isEdit.html +0 -1
  983. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.show.description.html +0 -1
  984. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.show.isEdit.html +0 -1
  985. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.showDay.description.html +0 -1
  986. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.showDay.isEdit.html +0 -1
  987. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.show_with_html.html +0 -1
  988. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.yearsAgo.description.html +0 -1
  989. package/docs/variables/_saltcorn_data.base-plugin_types.date.fieldviews.yearsAgo.isEdit.html +0 -1
  990. package/docs/variables/_saltcorn_data.base-plugin_types.date.js_type.html +0 -1
  991. package/docs/variables/_saltcorn_data.base-plugin_types.date.name.html +0 -1
  992. package/docs/variables/_saltcorn_data.base-plugin_types.date.sql_name.html +0 -1
  993. package/docs/variables/_saltcorn_data.base-plugin_types.float.attributes.html +0 -1
  994. package/docs/variables/_saltcorn_data.base-plugin_types.float.description.html +0 -1
  995. package/docs/variables/_saltcorn_data.base-plugin_types.float.distance_operators.html +0 -1
  996. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.above_input.html +0 -1
  997. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.below_input.html +0 -1
  998. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.edit.blockDisplay.html +0 -1
  999. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.edit.configFields.html +0 -1
  1000. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.edit.description.html +0 -1
  1001. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.edit.isEdit.html +0 -1
  1002. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.heat_cell.html +0 -1
  1003. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.number_slider.html +0 -1
  1004. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.progress_bar.html +0 -1
  1005. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.range_interval.html +0 -1
  1006. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.show.description.html +0 -1
  1007. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.show.isEdit.html +0 -1
  1008. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.show_with_html.html +0 -1
  1009. package/docs/variables/_saltcorn_data.base-plugin_types.float.fieldviews.to_locale_string.html +0 -1
  1010. package/docs/variables/_saltcorn_data.base-plugin_types.float.js_type.html +0 -1
  1011. package/docs/variables/_saltcorn_data.base-plugin_types.float.name.html +0 -1
  1012. package/docs/variables/_saltcorn_data.base-plugin_types.float.sql_name.html +0 -1
  1013. package/docs/variables/_saltcorn_data.base-plugin_types.int.attributes.html +0 -1
  1014. package/docs/variables/_saltcorn_data.base-plugin_types.int.description.html +0 -1
  1015. package/docs/variables/_saltcorn_data.base-plugin_types.int.distance_operators.near.html +0 -1
  1016. package/docs/variables/_saltcorn_data.base-plugin_types.int.fieldviews.html +0 -3
  1017. package/docs/variables/_saltcorn_data.base-plugin_types.int.js_type.html +0 -1
  1018. package/docs/variables/_saltcorn_data.base-plugin_types.int.name.html +0 -1
  1019. package/docs/variables/_saltcorn_data.base-plugin_types.int.primaryKey.html +0 -1
  1020. package/docs/variables/_saltcorn_data.base-plugin_types.int.sql_name.html +0 -1
  1021. package/docs/variables/_saltcorn_data.base-plugin_types.string.description.html +0 -1
  1022. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.as_header.description.html +0 -1
  1023. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.as_header.isEdit.html +0 -1
  1024. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.as_link.configFields.html +0 -1
  1025. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.as_link.description.html +0 -1
  1026. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.as_link.isEdit.html +0 -1
  1027. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.as_text.description.html +0 -1
  1028. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.as_text.isEdit.html +0 -1
  1029. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.checkbox_group.html +0 -1
  1030. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.code.html +0 -1
  1031. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.code_editor.html +0 -1
  1032. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.edit.blockDisplay.html +0 -1
  1033. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.edit.description.html +0 -1
  1034. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.edit.isEdit.html +0 -1
  1035. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.ellipsize.html +0 -1
  1036. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.fill_formula_btn.html +0 -1
  1037. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.img_from_url.description.html +0 -1
  1038. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.img_from_url.isEdit.html +0 -1
  1039. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.make_unique.html +0 -1
  1040. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.monospace_block.html +0 -1
  1041. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.password.blockDisplay.html +0 -1
  1042. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.password.configFields.html +0 -1
  1043. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.password.description.html +0 -1
  1044. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.password.isEdit.html +0 -1
  1045. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.preFormatted.html +0 -1
  1046. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.radio_group.configFields.html +0 -1
  1047. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.radio_group.description.html +0 -1
  1048. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.radio_group.isEdit.html +0 -1
  1049. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.select_by_code.html +0 -1
  1050. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.show_with_html.html +0 -1
  1051. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.textarea.blockDisplay.html +0 -1
  1052. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.textarea.configFields.html +0 -1
  1053. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.textarea.description.html +0 -1
  1054. package/docs/variables/_saltcorn_data.base-plugin_types.string.fieldviews.textarea.isEdit.html +0 -1
  1055. package/docs/variables/_saltcorn_data.base-plugin_types.string.js_type.html +0 -1
  1056. package/docs/variables/_saltcorn_data.base-plugin_types.string.name.html +0 -1
  1057. package/docs/variables/_saltcorn_data.base-plugin_types.string.sql_name.html +0 -1
  1058. package/docs/variables/_saltcorn_data.contract.fieldlike.html +0 -1
  1059. package/docs/variables/_saltcorn_data.contract.is_column.html +0 -1
  1060. package/docs/variables/_saltcorn_data.contract.is_header.html +0 -1
  1061. package/docs/variables/_saltcorn_data.contract.is_pack.html +0 -1
  1062. package/docs/variables/_saltcorn_data.contract.is_plugin.html +0 -1
  1063. package/docs/variables/_saltcorn_data.contract.is_plugin_layout.html +0 -1
  1064. package/docs/variables/_saltcorn_data.contract.is_plugin_type.html +0 -1
  1065. package/docs/variables/_saltcorn_data.contract.is_plugin_wrap.html +0 -1
  1066. package/docs/variables/_saltcorn_data.contract.is_plugin_wrap_arg.html +0 -1
  1067. package/docs/variables/_saltcorn_data.contract.is_table_query.html +0 -1
  1068. package/docs/variables/_saltcorn_data.contract.is_tablely.html +0 -1
  1069. package/docs/variables/_saltcorn_data.contract.is_viewtemplate.html +0 -1
package/CHANGELOG.md CHANGED
@@ -2,8 +2,16 @@
2
2
 
3
3
  ## 1.6.0 - In development
4
4
 
5
+ * Entities list shows most recently edited entities
6
+
7
+ * `old_row` can now be accessed in Update trigger only if.. formula
8
+
9
+ * If List column show if true formula does not access fields (e.g. based only on `user`) the whole column is now shown or hidden.
10
+
5
11
  * User roles below admin can now be given permission to edit users with the same user interface as that used by admin (at /useradmin URLs).
6
12
 
13
+ * If the copilot is installed, it can now help write or change run_js_code scripts ("Edit with AI" button)
14
+
7
15
  * In the `relative` fieldview for date fields, the full time is shown when on hover (using the title attribute)
8
16
 
9
17
  * Typescript types are now stripped from run_js_code actions and code pages (if on Node.js 22.13.0 or later)
package/app.js CHANGED
@@ -19,7 +19,7 @@ const BearerStrategy = require("passport-http-bearer");
19
19
  const User = require("@saltcorn/data/models/user");
20
20
  const File = require("@saltcorn/data/models/file");
21
21
  const flash = require("connect-flash");
22
- const { loadAllPlugins } = require("./load_plugins");
22
+ const Plugin = require("@saltcorn/data/models/plugin");
23
23
  const homepage = require("./routes/homepage");
24
24
  const errors = require("./errors");
25
25
  const {
@@ -102,7 +102,7 @@ const getApp = async (opts = {}) => {
102
102
  // switch on sql logging
103
103
  if (sql_log) db.set_sql_logging(); // dont override cli flag
104
104
  // load all plugins
105
- await loadAllPlugins();
105
+ await Plugin.loadAllPlugins();
106
106
  // get development mode status
107
107
  const development_mode = getState().getConfig("development_mode", false);
108
108
  // switch on sql logging - but it was initiated before???
@@ -214,7 +214,11 @@ const getApp = async (opts = {}) => {
214
214
  // init multitenant mode
215
215
  if (db.is_it_multi_tenant()) {
216
216
  const tenants = await getAllTenants();
217
- await init_multi_tenant(loadAllPlugins, opts.disableMigrate, tenants);
217
+ await init_multi_tenant(
218
+ Plugin.loadAllPlugins,
219
+ opts.disableMigrate,
220
+ tenants
221
+ );
218
222
  }
219
223
  const pruneSessionInterval = +getState().getConfig(
220
224
  "prune_session_interval",
@@ -338,7 +342,7 @@ const getApp = async (opts = {}) => {
338
342
  const mu =
339
343
  (await User.findByApiToken(token)) ||
340
344
  (await User.findOne({ api_token: token }));
341
- if (mu && token && token.length > 5)
345
+ if (mu && !mu.disabled && token && token.length > 5)
342
346
  return done(
343
347
  null,
344
348
  {
@@ -359,9 +363,14 @@ const getApp = async (opts = {}) => {
359
363
  passport.use(
360
364
  new JwtStrategy(jwtOpts, async (jwt_payload, done) => {
361
365
  const userCheck = async () => {
366
+ if (jwt_payload.sub === "public") {
367
+ return done(null, { role_id: 100 });
368
+ }
362
369
  const u = await User.findOne({ email: jwt_payload.sub });
363
370
  if (
364
371
  u &&
372
+ !u.disabled &&
373
+ !u._attributes?.totp_enabled &&
365
374
  u.last_mobile_login &&
366
375
  (typeof u.last_mobile_login === "string"
367
376
  ? new Date(u.last_mobile_login).valueOf()
@@ -369,7 +378,7 @@ const getApp = async (opts = {}) => {
369
378
  ) {
370
379
  return done(null, u.session_object);
371
380
  } else {
372
- return done(null, { role_id: 100 });
381
+ return done(null, false);
373
382
  }
374
383
  };
375
384
  if (
package/auth/routes.js CHANGED
@@ -23,6 +23,7 @@ const {
23
23
  setTenant,
24
24
  is_relative_url,
25
25
  isAdmin,
26
+ normalize_relative_url,
26
27
  } = require("../routes/utils.js");
27
28
  const { getState } = require("@saltcorn/data/db/state");
28
29
  const { send_reset_email } = require("./resetpw");
@@ -60,11 +61,15 @@ const moment = require("moment");
60
61
  const View = require("@saltcorn/data/models/view");
61
62
  const Table = require("@saltcorn/data/models/table");
62
63
  const { getForm } = require("@saltcorn/data/viewable_fields");
63
- const { InvalidConfiguration, getSessionId } = require("@saltcorn/data/utils");
64
+ const {
65
+ InvalidConfiguration,
66
+ getSessionId,
67
+ isTest,
68
+ } = require("@saltcorn/data/utils");
64
69
  const Trigger = require("@saltcorn/data/models/trigger");
65
70
  const { restore_backup } = require("../markup/admin.js");
66
71
  const { restore } = require("@saltcorn/admin-models/models/backup");
67
- const load_plugins = require("../load_plugins");
72
+ const Plugin = require("@saltcorn/data/models/plugin");
68
73
  const fs = require("fs");
69
74
  const base32 = require("thirty-two");
70
75
  const qrcode = require("qrcode");
@@ -82,6 +87,61 @@ const jwt = require("jsonwebtoken");
82
87
  const router = new Router();
83
88
  module.exports = router;
84
89
 
90
+ /**
91
+ * @param {object} req
92
+ * @param {object} res
93
+ * @returns {void}
94
+ */
95
+ function handler(req, res) {
96
+ console.log(
97
+ `Failed login attempt for: ${(req.body || {}).email} from ${
98
+ req.ip
99
+ } UA ${req.get("User-Agent")}`
100
+ );
101
+ req.flash(
102
+ "error",
103
+ "You've made too many failed attempts in a short period of time, please try again " +
104
+ moment(req.rateLimit.resetTime).fromNow()
105
+ );
106
+ if (isTest()) res.set("x-ratelimit-redirect", "TooManyRequests");
107
+ res.redirect("/auth/login"); // brute force protection triggered, send them back to the login page
108
+ }
109
+
110
+ /**
111
+ * try to find a unique user id in login submit
112
+ * @param {object} body
113
+ * @returns {string}
114
+ */
115
+ const userIdKey = (body) => {
116
+ if (body.email) return body.email;
117
+ const { remember, password, _csrf, passwordRepeat, ...rest } = body;
118
+ const kvs = Object.entries(rest);
119
+ if (kvs.length > 0) return kvs[0][1];
120
+ else return "nokey";
121
+ };
122
+ const ipLimiter = rateLimit({
123
+ // TBD create config parameter
124
+ windowMs: 60 * 60 * 1000, // 60 minutes
125
+ max: 100, // limit each IP to 100 requests per windowMs
126
+ handler,
127
+ });
128
+
129
+ const userLimiter = rateLimit({
130
+ // TBD create config parameter
131
+ windowMs: 5 * 60 * 1000, // 5 minutes
132
+ max: 5, // limit each IP to 100 requests per windowMs
133
+ keyGenerator: (req) => userIdKey(req.body || {}),
134
+ handler,
135
+ });
136
+
137
+ const pendingUserLimiter = rateLimit({
138
+ // TBD create config parameter
139
+ windowMs: 5 * 60 * 1000, // 5 minutes
140
+ max: 5, // limit each IP to 100 requests per windowMs
141
+ keyGenerator: (req) => req.user?.pending_user?.id,
142
+ handler,
143
+ });
144
+
85
145
  /**
86
146
  * Login Form
87
147
  * @param {object} req
@@ -107,7 +167,7 @@ const loginForm = (req, isCreating) => {
107
167
  type: "String",
108
168
  attributes: {
109
169
  input_type: "email",
110
- autocomplete: "username"
170
+ autocomplete: "username",
111
171
  },
112
172
  sublabel: user_sublabel || undefined,
113
173
  // fixed correct size of email is 254 https://stackoverflow.com/questions/386294/what-is-the-maximum-length-of-a-valid-email-address
@@ -272,7 +332,13 @@ const loginWithJwt = async (email, password, saltcornApp, res, req) => {
272
332
  if (email !== undefined && password !== undefined) {
273
333
  // with credentials
274
334
  const user = await User.findOne({ email });
275
- if (user && user.checkPassword(password)) {
335
+ if (
336
+ user &&
337
+ !user.disabled &&
338
+ user.auth_method_allowed("Password") &&
339
+ user.checkPassword(password) &&
340
+ !user._attributes.totp_enabled
341
+ ) {
276
342
  const now = new Date();
277
343
  const pushEnabled = !!user._attributes?.notify_push;
278
344
  const tokenUser = { ...user.session_object };
@@ -286,6 +352,7 @@ const loginWithJwt = async (email, password, saltcornApp, res, req) => {
286
352
  iss: "saltcorn@saltcorn",
287
353
  aud: "saltcorn-mobile-app",
288
354
  iat: now.valueOf(),
355
+ exp: Math.floor(now.valueOf() / 1000) + 30 * 24 * 3600,
289
356
  tenant: db.getTenantSchema(),
290
357
  },
291
358
  jwt_secret
@@ -472,6 +539,8 @@ router.get(
472
539
  */
473
540
  router.post(
474
541
  "/reset",
542
+ ipLimiter,
543
+ userLimiter,
475
544
  error_catcher(async (req, res) => {
476
545
  const result = await User.resetPasswordWithToken({
477
546
  email: (req.body || {}).email,
@@ -510,6 +579,8 @@ router.post(
510
579
  */
511
580
  router.post(
512
581
  "/forgot",
582
+ ipLimiter,
583
+ userLimiter,
513
584
  error_catcher(async (req, res) => {
514
585
  if (getState().getConfig("allow_forgot")) {
515
586
  const { email } = req.body || {};
@@ -697,7 +768,7 @@ router.post(
697
768
  try {
698
769
  const err = await restore(
699
770
  newPath,
700
- (p) => load_plugins.loadAndSaveNewPlugin(p),
771
+ (p) => Plugin.loadAndSaveNewPlugin(p),
701
772
  true
702
773
  );
703
774
 
@@ -812,7 +883,7 @@ router.post(
812
883
  try {
813
884
  const err = await restore(
814
885
  backupPath,
815
- (p) => load_plugins.loadAndSaveNewPlugin(p),
886
+ (p) => Plugin.loadAndSaveNewPlugin(p),
816
887
  true,
817
888
  password
818
889
  );
@@ -1088,6 +1159,8 @@ router.post(
1088
1159
  */
1089
1160
  router.post(
1090
1161
  "/signup",
1162
+ ipLimiter,
1163
+ userLimiter,
1091
1164
  setTenant,
1092
1165
  error_catcher(async (req, res) => {
1093
1166
  if (!getState().getConfig("allow_signup")) {
@@ -1240,52 +1313,6 @@ router.post(
1240
1313
  })
1241
1314
  );
1242
1315
 
1243
- /**
1244
- * @param {object} req
1245
- * @param {object} res
1246
- * @returns {void}
1247
- */
1248
- function handler(req, res) {
1249
- console.log(
1250
- `Failed login attempt for: ${(req.body || {}).email} from ${
1251
- req.ip
1252
- } UA ${req.get("User-Agent")}`
1253
- );
1254
- req.flash(
1255
- "error",
1256
- "You've made too many failed attempts in a short period of time, please try again " +
1257
- moment(req.rateLimit.resetTime).fromNow()
1258
- );
1259
- res.redirect("/auth/login"); // brute force protection triggered, send them back to the login page
1260
- }
1261
-
1262
- /**
1263
- * try to find a unique user id in login submit
1264
- * @param {object} body
1265
- * @returns {string}
1266
- */
1267
- const userIdKey = (body) => {
1268
- if (body.email) return body.email;
1269
- const { remember, password, _csrf, passwordRepeat, ...rest } = body;
1270
- const kvs = Object.entries(rest);
1271
- if (kvs.length > 0) return kvs[0][1];
1272
- else return "nokey";
1273
- };
1274
- const ipLimiter = rateLimit({
1275
- // TBD create config parameter
1276
- windowMs: 60 * 60 * 1000, // 60 minutes
1277
- max: 100, // limit each IP to 100 requests per windowMs
1278
- handler,
1279
- });
1280
-
1281
- const userLimiter = rateLimit({
1282
- // TBD create config parameter
1283
- windowMs: 5 * 60 * 1000, // 5 minutes
1284
- max: 3, // limit each IP to 100 requests per windowMs
1285
- keyGenerator: (req) => userIdKey(req.body || {}),
1286
- handler,
1287
- });
1288
-
1289
1316
  function setOldSessionID(req, res, next) {
1290
1317
  req.old_session_id = getSessionId(req);
1291
1318
  next();
@@ -1367,11 +1394,10 @@ router.post(
1367
1394
  }
1368
1395
  if (getState().get2FApolicy(req.user) === "Mandatory") {
1369
1396
  res.redirect("/auth/twofa/setup/totp");
1370
- } else if (
1371
- (req.body || {}).dest &&
1372
- is_relative_url(decodeURIComponent((req.body || {}).dest))
1373
- ) {
1374
- res.redirect(decodeURIComponent((req.body || {}).dest));
1397
+ } else if (req.body?.dest) {
1398
+ const dest = normalize_relative_url(decodeURIComponent(req.body.dest));
1399
+ if (dest !== null) res.redirect(dest);
1400
+ else res.redirect("/");
1375
1401
  } else res.redirect("/");
1376
1402
  })
1377
1403
  );
@@ -1383,6 +1409,8 @@ router.post(
1383
1409
  */
1384
1410
  router.get(
1385
1411
  "/login-with/:method",
1412
+ ipLimiter,
1413
+ userLimiter,
1386
1414
  error_catcher(async (req, res, next) => {
1387
1415
  const { method } = req.params;
1388
1416
  if (method === "jwt") {
@@ -1414,6 +1442,75 @@ router.get(
1414
1442
  })
1415
1443
  );
1416
1444
 
1445
+ /**
1446
+ * @name post/login-with/jwt
1447
+ * @function
1448
+ * @memberof module:auth/routes~routesRouter
1449
+ */
1450
+ router.post(
1451
+ "/login-with/jwt",
1452
+ ipLimiter,
1453
+ userLimiter,
1454
+ error_catcher(async (req, res) => {
1455
+ const { email, password } = req.body;
1456
+ await loginWithJwt(
1457
+ email,
1458
+ password,
1459
+ req.headers["x-saltcorn-app"],
1460
+ res,
1461
+ req
1462
+ );
1463
+ })
1464
+ );
1465
+
1466
+ /**
1467
+ * @name post/renew-jwt
1468
+ * @function
1469
+ * @memberof module:auth/routes~routesRouter
1470
+ */
1471
+ router.post(
1472
+ "/renew-jwt",
1473
+ passport.authenticate("jwt", { session: false }),
1474
+ error_catcher(async (req, res) => {
1475
+ if (!req.user?.email) {
1476
+ return res.status(401).json({ error: req.__("Not authenticated") });
1477
+ }
1478
+ const renewFn = async () => {
1479
+ const user = await User.findOne({ email: req.user.email });
1480
+ if (!user || user.disabled)
1481
+ return res.status(401).json({ error: req.__("User not found") });
1482
+ if (user._attributes?.totp_enabled)
1483
+ return res
1484
+ .status(401)
1485
+ .json({ error: req.__("Two-factor authentication is enabled") });
1486
+ const now = new Date();
1487
+ const pushEnabled = !!user._attributes?.notify_push;
1488
+ const tokenUser = { ...user.session_object };
1489
+ if (tokenUser.attributes) tokenUser.attributes.notify_push = pushEnabled;
1490
+ else tokenUser._attributes = { notify_push: pushEnabled };
1491
+ const token = jwt.sign(
1492
+ {
1493
+ sub: user.email,
1494
+ user: tokenUser,
1495
+ iss: "saltcorn@saltcorn",
1496
+ aud: "saltcorn-mobile-app",
1497
+ iat: now.valueOf(),
1498
+ exp: Math.floor(now.valueOf() / 1000) + 30 * 24 * 3600,
1499
+ tenant: db.getTenantSchema(),
1500
+ },
1501
+ db.connectObj.jwt_secret
1502
+ );
1503
+ res.json(token);
1504
+ };
1505
+ const saltcornApp = req.headers["x-saltcorn-app"];
1506
+ if (saltcornApp && saltcornApp !== db.connectObj.default_schema) {
1507
+ await db.runWithTenant(saltcornApp, renewFn);
1508
+ } else {
1509
+ await renewFn();
1510
+ }
1511
+ })
1512
+ );
1513
+
1417
1514
  /*
1418
1515
  returns if 'req.user' is an authenticated user
1419
1516
  */
@@ -1432,6 +1529,8 @@ router.get(
1432
1529
  */
1433
1530
  router.post(
1434
1531
  "/login-with/:method",
1532
+ ipLimiter,
1533
+ userLimiter,
1435
1534
  error_catcher(async (req, res, next) => {
1436
1535
  const { method } = req.params;
1437
1536
  const auth = getState().auth_methods[method];
@@ -1519,7 +1618,10 @@ const loginCallback = (req, res, method) => async () => {
1519
1618
  const user = await User.findOne({ email: req.user.email });
1520
1619
  if (!user.last_mobile_login) await user.updateLastMobileLogin(now);
1521
1620
  res.redirect(
1522
- `mobileapp://auth/callback?token=${await generateTokenForUser(req.user, now)}&method=${encodeURIComponent(method)}`
1621
+ `mobileapp://auth/callback?token=${await generateTokenForUser(
1622
+ req.user,
1623
+ now
1624
+ )}&method=${encodeURIComponent(method)}`
1523
1625
  );
1524
1626
  } else res.redirect("/");
1525
1627
  }
@@ -1542,9 +1644,19 @@ const callbackFn = async (req, res, next) => {
1542
1644
  }
1543
1645
  };
1544
1646
 
1545
- router.get("/callback/:method", error_catcher(callbackFn));
1647
+ router.get(
1648
+ "/callback/:method",
1649
+ ipLimiter,
1650
+ userLimiter,
1651
+ error_catcher(callbackFn)
1652
+ );
1546
1653
 
1547
- router.post("/callback/:method", error_catcher(callbackFn));
1654
+ router.post(
1655
+ "/callback/:method",
1656
+ ipLimiter,
1657
+ userLimiter,
1658
+ error_catcher(callbackFn)
1659
+ );
1548
1660
 
1549
1661
  /**
1550
1662
  * @param {object} req
@@ -2227,6 +2339,7 @@ router.post(
2227
2339
  console.log("TOTP return ", rv);
2228
2340
  user._attributes.totp_enabled = true;
2229
2341
  await user.update({ _attributes: user._attributes });
2342
+ await user.updateLastMobileLogin(null);
2230
2343
  req.flash(
2231
2344
  "success",
2232
2345
  req.__(
@@ -2394,6 +2507,8 @@ router.get(
2394
2507
  */
2395
2508
  router.post(
2396
2509
  "/twofa/login/totp",
2510
+ ipLimiter,
2511
+ pendingUserLimiter,
2397
2512
  passport.authenticate("totp", {
2398
2513
  failureRedirect: "/auth/twofa/login/totp",
2399
2514
  failureFlash: true,
package/auth/testhelp.js CHANGED
@@ -185,13 +185,9 @@ const getAdminJwt = async () => {
185
185
  "X-Saltcorn-Client": "mobile-app",
186
186
  };
187
187
  const res = await request(app)
188
- .get(
189
- `/auth/login-with/jwt?email=${encodeURIComponent(
190
- "admin@foo.com"
191
- )}&password=${encodeURIComponent("AhGGr6rhu45")}`
192
- )
193
-
194
- .set(headers);
188
+ .post("/auth/login-with/jwt")
189
+ .set(headers)
190
+ .send({ email: "admin@foo.com", password: "AhGGr6rhu45" });
195
191
  if (res.statusCode !== 200) console.log(res.text);
196
192
  return res.body;
197
193
  };
@@ -203,12 +199,9 @@ const getStaffJwt = async () => {
203
199
  "X-Saltcorn-Client": "mobile-app",
204
200
  };
205
201
  const res = await request(app)
206
- .get(
207
- `/auth/login-with/jwt?email${encodeURIComponent(
208
- "staff@foo.com"
209
- )}&password=${encodeURIComponent("ghrarhr54hg")}`
210
- )
211
- .set(headers);
202
+ .post("/auth/login-with/jwt")
203
+ .set(headers)
204
+ .send({ email: "staff@foo.com", password: "ghrarhr54hg" });
212
205
  if (res.statusCode !== 200) console.log(res.text);
213
206
  return res.body;
214
207
  };
@@ -220,12 +213,9 @@ const getUserJwt = async () => {
220
213
  "X-Saltcorn-Client": "mobile-app",
221
214
  };
222
215
  const res = await request(app)
223
- .get(
224
- `/auth/login-with/jwt?email=${encodeURIComponent(
225
- "user@foo.com"
226
- )}&password=${encodeURIComponent("GFeggwrwq45fjn")}`
227
- )
228
- .set(headers);
216
+ .post("/auth/login-with/jwt")
217
+ .set(headers)
218
+ .send({ email: "user@foo.com", password: "GFeggwrwq45fjn" });
229
219
  if (res.statusCode !== 200) console.log(res.text);
230
220
  return res.body;
231
221
  };
@@ -1 +1 @@
1
- window.hierarchyData = "eJy1l11vmzAYhf+LrynDNmDD3aR9XG2aqmq7qCrkBoei8hEZsqqq+t8nG5MYQglO2I2FjHTOY8t+fd43IOq6bUB8j6CPPAdBHxMHwcDz5UgDB8EQypkQR3IMoRwj6iBIPDlDAjlDQiRHIucpViOFDsY0CB4cIPi24Js2r6sGxG9AWcmPipUcxODzY9MKtmm/5bxIgQOe8yoFMQpCB+xFAWKQVy0XW7bhzaekYUW7qUWVtK873rhlnfLihmmFJum/kq0UcwfS7lNbFsABm4I1DYhB26Q30uvmoC9/PuVFKngF4nvsExw+vDtA7cpHwLd8x1n7H7E7A3v4yIs6+MDzp+BrUa5GXYvSNYWtaQOIkaalwQTtL5bxtWh3LOOuKWxNG3rQ72hDOHUwpOh3Ue93ayInmVR0TzwuoCd6r0MczdH/4OUjF+uvISmV8OlSOkP7BUFM9YJCOLWgYp/l1WrrUGruUPwCZtIzR3SC+bYuVjvwoi6OB14K29OiUBcT4k0dmTv2uB5uK8XcgbQ9MIa6dJNg6kjcsWw93MyAzexRid+jhmga9WvVitcVeRMuBd2xgz067d8YQqYO8Z3Is2y9CtJ2cu5I/gJsXxdAiqewf+f8ZS3mvzl/cU1ha1oCIdG0dOoo/6nF87aoVyN+0Xru2MCeHFFV4zCm2HzUv+zL8vVnnR4rBkS0R1bqA96UtcxNc5YJViZVnfImSaWC+nYPYh/idRMdR2ByXIWgzBf4DrdE7oTMxdRzMI48JEfky9EnequomY3l03gVpnp1FWsvtWSfIs+sRKoEX0WhSnqHcRBbxIHM6Krv+3UknYZmOQouovHNsCcv81UosjR0HL3UAgjZkxgQw57pPIG69Y1uM+a7IsMzGjz6U22PnbPoWpol7c2RQrYIJoXZvyy3l83JbIdyNJQpf3QV7Q1VszHbZJiGBI0Mh12ElavuF873CQYAHLyHHzUCF2D0kX9p1DeZBtFilOWXo3Qx/UxaN2xRaJ75QRxfbKqC92zgNgwxDMc1196xy87zmdnwJP7QM7vEMXPnYq/hRgdl5CTX2ljqBHs2uZruPjp9Sy4w16HzXPg8OssAN3o37G1VjpzNj4YhouaVOQmIi00PUfBsBNTm7+//AFCV5z0="
1
+ window.hierarchyData = "eJy1l11vmzAUhv+LrynDNmA7d5P2cbVpqqrtoqoQDQ5F5SMyZFVV9b9PB5zEEEpwwm4sBNH7Pnbs4/e8IVVVTY1W9wT7PHQIDjwKI/McgsMAw8h9h2DmwVdGOIxhACODNxwLGCn8nvvwRngMxgA7lAoSPDhIyU0u101WlTVavaHWCh7KuJBohT4/1o2K1823TOYJctBzViZoRYLQQTuVoxXKykaqTbyW9aeojvNmXakyal63snaLKpH5TawV6mj/FG1AzO1Ju09NkSMHrfO4rtEKNXVyA143B334+JTliZIlWt1TnxPv4d1B7ap8BHwrtzJu/iN2Z2APLwTV8Mwbg69UsRh1pQrXFLamDQgOO9owwCO0v+JULkW7jVPpmsLWtKEnuKbl/ge031W12y6JHKWg6J542NPjgHX0zBs7hwflH7J4lGr5OURFK3w6lc7QfkKE6K3OCB+bUL5Ls3KxebRqbl/8AuZwzxwGI8y3Vb7YhldVftzwIGxPS7ne8IyNbZm7+HE53AbE3J60PbBPgw6YYzEKnC6HmxqwqT0qD/Vx5HSsUN/F6deyUa8L8kYSBN2hgz26oPqC5P7otlBZmi5XQZpOzh3IX4C9P3vCYyPYvzP5shTz30y+uKawNS0jVGja0avxT6WeN3m1GPGL1nOHBvbkPsZATqnwzBr3ZVcUrz+r5FgxMOF75Fa9x5vETewmWZyquIjKKpF1lIBC++wexD7E6150HMTkuAqhNZ/h218SWAnIxYEHIyMwCt+hvoeZXqrALAJwNV6F2d66LeteatY6MWJAtCX4Koq2pHcYB7FZHMKMV/q8X0fSaWiWo+AMGviPDBo4zFehQGnoOPZScyA4MfdHv2c6T9Ce+lq3GdNdkeEpBB16DtoeO2fVtTRz2psjBbQIJoXZv8y3h+ZkskM5GkLKHxxFe8O22ZhsMgxDHLCBYb+LsHLV/cL5PsEAIISOAQwagQsw9pF/btQ3mcIeUz/Lz0fpYvqZtG7YUm7++b04Ptu0Dd6Tgdsw9GkwrLn2jl12ns7MhicPWc8zvcQxdadir+Emevn2JNfaWOoEeza5mu69fTSMpvPNdeg8Fz6PzhDgBveGvW2bIyfzo2HoYzMongTE2aaHKHg2Amrz9/d/nnnnPQ=="
@@ -1 +1 @@
1
- window.navigationData = "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"
1
+ window.navigationData = "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"