@saltcorn/server 1.3.0 → 1.3.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app.js +9 -2
- package/auth/routes.js +6 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/_saltcorn_common_code.Relation.html +10 -10
- package/docs/classes/_saltcorn_common_code.RelationsFinder.html +5 -5
- package/docs/classes/_saltcorn_data.models.Crash.html +17 -17
- package/docs/classes/_saltcorn_data.models.EventLog-1.html +19 -19
- package/docs/classes/_saltcorn_data.models.Field.html +74 -74
- package/docs/classes/_saltcorn_data.models.FieldRepeat.html +16 -16
- package/docs/classes/_saltcorn_data.models.File-1.html +48 -48
- package/docs/classes/_saltcorn_data.models.Form-1.html +39 -39
- package/docs/classes/_saltcorn_data.models.Library.html +13 -13
- package/docs/classes/_saltcorn_data.models.Page.html +24 -24
- package/docs/classes/_saltcorn_data.models.PageGroup-1.html +25 -25
- package/docs/classes/_saltcorn_data.models.Plugin.html +25 -25
- package/docs/classes/_saltcorn_data.models.Role.html +9 -9
- package/docs/classes/_saltcorn_data.models.Table-1.html +92 -92
- package/docs/classes/_saltcorn_data.models.TableConstraint.html +14 -14
- package/docs/classes/_saltcorn_data.models.Trigger.html +36 -36
- package/docs/classes/_saltcorn_data.models.User.html +48 -48
- package/docs/classes/_saltcorn_data.models.View-1.html +54 -54
- package/docs/classes/_saltcorn_data.models.Workflow.html +17 -17
- package/docs/classes/_saltcorn_data.models.WorkflowRun.html +35 -35
- package/docs/classes/_saltcorn_data.models.WorkflowStep.html +25 -25
- package/docs/classes/_saltcorn_data.models.WorkflowTrace.html +18 -18
- package/docs/classes/_saltcorn_mobile_builder.MobileBuilder.html +43 -36
- package/docs/enums/_saltcorn_common_code.RelationType.html +7 -7
- package/docs/enums/_saltcorn_common_code.ViewDisplayType.html +4 -4
- package/docs/functions/_saltcorn_admin_models.backup.create_backup.html +1 -1
- package/docs/functions/_saltcorn_admin_models.backup.create_csv_from_rows.html +1 -1
- package/docs/functions/_saltcorn_admin_models.backup.restore.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.add_to_menu.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.can_install_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.fetch_available_packs.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.fetch_pack_by_name.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.install_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.library_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.model_instance_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.model_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.page_group_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.page_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.plugin_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.role_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.table_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.trigger_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.uninstall_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.view_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.copy_tenant_template.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.create_tenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.deleteTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.domain_sanitize.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.eachTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.getAllTenantRows.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.getAllTenants.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.insertTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.switchToTenant.html +1 -1
- package/docs/functions/_saltcorn_common_code.buildTableCaches.html +1 -1
- package/docs/functions/_saltcorn_common_code.parseLegacyRelation.html +1 -1
- package/docs/functions/_saltcorn_common_code.parseRelationPath.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.check_email_mask.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.deleteConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.getAllConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.getConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.get_base_url.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.get_latest_npm_version.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.remove_from_menu.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.save_menu_items.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.setConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.discover_tables.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.discoverable_tables.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.findType.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.get_existing_views.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.implement_discovery.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.getMailTransport.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.send_verification_email.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.viewToEmailHtml.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields_stored.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.eval_expression.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.expressionValidator.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.get_async_expression_function.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.get_expression_function.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.jsexprToWhere.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.recalculate_for_stored.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.transform_for_async.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.eachView.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.getStringsForI18n.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.getViews.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.translateLayout.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.traverse.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.traverseSync.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.all_views.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.fill_table_row.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.initial_view.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.random_table.html +1 -1
- package/docs/functions/_saltcorn_db_common.buildInsertBulkSql.html +1 -1
- package/docs/functions/_saltcorn_db_common.buildInsertSql.html +1 -1
- package/docs/functions/_saltcorn_db_common.doCount.html +1 -1
- package/docs/functions/_saltcorn_db_common.doDeleteWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListScTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.do_add_index.html +1 -1
- package/docs/functions/_saltcorn_db_common.do_drop_index.html +1 -1
- package/docs/functions/_saltcorn_db_common.ftsFieldsSqlExpr.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkSelectOptions.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkVal.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.enable_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.getRequestContext.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.getTenantSchema.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.init.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.is_it_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.runWithTenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.orderByIsObject.html +1 -1
- package/docs/functions/_saltcorn_db_common.orderByIsOperator.html +1 -1
- package/docs/functions/_saltcorn_db_common.prefixFieldsInWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.reprAsJson.html +1 -1
- package/docs/functions/_saltcorn_db_common.slugify.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlBinOp.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlFun.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlsanitize.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlsanitizeAllowDots.html +1 -1
- package/docs/functions/_saltcorn_db_common.subSelectWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.tryCatchInTransaction.html +1 -1
- package/docs/functions/_saltcorn_db_common.withTransaction.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidFeatures.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidPermissions.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.buildTablesFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyPrepopulatedDb.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyServerFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyShareExtFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copySiteLogo.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyTranslationFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.createSqliteDb.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.decodeProvisioningProfile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.extractDomain.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.generateAndroidVersionCode.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyAndroidManifest.html +5 -3
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyConfigXml.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyGradleConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyInfoPlist.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyXcodeProjectFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepAppIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareAppIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareBuildDir.html +7 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareExportOptionsPlist.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashPage.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCapacitorConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCfgFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeDataExtractionRules.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeNetworkSecurityConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePodfile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePrivacyInfo.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundleMobileAppCode.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundlePackagesAndPlugins.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyMobileAppDirs.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyPublicDirs.html +1 -1
- package/docs/functions/_saltcorn_sqlite.add_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite.add_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite.begin.html +1 -1
- package/docs/functions/_saltcorn_sqlite.changeConnection.html +1 -1
- package/docs/functions/_saltcorn_sqlite.close.html +1 -1
- package/docs/functions/_saltcorn_sqlite.commit.html +1 -1
- package/docs/functions/_saltcorn_sqlite.count.html +1 -1
- package/docs/functions/_saltcorn_sqlite.deleteWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite.dropTable.html +1 -1
- package/docs/functions/_saltcorn_sqlite.dropTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_reset_schema.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite.getVersion.html +1 -1
- package/docs/functions/_saltcorn_sqlite.get_db_filepath.html +1 -1
- package/docs/functions/_saltcorn_sqlite.get_sql_logging.html +1 -1
- package/docs/functions/_saltcorn_sqlite.init.html +1 -1
- package/docs/functions/_saltcorn_sqlite.insert.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listScTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.query.html +1 -1
- package/docs/functions/_saltcorn_sqlite.rollback.html +1 -1
- package/docs/functions/_saltcorn_sqlite.select.html +1 -1
- package/docs/functions/_saltcorn_sqlite.selectMaybeOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite.selectOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite.set_sql_logging.html +1 -1
- package/docs/functions/_saltcorn_sqlite.sql_log.html +1 -1
- package/docs/functions/_saltcorn_sqlite.update.html +1 -1
- package/docs/functions/_saltcorn_sqlite.updateWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.add_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.add_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.count.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.deleteWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_reset_schema.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.init.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.insert.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.insertRows.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listScTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.query.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.select.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.selectMaybeOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.selectOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.setConnectionObject.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.tableExists.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.time.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.update.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_field.instanceOfField.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_page.instanceOfPage.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_view.instanceOfView.html +1 -1
- package/docs/functions/_saltcorn_types.Types.base_types.instanceOWithHtmlFile.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfErrorMsg.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfSuccessMsg.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfType.html +1 -1
- package/docs/functions/_saltcorn_types.generators.generateBool.html +1 -1
- package/docs/functions/_saltcorn_types.generators.generateString.html +1 -1
- package/docs/functions/_saltcorn_types.generators.num_between.html +1 -1
- package/docs/functions/_saltcorn_types.generators.oneOf.html +1 -1
- package/docs/interfaces/_saltcorn_mobile_builder.common_build_utils.ScCapacitorConfig.html +10 -10
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractField.html +15 -15
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractFieldRepeat.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_form.AbstractForm.html +27 -27
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_page.AbstractPage.html +7 -7
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_role.AbstractRole.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_table.AbstractTable.html +11 -11
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_trigger.AbstractTrigger.html +16 -16
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_view.AbstractView.html +10 -10
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_workflow.AbstractWorkflow.html +13 -13
- package/docs/modules/_saltcorn_admin_models.backup.html +1 -1
- package/docs/modules/_saltcorn_admin_models.html +1 -1
- package/docs/modules/_saltcorn_admin_models.pack.html +1 -1
- package/docs/modules/_saltcorn_admin_models.tenant.html +1 -1
- package/docs/modules/_saltcorn_common_code.html +1 -1
- package/docs/modules/_saltcorn_data.html +3 -3
- package/docs/modules/_saltcorn_data.models.EventLog.html +2 -2
- package/docs/modules/_saltcorn_data.models.File.html +2 -2
- package/docs/modules/_saltcorn_data.models.Form.html +2 -2
- package/docs/modules/_saltcorn_data.models.PageGroup.html +2 -2
- package/docs/modules/_saltcorn_data.models.Table.html +2 -2
- package/docs/modules/_saltcorn_data.models.View.html +2 -2
- package/docs/modules/_saltcorn_data.models.config.html +1 -1
- package/docs/modules/_saltcorn_data.models.discovery.html +1 -1
- package/docs/modules/_saltcorn_data.models.email.html +1 -1
- package/docs/modules/_saltcorn_data.models.expression.html +1 -1
- package/docs/modules/_saltcorn_data.models.html +1 -1
- package/docs/modules/_saltcorn_data.models.layout.html +1 -1
- package/docs/modules/_saltcorn_data.models.random.html +1 -1
- package/docs/modules/_saltcorn_data.models.scheduler.html +1 -1
- package/docs/modules/_saltcorn_data.plugin_helper.html +1 -1
- package/docs/modules/_saltcorn_data.utils.html +1 -1
- package/docs/modules/_saltcorn_db_common.html +2 -2
- package/docs/modules/_saltcorn_db_common.multi_tenant.html +1 -1
- package/docs/modules/_saltcorn_markup.html +16 -6
- package/docs/modules/_saltcorn_mobile_builder.common_build_utils.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.package_bundle_utils.html +1 -1
- package/docs/modules/_saltcorn_sqlite.html +1 -1
- package/docs/modules/_saltcorn_sqlite_mobile.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_field.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_form.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_library.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_page.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_plugin.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_role.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_table.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_trigger.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_view.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_workflow.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.html +1 -1
- package/docs/modules/_saltcorn_types.Types.base_types.html +1 -1
- package/docs/modules/_saltcorn_types.Types.common_types.html +1 -1
- package/docs/modules/_saltcorn_types.Types.html +1 -1
- package/docs/modules/_saltcorn_types.generators.html +1 -1
- package/docs/modules/_saltcorn_types.html +1 -1
- package/docs/types/_saltcorn_data.models.EventLog.EventLogCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.File.FileCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.Form.AdditionalButton.html +1 -1
- package/docs/types/_saltcorn_data.models.Form.FormCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.PageGroup.ScreenInfoParams.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.ChildRelations.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.ParentRelations.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.RelationData.html +1 -1
- package/docs/types/_saltcorn_data.models.View.FindViewsPred.html +1 -1
- package/docs/types/_saltcorn_db_common.AggregationOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.CoordOpts.html +1 -1
- package/docs/types/_saltcorn_db_common.DatabaseClient.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinField.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinFields.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.JsonPath.html +1 -1
- package/docs/types/_saltcorn_db_common.JsonPathElem.html +1 -1
- package/docs/types/_saltcorn_db_common.Operator.html +1 -1
- package/docs/types/_saltcorn_db_common.PartialSome.html +1 -1
- package/docs/types/_saltcorn_db_common.PrimaryKeyValue.html +1 -1
- package/docs/types/_saltcorn_db_common.Row.html +1 -1
- package/docs/types/_saltcorn_db_common.SelectOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.SqlAndValues.html +1 -1
- package/docs/types/_saltcorn_db_common.StrongRow.html +1 -1
- package/docs/types/_saltcorn_db_common.SubselectOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.Value.html +1 -1
- package/docs/types/_saltcorn_db_common.Where.html +1 -1
- package/docs/types/_saltcorn_mobile_builder.IosCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.FieldCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.InputType.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_form.AdditionalButton.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PageCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PagePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RoleCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RolePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TableCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TablePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.ConfigWorkflowStep.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.RunResult.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Action.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.AuthenticationMethod.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CalcJoinfield.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CapacitorPlugin.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CodePagePack.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Column.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ConnectObjType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ConnectedObjects.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CopilotSkill.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ErrorObj.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldLike.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldView.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Header.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.JoinFieldOption.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Layout.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.MobileConfig.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ModelPattern.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Pack.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Plugin.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginFunction.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginLayout.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginRoute.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginSourceType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrap.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrapArg.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RelationOption.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Req.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Res.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ResultType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RouteAction.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RunExtra.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.SlugStepType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.StepResType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.SubField.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableProvider.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableQuery.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Tablely.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ViewTemplate.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ErrorMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.GenObj.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ReqRes.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ResultMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.SuccessMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.Type.html +1 -1
- package/docs/variables/_saltcorn_data.db.html +1 -1
- package/docs/variables/_saltcorn_data.migrations.html +1 -1
- package/docs/variables/_saltcorn_data.models.config.available_languages.html +1 -1
- package/docs/variables/_saltcorn_data.models.config.configTypes.html +1 -1
- package/docs/variables/_saltcorn_data.models.scheduler.runScheduler.html +1 -1
- package/docs/variables/_saltcorn_data.plugin_helper.run_action_column.html +1 -1
- package/docs/variables/_saltcorn_data.utils.NotAuthorized.html +1 -1
- package/docs/variables/_saltcorn_data.utils.sleep.html +1 -1
- package/docs/variables/_saltcorn_db_common.multi_tenant.tenantNamespace.html +1 -1
- package/help/Firebase JSON key.tmd +20 -0
- package/help/Google Services File.tmd +30 -0
- package/help/VAPID configuration.tmd +1 -0
- package/locales/en.json +20 -1
- package/package.json +9 -9
- package/routes/admin.js +61 -6
- package/routes/fields.js +1 -1
- package/routes/notifications.js +56 -1
- package/routes/pageedit.js +4 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Upload Your Firebase Service Account Key (JSON)
|
|
2
|
+
|
|
3
|
+
To integrate with Firebase, you'll need to select a **Service Account JSON key file**. This file allows secure communication with Firebase services such as Google Cloud Messaging.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
To see the file here, please upload it into your Saltcorn Filesystem.
|
|
8
|
+
|
|
9
|
+
### What is this file?
|
|
10
|
+
|
|
11
|
+
This is a **private key file** generated by Firebase. It contains credentials for a **Service Account** that grants access to your Firebase project’s backend services. The file ends with `.json` and includes fields like:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"type": "service_account",
|
|
16
|
+
"project_id": "your-project-id",
|
|
17
|
+
"private_key_id": "abc123...",
|
|
18
|
+
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
|
|
19
|
+
"client_email": "firebase-adminsdk-xxxxx@your-project-id.iam.gserviceaccount.com"
|
|
20
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## Upload Your `google-services.json` File for Firebase Cloud Messaging
|
|
2
|
+
|
|
3
|
+
To enable Firebase Cloud Messaging (FCM) integration, you need to select your app’s `google-services.json` file. This file links your Android app to your Firebase project and enables services like messaging, analytics, and more.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
To see the file here, please upload it into your Saltcorn Filesystem.
|
|
8
|
+
|
|
9
|
+
### What is `google-services.json`?
|
|
10
|
+
|
|
11
|
+
This is a configuration file automatically generated by Firebase when you register an Android app with your Firebase project. It contains credentials and identifiers for Firebase services, such as:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"project_info": {
|
|
16
|
+
"project_number": "1234567890",
|
|
17
|
+
"project_id": "your-project-id"
|
|
18
|
+
},
|
|
19
|
+
"client": [
|
|
20
|
+
{
|
|
21
|
+
"client_info": {
|
|
22
|
+
"mobilesdk_app_id": "1:1234567890:android:abcdefg12345",
|
|
23
|
+
"android_client_info": {
|
|
24
|
+
"package_name": "com.yourapp.package"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
...
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
TODO
|
package/locales/en.json
CHANGED
|
@@ -1624,5 +1624,24 @@
|
|
|
1624
1624
|
"Button Style": "Button Style",
|
|
1625
1625
|
"Disable full-text search": "Disable full-text search",
|
|
1626
1626
|
"Use LIKE instead of tsvector. Use to match against phrase in the middle of a word.": "Use LIKE instead of tsvector. Use to match against phrase in the middle of a word.",
|
|
1627
|
-
"Model configuration": "Model configuration"
|
|
1627
|
+
"Model configuration": "Model configuration",
|
|
1628
|
+
"Push Notifications": "Push Notifications",
|
|
1629
|
+
"Push Notifications enabled": "Push Notifications enabled",
|
|
1630
|
+
"VAPID public key": "VAPID public key",
|
|
1631
|
+
"Public key for VAPID authentication in web push notifications": "Public key for VAPID authentication in web push notifications",
|
|
1632
|
+
"VAPID private key": "VAPID private key",
|
|
1633
|
+
"Private key for VAPID authentication in web push notifications": "Private key for VAPID authentication in web push notifications",
|
|
1634
|
+
"VAPID email": "VAPID email",
|
|
1635
|
+
"Email address for VAPID authentication in web push notifications. Usually, it is your email address.": "Email address for VAPID authentication in web push notifications. Usually, it is your email address.",
|
|
1636
|
+
"Web push icon": "Web push icon",
|
|
1637
|
+
"Select a publicly accessible square image file": "Select a publicly accessible square image file",
|
|
1638
|
+
"Web push badge": "Web push badge",
|
|
1639
|
+
"Select a publicly accessible monochrome square image file (prefarbly 72x72px)": "Select a publicly accessible monochrome square image file (prefarbly 72x72px)",
|
|
1640
|
+
"Comma-separated list of relative URL route prefixes where CSRF token checking is disabled. Example: <code>/files/upload, /auth/signup</code>": "Comma-separated list of relative URL route prefixes where CSRF token checking is disabled. Example: <code>/files/upload, /auth/signup</code>",
|
|
1641
|
+
"Push icon": "Push icon",
|
|
1642
|
+
"Push badge": "Push badge",
|
|
1643
|
+
"Web push": "Web push",
|
|
1644
|
+
"Native Android": "Native Android",
|
|
1645
|
+
"Firebase JSON key": "Firebase JSON key",
|
|
1646
|
+
"This is your Firebase Service Account JSON key file. ": "This is your Firebase Service Account JSON key file. "
|
|
1628
1647
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "1.3.0",
|
|
3
|
+
"version": "1.3.1-beta.0",
|
|
4
4
|
"description": "Server app for Saltcorn, open-source no-code platform",
|
|
5
5
|
"homepage": "https://saltcorn.com",
|
|
6
6
|
"main": "index.js",
|
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@aws-sdk/client-s3": "^3.735.0",
|
|
10
10
|
"@dr.pogodin/csurf": "1.15.0",
|
|
11
|
-
"@saltcorn/admin-models": "1.3.0",
|
|
12
|
-
"@saltcorn/base-plugin": "1.3.0",
|
|
13
|
-
"@saltcorn/builder": "1.3.0",
|
|
14
|
-
"@saltcorn/data": "1.3.0",
|
|
15
|
-
"@saltcorn/filemanager": "1.3.0",
|
|
16
|
-
"@saltcorn/markup": "1.3.0",
|
|
17
|
-
"@saltcorn/plugins-loader": "1.3.0",
|
|
18
|
-
"@saltcorn/sbadmin2": "1.3.0",
|
|
11
|
+
"@saltcorn/admin-models": "1.3.1-beta.0",
|
|
12
|
+
"@saltcorn/base-plugin": "1.3.1-beta.0",
|
|
13
|
+
"@saltcorn/builder": "1.3.1-beta.0",
|
|
14
|
+
"@saltcorn/data": "1.3.1-beta.0",
|
|
15
|
+
"@saltcorn/filemanager": "1.3.1-beta.0",
|
|
16
|
+
"@saltcorn/markup": "1.3.1-beta.0",
|
|
17
|
+
"@saltcorn/plugins-loader": "1.3.1-beta.0",
|
|
18
|
+
"@saltcorn/sbadmin2": "1.3.1-beta.0",
|
|
19
19
|
"@socket.io/cluster-adapter": "^0.2.1",
|
|
20
20
|
"@socket.io/sticky": "^1.0.1",
|
|
21
21
|
"adm-zip": "0.5.16",
|
package/routes/admin.js
CHANGED
|
@@ -2360,6 +2360,7 @@ router.get(
|
|
|
2360
2360
|
const images = (await File.find({ mime_super: "image" })).filter((image) =>
|
|
2361
2361
|
image.filename?.endsWith(".png")
|
|
2362
2362
|
);
|
|
2363
|
+
const files = await File.find({ folder: "/" });
|
|
2363
2364
|
const keystoreFiles = await File.find({ folder: "keystore_files" });
|
|
2364
2365
|
const provisioningFiles = await File.find({ folder: "provisioning_files" });
|
|
2365
2366
|
const withSyncInfo = await Table.find({ has_sync_info: true });
|
|
@@ -2377,6 +2378,7 @@ router.get(
|
|
|
2377
2378
|
const xcodebuildVersion = xcodeCheckRes.version;
|
|
2378
2379
|
const layout = getState().getLayout(req.user);
|
|
2379
2380
|
const isSbadmin2 = layout === getState().layouts.sbadmin2;
|
|
2381
|
+
const pushEnabled = getState().getConfig("enable_push_notify", false);
|
|
2380
2382
|
send_admin_page({
|
|
2381
2383
|
res,
|
|
2382
2384
|
req,
|
|
@@ -3245,7 +3247,50 @@ router.get(
|
|
|
3245
3247
|
placeholder: "",
|
|
3246
3248
|
})
|
|
3247
3249
|
)
|
|
3248
|
-
)
|
|
3250
|
+
),
|
|
3251
|
+
// google-services.json file
|
|
3252
|
+
pushEnabled
|
|
3253
|
+
? div(
|
|
3254
|
+
{ class: "row pb-3" },
|
|
3255
|
+
div(
|
|
3256
|
+
{ class: "col-sm-8" },
|
|
3257
|
+
label(
|
|
3258
|
+
{
|
|
3259
|
+
for: "googleServicesInputId",
|
|
3260
|
+
class: "form-label fw-bold",
|
|
3261
|
+
},
|
|
3262
|
+
req.__("Google Services File"),
|
|
3263
|
+
a(
|
|
3264
|
+
{
|
|
3265
|
+
href: "javascript:ajax_modal('/admin/help/Google Services File?')",
|
|
3266
|
+
},
|
|
3267
|
+
i({ class: "fas fa-question-circle ps-1" })
|
|
3268
|
+
)
|
|
3269
|
+
),
|
|
3270
|
+
select(
|
|
3271
|
+
{
|
|
3272
|
+
class: "form-select",
|
|
3273
|
+
name: "googleServicesFile",
|
|
3274
|
+
id: "googleServicesInputId",
|
|
3275
|
+
},
|
|
3276
|
+
[
|
|
3277
|
+
option({ value: "" }, ""),
|
|
3278
|
+
...files.map((file) =>
|
|
3279
|
+
option(
|
|
3280
|
+
{
|
|
3281
|
+
value: file.location,
|
|
3282
|
+
selected:
|
|
3283
|
+
builderSettings.googleServicesFile ===
|
|
3284
|
+
file.location,
|
|
3285
|
+
},
|
|
3286
|
+
file.filename
|
|
3287
|
+
)
|
|
3288
|
+
),
|
|
3289
|
+
].join("")
|
|
3290
|
+
)
|
|
3291
|
+
)
|
|
3292
|
+
)
|
|
3293
|
+
: ""
|
|
3249
3294
|
)
|
|
3250
3295
|
),
|
|
3251
3296
|
div(
|
|
@@ -3685,6 +3730,7 @@ router.post(
|
|
|
3685
3730
|
keystoreFile,
|
|
3686
3731
|
keystoreAlias,
|
|
3687
3732
|
keystorePassword,
|
|
3733
|
+
googleServicesFile,
|
|
3688
3734
|
} = req.body || {};
|
|
3689
3735
|
const receiveShareTriggers = Trigger.find({
|
|
3690
3736
|
when_trigger: "ReceiveMobileShareData",
|
|
@@ -3825,6 +3871,8 @@ router.post(
|
|
|
3825
3871
|
spawnParams.push("--androidKeyStoreAlias", keystoreAlias);
|
|
3826
3872
|
if (keystorePassword)
|
|
3827
3873
|
spawnParams.push("--androidKeystorePassword", keystorePassword);
|
|
3874
|
+
if (googleServicesFile)
|
|
3875
|
+
spawnParams.push("--googleServicesFile", googleServicesFile);
|
|
3828
3876
|
|
|
3829
3877
|
// if builDir exists, remove it
|
|
3830
3878
|
if (
|
|
@@ -4504,24 +4552,31 @@ admin_config_route({
|
|
|
4504
4552
|
{ section_header: "Push Notifications" },
|
|
4505
4553
|
"enable_push_notify",
|
|
4506
4554
|
{
|
|
4507
|
-
name: "
|
|
4555
|
+
name: "push_notification_icon",
|
|
4508
4556
|
showIf: { enable_push_notify: true },
|
|
4509
4557
|
},
|
|
4510
4558
|
{
|
|
4511
|
-
name: "
|
|
4559
|
+
name: "push_notification_badge",
|
|
4512
4560
|
showIf: { enable_push_notify: true },
|
|
4513
4561
|
},
|
|
4562
|
+
{ section_header: "Web push" },
|
|
4514
4563
|
{
|
|
4515
|
-
name: "
|
|
4564
|
+
name: "vapid_public_key",
|
|
4516
4565
|
showIf: { enable_push_notify: true },
|
|
4517
4566
|
},
|
|
4518
4567
|
{
|
|
4519
|
-
name: "
|
|
4568
|
+
name: "vapid_private_key",
|
|
4520
4569
|
showIf: { enable_push_notify: true },
|
|
4521
4570
|
},
|
|
4522
4571
|
{
|
|
4523
|
-
name: "
|
|
4572
|
+
name: "vapid_email",
|
|
4573
|
+
showIf: { enable_push_notify: true },
|
|
4574
|
+
},
|
|
4575
|
+
{ section_header: "Native Android" },
|
|
4576
|
+
{
|
|
4577
|
+
name: "firebase_json_key",
|
|
4524
4578
|
showIf: { enable_push_notify: true },
|
|
4579
|
+
help: { topic: "Firebas JSON key" },
|
|
4525
4580
|
},
|
|
4526
4581
|
],
|
|
4527
4582
|
response(form, req, res) {
|
package/routes/fields.js
CHANGED
|
@@ -629,7 +629,7 @@ const fieldFlow = (req) =>
|
|
|
629
629
|
type: "String",
|
|
630
630
|
class: "validate-expression",
|
|
631
631
|
fieldview: "textarea",
|
|
632
|
-
attributes: { rows: 2 },
|
|
632
|
+
attributes: { rows: 2, unsafe: true },
|
|
633
633
|
validator: expressionValidator,
|
|
634
634
|
showIf: { expression_type: "JavaScript expression" },
|
|
635
635
|
}),
|
package/routes/notifications.js
CHANGED
|
@@ -295,10 +295,11 @@ router.post(
|
|
|
295
295
|
if (existingSub) {
|
|
296
296
|
res.json({
|
|
297
297
|
success: "ok",
|
|
298
|
-
message: req.__("
|
|
298
|
+
message: req.__("Already subscribed to notifications"),
|
|
299
299
|
});
|
|
300
300
|
} else {
|
|
301
301
|
userSubs.push({
|
|
302
|
+
type: "web-push",
|
|
302
303
|
endpoint: req.body.endpoint,
|
|
303
304
|
keys: {
|
|
304
305
|
auth: req.body.keys.auth,
|
|
@@ -318,6 +319,60 @@ router.post(
|
|
|
318
319
|
})
|
|
319
320
|
);
|
|
320
321
|
|
|
322
|
+
router.post(
|
|
323
|
+
"/fcm-token",
|
|
324
|
+
loggedIn,
|
|
325
|
+
error_catcher(async (req, res) => {
|
|
326
|
+
const enabled = getState().getConfig("enable_push_notify", false);
|
|
327
|
+
if (!enabled) {
|
|
328
|
+
res.status(403).json({
|
|
329
|
+
error: req.__("Notifications are not enabled on this server"),
|
|
330
|
+
});
|
|
331
|
+
} else {
|
|
332
|
+
const { token, deviceId } = req.body || {};
|
|
333
|
+
if (!token) {
|
|
334
|
+
res.status(400).json({
|
|
335
|
+
error: req.__("FCM token is required"),
|
|
336
|
+
});
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const user = req.user;
|
|
340
|
+
const allSubs = getState().getConfig(
|
|
341
|
+
"push_notification_subscriptions",
|
|
342
|
+
{}
|
|
343
|
+
);
|
|
344
|
+
let userSubs = allSubs[user.id] || [];
|
|
345
|
+
const existingSub = userSubs.find(
|
|
346
|
+
(s) =>
|
|
347
|
+
s.type === "fcm-push" && s.token === token && s.deviceId === deviceId
|
|
348
|
+
);
|
|
349
|
+
if (existingSub) {
|
|
350
|
+
res.json({
|
|
351
|
+
success: "ok",
|
|
352
|
+
message: req.__("FCM token already uploaded"),
|
|
353
|
+
});
|
|
354
|
+
} else {
|
|
355
|
+
userSubs = userSubs.filter(
|
|
356
|
+
(s) => s.type !== "fcm-push" || s.deviceId !== deviceId
|
|
357
|
+
);
|
|
358
|
+
userSubs.push({
|
|
359
|
+
type: "fcm-push",
|
|
360
|
+
token: token,
|
|
361
|
+
deviceId: deviceId,
|
|
362
|
+
});
|
|
363
|
+
await getState().setConfig("push_notification_subscriptions", {
|
|
364
|
+
...allSubs,
|
|
365
|
+
[user.id]: userSubs,
|
|
366
|
+
});
|
|
367
|
+
res.json({
|
|
368
|
+
success: "ok",
|
|
369
|
+
message: req.__("FCM token uploaded"),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
})
|
|
374
|
+
);
|
|
375
|
+
|
|
321
376
|
router.post(
|
|
322
377
|
"/remove-subscription",
|
|
323
378
|
loggedIn,
|
package/routes/pageedit.js
CHANGED
|
@@ -183,6 +183,9 @@ const pageBuilderData = async (req, context) => {
|
|
|
183
183
|
triggers.forEach((tr) => {
|
|
184
184
|
actions.push(tr.name);
|
|
185
185
|
});
|
|
186
|
+
const triggerActions = Trigger.trigger_actions({
|
|
187
|
+
apiNeverTriggers: true,
|
|
188
|
+
});
|
|
186
189
|
const actionConfigForms = {};
|
|
187
190
|
for (const name of actions) {
|
|
188
191
|
const action = stateActions[name];
|
|
@@ -247,6 +250,7 @@ const pageBuilderData = async (req, context) => {
|
|
|
247
250
|
page_groups,
|
|
248
251
|
actions: actionsNotRequiringRow,
|
|
249
252
|
builtInActions: ["GoBack"],
|
|
253
|
+
triggerActions,
|
|
250
254
|
library,
|
|
251
255
|
min_role: context.min_role,
|
|
252
256
|
actionConfigForms,
|