Compare commits

...

2214 Commits

Author SHA1 Message Date
Rainer Killinger
5050ac90eb docs: update changelogs for release
ci: publish release
2024-06-28 09:28:39 +02:00
Rainer Killinger
688bc5f2e7 refactor: add changeset 2024-06-28 09:03:54 +02:00
Rainer Killinger
ad174dd7d7 refactor: use static map files from backend 2024-06-28 08:59:08 +02:00
Rainer Killinger
26e654f5b8 fix: app license overview 2024-06-27 14:57:24 +02:00
Rainer Killinger
5439484a90 fix: changelog typo 2024-06-27 12:06:52 +02:00
Rainer Killinger
68f3366a27 refactor: adjustments for recent PAIA changes 2024-06-27 09:23:55 +00:00
Jovan Krunić
dea9a82105 fix: do not fetch remote configuration if offline
Closes #206
2024-06-17 09:55:29 +00:00
39d2801114 feat: store id cards 2024-06-12 13:51:46 +02:00
Rainer Killinger
341b209092 refactor: display id-cards in their own modal 2024-06-05 11:07:30 +00:00
Rainer Killinger
a6b88d3534 refactor: add f-u specific changelogs 2024-05-27 16:27:37 +02:00
Rainer Killinger
be863daaef refactor: updated used licences within the app 2024-05-27 15:36:00 +02:00
2f64d69693 feat: migrate to protomaps and maplibre 2024-05-27 15:07:27 +02:00
964516d3cf fix: remove noUnused* TSConfig options
TSConfig options prevent Angular from compiling the app. This is
specifically harsh with the noUnused* rules, which require you to
strictly remove any unused variables even in dev mode while testing.
Since this case is already covered by ESLint, the TSConfig option was
removed.
2024-05-27 15:07:27 +02:00
71ff9fd960 fix: favorite button 2024-05-27 15:07:27 +02:00
abf9999461 feat: type-safe sc-icons 2024-05-27 15:07:26 +02:00
53c3d0ba0c refactor: replace rfdc with native structuredClone 2024-05-27 15:07:25 +02:00
Rainer Killinger
622481a3c9 docs: update changelogs for release\n\nci: publish release 2024-03-28 14:27:56 +01:00
Thea Schöbl
1ab5c0c355 fix: inPlace in list items is placed weird 2024-03-27 13:45:22 +00:00
Rainer Killinger
b0f6ffb21c refactor: ajdust app environment to backend version >= v3.1.0 2024-03-27 10:11:32 +01:00
Rainer Killinger
e658cff9d2 refactor: use GET for id-cards requests 2024-03-27 09:55:31 +01:00
Rainer Killinger
e71355a2fb fix: malformed Bearer header in id-cards provider 2024-03-27 09:55:30 +01:00
100607740b fix: angular lsp broken 2024-03-27 09:55:30 +01:00
Thea Schöbl
10c4466b37 feat: update to angular 17 2024-03-27 09:55:30 +01:00
Rainer Killinger
09faa66e98 fix: broken build and test stage 2024-03-27 09:55:30 +01:00
Rainer Killinger
7c5687111f fix: check-icons script in app 2024-03-27 09:55:30 +01:00
Rainer Killinger
c066028e49 refactor: update asdf .tool-versions 2024-03-27 09:55:30 +01:00
0858a26dc1 fix: dish prices sometimes go missing 2024-03-27 09:55:30 +01:00
8667603bd6 feat: export core version in package 2024-03-27 09:55:29 +01:00
65bc9a76b6 feat: add syncpack semver ranges 2024-03-27 09:55:29 +01:00
912ae42270 feat: add ability to check for existence of a field 2024-03-27 09:55:29 +01:00
c4a5d6e73b fix: exclude app.js and lib from typescript compliation 2024-03-27 09:55:29 +01:00
deed376c24 feat: enable checkJs by default 2024-03-27 09:55:29 +01:00
a4cc23e9a8 feat: add direnv for nix
feat: update nix flake to not rely on buildFHSUserEnv
2024-03-27 09:55:29 +01:00
e8d72683ef fix: backend tests break every year
refactor: update some backend unit tests
2024-03-27 09:55:28 +01:00
Rainer Killinger
e3d068f8d4 fix: iOS build resources 2024-03-27 09:55:28 +01:00
Rainer Killinger
b346d216a3 refactor: add asdf tool versioning file 2024-03-27 09:55:28 +01:00
dbb558508f fix: changeset crashes because it uses internal prettier version 2024-03-27 09:55:28 +01:00
Rainer Killinger
754d99c1b4 refactor: overhaul minimal-deployment compose file 2024-03-27 09:55:27 +01:00
Rainer Killinger
689ac68be3 fix: pin alpine version to 3.18 and add healthchecks 2024-03-06 11:45:40 +01:00
Rainer Killinger
d36d9596fc docs: update changelogs for release 2023-12-19 15:32:42 +01:00
Thea Schöbl
8d50f669e7 feat: collapse detail titles into header bar 2023-12-19 14:16:38 +01:00
Jovan Krunić
dce08d9c03 fix: reverse workaround after update of capacitor
Closes #179
2023-12-19 13:12:25 +00:00
Rainer Killinger
296054c8e0 docs: update changelogs for release
ci: publish release
2023-12-13 16:42:45 +01:00
859763367e fix: throw error if config import fails
feat: log used config in backend
2023-12-12 14:37:24 +01:00
Rainer Killinger
848fde4660 refactor: increase maxRequestBodySize to 2 MB 2023-12-11 13:00:52 +01:00
Rainer Killinger
bd1046a19a docs: update changelogs for release
ci: publish release
2023-12-08 18:03:41 +01:00
Rainer Killinger
3b9068197c fix: pettier config causing changeset to crash 2023-12-08 17:35:00 +01:00
Thea Schöbl
d2c8120255 feat: simplify version history api 2023-12-08 13:49:53 +00:00
d44204cf8d fix: remove old console.log statements 2023-12-06 17:15:03 +01:00
9d5dd05bb6 refactor: remove nullish coalecing pipe 2023-12-06 17:15:03 +01:00
288a49113f refactor: migrate to strict template checking 2023-12-06 17:14:55 +01:00
791b5c895d fix: hide navigation from jop posting search 2023-12-05 15:51:57 +00:00
d7a85b7fae feat: improved e2e tests 2023-12-05 15:17:00 +00:00
Rainer Killinger
bff2d985aa refactor: use latest backend (4.1.0) 2023-12-05 12:06:11 +00:00
Rainer Killinger
655efc9d29 fix: map location preview collapsed in webkit 2023-12-05 12:06:11 +00:00
Rainer Killinger
66712bdd24 fix: iOS app not starting 2023-12-05 11:19:46 +00:00
8b5b4c765b fix: my app card layout 2023-12-05 10:36:22 +00:00
Thea Schöbl
31a6ebfd3f feat: upgrade prettier to v3 2023-12-05 10:36:04 +00:00
Rainer Killinger
991ed1cb1f docs: update changelogs for release
ci: publish release
2023-12-01 19:05:06 +01:00
Rainer Killinger
1efe5c1449 refactor: don't open webpack-bundle-analyzer 2023-12-01 18:28:41 +01:00
Rainer Killinger
4dbeb9936c refactor: adjust f-u release version history 2023-12-01 18:19:36 +01:00
Rainer Killinger
29e6128141 fix: resources:ios script not being BSD compatible 2023-12-01 18:15:15 +01:00
Rainer Killinger
753dc7cd11 docs: update changelogs for release
ci: publish release
2023-12-01 16:42:33 +01:00
Rainer Killinger
4f3834c20e refactor: update capacitor-secure-storage-plugin 2023-12-01 13:42:22 +00:00
Rainer Killinger
cfb4aa364f refactor: add new book and periodical categories 2023-12-01 12:50:28 +00:00
Thea Schöbl
37945f7d19 feat: app release notes 2023-12-01 12:34:20 +00:00
5d47a17629 fix: android system bars always have light buttons 2023-12-01 12:23:38 +01:00
61587c7ba1 feat: add alert when critical errors prevent an app launch 2023-11-28 09:01:23 +00:00
066e374462 feat: upgrade to capacitor 5.0 2023-11-28 09:01:23 +00:00
a02190fe5a fix: flaky tests due to console.error checks 2023-11-27 19:54:28 +01:00
04e275e967 feat: add share option in detail views 2023-11-14 16:37:12 +01:00
f618725598 feat: full database clone feature in api-cli 2023-10-20 15:13:26 +02:00
theld
06b8ca109e feat: job portal
fix: disable function scoping lint rule
fix: outdated contributing docs for adding SCThings
2023-10-20 15:13:26 +02:00
f3ba8af051 fix: prevent duplicate publishes 2023-10-20 14:19:07 +02:00
2e0020b5c8 fix: non-publish branches fail on main 2023-10-20 14:15:22 +02:00
d17e8abea3 fix: docs fail to generate 2023-10-20 14:04:08 +02:00
ef092a8bff fix: library login fails 2023-10-17 18:00:55 +02:00
656f2266e3 feat: add scripts to enable login flow from localhost 2023-10-17 14:50:34 +02:00
Rainer Killinger
5c8c151917 docs: update changelogs for release
ci: publish release
2023-10-15 21:50:05 +02:00
Rainer Killinger
c020f075be fix: missing dependencies 2023-10-15 21:48:18 +02:00
98f21ac23b fix: distance disappears after 10 seconds 2023-10-15 16:41:52 +00:00
c460a3dbc0 fix: safari crashes with long opening hours change times 2023-10-15 16:28:42 +00:00
Rainer Killinger
5db3b7948a docs: update changelogs for release
ci: publish release
2023-10-13 18:22:48 +02:00
e7607360e2 feat: section dynamic slide buttons 2023-10-12 11:47:59 +02:00
1f62b5c5b0 feat: backend-supplied id cards on profile page
feat: SCIdCard thing
2023-10-12 11:47:59 +02:00
905ebf8c59 refactor: update capacitor build files 2023-10-12 11:14:28 +02:00
b210e0d9c3 fix: change leaflet tiles to be inverted as a whole 2023-10-12 10:18:18 +02:00
3a79d57c8d fix: detail view should not reuse things without references 2023-10-09 08:53:28 +00:00
9e6d4fe054 fix: week overview button broken on webkit 2023-10-06 17:57:02 +02:00
7b96500a75 fix: backend tests failing since the start of this semester 2023-10-06 15:36:00 +02:00
e0b7e616b3 fix: live update distance in list items 2023-09-21 09:38:52 +00:00
38fb7a398d fix: long branch names prevent review deployment 2023-09-21 09:55:35 +02:00
a99e08cd68 refactor: change opening hours handling
fix: opening hours not updating
feat: lazy-load opening hours module
feat: add e2e tests for opening hours
refactor: migrate opening hours to on-push change detection
feat: show exact minutes in opening hours starting one hour before next change
2023-09-21 09:55:35 +02:00
a5c9d22016 feat: add external directions referral
feat: change map page
feat: add error handling and timeout to location fetching in directions

resolves #124
resolves #122
2023-09-15 18:52:28 +00:00
3c49c4cf6d fix: route stack service causes needless network traffic 2023-09-06 15:29:47 +02:00
f2c4ee308f feat: share loaded data to detail views across routes 2023-09-06 14:52:02 +02:00
bd09b36620 refactor: use observable chains in rating component 2023-08-29 10:20:35 +00:00
ca146b7761 refactor: separate dashboard schedule nav e2e tests 2023-08-28 13:48:34 +02:00
Thea Schöbl
001f978bf9 feat: cleanup profile page 2023-08-25 14:43:25 +00:00
Thea Schöbl
57a5b6061b fix: type errors in easy-ast when generating docs 2023-08-23 08:45:47 +00:00
Rainer Killinger
4fb5941c56 ci: prepare e2e jobs for non nonexistent cache 2023-08-22 17:09:14 +02:00
Rainer Killinger
314e6a6e86 ci: move most pipelines to GitLab OSS large runner 2023-08-08 17:31:14 +02:00
Thea Schöbl
e1cc33bba2 refactor: rename "recurring" to "week overview"
refactor: replace dashboard calendar icon
resolves #128

refactor: route dashboard "next unit" to date series instead of events
resolves #126
2023-08-07 15:51:23 +00:00
Rainer Killinger
9abd397578 refactor: update changelog
ci: publish release
2023-08-03 16:30:40 +02:00
Rainer Killinger
69fe8c6ac8 ci: polish publishing via ci pipelines 2023-08-03 16:30:35 +02:00
Thea Schöbl
cbc59795b7 feat: connection timeout 2023-08-02 17:59:51 +02:00
Thea Schöbl
945ae039eb feat: nix flake for development 2023-08-02 17:59:51 +02:00
Thea Schöbl
06f3120345 feat: use takeUntilDestroy instead of manually unsubscribing 2023-08-02 17:59:21 +02:00
Thea Schöbl
bebee6b4d0 feat: migrate app collection helpers to use the collecion-utils package 2023-08-02 17:59:21 +02:00
2f59ab9707 fix: parallax replacer might fail to find shadow root on its first try 2023-08-02 17:59:20 +02:00
Thea Schöbl
23481d0d73 feat: upgrade to Angular 16.1 2023-08-02 17:59:20 +02:00
Rainer Killinger
df37c6c185 refactor: remove app release template from monorepo 2023-08-02 17:58:20 +02:00
d3268b50c2 feat: add stylelint 2023-07-18 15:40:17 +02:00
b085850207 feat: dish certifications 2023-07-18 14:42:30 +02:00
c9240f289e feat: rating for dishes 2023-07-18 14:24:15 +02:00
Rainer Killinger
2fe8275f2f refactor: app core version check 2023-07-18 13:13:08 +02:00
Rainer Killinger
9ec35e65f8 ci: fixup todos 2023-07-18 13:13:07 +02:00
Rainer Killinger
59e8e6e264 docs: fix license files 2023-07-14 11:54:24 +02:00
Rainer Killinger
982b4feb3c ci: add scheduled builds 2023-07-14 11:05:46 +02:00
107a7c5e9e test: fix app unit tests 2023-07-06 11:52:11 +02:00
16a039a16e docs: add api doc 2023-07-05 11:43:26 +02:00
11c9d742cd refactor: move node and builder images 2023-07-03 15:18:30 +02:00
4e4c7b5cc9 feat: publishing workflow
refactor: update changelog
v3.0.0-next.0
2023-07-03 13:44:42 +02:00
0a7e6af141 refactor: migrate es mapping types from es-mapping-generator to .d.ts next to generated mappings 2023-06-30 12:46:48 +02:00
1aaf85b444 fix: upgrade @ionic/angular to fix broken popups in chrome 2023-06-29 19:43:11 +02:00
98546a97a3 refactor: migrate @krlwlfrt/async-pool to @openstapps/collection-utils 2023-06-29 19:12:09 +02:00
64caebafe5 refactor: migrate changelogs to changesets format
refactor: add changesets
refactor: chose packages to publish
2023-06-29 18:55:26 +02:00
f1bc41c4df refactor: speed up the pipeline by directly deploying the review app from the build step 2023-06-29 16:01:42 +02:00
6a8b3d2fe2 feat: migrate app to AOT compilation
refactor: temporarily replace @ionic/storage-angular with custom file until upgrade to Angular 14+
2023-06-29 16:01:42 +02:00
129f25d1f0 feat: docker publishing 2023-06-29 16:01:42 +02:00
c4260dc882 feat: add openapi gen to core 2023-06-29 16:01:42 +02:00
5b4d2bd16c refactor: app deployment 2023-06-29 16:01:42 +02:00
Rainer Killinger
d61d16e752 ci: include backend integration tests 2023-06-29 16:01:42 +02:00
3b8a344d73 refactor: app deployment 2023-06-29 16:01:42 +02:00
b21833de40 refactor: split api into api, api-cli & api-plugin 2023-06-29 15:56:25 +02:00
495a63977c test: add unit tests to pipeline 2023-06-29 15:56:25 +02:00
45444d9373 fix: pipeline 2023-05-31 15:30:25 +02:00
68400f2480 fix: tests 2023-05-31 15:05:41 +02:00
0d60b8bfad feat: update tests
feat: update tests

feat: update tests
2023-05-31 14:05:45 +02:00
d6d4f6e5c4 fix: rebase cleanup
fix: rebase cleanup

fix: rebase cleanup
2023-05-31 14:04:38 +02:00
0a76427ba8 feat: migrate backend to cosmiconfig 2023-05-31 14:04:05 +02:00
d8c79256c9 feat: tests 2023-05-31 14:04:05 +02:00
8cb9285462 refactor: build system 2023-05-31 14:04:05 +02:00
4df19e8c20 feat: migrate to esm 2023-05-31 14:04:03 +02:00
fd740b3091 fix: build 2023-05-31 14:01:59 +02:00
3792a14e90 Merge remote-tracking branch 'backend/master' 2023-05-31 14:00:29 +02:00
be1774b1cd refactor: move backend to monorepo 2023-05-31 13:54:58 +02:00
Thea Schöbl
7c3ccc35af fix: search uses inactive indices 2023-05-31 11:40:08 +00:00
881734c29e Merge remote-tracking branch 'app/develop' 2023-05-24 14:31:00 +02:00
ac62e621d5 refactor: move app to monorepo 2023-05-24 14:26:54 +02:00
cc7406c07f Merge remote-tracking branch 'logger/master' 2023-05-24 14:23:43 +02:00
3ab8bc1517 refactor: move logger to monorepo 2023-05-24 14:22:25 +02:00
44f2b4a2b3 Merge remote-tracking branch 'api/master' 2023-05-24 14:16:58 +02:00
2dc8fd98b8 refactor: move api to monorepo 2023-05-24 14:16:07 +02:00
2d139e478a Merge remote-tracking branch 'core/master' 2023-05-24 14:09:07 +02:00
9aad8eda9a refactor: move core to monorepo 2023-05-24 14:06:57 +02:00
522b951490 refactor: update es-mapping-generator 2023-05-24 13:31:41 +02:00
b819dba17f Merge remote-tracking branch 'es-mapping-generator/master' 2023-05-24 13:29:50 +02:00
e76ffe9371 refactor: move es-mapping-generator to monorepo 2023-05-24 13:23:12 +02:00
c8703ec66b Merge remote-tracking branch 'proxy/master' 2023-05-24 13:14:30 +02:00
23d0c6971c refactor: move proxy to monorepo 2023-05-24 13:13:13 +02:00
f69edc6393 Merge remote-tracking branch 'backend/master' 2023-05-23 14:26:05 +02:00
1ea219b1ef refactor: move backend to monorepo 2023-05-23 14:07:16 +02:00
857e829e8b Merge remote-tracking branch 'database/main' 2023-05-23 13:58:13 +02:00
b6b745310a migrate database to monorepo 2023-05-23 13:14:35 +02:00
1bd1672276 1.1.0 2023-05-19 12:59:09 +02:00
1fdcae7aaf refactor: update dependencies 2023-05-19 12:58:10 +02:00
927f8df900 1.1.0 2023-05-19 11:07:55 +02:00
Thea Schöbl
fd63fb764f feat: add certification thing 2023-05-15 13:38:11 +00:00
Rainer Killinger
35611af501 ci: replace deprecated CI variables for Gitlab 16 2023-05-11 14:12:40 +02:00
Rainer Killinger
826eaa7825 refactor: update dependencies 2023-05-11 13:38:56 +02:00
Rainer Killinger
b7407eb057 ci: replace deprecated CI variables for Gitlab 16 2023-05-11 13:37:30 +02:00
Rainer Killinger
20a336d3c4 ci: replace deprecated CI variables for Gitlab 16 2023-05-11 12:51:54 +02:00
Rainer Killinger
41c5541dd1 2.1.1 2023-05-10 13:09:32 +02:00
Rainer Killinger
71eaf046d8 refactor: changelog and licenses on version tag 2023-05-10 13:07:11 +02:00
Rainer Killinger
28f106b530 refactor: update openstapps dependencies 2023-05-09 13:58:07 +02:00
Rainer Killinger
f4b2d747a3 1.0.0 2023-05-08 15:32:40 +02:00
Rainer Killinger
4ebe44a5a7 fix: openapi docs generation 2023-05-08 15:04:25 +02:00
Rainer Killinger
3471591a7d fix: rename deprecated Gitlab CI variables 2023-05-08 14:22:10 +02:00
Rainer Killinger
5eae0d5955 1.0.1 2023-05-08 12:59:32 +02:00
Rainer Killinger
a5291af838 fix: changelog generation on version tags 2023-05-08 12:58:53 +02:00
Rainer Killinger
10f7cb8028 fix: rename deprecated Gitlab CI variables 2023-05-08 12:41:47 +02:00
Thea Schöbl
0f970fa1f1 fix: parallax broken since safari 16.4
Moves the parallax effect into a directive which injects required elements into the shadow DOM and adds `part` attributes, so it can be styled from a global stylesheet.
2023-05-04 12:18:48 +00:00
Rainer Killinger
7073dfd0dd docs: update changelog 2023-05-04 12:57:36 +02:00
Rainer Killinger
9e45c46eb8 1.0.0 2023-05-04 12:57:34 +02:00
Rainer Killinger
2efa29f61c refactor: update to major core version 2023-05-04 12:46:01 +02:00
Rainer Killinger
4a0986bdad docs: update changelog 2023-05-04 12:43:53 +02:00
Rainer Killinger
881db8b9f0 0.46.0 2023-05-04 12:43:51 +02:00
openstappsbot
d6d10a2a0d refactor: update all 2023-05-01 07:16:41 +00:00
openstappsbot
d16ae93a7a refactor: update all 2023-04-28 13:25:13 +00:00
Rainer Killinger
de71d68051 refactor: update dependencies 2023-04-28 15:20:27 +02:00
Thea Schöbl
c9b83b5d71 feat: update to of elasticsearch 8.4 2023-04-28 12:43:31 +00:00
Rainer Killinger
b21dc75964 1.0.1 2023-04-28 13:33:46 +02:00
Rainer Killinger
4a18cd5cf5 refactor: update es-mapping-generator dependecy 2023-04-28 13:32:41 +02:00
Rainer Killinger
e0e803fba0 0.6.0 2023-04-28 13:17:33 +02:00
Rainer Killinger
bcba3435df docs: update changelog 2023-04-28 13:17:33 +02:00
Thea Schöbl
d90416e201 Resolve "Retype mapping generation using @elastic/elasticsearch" 2023-04-28 11:15:08 +00:00
Rainer Killinger
937586ca43 1.0.0 2023-04-28 10:18:16 +02:00
Rainer Killinger
afcc73f3da feat: support ES 8.4 via mapping generator 2023-04-27 15:32:36 +02:00
Rainer Killinger
fc850fe7ac 0.5.0 2023-04-27 14:15:20 +02:00
Rainer Killinger
898480e254 docs: update changelog 2023-04-27 14:15:20 +02:00
Rainer Killinger
3bca003d16 refactor: include changelog in version commit 2023-04-27 14:14:37 +02:00
abf2ab6a5a fix: schedule tabs navigating to the wrong url 2023-04-27 12:02:35 +00:00
Thea Schöbl
61fee2bbf3 refactor: mapping generation for `Elasticsearch 8.4 2023-04-27 09:33:09 +00:00
Rainer Killinger
f49c44f5c5 fix: typo in catalog provider query 2023-04-20 16:59:41 +02:00
Rainer Killinger
9937dcab52 2.1.0 2023-04-20 16:23:53 +02:00
Rainer Killinger
b5a325eb56 refactor: apply prettier rules to release assets 2023-04-20 16:16:09 +02:00
Rainer Killinger
cd554e8403 refactor: cleanup dish list item layout 2023-04-20 13:54:37 +00:00
Rainer Killinger
f430621cb7 refactor: profile page simple swiper & item layout 2023-04-20 13:54:37 +00:00
Rainer Killinger
afbd1fc048 fix: catalog module semester selection 2023-04-20 13:54:37 +00:00
9e160e8d1e fix: breadcrumbs are under parallax 2023-04-20 13:54:37 +00:00
Jovan Krunić
7f6de94ab5 fix: browser logout only if endSession url defined
Closes #395
2023-04-20 13:54:37 +00:00
Thea Schöbl
cc939f3887 feat: transition to full sidebar at xl instead of lg 2023-04-20 13:54:37 +00:00
3e5724d9be refactor: replace timetable event modal with route 2023-04-20 13:54:37 +00:00
Thea Schöbl
22e70ae92b feat: show in-place in date series modal, resolves #385
feat: show start date for date series modal ranges, resolves #386
refactor: reformat date series modal to be more readable
fix: add message for malformed date series, resolves #388
2023-04-20 13:54:37 +00:00
3e99d7fa8f fix: can't select some list elements on safari 16.4 2023-04-20 13:54:37 +00:00
Thea Schöbl
e8dee1fd47 refactor: remove virtual scroll 2023-04-20 13:54:37 +00:00
e90286fc68 fix: autofocus searchbar only when no default data is displayed 2023-04-20 13:54:37 +00:00
Thea Schöbl
05e996ae90 fix: canteen view removes item select listener on view exit 2023-04-20 13:54:37 +00:00
Thea Schöbl
947cab458c fix: workaround for side menu items not being active on page load 2023-04-20 13:54:37 +00:00
Thea Schöbl
2220ab24b3 feat: add easy way to configure search filtering for nested properties 2023-04-20 13:54:37 +00:00
Thea Schöbl
e75a46633c feat: dark theme 2023-04-20 13:54:37 +00:00
Thea Schöbl
23bd5a431c refactor: simplify favorites and mensa dashboard sections 2023-04-20 13:54:37 +00:00
Thea Schöbl
47565e51b0 fix: remove infinite scroll e2e test 2023-04-20 13:54:37 +00:00
Thea Schöbl
8c30a47706 feat: dashboard search rework 2023-04-20 13:54:37 +00:00
dff4a95acc fix: data detail local favorite fallback causing duplicate nested favorite view 2023-04-20 13:54:37 +00:00
Thea Schöbl
95f2da2def fix: data-detail favorite button color leaking to list items 2023-04-20 13:54:37 +00:00
Rainer Killinger
f207e029f1 fix: location flow on iOS devices 2023-04-20 13:54:37 +00:00
Thea Schöbl
2f1298c9d7 feat: rework settings page design 2023-04-20 13:54:37 +00:00
Jovan Krunić
8cd2d777ab feat: optional logout from identity provider
Closes #372
2023-04-20 13:54:37 +00:00
Rainer Killinger
a8c7d5ab59 fix: catalog semester selection 2023-04-20 13:54:37 +00:00
Thea Schöbl
968cb72957 feat: implement custom cdk virtual scroll behavior 2023-04-20 13:54:37 +00:00
f5ca1508fb fix: translate simple pipe doesn't update on language changes 2023-04-20 13:54:37 +00:00
Thea Schöbl
33a74d96ae feat: revamp dashboard mensa section 2023-04-20 13:54:37 +00:00
Thea Schöbl
1318cbca7f fix: replace breadcrumb popover with simply expanding the breadcrumbs 2023-04-20 13:54:37 +00:00
Thea Schöbl
982fb1653b feat: add content to empty catalogs 2023-04-20 13:54:37 +00:00
Rainer Killinger
6270a93151 ci: run format fix on changelog and licenses 2023-04-20 13:54:37 +00:00
44ab2cafd3 Merge remote-tracking branch 'gitlab-api/master' 2023-03-15 19:46:08 +01:00
e64f66feb0 refactor: move gitlab-api to monorepo 2023-03-15 19:45:50 +01:00
24b50d471b refactor: add monorepo 2023-03-14 17:44:23 +01:00
93b651b35b Merge remote-tracking branch 'minimal-deployment/master' 2023-03-14 17:36:27 +01:00
bbed8bf182 refactor: move minimal-deployment to monorepo 2023-03-14 17:36:01 +01:00
d8baa99fc6 Merge remote-tracking branch 'minimal-plugin/master' 2023-03-14 17:35:08 +01:00
db58aa4873 refactor: move minimal-plugin to monorepo 2023-03-14 17:34:39 +01:00
163dff7bc6 Merge remote-tracking branch 'eslint-config/master' 2023-03-14 17:33:26 +01:00
0a37c252e3 refactor: move eslint-config to monorepo 2023-03-14 17:32:57 +01:00
d32b88cfef Merge remote-tracking branch 'database/main' 2023-03-14 17:31:17 +01:00
76886ae502 refactor: move database to monorepo 2023-03-14 17:30:55 +01:00
d5130aa0e4 Merge remote-tracking branch 'prettier-config/main' 2023-03-14 17:29:30 +01:00
8c7d9a942b refactor: move prettier-config to monorepo 2023-03-14 17:29:01 +01:00
ee57dd163c Merge remote-tracking branch 'app-release-template/main' 2023-03-14 17:27:33 +01:00
4f91f46af6 refactor: move app-release-template to monorepo 2023-03-14 17:26:49 +01:00
3e6154e4aa Merge remote-tracking branch 'configuration/master' 2023-03-14 17:25:16 +01:00
07150d8fc5 refactor: move configuration to monorepo 2023-03-14 17:24:45 +01:00
37baabb1fb Merge remote-tracking branch 'minimal-connector/master' 2023-03-14 17:23:31 +01:00
4445c5eef9 refactor: move minimal-connector to monorepo 2023-03-14 17:22:55 +01:00
52847f472d Merge remote-tracking branch 'es-mapping-generator/master' 2023-03-14 17:21:25 +01:00
Rainer Killinger
ceed1ed706 refactor: move es-mapping-generator to monorepo 2023-03-14 17:20:51 +01:00
3ddc9d3320 Merge remote-tracking branch 'projectmanagement/master' 2023-03-14 17:19:07 +01:00
e9185d248b refactor: move logger to monorepo 2023-03-14 17:18:13 +01:00
67fdb6f70a Merge remote-tracking branch 'logger/master' 2023-03-14 17:16:18 +01:00
a9fad2e442 refactor: move logger to monorepo 2023-03-14 17:15:56 +01:00
4ffb02fa97 Merge remote-tracking branch 'proxy/master' 2023-03-14 17:14:22 +01:00
ae053147d4 refactor: move proxy to monorepo 2023-03-14 17:13:57 +01:00
30db9d8215 Merge remote-tracking branch 'api/master' 2023-03-14 17:12:21 +01:00
086584af8e refactor: move api to monorepo 2023-03-14 17:11:48 +01:00
3405850e85 Merge remote-tracking branch 'core-tools/master' 2023-03-14 17:10:11 +01:00
721ea0fe67 refactor: move core-tools to monorepo 2023-03-14 17:08:48 +01:00
980d5034f2 Merge remote-tracking branch 'app/develop' 2023-03-14 17:07:03 +01:00
54ed0a2f27 refactor: move app to monorepo 2023-03-14 17:05:09 +01:00
cffad4d148 refactor: reorganize files 2023-03-14 16:59:09 +01:00
58e6b390c2 Merge remote-tracking branch 'backend/master' 2023-03-14 16:49:42 +01:00
73edb5fd43 refactor: move backend to monorepo 2023-03-14 16:48:35 +01:00
9b2bc2299d refactor: move core to mono repo 2023-03-14 16:42:48 +01:00
Thea Schöbl
2f65ebf57f fix: remove infinite scroll e2e test 2023-03-10 17:51:02 +00:00
Thea Schöbl
61debcf1a5 feat: dashboard search rework 2023-03-10 15:46:59 +00:00
94df92fb98 fix: data detail local favorite fallback causing duplicate nested favorite view 2023-03-09 17:39:02 +00:00
Thea Schöbl
6b37ca4b96 fix: data-detail favorite button color leaking to list items 2023-03-09 17:09:02 +00:00
Rainer Killinger
05a0bf53fa fix: location flow on iOS devices 2023-03-09 10:32:22 +00:00
Thea Schöbl
3f5b77520c feat: rework settings page design 2023-03-09 10:29:59 +00:00
Jovan Krunić
ef7752ad49 feat: optional logout from identity provider
Closes #372
2023-03-09 08:12:32 +00:00
Rainer Killinger
515a6eeea5 fix: semster boosting 2023-03-07 13:45:18 +01:00
Rainer Killinger
b2a8cba1aa fix: catalog semester selection 2023-03-02 10:52:16 +00:00
Thea Schöbl
260fbe01db feat: implement custom cdk virtual scroll behavior 2023-02-28 15:00:57 +00:00
Jovan Krunić
95b2fc5c18 0.75.0 2023-02-28 14:22:05 +01:00
110544c793 fix: translate simple pipe doesn't update on language changes 2023-02-27 14:44:37 +00:00
Thea Schöbl
298f48a914 feat: revamp dashboard mensa section 2023-02-27 14:44:20 +00:00
Jovan Krunić
28eacf7925 feat: add rating for things
Closes #152
2023-02-27 13:33:24 +01:00
Thea Schöbl
ec2ac250bc fix: replace breadcrumb popover with simply expanding the breadcrumbs 2023-02-24 11:34:41 +00:00
Thea Schöbl
66719d6cb7 feat: add content to empty catalogs 2023-02-24 10:50:38 +00:00
Rainer Killinger
fdf7999437 feat: add apk deploy via scp 2023-02-15 11:46:23 +01:00
Rainer Killinger
a24e2f36fd refactor: default to production releases 2023-02-13 18:46:35 +01:00
Rainer Killinger
f5bd04930b ci: run format fix on changelog and licenses 2023-02-13 17:39:30 +01:00
Rainer Killinger
5c3e75e3f3 2.0.1 2023-02-13 17:16:47 +01:00
Rainer Killinger
aefae33d5c fix: remove misleading assessment calculations 2023-02-13 16:46:43 +01:00
Thea Schöbl
9b4caf526f feat: offline notice 2023-02-13 12:19:35 +00:00
Rainer Killinger
3e490aeeb9 refactor: update configs to production values 2023-01-30 19:51:54 +01:00
Rainer Killinger
2a380c63b2 0.6.0 2023-01-30 14:35:26 +01:00
Rainer Killinger
aac173d7a1 refactor: reorder version related asset generation 2023-01-30 14:18:08 +01:00
Rainer Killinger
6d058f0750 refactor: adjust to stricter lint rules 2023-01-30 14:18:08 +01:00
openstappsbot
0550f92b5f refactor: update all 2023-01-30 14:18:06 +01:00
Rainer Killinger
2afbdabc54 0.74.0 2023-01-30 13:59:40 +01:00
Rainer Killinger
4e521926d3 refactor: reorder version related asset generation 2023-01-30 13:27:27 +01:00
openstappsbot
3b0014abac refactor: update all 2023-01-30 13:26:34 +01:00
Rainer Killinger
0ebfc57fd6 0.34.0 2023-01-30 12:58:21 +01:00
Rainer Killinger
a13702922b refactor: reorder version related asset generation 2023-01-30 12:11:44 +01:00
Rainer Killinger
0995e7500c refactor: adjust to stricter eslint rules 2023-01-30 11:53:21 +01:00
openstappsbot
c6f4660b3a refactor: update all 2023-01-30 11:51:01 +01:00
Rainer Killinger
d2009e62ca ci: limit artifacts and remove unnecessary ones 2023-01-30 11:23:43 +01:00
11d1ac3f7c fix: login button not easily found 2023-01-26 10:23:42 +00:00
Thea Schöbl
1eee652533 fix: right-align add event detail chip 2023-01-26 10:03:44 +00:00
Rainer Killinger
9c462a6eca refactor: reorder version related asset generation 2023-01-17 17:19:52 +00:00
Rainer Killinger
2428042fa3 0.25.0 2023-01-17 16:11:51 +01:00
Rainer Killinger
61eff4f929 refactor: add changelog generation with versions 2023-01-17 16:11:17 +01:00
Rainer Killinger
116c8809e4 fix: renovate job timeout 2023-01-17 15:39:54 +01:00
Rainer Killinger
a37d3a9ec4 fix: broken cypress build 2023-01-17 15:39:50 +01:00
Rainer Killinger
1105a7e3e1 0.34.0 2023-01-17 13:36:07 +01:00
Rainer Killinger
b1e460314e refactor: changelog generation for tags 2023-01-17 13:34:10 +01:00
Rainer Killinger
96f1bb0429 refactor: enforce changelog generation for tags 2023-01-16 13:56:17 +01:00
Rainer Killinger
49d6db178c docs: update changelog 2023-01-16 13:42:02 +01:00
Rainer Killinger
a16771898c 1.5.1 2023-01-16 13:42:01 +01:00
Rainer Killinger
65de6f581f refactor: add stapps-version header to logs 2023-01-16 13:00:06 +01:00
f986b3da0f build: specify required none/npm version 2023-01-16 10:33:12 +01:00
openstappsbot
d46ddc0e8a refactor: update all 2023-01-16 08:15:46 +00:00
Rainer Killinger
a88d000ccd feat: separate prettier from eslint 2023-01-13 18:14:05 +00:00
Rainer Killinger
317b720045 docs: update changelog 2023-01-13 19:01:25 +01:00
Rainer Killinger
3c6f48e138 1.0.0 2023-01-13 19:01:13 +01:00
Rainer Killinger
3d53615447 ci: get CI ready for publishing the npm package 2023-01-13 18:59:46 +01:00
c36c47267b initial commit
initial commit
2023-01-13 18:58:09 +01:00
Rainer Killinger
939fb6ef0f fix: assessment segments can become unreadable 2023-01-13 12:59:14 +01:00
Jovan Krunić
63bb1967e1 refactor: make feedback protocol data optional
Closes #356
2023-01-13 11:31:43 +00:00
Rainer Killinger
bdaa1f0201 refactor: Feedback metaData has to be optiobal 2023-01-13 11:59:33 +01:00
Rainer Killinger
1703a3dd40 docs: update changelog 2023-01-12 19:12:43 +01:00
Rainer Killinger
877903dd1a 0.73.0 2023-01-12 19:12:41 +01:00
openstappsbot
2873e22038 refactor: update all 2023-01-12 19:02:40 +01:00
Rainer Killinger
08ec4e4381 docs: update changelog 2023-01-12 14:16:03 +01:00
Rainer Killinger
f0a1f665ff 0.4.0 2023-01-12 14:16:02 +01:00
Rainer Killinger
925dc26d7a docs: update changelog 2023-01-12 14:15:10 +01:00
Rainer Killinger
d285faaa45 0.33.0 2023-01-12 14:15:08 +01:00
openstappsbot
74282995fd refactor: update all 2023-01-12 14:09:32 +01:00
openstappsbot
b1a552f68b refactor: update all 2023-01-12 13:16:28 +01:00
Rainer Killinger
7f0c54a826 ci: allow develop branch to deploy to web staging 2023-01-11 15:18:30 +01:00
Rainer Killinger
cd19cf5b92 refactor: remove unused about module component 2023-01-11 13:52:31 +01:00
Rainer Killinger
a07db5a3a6 ci: switch to new main branch 2023-01-11 12:31:25 +01:00
Rainer Killinger
01f3827c4c docs: update changelog 2023-01-11 12:21:27 +01:00
openstappsbot
7aafd9cc85 refactor: update all 2023-01-09 14:27:49 +00:00
openstappsbot
360a2e434d refactor: update all 2023-01-09 09:01:02 +00:00
Jovan Krunić
cf74c8e19f fix: feedback not allowing valid emails
Closes #349
2022-12-15 11:58:21 +01:00
Rainer Killinger
d1b78491c3 fix: invalid assetlinks.json key fingerprint 2022-12-07 20:18:32 +01:00
Rainer Killinger
f55f3ae518 refactor: unset color icon filter in dish detail 2022-12-07 18:00:19 +01:00
Rainer Killinger
95e1734d26 fix: opening hours pipe refreshing too often 2022-12-07 17:33:33 +01:00
Rainer Killinger
31bfd4a8a4 ci: move review jobs to docker runner 2022-12-07 13:32:18 +00:00
Rainer Killinger
af57804c56 refactor: update dependencies 2022-12-07 13:32:18 +00:00
Jovan Krunić
99e8d6c9bc fix: overhaul auth to avoid issues
Closes #336
2022-12-07 12:25:49 +00:00
Rainer Killinger
6720265410 refactor: adjust translation 2022-12-07 11:45:38 +00:00
Jovan Krunić
dcdda16bcf refactor: overhaul UI for uni branding
Closes #345
2022-12-07 11:45:38 +00:00
Jovan Krunić
92adb9dd2d fix: add location info to dates from timetable
Close #344
2022-12-07 10:28:47 +00:00
Rainer Killinger
400c6b8d8c feat: seperate dishes by menu sections 2022-12-07 10:31:24 +01:00
Rainer Killinger
33e6a76dbd test: increase cypress default command timeout 2022-12-06 17:05:26 +01:00
Jovan Krunić
450b52517e docs: update changelog 2022-12-06 16:44:03 +01:00
Jovan Krunić
9188728376 0.5.0 2022-12-06 16:44:02 +01:00
Jovan Krunić
63053e9cf8 docs: update changelog 2022-12-06 16:33:19 +01:00
Jovan Krunić
871a5f8fa1 0.45.0 2022-12-06 16:33:18 +01:00
openstappsbot
94e2a0d34c refactor: update all 2022-12-06 14:24:58 +00:00
openstappsbot
d0608ccd31 refactor: update all 2022-12-06 14:16:41 +00:00
Jovan Krunić
7fdf6f7c25 docs: update changelog 2022-12-06 14:44:04 +01:00
Jovan Krunić
17dc720df6 0.72.0 2022-12-06 14:44:02 +01:00
Jovan Krunić
be98fd8c4c feat: add dish menu section and service times
Closes #150
2022-12-06 13:35:49 +01:00
openstappsbot
1007c280df refactor: update all 2022-12-05 14:52:26 +00:00
Jovan Krunić
c8318305f9 docs: update changelog 2022-11-29 18:39:22 +01:00
Jovan Krunić
4133ff36b7 1.5.0 2022-11-29 18:39:21 +01:00
Jovan Krunić
25e506f54d fix: SVGs treated as plain texts
Closes #14
2022-11-29 16:56:42 +01:00
Rainer Killinger
181e0528b5 refactor: inline display of dish icons 2022-11-23 17:34:48 +01:00
Rainer Killinger
48d784a147 refactor: keep opening hours content up to date 2022-11-22 18:18:59 +01:00
Rainer Killinger
f51397a17a refactor: update dish addditives property name 2022-11-22 18:17:19 +01:00
Rainer Killinger
c0a2dd9a14 refactor: comment out nutrition facts 2022-11-22 14:44:38 +01:00
Rainer Killinger
8c032209a0 docs: update changelog 2022-11-22 12:48:15 +01:00
Rainer Killinger
82aaefe843 0.71.1 2022-11-22 12:48:12 +01:00
Rainer Killinger
0ad7e48462 refactor: adjust dish additives translations 2022-11-22 12:45:42 +01:00
Jovan Krunić
9854541a0c fix: generate library online links properly
Closes #340
2022-11-21 13:55:34 +00:00
Jovan Krunić
cbb949e397 fix: library fines should load item title only if needed
Closes #342
2022-11-21 11:52:33 +00:00
Rainer Killinger
eb62d4606c docs: update changelog 2022-11-21 10:55:15 +01:00
Rainer Killinger
8e92ec3cb2 0.10.0 2022-11-21 10:55:14 +01:00
Rainer Killinger
3695f9fbb0 refactor: remove outdated unused tslint artifacts 2022-11-21 10:53:34 +01:00
Rainer Killinger
69fd8ff701 refactor: adjust code to match eslint rules 2022-11-21 10:53:34 +01:00
Rainer Killinger
30492c03ca refactor: move to current project setup standards 2022-11-21 10:53:32 +01:00
Rainer Killinger
b693960ac2 ci: disallow cypress image build to silently fail 2022-11-21 10:32:37 +01:00
openstappsbot
cafadb92b1 refactor: update all 2022-11-21 08:15:14 +00:00
Jovan Krunić
f60a228392 fix: remove "extend landing" button when renewal not possible
Closes #338
2022-11-15 15:50:56 +01:00
Rainer Killinger
3ede650cc5 refactor: display of opening hours 2022-11-11 15:00:46 +00:00
Jovan Krunić
e504d8cf6d fix: library account missing ready for pickup
Closes #330
2022-11-11 15:00:34 +00:00
Jovan Krunić
42b860e417 feat: add library action confirmations
Closes #334
2022-11-11 14:08:53 +00:00
Rainer Killinger
cbbcc2e5e4 docs: update changelog 2022-11-09 18:23:21 +01:00
Rainer Killinger
3f030fd50f 1.4.1 2022-11-09 18:23:20 +01:00
Rainer Killinger
5f77877bb4 fix: include uri path in json log verbatim 2022-11-09 18:22:35 +01:00
Rainer Killinger
6aea21e81f docs: update changelog 2022-11-09 16:55:44 +01:00
Rainer Killinger
2982c8598e 1.4.0 2022-11-09 16:55:43 +01:00
Rainer Killinger
0486d733a1 refactor: update dependencies 2022-11-09 16:46:31 +01:00
Rainer Killinger
8c49c31760 feat: add support for log aggregators 2022-11-09 16:28:21 +01:00
6b08af6a74 feat: navigation rail 2022-11-08 16:21:40 +00:00
Rainer Killinger
bd696f400f docs: update changelog 2022-11-08 15:06:52 +01:00
Rainer Killinger
aac8e584a9 1.1.1 2022-11-08 15:06:51 +01:00
Rainer Killinger
8d6ea040c1 fix: removing transformations in production 2022-11-08 15:04:53 +01:00
Rainer Killinger
b1a9043047 refactor: change modal presenation mode on iOS 2022-11-07 08:52:45 +00:00
Jovan Krunić
bafabb1d4e fix: adjust library account user info
Closes #331
2022-11-04 12:34:54 +00:00
Jovan Krunić
0caa69c28c fix: extend landing period button not working on android
Closes #333
2022-11-04 10:50:39 +00:00
Thea Schöbl
f7726378f4 fix: prevent multiple heavy setting inits 2022-11-04 10:49:12 +00:00
Rainer Killinger
3e6e1f7bc0 docs: update changelog 2022-11-02 13:55:57 +01:00
Rainer Killinger
5f91229e82 0.4.1 2022-11-02 13:55:56 +01:00
Rainer Killinger
0d3055f936 refactor: update dependencies 2022-11-02 13:48:15 +01:00
Jovan Krunić
15ccbe4c18 fix: refresh token not used by default auth provider
Closes #311
2022-11-01 18:41:15 +00:00
Rainer Killinger
5fdef95c06 feat: show availability in offers 2022-11-01 18:33:40 +00:00
Rainer Killinger
e0f4ce134d docs: update changelog 2022-11-01 19:32:43 +01:00
Rainer Killinger
276e6d3b40 1.1.0 2022-11-01 19:32:42 +01:00
Rainer Killinger
ae0612c6d5 refactor: update dependencies 2022-11-01 19:19:10 +01:00
Rainer Killinger
8aef5b8d5b fix: compatibility with log aggregators 2022-11-01 19:15:32 +01:00
Jovan Krunić
fdee2db8a4 fix: prevent opening invalid links
Closes #328
2022-11-01 17:29:51 +00:00
Rainer Killinger
82ba5f8121 fix: calculating SCDateSeries for next unit view 2022-11-01 16:56:14 +00:00
Rainer Killinger
9c6b5131cd fix: recurring schedule offset and event limit 2022-11-01 16:56:14 +00:00
Rainer Killinger
a037090eec fix: overview search bar scrolling behind header 2022-11-01 16:12:34 +00:00
Jovan Krunić
bc13cc5e1f fix: encode URI parameter to proxy URI
Closes #326
2022-11-01 15:26:25 +00:00
Jovan Krunić
aba9627661 refactor: adjust HeBIS templates in list
Closes #318
2022-11-01 14:55:56 +00:00
Jovan Krunić
18ab92909d refactor: temporarily remove cancel loan button
Closes #325
2022-11-01 13:59:48 +00:00
Thea Schöbl
44b6a4aea0 fix: news module not scrollable on large screens 2022-11-01 13:51:46 +00:00
Thea Schöbl
f349bd7233 feat: search url query param handling 2022-11-01 12:58:29 +00:00
38f0a30076 fix: header logo changing size on ios navigate 2022-10-26 14:37:48 +02:00
Thea Schöbl
8b2f2c063c fix: profile module items show click effect on scroll 2022-10-25 10:18:22 +00:00
Thea Schöbl
bc4c3d78db feat: scroll schedule cursor into view 2022-10-24 17:21:12 +00:00
Rainer Killinger
42e2f3a0cb test: fix outdated dish offer translation 2022-10-24 11:27:36 +02:00
Rainer Killinger
d647719201 refactor: remove unused FileOpener2 dependency 2022-10-24 10:40:39 +02:00
openstappsbot
107d94d499 refactor: update all 2022-10-24 07:16:13 +00:00
Rainer Killinger
1a340ff700 docs: update changelog 2022-10-21 18:29:22 +02:00
Rainer Killinger
f6f93df2fa 0.4.0 2022-10-21 18:29:21 +02:00
Rainer Killinger
1791b0df51 refactor: config text and semester date bounds 2022-10-21 18:20:49 +02:00
Rainer Killinger
d59b55c152 refactor: replace StApps with Open StApps 2022-10-21 18:19:20 +02:00
c8f6a27c57 fix: dashboard next unit structural directive causing animation issues 2022-10-21 16:02:48 +00:00
Rainer Killinger
acdd93eb99 refactor: pre release cleanup all over the place 2022-10-21 16:01:44 +00:00
Rainer Killinger
c3130a392a feat: get tab navigation items from config 2022-10-20 11:19:06 +00:00
Thea Schöbl
c3d66b36c8 fix: convert schema glob path to posix path 2022-10-20 09:52:55 +00:00
Rainer Killinger
e6df1a2185 refactor: update dependencies 2022-10-18 15:27:36 +02:00
Rainer Killinger
67f4a3f2c4 refactor: minor adjustments to config 2022-10-18 15:27:21 +02:00
Rainer Killinger
edaff443e8 docs: update changelog 2022-10-18 14:17:35 +02:00
Rainer Killinger
33c134e4de 0.44.0 2022-10-18 14:17:33 +02:00
Rainer Killinger
baafbcb598 ci: move to private runner 2022-10-18 14:12:02 +02:00
openstappsbot
34c30d1b14 refactor: update typescript-eslint monorepo to v5.40.1 2022-10-18 11:53:53 +00:00
openstappsbot
a19893e56d refactor: update all 2022-10-18 07:09:48 +00:00
Jovan Krunić
5e1a902d4c fix: translations 2022-10-17 15:17:19 +02:00
Jovan Krunić
998edcb5cd fix: user info card
Closes #305
2022-10-17 15:08:21 +02:00
Rainer Killinger
8dae143d72 ci: move integration test back to shared runner 2022-10-13 13:47:54 +02:00
Rainer Killinger
e280e995bf ci: move all jobs to private runners 2022-10-13 13:04:23 +02:00
Rainer Killinger
3980496c77 ci: skip image test on main and develop branches 2022-10-13 12:53:17 +02:00
Rainer Killinger
e0717a96ef feat: update to elasticsearch 8.4 2022-10-13 10:50:55 +00:00
openstappsbot
b88c2f6428 refactor: update typescript-eslint monorepo to v5.40.0 2022-10-12 13:10:56 +00:00
Rainer Killinger
937ee4ddce refactor: app config menu structure 2022-10-12 12:31:02 +02:00
Rainer Killinger
7eb727ea27 docs: update changelog 2022-10-12 12:16:22 +02:00
Rainer Killinger
134c2e4c84 1.0.1 2022-10-12 12:16:21 +02:00
Thea Schöbl
e395e9d270 feat: profile page sections
Close #233, #261, #267
2022-10-11 16:01:38 +00:00
openstappsbot
60bc460841 refactor: update typescript-eslint monorepo to v5.40.0 2022-10-11 15:43:41 +00:00
Rainer Killinger
48218e89da docs: update changelog 2022-10-11 16:57:52 +02:00
Rainer Killinger
02d7208d73 0.71.0 2022-10-11 16:57:50 +02:00
Rainer Killinger
6b9b1fa854 fix: temporary disable flaky ui test 2022-10-11 16:50:33 +02:00
Rainer Killinger
75155a9a86 refactor: remodel app config menu categories 2022-10-11 11:41:21 +00:00
Jovan Krunić
dd138fd0be feat: add new book categories
Closes #147
2022-10-11 12:32:01 +02:00
openstappsbot
c8be14f9d8 refactor: update all 2022-10-11 07:22:17 +00:00
Rainer Killinger
3e831c1648 refactor: reference openstapps framework vesion 2022-10-10 14:52:32 +02:00
Rainer Killinger
5a2d9f3075 ci: use custom cypress image 2022-10-10 14:52:14 +02:00
Thea Schöbl
28fbfef18c fix: download events should respect selection
fix: show indeterminate state for tree node when child is indeterminate
2022-10-10 12:44:56 +00:00
Rainer Killinger
4056f09448 ci: fix incompatible node version in builder image 2022-10-10 14:33:19 +02:00
Rainer Killinger
c86880da39 ci: focus scheduled npm audit on prod dependencies 2022-10-10 14:13:56 +02:00
Rainer Killinger
8d82119d95 ci: add custom cypress image with latest browsers 2022-10-10 14:08:56 +02:00
Rainer Killinger
6f2fdf9219 docs: update changelog 2022-10-10 10:14:02 +02:00
Rainer Killinger
d7abfec9fd 0.24.0 2022-10-10 10:14:00 +02:00
openstappsbot
0d28f6ae55 refactor: update all 2022-10-10 07:12:33 +00:00
openstappsbot
57a0c02805 refactor: update all 2022-10-10 07:09:20 +00:00
Jovan Krunić
ec511fb8f4 fix: remove item before adding it to secure storage 2022-10-08 09:18:44 +00:00
Rainer Killinger
fed4f20c3c fix: failing native http requests with body 2022-10-07 16:40:15 +02:00
Rainer Killinger
5ddff5fe12 refactor: move to eslint 2022-10-07 08:24:47 +00:00
Rainer Killinger
c712fa17f7 refactor: search related app ui translations 2022-10-02 20:48:38 +02:00
Rainer Killinger
a0c1045c58 refactor: update capacitor related dependencies 2022-09-30 15:48:36 +02:00
Rainer Killinger
7799b5187a fix: malformed supported orientations on iOS 2022-09-30 15:09:07 +02:00
Rainer Killinger
2da9e8ad1e fix: include styles.xml for android builds 2022-09-30 14:54:13 +02:00
Rainer Killinger
feee9e8db9 fix: status bar being black on Android 13 devices 2022-09-30 13:00:52 +02:00
Rainer Killinger
3316ad9169 fix: background fetch crashing android app 2022-09-30 08:25:00 +00:00
Rainer Killinger
1af9140cea refactor: set supported orientations for iOS build 2022-09-28 12:19:26 +02:00
Rainer Killinger
2ddffe6d4f ci: allow redundant pipelines to be skipped 2022-09-28 11:53:14 +02:00
Thea Schöbl
9f8ab5c7a1 feat: dashboard ui tests 2022-09-27 22:13:54 +00:00
Rainer Killinger
eb108c7414 ci: remove review stage on merge trains 2022-09-27 18:36:51 +02:00
b8db0f3e70 fix: translate back button title 2022-09-27 13:44:47 +00:00
Thea Schöbl
92eb0ee3b0 refactor: news module styling 2022-09-27 13:44:06 +00:00
Rainer Killinger
7ecba0b781 feat: tab navigation bar animations and state 2022-09-23 16:34:07 +02:00
Rainer Killinger
b2cc1fd91f fix: make keyboard dismissable on mobile devices 2022-09-23 16:19:53 +02:00
Thea Schöbl
4a3f79ca20 refactor: move event select popup to a modal 2022-09-23 16:19:53 +02:00
Rainer Killinger
8a04a43903 fix: cards not having rounded corners in safari 2022-09-23 16:19:53 +02:00
Jovan Krunić
f39c29f10b fix: modals not reacting after several uses 2022-09-23 16:19:08 +02:00
Thea Schöbl
848d2574c7 feat: dynamic news page rows 2022-09-21 15:30:13 +00:00
Thea Schöbl
1211369724 Initial commit 2022-09-21 14:47:14 +00:00
Jovan Krunić
13cee2d426 fix: daia availability 2022-09-20 13:58:32 +00:00
Rainer Killinger
b38a96996a fix: set android status bar color correctly 2022-09-16 14:12:09 +02:00
Rainer Killinger
7bfc3fc026 fix: setting version code via fastlane plugin 2022-09-12 14:49:54 +02:00
Rainer Killinger
855531fefb refactor: polish map module ui/ux 2022-09-08 14:44:20 +00:00
Thea Schöbl
37dd29a60f Resolve "Dashboard navigation icons are saved in user preferences" 2022-09-08 14:07:05 +00:00
Jovan Krunić
d571b1dbe5 feat: display availability and item data for library items 2022-09-08 13:02:19 +00:00
Daniel Blumrich
605aa1b782 feat:Change styles on dashboard, add animations 2022-09-08 11:58:57 +00:00
Thea Schöbl
0d755bcbd3 fix: correct data path color
fix: missing ionic component icons
feat: parallax detail background
2022-09-08 07:23:58 +00:00
Rainer Killinger
d22a67f842 Resolve "Update Capacitor dependencies to v4" 2022-09-06 14:51:23 +00:00
Thea Schöbl
0b037f96e6 feat: assessment tree view 2022-09-05 13:16:00 +00:00
Rainer Killinger
1ba66aa4fb docs: update changelog 2022-09-02 16:11:18 +02:00
Rainer Killinger
b71a30db1f 0.3.1 2022-09-02 16:11:17 +02:00
Rainer Killinger
43c469d66a refactor: update @openstapps/core 2022-09-02 15:56:04 +02:00
Rainer Killinger
608429c139 docs: update changelog 2022-09-02 14:24:32 +02:00
Rainer Killinger
27ed3c11f1 0.70.0 2022-09-02 14:24:30 +02:00
Rainer Killinger
b183198029 feat: add auth provider to config menu items 2022-09-02 14:18:24 +02:00
Rainer Killinger
9ad402842d feat: automate generation for universal link files 2022-08-26 15:30:50 +02:00
9bc3642990 fix: correct html whitespace handling for icon detection 2022-08-26 14:07:58 +02:00
Thea Schöbl
de10654675 test: rework ui tests for new layout 2022-08-25 14:40:33 +00:00
Rainer Killinger
608f58ccbf docs: update changelog 2022-08-24 12:31:02 +02:00
Rainer Killinger
dde4a0d1cd 0.3.0 2022-08-24 12:30:57 +02:00
Rainer Killinger
f2d9c945e5 docs: update changelog 2022-08-23 12:00:03 +02:00
Rainer Killinger
769c6f1f7e 0.43.0 2022-08-23 11:59:59 +02:00
Rainer Killinger
8c9fdb4f24 refactor: gitlab ci template audit job 2022-08-23 11:34:21 +02:00
Rainer Killinger
ba07267372 ci: enforce npm audit for production dependencies 2022-08-23 10:56:36 +02:00
Rainer Killinger
001cd4b4de refactor: update some dependencies 2022-08-23 10:56:35 +02:00
Rainer Killinger
c2b0d22a25 refactor: move to express-prom-bundle for monitoring 2022-08-23 10:56:32 +02:00
Jovan Krunić
9e1017edfb refactor: use material symbols for menu 2022-08-22 15:25:00 +00:00
Rainer Killinger
557d050b36 docs: update changelog 2022-08-22 17:16:31 +02:00
Rainer Killinger
6c64086fef 0.2.0 2022-08-22 17:16:13 +02:00
Rainer Killinger
8ec8fb3386 docs: update changelog 2022-08-22 17:04:50 +02:00
Rainer Killinger
f432d57004 1.3.0 2022-08-22 17:04:48 +02:00
Rainer Killinger
26a4e6dcf1 refactor: omit logging 200 OK on metrics route 2022-08-22 17:04:02 +02:00
0bce9e5452 fix: address late init from ionic components 2022-08-22 10:40:46 +00:00
Rainer Killinger
2130d84920 ci: fix and enhance coverage report 2022-08-22 12:34:55 +02:00
Rainer Killinger
c7b30cf749 ci: fix stop_review job 2022-08-22 11:57:54 +02:00
Rainer Killinger
399e1a6f7e refactor: update depedencies 2022-08-22 11:30:59 +02:00
Thea Schöbl
68734bfe21 refactor: migrate to material symbols icon set 2022-08-19 11:48:34 +00:00
Rainer Killinger
f3cf3b30e3 refactor: layout detail adjustments
refactor: increase contrast of toolbar fav button
refactor: remove non working localization for news
refactor: equalize tab bar in top toolbar
refactor: padding on map buttons and rename them
refactor: repair profile card alignments for safari
refactor: fix dashboard resize behavior on safari
refactor: make title card button reachable again
refactor: put card hover in media query
refactor: realign schedule view toolbar
refactor: adjust toolbar heights
refactor: introduce proper header logo
2022-08-18 17:19:58 +00:00
Jovan Krunić
ebdc14d3c3 fix: logged out button not showing on profile
Closes #239
2022-08-18 12:28:41 +00:00
Rainer Killinger
5e8745e742 ci: add cobertura coverage report 2022-08-17 17:06:21 +02:00
openstappsbot
6e07041215 refactor: update all 2022-08-17 17:06:19 +02:00
Rainer Killinger
54dc63d848 ci: add cobertura coverage report 2022-08-17 16:54:23 +02:00
openstappsbot
949063eff8 refactor: update all 2022-08-17 16:49:24 +02:00
Rainer Killinger
f2cb318a09 ci: add cobertura coverage report 2022-08-17 16:35:14 +02:00
openstappsbot
c4016fd29a refactor: update all 2022-08-17 16:30:06 +02:00
Rainer Killinger
6e50b89b1a docs: update changelog 2022-08-17 16:16:49 +02:00
Rainer Killinger
62ab6384d3 0.69.0 2022-08-17 16:16:47 +02:00
Rainer Killinger
f864c64efa refactor: move to eslint 2022-08-17 16:09:45 +02:00
Rainer Killinger
c1dc7b4e8f ci: add cobertura coverage report 2022-08-17 14:04:50 +02:00
Rainer Killinger
a096d5be62 docs: update contributors list 2022-08-17 14:04:12 +02:00
openstappsbot
ed6358a0c8 refactor: update all 2022-08-17 14:00:49 +02:00
Rainer Killinger
784c3ee2d9 docs: update changelog 2022-08-17 13:36:06 +02:00
Rainer Killinger
123c330d50 0.3.0 2022-08-17 13:36:05 +02:00
Rainer Killinger
37483abb9f Merge branch 'renovate/all' into 'master'
refactor: update all

See merge request openstapps/es-mapping-generator!7
2022-08-17 11:29:41 +00:00
openstappsbot
746d98fed5 refactor: update all 2022-08-17 13:26:18 +02:00
Rainer Killinger
4be5cb2b6a docs: update changelog 2022-08-17 13:01:35 +02:00
Rainer Killinger
678323cc09 0.32.0 2022-08-17 13:01:34 +02:00
openstappsbot
910bbf923b refactor: update all 2022-08-17 12:54:09 +02:00
Rainer Killinger
b97c0adc21 docs: update changelog 2022-08-17 11:47:35 +02:00
Rainer Killinger
dd95fa0d1e 0.33.0 2022-08-17 11:47:34 +02:00
Rainer Killinger
35b4b6c823 feat: add proper coverage to ci templates 2022-08-17 11:45:04 +02:00
openstappsbot
308a6cf1ea refactor: update all 2022-08-17 11:43:05 +02:00
Rainer Killinger
e14b1248d5 ci: add cobertura coverage report 2022-08-17 11:32:18 +02:00
Rainer Killinger
734c6ec262 docs: update changelog 2022-08-17 10:17:40 +02:00
Rainer Killinger
6c51f777dd 1.0.0 2022-08-17 10:17:39 +02:00
Rainer Killinger
82a3651fb3 test: move to @testdeck/mocha 2022-08-17 10:13:26 +02:00
Rainer Killinger
e6e75db3e8 refactor: update to typescript 4.4.4 2022-08-17 10:01:47 +02:00
openstappsbot
eeda6ef26c refactor: update all 2022-08-16 07:14:31 +00:00
Rainer Killinger
7b1f0493da Resolve "Very unusual back button behavior" 2022-08-11 16:25:48 +00:00
Rainer Killinger
a20200e52a fix: update PAIA API URL 2022-08-09 13:07:41 +02:00
Thea Schöbl
82479f463c feat: include font licenses in the licenses section 2022-08-08 16:28:54 +02:00
Rainer Killinger
a4de628495 refactor: revert university specific changes 2022-08-08 16:28:52 +02:00
Rainer Killinger
e9bedb78c6 refactor: add profile card dummy icon 2022-08-08 15:10:20 +02:00
Rainer Killinger
68877fe850 refactor: update .gitignore 2022-08-08 15:07:49 +02:00
Andy Bastian
7bbdba5c0b feat: apply new layout overhaul 2022-08-08 11:01:00 +00:00
Rainer Killinger
c9cfe7e3ed docs: update changelog 2022-07-05 14:20:31 +02:00
Rainer Killinger
75138c7061 0.32.2 2022-07-05 14:20:29 +02:00
Rainer Killinger
0753ab9f33 fix: recommended CI settings 2022-07-05 14:20:07 +02:00
Jovan Krunić
f16e5394cc fix: missing init (config setup) in default auth service
Closes #227
2022-07-05 13:54:35 +02:00
Rainer Killinger
cef38e0f83 docs: update changelog 2022-07-05 13:05:04 +02:00
Rainer Killinger
383778e1e7 0.32.1 2022-07-05 13:05:03 +02:00
Rainer Killinger
40cb266d09 refactor: update package.json recommendations 2022-07-05 13:04:07 +02:00
Rainer Killinger
e2e0e8aa70 refactor: update ci recommendations 2022-07-05 13:03:31 +02:00
Rainer Killinger
df92e97cb6 fix: simplify dependency version checking 2022-07-05 13:01:29 +02:00
Rainer Killinger
612648e5d7 docs: update changelog 2022-07-05 10:16:46 +02:00
Rainer Killinger
97f48fcbb6 0.23.1 2022-07-05 10:16:45 +02:00
Rainer Killinger
ac226d178a fix: documentation not generating 2022-07-05 10:16:19 +02:00
Rainer Killinger
0080b3782c docs: update changelog 2022-07-05 09:58:26 +02:00
Rainer Killinger
c717bd3fe0 0.23.0 2022-07-05 09:58:25 +02:00
Rainer Killinger
8f7b2236de docs: update contributors 2022-07-05 09:57:56 +02:00
Rainer Killinger
a2ba60abe7 refactor: update renovate rules 2022-07-05 09:54:55 +02:00
Rainer Killinger
75846c54b7 refactor: update dependencies 2022-07-05 09:54:54 +02:00
Rainer Killinger
b66cecbdd9 docs: update contributors list 2022-07-04 16:30:12 +02:00
Rainer Killinger
0b112f1d01 docs: corrected copyright years 2022-07-04 15:46:50 +02:00
Rainer Killinger
bb45c36d86 refactor: move to eslint 2022-07-04 15:46:07 +02:00
Rainer Killinger
3e2c7a1927 docs: update changelog 2022-07-04 14:15:21 +02:00
Rainer Killinger
61be2a34c9 0.42.0 2022-07-04 14:15:19 +02:00
Rainer Killinger
2e4a47ee8f refactor: update dependencies 2022-07-04 14:14:43 +02:00
Rainer Killinger
903bfe1967 docs: update changelog 2022-06-30 16:02:54 +02:00
Rainer Killinger
a004fb8188 0.1.0 2022-06-30 16:02:40 +02:00
Rainer Killinger
e9ec49a772 ci: refine job and stage managment 2022-06-30 14:45:44 +02:00
Rainer Killinger
389df797ad ci: clean up unused templates 2022-06-30 14:03:06 +02:00
Rainer Killinger
f8453561d8 refactor: relocate non default config items 2022-06-30 14:03:06 +02:00
Thea Schöbl
418ba67d15 Resolve "Transition to ESLint" 2022-06-27 14:40:09 +00:00
Rainer Killinger
7f22cbb54c docs: update changelog 2022-06-27 16:04:10 +02:00
Rainer Killinger
8b9bb45868 0.68.0 2022-06-27 16:04:08 +02:00
openstappsbot
77f1f0a5b8 refactor: update all 2022-06-27 15:56:36 +02:00
Rainer Killinger
4bb007ede3 refactor: omit typedoc versions higher than 0.22.0 2022-06-27 15:53:51 +02:00
Rainer Killinger
51ae246a0f fix: documentation not beeing generated 2022-06-27 15:08:15 +02:00
Rainer Killinger
4afbb9722e docs: update changelog 2022-06-27 14:44:44 +02:00
Rainer Killinger
1b0c5d6981 0.31.0 2022-06-27 14:44:42 +02:00
Rainer Killinger
be889ae17d refactor: clean up package-lock.json 2022-06-27 14:43:55 +02:00
openstappsbot
cace737b92 refactor: update typescript-eslint monorepo to v5.29.0 2022-06-27 12:37:16 +00:00
Rainer Killinger
4052278d94 docs: update changelog 2022-06-27 14:21:32 +02:00
Rainer Killinger
0f73c9cb01 0.2.0 2022-06-27 14:21:31 +02:00
Rainer Killinger
8156885293 Merge branch 'renovate/all' into 'master'
refactor: update all

See merge request openstapps/es-mapping-generator!3
2022-06-27 12:20:38 +00:00
Rainer Killinger
7534744294 fix: marked version with audit issue 2022-06-27 14:16:40 +02:00
Rainer Killinger
aeac607bf5 refactor: update dependencies 2022-06-27 14:09:08 +02:00
Rainer Killinger
0d3c2151d7 docs: update changelog 2022-06-27 13:52:56 +02:00
Rainer Killinger
448b5631ad 0.32.0 2022-06-27 13:52:54 +02:00
Rainer Killinger
0d0ba10922 refactor: update dependencies 2022-06-27 13:52:29 +02:00
Rainer Killinger
1547eab6a1 docs: update changelog 2022-06-27 13:34:54 +02:00
Rainer Killinger
57860b8933 1.1.0 2022-06-27 13:34:53 +02:00
Rainer Killinger
43064b2d2c docs: update REAME.md 2022-06-27 13:34:26 +02:00
Rainer Killinger
d724db01ee refactor: update depdencies 2022-06-27 13:34:08 +02:00
openstappsbot
e2a22653ca refactor: update all 2022-06-27 07:14:42 +00:00
openstappsbot
5d79ea75dd refactor: update all 2022-06-27 07:10:04 +00:00
Rainer Killinger
786abdbefa refactor: make keyboard dismissable on search bars 2022-06-24 08:14:06 +00:00
Rainer Killinger
9d31365d0a ci: tempoarily disable ui tests 2022-06-23 11:43:59 +02:00
Rainer Killinger
8ee364b2f7 ci: slim down scheduled pipelines 2022-06-23 09:52:25 +02:00
Rainer Killinger
ae429ca5fb fix: CI stage/job setup 2022-06-23 09:17:11 +02:00
Andy Bastian
8ecf347c9a feat: Implement variable for styling 2022-06-17 08:13:04 +02:00
Rainer Killinger
c1f90b0a68 ci: use ui test manual stage for cypress 2022-06-13 16:57:57 +02:00
8710ba43ff test: increase ui test coverage 2022-06-13 16:57:27 +02:00
Jovan Krunić
ca1d2444e0 feat: add hebis proxy url
Close #120
2022-06-13 09:45:05 +02:00
Jovan Krunić
9e71efca9f fix: handle prices as an optional property
Closes #219
2022-06-09 10:31:27 +00:00
Andy Bastian
915fd72bd4 feat: add new font and new icons 2022-06-09 08:22:30 +00:00
Rainer Killinger
04afdb7543 refactor: prevent accidental scolls on map widget 2022-06-09 07:04:22 +00:00
Rainer Killinger
401e96e86e refactor: update package-lock.json 2022-06-09 07:04:22 +00:00
Rainer Killinger
9832b0395a docs: update changelog 2022-06-08 18:20:49 +02:00
Rainer Killinger
1515e7778f 1.2.0 2022-06-08 18:20:48 +02:00
Rainer Killinger
139e405bd3 refactor: update dependencies 2022-06-08 17:47:10 +02:00
Rainer Killinger
5522ac55ac feat: added prometheus metrics support 2022-06-08 17:44:57 +02:00
Jovan Krunić
83d9a4a8b8 fix: adjust hebis catalog templates 2022-06-08 10:46:23 +00:00
Rainer Killinger
17a796e97b feat: copyright notice year replacement 2022-06-07 12:50:40 +02:00
Rainer Killinger
62c60448aa docs: update changelog 2022-06-02 15:05:24 +02:00
Rainer Killinger
a4277d392d 0.31.0 2022-06-02 15:05:23 +02:00
Rainer Killinger
32480b7bfa refactor: update dependencies 2022-06-02 15:00:09 +02:00
Rainer Killinger
405f8cf496 fix: npmignore eslint exceptions 2022-06-02 14:54:02 +02:00
899e3c6ac0 docs: update changelog 2022-06-01 19:44:50 +02:00
134acd61db 0.30.0 2022-06-01 19:44:46 +02:00
a2c334526c refactor: windows compat 2022-06-01 19:44:10 +02:00
Thea Schöbl
3f81afda82 feat: expandable accordion in grades module 2022-06-01 15:26:23 +00:00
Thea Schöbl
9430e10387 feat: transition from TSLint to ESLint 2022-06-01 12:00:53 +00:00
openstappsbot
0698ca616c refactor: update all 2022-06-01 07:54:14 +00:00
Rainer Killinger
2361c100bb ci: apply renovate config changes 2022-06-01 09:49:08 +02:00
Rainer Killinger
51bb8e3b9c refactor: update dependencies 2022-05-31 16:52:09 +02:00
Rainer Killinger
1015fd24ac docs: update changelog 2022-05-31 16:13:54 +02:00
Rainer Killinger
618a9046bc 0.67.0 2022-05-31 16:13:51 +02:00
Rainer Killinger
c43e2b38e6 refactor: remove SCMetaTranslations singletons 2022-05-31 16:10:41 +02:00
Rainer Killinger
9d0ff36af5 refactor: untangle SCCreativeWork inheritance 2022-05-30 17:00:14 +02:00
Rainer Killinger
0fe315dcd7 ci: reenable production builds for review branches 2022-05-27 18:00:34 +02:00
Rainer Killinger
b97006e71e refactor: update dependencies 2022-05-27 17:27:41 +02:00
Rainer Killinger
869eafb629 docs: update changelog 2022-05-27 17:13:57 +02:00
Rainer Killinger
0dc3792fb9 0.41.1 2022-05-27 17:13:55 +02:00
Rainer Killinger
223b5ee5c0 refactor: update dependencies 2022-05-27 17:13:23 +02:00
Rainer Killinger
31bb7e89ea docs: update changelog 2022-05-27 16:54:09 +02:00
Rainer Killinger
b0666060ab docs: update changelog 2022-05-27 16:42:55 +02:00
Rainer Killinger
448055fd23 0.30.1 2022-05-27 16:42:53 +02:00
Rainer Killinger
65f25afd89 refactor: update dependencies 2022-05-27 16:41:54 +02:00
Rainer Killinger
28e03d7e18 docs: update changelog 2022-05-27 16:36:13 +02:00
Rainer Killinger
8035d6ef5a 0.1.0 2022-05-27 16:36:12 +02:00
Rainer Killinger
9ed2a4da0c refactor: update dependencies 2022-05-27 16:35:44 +02:00
Rainer Killinger
73501e0fa3 docs: update changelog 2022-05-27 16:30:11 +02:00
Rainer Killinger
8d654f22cb 0.29.1 2022-05-27 16:30:10 +02:00
Rainer Killinger
9560e0c526 refactor: update dependencies 2022-05-27 16:29:37 +02:00
Rainer Killinger
73e331cd94 docs: update changelog 2022-05-27 16:07:21 +02:00
Rainer Killinger
3ae31f0b2d 0.8.1 2022-05-27 16:07:20 +02:00
Rainer Killinger
15286dd717 refactor: update dependencies 2022-05-27 16:06:38 +02:00
Rainer Killinger
ae5299c128 ci: update cypress images and remove executable 2022-05-23 11:28:30 +02:00
Rainer Killinger
bc1ae1f02f ci: move to private gitlab runners 2022-05-23 11:28:00 +02:00
Frank Nagel
2212e0723e refactor: raise Typescript version to 4.4.4 2022-05-20 13:08:55 +00:00
Rainer Killinger
9db2489ab2 fix: relative keystore file location for gradle 2022-05-20 13:30:36 +02:00
Rainer Killinger
7111f44fb0 refactor: make local copy of keystore for gradle 2022-05-20 11:44:15 +02:00
Jovan Krunić
5edec7154e refactor: improve library account views 2022-05-19 15:41:07 +00:00
Jovan Krunić
9efc41a8f8 refactor: use geo for sort after backend change
Closes #210
2022-05-19 08:54:19 +02:00
Jovan Krunić
6e94e1f7e5 refactor: adjust distance sort info in config
CLoses #118
2022-05-19 08:47:26 +02:00
Jovan Krunić
a65cfc1176 docs: update changelog 2022-05-17 21:02:57 +02:00
Jovan Krunić
f54d04f94d 0.41.0 2022-05-17 21:02:56 +02:00
openstappsbot
315e15f53d refactor: update all 2022-05-17 13:07:17 +00:00
Jovan Krunić
bb3be5a816 fix: take coordinates in right order
Closes #116
2022-05-16 11:51:10 +00:00
Jovan Krunić
b7ae2cf019 Resolve "Auth providers should be ready on components init" 2022-05-13 09:05:33 +00:00
Thea Schöbl
9ce8c58b98 refactor: simplify geo queries 2022-05-13 08:26:23 +00:00
Rainer Killinger
39e710e685 test: expand test coverage 2022-05-10 12:58:22 +02:00
Rainer Killinger
4bb46d8a06 feat: support docker swarm deployments 2022-05-10 12:32:38 +02:00
Rainer Killinger
ac144095bf refactor: apply @openstapps/eslint-config rules 2022-05-09 15:45:25 +02:00
Rainer Killinger
1fcf7340d4 feat: reload nginx on proxyconfig change 2022-05-06 12:55:10 +02:00
Rainer Killinger
427e357b8d docs: update changelog 2022-05-05 15:47:23 +02:00
Rainer Killinger
12fc2d6532 1.0.0 2022-05-05 15:47:13 +02:00
openstappsbot
ed7b5eaf65 refactor: update all 2022-05-05 07:08:18 +00:00
Jovan Krunić
28caaf1d21 fix: suppress router event logs in console
Closes #207
2022-05-04 16:30:27 +00:00
Thea Schöbl
418fc6ba05 feat: support es-mapping tags 2022-05-04 10:37:15 +00:00
Thea Schöbl
cb19ff3598 Merge branch '2-allow-e2e-abbreviation' into 'master'
Resolve "Allow e2e abbreviation"

Closes #2

See merge request openstapps/eslint-config!1
2022-05-04 10:34:13 +00:00
Thea Schöbl
b8adbcd030 Resolve "Allow e2e abbreviation" 2022-05-04 10:34:13 +00:00
Thea Schöbl
9242438132 fix: timetable dates cannot be removed 2022-05-03 11:06:06 +00:00
Rainer Killinger
25171fe4d7 refactor: check out gradle props on android builds 2022-04-25 17:19:30 +02:00
Rainer Killinger
9d634f2a89 docs: update changelog 2022-04-25 13:22:49 +02:00
Rainer Killinger
f0bbed1445 0.0.3 2022-04-25 13:22:47 +02:00
Rainer Killinger
334f0d7069 ci: publish npm package with public access 2022-04-25 13:22:23 +02:00
Rainer Killinger
8ceffa23a9 docs: update changelog 2022-04-25 13:08:39 +02:00
Rainer Killinger
8edaa5def1 0.0.2 2022-04-25 13:08:37 +02:00
Rainer Killinger
ee744cf2cc docs: update devDependencies in README 2022-04-25 13:08:04 +02:00
Rainer Killinger
f1480f3d72 ci: add test stage 2022-04-25 13:05:16 +02:00
Rainer Killinger
ab6173ccff test: add eslint config validation 2022-04-25 13:04:30 +02:00
Rainer Killinger
7a841a554a Add LICENSE 2022-04-25 12:59:06 +02:00
Thea Schöbl
f36b1c0588 docs: update docs 2022-04-25 12:58:57 +02:00
Thea Schöbl
bc15df828d feat: gitlab-ci 2022-04-21 00:14:48 +02:00
Thea Schöbl
5f8907ff7d Initial commit 2022-04-21 00:13:37 +02:00
Thea Schöbl
30f773627e Initial commit 2022-04-21 00:12:31 +02:00
Rainer Killinger
e9bd2b7a6c ci: actually make web target 2022-04-14 16:19:21 +02:00
Thea Schöbl
29585faff6 refactor: license typo 2022-04-14 10:53:29 +00:00
Thea Schöbl
30d801a3b4 fix: missing translations 2022-04-14 10:53:29 +00:00
Thea Schöbl
c54ea867bd feat: show feedback when map search yields no results 2022-04-14 10:53:29 +00:00
Jovan Krunić
488150f7f5 fix: add areaServed to person detail 2022-04-14 08:52:31 +00:00
Rainer Killinger
f0a2ca7e8e test: fix failing e2e navigation test 2022-04-14 09:47:39 +02:00
Rainer Killinger
1442e53430 test: add case for navigation 2022-04-13 16:22:50 +02:00
Rainer Killinger
387769b05d refactor: enable gitlab review tool 2022-04-13 16:22:50 +02:00
Rainer Killinger
dac2f5656a refactor: update to Angular 13 2022-04-13 16:22:44 +02:00
Thea Schöbl
7b491ed3bb feat: Ionic v6 breadcrumbs in catalog module 2022-04-13 14:10:16 +00:00
Thea Schöbl
552911cfcf feat: webpack bundle analyzer 2022-04-13 13:43:55 +00:00
Thea Schöbl
72e5fcca77 refactor: remove lodash 2022-04-12 09:59:55 +00:00
Rainer Killinger
fd7f664792 refactor: remove refresher from data detail view 2022-04-05 14:04:25 +00:00
Jovan Krunić
d2a23e581e Resolve "Read library account URLs from the backend" 2022-04-05 13:30:47 +00:00
Rainer Killinger
d3c509ccb4 refactor: update dependencies 2022-04-04 21:41:54 +02:00
Rainer Killinger
d2fe89ec3a docs: update changelog 2022-04-04 21:37:18 +02:00
Rainer Killinger
0d3248fff0 0.40.0 2022-04-04 21:37:17 +02:00
Rainer Killinger
1748ba3825 refactor: update dependencies 2022-04-04 21:33:14 +02:00
Rainer Killinger
f6168bf678 docs: update changelog 2022-04-04 20:34:01 +02:00
Rainer Killinger
5f1cf06ce3 0.30.0 2022-04-04 20:33:59 +02:00
Rainer Killinger
4c86ced5b7 refactor: update dependencies 2022-04-04 20:29:22 +02:00
Thea Schöbl
93c37b26cc feat: support overlapping timetable dates 2022-03-25 10:52:40 +00:00
Jovan Krunić
2e2a5897b8 refactor: use current location for auth unless production 2022-03-23 21:52:27 +01:00
Jovan Krunić
0479e7cdc3 test: use cypress instead of protractor 2022-03-23 10:14:56 +00:00
Rainer Killinger
b95c796358 refactor: bump app version 2022-03-21 14:09:11 +01:00
Rainer Killinger
87323e70cf fix: shell variable substitution statements 2022-03-21 13:51:49 +01:00
Rainer Killinger
edd2ccffe9 refactor: update to ionic v6 2022-03-21 11:23:07 +00:00
Rainer Killinger
e30ef33cc8 docs: update changelog 2022-03-21 11:37:47 +01:00
Rainer Killinger
5405c5bc31 0.29.1 2022-03-21 11:37:45 +01:00
Rainer Killinger
28552a665f refactor: update dependencies 2022-03-21 11:10:22 +01:00
Rainer Killinger
8962da31a3 docs: update changelog 2022-03-17 12:26:48 +01:00
Rainer Killinger
de8033c218 0.39.0 2022-03-17 12:26:42 +01:00
Rainer Killinger
cb9dd83bef refactor: update dependencies 2022-03-17 12:08:37 +01:00
Thea Schöbl
e68d1b73f9 feat: assessments module 2022-03-17 09:59:52 +00:00
Rainer Killinger
ec8b553d2b refactor: handle ssh secrets as base64 encoded 2022-03-16 12:30:21 +01:00
Rainer Killinger
368c26ce8c fix: iOS fastfile behavior 2022-03-15 13:27:39 +01:00
Rainer Killinger
58ce196507 ci: refinie web deploy job 2022-03-14 15:03:56 +01:00
Rainer Killinger
6756f6ccd4 ci: add docker image build to all tests 2022-03-10 17:01:52 +01:00
Rainer Killinger
9990759de0 docs: update changelog 2022-03-10 16:55:19 +01:00
Rainer Killinger
dcb56f7721 1.1.0 2022-03-10 16:55:18 +01:00
Rainer Killinger
20f281a544 refactor: adjust nginx config file location 2022-03-10 16:54:32 +01:00
Rainer Killinger
712f204ade ci: rename CI jobs 2022-03-10 16:20:10 +01:00
Rainer Killinger
86535bb1bb docs: update changelog 2022-03-10 16:16:44 +01:00
Rainer Killinger
392d743444 1.0.1 2022-03-10 16:16:43 +01:00
Rainer Killinger
edbd739db9 fix: nginx deleting its own conifg 2022-03-10 16:16:12 +01:00
Rainer Killinger
3eeab34bc1 fix: add zip package to docker image 2022-03-10 12:01:01 +01:00
Rainer Killinger
0edc598667 docs: update README and file paths 2022-03-10 11:49:45 +01:00
Rainer Killinger
9537833247 ci: tag ios jib with macos runner 2022-03-10 11:49:43 +01:00
Rainer Killinger
84b699ba26 docs: update changelog 2022-03-09 12:38:11 +01:00
Rainer Killinger
a9b495b4a1 1.0.0 2022-03-09 12:38:07 +01:00
Rainer Killinger
eea8d6d339 refactor: adjust linting to latest eslint changes 2022-03-08 11:57:34 +01:00
Rainer Killinger
91b1e3a52b refactor: update dependencies 2022-03-07 16:18:49 +01:00
Rainer Killinger
bdf85112b1 refactor: update dependencies 2022-03-03 12:14:58 +01:00
Rainer Killinger
f10cd6c431 feat: add rate limit allow list 2022-03-03 12:14:53 +01:00
Jovan Krunić
f3e83bfcc8 fix: add PKCE parameters for PAIA auth 2022-02-25 17:37:18 +01:00
Jovan Krunić
b56322b05c test: add missing svg assets 2022-02-23 15:09:55 +00:00
Jovan Krunić
098b1d733e test: inject instead of deprecated TestBed get
Additionally refactor tests and ts-ignore annotations.
2022-02-23 15:09:55 +00:00
Jovan Krunić
37fe25c42f test: clean up async behaviour 2022-02-23 15:09:55 +00:00
Jovan Krunić
89dc41ad35 test: fix by mocking geolocation 2022-02-23 15:09:55 +00:00
Jovan Krunić
562f357374 test: prevent error from leaking 2022-02-23 15:09:55 +00:00
Jovan Krunić
93863510fa fix: config.get issue by updating ionic 2022-02-23 15:09:55 +00:00
Jovan Krunić
b7be5b9dbc test: mock content for the context menu 2022-02-23 15:09:55 +00:00
Thea Schöbl
aabb29ad05 Resolve "Error: Database not created" 2022-02-23 14:58:33 +00:00
Rainer Killinger
6a5bad7896 ci: add deploy jobs for app targets 2022-02-18 15:50:59 +01:00
Rainer Killinger
7596759f77 ci: add image building 2022-02-18 14:48:50 +01:00
Rainer Killinger
4b258234e0 refactor: enable CI only configuration 2022-02-18 11:43:57 +01:00
Thea Schöbl
75f4644940 refactor: migrate all cordova plugins to capacitor 2022-02-17 08:37:32 +00:00
Jovan Krunić
cdb6ac4084 fix: add missing profile translation 2022-02-16 15:05:07 +01:00
Jovan Krunić
11017955ee build: update karma cause of deprecation warning
Closes #184
2022-02-16 15:05:07 +01:00
Jovan Krunić
eaf9da3c84 refactor: get appropriate provider via auth helper 2022-02-16 15:05:06 +01:00
Jovan Krunić
a5e5a5b407 feat: resume at origin path after login
Closes #168
2022-02-11 19:54:46 +01:00
Rainer Killinger
8abd993667 refactor: version code handling 2022-02-10 21:10:40 +01:00
Jovan Krunić
19b36c07b7 test: adjust tests to config init changes 2022-02-10 16:21:35 +01:00
Jovan Krunić
c9720dc104 fix: omit sync native calendar when no uuids
Related to #177
2022-02-10 16:21:35 +01:00
Jovan Krunić
bde0df219c refactor: initialize config via APP_INITIALIZER
Closes #181
2022-02-10 16:21:34 +01:00
Rainer Killinger
e78496fb8b refactor: read android secrets from environment 2022-02-10 15:19:06 +01:00
Rainer Killinger
411e0970b8 refactor: remove inheritance from daia provider 2022-02-09 18:59:55 +01:00
Rainer Killinger
d22e6ff87f refactor: add mulitple customization features 2022-02-09 15:51:32 +01:00
Rainer Killinger
6ce435fc05 refactor: avoid errors in daia availability UI 2022-02-09 11:37:51 +00:00
Rainer Killinger
988236e646 refactor: read daia service url from app config 2022-02-09 11:37:51 +00:00
Rainer Killinger
2cd0a70fd4 build: fix typo in AndroidManifest.xml 2022-02-09 11:46:57 +01:00
Jovan Krunić
faa0ed60f4 build: remove dev android config
Closes #179
2022-02-09 10:57:19 +01:00
Jovan Krunić
1727c0280f refactor: remove unused fake environment 2022-02-08 19:33:08 +01:00
Jovan Krunić
ea935232ab build: use custom url scheme independent from appId 2022-02-08 19:16:53 +01:00
Jovan Krunić
35c9991a61 build: move app host to strings.xml 2022-02-08 19:16:52 +01:00
Jovan Krunić
fb7b3fd1d2 refactor: read auth provider info from app config 2022-02-07 16:46:29 +00:00
Rainer Killinger
c88ffe549f refactor: include daia in feature config 2022-02-07 11:30:29 +01:00
Rainer Killinger
18c628a002 refactor: add dynamic semester boostings 2022-02-04 16:20:25 +01:00
Jovan Krunić
9c5581af2c fix: fix markdown formatting in config 2022-02-04 10:14:01 +01:00
Rainer Killinger
a1592f84cc fix: enable background fetch on iOS 2022-02-02 17:27:42 +01:00
Rainer Killinger
1195c5ffc8 fix: enable overflow for day labels in schedule 2022-02-02 17:24:57 +01:00
Jovan Krunić
7bece91206 refactor: use appropriate status numbers (library account) 2022-02-02 09:53:09 +00:00
Jovan Krunić
90b97339d3 fix: assign navigation app name dynamically 2022-02-02 09:37:20 +00:00
Jovan Krunić
df31e4f6fd refactor: add Goethe-Uni about information
Closes #103
2022-02-01 11:27:05 +01:00
Rainer Killinger
4615fe804b refactor: add ionics color attribute to toolbars 2022-01-31 19:08:29 +01:00
Rainer Killinger
d99b80d2c2 refactor: narrow down cordova plugins to used ones 2022-01-31 15:57:57 +00:00
Rainer Killinger
e7d5f83100 fix: schedule navigation bar layout 2022-01-31 15:57:57 +00:00
Thea Schöbl
a57c3029df feat: calendar plugin 2022-01-31 15:57:38 +00:00
Thea Schöbl
f6003d7f87 fix: imports from src in config files lead to crash 2022-01-31 15:34:45 +00:00
Jovan Krunić
080e6fa3e8 feat: add library account screens 2022-01-31 08:53:46 +00:00
Rainer Killinger
863a3ffd48 fix: daia_url missing in environment configs 2022-01-27 15:40:11 +01:00
Andy Bastian
9a3241c42a feat: add HeBIS HDS search 2022-01-27 14:11:35 +00:00
Thea Schöbl
e4165901bb feat: schedule layout 2022-01-27 09:27:20 +00:00
Jovan Krunić
5bd0b50816 feat: turn on oauth2 state check for PAIA
Closes #172
2022-01-25 21:00:04 +01:00
Wieland Schöbl
72060cbed7 refactor: disable locate action chips 2022-01-25 16:28:50 +01:00
Rainer Killinger
e65a81fcfa docs: fix openapi generation by dependency update 2022-01-25 16:12:23 +01:00
Rainer Killinger
bbdf14c7a4 docs: update changelog 2022-01-25 15:51:27 +01:00
Rainer Killinger
be40adcbf4 0.29.0 2022-01-25 15:51:25 +01:00
Rainer Killinger
0b33db9f89 refactor: update dependencies 2022-01-25 15:47:20 +01:00
Rainer Killinger
d86a7353dd refactor: adjust to changes in core definitions 2022-01-25 15:24:01 +01:00
Rainer Killinger
4f87968943 docs: fix creation of typedoc pages 2022-01-25 15:02:33 +01:00
Rainer Killinger
6257ca0dd3 docs: update changelog 2022-01-25 12:44:22 +01:00
Rainer Killinger
6a87557109 0.38.0 2022-01-25 12:44:16 +01:00
Rainer Killinger
07feb8f03f refactor: add profile menu item 2022-01-25 11:22:11 +01:00
Rainer Killinger
9d8fe643a5 refactor: include latest changes from core#145 2022-01-25 11:22:06 +01:00
Thea Schöbl
c0d0b1bd99 fix: make action chips react to changes of their item 2022-01-25 09:08:02 +00:00
Michel Jonathan Schmitz
b5f239ea4e feat: add auth support (default and paia) 2022-01-24 18:43:00 +00:00
Rainer Killinger
83120a6734 feat: add client method for invoking plugin routes 2022-01-24 15:52:12 +01:00
Rainer Killinger
d601880be1 refactor: update dependencies 2022-01-24 15:51:40 +01:00
Wieland Schöbl
046a95ba1d fix: add event popover expanding beyond screen width 2022-01-24 11:58:36 +00:00
Thea Schöbl
54cc8838ae fix: some android devices don't support implied css animation units 2022-01-24 11:57:55 +00:00
openstappsbot
482dec345c refactor: update all 2022-01-17 08:08:42 +00:00
Rainer Killinger
e73d8e6bc4 refactor: update dependencies 2022-01-10 16:45:02 +01:00
Rainer Killinger
33c60e414d ci: add jq to node and builder images 2022-01-10 16:42:39 +01:00
Rainer Killinger
f068de3031 refactor: update dependencies 2021-12-17 12:36:12 +01:00
Rainer Killinger
8615203a3e docs: update changelog 2021-12-17 10:48:56 +01:00
Rainer Killinger
3a5ee64db5 0.37.0 2021-12-17 10:48:54 +01:00
Rainer Killinger
bfe3faa01c refactor: update dependencies 2021-12-17 10:48:18 +01:00
Rainer Killinger
71593b44c8 docs: update changelog 2021-12-17 10:19:56 +01:00
Rainer Killinger
408b61a57a 0.28.0 2021-12-17 10:19:53 +01:00
Rainer Killinger
e82f4e9209 fix: ajv related tranistive build errors 2021-12-17 10:17:53 +01:00
Rainer Killinger
9a9bc029f8 docs: update changelog 2021-12-16 16:14:17 +01:00
Rainer Killinger
c7cdb013e2 0.0.4 2021-12-16 16:14:16 +01:00
Rainer Killinger
5d38d6f180 refactor: update dependencies 2021-12-16 16:13:41 +01:00
Rainer Killinger
8b98b8afdc docs: update changelog 2021-12-15 16:20:09 +01:00
Rainer Killinger
7a01a6b305 0.36.0 2021-12-15 16:20:08 +01:00
Rainer Killinger
bc2274a9ef refactor: update dependencies 2021-12-15 16:14:55 +01:00
Rainer Killinger
f602d6fe41 docs: update changelog 2021-12-15 12:47:55 +01:00
Rainer Killinger
fe72cfec43 0.27.0 2021-12-15 12:47:51 +01:00
Rainer Killinger
c1b956986d ci: repair and clean up ci pipelines 2021-12-15 12:27:33 +01:00
Rainer Killinger
6a655fe28a docs: update changelog 2021-12-15 11:54:21 +01:00
Rainer Killinger
78d15cabc8 0.26.0 2021-12-15 11:54:19 +01:00
openstappsbot
0ca252b221 refactor: update all 2021-12-15 11:51:11 +01:00
Jovan Krunić
7e35fae34e fix: route for news 2021-12-14 18:07:59 +00:00
Rainer Killinger
564a4e2994 ci: update renovate bot package rules 2021-12-14 13:29:23 +01:00
Rainer Killinger
3d406ddf88 docs: update changelog 2021-12-14 12:43:56 +01:00
Rainer Killinger
66d6b07485 0.22.0 2021-12-14 12:43:54 +01:00
Rainer Killinger
48ce0f241c refactor: update openstapps dependencies 2021-12-14 12:43:18 +01:00
Rainer Killinger
c8b459fb6a docs: update changelog 2021-12-14 12:38:17 +01:00
Rainer Killinger
2c04fd6efc 0.21.0 2021-12-14 12:38:15 +01:00
Rainer Killinger
f75e532d44 docs: update changelog 2021-12-14 12:37:03 +01:00
Rainer Killinger
70ce8ea0d6 0.8.0 2021-12-14 12:37:02 +01:00
Rainer Killinger
e8eacd2c74 docs: update changelog 2021-12-14 12:35:16 +01:00
Rainer Killinger
9e6e2be2e7 0.29.0 2021-12-14 12:35:14 +01:00
Rainer Killinger
8c8f44b6f1 refactor: update dependencies 2021-12-14 12:33:43 +01:00
Rainer Killinger
e1d0d20296 ci: update renovate bot package rules 2021-12-14 12:32:17 +01:00
Rainer Killinger
3c3a571dca refactor: update dependencies 2021-12-14 12:26:04 +01:00
Rainer Killinger
1bf44d887d refactor: update dependencies 2021-12-14 11:58:30 +01:00
Rainer Killinger
e57555aea8 ci: update renovate bot package rules 2021-12-14 11:53:05 +01:00
Rainer Killinger
a6e19b1230 fix: log4j2 first mitigation 2021-12-13 10:13:59 +01:00
Rainer Killinger
3afeb0e936 Initial commit 2021-12-10 14:35:18 +01:00
Jovan Krunić
2566a71a81 feat: add detail view for news 2021-12-06 12:14:42 +00:00
Jovan Krunić
8f3df58e42 docs: add android debug instructions to README
Additionally clean up npm scripts and README

Closes #157
2021-11-26 13:37:59 +01:00
Rainer Killinger
c5b826080c refactor: update dependencies 2021-11-23 13:08:58 +01:00
Rainer Killinger
b509dd2e2d build: fix configs for android release builds 2021-11-23 13:08:58 +01:00
Jovan Krunić
5ffa699f57 ci: add gradle to image via a dummy project 2021-11-22 18:40:40 +01:00
Jovan Krunić
b909e0bed4 build: upgrade capacitor android 2021-11-22 15:30:20 +01:00
Jovan Krunić
2e3f6684ef feat: support deep links 2021-11-17 15:12:10 +01:00
Jovan Krunić
837c69bb21 fix: links of timetable tabs
Closes #144
2021-11-16 14:16:13 +00:00
Jovan Krunić
1c56c891e1 fix: show nothing for empty array properties
Closes #154
2021-11-15 08:57:07 +00:00
Jovan Krunić
7f23a0e6cf build: migrate from cordova to capacitor
Closes #85
2021-11-12 19:12:42 +01:00
Wieland Schöbl
523e34f6e4 refactor: use SwiperJS in schedule module 2021-11-09 17:12:45 +00:00
Jovan Krunić
d6cb7e1d3b refactor: remove default data from search page
Closes #151
2021-11-03 12:41:04 +00:00
Jovan Krunić
d3188f5090 fix: ignore null-island location
Closes #149
2021-10-27 14:49:22 +02:00
Jovan Krunić
e29a68bb03 refactor: use expandable title card for all data details
Closes #150
2021-10-27 08:28:48 +00:00
Jovan Krunić
88684f068a fix: single map place width
Closes #147
2021-10-27 08:28:48 +00:00
Jovan Krunić
d420008926 feat: add about module 2021-10-27 08:25:41 +00:00
Jovan Krunić
7d449b43d0 fix: map search on iOS
Closes #148
2021-10-21 17:36:03 +02:00
Jovan Krunić
867f9e9b83 feat: add feedback module 2021-10-21 06:47:40 +00:00
Jovan Krunić
0becdeb6d9 docs: update changelog 2021-10-20 14:10:03 +02:00
Jovan Krunić
dacb1c66e8 0.35.0 2021-10-20 14:10:00 +02:00
openstappsbot
e187ee8c44 refactor: update all 2021-10-20 11:27:10 +00:00
Rainer Killinger
18ab8d592e ci: add jq to app image 2021-10-20 12:11:49 +02:00
openstappsbot
3b4cb2b420 refactor: update all 2021-10-20 07:09:40 +00:00
Rainer Killinger
fdd27d946c ci: remove digest binding,picks wrong architecture 2021-10-15 11:20:07 +02:00
Wieland Schöbl
d6f126f197 feat: add dummy about config 2021-10-07 10:38:32 +02:00
Rainer Killinger
581a5b2e55 fix: ngx-translate defaultLanguage not set 2021-10-07 07:30:46 +00:00
Rainer Killinger
72988e9241 refactor: update ngx-translate 2021-10-07 07:30:46 +00:00
Rainer Killinger
def31cd036 refactor: add empty aboutPages to config 2021-10-05 14:54:21 +02:00
openstappsbot
9011e345a2 refactor: update all 2021-10-05 14:52:30 +02:00
Rainer Killinger
82bb15b863 fix: adjust npm docker scripts and typos 2021-10-05 14:21:54 +02:00
openstappsbot
3672cb47a8 refactor: update docker docker tag to v20.10.9 2021-10-05 07:05:48 +00:00
Rainer Killinger
c9f37a1df0 docs: update changelog 2021-10-04 18:07:57 +02:00
Rainer Killinger
6dd5fcdde5 0.34.0 2021-10-04 18:07:52 +02:00
openstappsbot
26c14fa7e9 refactor: update all 2021-10-04 17:53:15 +02:00
Rainer Killinger
d083105d6d feat: unregister plugin on exit 2021-10-04 16:42:31 +02:00
openstappsbot
8cb4ee12a6 refactor: update all 2021-10-04 07:07:31 +00:00
Rainer Killinger
f8c3b29c60 ci: pin docker image build to compatible runners 2021-09-30 17:42:05 +02:00
Rainer Killinger
03c2b8aeab refactor: read env variables via commander 2021-09-30 17:39:07 +02:00
Rainer Killinger
88909a5650 refactor: update dependencies 2021-09-30 15:23:05 +02:00
openstappsbot
8cf40900bb refactor: update all 2021-09-29 09:42:31 +02:00
Wieland Schöbl
92741d6613 Merge branch '15-filter-tags-override-inherited-type-tags' into 'master'
Resolve "Filter tags override inherited type tags"

Closes #15

See merge request openstapps/es-mapping-generator!4
2021-09-28 12:49:03 +00:00
Wieland Schöbl
f0401e1889 fix: filter tags override inherited type tags 2021-09-28 12:49:02 +00:00
openstappsbot
9bc05d2c99 refactor: update typescript-eslint monorepo to v4.32.0 2021-09-28 07:11:08 +00:00
openstappsbot
210e7ac021 refactor: update typescript-eslint monorepo to v4.32.0 2021-09-28 07:08:33 +00:00
openstappsbot
7aefa50101 refactor: update all 2021-09-27 07:15:39 +00:00
openstappsbot
9ef14774d2 refactor: update all 2021-09-27 07:11:47 +00:00
openstappsbot
a09359d0b2 refactor: update all 2021-09-27 07:06:56 +00:00
openstappsbot
bd132f9f6a refactor: update all 2021-09-27 07:06:20 +00:00
Rainer Killinger
8b2b853942 fix: person list should use long-inline-text 2021-09-24 13:53:33 +00:00
Rainer Killinger
a1bf950c88 refactor: enable full sort capabilites on search 2021-09-24 13:53:33 +00:00
Rainer Killinger
03084b1c96 feat: add catalog module 2021-09-24 13:53:33 +00:00
Wieland Schöbl
e628f396e2 fix: add nav button to schedule page 2021-09-21 18:07:10 +02:00
Jovan Krunić
3c7ada4eea build: upgrade to angular v12 2021-09-21 06:51:33 +00:00
Rainer Killinger
bf3a716767 docs: update changelog 2021-09-16 12:09:17 +02:00
Rainer Killinger
1b3c43d2cb 0.33.0 2021-09-16 12:09:16 +02:00
Rainer Killinger
fee9a163e1 docs: adjust typedoc arguments 2021-09-16 12:08:33 +02:00
Jovan Krunić
7ba647271e feat: add feedback to config as menu item 2021-09-15 14:12:37 +00:00
Jovan Krunić
e5c227073a fix: detail page when dish of mensa selected
Closes #140
2021-09-15 16:01:16 +02:00
openstappsbot
472a1b97d6 refactor: update all 2021-09-15 13:06:45 +00:00
Jovan Krunić
f1b4930a30 fix: 404 on all surge links 2021-09-15 09:59:32 +00:00
Rainer Killinger
49a1758da3 feat: add duration pipe with frequency capabilites 2021-09-13 15:17:25 +00:00
Jovan Krunić
e42149e93f docs: update changelog 2021-09-13 16:42:20 +02:00
Jovan Krunić
53b3e8909c 0.28.1 2021-09-13 16:42:19 +02:00
Jovan Krunić
7d396f9202 fix: adjust command of typedoc (upgrade typescript) 2021-09-13 16:40:49 +02:00
Jovan Krunić
c40ceef039 docs: update changelog 2021-09-13 15:16:24 +02:00
Jovan Krunić
98896d5474 0.28.0 2021-09-13 15:16:23 +02:00
Rainer Killinger
6125d43e8c fix: add openingHours config and catch its errors 2021-09-10 16:05:20 +00:00
Jovan Krunić
e9452d6520 feat: add favorites support 2021-09-10 15:39:23 +00:00
Frank Nagel
7ed2921efb fix: Add default configuration file for prometheus monitoring 2021-09-10 15:20:03 +00:00
Jovan Krunić
1596b6e3b8 build: update @openstapps/core 2021-09-10 14:31:54 +02:00
Jovan Krunić
c4f5fb80b5 build: update packages 2021-09-10 10:40:01 +02:00
Jovan Krunić
c31540e835 build: allow higher typescript versions
Closes #38
2021-09-10 09:51:01 +02:00
Wieland Schöbl
b42db4d8b0 ci: include wait-for script verbatim 2021-09-09 16:56:56 +02:00
Jovan Krunić
293ed6ba5f test: completely mock storage in tests using it
Closes #130
2021-09-08 18:00:14 +02:00
Rainer Killinger
972b551a57 ci: add wait-for script to node image 2021-09-08 13:03:30 +02:00
Jovan Krunić
4ab7b40b73 refactor: use specific setting types
Closes #97
2021-09-07 15:40:38 +02:00
Rainer Killinger
1cdac9f60d docs: update README.md 2021-09-07 14:33:20 +02:00
Rainer Killinger
109b9e3cbd Merge branch 'master' of gitlab.com:openstapps/minimal-plugin 2021-09-07 13:05:04 +02:00
Rainer Killinger
fb96a4e8be ci: add real CI configuration 2021-09-07 13:02:44 +02:00
Rainer Killinger
377435f3eb refacator: read configuration from env variables 2021-09-07 12:51:13 +02:00
Rainer Killinger
581e60267d refactor: update dependencies 2021-09-07 10:03:06 +02:00
Rainer Killinger
c03b5d3faa docs: update changelog 2021-09-06 14:42:38 +02:00
Rainer Killinger
52c33f47da 0.4.0 2021-09-06 14:42:37 +02:00
Rainer Killinger
cb890556d7 test: make tests readable 2021-09-06 14:36:47 +02:00
Rainer Killinger
8dffe29146 fix: handle patch & duplicate versions correctly 2021-09-06 14:36:06 +02:00
openstappsbot
aeebbf9656 refactor: update all 2021-09-06 11:35:14 +02:00
Rainer Killinger
452273248d docs: adjust to new typedoc parameters 2021-09-03 17:35:23 +02:00
Wieland Schöbl
43a89ec4f2 refactor: use core supplied mappings 2021-09-03 15:17:15 +00:00
openstappsbot
6f2990b804 refactor: update angular monorepo 2021-09-03 13:09:20 +00:00
Rainer Killinger
459b1ed19f ci: update renovate bot package rules 2021-09-03 14:17:32 +02:00
Rainer Killinger
227abeb36d docs: update changelog 2021-09-01 15:45:14 +02:00
Rainer Killinger
be1fef2e25 0.32.0 2021-09-01 15:45:10 +02:00
openstappsbot
587c98a50e refactor: update all 2021-09-01 13:06:57 +00:00
Rainer Killinger
2bddddbf39 refactor: update dependencies 2021-09-01 10:03:48 +02:00
openstappsbot
08e632250f refactor: update docker docker tag to v20.10.8 2021-09-01 07:06:07 +00:00
Rainer Killinger
4f02d87f29 docs: update changelog 2021-08-31 11:57:43 +02:00
Rainer Killinger
863bd58cad 0.25.0 2021-08-31 11:57:38 +02:00
Rainer Killinger
fe90cd098a refactor: update dependencies 2021-08-31 09:32:43 +00:00
Rainer Killinger
cb43171640 docs: reintroduce typedoc documentation 2021-08-31 09:32:43 +00:00
Wieland Schöbl
96e3acf9ba fix: generate schemas for type aliases 2021-08-30 15:23:19 +02:00
Rainer Killinger
c685adcac6 docs: update changelog 2021-08-27 14:42:52 +02:00
Rainer Killinger
da056b75d0 0.31.1 2021-08-27 14:42:50 +02:00
Rainer Killinger
51c157d577 fix: plugin related tests 2021-08-27 14:37:05 +02:00
Rainer Killinger
32fc24f986 docs: update changelog 2021-08-27 13:49:40 +02:00
Rainer Killinger
2f9e1353a7 0.24.3 2021-08-27 13:49:38 +02:00
Rainer Killinger
f82b465263 fix: add cruical Converter ceation option 2021-08-27 13:49:01 +02:00
Rainer Killinger
9f744a3c88 test: adjust path to core resource files 2021-08-26 15:37:40 +02:00
openstappsbot
d6823a1206 refactor: update all 2021-08-26 07:07:06 +00:00
Wieland Schoebl
3fd23689c1 docs: update changelog 2021-08-25 15:08:33 +02:00
Wieland Schoebl
96bb8bbff3 0.24.2 2021-08-25 15:08:28 +02:00
Wieland Schöbl
aa0ba51a34 refactor: rename .d.ts files to .ts 2021-08-25 13:16:21 +02:00
Wieland Schoebl
20f68ed581 docs: update changelog 2021-08-25 12:36:36 +02:00
Wieland Schoebl
23cdf29fc5 0.24.1 2021-08-25 12:36:31 +02:00
Wieland Schöbl
c5a8f7ebea test: improve easy-ast test performance 2021-08-25 10:25:34 +00:00
Wieland Schoebl
7238c2f333 docs: update changelog 2021-08-25 12:05:42 +02:00
Wieland Schoebl
074cc061f5 0.24.0 2021-08-25 12:05:36 +02:00
Wieland Schöbl
fe59204b42 feat: modernize core-tools 2021-08-25 09:47:36 +00:00
Rainer Killinger
a811bf9f4f refactor: improve display of distances 2021-08-25 10:04:28 +02:00
Rainer Killinger
bbd20effb6 ci: fix surge deployment for new routing strategy 2021-08-25 10:04:27 +02:00
Rainer Killinger
640df473f7 refactor: undo card based look on detail views 2021-08-25 10:04:27 +02:00
Rainer Killinger
9f75f47e9c refactor: improve canteen related views 2021-08-25 10:04:26 +02:00
Rainer Killinger
02cc2a8879 ci: increase npm package install speed 2021-08-25 10:02:03 +02:00
Rainer Killinger
7afa66e01a refactor: apply new eslint rules 2021-08-25 10:01:32 +02:00
Rainer Killinger
bb8a9f6ba5 refactor: add opening hours 2021-08-25 10:00:33 +02:00
Rainer Killinger
b89f5c4edd fix: canteen module layout 2021-08-25 09:59:04 +02:00
Rainer Killinger
4cf27b2c32 refactor: clean up data-detail-content template 2021-08-25 09:59:04 +02:00
Rainer Killinger
95b183b1bb refactor: replace amDateFormat with new pipes 2021-08-25 09:59:03 +02:00
Rainer Killinger
4b932af1c0 feat: add formatting pipes basted on Intl 2021-08-25 09:54:50 +02:00
Rainer Killinger
6f7c680ed8 fix: canteen module layout 2021-08-25 09:54:44 +02:00
Jovan Krunić
b56a428c92 refactor: update openstapps packages 2021-08-18 10:29:18 +00:00
Jovan Krunić
beb57b2f5a docs: update changelog 2021-08-17 15:55:23 +02:00
Jovan Krunić
0bda134bfe 0.31.0 2021-08-17 15:55:22 +02:00
Jovan Krunić
dbcde48c14 refactor: adjust tests to core changes 2021-08-17 15:18:09 +02:00
Jovan Krunić
09aa7bb5c5 fix: map widget not loading tiles properly
Closes #127
2021-08-17 14:25:41 +02:00
openstappsbot
388e4fbb76 refactor: update all 2021-08-13 13:06:04 +00:00
Wieland Schöbl
d8ede006df feat: timetable module - schedule and calendar 2021-08-13 12:27:40 +00:00
Rainer Killinger
61b1fde0ec Merge branch 'renovate/all' into 'master'
refactor: update all

See merge request openstapps/es-mapping-generator!1
2021-08-12 07:57:15 +00:00
openstappsbot
58e6b19a70 refactor: update all 2021-08-11 13:07:47 +00:00
Rainer Killinger
e81b2e161d ci: fix Dockerfile npm install commands 2021-08-06 14:50:15 +02:00
Rainer Killinger
873d6459b5 ci: adjust npm & node versions and use npm ci 2021-08-06 13:12:30 +02:00
Wieland Schöbl
5bd8025d08 docs: fix readme badges 2021-08-05 19:53:16 +02:00
Wieland Schoebl
32c4cee4aa docs: update changelog 2021-08-05 19:41:13 +02:00
Wieland Schoebl
1d043c2ef1 0.0.3 2021-08-05 19:41:13 +02:00
Wieland Schöbl
9a881299dc fix: put es template parsing 2021-08-05 19:22:28 +02:00
Rainer Killinger
9c78fc2366 docs: update changelog 2021-08-05 16:28:38 +02:00
Rainer Killinger
00cd4780a9 0.0.2 2021-08-05 16:28:34 +02:00
Wieland Schöbl
62b226653d refactor: expand name 2021-08-05 16:18:01 +02:00
Wieland Schöbl
4d1d69bd0c refactor: expand name 2021-08-05 16:16:48 +02:00
Wieland Schöbl
28334b800c fix: fix unwanted crash when not supplying an error path 2021-08-05 15:40:00 +02:00
Wieland Schöbl
4861f7d22c test: remove mapping pipeline (duplicate with core) 2021-08-05 15:20:16 +02:00
Wieland Schöbl
ccb4cedc5f refactor: change function of put es templates 2021-08-05 14:47:13 +02:00
Rainer Killinger
614a1b1e9b feat: add openapi docs generation to api 2021-08-05 10:07:08 +00:00
Wieland Schöbl
bf862cfb78 refactor: update dependencies 2021-08-05 10:55:38 +02:00
Wieland Schöbl
233e017d2b refactor: update dependencies 2021-08-05 10:49:44 +02:00
Wieland Schöbl
20ee8db28e refactor: update dependencies 2021-08-05 10:41:41 +02:00
Rainer Killinger
4e42772ca3 feat: add catalog menu entry and rearrange 2021-08-04 14:27:30 +02:00
Wieland Schöbl
87d2a6fa09 Initial Commit 2021-08-04 14:12:22 +02:00
Wieland Schöbl
42c9d02036 Initial Commit 2021-08-04 13:25:50 +02:00
openstappsbot
aa39a5947c refactor: update all 2021-08-04 09:13:19 +00:00
Rainer Killinger
9272060a8b ci: let renovate bot runs recreate package-lock 2021-08-04 11:11:38 +02:00
Rainer Killinger
9463130e7d docs: update changelog 2021-08-04 11:08:41 +02:00
Rainer Killinger
3a3cf835a5 0.30.0 2021-08-04 11:08:40 +02:00
Rainer Killinger
0a10ef1362 test: adjust istanbul ignore statements 2021-08-04 11:05:08 +02:00
openstappsbot
546aa14895 refactor: update all 2021-08-04 10:51:30 +02:00
openstappsbot
70db25ca64 refactor: update all 2021-08-02 13:05:38 +00:00
Rainer Killinger
106dd26f89 docs: update changelog 2021-08-02 12:59:36 +02:00
Rainer Killinger
6e9e57d251 0.23.2 2021-08-02 12:59:35 +02:00
Rainer Killinger
d804085c54 docs: update changelog 2021-08-02 12:55:04 +02:00
Rainer Killinger
79943bc687 0.23.1 2021-08-02 12:55:03 +02:00
Rainer Killinger
7a5d2bb1e9 fix: rollback ajv version to 6.12.6 2021-08-02 12:55:00 +02:00
openstappsbot
a11a24225b refactor: update all 2021-08-02 07:09:50 +00:00
openstappsbot
d27bf7ea94 refactor: update all 2021-07-26 07:09:11 +00:00
Jovan Krunić
5435f85cc4 feat: add filter chips for news 2021-07-21 17:06:27 +02:00
Rainer Killinger
364edff8b7 docs: update changelog 2021-07-21 16:17:06 +02:00
Rainer Killinger
efedaba94d 0.23.0 2021-07-21 16:17:02 +02:00
Jovan Krunić
de0617b8dd feat: add favorites to personal menu 2021-07-20 13:27:18 +00:00
Rainer Killinger
c9dedf6a9f refactor: update dependencies 2021-07-20 09:35:53 +02:00
Rainer Killinger
f4bf7abc89 feat: replace route markdown with openapi 2021-07-20 09:35:49 +02:00
Wieland Schöbl
4fc7838a22 refactor: sync geojson dependency with core 2021-07-19 13:58:56 +02:00
Jovan Krunić
e48134eddc feat: lazy load all news 2021-07-16 17:00:21 +02:00
Jovan Krunić
975f8e25e4 refactor: sort news by datePublished on backend 2021-07-16 16:59:55 +02:00
Rainer Killinger
a1e820336f refactor: update dependencies 2021-07-16 14:35:39 +02:00
Wieland Schöbl
5dce28fb99 refactor: update dependencies 2021-07-15 09:53:37 +02:00
Wieland Schöbl
ccb851c0b5 refactor: remove angular lint command 2021-07-14 10:21:12 +02:00
Jovan Krunić
c1c9a92ec9 feat: add map module 2021-07-13 07:57:09 +00:00
Wieland Schöbl
d696215d08 refactor: replace TSLint with ESLint 2021-07-08 15:32:07 +02:00
Wieland Schöbl
dd8a6b3abc feat: support geo shape filter 2021-07-07 10:17:54 +02:00
Wieland Schoebl
1f7c9aba33 docs: update changelog 2021-07-07 10:10:45 +02:00
Wieland Schoebl
deaebd754d 0.22.0 2021-07-07 10:10:34 +02:00
Wieland Schöbl
f20038c8f9 fix: fix inherited properties not working correctly 2021-07-05 18:00:59 +02:00
Wieland Schöbl
99c698bd16 test: add filterable test for indirect types 2021-07-05 17:06:04 +02:00
openstappsbot
7106996cc3 refactor: update all 2021-07-05 07:06:25 +00:00
Rainer Killinger
3d36ecc2b0 ci: add elasticsearch to renovate exclusion list 2021-06-28 12:40:48 +02:00
Frank Nagel
d0847a8bf6 docs: Add documentation for prometheus-middleware 2021-06-22 17:34:22 +02:00
Frank Nagel
b42e911a11 feat: Add prometheus middleware to express
This enables collecting metrics from node.js and express.
2021-06-22 17:34:17 +02:00
Wieland Schöbl
67fb4a43c9 feat: add action chips to search results 2021-06-22 15:09:40 +00:00
Rainer Killinger
0aa26020be ci: add gitlab visual review to MRs 2021-06-17 16:31:40 +02:00
Wieland Schöbl
93877c9fc7 refactor: use range query for canteen module 2021-06-16 07:38:05 +00:00
Rainer Killinger
5c78973887 ci: set @types/geojson version for renovate 2021-06-15 10:57:01 +02:00
openstappsbot
360cddbf15 refactor: update dependency @types/node to v14.17.3 2021-06-14 08:48:27 +00:00
Rainer Killinger
42e68120b7 fix: exclude npm audit from maintenance runs 2021-06-14 09:49:46 +02:00
Wieland Schoebl
4955d8b6be docs: update changelog 2021-06-08 15:22:45 +02:00
Wieland Schoebl
08c2a6c8ab 0.29.0 2021-06-08 15:22:39 +02:00
Jovan Krunić
7b402d61c3 fix: item not available in offer template
Closes #110
2021-06-08 11:34:31 +02:00
Jovan Krunić
643b6c967f fix: swap missing icon after ionic update 2021-06-08 11:15:25 +02:00
openstappsbot
d0c0d7d9d4 refactor: update all 2021-06-01 13:09:11 +00:00
Jovan Krunić
27cf62f952 refactor: optimize data list component 2021-06-01 07:44:40 +00:00
Jovan Krunić
66167831e6 refactor: show top of the list if query changed (no setTimeout) 2021-06-01 07:44:40 +00:00
Rainer Killinger
00d52fa069 refactor: align grid & thumbnail spacing with list 2021-06-01 07:44:40 +00:00
Rainer Killinger
ef87601e84 refactor: update context menu layout 2021-06-01 07:44:40 +00:00
Rainer Killinger
f0a45d1b8e fix: performance degradation when scrolling 2021-06-01 07:44:40 +00:00
openstappsbot
1a6f816b66 refactor: update all 2021-06-01 07:10:49 +00:00
openstappsbot
d69ac01bbf refactor: update all 2021-06-01 07:09:42 +00:00
openstappsbot
dbea099d92 refactor: update all 2021-06-01 07:09:18 +00:00
Jovan Krunić
add690c842 refactor: use ion-img where lazy load needed 2021-06-01 08:56:16 +02:00
Wieland Schöbl
ad0dae46ff fix: fix various typos 2021-05-21 15:35:26 +02:00
Rainer Killinger
a75f3af979 refactor: update dependencies with security issues 2021-05-19 09:50:35 +02:00
Rainer Killinger
af2fd6763d docs: update changelog 2021-05-19 09:37:48 +02:00
Rainer Killinger
124e3754fd 0.9.0 2021-05-19 09:37:47 +02:00
Rainer Killinger
aedeab30f2 refactor: update dependencies 2021-05-19 09:37:20 +02:00
Rainer Killinger
3c582cebc6 docs: update changelog 2021-05-18 20:11:55 +02:00
Rainer Killinger
e486d25537 0.7.0 2021-05-18 20:11:50 +02:00
Jovan Krunić
9621d2528d refactor: use local test files for e2e test 2021-05-14 14:28:41 +02:00
Wieland Schöbl
47f3232f15 feat: add support for new availability filter 2021-05-14 14:28:41 +02:00
openstappsbot
308965a2fa refactor: update all 2021-05-13 07:10:59 +00:00
wulkanat@gmail.com
90fc78c142 docs: update changelog 2021-05-12 16:26:11 +02:00
wulkanat@gmail.com
c213df6724 0.21.0 2021-05-12 16:26:04 +02:00
Wieland Schöbl
74298065e0 feat: add support for non-external premaps 2021-05-12 14:06:13 +00:00
openstappsbot
6f1820ff91 refactor: update all 2021-05-10 07:11:03 +00:00
openstappsbot
98cfcab15a refactor: update all 2021-04-28 07:11:38 +00:00
Jovan Krunić
f8a51b9828 test: remove old gitlab reference
Closes #3
2021-04-27 15:53:08 +02:00
Rainer Killinger
1591c38c0a docs: update changelog 2021-04-27 15:40:34 +02:00
Rainer Killinger
810c3027ea 0.3.0 2021-04-27 15:40:34 +02:00
Rainer Killinger
c12fa6f4e6 ci: clean up docker image tags 2021-04-27 15:40:33 +02:00
openstappsbot
8e88b7241a refactor: update all 2021-04-27 15:30:15 +02:00
Jovan Krunić
a1c02dadfc build: update node types (v10 -> v14) 2021-04-27 15:30:15 +02:00
Rainer Killinger
9712b5ebc3 docs: update changelog 2021-04-27 15:30:14 +02:00
Rainer Killinger
a63668ce74 0.2.0 2021-04-27 15:30:14 +02:00
Rainer Killinger
61ad5abc2b fix: deny PUT method requests 2021-04-27 15:30:14 +02:00
Rainer Killinger
fa76d9e356 docs: update changelog 2021-04-27 15:30:13 +02:00
Rainer Killinger
90301517c2 0.1.0 2021-04-27 15:30:13 +02:00
Rainer Killinger
b97aeaf5df docs: clarify README 2021-04-27 15:30:13 +02:00
Rainer Killinger
bf3dee067b ci: move audits to audit stage and update 2021-04-27 15:30:12 +02:00
Rainer Killinger
90eb22509a refactor: update package.json meta data 2021-04-27 15:30:12 +02:00
Rainer Killinger
96741f3789 fix: remove superfluous visible routes
Closes #10
2021-04-27 15:30:11 +02:00
Rainer Killinger
59db3b5c50 feat: accept PUT method 2021-04-27 15:30:11 +02:00
Michel Jonathan Schmitz
56cd8d2ab7 docs: update contributors 2021-04-27 15:30:11 +02:00
Michel Jonathan Schmitz
578fd58cd9 ci: update ci 2021-04-27 15:30:10 +02:00
Michel Jonathan Schmitz
994d6c1e6b docs: update readme 2021-04-27 15:30:10 +02:00
Michel Jonathan Schmitz
fa041efcbb build: update dependencies 2021-04-27 15:30:10 +02:00
Michel Jonathan Schmitz
da59fcbfa8 ci: update ci jobs 2021-04-27 15:30:09 +02:00
Michel Jonathan Schmitz
ae7a879e64 build: assign root user in the image 2021-04-27 15:30:09 +02:00
Michel Jonathan Schmitz
c54aa25f34 feat: add systemd service examples 2021-04-27 15:30:08 +02:00
Michel Jonathan Schmitz
053a6ce23f refactor: update dependencies 2021-04-27 15:30:05 +02:00
Michel Jonathan Schmitz
9512bca329 refactor: update project config files 2021-04-27 15:27:47 +02:00
Michel Jonathan Schmitz
30a2d3dcf4 docs: update gitlab links 2021-04-27 15:27:46 +02:00
Rainer Killinger
bf5eeb6a5a docs: add ssl setup instructions to README.md 2021-04-27 15:27:46 +02:00
Rainer Killinger
b624ed3426 fix: remove reasons of linting errors 2021-04-27 15:27:46 +02:00
Rainer Killinger
8fe6a2795f fix: increase nginx transport security 2021-04-27 15:27:45 +02:00
Rainer Killinger
5f969c53f6 ci: add test job for building the docker image 2021-04-27 15:27:45 +02:00
Karl-Philipp Wulfert
b3ee587831 docs: add license
Fixes #6
2021-04-27 15:27:44 +02:00
Karl-Philipp Wulfert
8f10626e52 build: update dependencies 2021-04-27 15:23:44 +02:00
Karl-Philipp Wulfert
ab9168cb24 ci: make npm install explicit for jobs that need it 2021-04-27 15:23:44 +02:00
Anselm Rochus Stordeur
f59cc5832c fix: fix ci job dependencies and caching 2021-04-27 15:23:43 +02:00
Anselm Rochus Stordeur
9637574071 feat: add issues templates
Fixes #4
2021-04-27 15:23:43 +02:00
Anselm Stordeur
9144a4a031 ci: fix docker image name 2021-04-27 15:23:43 +02:00
Anselm Stordeur
9ded905fbd ci: only install dependencies for build job 2021-04-27 15:23:42 +02:00
Anselm Stordeur
61c5ba6747 ci: use builder image for publish job 2021-04-27 15:23:42 +02:00
Anselm Stordeur
fbe1a65cd1 feat: add proxy 2021-04-27 15:23:41 +02:00
Rainer Killinger
4ead266a07 docs: update changelog 2021-04-27 13:38:01 +02:00
Rainer Killinger
6f377264e9 0.28.0 2021-04-27 13:38:00 +02:00
Rainer Killinger
334f5a7507 refactor: remove legacy callbacks from bulk storage 2021-04-27 13:03:40 +02:00
openstappsbot
7424ad9831 refactor: update all 2021-04-27 13:02:13 +02:00
Jovan Krunić
df69bfd95f refactor: remove geoLocation from the backend config
Closes #87
2021-04-27 13:02:12 +02:00
Wieland Schöbl
650b5c1ed3 test: change integration test docker tag 2021-04-27 13:02:12 +02:00
Wieland Schöbl
de60311bd0 feat: add support for multiple values in value filter 2021-04-27 13:02:12 +02:00
Rainer Killinger
15ac0e2f59 refactor: update @types/node for node version 14 2021-04-27 13:02:11 +02:00
openstappsbot
ab30ad76c1 refactor: update all 2021-04-27 13:02:11 +02:00
Jovan Krunić
1d5f99b1fa fix: remove onlyOnTypes from mustMatch
- Execute sort on all types (results include only
types that are possible to sort)

- mustMatch filters types with and AND (e.g. a type
that can be sorted by distance must be building and
room and point of interest)

Closes #83
2021-04-27 13:02:10 +02:00
Jovan Krunić
9488451080 fix: wrong way alias names are generated
Closes #79
2021-04-27 13:02:10 +02:00
openstappsbot
ff9fb49deb refactor: update all 2021-04-27 13:02:09 +02:00
Jovan Krunić
31acec2a05 build: update openstapps libraries
Closes #82
2021-04-27 13:02:09 +02:00
Wieland Schöbl
dc169746e7 feat: add support for range filters 2021-04-27 13:02:08 +02:00
Wieland Schöbl
dcf7906f79 feat: add support for range filters 2021-04-27 13:02:08 +02:00
Wieland Schöbl
785813c3fb feat: add schedule route 2021-04-27 13:02:08 +02:00
Jovan Krunić
e2b4b0467d Revert "refactor: remove canteen menu item until app module ready"
This reverts commit 7988737d286725f84b50abdbe201fe71f83198bf
2021-04-27 13:02:07 +02:00
Jovan Krunić
570d7bac7c refactor: remove canteen menu item until app module ready 2021-04-27 13:02:07 +02:00
Jovan Krunić
b74e056826 refactor: update default (f-u) config
Closes #76
2021-04-27 13:02:07 +02:00
Jovan Krunić
26f3f4620b refactor: enter Goethe-Uni data (f-u) 2021-04-27 13:02:06 +02:00
Jovan Krunić
32c8a2149a fix: stapps core version in config
Closes #74
2021-04-27 13:02:06 +02:00
Jovan Krunić
e59689e94c build: fix nested dependencies (npm audit fix) 2021-04-27 13:02:06 +02:00
Jovan Krunić
2259da317a fix: error thrown on consecutive connector executions
Fixes #73
2021-04-27 13:02:05 +02:00
Jovan Krunić
18359fdab3 build: update test related packages
- Replace deprecated mocha-typescript with @testdeck/mocha
- Update other test related packages to their latest versions

See !41
2021-04-27 13:02:05 +02:00
Jovan Krunić
948ec1848f build: suppress logger outputs for unit tests
See !41
2021-04-27 13:02:04 +02:00
Jovan Krunić
5eefa3c2e1 test: add missing storage and notification tests
Closes #31
2021-04-27 13:02:04 +02:00
Jovan Krunić
fe7dd09d7e refactor: parameterize configureApp function (inject db list)
Reason: easier testing (mocking) and better readability

Note: did additional refactoring
2021-04-27 13:02:03 +02:00
Jovan Krunić
f3b86f0f0d refactor: add destroy method (for testing) for backend transport
Additionally fix minor issues and refactor the class
2021-04-27 13:02:02 +02:00
Jovan Krunić
dd6ea1c6f3 refactor: move repetitive code into a new method in mailQueue 2021-04-27 13:01:45 +02:00
Jovan Krunić
af305aa196 refactor: remove unneeded code (see elasticsearch constructor) 2021-04-27 13:01:45 +02:00
Jovan Krunić
7a9f3eaca4 fix: invalid monthly cron execution time
Note: did additional refactoring
2021-04-27 13:01:44 +02:00
Jovan Krunić
80e62496f0 fix: use specific time from filter if defined 2021-04-27 13:01:44 +02:00
Jovan Krunić
8dbb3ca19a refactor: provide 'onlyOnType' facet field only if defined 2021-04-27 13:01:44 +02:00
Jovan Krunić
7d4c27ec26 test: set total coverage requirements to 85% 2021-04-27 13:01:43 +02:00
Jovan Krunić
3a7cc8d7c1 refactor: use express method to check request content type 2021-04-27 13:01:43 +02:00
Jovan Krunić
60b689f28c refactor: remove unused code 2021-04-27 13:01:43 +02:00
Jovan Krunić
d3955b3cdd test: add tests for routes 2021-04-27 13:01:42 +02:00
Jovan Krunić
751693bebc build: update @openstapps dependencies 2021-04-27 13:01:42 +02:00
Jovan Krunić
81cfd0986f refactor: remove unused express variable (port) 2021-04-27 13:01:41 +02:00
Wieland Schöbl
9f4350eea7 refactor: swap out jsonschema package for json-schema 2021-04-27 13:01:41 +02:00
Jovan Krunić
006bbebe60 feat: log registration and removal of plugins
Closes #71
2021-04-27 13:01:41 +02:00
Jovan Krunić
5ff16c1005 refactor: avoid duplicate/unneeded code (search for objects by UID)
Related to #70
2021-04-27 13:01:40 +02:00
Jovan Krunić
e165837a15 fix: properly check if an object exists before update
Closes #70
2021-04-27 13:01:40 +02:00
Rainer Killinger
0c43be2dbe refactor: omit useless facets in response 2021-04-27 13:01:40 +02:00
Rainer Killinger
24a91229f2 fix: enhance default search query generation 2021-04-27 13:01:39 +02:00
Frank Nagel
677be5173d ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2021-04-27 13:01:39 +02:00
Rainer Killinger
ce06e735be feat: utilize api-cli for e2e integration test 2021-04-27 13:01:39 +02:00
Rainer Killinger
bbbe4d5f1f refactor: update dependencies 2021-04-27 13:01:38 +02:00
Rainer Killinger
21710ee492 docs: remove outdated info 2021-04-27 13:01:38 +02:00
Michel Jonathan Schmitz
6483221b62 feat: move up and enable cors 2021-04-27 13:01:37 +02:00
Rainer Killinger
c61c37dc27 ci: cleanup and add image tag of core version 2021-04-27 13:01:37 +02:00
Frank Nagel
23eb1e2263 feat: Add start-debug npm run script
which requires ts-node/register
2021-04-27 13:01:37 +02:00
Frank Nagel
4cfb560954 fix: Don't force Mapping generation with 'npm start' 2021-04-27 13:01:36 +02:00
Wieland Schöbl
4a64f26e43 feat: add routes doc generation to npm documentation script 2021-04-27 13:01:36 +02:00
Rainer Killinger
c2728b2a1d refactor: move template/aggregation generation 2021-04-27 13:01:36 +02:00
Wieland Schöbl
b629d058eb feat: allow for searching illegal elasticsearch characters 2021-04-27 13:01:35 +02:00
Wieland Schöbl
1bad092185 feat: use new Elasticsearch package 2021-04-27 13:01:35 +02:00
Sebastian Lange
54301ae8fb feat: add default app settings and menus 2021-04-27 13:01:35 +02:00
Wieland Schöbl
ba2c6f655c feat: make backend work with automatically generated aggregations 2021-04-27 13:01:34 +02:00
Rainer Killinger
496e6c5bd0 fix: esacpe mappin template filename 2021-04-27 13:01:34 +02:00
Wieland Schöbl
4ac6987813 refactor: move mappingIgnoredTags into config file 2021-04-27 13:01:33 +02:00
Wieland Schöbl
13938ecf21 feat: boost academic terms dynamically 2021-04-27 13:01:33 +02:00
Wieland Schöbl
afd324fc6a build: change .gitkeep in templates folder to .gitignore 2021-04-27 13:01:33 +02:00
Wieland Schöbl
d917627d58 fix: make facets work again 2021-04-27 13:01:32 +02:00
Wieland Schöbl
5d6d4b53f0 feat: move EXTERNAL_REQUEST_TIMEOUT to config file 2021-04-27 13:01:32 +02:00
Wieland Schöbl
8eab6b8531 feat: add support for generated elasticsearch mappings
Fixes #38
2021-04-27 13:01:31 +02:00
Jovan Krunić
7e04fad28b ci: remove docker tags where they are not needed 2021-04-27 13:01:31 +02:00
Jovan Krunić
b98418f9e1 ci: run tests in tests job 2021-04-27 13:01:31 +02:00
Jovan Krunić
3ea2c3b98d refactor: throw an error when removing a non-existing plugin
Related to #2
2021-04-27 13:01:30 +02:00
Jovan Krunić
992a0a6f2c build: update @openstapps/core version
Adjust code accordingly

Related to #2
2021-04-27 13:01:30 +02:00
Jovan Krunić
3d51ccfac2 feat: add functionality to register plugins via http
Also:

- Add functionality for serving the responses from plugins
- Add tests for related methods and routes

Closes #2, #37
2021-04-27 13:01:30 +02:00
Jovan Krunić
59ea7a5ba6 refactor: avoid automatic execution of app.ts
Move the execution of configureApp to CLI file

Related to #2
2021-04-27 13:01:29 +02:00
Jovan Krunić
9adc0b88d7 docs: add missing inline docs for elasticsearch related interfaces
Closes #41
2021-04-27 13:01:29 +02:00
Michel Jonathan Schmitz
90187ce936 refactor: remove redundant condition 2021-04-27 13:01:29 +02:00
Michel Jonathan Schmitz
0cbf9b26a9 fix: apply correct types and tslint rules 2021-04-27 13:01:28 +02:00
Michel Jonathan Schmitz
9db091c26f build: update dependencies 2021-04-27 13:01:28 +02:00
Wieland Schöbl
fc4f16ac44 ci: add automatic publishing of documentation 2021-04-27 13:01:27 +02:00
Jovan Krunić
684d52c917 build: remove unused dependencies 2021-04-27 13:01:27 +02:00
Jovan Krunić
f4a699e0e5 refactor: use generics for createRoute (no-any)
Related to #39
2021-04-27 13:01:27 +02:00
Jovan Krunić
8b457c9911 refactor: adjust code after updated dependencies
Closes #39
2021-04-27 13:01:26 +02:00
Jovan Krunić
42c7350c36 build: update dependencies
Related to #39
2021-04-27 13:01:26 +02:00
Michel Jonathan Schmitz
dd4be92f90 feat: add boosting to context based search 2021-04-27 13:01:26 +02:00
Wieland Schöbl
67c814443c ci: allow audit to fail 2021-04-27 13:01:25 +02:00
Wieland Schöbl
fa2c9d7a88 fix: make index route work correctly 2021-04-27 13:01:25 +02:00
Wieland Schöbl
24e27c1d9e fix: return validation error instead of internal server error
previously there was just a validation error inside an internal server error, which made no sense
2021-04-27 13:01:25 +02:00
Wieland Schöbl
59e4009c5d refactor: use export global variables instead of express 2021-04-27 13:01:24 +02:00
Wieland Schöbl
8c48552abf fix: replace isProductiveEnvironment with isTestEnvironment 2021-04-27 13:01:24 +02:00
Sebastian Lange
2f13010480 feat: adjust to changes of SCFacet in core v0.12.0
Closes #30
2021-04-27 13:01:24 +02:00
Wieland Schöbl
6f7e23df20 fix: automatically remove invalid characters for aliases generated from index names 2021-04-27 13:01:23 +02:00
Rainer Killinger
a1c14e8e6f ci: fix missing docker service in manual deploy jobs 2021-04-27 13:01:23 +02:00
Jovan Krunić
e17db521e2 fix: set config file before accessing it
Closes #27
2021-04-27 13:01:22 +02:00
Wieland Schöbl
d110d60123 feat: use config file for maxRequestBodySize
closes !20
2021-04-27 13:01:22 +02:00
Wieland Schöbl
eabd885cd4 docs: added some inline comments 2021-04-27 13:01:22 +02:00
Wieland Schöbl
e70e50a1ea fix: use SCRequestBodyTooLargeError
fixes #20
2021-04-27 13:01:21 +02:00
Wieland Schöbl
12b71ba1f1 fix: return syntax error when receiving bad json
Fixes #3
2021-04-27 13:01:21 +02:00
Wieland Schöbl
f11376ecf8 fix: make config compatible with core, update database version 2021-04-27 13:01:21 +02:00
Wieland Schöbl
827827905b feat: use config for MultiSearchRoute 2021-04-27 13:01:20 +02:00
Karl-Philipp Wulfert
2b894bd1b6 build: update @openstapps/core-tools 2021-04-27 13:01:20 +02:00
Karl-Philipp Wulfert
b67ec14573 ci: generate and publish documentation 2021-04-27 13:01:20 +02:00
Karl-Philipp Wulfert
8be85536eb build: update configuration files 2021-04-27 13:01:19 +02:00
Karl-Philipp Wulfert
a91277c502 build: add typedoc 2021-04-27 13:01:19 +02:00
Karl-Philipp Wulfert
2b6707e369 build: add .npmignore from configuration 2021-04-27 13:01:19 +02:00
Anselm Stordeur
9b889c8736 fix: fix reading url path as parameters 2021-04-27 13:01:18 +02:00
Anselm Stordeur
30082f8726 fix: wait for config file validation 2021-04-27 13:01:18 +02:00
Anselm Stordeur
90822f5888 fix: add prefix to schema names 2021-04-27 13:01:18 +02:00
Anselm Stordeur
d95436c733 ci: add services tag for docker:dind 2021-04-27 13:01:17 +02:00
Anselm Stordeur
6ceb763b5a build: update dependencies 2021-04-27 13:01:17 +02:00
Anselm Stordeur
98f02b8830 style: remove extraneous whitespace in imports 2021-04-27 13:01:16 +02:00
Anselm Stordeur
16bbb7e9e3 feat: add backend 2021-04-27 13:01:14 +02:00
Rainer Killinger
a599c87384 refactor: update dependencies 2021-04-26 13:19:14 +02:00
Rainer Killinger
89bbb4ecf5 docs: update changelog 2021-04-26 10:26:42 +02:00
Rainer Killinger
1e75b1d1bf 0.20.0 2021-04-26 10:26:41 +02:00
Jovan Krunić
1d94dd5bf3 build: add simple script for building for android
Closes #100
2021-04-20 10:23:40 +00:00
Rainer Killinger
f0df58695d refactor: update dependencies 2021-04-19 19:40:43 +02:00
Rainer Killinger
7ba8233f5b feat: add filterable annotation option for integer 2021-04-19 19:25:58 +02:00
Jovan Krunić
3da7c7d009 refactor: remove geoLocation from settings
Closes #99
2021-04-19 16:49:45 +02:00
Jovan Krunić
7928534d88 fix: typo in translation 2021-04-16 15:48:58 +02:00
Jovan Krunić
a8f22c1e96 refactor: make data list reusable component
Closes #98
2021-04-16 15:48:57 +02:00
openstappsbot
223de443a3 refactor: update all 2021-04-16 07:11:36 +00:00
Rainer Killinger
6312e47796 ci: update renovate bot, move setup into gitlab-ci.yml 2021-04-13 13:27:48 +02:00
Jovan Krunić
64fde65859 build: update node types (v10 -> v14) 2021-04-12 11:24:44 +02:00
Jovan Krunić
1f6b314a8f build: update node types (v10 -> v14) 2021-04-12 11:20:43 +02:00
Jovan Krunić
0bc95ca4ed build: update node types (10 -> 14) 2021-04-12 11:13:31 +02:00
Jovan Krunić
c97ecd698c build: update cordova engines versions 2021-04-08 13:40:57 +00:00
Jovan Krunić
0f46811175 build: enable AndroidX (add adapter for legacy) 2021-04-08 13:40:57 +00:00
Jovan Krunić
f725732772 build: create tmp project outside of app directory
- Otherwise it creates app's apk and not apk from
the tmp project
2021-04-08 13:40:57 +00:00
Jovan Krunić
dca6287b90 build: update incompatible minSdkVersion (19 -> 22) 2021-04-08 13:40:57 +00:00
Jovan Krunić
3fc7c781ec refactor: use npm script for serve in docker 2021-04-08 13:40:57 +00:00
Jovan Krunić
4e367254c2 build: add cordova resources tool 2021-04-08 13:40:57 +00:00
Jovan Krunić
f432f27c64 refactor: remove generated resources
They need to be generated only on demand and not kept in
git.
2021-04-08 13:40:57 +00:00
Jovan Krunić
bb9ad9a957 build: use latest cordova (v10) 2021-04-08 13:40:57 +00:00
Jovan Krunić
2c08a1cefd docs: add contributors to package.json 2021-04-07 14:32:38 +02:00
openstappsbot
9566f7aa0a refactor: update all 2021-04-07 12:27:50 +00:00
Jovan Krunić
025335432d build: clean up package.json
- Remove non-existing homepage
- Make package versions fixed
2021-04-07 14:27:07 +02:00
Jovan Krunić
9f71e46f66 build: update node types to v14
Closes #96
2021-04-07 14:23:07 +02:00
Wieland Schöbl
c75ca68c44 feat: add "no results" screen to search 2021-04-07 10:05:20 +02:00
Rainer Killinger
ebc8a3bc39 docs: update changelog 2021-04-06 17:51:56 +02:00
Rainer Killinger
bea4face58 0.19.0 2021-04-06 17:51:54 +02:00
Rainer Killinger
6b66e92d61 refactor: update @openstapps dependencies 2021-04-06 17:50:21 +02:00
Rainer Killinger
78e7d7456b docs: update changelog 2021-04-06 16:30:31 +02:00
Rainer Killinger
822823ea1a 0.6.0 2021-04-06 16:30:30 +02:00
Rainer Killinger
2df53fcd95 refactor: bump version to match npmjs release 2021-04-06 16:30:10 +02:00
Rainer Killinger
e6bc84adf5 refactor: update @openstapps dependencies 2021-04-06 16:26:42 +02:00
Rainer Killinger
f7113400d7 docs: update changelog 2021-04-06 16:20:27 +02:00
Rainer Killinger
2fe9f51460 0.27.0 2021-04-06 16:20:23 +02:00
Rainer Killinger
30d2108634 refactor: update @types/node for node version 14 2021-04-06 16:05:12 +02:00
Rainer Killinger
088beb8c11 refactor: update @types/node for node version 14 2021-04-06 15:37:52 +02:00
Rainer Killinger
af965bce7a refactor: update @types/node for node version 14 2021-04-06 14:53:34 +02:00
Rainer Killinger
52a058c2df refactor: update @types/node for node version 14 2021-04-06 14:47:13 +02:00
Rainer Killinger
55be9d4d4e refactor: use i18n in every data component 2021-03-31 11:11:05 +02:00
Jovan Krunić
cd191e09da refactor: update node types from v10 to v14 2021-03-30 17:16:41 +02:00
Jovan Krunić
2dbbea8992 ci: update node from v10 to v14
Closes #29
2021-03-29 17:01:26 +02:00
openstappsbot
33bde7d3df refactor: update all 2021-03-29 16:34:20 +02:00
openstappsbot
b372e6886b refactor: add renovate.json
refactor: update renovate/renovate docker tag to v24.97.1

refactor: update all
2021-03-29 13:37:14 +02:00
openstappsbot
d61be19a18 refactor: update all 2021-03-29 04:13:55 +00:00
Jovan Krunić
87099a3a0a docs: update changelog 2021-03-24 17:01:04 +01:00
Jovan Krunić
f3a5a99f23 0.18.0 2021-03-24 17:01:03 +01:00
Wieland Schöbl
724a6866c8 feat: make Point type sortable in Elasticsearch 2021-03-24 08:44:23 +01:00
Jovan Krunić
1a8660590f style: improve design and add logo
- show data icons in thumbnails in data list items
- add app logo
- fix various visibility issues
2021-03-23 15:59:58 +00:00
Rainer Killinger
8b0978c7eb refactor: clean up settings.provider 2021-03-16 12:32:28 +01:00
Rainer Killinger
550b376a97 refactor: use APP_INITIALIZER for settings init 2021-03-16 12:31:19 +01:00
Rainer Killinger
7d471409cb ci: default to runner with performance tag 2021-03-15 14:42:21 +01:00
Rainer Killinger
5a4d63dedd build: revert package-lock.json version 2021-03-15 14:42:20 +01:00
Rainer Killinger
82bad1d3f2 test: add ThingTranslateService to app testbed 2021-03-15 14:42:20 +01:00
Rainer Killinger
e9978a2d93 refactor: update openstapps/api 2021-03-15 14:42:19 +01:00
Rainer Killinger
ccf8b1a5cc fix: setting of default language 2021-03-15 14:42:15 +01:00
Rainer Killinger
350185b0d3 refactor: i18n for settings module 2021-03-15 14:30:14 +01:00
Rainer Killinger
abf7595c03 refactor: i18n for dish item listings and details 2021-03-15 14:30:14 +01:00
Rainer Killinger
3d4c476549 refactor: update to recent changes in translator 2021-03-15 14:30:09 +01:00
Rainer Killinger
42384f0ed0 docs: update changelog 2021-03-08 12:25:54 +01:00
Rainer Killinger
0219d0571b 0.27.0 2021-03-08 12:25:52 +01:00
Rainer Killinger
8043752146 build: update package-lock.json 2021-03-08 12:25:29 +01:00
Jovan Krunić
29cd22f2d1 fix: send valid JSON on bulk/done
Closes #38
2021-03-03 17:54:05 +01:00
Rainer Killinger
0a3a2dc2ec ci: introduce renovate and clean up gitlab-ci.yml 2021-03-01 10:20:56 +01:00
Rainer Killinger
456560026c feat: add service and pipe for core translator 2021-02-24 11:11:14 +01:00
Wieland Schöbl
e3d9ef40cc feat: add not found screen 2021-02-23 16:56:41 +01:00
Rainer Killinger
5abdd9f98f docs: update changelog 2021-02-23 12:18:11 +01:00
Rainer Killinger
327e49ec88 0.26.0 2021-02-23 12:18:07 +01:00
openstappsbot
13857cd66e refactor: update all 2021-02-23 11:10:31 +00:00
Rainer Killinger
e17bfa9d77 refactor: use reviewer assigning of gitlab 13.2 2021-02-23 11:20:58 +01:00
Rainer Killinger
d63c355601 docs: update changelog 2021-02-22 10:26:48 +01:00
Rainer Killinger
190e7c7b60 0.26.0 2021-02-22 10:26:47 +01:00
Rainer Killinger
f13a9a2036 refactor: update copyright year calculation 2021-02-22 10:23:39 +01:00
Rainer Killinger
a87969813f refactor: update dependencies 2021-02-22 10:20:30 +01:00
Jovan Krunić
0641ab12c8 build: use en_US as locale 2021-02-10 06:56:31 +00:00
Jovan Krunić
5790bec724 build: update cordova dependencies 2021-02-10 06:56:31 +00:00
Jovan Krunić
b4bed4e834 build: update android sdk (use api 30) 2021-02-10 06:56:31 +00:00
Jovan Krunić
7b767001ad build: fix/update the angular devkit tools 2021-02-10 06:56:31 +00:00
Jovan Krunić
65c0f12c1c build: optimize the Dockerfile 2021-02-10 06:56:31 +00:00
Jovan Krunić
c10ae803d1 build: update ionic and cordova 2021-02-10 06:56:30 +00:00
Jovan Krunić
f4b6eb35e9 build: use correct ionic cli package 2021-02-10 06:56:30 +00:00
Jovan Krunić
3e93ae7363 build: update node to v14 2021-02-10 06:56:30 +00:00
Jovan Krunić
68303e1f09 build: update ubuntu version in docker image 2021-02-10 06:56:30 +00:00
Michel Jonathan Schmitz
6ca0b97637 fix: use localized date and time 2021-02-09 16:59:50 +00:00
Wieland Schöbl
8280917312 build: add ionic serve --external to scripts 2021-02-05 15:08:08 +01:00
Wieland Schöbl
33397e90fe test: add date mapping tests 2021-02-01 14:47:50 +01:00
Jovan Krunić
bb94c71761 feat: use school-neutral news image fallback via css 2021-01-30 16:29:50 +01:00
Jovan Krunić
1f3d9ad5f0 feat: refresh on pull for news module 2021-01-29 11:36:38 +01:00
Jovan Krunić
22cd0af1bf feat: news module 2021-01-29 11:36:37 +01:00
Wieland Schöbl
3c079cd189 feat: show menu for multiple days for canteens and cafes
Closes #19, #79
2021-01-19 13:50:51 +00:00
Rainer Killinger
2796fd8ec9 refactor: update & disable tidy label instructions 2021-01-18 14:58:09 +01:00
Rainer Killinger
02178d5a5e refactor: update dependencies 2021-01-18 14:55:28 +01:00
Jovan Krunić
9a939e9ccd refactor: replace deprecated request library with got
Closes #35
2020-12-17 10:38:30 +01:00
Jovan Krunić
62a739048c docs: update changelog 2020-12-02 15:42:02 +01:00
Jovan Krunić
2c6ac1abd6 0.17.0 2020-12-02 15:42:01 +01:00
Wieland Schöbl
058de208db test: add type alias annotation test 2020-11-30 17:21:12 +01:00
Jovan Krunić
66b8720da0 fix: use stapps core version to compare with backends' core version
Note: not app version (e.g. 2.0.0).

Closes #77
2020-11-27 16:11:14 +01:00
Jovan Krunić
072204b748 docs: fix and adjust the README file 2020-11-26 10:11:46 +01:00
Jovan Krunić
bba0964fae refactor: use ionic instead of angular-cli for start scripts 2020-11-26 10:11:43 +01:00
Jovan Krunić
b0cd37732e ci: use real backend instead of fake backend for web reviews
Closes #75
2020-11-25 17:22:17 +01:00
Jovan Krunić
6647750a6c refactor: use new backend version (2.x.x)
Close #74
2020-11-25 15:36:59 +01:00
Rainer Killinger
c326929415 cI: update and extend gitlab-ci.yml 2020-11-23 18:54:59 +01:00
Rainer Killinger
7e23941d0b refactor: adhere to configuartion suggestions 2020-11-23 18:45:04 +01:00
Wieland Schöbl
c22957efe3 build: update dependencies 2020-11-23 18:12:03 +01:00
Wieland Schöbl
abdd62a4db test: change mocha-typescript to @testdeck/mocha 2020-11-23 12:57:49 +01:00
Wieland Schöbl
a09be1d941 feat: add support for date mapping 2020-11-23 12:37:47 +01:00
Rainer Killinger
0d649a30cf ci: remove caching of node_modules 2020-11-23 10:19:11 +01:00
Rainer Killinger
84921ad5ce feat: make slack notification optional 2020-11-23 10:19:10 +01:00
Rainer Killinger
ccb1b56a0f docs: fix markdown errors and update 2020-11-23 10:19:06 +01:00
Jovan Krunić
987f9d45f5 refactor: use ngx-logger instead of @openstapps/logger
Closes #71
2020-11-17 15:19:23 +01:00
Wieland Schöbl
485430b7f2 feat: add support for @inheritTags 2020-11-11 10:05:12 +01:00
Rainer Killinger
5f34bc900c refactor: omit assigne self reference 2020-11-09 11:49:26 +01:00
Rainer Killinger
bc2b0ce136 refactor: update dependencies 2020-11-09 11:49:24 +01:00
Rainer Killinger
dfc0a3aed9 docs: update changelog 2020-11-09 10:57:05 +01:00
Rainer Killinger
2cd2513f64 0.25.0 2020-11-09 10:57:04 +01:00
Jovan Krunić
9067d7d6cf docs: update changelog 2020-11-09 10:45:21 +01:00
Jovan Krunić
f0c54777eb 0.24.0 2020-11-09 10:45:21 +01:00
Michel Jonathan Schmitz
c8ceefda80 ci: remove caching 2020-11-09 10:45:12 +01:00
Michel Jonathan Schmitz
b6d83089d5 refactor: update dependencies 2020-11-09 10:14:54 +01:00
Rainer Killinger
49ff960616 refactor: change CI caching to before_script 2020-11-04 13:13:40 +01:00
Jovan Krunić
f7790426cd fix: adjust code to overcome the breaking changes (ionic 4 to 5)
Closes #70
2020-11-03 17:29:58 +01:00
Michel Jonathan Schmitz
2822aac652 build: update dependencies 2020-11-02 09:35:49 +01:00
Jovan Krunić
2e8d717607 refactor: adjust code after upgrade of ionic from v4 to v5
Note: used observables instead of events service which
doesn't exist in ionic 5 anymore.
2020-10-29 12:12:06 +01:00
Rainer Killinger
97f6c42407 docs: update changelog 2020-10-28 18:47:44 +01:00
Rainer Killinger
732d60883e 0.16.0 2020-10-28 18:47:39 +01:00
Wieland Schöbl
5330255b7e refactor: update dependencies and fix resulting errors
Upgraded JSON Schema from version 6 to version 7
Upgraded TypeDoc version to latest
Replaced 'jsonschema' with 'json-schema' package to better comply with 'ts-json-schema-generator'
Replace JSON Schema validation with AJV in areas where it wasn't used previously
Removed commander help output as it causes strange issues
2020-10-28 16:56:23 +01:00
Jovan Krunić
cc357f36b6 build: upgrade to angular 9 2020-10-27 18:08:51 +01:00
Jovan Krunić
06e5226bbf build: update ngx-markdown 2020-10-27 18:05:16 +01:00
Jovan Krunić
28de70abd3 build: update typescript to 3.8.x 2020-10-27 17:55:35 +01:00
Jovan Krunić
2b88518ca4 build: update typescript to 3.7.x 2020-10-27 17:47:01 +01:00
Jovan Krunić
3dc115eb3a build: update to ionic 5 and angular 8 2020-10-27 17:42:16 +01:00
Jovan Krunić
8b7428d5df build: update api to fix missing req body 2020-10-23 17:07:16 +02:00
Jovan Krunić
92a21052f1 docs: update changelog 2020-10-23 16:58:28 +02:00
Jovan Krunić
8013d73fe4 0.23.0 2020-10-23 16:58:27 +02:00
Rainer Killinger
3f441505c6 docs: update changelog 2020-10-20 11:11:18 +02:00
Rainer Killinger
965637cb9c 0.8.0 2020-10-20 11:11:14 +02:00
Michel Jonathan Schmitz
f2ca308a29 ci: add automatic docker image building 2020-10-20 10:10:02 +02:00
Wieland Schöbl
b7cdb6a9ad fix: use value type in IndexSignature type instead of key type 2020-10-07 02:27:39 +02:00
Jovan Krunić
681cef9260 docs: update changelog 2020-10-05 17:42:51 +02:00
Jovan Krunić
cc22e01e62 0.15.0 2020-10-05 17:42:50 +02:00
Sebastian Lange
1dbf4515fe feat(menu): add context menu
Closes #3
2020-09-30 10:18:52 +02:00
Sebastian Lange
3ce3c9ba16 refactor(menu): refactor main manu 2020-09-30 10:18:52 +02:00
wulkanat@gmail.com
24ea449dd4 test: add aggregations and mapping test 2020-09-29 19:02:13 +02:00
Rainer Killinger
5e06df2e3f ci: remove caching of node_modules 2020-09-29 13:20:40 +02:00
Rainer Killinger
5a0f274be6 ci: update e2e webdriver to used chrome version 2020-09-28 18:06:25 +02:00
Karl-Philipp Wulfert
755a3013a6 feat: add command to copy issues 2020-09-23 15:31:54 +02:00
Karl-Philipp Wulfert
a99fc357fe build: update dependencies 2020-09-21 13:57:06 +02:00
Jovan Krunić
ef47d1085a docs: update changelog 2020-09-17 21:24:59 +02:00
Jovan Krunić
38bb0ed5da 0.25.0 2020-09-17 21:24:58 +02:00
Jovan Krunić
ea606b6313 build: upgrade non-secure package versions
Closes #35
2020-09-14 09:50:45 +02:00
wulkanat@gmail.com
e5511d0738 fix: array tags did not propagate 2020-09-09 11:04:40 +02:00
Jovan Krunić
aa9991ad70 fix: link to old gitlab server
Closes #27
2020-09-08 09:09:32 +00:00
Jovan Krunić
ec15ebe5c5 fix: exclude test dir and its subdirs for tslint
Closes #34
2020-09-08 10:45:46 +02:00
Rainer Killinger
c19fd4fae2 test: fix plant uml connection test cases 2020-08-26 13:09:21 +02:00
Rainer Killinger
7aafb12f6f docs: update changelog 2020-07-27 15:12:54 +02:00
Rainer Killinger
31cd3c6381 0.20.1 2020-07-27 15:12:53 +02:00
Wieland Schoebl
b3e107528b fix: make express parse body 2020-07-17 14:20:11 +02:00
Wieland Schoebl
c6e1f96f5f Merge branch 'master' of gitlab.com:openstapps/minimal-plugin 2020-07-17 11:06:44 +02:00
Wieland Schoebl
96e977b365 fix: should now compile and work 2020-07-15 09:11:40 +02:00
Wieland Schoebl
8d52051cc2 fix: should now compile and work 2020-07-13 16:22:09 +02:00
Rainer Killinger
cd768a9dcd fix: ignore archived projects in milestone tidy 2020-07-08 12:23:35 +02:00
Rainer Killinger
e4c065d505 fix: remove invalid project name element 2020-07-08 12:22:16 +02:00
Frank Nagel
96e5cd3f50 ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:22:44 +02:00
Frank Nagel
7c9e192923 ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:13:53 +02:00
Frank Nagel
8f844ecdeb ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:09:34 +02:00
Frank Nagel
c11b1da9a6 feat: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:09:34 +02:00
Frank Nagel
9a93ea78c3 ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 12:56:41 +02:00
Frank Nagel
25434d54e3 fix: angular1 ng-if leftover 2020-06-02 14:04:08 +02:00
Michel Jonathan Schmitz
770945e0e9 docs: describe how to toggle backends 2020-05-15 17:17:37 +02:00
Michel Jonathan Schmitz
c1d33303aa feat: add backend toggle 2020-05-15 17:17:24 +02:00
Michel Jonathan Schmitz
d2517ae114 ci: add a web configuration 2020-05-15 17:16:40 +02:00
Michel Jonathan Schmitz
1913e89366 docs: update changelog 2020-05-15 09:26:25 +02:00
Michel Jonathan Schmitz
8b8088545b 0.22.0 2020-05-15 09:26:25 +02:00
Rainer Killinger
195958a3b6 refactor: change to current meeting time 2020-05-13 17:36:22 +02:00
Rainer Killinger
f7ffb8525a refactor: update dependencies 2020-05-13 17:36:22 +02:00
Rainer Killinger
65d05bfe69 feat: add merge request assignment 2020-05-13 17:36:04 +02:00
Michel Jonathan Schmitz
9f9167c9c7 test: update test files 2020-05-13 08:47:30 +02:00
Michel Jonathan Schmitz
d30de896f0 feat: add content-type header 2020-05-13 08:47:21 +02:00
Michel Jonathan Schmitz
e0ee3258e4 build: update peer dependency 2020-05-12 13:27:34 +02:00
Michel Jonathan Schmitz
c09ecbb4b5 refactor: use new env-vars 2020-05-06 16:23:24 +02:00
Rainer Killinger
85b3fc4faa docs: update changelog 2020-05-06 14:58:44 +02:00
Rainer Killinger
3713fa7006 0.20.0 2020-05-06 14:58:42 +02:00
Rainer Killinger
a5fa2ccc2e docs: update changelog 2020-05-06 14:22:22 +02:00
Rainer Killinger
7e0a044388 0.7.0 2020-05-06 14:22:17 +02:00
Rainer Killinger
e5c9d06ef8 docs: update changelog 2020-05-06 10:57:32 +02:00
Rainer Killinger
fa2b118545 0.21.0 2020-05-06 10:57:30 +02:00
Rainer Killinger
99a231800c docs: update changelog 2020-05-06 10:55:32 +02:00
Rainer Killinger
393c50a685 0.20.0 2020-05-06 10:55:32 +02:00
Rainer Killinger
3fc0bb0a1f refactor: update dependencies 2020-05-06 10:55:32 +02:00
Rainer Killinger
b98f856b89 ci: cleanup and add image tag with core version 2020-05-06 10:55:24 +02:00
Rainer Killinger
545d62907e refactor: update dependencies 2020-04-14 14:00:49 +02:00
Rainer Killinger
927dcb159b feat: add merge request assignment 2020-04-14 14:00:47 +02:00
Rainer Killinger
6f85885a88 build: update gitlab-ci pipeline 2020-04-14 13:54:41 +02:00
Rainer Killinger
5ea40b2ece feat: change builder base image to docker/compose 2020-04-14 13:54:40 +02:00
Rainer Killinger
9de064756a refactor: update dependencies 2020-03-23 16:32:46 +01:00
Rainer Killinger
edc6e6fad5 feat: add EXIT log level 2020-03-23 16:32:41 +01:00
Rainer Killinger
9ab2510631 refactor: update dependencies 2020-03-11 15:06:11 +01:00
Rainer Killinger
c570d39637 docs: update changelog 2020-03-11 14:52:46 +01:00
Rainer Killinger
5815ad8ffd 0.19.0 2020-03-11 14:52:40 +01:00
Rainer Killinger
4ae968ff0f fix: repair and unify subcommand help outputs 2020-03-10 13:35:13 +01:00
Rainer Killinger
e18858fc58 feat: add option to wait on resource to e2e script 2020-03-10 13:35:13 +01:00
Rainer Killinger
3196cd986e refactor: update dependencies 2020-03-10 13:35:11 +01:00
Rainer Killinger
3fb99ad896 test: add test for log level exclusiveness 2020-03-10 12:49:04 +01:00
Rainer Killinger
100b921488 fix: log level exclusiveness calculation 2020-03-10 12:49:04 +01:00
Rainer Killinger
1b677dd16d docs: update changelog 2020-03-03 16:53:18 +01:00
Rainer Killinger
508f2c39a8 0.24.0 2020-03-03 16:53:14 +01:00
Rainer Killinger
5456d4e7c0 ci: seperate audit jobs from test stage 2020-03-02 15:40:46 +01:00
Rainer Killinger
bcf212d777 refactor: update dependencies, keeping behavior 2020-02-18 11:07:57 +01:00
Rainer Killinger
e3658862ac docs: update changelog 2020-02-11 12:56:44 +01:00
Rainer Killinger
948975f442 0.14.0 2020-02-11 12:56:37 +01:00
Rainer Killinger
b74d56d7c0 refactor: update dependencies 2020-02-10 10:37:18 +01:00
Rainer Killinger
2d30f0575d docs: update changelog 2020-02-10 10:31:47 +01:00
Rainer Killinger
b4131471ea 0.23.0 2020-02-10 10:31:40 +01:00
Rainer Killinger
ed18c74f14 refactor: update dependencies 2020-02-06 13:56:53 +01:00
Rainer Killinger
87b59d84f1 refactor: seperate audit jobs from test stage 2020-02-06 13:22:45 +01:00
Rainer Killinger
c264c2ac36 ci: seperate audit jobs from test stage
Fixes#31
2020-02-06 12:50:51 +01:00
Rainer Killinger
d364df38de docs: update changelog 2020-02-04 16:30:39 +01:00
Rainer Killinger
d45c4b7154 0.18.0 2020-02-04 16:30:28 +01:00
Michel Jonathan Schmitz
9eab730414 0.13.0 2020-01-28 09:15:27 +01:00
Michel Jonathan Schmitz
8b3a8f929b build: update dependencies 2020-01-22 09:22:13 +01:00
Karl-Philipp Wulfert
e6f6412b5b docs: update changelog 2020-01-08 17:49:07 +01:00
Karl-Philipp Wulfert
83831deb68 0.19.0 2020-01-08 17:49:06 +01:00
Karl-Philipp Wulfert
311b62291d build: update dependencies 2020-01-08 17:48:44 +01:00
Karl-Philipp Wulfert
878568c6e6 docs: update changelog 2020-01-08 16:38:37 +01:00
Karl-Philipp Wulfert
8438fa09d3 0.6.1 2020-01-08 16:38:36 +01:00
Karl-Philipp Wulfert
db5645732c fix: use passed method instead of resetting it 2020-01-08 16:32:24 +01:00
Karl-Philipp Wulfert
07b8d2aabf build: update dependencies 2020-01-08 16:31:52 +01:00
Rainer Killinger
466836cfd0 refactor: generalize docker image name 2019-12-10 13:56:19 +01:00
Rainer Killinger
dc79dc8feb feat: extend e2e procedure 2019-12-10 13:38:39 +01:00
Rainer Killinger
91de58b5ae refactor: update dependencies 2019-12-10 13:38:29 +01:00
Wieland Schöbl
25a795bc91 docs: update changelog 2019-12-03 11:21:24 +01:00
Wieland Schöbl
3dc48aad7e 0.12.0 2019-12-03 11:21:23 +01:00
Wieland Schöbl
8f5570e2e2 fix: make fields with index signatures a dynamic mapping 2019-11-29 14:08:21 +01:00
Sebastian Lange
49b7c6d383 refactor(setting): adjust setting module to new core translation
Closes #53
2019-11-27 20:56:47 +01:00
Karl-Philipp Wulfert
62972f13bd docs: update changelog 2019-11-25 14:47:12 +01:00
Karl-Philipp Wulfert
3e036e1560 0.18.0 2019-11-25 14:47:11 +01:00
Karl-Philipp Wulfert
240052cba8 refactor: adjust code to updated dependencies 2019-11-25 14:46:07 +01:00
Karl-Philipp Wulfert
554cbfa110 refactor: explicitly instantiate commander 2019-11-25 14:42:22 +01:00
Karl-Philipp Wulfert
25ff38ef24 build: update dependencies 2019-11-25 14:42:16 +01:00
Karl-Philipp Wulfert
3bf0939599 docs: update changelog 2019-11-25 14:29:17 +01:00
Karl-Philipp Wulfert
a187471f4b 0.22.0 2019-11-25 14:29:17 +01:00
Karl-Philipp Wulfert
0c7b447b93 build: remove install hook 2019-11-25 14:26:51 +01:00
Karl-Philipp Wulfert
c9c8a64c0e refactor: adjust code to updated dependencies 2019-11-25 14:23:36 +01:00
Karl-Philipp Wulfert
90513868c5 build: update dependencies 2019-11-25 14:23:20 +01:00
Rainer Killinger
24dbb42b34 fix: fixate webdriver to match used chrome version 2019-11-20 13:35:56 +01:00
Karl-Philipp Wulfert
2c32b58af3 docs: update changelog 2019-11-19 17:25:22 +01:00
Karl-Philipp Wulfert
5585fb9140 0.17.1 2019-11-19 17:25:21 +01:00
Karl-Philipp Wulfert
dbcdb9fc1f refactor: adjust code to updated dependencies 2019-11-19 17:24:07 +01:00
Karl-Philipp Wulfert
249e8e0905 build: update dependencies 2019-11-19 17:21:44 +01:00
Karl-Philipp Wulfert
b4aea2ac4b docs: update changelog 2019-11-19 14:12:15 +01:00
Karl-Philipp Wulfert
5f97843868 0.6.0 2019-11-19 14:12:14 +01:00
Karl-Philipp Wulfert
69e5aea08c build: add missing stage to CI config 2019-11-19 14:08:41 +01:00
Karl-Philipp Wulfert
fcf7caca50 feat: add batch processing of issues 2019-11-19 13:57:33 +01:00
Karl-Philipp Wulfert
61195370c7 refactor: correctly use commands and options of commander 2019-11-19 12:39:45 +01:00
Karl-Philipp Wulfert
edca51be10 refactor: adjust code to new TSLint rules 2019-11-19 12:06:54 +01:00
Karl-Philipp Wulfert
8a9ab5c041 build: update dependencies and configuration files 2019-11-18 15:13:43 +01:00
Karl-Philipp Wulfert
1796e88227 feat: add possibility to configure retrying of requests 2019-11-18 15:00:10 +01:00
Sebastian Lange
86709a3465 docs: update changelog 2019-11-15 15:26:26 +01:00
Sebastian Lange
13b4d34341 0.17.0 2019-11-15 15:26:25 +01:00
Karl-Philipp Wulfert
ab45e35117 feat: add documentation for automatic publishing
Since the workflow is already implemented and working but not
concisely documented and known by everyone who has the
appropriate rights we need a documentation for it so that the
aforementioned persons are able to create new NPM packages
by correctly making use of the GitLab CI job.

Fixes #23
2019-11-15 11:39:35 +01:00
Sebastian Lange
a0731bc26d refactor: update dependencies 2019-11-14 16:28:35 +01:00
Karl-Philipp Wulfert
c598b12014 docs: update changelog 2019-11-13 15:03:15 +01:00
Karl-Philipp Wulfert
41bf86e64c 0.17.0 2019-11-13 15:03:14 +01:00
Karl-Philipp Wulfert
e2c6c8bc94 build: update dependencies 2019-11-13 15:02:27 +01:00
Karl-Philipp Wulfert
98c73b5758 feat: update to new meeting date 2019-11-13 15:02:12 +01:00
Wieland Schöbl
48dc47d70a docs: update changelog 2019-11-12 16:46:37 +01:00
Wieland Schöbl
53beede1dd 0.11.0 2019-11-12 16:46:36 +01:00
Wieland Schöbl
4c1a374a9e fix: use .raw field for aggregations 2019-11-12 16:36:43 +01:00
Wieland Schöbl
d7cc4301c0 docs: update changelog 2019-11-08 10:52:03 +01:00
Wieland Schöbl
02c483ba44 0.10.0 2019-11-08 10:52:02 +01:00
Wieland Schöbl
19ef656289 ci: make mapping test work for new mappings 2019-11-05 15:27:07 +01:00
Wieland Schöbl
8f7201e2cf fix: make mapping of generics work correctly
fixes #27
2019-11-01 16:24:35 +01:00
Wieland Schöbl
47361d412a fix: make mapping tags work for overwritten values 2019-11-01 12:24:05 +01:00
Rainer Killinger
faf0276810 refactor: update dependencies 2019-10-15 15:44:23 +02:00
Wieland Schöbl
18ad651286 feat: generate aggreations from annotations in the core 2019-09-18 13:07:32 +02:00
Wieland Schöbl
84acd7f3ab docs: update changelog 2019-09-10 15:04:51 +02:00
Wieland Schöbl
33057e1bd7 0.9.0 2019-09-10 15:04:50 +02:00
Michel Jonathan Schmitz
9ee4c12fff fix: use arguments instead of options 2019-09-03 16:12:14 +02:00
Wieland Schöbl
8f62b0faa0 Initial commit 2019-09-03 14:03:57 +02:00
Wieland Schöbl
238ceaaaa9 docs: update changelog 2019-09-03 13:46:12 +02:00
Wieland Schöbl
52c2ee5d67 0.16.0 2019-09-03 13:46:11 +02:00
Wieland Schöbl
3baeff23ca build: update dependencies 2019-09-03 13:44:21 +02:00
Wieland Schöbl
77e49146c0 fix: read type tags correctly after the first time 2019-09-03 13:27:59 +02:00
Wieland Schöbl
c2848fc7a5 feat: add plugin class
Fixes #12
2019-08-21 14:53:23 +02:00
Wieland Schöbl
36bf17e323 feat: add support for @filterable tag 2019-08-20 16:11:38 +02:00
Karl-Philipp Wulfert
b1c019bece docs: update changelog 2019-08-20 10:27:57 +02:00
Karl-Philipp Wulfert
9e0da3d65b 0.16.1 2019-08-20 10:27:55 +02:00
Karl-Philipp Wulfert
7d271a7364 fix: add colors to cli log output 2019-08-20 10:27:28 +02:00
Karl-Philipp Wulfert
8a883cab86 docs: update changelog 2019-08-20 10:19:09 +02:00
Karl-Philipp Wulfert
29066210cd 0.16.0 2019-08-20 10:19:08 +02:00
Karl-Philipp Wulfert
d7b68ae45c feat: only unlabel closed issues before last meeting 2019-08-20 10:18:01 +02:00
Karl-Philipp Wulfert
78e71910f4 ci: update ci config 2019-08-20 10:17:31 +02:00
Karl-Philipp Wulfert
67ab2616be build: update dependencies 2019-08-20 10:17:11 +02:00
Karl-Philipp Wulfert
e32da822e1 docs: update changelog 2019-08-19 13:10:35 +02:00
Karl-Philipp Wulfert
cc6e29619d 0.15.0 2019-08-19 13:10:34 +02:00
Karl-Philipp Wulfert
963b0f897c build: update dependencies 2019-08-19 13:10:04 +02:00
Karl-Philipp Wulfert
8bb09994de docs: update changelog 2019-07-25 15:22:21 +02:00
Karl-Philipp Wulfert
8d95db2e72 0.8.0 2019-07-25 15:22:21 +02:00
Anselm Stordeur
7b198f95ce feat: add automatic mapping generation
Fixes #6
2019-07-25 13:35:25 +02:00
Michel Jonathan Schmitz
9bcf30f336 Merge branch '2-minimal-connector-and-app-should-be-part-of-the-minimal-deployment' 2019-07-25 11:00:54 +02:00
Michel Jonathan Schmitz
74cd1a7ace docs: update README 2019-07-25 09:58:43 +02:00
Michel Jonathan Schmitz
19e556c76e feat: fixate remaining image versions 2019-07-25 09:56:19 +02:00
Michel Jonathan Schmitz
d6a2f125f4 feat: add app to compose 2019-07-25 09:56:10 +02:00
Michel Jonathan Schmitz
203a8127f5 feat: add minimal-connector to compose 2019-07-25 09:55:21 +02:00
Michel Jonathan Schmitz
23f4f2de2f refactor: remove health checks on startup 2019-07-25 09:54:09 +02:00
Michel Jonathan Schmitz
27a48dd168 refactor: ignore content of the database 2019-07-25 09:53:25 +02:00
Michel Jonathan Schmitz
cc402a0690 fix: add package.json in .dockerignore whitelist 2019-07-25 09:48:34 +02:00
Karl-Philipp Wulfert
7c9f2c52b7 docs: update changelog 2019-07-23 17:17:12 +02:00
Karl-Philipp Wulfert
4699d2d946 0.15.0 2019-07-23 17:17:11 +02:00
Karl-Philipp Wulfert
1eb0a50b03 refactor: remove resources directory 2019-07-23 16:59:39 +02:00
Karl-Philipp Wulfert
4f47409b54 docs: update changelog 2019-07-23 11:51:15 +02:00
Karl-Philipp Wulfert
a255a50a19 0.14.0 2019-07-23 11:51:15 +02:00
Karl-Philipp Wulfert
28500f64be build: update dependencies 2019-07-23 11:50:53 +02:00
Karl-Philipp Wulfert
8f3478911f refactor: remove explicit check for environment variable 2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert
c34b736edd refactor: adjust docker image creation 2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert
92c9604f8d test: add tests for get-used-version task 2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert
067a2011c0 feat: add function and task to get version of used dependency
Fixes #20
2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert
9d3dd97830 build: update dependencies 2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert
69b3395a1c docs: update changelog 2019-07-16 14:49:11 +02:00
Karl-Philipp Wulfert
312890f7d8 0.13.0 2019-07-16 14:49:11 +02:00
Rainer Killinger
6b92007e3e ci: adjust .gitlab-ci.yml to latest convention 2019-07-16 14:39:31 +02:00
Rainer Killinger
3a5062d9a9 test: add test for fixed side effects 2019-07-16 14:35:39 +02:00
Roman Klopsch
ded221c175 fix: change removeReferences() to also remove origin
In addition remove unwanted side effects from the function
2019-07-16 14:34:11 +02:00
Michel Jonathan Schmitz
73e797e28a build: update configuration dependency 2019-07-16 13:36:10 +02:00
Michel Jonathan Schmitz
32190cb8d5 build: update dockerignore to a whitelist 2019-07-16 13:33:49 +02:00
Michel Jonathan Schmitz
46cc4b87a0 refactor: optimize docker image building 2019-07-15 13:26:58 +02:00
Michel Jonathan Schmitz
355da9e8c4 refactor: apply stricter ts-lint rules 2019-07-15 13:14:20 +02:00
Michel Jonathan Schmitz
fee004c79f build: update dependencies 2019-07-15 13:14:05 +02:00
Michel Jonathan Schmitz
2398acfe37 build: expose port in app-only dockerfile 2019-07-15 13:05:17 +02:00
Michel Jonathan Schmitz
cccfb975ff build: update dependencies 2019-07-15 13:04:27 +02:00
Karl-Philipp Wulfert
24f28346bf docs: update changelog 2019-07-15 11:52:07 +02:00
Karl-Philipp Wulfert
698fd6fa8f 0.12.0 2019-07-15 11:52:06 +02:00
Karl-Philipp Wulfert
32eb493f13 build: update dependencies 2019-07-15 11:51:43 +02:00
Rainer Killinger
f95fd09112 feat: add function to remove undefined properties 2019-07-15 11:15:24 +02:00
Karl-Philipp Wulfert
7cc2e45b21 docs: update changelog 2019-07-15 11:02:32 +02:00
Karl-Philipp Wulfert
8290973014 0.21.1 2019-07-15 11:02:31 +02:00
Karl-Philipp Wulfert
1958f7f0b4 docs: update changelog 2019-07-12 15:47:43 +02:00
Karl-Philipp Wulfert
3220739ae4 0.11.0 2019-07-12 15:47:42 +02:00
Karl-Philipp Wulfert
6f3b122231 build: update dependencies 2019-07-12 15:47:18 +02:00
Karl-Philipp Wulfert
6a1499725c docs: update changelog 2019-07-12 10:55:45 +02:00
Karl-Philipp Wulfert
37e25800dc 0.4.0 2019-07-12 10:55:44 +02:00
Michel Jonathan Schmitz
b8cefa4254 fix: remove package-job when forPackaging is false 2019-07-11 14:10:03 +02:00
Karl-Philipp Wulfert
ddbe00d2a5 feat: add transformations
Fixes #9
2019-07-11 12:53:40 +02:00
Wieland Schöbl
8e7992046c docs: improved docs for comments 2019-07-10 12:50:20 +02:00
Michel Jonathan Schmitz
911492d064 fix: update core and apply stricter tslint rules 2019-07-10 12:38:29 +02:00
Michel Jonathan Schmitz
03c317430a build: update dependencies 2019-07-10 12:38:16 +02:00
Karl-Philipp Wulfert
e5659c1aa6 docs: update changelog 2019-07-03 15:43:09 +02:00
Karl-Philipp Wulfert
d50addf563 0.10.0 2019-07-03 15:43:09 +02:00
Karl-Philipp Wulfert
fd0bab6130 build: update dependencies 2019-07-03 15:42:28 +02:00
Rainer Killinger
78e9e8250c refactor: add publish stage for jobs that do not deploy 2019-07-02 12:48:29 +02:00
Michel Jonathan Schmitz
969badfb29 build: update openstapps configuration 2019-06-27 08:14:05 +02:00
Michel Jonathan Schmitz
967f946527 fix: apply stricter tslint rules 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz
38a5bfed52 build: update dependencies 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz
5d50abd411 refactor: rename class in cli options 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz
6e434145ba docs: add interface to definitions description 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz
53e80476c8 fix: emend the imports in the test files 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz
23cbc53fef style: apply strict style rules for this feature 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz
843e59811a feat: added output file name for uml generation 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz
67b31182e4 refactor: use the gitlab registry image 2019-06-27 08:08:31 +02:00
Michel Jonathan Schmitz
a478715d80 fix: update the uml job to use our node image 2019-06-27 08:08:31 +02:00
Michel Jonathan Schmitz
af904a7a05 fix: remove duplicate job 2019-06-27 08:08:31 +02:00
Michel Jonathan Schmitz
0f21da4a92 feat: add the uml generator 2019-06-27 08:08:31 +02:00
Michel Jonathan Schmitz
039905742f docs: explain how to work with the dockerfile 2019-06-25 09:54:35 +02:00
Michel Jonathan Schmitz
9c90dadbef feat: add example dockerfile 2019-06-25 09:52:19 +02:00
Michel Jonathan Schmitz
198372288f fix: wait for connector to finish executing 2019-06-25 09:51:50 +02:00
Rainer Killinger
a9c0fddb23 docs: update changelog 2019-06-24 12:56:16 +02:00
Rainer Killinger
ef7724759d 0.7.0 2019-06-24 12:56:12 +02:00
Karl-Philipp Wulfert
4ea066af1d docs: update changelog 2019-06-24 11:46:56 +02:00
Karl-Philipp Wulfert
92f3520f7b 0.21.0 2019-06-24 11:46:55 +02:00
Michel Jonathan Schmitz
8ece33b6e6 fix: update the nyc configuration 2019-06-24 07:34:34 +02:00
Karl-Philipp Wulfert
337ed38d9c docs: update changelog 2019-06-20 11:24:10 +02:00
Karl-Philipp Wulfert
c1aa5b4661 0.9.0 2019-06-20 11:24:09 +02:00
Michel Jonathan Schmitz
6fb58f3790 test: add test for full coverage testing 2019-06-19 16:14:51 +02:00
Michel Jonathan Schmitz
45755000f3 style: apply stricter ts lint rules 2019-06-19 16:13:50 +02:00
Michel Jonathan Schmitz
38f5445634 build: update dependencies 2019-06-19 16:11:52 +02:00
Rainer Killinger
dbc0586fc2 test: add test for validator 2019-06-18 14:16:17 +02:00
Rainer Killinger
b965f7cd6e test: adjust schema test for broader use cases 2019-06-18 14:16:17 +02:00
Rainer Killinger
c4a403e807 refactor: reintroduce validateThing method 2019-06-18 14:16:13 +02:00
Karl-Philipp Wulfert
03510d6af8 docs: update changelog 2019-06-06 14:52:04 +02:00
Karl-Philipp Wulfert
ff68fac5ed 0.20.0 2019-06-06 14:52:03 +02:00
Karl-Philipp Wulfert
60cabb6406 docs: add issue templates 2019-06-06 12:49:33 +02:00
Karl-Philipp Wulfert
b2b0f5fca1 build: update .gitignore 2019-06-06 12:49:02 +02:00
Karl-Philipp Wulfert
f90e93c1f4 test: make routes job fail if number of files is lower than 100 2019-06-05 17:38:07 +02:00
Karl-Philipp Wulfert
4d4f7bf7ac refactor: adjust code to new configuration 2019-06-05 17:25:02 +02:00
Karl-Philipp Wulfert
e70d5dccab build: update dependencies 2019-06-05 16:29:16 +02:00
Karl-Philipp Wulfert
a5b8d459d9 docs: update changelog 2019-06-05 11:52:47 +02:00
Karl-Philipp Wulfert
6d0a1f98ee 0.14.1 2019-06-05 11:52:46 +02:00
Karl-Philipp Wulfert
f470cc061f build: update dependencies 2019-06-05 11:52:26 +02:00
Karl-Philipp Wulfert
d05fd8a2a5 docs: update changelog 2019-06-05 11:45:02 +02:00
Karl-Philipp Wulfert
b2053c116e 0.3.1 2019-06-05 11:45:02 +02:00
Karl-Philipp Wulfert
d2cb99f70f fix: correct meta information for imports 2019-06-05 11:43:49 +02:00
Karl-Philipp Wulfert
1e6e951dea docs: update changelog 2019-06-04 15:31:04 +02:00
Karl-Philipp Wulfert
2485b68b4a 0.3.0 2019-06-04 15:31:03 +02:00
Karl-Philipp Wulfert
1a4ec52712 fix: only check copyright years for TypeScript files
Fixes #25
2019-06-04 15:26:21 +02:00
Karl-Philipp Wulfert
b995bb5c14 fix: skip template lines to avoid parser errors
Fixes #26
2019-06-04 15:15:02 +02:00
Karl-Philipp Wulfert
3c91c1558e docs: update changelog 2019-06-04 12:20:58 +02:00
Karl-Philipp Wulfert
7bb2e21df5 0.14.0 2019-06-04 12:20:57 +02:00
Karl-Philipp Wulfert
7ad0a843e0 build: update dependencies 2019-06-04 12:20:29 +02:00
Karl-Philipp Wulfert
3641ec4d00 feat: add max depth for reminders 2019-06-04 12:17:30 +02:00
Karl-Philipp Wulfert
65a7233905 fix: fix regression with protected tags 2019-06-04 11:51:16 +02:00
Michel Jonathan Schmitz
bafcabf7cb test: create the empty test directory via code 2019-06-04 10:36:12 +02:00
Karl-Philipp Wulfert
1252c612f0 docs: update changelog 2019-06-04 10:33:19 +02:00
Karl-Philipp Wulfert
3d1985368d 0.19.0 2019-06-04 10:33:18 +02:00
Karl-Philipp Wulfert
c30e83086a test: adjust tests 2019-06-03 13:20:44 +02:00
Karl-Philipp Wulfert
15a61f6932 refactor: adjust code to updated dependencies 2019-06-03 13:20:44 +02:00
Karl-Philipp Wulfert
c29420805e build: update dependencies 2019-06-03 13:20:43 +02:00
Karl-Philipp Wulfert
27a8bccf5a docs: update changelog 2019-06-03 12:37:27 +02:00
Karl-Philipp Wulfert
5f5d66e23a 0.13.0 2019-06-03 12:37:26 +02:00
Karl-Philipp Wulfert
ce58450c54 refactor: adjust code to updated dependencies 2019-06-03 12:34:07 +02:00
Jovan Krunić
c69c5ece6f build: update dependencies 2019-06-03 11:25:25 +02:00
Jovan Krunić
4b5ce9cca5 refactor: use kebab-case for file names
Closes #22
2019-06-03 11:20:24 +02:00
Jovan Krunić
cd646a2795 ci: add staging and production environments
Closes #58
2019-05-31 14:12:11 +02:00
Jovan Krunić
f07eaaa7c3 docs: update changelog 2019-05-29 15:09:47 +02:00
Jovan Krunić
7d7919551b 0.18.0 2019-05-29 15:09:40 +02:00
Jovan Krunić
7754617c39 refactor: remove git push from the postversion script
Closes #24
2019-05-29 13:44:10 +02:00
Karl-Philipp Wulfert
2ec80fbb2f feat: add curl to Node.js image
Fixes #18
2019-05-29 11:06:57 +02:00
Karl-Philipp Wulfert
cbee9b888c feat: automatically generate changelog after version bump
Fixes #23
2019-05-28 16:00:51 +02:00
Karl-Philipp Wulfert
048a067ab7 docs: update changelog 2019-05-28 15:28:34 +02:00
Karl-Philipp Wulfert
b0180d5cdd 0.17.2 2019-05-28 15:28:30 +02:00
Karl-Philipp Wulfert
9e7f467070 feat: exclude tests from linting 2019-05-28 15:26:09 +02:00
Karl-Philipp Wulfert
fa3db85d6a docs: update changelog 2019-05-28 11:06:06 +02:00
Karl-Philipp Wulfert
dae1909d63 0.17.1 2019-05-28 11:06:03 +02:00
Karl-Philipp Wulfert
5659295b88 fix: fix regression with copyright years 2019-05-28 11:05:45 +02:00
Karl-Philipp Wulfert
9945333379 docs: update changelog 2019-05-28 10:54:28 +02:00
Karl-Philipp Wulfert
025ab59a05 0.17.0 2019-05-28 10:54:24 +02:00
Karl-Philipp Wulfert
626d87639f ci: add automatic publishing
Fixes #21
2019-05-27 18:07:31 +02:00
Karl-Philipp Wulfert
13b4d3d498 refactor: adjust code to updated dependencies 2019-05-27 18:07:30 +02:00
Karl-Philipp Wulfert
3fda81d279 docs: adjust copyright years 2019-05-27 18:03:02 +02:00
Karl-Philipp Wulfert
e8863db4a2 build: update dependencies 2019-05-27 17:54:30 +02:00
Karl-Philipp Wulfert
59af9607b6 docs: update changelog 2019-05-27 16:29:33 +02:00
Karl-Philipp Wulfert
22b1b86b40 0.2.1 2019-05-27 16:29:30 +02:00
Karl-Philipp Wulfert
39a1f9ae8f ci: fix automatic publish 2019-05-27 16:29:10 +02:00
Karl-Philipp Wulfert
fc6d73514f build: update dependencies 2019-05-27 16:26:07 +02:00
Karl-Philipp Wulfert
ac0166020e refactor: adjust code to stricter rules 2019-05-27 16:26:07 +02:00
Karl-Philipp Wulfert
14b6420c33 feat: adjust TSLint command to enable advanced rules
References #21
2019-05-27 16:26:07 +02:00
Karl-Philipp Wulfert
76ebbfab53 feat: add sctricter TSLint rules
Fixes #21
2019-05-27 16:26:07 +02:00
Karl-Philipp Wulfert
f2e40638c2 docs: update changelog 2019-05-27 13:27:17 +02:00
Karl-Philipp Wulfert
728fdc8d9f 0.12.1 2019-05-27 13:27:14 +02:00
Karl-Philipp Wulfert
ab30d89d3b ci: fix CI dependency 2019-05-27 13:24:14 +02:00
Karl-Philipp Wulfert
d5f33d45e2 docs: update changelog 2019-05-27 13:23:33 +02:00
Karl-Philipp Wulfert
305c158a76 0.2.0 2019-05-27 13:23:29 +02:00
Karl-Philipp Wulfert
0ac9a82a9e docs: update changelog 2019-05-27 12:57:59 +02:00
Karl-Philipp Wulfert
4a8569fbee 0.12.0 2019-05-27 12:57:53 +02:00
Karl-Philipp Wulfert
5fc36ad28c refactor: adjust code to updated dependencies 2019-05-27 12:57:26 +02:00
Karl-Philipp Wulfert
0986b42897 style: adjust copyright notices 2019-05-27 12:49:07 +02:00
Karl-Philipp Wulfert
ea5cc912f0 ci: add automatic publishing 2019-05-27 12:48:53 +02:00
Karl-Philipp Wulfert
579544a2b0 build: update dependencies 2019-05-27 12:48:24 +02:00
Karl-Philipp Wulfert
d60625c461 feat: notify merge request assignee instead of author 2019-05-27 12:44:27 +02:00
Karl-Philipp Wulfert
57f3ad1fe2 refactor: extrac slack channel ID into configuration 2019-05-27 12:44:05 +02:00
Karl-Philipp Wulfert
527a6f9364 feat: add rule to enforce completed docs
Fixes #20
2019-05-24 16:30:04 +02:00
Karl-Philipp Wulfert
8642155097 docs: update changelog 2019-05-24 14:14:24 +02:00
Karl-Philipp Wulfert
4343b0ffc7 0.16.1 2019-05-24 14:14:19 +02:00
Karl-Philipp Wulfert
60f7e4cae2 fix: make sure that npmrc is created in correct home directory 2019-05-24 14:13:48 +02:00
Karl-Philipp Wulfert
d9c4ce48dc feat: add automatic publishing
Fixes #6
2019-05-23 13:53:10 +02:00
Karl-Philipp Wulfert
9a2eaa4f3d docs: update changelog 2019-05-22 10:02:03 +02:00
Karl-Philipp Wulfert
1b5fdd15e1 0.16.0 2019-05-22 10:01:57 +02:00
Karl-Philipp Wulfert
ec8c891a7a fix: use lib as artifacts path
Fixes #19
2019-05-21 16:44:16 +02:00
Karl-Philipp Wulfert
0c8aa7257a fix: use user 'node' in Node.js image
Fixes #17
2019-05-21 16:36:35 +02:00
Michel Jonathan Schmitz
aadd424400 test: improve coverage of tests for e2e 2019-05-21 13:36:01 +02:00
Michel Jonathan Schmitz
ec6296a606 refactor: update e2e methods 2019-05-21 13:35:51 +02:00
Karl-Philipp Wulfert
00f4659895 docs: update changelog 2019-05-20 14:47:51 +02:00
Karl-Philipp Wulfert
04cd5ff69f 0.15.0 2019-05-20 14:47:45 +02:00
Karl-Philipp Wulfert
1e3e7dfac8 feat: add rules to enforce automatic package publishing
References #18
2019-05-20 11:46:47 +00:00
Karl-Philipp Wulfert
70b54164cd ci: add job to automatically publish package to npm
Fixes #18
2019-05-20 11:46:47 +00:00
Karl-Philipp Wulfert
cf81c1e520 fix: remove wrong excluded path from nyc config
Fixes #16
2019-05-20 11:39:27 +00:00
Karl-Philipp Wulfert
73e6f2413b fix: remove incremental flag
Fixes #15
2019-05-20 11:35:43 +00:00
Karl-Philipp Wulfert
1c826a41e0 feat: warn about extraneous copyright years
References #17
2019-05-16 12:13:05 +02:00
Karl-Philipp Wulfert
c0058f9c29 feat: add git to node image
Fixes #16
2019-05-16 12:03:13 +02:00
Karl-Philipp Wulfert
44c82ade69 feat: add check for copyright years
Fixes #17
2019-05-16 11:57:07 +02:00
Michel Jonathan Schmitz
7dfbb9a650 refactor: provide common functions and abstraction 2019-05-16 08:22:43 +02:00
Karl-Philipp Wulfert
2c43fc09b5 docs: update changelog 2019-05-14 16:26:51 +02:00
Karl-Philipp Wulfert
b7d092bf94 0.8.0 2019-05-14 16:25:48 +02:00
Karl-Philipp Wulfert
0f056cb650 ci: adjust jobs to match configuration 2019-05-14 16:25:32 +02:00
Karl-Philipp Wulfert
d8cdce680d build: update dependencies 2019-05-14 16:25:20 +02:00
Rainer Killinger
6822e92749 docs: update README.md. Include e2e command usage 2019-05-10 12:59:20 +02:00
Rainer Killinger
3ed681d444 test: add tests for new e2e command 2019-05-10 12:59:20 +02:00
Rainer Killinger
e1313b55ff feat: add e2e command. Indexes core test files. 2019-05-10 12:59:15 +02:00
Sebastian Lange
235693a9e2 refactor: initialise settings from config module and persist only the values
Closes #30, #59
2019-05-07 15:23:52 +02:00
Karl-Philipp Wulfert
fb9791767d docs: update changelog 2019-05-07 10:37:51 +02:00
Karl-Philipp Wulfert
5b5080dcc7 0.1.0 2019-05-07 10:37:47 +02:00
Karl-Philipp Wulfert
3a86af72e2 docs: update changelog 2019-04-30 19:27:45 +02:00
Karl-Philipp Wulfert
cf71e50368 0.14.0 2019-04-30 19:27:40 +02:00
Karl-Philipp Wulfert
98a1baf7a7 docs: update changelog 2019-04-30 17:13:38 +02:00
Karl-Philipp Wulfert
4292e2d1e5 0.11.0 2019-04-30 17:13:35 +02:00
Karl-Philipp Wulfert
de05b52f24 feat: tidy sub groups 2019-04-30 17:13:20 +02:00
Karl-Philipp Wulfert
3ba2b0bf3c build: update dependencies and adjust configuration 2019-04-30 14:40:51 +02:00
Karl-Philipp Wulfert
766205049b test: adjust tests
Fixes #1
2019-04-30 14:40:46 +02:00
Karl-Philipp Wulfert
1ae3beb347 refactor: rebuild logger to be static
Fixes #4
2019-04-30 14:40:38 +02:00
Karl-Philipp Wulfert
7ef29ef56d build: adjust scripts 2019-04-30 14:40:38 +02:00
Karl-Philipp Wulfert
f8f94dc026 ci: add audit stage 2019-04-30 14:40:38 +02:00
Karl-Philipp Wulfert
370658fa67 ci: use correct image for ci 2019-04-30 14:40:38 +02:00
Karl-Philipp Wulfert
f63be608b8 build: update dependencies
Fixes #5
2019-04-30 14:40:32 +02:00
Karl-Philipp Wulfert
116ddebfb8 feat: add possibility to ignore CI entries
Fixes #14
2019-04-30 13:17:57 +02:00
Jovan Krunić
e1039aa226 feat(data): show skeleton screens before data is loaded
Closes #4
2019-04-29 10:52:15 +00:00
Karl-Philipp Wulfert
2bdf0e00eb docs: update changelog 2019-04-29 12:13:09 +02:00
Karl-Philipp Wulfert
c70151e566 0.10.1 2019-04-29 12:13:03 +02:00
Karl-Philipp Wulfert
7f924dc810 build: update dependencies 2019-04-29 12:08:55 +02:00
Michel Jonathan Schmitz
88f87a2ce1 refactor: removed the origin component from the date series detail component 2019-04-29 09:33:13 +00:00
Jovan Krunić
38c026fd7d build: use OpenJDK 8 instead of Oracle's version
Fixes #57
2019-04-29 09:09:13 +00:00
Jovan Krunić
b9a95313cd ci: use cache instead of artifacts for node modules 2019-04-26 15:17:41 +02:00
Jovan Krunić
371dbc2890 build: ensure that webdriver is updated to fixed version
Closes #56
2019-04-26 15:17:02 +02:00
Jovan Krunić
478f49a874 fix(data): fix and adjust detail test using translation
Closes #50
2019-04-26 10:05:42 +02:00
Karl-Philipp Wulfert
58989b44b2 docs: fix link to configuration documentation in readme 2019-04-19 12:59:15 +02:00
Karl-Philipp Wulfert
6baad0ae31 docs: update changelog 2019-04-18 16:46:23 +02:00
Karl-Philipp Wulfert
1692051255 0.13.0 2019-04-18 16:46:20 +02:00
Karl-Philipp Wulfert
da2d7f6f91 feat: add configuration for configuration checks
Fixes #13
2019-04-18 16:03:52 +02:00
Jovan Krunić
9d682125db fix: use HashLocationStrategy for routes
Closes #54
2019-04-18 15:22:32 +02:00
Karl-Philipp Wulfert
6e00fc1eed docs: update changelog 2019-04-17 15:56:04 +02:00
Karl-Philipp Wulfert
01aa39b8ff 0.10.0 2019-04-17 15:55:57 +02:00
Karl-Philipp Wulfert
6628bdfd20 build: update dependencies and adjust configuration 2019-04-17 15:55:39 +02:00
Karl-Philipp Wulfert
ad99e45ee3 feat: add timestamp to reports 2019-04-17 15:45:25 +02:00
Karl-Philipp Wulfert
d86236e944 refactor: remove report task 2019-04-17 15:45:05 +02:00
Karl-Philipp Wulfert
87801ee921 docs: remove meeting reports 2019-04-17 15:44:47 +02:00
Roman Klopsch
f417525195 docs: Update README.md 2019-04-17 08:56:24 +00:00
Karl-Philipp Wulfert
cbc5a57cae docs: update changelog 2019-04-16 15:33:46 +02:00
Karl-Philipp Wulfert
e7fb36c190 0.7.0 2019-04-16 15:33:42 +02:00
Karl-Philipp Wulfert
075c4e7205 build: adjust scripts and contributors 2019-04-16 14:53:28 +02:00
Karl-Philipp Wulfert
9e28ddb313 build: overwrite with suggested files 2019-04-16 14:52:52 +02:00
Karl-Philipp Wulfert
e431098395 build: exclude documentation from packages
Fixes #11
2019-04-16 14:38:07 +02:00
Karl-Philipp Wulfert
c1ad32a527 build: update dependencies 2019-04-16 14:37:52 +02:00
Karl-Philipp Wulfert
8c0613b3da docs: update changelog 2019-04-16 13:58:42 +02:00
Karl-Philipp Wulfert
d7ef81f045 0.6.0 2019-04-16 13:58:38 +02:00
Karl-Philipp Wulfert
19a403c14d ci: adjust ci configuration 2019-04-16 13:42:06 +02:00
Karl-Philipp Wulfert
271da70483 build: adjust scripts and contributors 2019-04-16 13:41:54 +02:00
Karl-Philipp Wulfert
011c191538 build: exclude documentation from packages
Fixes #19
2019-04-16 13:41:35 +02:00
Karl-Philipp Wulfert
c0f37ccd69 build: update dependencies 2019-04-16 13:39:34 +02:00
Karl-Philipp Wulfert
748cea493c docs: update changelog 2019-04-16 13:32:14 +02:00
Karl-Philipp Wulfert
e60d2b6bb5 0.12.0 2019-04-16 13:32:08 +02:00
Karl-Philipp Wulfert
a0c3a12799 refactor: extract code into several functions 2019-04-16 11:31:47 +02:00
Karl-Philipp Wulfert
34d3d43ff5 feat: add expected build script
Fixes #12
2019-04-16 10:23:25 +02:00
Karl-Philipp Wulfert
77bed076bb fix: do not escape newlines in scripts 2019-04-16 10:22:29 +02:00
Karl-Philipp Wulfert
9bd2ba3767 docs: update changelog 2019-04-15 15:22:50 +02:00
Karl-Philipp Wulfert
5cacfadef6 0.11.0 2019-04-15 15:22:41 +02:00
Karl-Philipp Wulfert
d652085b09 ci: allow audit to fail and add scheduled audit 2019-04-15 15:03:44 +02:00
Karl-Philipp Wulfert
d7b6ecb734 fix: exclude docs from packages
Fixes #11
2019-04-15 15:00:03 +02:00
Jovan Krunić
58960a29ea feat(data): use general template for all offers
With help of Object.keys (which is provided to the
template) make offers template general for different
price group types (which are academic or sport course
for now).

See discussions on !2
2019-04-15 13:58:25 +02:00
Jovan Krunić
c3bc227a3c fix(data): fix template and other consistency issues 2019-04-15 13:41:27 +02:00
Jovan Krunić
5855accc16 feat(data): add data detail templates
Additionally clean up the code
2019-04-12 14:14:22 +02:00
Jovan Krunić
75ca8c8a73 build: update dependencies
Additionally adjust the code after the latest
rebase.
2019-04-12 14:14:22 +02:00
Jovan Krunić
3e697b17b4 feat: add basic templates for data list items 2019-04-12 14:14:22 +02:00
Jovan Krunić
9850cf77c2 build: update openstapps packages 2019-04-12 14:14:22 +02:00
Jovan Krunić
b6f92a7449 feat(data): implement basic facets handling
Related to #1
2019-04-12 14:14:22 +02:00
Jovan Krunić
2558163ad6 feat: use http interceptor for backendless development
Note: intercept method of the FakeBackendInterceptor should
be developed further whenever it is needed to fake a response
from the backend.

Closes #37
2019-04-12 14:14:22 +02:00
Jovan Krunić
8c3c2810e5 refactor(data): adjust data detail component 2019-04-12 14:14:22 +02:00
Jovan Krunić
017fc67765 feat(data): add method that checks if data item has been saved 2019-04-12 14:14:22 +02:00
Jovan Krunić
7caaa18b7e feat(data): use data provider for list and detail view 2019-04-12 14:14:22 +02:00
Jovan Krunić
ffe05e4548 feat(data): add basic methods of data provider
Related to #1
2019-04-12 14:14:20 +02:00
Jovan Krunić
c819d15386 build: upgrade to ionic 4 (update dependencies)
Closes #35
2019-04-12 13:51:43 +02:00
Jovan Krunić
63266f588f feat(storage): support deletion of multiple entries 2019-04-12 13:51:43 +02:00
Jovan Krunić
4334cad68c feat(storage): support search using a string 2019-04-12 13:51:43 +02:00
Jovan Krunić
86b9bff09a feat(storage): add search using regex 2019-04-12 13:51:43 +02:00
Jovan Krunić
246dddd5a5 refactor: move web http client to a new file 2019-04-12 13:51:43 +02:00
Jovan Krunić
83a2c85e05 ci: use gitlab's review apps (using surge.sh)
Closes #42
2019-04-12 12:12:27 +02:00
Jovan Krunić
a503811c1c fix: fix issues found by ng build for production
Closes #48
2019-04-12 12:12:26 +02:00
Karl-Philipp Wulfert
2c70896c1c docs: update changelog 2019-04-09 17:29:55 +02:00
Karl-Philipp Wulfert
132ca7755e 0.10.0 2019-04-09 17:29:52 +02:00
Sebastian Lange
161da630ea fix(config): fix catch ConfigFetchError in getValue
Closes #46
2019-04-09 14:57:06 +00:00
Jovan Krunić
301f872c06 ci: allow failure for audit 2019-04-09 14:31:07 +00:00
Karl-Philipp Wulfert
b1cee16bde docs: update changelog 2019-04-09 16:11:12 +02:00
Karl-Philipp Wulfert
7f8b158eae 0.5.1 2019-04-09 16:11:09 +02:00
Karl-Philipp Wulfert
89232d9de8 docs: update changelog 2019-04-09 15:59:25 +02:00
Karl-Philipp Wulfert
de3cbdb60a 0.6.0 2019-04-09 15:58:56 +02:00
Jovan Krunić
7512135393 ci: remove duplicate image entry (setup) 2019-04-09 13:50:58 +00:00
Karl-Philipp Wulfert
bc4a85f542 docs: update changelog 2019-04-09 15:43:56 +02:00
Karl-Philipp Wulfert
1f839b46ea 0.9.0 2019-04-09 15:43:54 +02:00
Jovan Krunić
f0303d27b6 build: remove extraneous comma (tsconfig.json)
Closes #44
2019-04-09 13:34:54 +00:00
Rainer Killinger
b8e3322d7f docs: Update examples in README.md 2019-04-09 12:32:45 +00:00
Karl-Philipp Wulfert
641b80964e docs: update changelog 2019-04-09 11:09:38 +02:00
Karl-Philipp Wulfert
67b6d50459 0.5.0 2019-04-09 11:09:20 +02:00
Karl-Philipp Wulfert
cbe465efd5 build: correctly list dev dependencies 2019-04-09 08:59:28 +00:00
Karl-Philipp Wulfert
e34ac4308e ci: fix scheduled audit 2019-04-09 10:57:20 +02:00
Karl-Philipp Wulfert
ab81aab046 feat: add check for contributors 2019-04-08 11:35:25 +02:00
Karl-Philipp Wulfert
61d2285a1f feat: check entries in CI config
Fixes #10
2019-04-08 11:35:25 +02:00
Karl-Philipp Wulfert
081e6008cd docs: update changelog 2019-04-08 11:29:25 +02:00
Karl-Philipp Wulfert
e4f6e7ca98 0.9.0 2019-04-08 11:29:19 +02:00
Karl-Philipp Wulfert
497db2cd07 build: update dependencies
Fixes #7
2019-04-08 11:10:00 +02:00
Karl-Philipp Wulfert
9e8dc186f3 build: update dependencies
Fixes #16
2019-04-08 10:59:40 +02:00
Karl-Philipp Wulfert
feb0c3ba01 feat: add check for protected tags to tidy task
Fixes #14
2019-04-08 10:49:36 +02:00
Karl-Philipp Wulfert
fa66a3abc1 docs: update changelog 2019-04-04 15:18:21 +02:00
Karl-Philipp Wulfert
e4b97151ae 0.5.0 2019-04-04 15:18:18 +02:00
Karl-Philipp Wulfert
1b5dbdb8bc build: adjust npm scripts 2019-04-04 14:24:32 +02:00
Karl-Philipp Wulfert
385617fe39 ci: allow test job to fail 2019-04-04 14:24:32 +02:00
Karl-Philipp Wulfert
9cf6fde050 feat: add method to remove references from a thing
Fixes #6
2019-04-04 14:23:40 +02:00
Karl-Philipp Wulfert
a3b16b8a37 refactor: adjust to changed dependency 2019-04-04 14:23:40 +02:00
Karl-Philipp Wulfert
eed01d6d3d build: update dependencies 2019-04-04 14:23:38 +02:00
Karl-Philipp Wulfert
f09d00dd7d docs: adjust readme to reflect actual behavior 2019-04-03 17:45:56 +02:00
Karl-Philipp Wulfert
92bfe50e1c ci: add test stage and audit job 2019-04-03 17:45:56 +02:00
Karl-Philipp Wulfert
277118b6e8 build: add incremental build 2019-04-03 17:45:54 +02:00
Sebastian Lange
406f400555 feat: add ConfigModule and FakeBackendInterceptor
Closes #34, #37
2019-04-03 15:57:29 +02:00
Karl-Philipp Wulfert
a7ac4fe23d docs: update changelog 2019-04-03 15:06:56 +02:00
Karl-Philipp Wulfert
bd41c3a707 0.4.0 2019-04-03 15:06:53 +02:00
Wieland Schöbl
944f4e252d ci: allow audit to fail 2019-04-03 14:31:47 +02:00
Wieland Schöbl
1022150ca3 feat: add feature to validate schemas directly 2019-04-03 14:31:38 +02:00
Karl-Philipp Wulfert
1090d9361b build: update dependencies 2019-04-02 13:49:44 +02:00
Karl-Philipp Wulfert
e3bf266d60 docs: update changelog 2019-04-01 12:00:47 +02:00
Karl-Philipp Wulfert
c25b449c82 0.8.0 2019-04-01 12:00:44 +02:00
Karl-Philipp Wulfert
a2cf41e977 refactor: fix compile script and expected compile script 2019-03-25 12:30:17 +01:00
Karl-Philipp Wulfert
bf26effe68 fix: remove @types/chalk
Furthermore update dependencies.
2019-03-25 12:28:53 +01:00
Karl-Philipp Wulfert
af49f4a429 docs: update changelog 2019-03-20 16:31:18 +01:00
Karl-Philipp Wulfert
e65a18964a 0.8.1 2019-03-20 16:31:15 +01:00
Karl-Philipp Wulfert
5577ffee7d refactor: remove remains of markdown specific code 2019-03-20 16:30:42 +01:00
Karl-Philipp Wulfert
04eb1f1f36 docs: update changelog 2019-03-20 15:47:43 +01:00
Karl-Philipp Wulfert
06ff995d9a 0.8.0 2019-03-20 15:47:39 +01:00
Karl-Philipp Wulfert
95f7521dbd feat: use mustache instead of tangular 2019-03-20 15:47:32 +01:00
Karl-Philipp Wulfert
9847fc809c docs: update changelog 2019-03-20 13:35:44 +01:00
Karl-Philipp Wulfert
638fb7571a 0.7.0 2019-03-20 13:35:40 +01:00
Karl-Philipp Wulfert
940e0136a1 refactor: create dedicated function for report 2019-03-20 13:35:12 +01:00
Karl-Philipp Wulfert
17ae4cd0b2 docs: adjust mail address of author 2019-03-20 13:34:56 +01:00
Karl-Philipp Wulfert
5bdfb69072 docs: update report 2019-03-20 09:58:33 +01:00
Karl-Philipp Wulfert
8c2e1ad9e1 docs: update report 2019-03-18 12:47:39 +01:00
Jovan Krunić
184f6dee77 docs: update changelog 2019-03-15 11:40:37 +01:00
Jovan Krunić
923a26ef05 0.4.1 2019-03-15 11:40:02 +01:00
Jovan Krunić
7f8c9eda2f fix: adjust compile npm script to exact configuration guideline 2019-03-15 11:37:27 +01:00
Jovan Krunić
fba64a4ef2 docs: update changelog 2019-03-15 11:32:08 +01:00
Jovan Krunić
e98c938ba8 0.4.0 2019-03-15 11:31:51 +01:00
Jovan Krunić
782fdbebba fix: apply changes suggested by @openstapps/configuration 2019-03-14 14:48:54 +01:00
Rainer Killinger
f3d27a8c6e refactor: simplify setup by already adding folder 2019-03-14 13:39:09 +00:00
Jovan Krunić
2692263533 build: update dependencies 2019-03-14 14:36:53 +01:00
Rainer Killinger
58802562f3 fix: change permissions of database folder 2019-03-14 13:31:51 +00:00
Rainer Killinger
62e36ba5a3 Merge branch '1-backend-should-wait-for-the-database-to-be-ready' into 'master'
Resolve "Backend should "wait" for the database to be ready"

Closes #1

See merge request openstapps/minimal-deployment!1
2019-03-14 11:24:28 +00:00
Karl-Philipp Wulfert
d12c2e7308 docs: update report 2019-03-13 09:55:30 +01:00
Rainer Killinger
c609078e47 feature: add rudimentary "wait for elasticsearch" 2019-03-12 16:21:00 +00:00
Karl-Philipp Wulfert
123c9d26df docs: update report 2019-03-11 10:38:51 +01:00
Karl-Philipp Wulfert
818cad1c14 docs: update report 2019-03-07 11:33:27 +01:00
Karl-Philipp Wulfert
4f5b913539 docs: update report 2019-03-05 20:29:59 +01:00
Jovan Krunić
0d1d26cd5d docs: add badges for pipeline status and docs 2019-03-04 15:05:20 +01:00
Jovan Krunić
5a74d7e85f build: upgrade packages with security issues 2019-03-04 14:32:56 +01:00
Jovan Krunić
11be564c8a docs: generate docs and publish them on gitlab pages
Closes #38
2019-03-04 11:55:30 +01:00
Karl-Philipp Wulfert
7ebe58781b docs: update report 2019-02-28 10:59:42 +01:00
Karl-Philipp Wulfert
04fabac8ea ci: remove npm install before script
Fixes #5
2019-02-27 13:43:44 +01:00
Karl-Philipp Wulfert
36265c19e7 docs: update report 2019-02-27 11:37:07 +01:00
Karl-Philipp Wulfert
96021991fb docs: update report 2019-02-27 09:57:49 +01:00
Karl-Philipp Wulfert
3e5fa7fc2f build: update dependencies 2019-02-26 17:13:43 +01:00
Karl-Philipp Wulfert
15e9432ae0 docs: adjust readme to reflect changes 2019-02-26 16:56:06 +01:00
Karl-Philipp Wulfert
89fcf5b642 ci: add test job for generation of route documentation 2019-02-26 16:55:53 +01:00
Karl-Philipp Wulfert
d3ce936626 feat: adjust generation of route documentation
Fixes #12
2019-02-26 16:52:11 +01:00
Karl-Philipp Wulfert
4073642ec4 docs: update report 2019-02-26 13:57:56 +01:00
Jovan Krunić
6c6fc0d559 docs: update changelog 2019-02-26 10:26:46 +01:00
Jovan Krunić
3f4f47715f 0.7.0 2019-02-26 10:26:26 +01:00
Karl-Philipp Wulfert
662f534550 feat: add ability to check scripts
Furthermore do not overwrite existing NYC configuration.

Fixes #6
2019-02-25 19:27:47 +01:00
Karl-Philipp Wulfert
c3dde94530 build: install correct dependencies before publishing 2019-02-25 19:27:23 +01:00
Karl-Philipp Wulfert
0de6ce30c1 docs: update changelog 2019-02-25 17:31:16 +01:00
Karl-Philipp Wulfert
7a773b6d79 0.6.0 2019-02-25 17:31:12 +01:00
Karl-Philipp Wulfert
e02939c470 feat: adjust reminder for unfixed merge requests 2019-02-25 17:30:41 +01:00
Karl-Philipp Wulfert
5c6bdb98ad build: install correct dependencies before publishing 2019-02-25 17:30:28 +01:00
Karl-Philipp Wulfert
dfb9d533f1 build: update dependencies 2019-02-25 17:30:22 +01:00
Karl-Philipp Wulfert
a64e975df1 docs: update changelog 2019-02-25 17:22:52 +01:00
Karl-Philipp Wulfert
131bd7030c 0.5.1 2019-02-25 17:22:46 +01:00
Karl-Philipp Wulfert
a74ad2f6d3 fix: correct return type for method 2019-02-25 17:22:00 +01:00
Karl-Philipp Wulfert
2464772b4c docs: update changelog 2019-02-25 17:11:53 +01:00
Karl-Philipp Wulfert
a5e38bac45 0.5.0 2019-02-25 17:11:47 +01:00
Karl-Philipp Wulfert
4ef2cfb738 feat: add method to fetch merge request discussions 2019-02-25 17:11:32 +01:00
Karl-Philipp Wulfert
7c9b56f678 feat: add types for discussions 2019-02-25 17:10:56 +01:00
Karl-Philipp Wulfert
58bb6f805b build: install correct dependencies before publishing 2019-02-25 17:10:35 +01:00
Karl-Philipp Wulfert
562ee5707b build: update dependencies 2019-02-25 16:41:04 +01:00
Karl-Philipp Wulfert
3759dd59c7 docs: update report 2019-02-25 16:19:41 +01:00
Michel Jonathan Schmitz
1dcf0bca7c docs: add licensing guidelines 2019-02-22 12:07:30 +01:00
Michel Jonathan Schmitz
1dbb59b9d7 refactor: remove deprecated and unused methods 2019-02-22 11:09:35 +01:00
Karl-Philipp Wulfert
7ffc613bd7 docs: update report 2019-02-21 18:00:19 +01:00
Karl-Philipp Wulfert
47e9d0f570 docs: update changelog 2019-02-21 17:23:26 +01:00
Karl-Philipp Wulfert
1a76c98300 0.3.0 2019-02-21 17:23:22 +01:00
Karl-Philipp Wulfert
c74b7c639b build: make sure that dependencies are installed 2019-02-21 17:22:58 +01:00
Karl-Philipp Wulfert
1fe63c133d build: update dependencies 2019-02-21 17:22:43 +01:00
Karl-Philipp Wulfert
224c3466fb docs: update report 2019-02-20 09:57:43 +01:00
Karl-Philipp Wulfert
33dae87a49 ci: ensure that dependencies are installed 2019-02-18 13:07:04 +01:00
Karl-Philipp Wulfert
9ade1da6db docs: update changelog 2019-02-18 12:59:09 +01:00
Karl-Philipp Wulfert
8fd916c857 0.2.0 2019-02-18 12:59:05 +01:00
Karl-Philipp Wulfert
dd6a09a4c4 build: update dependencies
Set peer dependency core to v0.10.0.
2019-02-18 12:57:12 +01:00
Karl-Philipp Wulfert
2b54af6c7e build: replace circular-json with flatted
Fixes #2
2019-02-14 13:20:36 +01:00
Karl-Philipp Wulfert
b219fb2c0f docs: update report 2019-02-14 11:42:50 +01:00
Karl-Philipp Wulfert
ad89bbbdcd docs: update report 2019-02-13 15:45:47 +01:00
Karl-Philipp Wulfert
777864964e docs: update changelog 2019-02-13 14:44:06 +01:00
Karl-Philipp Wulfert
638b79d7f9 0.6.0 2019-02-13 14:43:59 +01:00
Karl-Philipp Wulfert
5bf06ea75d docs: update report 2019-02-13 09:57:06 +01:00
Karl-Philipp Wulfert
267fde4024 docs: update report 2019-02-12 13:25:37 +01:00
Karl-Philipp Wulfert
418b605e0c docs: update report 2019-02-11 13:47:17 +01:00
Sebastian Lange
584878d950 fix: catch error Setting "language" not provided 2019-02-11 12:33:33 +01:00
Sebastian Lange
a0c798f765 feat: add logger 2019-02-11 10:56:50 +01:00
Karl-Philipp Wulfert
9c8ce486ce fix: correctly check tslint.json
Fixes #3, #4
2019-02-07 17:50:29 +01:00
Jovan Krunić
cb70ac5354 docs: update changelog 2019-02-07 17:25:10 +01:00
Jovan Krunić
a12bcb3dbf 0.1.1 2019-02-07 17:24:50 +01:00
Karl-Philipp Wulfert
8ec4401d21 docs: update changelog 2019-02-07 17:05:42 +01:00
Karl-Philipp Wulfert
207ed23478 0.2.0 2019-02-07 17:05:36 +01:00
Michel Jonathan Schmitz
15ae7e5bd8 refactor: provide a generic test class 2019-02-07 16:13:11 +01:00
Michel Jonathan Schmitz
11fa530d7f docs: describe how to tidy up commits before merging 2019-02-07 15:05:52 +00:00
Michel Jonathan Schmitz
99f3236c12 build: update the dependencies 2019-02-07 16:04:38 +01:00
Karl-Philipp Wulfert
e0169daa00 docs: update report 2019-02-07 11:24:45 +01:00
Karl-Philipp Wulfert
4984f78d95 docs: update changelog 2019-02-06 17:04:13 +01:00
Karl-Philipp Wulfert
bf7ff5abd5 0.3.0 2019-02-06 17:04:11 +01:00
Karl-Philipp Wulfert
1c744328eb feat: ensure correct path for input files 2019-02-06 17:03:51 +01:00
Karl-Philipp Wulfert
558a04cfd8 docs: update report 2019-02-06 11:50:00 +01:00
Karl-Philipp Wulfert
221b54fb09 docs: update report 2019-02-06 09:57:37 +01:00
Karl-Philipp Wulfert
8b0799eb9d docs: update report 2019-02-05 15:55:30 +01:00
Karl-Philipp Wulfert
9b68b492ad docs: update changelog 2019-02-05 15:53:11 +01:00
Karl-Philipp Wulfert
cb7268802a 0.5.0 2019-02-05 15:52:45 +01:00
Karl-Philipp Wulfert
cd48929ca1 refactor: adjust to refactored GitLab API 2019-02-05 15:52:28 +01:00
Karl-Philipp Wulfert
201ec093b7 feat: add new task to remind about open merge requests 2019-02-05 15:52:08 +01:00
Karl-Philipp Wulfert
b15ef713a3 build: update dependencies 2019-02-05 15:49:31 +01:00
Karl-Philipp Wulfert
774b76b170 docs: update changelog 2019-02-05 15:47:10 +01:00
Karl-Philipp Wulfert
e7be1697ec 0.4.0 2019-02-05 15:47:04 +01:00
Karl-Philipp Wulfert
dc4a119172 build: update dependencies 2019-02-05 15:46:55 +01:00
Karl-Philipp Wulfert
80fd3aa42e refactor: adjust existing methods for greater scopes 2019-02-05 15:45:16 +01:00
Karl-Philipp Wulfert
e4cf8dac78 refactor: remove unused method 2019-02-05 15:44:58 +01:00
Karl-Philipp Wulfert
203700a16d refactor: use stricter types and backticks for strings 2019-02-05 15:44:38 +01:00
Karl-Philipp Wulfert
9d5e2727f8 feat: add type for merge request approval 2019-02-05 15:42:58 +01:00
Karl-Philipp Wulfert
2dc6e808a9 feat: add enums for stricter types 2019-02-05 15:42:40 +01:00
Karl-Philipp Wulfert
5f12c8e70a docs: update report 2019-02-05 10:43:52 +01:00
Karl-Philipp Wulfert
62ae50d4cb docs: update report 2019-02-04 11:27:19 +01:00
Jovan Krunić
fa6f3271cb docs: fix untranslated word 2019-02-01 08:40:01 +00:00
Karl-Philipp Wulfert
f78ed3b9eb docs: update report 2019-01-31 13:10:02 +01:00
Jovan Krunić
7519ba2bfe docs: update changelog 2019-01-30 15:43:39 +01:00
Jovan Krunić
f73d0779f1 0.2.1 2019-01-30 15:43:12 +01:00
Karl-Philipp Wulfert
6b1a4202f9 fix: use tsconfig.json of project for schema generation
Fixes #10
2019-01-30 15:15:03 +01:00
Karl-Philipp Wulfert
aa645a2cc4 feat: add function to find tsconfig.json 2019-01-30 15:15:03 +01:00
Karl-Philipp Wulfert
f2fb634bf3 docs: update report 2019-01-30 15:10:43 +01:00
Karl-Philipp Wulfert
87f812c857 docs: update changelog 2019-01-30 15:04:13 +01:00
Karl-Philipp Wulfert
4327e74970 build: update scripts 2019-01-30 15:03:33 +01:00
Karl-Philipp Wulfert
f04c9df48c 0.1.0 2019-01-30 15:02:22 +01:00
Karl-Philipp Wulfert
9a7f4cac0b docs: update changelog 2019-01-30 14:48:09 +01:00
Karl-Philipp Wulfert
f769b012d1 0.4.1 2019-01-30 14:48:04 +01:00
Karl-Philipp Wulfert
1607666266 build: adjust libs in tsconfig.json 2019-01-30 14:47:43 +01:00
Karl-Philipp Wulfert
031bbfbedb docs: update changelog 2019-01-30 14:33:47 +01:00
Karl-Philipp Wulfert
321c79e59e 0.4.0 2019-01-30 14:33:43 +01:00
Karl-Philipp Wulfert
47e977583b feat: add slack reminder for open merge requests 2019-01-30 14:32:05 +01:00
Michel Jonathan Schmitz
b094885b05 style: use single quotes 2019-01-30 14:26:27 +01:00
Michel Jonathan Schmitz
3bf69988f4 style: order the scripts alphabetically 2019-01-30 14:03:34 +01:00
Michel Jonathan Schmitz
2adc0a0213 refactor: use async and wait for adding schemas 2019-01-30 14:01:04 +01:00
Michel Jonathan Schmitz
466cc2579c docs: update the method description 2019-01-30 12:29:41 +00:00
Michel Jonathan Schmitz
0f179f1200 docs: add the hint to only use the method for SC types 2019-01-30 11:29:42 +00:00
Michel Jonathan Schmitz
e559234cea fix: add SC prefix to the camel cased type of the instance 2019-01-30 10:38:11 +00:00
Michel Jonathan Schmitz
721fa02d5b refactor: update the usage of the validator tool 2019-01-30 10:41:25 +01:00
Karl-Philipp Wulfert
d75f9429ac docs: update report 2019-01-30 10:03:18 +01:00
Michel Jonathan Schmitz
ba2de4b48f refactor: update the CLI examples 2019-01-30 08:14:47 +00:00
Sebastian Lange
1589845ccb docs: update and translate PITFALLS 2019-01-30 09:06:28 +01:00
Michel Jonathan Schmitz
da044bf470 refactor: update the dependencies 2019-01-29 16:04:03 +01:00
Karl-Philipp Wulfert
91851d8ade docs: update report 2019-01-29 14:32:24 +01:00
Karl-Philipp Wulfert
713bda7e04 docs: update changelog 2019-01-28 17:41:28 +01:00
Karl-Philipp Wulfert
6fae6180c0 0.1.0 2019-01-28 17:41:24 +01:00
Karl-Philipp Wulfert
a309c4026f build: update scripts 2019-01-28 17:41:08 +01:00
Karl-Philipp Wulfert
3fa84fe1b0 docs: update changelog 2019-01-28 16:57:13 +01:00
Karl-Philipp Wulfert
88331171f5 0.3.0 2019-01-28 16:57:02 +01:00
Karl-Philipp Wulfert
d3fb89c651 docs: update report 2019-01-28 16:56:45 +01:00
Karl-Philipp Wulfert
040c666e74 feat: include sub groups in report generation 2019-01-28 16:50:44 +01:00
Karl-Philipp Wulfert
f1fe412734 build: update dependencies 2019-01-28 16:49:21 +01:00
Karl-Philipp Wulfert
42f9d22481 docs: update changelog 2019-01-28 16:18:39 +01:00
Karl-Philipp Wulfert
a68ba59697 0.3.1 2019-01-28 16:18:34 +01:00
Karl-Philipp Wulfert
3e494ce0dc fix: correct property order 2019-01-28 16:18:15 +01:00
Karl-Philipp Wulfert
16f67c71eb docs: update changelog 2019-01-28 16:14:31 +01:00
Karl-Philipp Wulfert
be71d66218 0.3.0 2019-01-28 16:14:28 +01:00
Karl-Philipp Wulfert
1854f38190 feat: add method to get subgroups 2019-01-28 16:14:14 +01:00
Jovan Krunić
e37a23e8e0 build: update dependencies 2019-01-28 14:50:12 +01:00
Karl-Philipp Wulfert
557880d846 build: update scripts 2019-01-28 13:56:20 +01:00
Karl-Philipp Wulfert
3d9afcabb6 docs: update changelog 2019-01-28 13:54:03 +01:00
Karl-Philipp Wulfert
fdd372f864 0.5.1 2019-01-28 13:53:55 +01:00
Jovan Krunić
c46dc1828c fix: exclude CLI file in nyc configuration
Closes #5
2019-01-28 11:50:43 +01:00
Jovan Krunić
db240aa4b1 ci: provide lib via artifacts instead of cache
Closes #2
2019-01-25 17:46:44 +01:00
Karl-Philipp Wulfert
fd3cc7e3f2 docs: update report 2019-01-24 12:43:17 +01:00
Karl-Philipp Wulfert
3301545d45 docs: update changelog 2019-01-23 08:24:15 +01:00
Karl-Philipp Wulfert
4f8af3b2c2 0.2.2 2019-01-23 08:24:12 +01:00
Karl-Philipp Wulfert
8f06fc3534 fix: correctly determine project for issue 2019-01-23 08:20:03 +01:00
Karl-Philipp Wulfert
0e87e4f60d docs: update report 2019-01-23 08:19:56 +01:00
Karl-Philipp Wulfert
7ec00a415a docs: update report 2019-01-23 08:17:13 +01:00
Anselm Stordeur
d3a9f38539 feat: add minimal deployment 2019-01-22 13:39:04 +01:00
Karl-Philipp Wulfert
5d105c4fa4 docs: update changelog 2019-01-21 15:43:50 +01:00
Karl-Philipp Wulfert
db607545bb 0.2.0 2019-01-21 15:43:47 +01:00
Anselm Stordeur
515536f629 0.0.3 2019-01-21 15:01:34 +01:00
Anselm Stordeur
cac7dbfa7d ci: rename job names 2019-01-21 14:58:59 +01:00
Anselm Stordeur
df28f487e5 ci: add missing stage publish 2019-01-21 14:55:51 +01:00
Anselm Stordeur
5e3518bd62 ci: publish image after build and tests 2019-01-21 14:53:24 +01:00
Karl-Philipp Wulfert
44713d3852 docs: update changelog 2019-01-17 14:39:11 +01:00
Karl-Philipp Wulfert
c9d9cebfce 0.2.1 2019-01-17 14:39:08 +01:00
Karl-Philipp Wulfert
f2933ef9e2 fix: correctly add shebang line to cli 2019-01-17 14:38:40 +01:00
Karl-Philipp Wulfert
9c3cd369b0 docs: update changelog 2019-01-17 14:35:17 +01:00
Karl-Philipp Wulfert
15e20ab73c 0.2.0 2019-01-17 14:35:14 +01:00
Karl-Philipp Wulfert
a22ace9c18 docs: update reports 2019-01-17 14:35:02 +01:00
Karl-Philipp Wulfert
a95ec14be8 fix: correct link for projects 2019-01-17 14:33:20 +01:00
Karl-Philipp Wulfert
e902d705bf fix: do not add issues to report from backlog 2019-01-17 14:33:01 +01:00
Karl-Philipp Wulfert
98d58fa472 refactor: rename cli 2019-01-17 13:29:23 +01:00
Karl-Philipp Wulfert
48c34d9e1f refactor: fix type error with flattening arrays 2019-01-17 13:28:21 +01:00
Karl-Philipp Wulfert
6d5a47292c refactor: remove remnants of pack 2019-01-17 12:56:52 +01:00
Karl-Philipp Wulfert
41a349ead5 fix: unlabel issues with label meeting only 2019-01-17 11:23:27 +01:00
Karl-Philipp Wulfert
3a37e607ae build: update dependencies 2019-01-17 11:23:15 +01:00
Karl-Philipp Wulfert
ab19086400 refactor: remove pack 2019-01-17 11:23:05 +01:00
Anselm Stordeur
f26153d970 build: add prepublishOnly script 2019-01-16 19:40:00 +01:00
Anselm Stordeur
42713f061a docs: update changelog 2019-01-16 19:28:34 +01:00
Anselm Stordeur
7590497b8c 0.0.5 2019-01-16 19:28:15 +01:00
Karl-Philipp Wulfert
27b18bec89 docs: update reports 2019-01-16 17:51:14 +01:00
Karl-Philipp Wulfert
ad2e83379a docs: updat reports 2019-01-16 10:04:13 +01:00
Karl-Philipp Wulfert
faca4e1300 docs: enhance and fix readme 2019-01-15 12:18:50 +01:00
Karl-Philipp Wulfert
7438465149 feat: add pack script
Fixes #4
2019-01-14 17:57:18 +01:00
Karl-Philipp Wulfert
b9bd9ace50 docs: update reports 2019-01-14 17:07:48 +01:00
Karl-Philipp Wulfert
5194c0fb11 docs: update changelog 2019-01-14 14:10:45 +01:00
Karl-Philipp Wulfert
0cdc5b97bf 0.1.1 2019-01-14 14:10:32 +01:00
Karl-Philipp Wulfert
9852f67838 refactor: remove extraneous file 2019-01-14 14:09:55 +01:00
Sebastian Lange
b3ca8a2744 refactor: move SettingsProvider into package 'settings' 2019-01-11 13:53:19 +01:00
Sebastian Lange
d5fa2fd9a5 feat: add permission check for geoLocation setting 2019-01-11 13:47:29 +01:00
Anselm Stordeur
b248d1b5e0 fix: add missing dependency typedoc
Fixes #5
2019-01-10 17:07:00 +01:00
Anselm Stordeur
8c76221aad build: update all dependencies 2019-01-10 16:52:53 +01:00
Anselm Stordeur
3d82c94577 feat: allow env variables to overwrite smtp config
Fixes #3
2019-01-10 16:52:47 +01:00
Sebastian Lange
cd5ac500a0 build: fix npm vulnerabilities 2019-01-10 13:33:14 +01:00
Karl-Philipp Wulfert
e17ba3ea35 docs: update reports 2019-01-09 09:58:13 +01:00
Karl-Philipp Wulfert
93736043cc docs: update reports 2019-01-08 14:56:55 +01:00
Karl-Philipp Wulfert
a2bd0d113b docs: update changelog 2019-01-08 14:15:12 +01:00
Karl-Philipp Wulfert
0876e0cdf8 0.1.0 2019-01-08 14:15:08 +01:00
Karl-Philipp Wulfert
cc1074b817 ci: run tests 2019-01-08 11:48:30 +01:00
Karl-Philipp Wulfert
e82f235616 test: add tests for schema generation 2019-01-08 11:48:25 +01:00
Karl-Philipp Wulfert
e7a36635ff build: update scripts 2019-01-07 16:52:43 +01:00
Karl-Philipp Wulfert
6adf5990ce docs: update reports 2019-01-07 12:10:49 +01:00
Karl-Philipp Wulfert
961c70b5b0 docs: update changelog 2019-01-07 12:10:31 +01:00
Karl-Philipp Wulfert
2a7669de4a 0.1.2 2019-01-07 12:10:24 +01:00
Karl-Philipp Wulfert
577168d62e build: update scripts 2019-01-07 12:10:09 +01:00
Karl-Philipp Wulfert
085727e4a2 docs: update changelog 2019-01-07 12:08:41 +01:00
Karl-Philipp Wulfert
2044621fb3 0.1.1 2019-01-07 12:08:21 +01:00
Karl-Philipp Wulfert
ac8f2e10f9 fix: remove failing deletion of labels 2019-01-07 12:05:27 +01:00
Karl-Philipp Wulfert
5452fc86b3 refactor: temporary fix for wrong typing 2019-01-07 12:04:30 +01:00
Karl-Philipp Wulfert
4e5c3b127d build: update dependencies 2019-01-07 11:59:58 +01:00
Karl-Philipp Wulfert
4f1ab517c6 docs: update changelog 2019-01-07 11:54:07 +01:00
Karl-Philipp Wulfert
20cd3677ee 0.2.3 2019-01-07 11:54:02 +01:00
Karl-Philipp Wulfert
62a507163a build: automate adding of changelog 2019-01-07 11:53:45 +01:00
Karl-Philipp Wulfert
c1e8cadf24 docs: update changelog 2019-01-07 11:51:39 +01:00
Karl-Philipp Wulfert
0a1a81cfc0 0.2.2 2019-01-07 11:51:16 +01:00
Karl-Philipp Wulfert
f65b9aaf7f build: use correct lifecycle hook for publishes 2019-01-07 11:50:55 +01:00
Karl-Philipp Wulfert
130b39e3a2 docs: update changelog 2019-01-07 11:49:54 +01:00
Karl-Philipp Wulfert
f4bee971f5 0.2.1 2019-01-07 11:49:47 +01:00
Karl-Philipp Wulfert
5f36b5372f fix: correctly delete labels 2019-01-07 11:49:18 +01:00
Karl-Philipp Wulfert
7b7299d9c4 feat: validate generated schemas
Fixes #1
2018-12-19 15:34:26 +01:00
Karl-Philipp Wulfert
308235c6b4 ci: use npm install instead of ci 2018-12-19 14:55:04 +01:00
Karl-Philipp Wulfert
c84ecf146e docs: update reports 2018-12-19 09:55:53 +01:00
Karl-Philipp Wulfert
b3dcc2853b docs: update changelog 2018-12-18 22:29:33 +01:00
Karl-Philipp Wulfert
623e0da721 0.0.3 2018-12-18 22:29:16 +01:00
Karl-Philipp Wulfert
611882f752 build: build before packing 2018-12-18 22:28:59 +01:00
Karl-Philipp Wulfert
6502bcf2b5 fix: do not ignore resources 2018-12-18 22:28:39 +01:00
Karl-Philipp Wulfert
b623f1cb3b ci: use npm install instead of ci 2018-12-18 22:15:29 +01:00
Karl-Philipp Wulfert
ff3d73cb5e ci: use npm ci instead of install 2018-12-18 18:14:07 +01:00
Karl-Philipp Wulfert
1950032519 docs: update changelog 2018-12-18 17:59:56 +01:00
Karl-Philipp Wulfert
1aa9e2e316 0.0.2 2018-12-18 17:59:48 +01:00
Karl-Philipp Wulfert
ec98d20b4a build: fix build process 2018-12-18 17:59:12 +01:00
Karl-Philipp Wulfert
40a21110db ci: use correct image 2018-12-18 17:46:08 +01:00
Karl-Philipp Wulfert
e4cdba3c03 refactor: remove extraneous file 2018-12-18 17:45:55 +01:00
Karl-Philipp Wulfert
d747477428 docs: add changelog 2018-12-18 17:41:48 +01:00
Karl-Philipp Wulfert
1ac90ef633 feat: add core tools 2018-12-18 17:41:03 +01:00
Karl-Philipp Wulfert
0c368eeba6 docs: update changelog 2018-12-18 13:19:39 +01:00
Karl-Philipp Wulfert
0c07fc801e 0.5.0 2018-12-18 13:19:32 +01:00
Karl-Philipp Wulfert
04b6154f9a fix: use template for .gitignore 2018-12-18 13:17:35 +01:00
Karl-Philipp Wulfert
d5e4259e58 build: update dependencies 2018-12-18 13:17:31 +01:00
Jovan Krunić
8978bd4a14 docs: update CHANGELOG 2018-12-14 17:10:38 +01:00
Jovan Krunić
c15a98af36 0.0.2 2018-12-14 17:06:30 +01:00
Sebastian Lange
0bec18bdf7 docs: adjust labels in issue templates 2018-12-13 16:25:15 +00:00
Karl-Philipp Wulfert
6a90b0791d docs: add badges to readme 2018-12-13 14:42:49 +01:00
Karl-Philipp Wulfert
47e9576624 docs: update changelog 2018-12-13 14:03:50 +01:00
Karl-Philipp Wulfert
6a05909ab7 0.1.0 2018-12-13 14:03:28 +01:00
Karl-Philipp Wulfert
7cb64d7f86 refactor: change move to unlabel 2018-12-13 14:03:01 +01:00
Karl-Philipp Wulfert
643cc6f159 ci: replace ci_build variables
Fixes #7
2018-12-12 13:38:15 +01:00
Jovan Krunić
8b23159e67 feat: add the app 2018-12-11 22:11:50 +01:00
Jovan Krunić
b4268b236f ci: add image for building the app 2018-12-11 22:05:31 +01:00
Karl-Philipp Wulfert
5f6be5fce1 docs: update changelog 2018-12-11 16:34:55 +01:00
Karl-Philipp Wulfert
c382ecc4ee 0.4.0 2018-12-11 16:34:46 +01:00
Rainer Killinger
e134778aa2 ci: adapt docker:dind scheme and update base image 2018-12-11 12:14:00 +00:00
Karl-Philipp Wulfert
4b23f8cd7e docs: add minor tweaks to project docs 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert
f81be04e22 docs: add basic setup instructions 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert
b277d9fd39 docs: add workflow documentation to readme 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert
7981463255 docs: add worklow docs 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert
c3182caba5 docs: add list of license plates 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert
4e1441564b feat: disallow spaces in curly braces
Fixes #2
2018-12-06 16:35:34 +01:00
Anselm Stordeur
b64e9063a3 feat: add database image 2018-12-05 17:12:40 +01:00
Anselm Stordeur
eb7c334bb8 fix: remove trailing slash from url if needed 2018-12-05 15:44:39 +01:00
Anselm Stordeur
8541b00dbb fix: add type and batchSize to required parameters
Closes #1
2018-12-04 17:56:22 +01:00
Karl-Philipp Wulfert
d7f33f733a docs: update changelog 2018-12-04 17:28:37 +01:00
Karl-Philipp Wulfert
411773d1f6 0.3.1 2018-12-04 17:28:13 +01:00
Karl-Philipp Wulfert
b1c27c064a build: fix inconsistencies in .npmignore 2018-12-04 17:27:52 +01:00
Karl-Philipp Wulfert
941570a140 refactor: add prefix to templates to avoid side effects 2018-12-04 17:27:24 +01:00
Karl-Philipp Wulfert
48fbd6ee38 docs: update changelog 2018-12-04 17:04:58 +01:00
Karl-Philipp Wulfert
611dea4210 0.3.0 2018-12-04 17:04:46 +01:00
Karl-Philipp Wulfert
a5c39aa4f3 refactor: make path option value not optional 2018-12-04 16:47:11 +01:00
Karl-Philipp Wulfert
d06c56aec4 docs: add documentation for added script 2018-12-04 16:28:30 +01:00
Karl-Philipp Wulfert
bb0f1637c7 ci: remove tslint test job 2018-12-04 16:25:15 +01:00
Karl-Philipp Wulfert
1a72f20c10 refactor: add license headers to source files 2018-12-04 16:15:54 +01:00
Karl-Philipp Wulfert
adfc5aa5dc feat: add script to check configuration 2018-12-04 14:53:14 +01:00
Karl-Philipp Wulfert
594842c7b8 build: remove extraneous files from .npmignore 2018-12-04 14:52:39 +01:00
Karl-Philipp Wulfert
96651b1c12 docs: make badges consistent 2018-12-04 14:36:06 +01:00
Karl-Philipp Wulfert
a3f858942b ci: use npm ci instead of npm install 2018-12-04 14:16:48 +01:00
Karl-Philipp Wulfert
d5e58586a6 build: add entry for binary 2018-12-04 14:13:31 +01:00
Karl-Philipp Wulfert
f53e2aa3b8 ci: add ci config 2018-12-04 14:11:46 +01:00
Karl-Philipp Wulfert
ffe2bda937 docs: update readme 2018-12-04 14:11:38 +01:00
Karl-Philipp Wulfert
827d87ba03 build: fix inconsistencies with .npmignore 2018-12-04 14:11:14 +01:00
Karl-Philipp Wulfert
0017c0f3ce build: ignore errors on install hook 2018-12-04 13:03:40 +01:00
Karl-Philipp Wulfert
dae09c5c59 build: update .gitignore 2018-12-04 13:00:55 +01:00
Karl-Philipp Wulfert
98aa5a5f70 feat: add cli to copy configurations
Fixes #1
2018-12-04 13:00:50 +01:00
Jovan Krunić
47f0a4bd3d docs: add changelog 2018-12-03 18:08:38 +01:00
Jovan Krunić
a8307bf975 0.0.2 2018-12-03 18:07:14 +01:00
Jovan Krunić
d09744c5ff chore: update dependencies 2018-12-03 18:04:21 +01:00
Jovan Krunić
3adad8d95b docs: update package name in README 2018-12-03 18:03:55 +01:00
Jovan Krunić
d332f6e6b5 feat: add minimal connector 2018-12-03 18:02:16 +01:00
Karl-Philipp Wulfert
071f39fdd8 ci: except building the project from schedules 2018-12-03 17:38:23 +01:00
Karl-Philipp Wulfert
aa2cffa95e ci: use built images 2018-12-03 17:38:23 +01:00
Karl-Philipp Wulfert
94538ad5ac ci: build images on schedule 2018-12-03 17:38:23 +01:00
Karl-Philipp Wulfert
cb8bb21d0d docs: update changelog 2018-12-03 14:42:29 +01:00
Karl-Philipp Wulfert
756eca860a 0.0.2 2018-12-03 14:42:18 +01:00
Karl-Philipp Wulfert
e3404793db docs: make readme nicer 2018-12-03 14:41:49 +01:00
Karl-Philipp Wulfert
84beb5065e docs: add issue templates 2018-12-03 14:14:39 +01:00
Karl-Philipp Wulfert
06bbbd4891 build: use platform independent build tools
Fixes #5
2018-12-03 13:07:07 +01:00
Karl-Philipp Wulfert
50b5cf04f1 docs: add author and contributors 2018-11-30 17:27:40 +01:00
Karl-Philipp Wulfert
37a424c311 docs: update changelog 2018-11-30 16:49:11 +01:00
Karl-Philipp Wulfert
767df6ba32 0.2.0 2018-11-30 16:48:33 +01:00
Karl-Philipp Wulfert
f228af24f9 feat: copy .editorconfig during installation 2018-11-30 16:47:57 +01:00
Karl-Philipp Wulfert
7cc274c3d5 docs: update changelog 2018-11-30 16:13:15 +01:00
Karl-Philipp Wulfert
6dcf959355 0.1.1 2018-11-30 16:13:06 +01:00
Karl-Philipp Wulfert
d28d19bfc7 build: add .editorconfig to npm package 2018-11-30 16:12:45 +01:00
Karl-Philipp Wulfert
fc3f54d3cf docs: update changelog 2018-11-30 16:09:34 +01:00
Karl-Philipp Wulfert
90d496f7b9 0.1.0 2018-11-30 16:09:34 +01:00
Karl-Philipp Wulfert
ecbc768b32 feat: add editor config 2018-11-30 16:09:34 +01:00
Karl-Philipp Wulfert
e2b9e1a07e refactor: adjust report generation and tidying 2018-11-30 14:09:47 +01:00
Karl-Philipp Wulfert
07b1c76a57 docs: update changelog 2018-11-30 11:37:37 +01:00
Karl-Philipp Wulfert
20e73a0f26 0.2.0 2018-11-30 11:37:28 +01:00
Karl-Philipp Wulfert
ae6968afa4 build: update typescript 2018-11-30 11:37:14 +01:00
Karl-Philipp Wulfert
ad5b0b9fe5 fix: correctly build request url 2018-11-30 11:36:18 +01:00
Karl-Philipp Wulfert
c163285d05 refactor: consistently handle leading slash 2018-11-30 11:35:55 +01:00
Karl-Philipp Wulfert
b828bd89ee docs: update changelog 2018-11-30 11:27:25 +01:00
Karl-Philipp Wulfert
f8f099bb93 0.1.3 2018-11-30 11:27:09 +01:00
Karl-Philipp Wulfert
5e358bcacd fix: remove undocumented default params 2018-11-30 11:26:51 +01:00
Karl-Philipp Wulfert
b59dde2a48 docs: add changelog 2018-11-29 17:39:31 +01:00
Karl-Philipp Wulfert
4839f941c6 feat: add api 2018-11-29 17:38:57 +01:00
Karl-Philipp Wulfert
0ca6af8226 docs: update changelog 2018-11-29 14:39:52 +01:00
Karl-Philipp Wulfert
67bfc53af2 0.1.2 2018-11-29 14:39:46 +01:00
Karl-Philipp Wulfert
547e28fc57 fix: use correct prefix for binary 2018-11-29 14:39:26 +01:00
Karl-Philipp Wulfert
0ff24e2ca8 docs: update changelog 2018-11-29 14:37:32 +01:00
Karl-Philipp Wulfert
d8a5ea03ab 0.1.1 2018-11-29 14:37:13 +01:00
Karl-Philipp Wulfert
b55799b851 build: add shebang line to cli 2018-11-29 14:36:45 +01:00
Karl-Philipp Wulfert
a706928f51 refactor: use lowercase for meeting label 2018-11-29 14:01:45 +01:00
Karl-Philipp Wulfert
8ae1a51669 feat: add issue template for features 2018-11-29 14:01:28 +01:00
Karl-Philipp Wulfert
82cb6970bf ci: use dind for building docker images 2018-11-29 13:52:24 +01:00
Karl-Philipp Wulfert
883ab9bfa5 feat: add nyc configuration 2018-11-29 13:48:02 +01:00
Karl-Philipp Wulfert
85228cef80 docs: add changelog 2018-11-29 13:36:42 +01:00
Karl-Philipp Wulfert
19fd0f6e4c feat: add projectmanagement and pack 2018-11-29 13:36:34 +01:00
Karl-Philipp Wulfert
40beb93a17 docs: update changelog 2018-11-29 13:02:39 +01:00
Karl-Philipp Wulfert
6266eef401 0.1.0 2018-11-29 13:02:09 +01:00
Karl-Philipp Wulfert
9b8c960144 ci: replace test with audit job 2018-11-29 12:57:47 +01:00
Karl-Philipp Wulfert
fd9fd8dbd9 refactor: remove prefixes 2018-11-29 12:57:29 +01:00
Karl-Philipp Wulfert
8a823f0e3c docs: add changelog 2018-11-29 12:10:04 +01:00
Karl-Philipp Wulfert
54d212963c feat: add GitLab API 2018-11-29 12:09:55 +01:00
Karl-Philipp Wulfert
6bc370c577 docs: remove extraneous parenthesis 2018-11-29 09:24:43 +00:00
Anselm Stordeur
cdbbb0ae1f docs: update changelog 2018-11-28 19:06:07 +01:00
Anselm Stordeur
eff8216aff 0.0.4 2018-11-28 19:05:52 +01:00
Anselm Stordeur
77c5be6747 ci: rename publish stage to deploy 2018-11-28 19:05:35 +01:00
Anselm Stordeur
ac589f0173 docs: update changelog 2018-11-28 18:50:58 +01:00
Anselm Stordeur
35fc915696 0.0.3 2018-11-28 18:50:43 +01:00
Anselm Stordeur
9cde9aa95a ci: move docs to public folder 2018-11-28 18:50:23 +01:00
Anselm Stordeur
ebae32b88f docs: update changelog 2018-11-28 18:37:51 +01:00
Anselm Stordeur
7aeef17f20 0.0.2 2018-11-28 18:37:17 +01:00
Anselm Stordeur
ae868a890f ci: add missing stage to .gitlab-ci.yml 2018-11-28 18:34:13 +01:00
Anselm Stordeur
2e0bbb87df docs: add changelog 2018-11-28 18:31:25 +01:00
Anselm Stordeur
911d71cf3b feat: add logger 2018-11-28 18:31:01 +01:00
Karl-Philipp Wulfert
ac8119e82c docs: change title in readme 2018-11-28 17:47:50 +01:00
Karl-Philipp Wulfert
d11c8270d0 docs: update changelog 2018-11-28 17:28:04 +01:00
Karl-Philipp Wulfert
a529126f61 0.0.2 2018-11-28 17:27:39 +01:00
Karl-Philipp Wulfert
71a8729d4d build: install correct package for changelog 2018-11-28 17:27:06 +01:00
Karl-Philipp Wulfert
ccc5ba5313 docs: add changelog 2018-11-28 16:43:58 +01:00
Karl-Philipp Wulfert
e2bb08d1e8 feat: add tslint and tsconfig 2018-11-28 16:43:15 +01:00
1570 changed files with 148502 additions and 39566 deletions

5
.c8rc.json Normal file
View File

@@ -0,0 +1,5 @@
{
"all": true,
"src": "./src",
"reporter": ["text", "text-summary", "cobertura"]
}

8
.changeset/README.md Normal file
View File

@@ -0,0 +1,8 @@
# Changesets
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)

11
.changeset/config.json Normal file
View File

@@ -0,0 +1,11 @@
{
"$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json",
"changelog": "@changesets/changelog-git",
"commit": false,
"fixed": [],
"linked": [["@openstapps/*"]],
"access": "restricted",
"baseBranch": "develop",
"updateInternalDependencies": "patch",
"ignore": []
}

1
.envrc Normal file
View File

@@ -0,0 +1 @@
use flake

17
.gitattributes vendored Normal file
View File

@@ -0,0 +1,17 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

21
.gitignore vendored
View File

@@ -10,6 +10,21 @@ pids
*.pid
*.seed
*.pid.lock
.DS_Store
.angular/
www/
.docs.json
coverage.xml
report-junit.xml
.deploy/
.venv/
# NixOS flake
result
hsperfdata_root
.direnv/
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
@@ -34,6 +49,7 @@ build/Release
# Dependency directories
node_modules/
.pnpm-store/
jspm_packages/
# TypeScript v1 declaration files
@@ -55,7 +71,7 @@ typings/
.yarn-integrity
# dotenv environment variables file
.env
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
@@ -92,3 +108,6 @@ docs
# report directory
report
# turbo cache
.turbo/

View File

@@ -1,130 +1,140 @@
image: registry.gitlab.com/openstapps/projectmanagement/node
# `rules: if $CI_PIPELINE_SOURCE == 'merge_request_event'` seems to convert the whole
# workflow into a merge request pipeline, effectively removing all the jobs.
# To work around that, add:
# ```
# rules:
# when: on_success
# ```
# To your pipeline.
# https://docs.gitlab.com/ee/ci/pipelines/merge_request_pipelines.html#use-rules-to-add-jobs
before_script:
- npm install
.limit_pipelines:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_BRANCH == 'develop'
when: on_success
- when: never
include:
- local: /backend/backend/.gitlab-ci.yml
- local: /frontend/app/.gitlab-ci.yml
- local: /.gitlab/schedules.gitlab-ci.yml
- local: /.gitlab/publishing.gitlab-ci.yml
variables:
TURBO_CACHE_BYPASS:
value: ''
options:
- '--force'
- '--no-cache'
- ''
description: Bypass turbo cache
default:
image: registry.gitlab.com/openstapps/openstapps/node-builder
tags:
- saas-linux-xlarge-amd64
interruptible: true
before_script:
- corepack enable
- corepack prepare pnpm@latest-8 --activate
- echo TURBO_API=$TURBO_API >> .env.local
- echo TURBO_TOKEN=$TURBO_TOKEN >> .env.local
- echo TURBO_TEAM=$TURBO_TEAM >> .env.local
- pnpm config set store-dir .pnpm-store
cache: &pnpm_cache
key:
files:
- pnpm-lock.yaml
paths:
- .pnpm-store/
policy: pull
stages:
- setup
- build
- review
- test
- audit
- deploy
- publish
build:
tags:
- performance
stage: build
script:
- npm run build
artifacts:
paths:
- lib
expire_in: 1 week
# - pnpm config set recursive-install false
# - pnpm i --prefer-offline
# - pnpm build:full:skip || pnpm i -r --prefer-offline
- pnpm install
# TODO: whats the benifit for CI? something doesn't work with git here...
# "🦋 error Error: Failed to find where HEAD diverged from master. Does master exist?"
# - pnpm changeset:status
- pnpm build:full $TURBO_CACHE_BYPASS
- .gitlab/ci/enableGitlabReviewToolbar.sh frontend/app/www/index.html "$CI_PROJECT_ID" "$CI_OPEN_MERGE_REQUESTS"
- cp frontend/app/www/index.html frontend/app/www/200.html
- pnpm dlx surge -p frontend/app/www -d https://$CI_PROJECT_NAME-$DEPLOY_ID.surge.sh/
cache:
<<: *pnpm_cache
policy: pull-push
environment:
name: review/$DEPLOY_ID
url: https://$CI_PROJECT_NAME-$DEPLOY_ID.surge.sh/
on_stop: stop review
rules: &deploy-rules
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
variables:
DEPLOY_ID: $CI_MERGE_REQUEST_IID
- if: $CI_COMMIT_BRANCH == 'main'
variables:
DEPLOY_ID: production
- if: $CI_COMMIT_BRANCH == 'develop'
variables:
DEPLOY_ID: staging
- !reference [.limit_pipelines, rules]
build-ts-3.8.3:
tags:
- performance
stop review:
stage: build
needs: ['build']
script:
- npm uninstall typescript
- npm install typescript@3.8.3
- npm run build
docs_review:
dependencies:
- build
stage: review
script:
- npm run documentation
- ./node_modules/.bin/surge -p ./docs -d https://$CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh/
when: manual
- pnpm dlx surge teardown $CI_PROJECT_NAME-$DEPLOY_ID.surge.sh
environment:
name: review/$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_NAME
url: https://$CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh/
on_stop: stop_review
except:
- master
- develop
tags:
- secrecy
stop_review:
stage: review
variables:
GIT_STRATEGY: none
script:
- ./node_modules/.bin/surge teardown $CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh
when: manual
environment:
name: review/$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_NAME
name: review/$DEPLOY_ID
action: stop
tags:
- secrecy
when: manual
rules: *deploy-rules
unit:
image: registry.gitlab.com/openstapps/openstapps/app-builder
stage: test
needs: ['build']
script:
# - pnpm config set recursive-install false
# - pnpm i --prefer-offline
# - pnpm test:skip || pnpm i -r --prefer-offline
- pnpm install
- cd node_modules/.pnpm/re2*/node_modules/re2
- npm run install
- cd $CI_PROJECT_DIR
- pnpm test $TURBO_CACHE_BYPASS
coverage: '/Statements[^:]*\:[^:]*\s+([\d\.]+)%/'
artifacts:
when: on_failure
paths:
- report-junit.xml
- coverage.xml
reports:
junit:
- report-junit.xml
coverage_report:
coverage_format: cobertura
path: coverage.xml
rules:
- !reference [.limit_pipelines, rules]
audit:
stage: audit
script:
- npm audit
allow_failure: true
except:
- schedules
scheduled-audit:
stage: audit
needs: []
script:
- npm audit --audit-level=high
only:
- schedules
test:
dependencies:
- build
stage: test
script:
- npm test
artifacts:
paths:
- report
- coverage
mapping:
tags:
- performance
dependencies:
- build
stage: test
services:
- name: registry.gitlab.com/openstapps/database:master
alias: elasticsearch
script:
- npm run mappings-integration
artifacts:
paths:
- lib
package:
dependencies:
- build
tags:
- secrecy
stage: publish
script:
- echo "//registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN" > ~/.npmrc
- npm publish
only:
- /^v[0-9]+.[0-9]+.[0-9]+$/
artifacts:
paths:
- lib
pages:
stage: deploy
script:
- npm run documentation
- mv docs public
only:
- /^v[0-9]+\.[0-9]+\.[0-9]+$/
artifacts:
paths:
- public
- pnpm audit --prod --audit-level critical
rules:
- if: $CI_COMMIT_BRANCH == 'main'
allow_failure: false
- !reference [.limit_pipelines, rules]

View File

@@ -0,0 +1,16 @@
#!/usr/bin/env sh
set -e
# Adds a preedefined script tag including the merge current request id to the angular web app index.html.
# This enables the interactive gitlab review toolbar.
MERGE_REQUEST_ID=""
if echo -n $3 | grep -Eq '[0-9]+$'; then
MERGE_REQUEST_ID="$(echo -n "$3" | grep -Eo '[0-9]+$')"
fi
INDEX_PATH=$(dirname $1)
SCRIPT_TAG="<script defer data-project-id=\"$2\" data-project-path=\"openstapps/openstapps\" data-merge-request-id=\"$MERGE_REQUEST_ID\" data-mr-url=\"https://gitlab.com\" id=\"review-app-toolbar-script\" src=\"visual_review_toolbar.js\"></script>"
curl https://gitlab.com/assets/webpack/visual_review_toolbar.js --output "$INDEX_PATH/visual_review_toolbar.js" --silent
sed -i -e "\@</head>@i\\$SCRIPT_TAG" $1

View File

@@ -0,0 +1,4 @@
#!/usr/bin/env sh
# script returns string with everything after the last colon of $1 input
echo -n $1 | grep -oE '[^:]+$'

8
.gitlab/ci/getRegistryTag.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env sh
# script returns semantical versioning string like 2.0.0 (if $1 is v2.0.0) or $1
if echo -n $1 | grep -Eq 'v[0-9]+\.[0-9]+\.[0-9]+'; then
echo $(echo -n "$1" | cut -c 2-);
else
echo $1;
fi

View File

@@ -0,0 +1,6 @@
#!/usr/bin/env sh
if pnpm dlx turbo-ignore "$@"
then
pnpm config --location=project set recursive-install false
fi

View File

@@ -0,0 +1,7 @@
#!/usr/bin/env sh
# If this is a pipeline of a version tag, also push this version
# as latest to the registry alias $2:latest
if echo -n $1 | grep -Eq 'v[0-9]+\.[0-9]+\.[0-9]+'; then
docker push $2:latest;
fi

5
.gitlab/ci/setup_turbo_env.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
echo TURBO_API=$TURBO_API >> .env.local
echo TURBO_TOKEN=$TURBO_TOKEN >> .env.local
echo TURBO_TEAM=$TURBO_TEAM >> .env.local

29
.gitlab/ci/testCIScripts.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/usr/bin/env sh
# test all CI scripts
SCRIPT_DIR=$(dirname "$0")
TAG_VERSION=$(sh $SCRIPT_DIR/getRegistryTag.sh "v1.0.0")
TAG_TEST=$(sh $SCRIPT_DIR/getRegistryTag.sh "TEST")
BRANCH_NAME=$(sh $SCRIPT_DIR/getRegistryBranch.sh "very:first:test")
# Leaving out pushAsLatestVersion.sh as its control flow
# is based on the same condition as getRegistryTag.sh
if [ $TAG_VERSION != "1.0.0" ]; then
echo "ERROR in CI SCRIPT: $SCRIPT_DIR/getRegistryTag.sh"
return 1
fi
if [ $TAG_TEST != "TEST" ]; then
echo "ERROR in CI SCRIPT: $SCRIPT_DIR/getRegistryTag.sh"
return 2
fi
if [ $BRANCH_NAME != "test" ]; then
echo "ERROR in CI SCRIPT: $SCRIPT_DIR/getRegistryBranch.sh"
return 3
fi
return 0

View File

@@ -1,13 +1,32 @@
## What's wrong with the current model?
## Summary
???
(Summarize the bug encountered concisely)
## How should the model be instead?
## Steps to reproduce
???
(How one can reproduce the issue - this is very important)
## Why should the model be that way?
## Example Project
??? - Describe use case!
(If possible, please create an example project here on GitLab.com that exhibits the problematic behaviour, and link to it here in the bug report)
(If you are using an older version of GitLab, this will also determine whether the bug has been fixed in a more recent version)
## What is the current bug behavior?
(What actually happens)
## What is the expected correct behavior?
(What you should see instead)
## Relevant logs and/or screenshots
(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)
## Possible fixes
(If you can, link to the line of code that might be responsible for the problem)
/label ~bug ~meeting

View File

@@ -1,15 +1,17 @@
## What needs to be modeled?
## Description
???
(Describe the feature that you're requesting concisely)
## Why is a new model necessary?
## Explanation
??? - Describe use case!
(Explain why the feature is necessary)
## Dependencies, issues, features that need to be resolved beforehand
## Mockups/Screenshots
1. ???
2. ???
3. ...
(If possible, provide mockups or screenshots, which demonstrate the feature)
## Dependencies, issues to be resolved beforehand
(List issues or dependencies that need to be resolved before this feature can be implemented)
/label ~feature ~meeting

View File

@@ -1,8 +1,8 @@
## What needs to be remodeled?
## What needs to be changed?
??? - Describe use case!
## How is the current model not sufficient?
## How is the current state not sufficient?
???
@@ -14,4 +14,4 @@
???
/label ~feature ~meeting
/label ~improvement ~meeting

View File

@@ -0,0 +1,83 @@
.limit_publish_pipelines:
rules:
- if: '$CI_COMMIT_BRANCH == "develop" && $CI_COMMIT_MESSAGE =~ /ci: publish prerelease/ && $CI_PIPELINE_SOURCE != "schedule"'
variables:
PUBLISH_TAG: next
- if: '$CI_COMMIT_BRANCH == "main" && $CI_COMMIT_MESSAGE =~ /ci: publish release/ && $CI_PIPELINE_SOURCE != "schedule"'
variables:
PUBLISH_TAG: latest
deploy:
stage: publish
needs: ['build', 'unit', 'integration', 'e2e', 'audit']
script:
- pnpm install
- pnpm run deploy
artifacts:
paths:
- ./.deploy
- ./frontend/app/www
rules:
- !reference [.limit_publish_pipelines, rules]
publish image:
stage: publish
inherit:
default:
- tags
needs: ['deploy']
image:
name: gcr.io/kaniko-project/executor:v1.12.1-debug
entrypoint: [""]
script:
- >
/kaniko/executor
--context "${CI_PROJECT_DIR}/${DEPLOY_DIR}"
--dockerfile "${CI_PROJECT_DIR}/${DEPLOY_DIR}/Dockerfile"
--destination "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:$(grep -o '"version": "[^"]*' "${DEPLOY_DIR}/package.json" | cut -d'"' -f4)"
--destination "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${PUBLISH_TAG}"
parallel:
matrix:
- IMAGE_NAME: database
DEPLOY_DIR: backend/database
- IMAGE_NAME: backend
DEPLOY_DIR: .deploy/backend
- IMAGE_NAME: proxy
DEPLOY_DIR: .deploy/proxy
- IMAGE_NAME: api
DEPLOY_DIR: .deploy/api-cli
- IMAGE_NAME: minimal-connector
DEPLOY_DIR: .deploy/minimal-connector
- IMAGE_NAME: minimal-plugin
DEPLOY_DIR: .deploy/minimal-plugin
- IMAGE_NAME: app
DEPLOY_DIR: frontend/app
rules:
- !reference [.limit_publish_pipelines, rules]
publish packages:
stage: publish
needs: ['deploy']
variables:
GIT_STRATEGY: clone
GIT_DEPTH: 0
script:
- pnpm install
- pnpm build
- pnpm config set '//registry.npmjs.org/:_authToken' "${NPM_AUTH_TOKEN}"
- pnpm publish -r --publish-branch ${CI_COMMIT_BRANCH} --tag ${PUBLISH_TAG} --no-git-checks # TODO: Git checks...
rules:
- !reference [.limit_publish_pipelines, rules]
publish docs:
stage: publish
needs: ['deploy']
script:
- pnpm install --prefer-offline
- pnpm run docs
- mv docs public
artifacts:
paths:
- public
rules:
- !reference [.limit_publish_pipelines, rules]

View File

@@ -0,0 +1,35 @@
.limit_scheduled_pipelines:
rules:
- if: $CI_COMMIT_BRANCH == 'main' && $CI_PIPELINE_SOURCE == "schedule"
base image:
image: docker
stage: setup
tags:
- gitlab-org-docker
inherit:
default:
- interruptible
services:
- docker:dind
script:
- >
docker login -u "${CI_REGISTRY_USER}" -p "${CI_JOB_TOKEN}" "${CI_REGISTRY}" &&
docker build
-t "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:$(grep -o '"version": "[^"]*' "${DEPLOY_DIR}/package.json" | cut -d'"' -f4)"
-t "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:latest" "${CI_PROJECT_DIR}/${DEPLOY_DIR}" &&
docker push "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}" --all-tags
cache: {} # disable irrelevant cache for this job
before_script: [] # do not run irrelevant before script for this job
parallel:
matrix:
- IMAGE_NAME: node-base
DEPLOY_DIR: images/node-base
- IMAGE_NAME: node-builder
DEPLOY_DIR: images/node-builder
- IMAGE_NAME: app-builder
DEPLOY_DIR: images/app-builder
- IMAGE_NAME: app-cypress
DEPLOY_DIR: images/app-cypress
rules:
- !reference [.limit_scheduled_pipelines, rules]

View File

@@ -1,5 +1,3 @@
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <git@killinger.co>
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <killinge@hrz.uni-frankfurt.de>
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <killinger@hrz.uni-frankfurt.de>
Wieland Schöbl <wulkanat@gmail.com> wulkanat@gmail.com <wulkanat@gmail.com>
Wieland Schöbl <wulkanat@gmail.com> Wieland Schöbl <wieland.schoebl@campus.tu-berlin.de>

7
.mocharc.json Normal file
View File

@@ -0,0 +1,7 @@
{
"extension": ["ts"],
"node-option": ["loader=ts-node/esm"],
"reporter": "mocha-junit-reporter",
"reporter-option": ["mochaFile=coverage/report-junit.xml"],
"spec": ["test/**/*.spec.ts"]
}

View File

@@ -1,12 +0,0 @@
# Ignore all files/folders by default
# See https://stackoverflow.com/a/29932318
/*
# Except these files/folders
!lib
lib/tsconfig.tsbuildinfo
!LICENSE
!package.json
!package-lock.json
!README.md
!src
!test/resources/

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
auto-install-peers=true

23
.pnpmfile.cjs Normal file
View File

@@ -0,0 +1,23 @@
const path = require("path");
// const merge = require("deepmerge");
const additionalDeps = {
'@openstapps/eslint-config': require('./configuration/eslint-config/package.json'),
'@openstapps/prettier-config': require('./configuration/prettier-config/package.json'),
}
function readPackage(pkg, context) {
for (const dep in additionalDeps) {
if (dep in pkg.devDependencies) {
Object.assign(pkg.devDependencies, additionalDeps[dep].peerDependencies)
}
}
return pkg
}
module.exports = {
hooks: {
readPackage,
}
}

1
.prettierignore Normal file
View File

@@ -0,0 +1 @@
pnpm-lock.yaml

65
.syncpackrc.cjs Normal file
View File

@@ -0,0 +1,65 @@
// @ts-check
/** @type {import('syncpack').RcFile} */
const config = {
semverGroups: [
{
range: '',
dependencies: ['**'],
packages: ['**'],
}
],
source: ['package.json', '**/package.json'],
indent: ' ',
sortFirst: [
'name',
'description',
'version',
'private',
'type',
'license',
'repository',
'author',
'contributors',
'keywords',
'main',
'types',
'bin',
'files',
'engines',
'scripts',
'dependencies',
'devDependencies',
'peerDependencies',
'pnpm',
'tsup',
'prettier',
'eslintConfig',
'eslintIgnore',
'nyc',
],
versionGroups: [
{
label: 'Package version is controlled by changesets',
dependencies: ['**'],
dependencyTypes: ['workspace'],
packages: ['**'],
isIgnored: true,
},
{
label: 'ES Mapping Generator Special Dependencies',
dependencies: ['typescript', 'typedoc', 'ts-node', '@types/node', 'got'],
packages: ['@openstapps/es-mapping-generator'],
isIgnored: true,
},
{
label: 'Packages should use workspace version',
dependencies: ['@openstapps/**'],
dependencyTypes: ['prod', 'dev', 'peer'],
packages: ['**'],
pinVersion: 'workspace:*',
},
],
};
module.exports = config;

3
.tool-versions Normal file
View File

@@ -0,0 +1,3 @@
nodejs 18.19.1
pnpm 8.15.4
python 3.11.5

View File

@@ -1,597 +0,0 @@
# [0.66.0](https://gitlab.com/openstapps/core/compare/v0.65.1...v0.66.0) (2022-05-11)
### Features
* add geo filter envelope support ([484be6a](https://gitlab.com/openstapps/core/commit/484be6a890d743601efa5d40d33ea2c619f3126d))
## [0.65.1](https://gitlab.com/openstapps/core/compare/v0.65.0...v0.65.1) (2022-04-04)
# [0.65.0](https://gitlab.com/openstapps/core/compare/v0.64.0...v0.65.0) (2022-04-04)
# [0.64.0](https://gitlab.com/openstapps/core/compare/v0.63.0...v0.64.0) (2022-03-21)
# [0.63.0](https://gitlab.com/openstapps/core/compare/v0.62.0...v0.63.0) (2022-01-24)
### Bug Fixes
* add auth object to index route ([e149931](https://gitlab.com/openstapps/core/commit/e14993114f0ec370775010eee4ad0d302a0beebb))
# [0.62.0](https://gitlab.com/openstapps/core/compare/v0.61.0...v0.62.0) (2022-01-21)
### Bug Fixes
* add missing lastPublished to SCCreativeWork ([e0adb23](https://gitlab.com/openstapps/core/commit/e0adb2332ec24ce388c4c008b51b7aa941948532))
# [0.61.0](https://gitlab.com/openstapps/core/compare/v0.60.0...v0.61.0) (2022-01-21)
# [0.60.0](https://gitlab.com/openstapps/core/compare/v0.59.0...v0.60.0) (2022-01-21)
# [0.59.0](https://gitlab.com/openstapps/core/compare/v0.58.0...v0.59.0) (2022-01-20)
# [0.58.0](https://gitlab.com/openstapps/core/compare/v0.57.0...v0.58.0) (2022-01-18)
# [0.57.0](https://gitlab.com/openstapps/core/compare/v0.56.0...v0.57.0) (2022-01-18)
### Features
* extend config to describe auth providers ([7553620](https://gitlab.com/openstapps/core/commit/7553620a5d330ebfb66461afeab700e36bd37165))
# [0.56.0](https://gitlab.com/openstapps/core/compare/v0.55.0...v0.56.0) (2021-12-17)
# [0.55.0](https://gitlab.com/openstapps/core/compare/v0.54.0...v0.55.0) (2021-12-15)
# [0.54.0](https://gitlab.com/openstapps/core/compare/v0.53.0...v0.54.0) (2021-11-17)
### Features
* add SCAssessment ([7a2e0f2](https://gitlab.com/openstapps/core/commit/7a2e0f20d1c64ab1deb7ab30bfb4bab4daaabd6d))
# [0.53.0](https://gitlab.com/openstapps/core/compare/v0.52.0...v0.53.0) (2021-10-19)
# [0.52.0](https://gitlab.com/openstapps/core/compare/v0.51.0...v0.52.0) (2021-09-28)
### Features
* add about config ([aa294c4](https://gitlab.com/openstapps/core/commit/aa294c4e29e9191bef6d79487b0b321fbc34f6fb))
# [0.51.0](https://gitlab.com/openstapps/core/compare/v0.50.0...v0.51.0) (2021-09-10)
### Bug Fixes
* add physicalobject to book categories ([ded8e7d](https://gitlab.com/openstapps/core/commit/ded8e7dfd51094c02a86e1383a4e94c069c10e64))
# [0.50.0](https://gitlab.com/openstapps/core/compare/v0.49.5...v0.50.0) (2021-09-01)
## [0.49.5](https://gitlab.com/openstapps/core/compare/v0.49.3...v0.49.5) (2021-08-27)
### Bug Fixes
* test resources from hds2 ([dfe35d7](https://gitlab.com/openstapps/core/commit/dfe35d71a38c35064726365f99714abff3b30ba6))
## [0.49.3](https://gitlab.com/openstapps/core/compare/v0.49.2...v0.49.3) (2021-08-18)
## [0.49.2](https://gitlab.com/openstapps/core/compare/v0.49.1...v0.49.2) (2021-08-17)
## [0.49.1](https://gitlab.com/openstapps/core/compare/v0.49.0...v0.49.1) (2021-08-13)
### Bug Fixes
* documentation generation ([8a28d6f](https://gitlab.com/openstapps/core/commit/8a28d6fa8657d778d6ae0d38cda7da3531d6478c))
# [0.49.0](https://gitlab.com/openstapps/core/compare/v0.48.0...v0.49.0) (2021-08-12)
### Features
* add elasticsearch mappings to build ([21eeecd](https://gitlab.com/openstapps/core/commit/21eeecd5ee0d68a4faa93bb70d2187ce35807b01))
# [0.48.0](https://gitlab.com/openstapps/core/compare/v0.47.0...v0.48.0) (2021-07-14)
### Bug Fixes
* correct parameter name of thing update route ([872c1f5](https://gitlab.com/openstapps/core/commit/872c1f5fc3884b6df6f5025287873d98b27dd6b1))
### Features
* support geo shape queries ([882483e](https://gitlab.com/openstapps/core/commit/882483ee2490938014904bc26687bd1648992ae6))
# [0.47.0](https://gitlab.com/openstapps/core/compare/v0.46.0...v0.47.0) (2021-06-15)
### Bug Fixes
* set date-series frequency non translatable ([4a4cd4e](https://gitlab.com/openstapps/core/commit/4a4cd4e6d4b01ac34b5338dfcf4aeb959f54461d))
### Features
* make SCDateSeries.frequency compliant with schema.org ([942cd11](https://gitlab.com/openstapps/core/commit/942cd1146966aa9e60321160489a6605877925e9))
# [0.46.0](https://gitlab.com/openstapps/core/compare/v0.45.0...v0.46.0) (2021-05-04)
### Features
* change range offer to use date range ([9c6972a](https://gitlab.com/openstapps/core/commit/9c6972af787678567409877b6bc9f9417e1374e2))
# [0.45.0](https://gitlab.com/openstapps/core/compare/v0.44.0...v0.45.0) (2021-04-26)
# [0.44.0](https://gitlab.com/openstapps/core/compare/v0.43.0...v0.44.0) (2021-04-12)
### Features
* add support for multiple values in the value filter ([913c569](https://gitlab.com/openstapps/core/commit/913c5691da46ad2591fe14bcf7286f12b29ab5ee))
# [0.43.0](https://gitlab.com/openstapps/core/compare/v0.42.0...v0.43.0) (2021-04-07)
# [0.42.0](https://gitlab.com/openstapps/core/compare/v0.41.0...v0.42.0) (2021-02-16)
# [0.41.0](https://gitlab.com/openstapps/core/compare/v0.40.0...v0.41.0) (2021-02-08)
### Bug Fixes
* add date, numeric range filter to SCSearchFilter ([8510f11](https://gitlab.com/openstapps/core/commit/8510f11d7b4c62a6b239a70f47fe07e8cc86ab63))
# [0.40.0](https://gitlab.com/openstapps/core/compare/v0.39.0...v0.40.0) (2021-02-05)
### Features
* add range filter, date sorting support ([29bc006](https://gitlab.com/openstapps/core/commit/29bc00616e87a8d346d8c304fab2e3818921c75e))
# [0.39.0](https://gitlab.com/openstapps/core/compare/v0.38.1...v0.39.0) (2020-12-01)
### Features
* extend property value translation retrival ([a246bde](https://gitlab.com/openstapps/core/commit/a246bdea84e0ca390be6ab38723d637626db87d2))
## [0.38.1](https://gitlab.com/openstapps/core/compare/v0.38.0...v0.38.1) (2020-11-02)
# [0.38.0](https://gitlab.com/openstapps/core/compare/v0.37.0...v0.38.0) (2020-10-30)
# [0.37.0](https://gitlab.com/openstapps/core/compare/v0.36.0...v0.37.0) (2020-09-23)
### Bug Fixes
* remove keyword tag from steps ([c369c85](https://gitlab.com/openstapps/core/commit/c369c8520a2eed169555a35a50ce745c08e1f9da))
* remove redundant property declaration ([66075ef](https://gitlab.com/openstapps/core/commit/66075ef99b95198a9cd5c0a396603e089221bcd9))
# [0.36.0](https://gitlab.com/openstapps/core/compare/v0.35.0...v0.36.0) (2020-07-16)
### Features
* add function to get translated SCThingType ([fe7f1a5](https://gitlab.com/openstapps/core/commit/fe7f1a53ae46e052e23f1b39851f1547b5a8dded))
# [0.35.0](https://gitlab.com/openstapps/core/compare/v0.34.0...v0.35.0) (2020-05-13)
# [0.34.0](https://gitlab.com/openstapps/core/compare/v0.33.0...v0.34.0) (2020-04-21)
### Features
* add [@sortable](https://gitlab.com/sortable) tags to certain translatable properties ([f5e8856](https://gitlab.com/openstapps/core/commit/f5e88569eb75578febbcde67259c0c14563e53fe))
* annotate SCThing uid and url as filterable ([70c1a3e](https://gitlab.com/openstapps/core/commit/70c1a3eaa3d1c88f4b86f0df86d0d362ad1f930c))
* Update src/things/book.ts - made ISBN optional ([6060113](https://gitlab.com/openstapps/core/commit/6060113df56b871bb5014a8a961974895e52158f))
# [0.33.0](https://gitlab.com/openstapps/core/compare/v0.32.0...v0.33.0) (2020-02-11)
# [0.32.0](https://gitlab.com/openstapps/core/compare/v0.31.0...v0.32.0) (2020-02-04)
### Features
* make SCContactPoint extend SCThing ([0d89b14](https://gitlab.com/openstapps/core/commit/0d89b1493293f83e9096615f653a6094519d59f2))
# [0.31.0](https://gitlab.com/openstapps/core/compare/v0.30.0...v0.31.0) (2019-11-14)
### Bug Fixes
* remove categories from custom translations ([9658f05](https://gitlab.com/openstapps/core/commit/9658f05d31366b3735da3aa548ef5ed0255d8054))
* translator can now handle enum translations ([abda5cf](https://gitlab.com/openstapps/core/commit/abda5cf0caead37f085431e1e5a9771b79272ec6))
# [0.30.0](https://gitlab.com/openstapps/core/compare/v0.29.0...v0.30.0) (2019-11-08)
### Features
* add aggregatable tag for type field ([443cb74](https://gitlab.com/openstapps/core/commit/443cb748fba1575f5f1e16c550fd33eb7fa7901c))
* add new field sequenceIndex to message ([01f92ba](https://gitlab.com/openstapps/core/commit/01f92baa985013bfe1c79fad60351fdaf44bd676))
# [0.29.0](https://gitlab.com/openstapps/core/compare/v0.28.0...v0.29.0) (2019-09-17)
### Features
* add mappingIgnoredTags property to SCBackend ([149f3ff](https://gitlab.com/openstapps/core/commit/149f3ffff15dce27337665abba520d11bc3014dd))
# [0.28.0](https://gitlab.com/openstapps/core/compare/v0.27.0...v0.28.0) (2019-09-10)
### Features
* add onlyOnType field for SCFacet ([fba63db](https://gitlab.com/openstapps/core/commit/fba63db137c52212113545be1062d760f0c4213f))
# [0.27.0](https://gitlab.com/openstapps/core/compare/v0.26.0...v0.27.0) (2019-09-03)
### Features
* add [@filterable](https://gitlab.com/filterable) tags ([fec3371](https://gitlab.com/openstapps/core/commit/fec33715add996ae0a7125ad00ee043d288c6671))
# [0.26.0](https://gitlab.com/openstapps/core/compare/v0.25.0...v0.26.0) (2019-08-19)
### Bug Fixes
* complete german translations ([bad15dc](https://gitlab.com/openstapps/core/commit/bad15dc8728954ee6ee23fa68c471647328830b9))
### Features
* add pluginRequestTimeout field to backend config ([88f579e](https://gitlab.com/openstapps/core/commit/88f579e09bc5e7726dbc4fc788737ba49a0801cd))
# [0.25.0](https://gitlab.com/openstapps/core/compare/v0.24.0...v0.25.0) (2019-07-25)
### Bug Fixes
* correct package job ([d4a8ef6](https://gitlab.com/openstapps/core/commit/d4a8ef6a9ca69849f8b981804da45e4ba907f37b))
# [0.24.0](https://gitlab.com/openstapps/core/compare/v0.23.1...v0.24.0) (2019-07-23)
### Features
* add new field receivingOrganisations to message ([d781dd6](https://gitlab.com/openstapps/core/commit/d781dd6de5cc7572b9218df959247b93cb2db305))
## [0.23.1](https://gitlab.com/openstapps/core/compare/v0.23.0...v0.23.1) (2019-07-15)
### Bug Fixes
* use correct generic for the distance filter ([f262a6b](https://gitlab.com/openstapps/core/commit/f262a6b8fa7a9d40234569ec490d5ef8e9437a75))
### Features
* add type maps from routes to requests and responses ([e1d4b2b](https://gitlab.com/openstapps/core/commit/e1d4b2bc9de60a2332788c9a2264760d151c8813)), closes [#80](https://gitlab.com/openstapps/core/issues/80)
# [0.23.0](https://gitlab.com/openstapps/core/compare/v0.22.0...v0.23.0) (2019-07-03)
### Features
* add mapping type from response to request and vice versa ([c18e3c1](https://gitlab.com/openstapps/core/commit/c18e3c15f1940338b6872343f6b20dba6346f84b)), closes [#80](https://gitlab.com/openstapps/core/issues/80)
* support 404 (resource not found) error on plugin register route ([43851d2](https://gitlab.com/openstapps/core/commit/43851d2d358c4c342a80a863b059a6447c819c04))
# [0.22.0](https://gitlab.com/openstapps/core/compare/v0.21.0...v0.22.0) (2019-06-28)
# [0.21.0](https://gitlab.com/openstapps/core/compare/v0.20.0...v0.21.0) (2019-06-19)
### Features
* add ES annotations ([9c424b0](https://gitlab.com/openstapps/core/commit/9c424b0f96da26d3aae9ffaadb2c640e7369ca7e))
* add static typed test for consistency ([ff1f554](https://gitlab.com/openstapps/core/commit/ff1f554e0beacb5ce2f3308c8212e2b8e4d8cbb0)), closes [#71](https://gitlab.com/openstapps/core/issues/71)
# [0.20.0](https://gitlab.com/openstapps/core/compare/v0.19.0...v0.20.0) (2019-06-11)
### Bug Fixes
* add translations for every SCThing ([f847a2a](https://gitlab.com/openstapps/core/commit/f847a2aa0cf576e2fd79197cdc7795638d929136))
* rename properties floor and message so that they are not identical to SCThingTypes ([78b64ba](https://gitlab.com/openstapps/core/commit/78b64bae08d9ca12badaedf921a24fa5ffe90552))
# [0.19.0](https://gitlab.com/openstapps/core/compare/v0.18.0...v0.19.0) (2019-05-17)
### Bug Fixes
* add thing without references, split thing ([da0507e](https://gitlab.com/openstapps/core/commit/da0507ee341af75cd15dddeeb3f4cbe08899434c)), closes [#69](https://gitlab.com/openstapps/core/issues/69)
* adjust model to remove references from things without references ([ca72c20](https://gitlab.com/openstapps/core/commit/ca72c20bd098032745ed0eb6978902b6ff6feac5)), closes [#69](https://gitlab.com/openstapps/core/issues/69)
* remove references from origins ([1d6a2b7](https://gitlab.com/openstapps/core/commit/1d6a2b7841e9c38e68c9e5c718377a9c04fe50d6)), closes [#69](https://gitlab.com/openstapps/core/issues/69)
# [0.18.0](https://gitlab.com/openstapps/core/compare/v0.17.0...v0.18.0) (2019-05-14)
### Features
* add study module interface ([d3790ad](https://gitlab.com/openstapps/core/commit/d3790adbd82417923d79b4a5a35c74fcaab3e050))
# [0.17.0](https://gitlab.com/openstapps/core/compare/v0.16.0...v0.17.0) (2019-04-16)
# [0.16.0](https://gitlab.com/openstapps/core/compare/v0.15.0...v0.16.0) (2019-04-15)
# [0.15.0](https://gitlab.com/openstapps/core/compare/v0.14.0...v0.15.0) (2019-04-09)
### Bug Fixes
* change SCThingMeta getInstance() return value ([4986042](https://gitlab.com/openstapps/core/commit/4986042428e24a04b73fb03d71c01353588419a7))
* resolve issues with things that can be offered ([623ed61](https://gitlab.com/openstapps/core/commit/623ed613a9405b53a86a33c13d48bc49d48de1ce)), closes [#41](https://gitlab.com/openstapps/core/issues/41)
### Features
* provide context based search ([3242411](https://gitlab.com/openstapps/core/commit/324241176849b338bee9f5d1dcaf1109f47a8bb9))
# [0.14.0](https://gitlab.com/openstapps/core/compare/v0.13.0...v0.14.0) (2019-04-03)
### Features
* add model for plugin register route ([8188731](https://gitlab.com/openstapps/core/commit/81887315f8c3038ec37c2197db8e193da835f6fc))
# [0.13.0](https://gitlab.com/openstapps/core/compare/v0.12.0...v0.13.0) (2019-04-02)
### Bug Fixes
* correct isThing guard ([67868e9](https://gitlab.com/openstapps/core/commit/67868e9eb810de94ca0bb6e1298799ee3f550145))
* update tslint dependencies ([bbe4fca](https://gitlab.com/openstapps/core/commit/bbe4fcac42c21c68b5c6aa6bcf9bbdecfdf84de7))
### Features
* add conditional "maps" for associated types ([c8bda2e](https://gitlab.com/openstapps/core/commit/c8bda2eae7f44ec4a284cc26fc85051a9a45e192)), closes [#50](https://gitlab.com/openstapps/core/issues/50)
* provide sample JSON files with the package ([5d1e79d](https://gitlab.com/openstapps/core/commit/5d1e79d4879e6ce8f43d4cebb9d8c8500d5d16b7)), closes [#46](https://gitlab.com/openstapps/core/issues/46)
# [0.12.0](https://gitlab.com/openstapps/core/compare/v0.11.0...v0.12.0) (2019-03-14)
### Bug Fixes
* add todo to SCThingsWithoutDiff and SCClasses ([9a49442](https://gitlab.com/openstapps/core/commit/9a49442902a9f49439083a9197bd9f0a231d007d)), closes [#39](https://gitlab.com/openstapps/core/issues/39)
### Features
* add SCThingTranslator class. move functionality accordingly ([90e3d22](https://gitlab.com/openstapps/core/commit/90e3d2239921bbfcea27b64aef9344ffee270b6d))
# [0.11.0](https://gitlab.com/openstapps/core/compare/v0.10.0...v0.11.0) (2019-02-21)
### Features
* add laboratory and computer as room categories ([a0ab72e](https://gitlab.com/openstapps/core/commit/a0ab72e597f6a14cfc0bd8935e1ef765b86b90f7)), closes [#33](https://gitlab.com/openstapps/core/issues/33)
* add maxRequestBodySize in backend configuration ([b5bd09e](https://gitlab.com/openstapps/core/commit/b5bd09e40bfb49463815538ebaa44ff53b5d7b92))
# [0.10.0](https://gitlab.com/openstapps/core/compare/v0.9.0...v0.10.0) (2019-02-18)
### Features
* add model for requestBodyTooLargeError ([bc3a0f6](https://gitlab.com/openstapps/core/commit/bc3a0f6d11cba836a55cbd5787d68cfe655b68a6))
# [0.9.0](https://gitlab.com/openstapps/core/compare/v0.8.0...v0.9.0) (2019-02-14)
# [0.8.0](https://gitlab.com/openstapps/core/compare/v0.7.0...v0.8.0) (2019-02-13)
### Features
* add config for maximum queries ([c7ab473](https://gitlab.com/openstapps/core/commit/c7ab47397e2a33b1c460b9038cbf53fec148316d))
# [0.7.0](https://gitlab.com/openstapps/core/compare/v0.6.0...v0.7.0) (2019-02-13)
# [0.6.0](https://gitlab.com/openstapps/core/compare/v0.5.0...v0.6.0) (2019-02-07)
# [0.5.0](https://gitlab.com/openstapps/core/compare/v0.4.0...v0.5.0) (2019-02-06)
### Features
* add model for syntax error ([a3f9fcb](https://gitlab.com/openstapps/core/commit/a3f9fcbfb0c35206adabc95792de076518f604f7))
# [0.4.0](https://gitlab.com/openstapps/core/compare/v0.3.0...v0.4.0) (2019-01-31)
### Features
* add draft of todo ([2860a11](https://gitlab.com/openstapps/core/commit/2860a11b618081ab88ecb1780a280cab37217a0e))
# [0.3.0](https://gitlab.com/openstapps/core/compare/v0.2.0...v0.3.0) (2019-01-25)
### Bug Fixes
* set larger v8 stack size ([d3d08e7](https://gitlab.com/openstapps/core/commit/d3d08e7735808d4eae5aab4b263e36047c608679))
### Features
* add different origin types: remote and user ([13a4965](https://gitlab.com/openstapps/core/commit/13a49650c4498f6edbe17c9de3598e0180b866da)), closes [#12](https://gitlab.com/openstapps/core/issues/12)
* add saveable thing for saving user/client data ([a4f3fab](https://gitlab.com/openstapps/core/commit/a4f3fab033ca18352c0119061f2d0e64252d4bbb)), closes [#12](https://gitlab.com/openstapps/core/issues/12)
# [0.2.0](https://gitlab.com/openstapps/core/compare/v0.1.0...v0.2.0) (2019-01-09)
### Features
* use tag [@validatable](https://gitlab.com/validatable) to mark schema types ([7f248ee](https://gitlab.com/openstapps/core/commit/7f248eea13c732a95c4ee8e1bc91afeee52e8c2d))
# [0.1.0](https://gitlab.com/openstapps/core/compare/v0.0.2...v0.1.0) (2018-12-17)
### Features
* add base scheme for academic degrees ([85c8fc4](https://gitlab.com/openstapps/core/commit/85c8fc49c14b0ce45cf0cfdaf46c1ebe43b23ec7))
* add schema for course of studies ([2d4a76a](https://gitlab.com/openstapps/core/commit/2d4a76a555603a395c81a7a92ce5d95ed04de9de))
* add tool to generate documentation for routes ([1a07df2](https://gitlab.com/openstapps/core/commit/1a07df2d676895264f43b0138645d7c13f60c9db))
## [0.0.2](https://gitlab.com/openstapps/core/compare/v0.0.1...v0.0.2) (2018-11-29)
## [0.0.1](https://gitlab.com/openstapps/core/compare/2d770dde4464dc4cf4cdc29927aa4e4382914148...v0.0.1) (2018-11-29)
### Features
* add core ([2d770dd](https://gitlab.com/openstapps/core/commit/2d770dde4464dc4cf4cdc29927aa4e4382914148))

View File

@@ -6,7 +6,7 @@ Please see the appropriate general group contributing guides in [project-managem
Following semantic versioning patches to the core should not break existing usage.
### API
### API
Every minor and major version of the core needs a corresponding version of the [API](https://openstapps.gitlab.io/api) to be used in the app and connectors.
@@ -33,15 +33,17 @@ App and connectors should be updated regularly to new releases of the core but n
Adding new types requires changes at multiple locations for it to work correctly
### Required changes
* Add your SCThing and SCThingWithoutReferences to `src/things/your-thing-name.ts` and make them extend `SCThingWithoutReferences` and `SCThing` respectively
* Add your SCThingMeta to `src/things/your-thing-name.ts` and make it extend `SCThingMeta`
* Add your SCThingMeta to `SCClasses` in `src/meta.ts`
* Add your SCThing to `SCThingsWithoutDiff` in `src/meta.ts`
* Add your SCThingWithoutReferences to `SCAssociatedThingWithoutReferences` in `src/meta.ts`
* Add your SCThing to `SCAssociatedThing` in `src/meta.ts`
* Add your SCThing to the `SCThingType` enum in `src/things/abstract/thing.ts`
* Add an example file for your SCThing in `test/resources/YourThingName.json`
* Add the following lines for your SCThing in `test/type.spec.ts`:
- Add your SCThing and SCThingWithoutReferences to `src/things/your-thing-name.ts` and make them extend `SCThingWithoutReferences` and `SCThing` respectively
- Add your SCThingMeta to `src/things/your-thing-name.ts` and make it extend `SCThingMeta`
- Add your SCThingMeta to `SCClasses` in `src/meta.ts`
- Add your SCThing to `SCIndexableThings ` in `src/meta.ts`
- Add your SCThingWithoutReferences to `SCAssociatedThingWithoutReferences` in `src/meta.ts`
- Add your SCThing to `SCAssociatedThing` in `src/meta.ts`
- Add your SCThing to the `SCThingType` enum in `src/things/abstract/thing.ts`
- Add an example file for your SCThing in `test/resources/YourThingName.json`
- Add the following lines for your SCThing in `test/type.spec.ts`:
- Make sure your SCThing (but not SCThingWithoutReferences!) includes the `@indexable` and `@validatable` JSDoc annotations, otherwise neither JSON Schemas nor Elasticsearch mappings will be generated
```typescript
/**
* Types of properties of SCYourThingName
@@ -57,9 +59,9 @@ assert<Extends<SCYourThingName, SCThing>>(true);
## Additional coding style
### Extract inline type definitions
### Extract inline type definitions
For consistency and correct functionality of `core-tools` we need well-defined type assignments.
For consistency and correct functionality of `core-tools` we need well-defined type assignments.
Type assignments shall always be primitive types, classes, interfaces, enums or unions. Not allowed are inline type-definitions. Those shall be refactored accordingly:
@@ -83,16 +85,16 @@ If you come around a map-like-type use `SCMap<T>`.
```typescript
// Use this:
interface AnyClass{
inventory: SCMap<number>;
interface AnyClass {
inventory: SCMap<number>;
}
// Instead of:
interface AnyClass{
inventory?: Array<{ key: string, value: number }>;
interface AnyClass {
inventory?: Array<{key: string; value: number}>;
}
// or instead of
interface AnyClass{
inventory?: { [key: string]: number };
interface AnyClass {
inventory?: {[key: string]: number};
}
```
```

29
LICENSE
View File

@@ -169,32 +169,3 @@ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY C
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/ licenses/why-not-lgpl.html>.

123
README.md
View File

@@ -1,52 +1,101 @@
# @openstapps/core
# Open StApps Monorepo
[![pipeline status](https://img.shields.io/gitlab/pipeline/openstapps/core.svg?style=flat-square)](https://gitlab.com/openstapps/core/commits/master)
[![npm](https://img.shields.io/npm/v/@openstapps/core.svg?style=flat-square)](https://npmjs.com/package/@openstapps/core)
[![license)](https://img.shields.io/npm/l/@openstapps/core.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html)
[![documentation](https://img.shields.io/badge/documentation-online-blue.svg?style=flat-square)](https://openstapps.gitlab.io/core)
Refer to the [contribution guide](./CONTRIBUTING.md)
StAppsCore - Generalized model of data
## Projects
## What is the StAppsCore?
### Apps
The StAppsCore (SC) is a generalized model of data.
| Name | Version | License | Readme |
| -------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- |
| Core | [![npm](https://img.shields.io/npm/v/@openstapps/app.svg?style=flat-square)](https://npmjs.com/package/@openstapps/app) | [![license)](https://img.shields.io/npm/l/@openstapps/app.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`frontend/app`](./frontend/app/README.md) |
| Backend | [![npm](https://img.shields.io/npm/v/@openstapps/backend.svg?style=flat-square)](https://npmjs.com/package/@openstapps/backend) | [![license)](https://img.shields.io/npm/l/@openstapps/backend.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`backend/backend`](./backend/backend/README.md) |
| Proxy | [![npm](https://img.shields.io/npm/v/@openstapps/proxy.svg?style=flat-square)](https://npmjs.com/package/@openstapps/proxy) | [![license)](https://img.shields.io/npm/l/@openstapps/proxy.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`backend/proxy`](./backend/proxy/README.md) |
| Database | [![npm](https://img.shields.io/npm/v/@openstapps/database.svg?style=flat-square)](https://npmjs.com/package/@openstapps/database) | [![license)](https://img.shields.io/npm/l/@openstapps/database.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`backend/database`](./backend/database/README.md) |
SC is based on the idea of [schema.org](https://www.schema.org). The SC structures data by describing objects as so called SC-types like: Event, Place, Date, Person, ...
### Libraries
Data sources of the same type of data are assigned to the same SC-type.
| Name | Version | License | Readme |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| Core | [![npm](https://img.shields.io/npm/v/@openstapps/core.svg?style=flat-square)](https://npmjs.com/package/@openstapps/core) | [![license)](https://img.shields.io/npm/l/@openstapps/core.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/core`](./packages/core/README.md) |
| API | [![npm](https://img.shields.io/npm/v/@openstapps/api.svg?style=flat-square)](https://npmjs.com/package/@openstapps/api) | [![license)](https://img.shields.io/npm/l/@openstapps/api.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/api`](./packages/api/README.md) |
| API Plugin | [![npm](https://img.shields.io/npm/v/@openstapps/api-plugin.svg?style=flat-square)](https://npmjs.com/package/@openstapps/api-plugin) | [![license)](https://img.shields.io/npm/l/@openstapps/api-plugin.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/api-plugin`](./packages/api-plugin/README.md) |
| Logger | [![npm](https://img.shields.io/npm/v/@openstapps/logger.svg?style=flat-square)](https://npmjs.com/package/@openstapps/logger) | [![license)](https://img.shields.io/npm/l/@openstapps/logger.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/logger`](./packages/logger/README.md) |
| Core Tools | [![npm](https://img.shields.io/npm/v/@openstapps/core-tools.svg?style=flat-square)](https://npmjs.com/package/@openstapps/core-tools) | [![license)](https://img.shields.io/npm/l/@openstapps/core-tools.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/core-tools`](./packages/core-tools/README.md) |
### Requirements for the SC
## Publishing
* Study processes which can be generalized are abstracted and modeled in that manner that the structure can be adapted to any german university.
* It must be platform- and software-independent.
* Search interface must be clearly specified that different working groups with different search tools can retrieve the same search results.
* Must be expandable.
### Generate documentation for routes
To generate a documentation for the routes use the following command.
After having added all changes using `pnpm changeset`
```shell
node --require ts-node/register src/cli.ts routes PATH/TO/ROUTES.md
pnpm publish-packages
```
### Annotations
Internally, this will run
Annotations are used to add additional informations to fields, which are used to autogenerate mappings from the core objects.
External dependencies can not be covered by the annotations. Documentation about some of the annotations can be found in: [typedoc](https://typedoc.org/guides/doccomments/)
```shell
pnpm changeset version # bump versions
pnpm syncpack:fix
pnpm format:fix # changes to the package.json can cause issues
pnpm install # update lockfile and rebuild packages
git add .
git commit -m "refactor: update changelog"
pnpm changeset tags
git push --follow-tags
# from here the pipeline will do the publishing
```
| annotation | description | parameters |
|-------------------|-------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| `@aggregatable` | used for generating of aggregations of the field if the core schema is used to put data into a database/key-value store | whether the property is being used on the top type or across all types: `global` |
| `@float` | number field is interpreted as float | |
| `@indexable` | marks the type as indexable if the core schema is used to put data into a database/key-value store | |
| `@integer` | number field is interpreted as integer | |
| `@keyword` | string field is interpreted as keyword | |
| `@sortable` | field is sortable if the core schema is used to put data into a database/key-value store. Fields are always sortable through generic sort, even without annotation. | sort method to be used: `ducet`, `price`, `distance` |
| `@text` | string field is interpreted as text | |
| `@date` | string field is interpreted as a date field | |
| `@validatable` | Marks the type for json schema generation, which can be checked at runtime. Any top-level type that is put into a database should always be marked as validatable. | |
| `@filterable` | non-object/nested field is filterable if the core schema is used to put data into a database/key-value store | |
| `@inheritTags` | inherit all tags from another field | `[SCThingType]::[field]` |
## Remote caching
*Note: tags ignore casing, but for consistency they should use the variants proposed here.*
Turbo supports remote caching, which massively speeds up build processes.
### Connecting to the remote cache locally
`.env.local`
```dotenv
TURBO_API=http://example:3000
TURBO_TEAM=openstapps
TURBO_TOKEN=abc123
```
### Connecting to the remote cache in GitLab Pipelines
You will need to define
- `TURBO_API`
- `TURBO_TEAM`
- `TURBO_TOKEN`
Like you did locally as described in [this](https://turbo.build/repo/docs/ci/gitlabci#remote-caching)
guide.
### Hosting a cache
Self-hosting via Docker is extremely simple, just follow
[this](http://v2202207178592194230.supersrv.de:6341) guide
or in short:
`.env`
```dotenv
PORT=...
TURBO_TOKEN=...
```
```shell
docker run --env-file=.env -p 3000:3000 fox1t/turborepo-remote-cache
```
## Useful commands
#### Why is this package bloating the app?
```shell
pnpm why --prod -r --filter @openstapps/app PACKAGE
```
#### Licenses
```shell
pnpm licenses --prod --filter PROJECT
```

View File

@@ -0,0 +1,22 @@
integration:
image: registry.gitlab.com/openstapps/openstapps/node-builder
stage: test
needs: ['build']
variables:
DOCKER_DRIVER: overlay2
WAIT_FOR_SERVICES_TIMEOUT: 1
services:
- name: registry.gitlab.com/openstapps/openstapps/database:latest
alias: elasticsearch
script:
- pnpm --filter=@openstapps/backend install
- pnpm test:integration:backend
artifacts:
when: on_failure
paths:
- backend/backend/coverage/integration-report-junit.xml
reports:
junit:
- backend/backend/coverage/integration-report-junit.xml
rules:
- !reference [.limit_pipelines, rules]

View File

@@ -0,0 +1,471 @@
# @openstapps/backend
## 3.3.0
### Minor Changes
- 688bc5f2: v3.3.0 changes
### Patch Changes
- Updated dependencies [688bc5f2]
- @openstapps/core@3.3.0
- @openstapps/core-tools@3.3.0
- @openstapps/logger@3.0.0
## 3.2.0
### Minor Changes
- 912ae422: Add the ability to filter by existence of a field
### Patch Changes
- 689ac68b: pin alpine version to 3.18 and add healthchecks
- e8d72683: Backend unit tests break every year
- Updated dependencies [912ae422]
- @openstapps/core@4.0.0
- @openstapps/core-tools@3.0.0
- @openstapps/logger@3.0.0
## 3.1.2
### Patch Changes
- Fix backend rejecting plugins
- Fix backend sliently falling back to default configs
## 3.1.1
### Patch Changes
- Fix version history offered by backend
- Updated dependencies
- @openstapps/core@3.1.1
## 3.1.0
### Minor Changes
- 06b8ca10: Add job portal feature
### Patch Changes
- Updated dependencies [06b8ca10]
- @openstapps/core@3.1.0
## 3.0.1
### Patch Changes
- Fix missing dependency
## 3.0.0
### Major Changes
- 64caebaf: Migrate config system to cosmiconfig
Configs are now written using type-checked JavaScript
```js
// @ts-check
// This file is now type-safe just like TypeScript, but
// without the compilation step
/** @type {import('@openstapps/package').Type} */
const foo = {};
```
You can write config files in JavaScript, JSON, or other
cosmiconfig-supported formats.
The config files now are
- `backendrc.{js,json,...}`
- `elasticsearchrc.{js,json,...}`
- `prometheusrc.{js,json,...}`
You can also split them into multiple files,
as well as using the `markdown.js` helper in
`config/default/tools` to include markdown files
as text (see `config/f-u/about-pages`)
- 64caebaf: Move project to a turbo monorepo & pnpm
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
- Removed extraneous files from packages
- `.npmrc`
- `.npmignore`
- `.mailmap`
- `.gitignore`
- `CONTRIBUTING.md`
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
- `package-lock.json`
- `.editorconfig`
- `.eslintrc.json` (moved eslint config to `package.json`)
- `.eslintignore`
- `.gitlab-ci.yml` (Most workflows are workspace-level)
- `.gitlab/**` (issue templates etc. are now workspace-level)
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
- Replaced conventional changelog with changesets
- Apps with binaries now use a top level `app.js`
```js
#!/usr/bin/env node
import './lib/app.js';
```
- 64caebaf: Migrate to ESM
CommonJS is no longer supported in any capacity. To use the new
version, you will need to migrate your package to ESM.
We recommend using `tsup` and `Node 18`.
```json
{
"type": "module"
}
```
- 64caebaf: Migrate package to Node 18
- Consumers of this package will need to migrate to Node 18 or
higher.
- Packages have been migrated from promisified `readFile` or
`readFileSync` towards `fs/promises`
- Packages use native `flatMap` now
- 0a7e6af1: Migrate es mapping types from es-mapping-generator to .d.ts next to generated mappings
- 64caebaf: Migrate build system to `tsup`
All packages now use an `index.ts` file to expose contents.
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
### Minor Changes
- 64caebaf: Migrate integration tests from docker-compose solution to a shell script
`api-cli` no longer builds as a Docker container as a result.
- 64caebaf: Migrate tests to C8/Chai/Mocha
- `@testdeck` OOP testing has been removed.
- Tests have been unified
- CommonJS module mocking has been replaced through
refactoring of tests, as ES Modules cannot be mocked
(do yourself a favor and don't try to mock them)
- C8 now replaces NYC as a native coverage tool
- 64caebaf: Migrate away from `@krlwlfrt/async-pool`
```ts
import {mapAsyncLimit} from '@openstapps/collection-utils';
await mapAsyncLimit(
[1, 2, 3],
async it => {
await someNetworkRequest(it);
},
5,
);
```
### Patch Changes
- 64caebaf: Migrated changelogs to changeset format
```js
import fs from 'fs';
const path = 'packages/logger/CHANGELOG.md';
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
```
- 98546a97: Migrate away from @openstapps/configuration
- 23481d0d: Update to TypeScript 5.1.6
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [1f62b5c5]
- Updated dependencies [98546a97]
- Updated dependencies [23481d0d]
- Updated dependencies [0a7e6af1]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- @openstapps/core-tools@3.0.0
- @openstapps/logger@3.0.0
- @openstapps/core@3.0.0
## 3.0.0-next.4
### Patch Changes
- 23481d0d: Update to TypeScript 5.1.6
- Updated dependencies [23481d0d]
- @openstapps/core-tools@3.0.0-next.4
- @openstapps/logger@3.0.0-next.4
- @openstapps/core@3.0.0-next.4
## 3.0.0-next.0
### Major Changes
- 64caebaf: Migrate config system to cosmiconfig
Configs are now written using type-checked JavaScript
```js
// @ts-check
// This file is now type-safe just like TypeScript, but
// without the compilation step
/** @type {import('@openstapps/package').Type} */
const foo = {};
```
You can write config files in JavaScript, JSON, or other
cosmiconfig-supported formats.
The config files now are
- `backendrc.{js,json,...}`
- `elasticsearchrc.{js,json,...}`
- `prometheusrc.{js,json,...}`
You can also split them into multiple files,
as well as using the `markdown.js` helper in
`config/default/tools` to include markdown files
as text (see `config/f-u/about-pages`)
- 64caebaf: Move project to a turbo monorepo & pnpm
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
- Removed extraneous files from packages
- `.npmrc`
- `.npmignore`
- `.mailmap`
- `.gitignore`
- `CONTRIBUTING.md`
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
- `package-lock.json`
- `.editorconfig`
- `.eslintrc.json` (moved eslint config to `package.json`)
- `.eslintignore`
- `.gitlab-ci.yml` (Most workflows are workspace-level)
- `.gitlab/**` (issue templates etc. are now workspace-level)
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
- Replaced conventional changelog with changesets
- Apps with binaries now use a top level `app.js`
```js
#!/usr/bin/env node
import './lib/app.js';
```
- 64caebaf: Migrate to ESM
CommonJS is no longer supported in any capacity. To use the new
version, you will need to migrate your package to ESM.
We recommend using `tsup` and `Node 18`.
```json
{
"type": "module"
}
```
- 64caebaf: Migrate package to Node 18
- Consumers of this package will need to migrate to Node 18 or
higher.
- Packages have been migrated from promisified `readFile` or
`readFileSync` towards `fs/promises`
- Packages use native `flatMap` now
- 0a7e6af1: Migrate es mapping types from es-mapping-generator to .d.ts next to generated mappings
- 64caebaf: Migrate build system to `tsup`
All packages now use an `index.ts` file to expose contents.
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
### Minor Changes
- 64caebaf: Migrate integration tests from docker-compose solution to a shell script
`api-cli` no longer builds as a Docker container as a result.
- 64caebaf: Migrate tests to C8/Chai/Mocha
- `@testdeck` OOP testing has been removed.
- Tests have been unified
- CommonJS module mocking has been replaced through
refactoring of tests, as ES Modules cannot be mocked
(do yourself a favor and don't try to mock them)
- C8 now replaces NYC as a native coverage tool
- 64caebaf: Migrate away from `@krlwlfrt/async-pool`
```ts
import {mapAsyncLimit} from '@openstapps/collection-utils';
await mapAsyncLimit(
[1, 2, 3],
async it => {
await someNetworkRequest(it);
},
5,
);
```
### Patch Changes
- 64caebaf: Migrated changelogs to changeset format
```js
import fs from 'fs';
const path = 'packages/logger/CHANGELOG.md';
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
```
- 98546a97: Migrate away from @openstapps/configuration
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [0a7e6af1]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- @openstapps/core-tools@3.0.0-next.0
- @openstapps/logger@3.0.0-next.0
- @openstapps/core@3.0.0-next.0
## [1.0.0](https://gitlab.com/openstapps/backend/compare/v0.6.0...v1.0.0) (2023-05-08)
### Bug Fixes
- openapi docs generation ([4ebe44a](https://gitlab.com/openstapps/backend/commit/4ebe44a5a7a1b7bfd0aa5b84d47d4056d3068ffe))
- rename deprecated Gitlab CI variables ([3471591](https://gitlab.com/openstapps/backend/commit/3471591a7d458df70447c8dac91f96f3c83e763c))
- semster boosting ([515a6ee](https://gitlab.com/openstapps/backend/commit/515a6eeea56305a37510d99b9f84a6b118b66f8a))
### Features
- update to of elasticsearch 8.4 ([c9b83b5](https://gitlab.com/openstapps/backend/commit/c9b83b5d71610f82bd1d99e837e29ad445758aea))
## [0.6.0](https://gitlab.com/openstapps/backend/compare/v0.5.0...v0.6.0) (2023-01-30)
## [0.5.0](https://gitlab.com/openstapps/backend/compare/v0.4.1...v0.5.0) (2022-12-06)
## [0.4.1](https://gitlab.com/openstapps/backend/compare/v0.4.0...v0.4.1) (2022-11-02)
## [0.4.0](https://gitlab.com/openstapps/backend/compare/v0.3.1...v0.4.0) (2022-10-21)
## [0.3.1](https://gitlab.com/openstapps/backend/compare/v0.3.0...v0.3.1) (2022-09-02)
## [0.3.0](https://gitlab.com/openstapps/backend/compare/v0.2.0...v0.3.0) (2022-08-24)
## [0.2.0](https://gitlab.com/openstapps/backend/compare/v0.1.0...v0.2.0) (2022-08-22)
### Bug Fixes
- update PAIA API URL ([a20200e](https://gitlab.com/openstapps/backend/commit/a20200e52a725ede42cb5e026a5a693b1ba3d149))
## [0.1.0](https://gitlab.com/openstapps/backend/compare/16bbb7e9e36b7adf27452e1b09f7970e98aa27df...v0.1.0) (2022-06-30)
### Bug Fixes
- Add default configuration file for prometheus monitoring ([7ed2921](https://gitlab.com/openstapps/backend/commit/7ed2921efbce7fa5134206763eea986c6ef9a919))
- add prefix to schema names ([90822f5](https://gitlab.com/openstapps/backend/commit/90822f5888ed34d594b02df3f5cd9ec8ce74251e))
- apply correct types and tslint rules ([0cbf9b2](https://gitlab.com/openstapps/backend/commit/0cbf9b26a972563ad9483d78cea9ba809381f7dd))
- automatically remove invalid characters for aliases generated from index names ([6f7e23d](https://gitlab.com/openstapps/backend/commit/6f7e23df20af54abf2459da8aaebe236b82a5f1c))
- Don't force Mapping generation with 'npm start' ([4cfb560](https://gitlab.com/openstapps/backend/commit/4cfb560954ca97e22091e13d515475218885b1de))
- enhance default search query generation ([24a9122](https://gitlab.com/openstapps/backend/commit/24a91229f28fb17cb4941aab688a08266437c1eb))
- error thrown on consecutive connector executions ([2259da3](https://gitlab.com/openstapps/backend/commit/2259da317a848660fc2b0a14e50e2ae5ae329889)), closes [#73](https://gitlab.com/openstapps/backend/issues/73)
- esacpe mappin template filename ([496e6c5](https://gitlab.com/openstapps/backend/commit/496e6c5bd0563bd2dc0c6eff45c9bd685d95b453))
- fix markdown formatting in config ([9c5581a](https://gitlab.com/openstapps/backend/commit/9c5581af2cc131b81c288eadc39827124963ce55))
- fix reading url path as parameters ([9b889c8](https://gitlab.com/openstapps/backend/commit/9b889c873624d43baed4769a788db39528b143d8))
- imports from src in config files lead to crash ([f6003d7](https://gitlab.com/openstapps/backend/commit/f6003d7f8709d4424acd261cc7804e4d2684a9f4))
- invalid monthly cron execution time ([7a9f3ea](https://gitlab.com/openstapps/backend/commit/7a9f3eaca4667870ed19b17fd26c3c6d8e1fadd5))
- make config compatible with core, update database version ([f11376e](https://gitlab.com/openstapps/backend/commit/f11376ecf8c4997f6d0a85b3f3fde9e8b02bd61b))
- make facets work again ([d917627](https://gitlab.com/openstapps/backend/commit/d917627d588783d8734bd1d0c30d3d2782d02761))
- make index route work correctly ([fa2c9d7](https://gitlab.com/openstapps/backend/commit/fa2c9d7a881d9e94da8512349056b69206e4e3d0))
- properly check if an object exists before update ([e165837](https://gitlab.com/openstapps/backend/commit/e165837a154243305dc300acaa29605732290f6a)), closes [#70](https://gitlab.com/openstapps/backend/issues/70)
- remove onlyOnTypes from mustMatch ([1d5f99b](https://gitlab.com/openstapps/backend/commit/1d5f99b1fa74c486dc4df29daf9c0aa453935821)), closes [#83](https://gitlab.com/openstapps/backend/issues/83)
- replace isProductiveEnvironment with isTestEnvironment ([8c48552](https://gitlab.com/openstapps/backend/commit/8c48552abf7b7983e966ebc22299b334cae46167))
- return syntax error when receiving bad json ([12b71ba](https://gitlab.com/openstapps/backend/commit/12b71ba1f1f3e45a84b001b395dcfa1578355276)), closes [#3](https://gitlab.com/openstapps/backend/issues/3)
- return validation error instead of internal server error ([24e27c1](https://gitlab.com/openstapps/backend/commit/24e27c1d9e002db3b8f4afb4a31ad994c0eaad42))
- route for news ([7e35fae](https://gitlab.com/openstapps/backend/commit/7e35fae34e02bf2e12cf0d0b960d48de97fd4200))
- set config file before accessing it ([e17db52](https://gitlab.com/openstapps/backend/commit/e17db521e2a3f4f15dc5e5b758bd1ada10c78161)), closes [#27](https://gitlab.com/openstapps/backend/issues/27)
- stapps core version in config ([32c8a21](https://gitlab.com/openstapps/backend/commit/32c8a2149ad18179610af02483b794b426b7b9dc)), closes [#74](https://gitlab.com/openstapps/backend/issues/74)
- take coordinates in right order ([bb3be5a](https://gitlab.com/openstapps/backend/commit/bb3be5a816f7e4eb85b69ec558572bed9c3b6b39)), closes [#116](https://gitlab.com/openstapps/backend/issues/116)
- use SCRequestBodyTooLargeError ([e70e50a](https://gitlab.com/openstapps/backend/commit/e70e50a1eab00cd180479c5e0299f974da92fe94)), closes [#20](https://gitlab.com/openstapps/backend/issues/20)
- use specific time from filter if defined ([80e6249](https://gitlab.com/openstapps/backend/commit/80e62496f0731af721193875d5a6cdbf10b34607))
- wait for config file validation ([30082f8](https://gitlab.com/openstapps/backend/commit/30082f87262fa7428172fcbb6710b66d4bfe6261))
- wrong way alias names are generated ([9488451](https://gitlab.com/openstapps/backend/commit/94884510802906cdbfdd3490fac5fc9401937da7)), closes [#79](https://gitlab.com/openstapps/backend/issues/79)
### Features
- add backend ([16bbb7e](https://gitlab.com/openstapps/backend/commit/16bbb7e9e36b7adf27452e1b09f7970e98aa27df))
- add boosting to context based search ([dd4be92](https://gitlab.com/openstapps/backend/commit/dd4be92f90c6e7047eea0d00a2442b75673329f6))
- add catalog menu entry and rearrange ([4e42772](https://gitlab.com/openstapps/backend/commit/4e42772ca3788d3ee7af78266ee223e05fe6a8f3))
- add default app settings and menus ([54301ae](https://gitlab.com/openstapps/backend/commit/54301ae8fb656db17e231197c3a64fc27f541024))
- add dummy about config ([d6f126f](https://gitlab.com/openstapps/backend/commit/d6f126f19776ee7902e65d9248501b4986657ed9))
- add favorites to personal menu ([de0617b](https://gitlab.com/openstapps/backend/commit/de0617b8dd51182326094543110b8ed294a6e940))
- add feedback to config as menu item ([7ba6472](https://gitlab.com/openstapps/backend/commit/7ba647271efd87c422ce302bd5baf5760671e1a1))
- add functionality to register plugins via http ([3d51ccf](https://gitlab.com/openstapps/backend/commit/3d51ccfac26b2c3ad1271c29c1e736aaf7fcd88f)), closes [#2](https://gitlab.com/openstapps/backend/issues/2) [#37](https://gitlab.com/openstapps/backend/issues/37)
- add hebis proxy url ([ca1d244](https://gitlab.com/openstapps/backend/commit/ca1d2444e03aacad37219d93d657968b7a933f78)), closes [#120](https://gitlab.com/openstapps/backend/issues/120)
- add openapi docs generation to api ([614a1b1](https://gitlab.com/openstapps/backend/commit/614a1b1e9b3c525d5524065851689f793a4b3b4b))
- Add prometheus middleware to express ([b42e911](https://gitlab.com/openstapps/backend/commit/b42e911a117c59b2d70c1587f9e9b20a846e92d0))
- add routes doc generation to npm documentation script ([4a64f26](https://gitlab.com/openstapps/backend/commit/4a64f26e43979cdd4390bad796e1b7dc3f8c7027))
- add schedule route ([785813c](https://gitlab.com/openstapps/backend/commit/785813c3fb92bbebd7b07246bbcec77a9a4520e3))
- Add start-debug npm run script ([23eb1e2](https://gitlab.com/openstapps/backend/commit/23eb1e2263d2dd9d55f9a6ac5fca2a8fad7f1e84))
- add support for generated elasticsearch mappings ([8eab6b8](https://gitlab.com/openstapps/backend/commit/8eab6b8531d91d4569fe13743624f5ce91a7dc1e)), closes [#38](https://gitlab.com/openstapps/backend/issues/38)
- add support for multiple values in value filter ([de60311](https://gitlab.com/openstapps/backend/commit/de60311bd072db01eaf50965f3fdc307bfedc4c2))
- add support for new availability filter ([47f3232](https://gitlab.com/openstapps/backend/commit/47f3232f155a13ea39abb2aaaecafd54fa7d98ce))
- add support for range filters ([dc16974](https://gitlab.com/openstapps/backend/commit/dc169746e7fa0f50a1f969653043e5a4d5fa0f01))
- add support for range filters ([dcf7906](https://gitlab.com/openstapps/backend/commit/dcf7906f79f07d9cfee704454eedddb452a1f255))
- adjust to changes of SCFacet in core v0.12.0 ([2f13010](https://gitlab.com/openstapps/backend/commit/2f13010480b87a4a06634084033b3b0822eb78ee)), closes [#30](https://gitlab.com/openstapps/backend/issues/30)
- allow for searching illegal elasticsearch characters ([b629d05](https://gitlab.com/openstapps/backend/commit/b629d058eb64c7a785648fab0a7073eeaa37e895))
- boost academic terms dynamically ([13938ec](https://gitlab.com/openstapps/backend/commit/13938ecf211060a3f50747ac7fed343b71a6aa4b))
- log registration and removal of plugins ([006bbeb](https://gitlab.com/openstapps/backend/commit/006bbebe60b7f5015d80ac825622cefbc25cd959)), closes [#71](https://gitlab.com/openstapps/backend/issues/71)
- make backend work with automatically generated aggregations ([ba2c6f6](https://gitlab.com/openstapps/backend/commit/ba2c6f655c263f0b1d1e55b739adde0004bbf408))
- move EXTERNAL_REQUEST_TIMEOUT to config file ([5d6d4b5](https://gitlab.com/openstapps/backend/commit/5d6d4b53f01550365a330daecbcb4e0f6bdb8aef))
- move up and enable cors ([6483221](https://gitlab.com/openstapps/backend/commit/6483221b62d84c5871ee4ec82158f8b9ef1ed54e))
- support geo shape filter ([dd8a6b3](https://gitlab.com/openstapps/backend/commit/dd8a6b3abcc90c50a16167054e2f3cdcee40c863))
- use config file for maxRequestBodySize ([d110d60](https://gitlab.com/openstapps/backend/commit/d110d60123a28563fe0c58ab903f61255a9644a2))
- use config for MultiSearchRoute ([8278279](https://gitlab.com/openstapps/backend/commit/827827905b71c71dfa9299a9deb92a8c9cfc0e20))
- use new Elasticsearch package ([1bad092](https://gitlab.com/openstapps/backend/commit/1bad092185d989078badc66f9c138d2e1baa27e4))
- utilize api-cli for e2e integration test ([ce06e73](https://gitlab.com/openstapps/backend/commit/ce06e735bea379c9ad955a627e3e1cead37c85fe))

View File

@@ -0,0 +1,14 @@
FROM registry.gitlab.com/openstapps/openstapps/node-base
USER root
RUN apk add --update python3 py3-pip make g++ gcompat
USER node
ADD --chown=node:node . /app
ENV NODE_ENV=production
WORKDIR /app
EXPOSE 3000
HEALTHCHECK --interval=10s --timeout=10s --start-period=10s --retries=12 CMD curl -s --fail --request POST --data '{}' --header 'Content-Type: application/json' http://localhost:3000/ >/dev/null || exit 1
ENTRYPOINT ["node", "app.js"]

619
backend/backend/LICENSE Normal file
View File

@@ -0,0 +1,619 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS

114
backend/backend/README.md Normal file
View File

@@ -0,0 +1,114 @@
[![pipeline status](https://img.shields.io/gitlab/pipeline/openstapps/backend.svg?style=flat-square)](https://gitlab.com/openstapps/backend/commits/master)
# backend (a reference implementation of a StApps backend)
This project is a reference implementation for a StApps backend. It provides an HTTP API to index data into a database,
perform full text search, sorts and filters. It also delivers the configuration needed by the app. The API is specified
within the [@openstapps/core](https://gitlab.com/openstapps/core).
If you want to perform requests, index data or search within JavaScript or TypeScript you should consider using our client
[@openstapps/api](https://gitlab.com/openstapps/api).
Or generate your own client using the openapi/swagger definitions you can get form the [API documentation](https://openstapps.gitlab.io/backend).
# Usage
This backend is not a standalone software. It needs a database like Elasticsearch to work.
If you just want to use the backend you should consider using
[minimal-deployment](https://gitlab.com/openstapps/minimal-deployment). The minimal-deployment will provide
you with everything you need to run this backend.
# Local usage for development purposes
## Requirements
- Elasticsearch (8.4)
- [ICU analysis plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-icu.html)
- OR Docker
- Node.js (~14) / NPM
### Startup Behaviour
_This might be important if you work on the Core_
The backend is using Elasticsearch Mappings and Aggregations from its currently used `core` dependency.
## Start Database (Elasticsearch)
Elasticsearch needs some configuration and plugins to be able to work
with the backend. To save you some work we provide a
[docker image](https://gitlab.com/openstapps/database) which
only needs to be executed to work with the backend.
Run `docker run -d -p 9200:9200 registry.gitlab.com/openstapps/database:latest`
Elasticsearch should be running at port 9200 now. If you have problems with
getting elasticsearch to work, have a look in the
[README](https://gitlab.com/openstapps/database) of the image
first.
## Metrics collection
The backend contains an express middleware which can be optionally enabled by setting the environment variable
`PROMETHEUS_MIDDLEWARE` to `true`. The middleware collects metrics and provides a [Prometheus](https://prometheus.io/)
compatible endpoint from which the metrics may be scraped by Prometheus.
The middleware may be configured with JSON provided in `config/prometheus.json`, i.e.
```JSON
{
"metricsPath": "/metrics",
"collectDefaultMetrics": true,
"requestDurationBuckets": [0.1, 0.5, 1, 2, 5, 10, 20],
"requestLengthBuckets": [512, 1024, 5120, 10240, 51200, 102400],
"responseLengthBuckets": [512, 1024, 5120, 10240, 51200, 102400]
}
```
The available options are documented on [npmjs](https://www.npmjs.com/package/express-prometheus-middleware) or the [homepage](https://github.com/joao-fontenele/express-prometheus-middleware#readme) of the express-prometheus-middleware project. You may get a compatible grafana dashboard at [grafana.com](https://grafana.com/grafana/dashboards/14565).
## Start backend
Run `npm install` and `npm run build`, then start with `npm start`. The server should now be accepting connections at `http://localhost:3000`.
# Environment Variables
To select a database implementation you have to set the `NODE_CONFIG_ENV` variable. At the time only `NODE_CONFIG_ENV=elasticsearch` is supported.
Set `NODE_ENV=production` to run backend for production usages. In production the backend expects some kind of monitoring to be set via the
environment. At the time only SMTP is being implemented. The backend wouldn't start if you don't provide SMTP authentification. Alternatively
you can set `ALLOW_NO_TRANSPORT=true`. To set up an SMTP configuration have a look at
[@openstapps/logger](https://gitlab.com/openstapps/logger).
The list of environment variables includes:
- `NODE_ENV` when set to `production`, there will be a reduced amount of output from the logger
- `PORT` when this is not set, the backend will default to port 3000
- `ES_ADDR` the Elasticsearch address, if not set it will default the Elasticsearch address to `http://localhost:9200`
- `ALLOW_NO_TRANSPORT` if set to true, the backend will allow starting without an Email configured that receives critical errors.
- `ES_DEBUG` setting this to `true` will result in Elasticsearch logging to be **VERY** extensive, in almost all situation this should no be enabled.
- `PROMETHEUS_MIDDLEWARE` if set to `true` will enable metrics collection with [Express Prometheus Middleware](https://www.npmjs.com/package/express-prometheus-middleware)
## Config files
Each university can have it's specific config for the general backend and app and for all databases.
All config files can be found in `./config/`. There is a `default.ts` which is used by default. You can create an
university specific file with following naming scheme: `default-<university license plate>.ts`
A university specific file will only overwrite all properties of the `default.ts` that are set in the file itself.
To start the backend using your configuration you have to provide the `NODE_APP_INSTANCE` environment variable
with your university license plate.
To set a database you have to provide the `NODE_CONFIG_ENV` environment variable with the name of the database.
At the time only Elasticsearch is implemented.
To create your university specific config file for the elasticsearch you have to create a file with following naming
scheme: `elasticsearch-<university license plate>.ts`.
## Debugging
Set `ES_DEBUG=true` to enable verbose Elasticsearch tracing information.
This can be useful to debug some issues between backend and elasticsearch.
## [Contributing](https://gitlab.com/openstapps/projectmanagement/blob/master/CONTRIBUTING.md)

145
backend/backend/ROUTES.md Normal file
View File

@@ -0,0 +1,145 @@
# Routes
## `POST /bookAvailability` [Book availability route](https://openstapps.gitlab.io/core/classes/_index.d_.scbookavailabilityroute.html)
**Route for book availability**
This checks if a book is available in a library.<br>
**Example**:
`POST https://example.com/bookAvailability`
```json
{
"isbn": "978-3-16-148410-0"
}
```
### Definition
| parameter | value |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCBookAvailabilityRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scbookavailabilityrequest) |
| response | [SCBookAvailabilityResponse](https://openstapps.gitlab.io/core/modules/_index.d_.html#scbookavailabilityresponse) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /bulk/:UID` [Bulk add route](https://openstapps.gitlab.io/core/classes/_index.d_.scbulkaddroute.html)
**Route for indexing SC things in a bulk**
### Definition
| parameter | value |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCBulkAddRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scbulkaddrequest) |
| response | [SCBulkAddResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkaddresponse.html) |
| success code | 201 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
| obligatory parameters | <table><tr><th>parameter</th><th>type</th></tr><tr><td>UID</td><td>[SCUuid](https://openstapps.gitlab.io/core/modules/_index.d_.html#scuuid)</td></tr></table> |
## `POST /bulk/:UID/done` [Bulk done route](https://openstapps.gitlab.io/core/classes/_index.d_.scbulkdoneroute.html)
**Route for closing bulks**
### Definition
| parameter | value |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCBulkDoneRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkdonerequest.html) |
| response | [SCBulkDoneResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkdoneresponse.html) |
| success code | 204 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
| obligatory parameters | <table><tr><th>parameter</th><th>type</th></tr><tr><td>UID</td><td>[SCUuid](https://openstapps.gitlab.io/core/modules/_index.d_.html#scuuid)</td></tr></table> |
## `POST /bulk` [Bulk route](https://openstapps.gitlab.io/core/classes/_index.d_.scbulkroute.html)
**Route for bulk creation**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCBulkRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkrequest.html) |
| response | [SCBulkResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /feedback` [Feedback route](https://openstapps.gitlab.io/core/classes/_index.d_.scfeedbackroute.html)
**Route for feedback submission**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCFeedbackRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scfeedbackrequest.html) |
| response | [SCFeedbackResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scfeedbackresponse.html) |
| success code | 204 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /` [Index route](https://openstapps.gitlab.io/core/classes/_index.d_.scindexroute.html)
**Route to request meta information about the deployment**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCIndexRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scindexrequest.html) |
| response | [SCIndexResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scindexresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /search/multi` [Multi search route](https://openstapps.gitlab.io/core/classes/_index.d_.scmultisearchroute.html)
**Route for submission of multiple search requests at once**
### Definition
| parameter | value |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCMultiSearchRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scmultisearchrequest) |
| response | [SCMultiSearchResponse](https://openstapps.gitlab.io/core/modules/_index.d_.html#scmultisearchresponse) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCTooManyRequestsErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.sctoomanyrequestserrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /plugin/register` [Plugin register route](https://openstapps.gitlab.io/core/classes/_index.d_.scpluginregisterroute.html)
**Route to register plugins**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCPluginRegisterRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scpluginregisterrequest) |
| response | [SCPluginRegisterResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scpluginregisterresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCParametersNotAcceptable](https://openstapps.gitlab.io/core/classes/_index.d_.scparametersnotacceptable.html)<br>[SCPluginAlreadyRegisteredErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scpluginalreadyregisterederrorresponse.html)<br>[SCPluginRegisteringFailedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scpluginregisteringfailederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html) |
## `POST /search` [Search route](https://openstapps.gitlab.io/core/classes/_index.d_.scsearchroute.html)
**Route for searching things**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCSearchRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scsearchrequest.html) |
| response | [SCSearchResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scsearchresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `PUT /:TYPE/:UID` [Thing update route](https://openstapps.gitlab.io/core/classes/_index.d_.scthingupdateroute.html)
**Route for updating existing things**
### Definition
| parameter | value |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCThingUpdateRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scthingupdaterequest) |
| response | [SCThingUpdateResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scthingupdateresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
| obligatory parameters | <table><tr><th>parameter</th><th>type</th></tr><tr><td>TYPE</td><td>SCThingTypes</td></tr><tr><td>UID</td><td>[SCUuid](https://openstapps.gitlab.io/core/modules/_index.d_.html#scuuid)</td></tr></table> |

2
backend/backend/app.js Normal file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env node
import './lib/cli.js';

View File

@@ -0,0 +1,18 @@
/**
* This is the database configuration for the technical university of berlin
*
* @type {import('@openstapps/logger').RecursivePartial<import('../../src/storage/elasticsearch/types/elasticsearch-config.js').ElasticsearchConfigFile>}
*/
const config = {
internal: {
database: {
name: 'elasticsearch',
query: {
minMatch: '60%',
queryType: 'query_string',
},
},
},
};
export default config;

View File

@@ -0,0 +1,28 @@
import userGroupSetting from './user-group-setting.js';
import languageSetting from './language-setting.js';
import menus from './menu.js';
/** @type {import('@openstapps/core').SCAppConfiguration} */
const app = {
aboutPages: {},
campusPolygon: {
coordinates: [
[
[8.660_432_999_690_723, 50.123_027_017_044_436],
[8.675_496_285_518_358, 50.123_027_017_044_436],
[8.675_496_285_518_358, 50.130_661_764_486_42],
[8.660_432_999_690_723, 50.130_661_764_486_42],
[8.660_432_999_690_723, 50.123_027_017_044_436],
],
],
type: 'Polygon',
},
features: {},
menus,
name: 'Goethe-Uni',
privacyPolicyUrl: 'https://mobile.server.uni-frankfurt.de/_static/privacy.md',
settings: [userGroupSetting, languageSetting],
versionHistory: [],
};
export default app;

View File

@@ -0,0 +1,33 @@
import {SCSettingInputType, SCThingOriginType, SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCLanguageSetting} */
const languageSetting = {
categories: ['profile'],
defaultValue: 'en',
description: 'The language this app is going to use.',
inputType: SCSettingInputType.SingleChoice,
name: 'language',
order: 0,
origin: {
indexed: '2018-09-11T12:30:00Z',
name: 'SCConfigFile Default Values',
type: SCThingOriginType.Remote,
},
translations: {
de: {
description: 'Die Sprache in der die App angezeigt wird.',
name: 'Sprache',
values: ['Deutsch', 'English'],
},
en: {
description: 'The language this app is going to use.',
name: 'Language',
values: ['Deutsch', 'English'],
},
},
type: SCThingType.Setting,
uid: 'dc9d6dec-6576-45ef-9e35-3598c0d6a662',
values: ['de', 'en'],
};
export default languageSetting;

View File

@@ -0,0 +1,207 @@
/** @type {import('@openstapps/core').SCAppConfigurationMenuCategory[]} */
const menus = [
{
icon: 'home',
items: [
{
icon: 'newspaper',
route: '/news',
title: 'news',
translations: {
de: {
title: 'Aktuelles',
},
en: {
title: 'news',
},
},
},
{
icon: 'search',
route: '/search',
title: 'search',
translations: {
de: {
title: 'Suche',
},
en: {
title: 'search',
},
},
},
{
icon: 'local_library',
route: '/hebis-search',
title: 'library catalog',
translations: {
de: {
title: 'Bibliothekskatalog',
},
en: {
title: 'library catalog',
},
},
},
{
icon: 'inventory_2',
route: '/catalog',
title: 'course catalog',
translations: {
de: {
title: 'Vorlesungsverzeichnis',
},
en: {
title: 'course catalog',
},
},
},
{
icon: 'work',
route: '/jobs',
title: 'job postings',
translations: {
de: {
title: 'Jobangebote',
},
en: {
title: 'job postings',
},
},
},
],
title: 'overview',
route: '/overview',
translations: {
de: {
title: 'Übersicht',
},
en: {
title: 'overview',
},
},
},
{
icon: 'local_cafe',
items: [],
route: '/canteen',
title: 'canteen',
translations: {
de: {
title: 'Mensa',
},
en: {
title: 'canteen',
},
},
},
{
icon: 'map',
items: [],
route: '/map',
title: 'campus map',
translations: {
de: {
title: 'Campus Karte',
},
en: {
title: 'campus map',
},
},
},
{
icon: 'school',
items: [
{
icon: 'grade',
route: '/favorites',
title: 'favorites',
translations: {
de: {
title: 'Favoriten',
},
en: {
title: 'favorites',
},
},
},
{
icon: 'calendar_today',
route: '/schedule',
title: 'schedule',
translations: {
de: {
title: 'Stundenplan',
},
en: {
title: 'schedule',
},
},
},
{
authProvider: 'paia',
icon: 'badge',
route: '/library-account',
title: 'library account',
translations: {
de: {
title: 'Bibliothekskonto',
},
en: {
title: 'library account',
},
},
},
{
icon: 'settings',
route: '/settings',
title: 'settings',
translations: {
de: {
title: 'Einstellungen',
},
en: {
title: 'settings',
},
},
},
{
icon: 'rate_review',
route: '/feedback',
title: 'feedback',
translations: {
de: {
title: 'Feedback',
},
en: {
title: 'feedback',
},
},
},
{
icon: 'info',
route: '/about',
title: 'about',
translations: {
de: {
title: 'Über die App',
},
en: {
title: 'About the App',
},
},
},
],
title: 'my app',
route: '/profile',
translations: {
de: {
title: 'Meine App',
},
en: {
title: 'my app',
},
},
},
];
export default menus;

View File

@@ -0,0 +1,39 @@
import {SCSettingInputType, SCThingOriginType, SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCUserGroupSetting} */
const userGroupSetting = {
categories: ['profile'],
defaultValue: 'students',
description:
'The user group the app is going to be used.' +
'This settings for example is getting used for the predefined price category of mensa meals.',
inputType: SCSettingInputType.SingleChoice,
name: 'group',
order: 1,
origin: {
indexed: '2018-09-11T12:30:00Z',
name: 'SCConfigFile Default Values',
type: SCThingOriginType.Remote,
},
translations: {
de: {
description:
'Mit welcher Benutzergruppe soll die App verwendet werden?' +
' Die Einstellung wird beispielsweise für die Vorauswahl der Preiskategorie der Mensa verwendet.',
name: 'Gruppe',
values: ['Studierende', 'Angestellte', 'Gäste'],
},
en: {
description:
'The user group the app is going to be used.' +
' This settings for example is getting used for the predefined price category of mensa meals.',
name: 'Group',
values: ['students', 'employees', 'guests'],
},
},
type: SCThingType.Setting,
uid: '2c97aa36-4aa2-43de-bc5d-a2b2cb3a530e',
values: ['students', 'employees', 'guests'],
};
export default userGroupSetting;

View File

@@ -0,0 +1,50 @@
import {SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCBackendAggregationConfiguration[]} */
const aggregations = [
{
fieldName: 'categories',
onlyOnTypes: [
SCThingType.AcademicEvent,
SCThingType.Article,
SCThingType.Building,
SCThingType.Catalog,
SCThingType.Dish,
SCThingType.PointOfInterest,
SCThingType.Room,
],
},
{
fieldName: 'inPlace.name',
onlyOnTypes: [
SCThingType.DateSeries,
SCThingType.Dish,
SCThingType.Floor,
SCThingType.Organization,
SCThingType.PointOfInterest,
SCThingType.Room,
SCThingType.Ticket,
],
},
{
fieldName: 'academicTerms.acronym',
onlyOnTypes: [SCThingType.AcademicEvent, SCThingType.SportCourse],
},
{
fieldName: 'academicTerm.acronym',
onlyOnTypes: [SCThingType.Catalog],
},
{
fieldName: 'majors',
onlyOnTypes: [SCThingType.AcademicEvent],
},
{
fieldName: 'keywords',
onlyOnTypes: [SCThingType.Article, SCThingType.Book, SCThingType.Message, SCThingType.Video],
},
{
fieldName: 'type',
},
];
export default aggregations;

View File

@@ -0,0 +1,102 @@
import {
month,
sommerRange,
ssAcronymLong,
ssAcronymShort,
winterRange,
wsAcronymLong,
wsAcronymShort,
} from '../tools/semester-acronym.js';
import {SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCBackendConfigurationSearchBoostingContext} */
const boostings = {
default: [
{
factor: 1,
fields: {
'academicTerms.acronym': {
[ssAcronymShort]: sommerRange.includes(month) ? 1.1 : 1.05,
[wsAcronymShort]: winterRange.includes(month) ? 1.1 : 1.05,
[ssAcronymLong]: sommerRange.includes(month) ? 1.1 : 1.05,
[wsAcronymLong]: winterRange.includes(month) ? 1.1 : 1.05,
},
},
type: SCThingType.AcademicEvent,
},
{
factor: 1,
fields: {
categories: {
'course': 1.08,
'integrated course': 1.08,
'introductory class': 1.05,
'lecture': 1.1,
'seminar': 1.01,
'tutorial': 1.05,
},
},
type: SCThingType.AcademicEvent,
},
{
factor: 1.6,
type: SCThingType.Building,
},
{
factor: 1,
fields: {
categories: {
cafe: 1.1,
learn: 1.1,
library: 1.2,
restaurant: 1.1,
},
},
type: SCThingType.PointOfInterest,
},
{
factor: 1,
fields: {
categories: {
'main dish': 2,
},
},
type: SCThingType.Dish,
},
],
dining: [
{
factor: 1,
fields: {
categories: {
'cafe': 2,
'canteen': 2,
'restaurant': 2,
'restroom': 1.2,
'student canteen': 2,
},
},
type: SCThingType.Building,
},
{
factor: 2,
type: SCThingType.Dish,
},
],
place: [
{
factor: 2,
type: SCThingType.Building,
},
{
factor: 2,
type: SCThingType.PointOfInterest,
},
{
factor: 2,
type: SCThingType.Room,
},
],
};
export default boostings;

View File

@@ -0,0 +1,72 @@
import {SCThingType} from '@openstapps/core';
import aggregations from './aggregations.js';
import boostings from './boostings.js';
import {readFile} from 'fs/promises';
/** @type {import('@openstapps/core').SCBackendInternalConfiguration} */
export const internal = {
aggregations,
boostings,
};
/** @type {import('@openstapps/core').SCBackendConfiguration} */
export const backend = {
SCVersion: JSON.parse(await readFile('package.json', 'utf8')).version,
externalRequestTimeout: 5000,
hiddenTypes: [SCThingType.DateSeries, SCThingType.Diff, SCThingType.Floor],
mappingIgnoredTags: ['minlength', 'pattern', 'see', 'tjs-format'],
maxMultiSearchRouteQueries: 5,
maxRequestBodySize: 2e6,
name: 'Goethe-Universität Frankfurt am Main',
namespace: '909a8cbc-8520-456c-b474-ef1525f14209',
sortableFields: [
{
fieldName: 'name',
sortTypes: ['ducet'],
},
{
fieldName: 'type',
sortTypes: ['ducet'],
},
{
fieldName: 'categories',
onlyOnTypes: [
SCThingType.AcademicEvent,
SCThingType.Building,
SCThingType.Catalog,
SCThingType.Dish,
SCThingType.PointOfInterest,
SCThingType.Room,
],
sortTypes: ['ducet'],
},
{
fieldName: 'geo',
onlyOnTypes: [SCThingType.Building, SCThingType.PointOfInterest, SCThingType.Room],
sortTypes: ['distance'],
},
{
fieldName: 'geo',
onlyOnTypes: [SCThingType.Building, SCThingType.PointOfInterest, SCThingType.Room],
sortTypes: ['distance'],
},
{
fieldName: 'inPlace.geo',
onlyOnTypes: [
SCThingType.DateSeries,
SCThingType.Dish,
SCThingType.Floor,
SCThingType.Organization,
SCThingType.PointOfInterest,
SCThingType.Room,
SCThingType.Ticket,
],
sortTypes: ['distance'],
},
{
fieldName: 'offers',
onlyOnTypes: [SCThingType.Dish],
sortTypes: ['price'],
},
],
};

View File

@@ -0,0 +1,25 @@
import app from './app/index.js';
import {backend, internal} from './backend/index.js';
/**
* This is the default configuration for app and backend
*
* University-specific files can be created with the following naming scheme: default-<university license plate>.ts
*
* To select your university-specific configuration which is merged from this default file and your university-specific
* file, you have to supply the `NODE_APP_INSTANCE` environment variable with your license plate
*
* To get more information about the meaning of specific fields, please have a look at `@openstapps/core` or use your
* IDE to read the TSDoc documentation.
*
* @type {import('@openstapps/core').SCConfigFile}
*/
const config = {
app,
auth: {},
backend,
internal,
uid: 'f-u',
};
export default config;

View File

@@ -0,0 +1,31 @@
/**
* This is the default configuration for elasticsearch (a database)
*
* To select your university-specific configuration which is merged from this default file and your university-specific
* file, you have to supply the `NODE_APP_INSTANCE` environment variable with your license plate
*
* To select a different database, you have to supply the `NODE_CONFIG_ENV` environment variable with a database name
* that is implemented in the backend
*
* To get more information about the meaning of specific fields, please use your IDE to read the TSDoc documentation.
*
* @type {import('../../src/storage/elasticsearch/types/elasticsearch-config.js').ElasticsearchConfigFile}
*/
const config = {
internal: {
database: {
name: 'elasticsearch',
version: '8.4.2',
query: {
minMatch: '75%',
queryType: 'dis_max',
matchBoosting: 1.3,
fuzziness: 'AUTO',
cutoffFrequency: 0,
tieBreaker: 0,
},
},
},
};
export default config;

View File

@@ -0,0 +1,9 @@
{
"metricsPath": "/metrics",
"includeMethod": true,
"includePath": true,
"promClient": {
"collectDefaultMetrics": {}
},
"for-more-options-see": "https://github.com/jochen-schweizer/express-prom-bundle#options"
}

View File

@@ -0,0 +1,28 @@
import {readFile} from 'fs/promises';
import {SCAboutPageContentType} from '@openstapps/core';
/**
* Usage:
*
* ```js
* await markdown('./page.md', import.meta.url)
* ```
*
* @param {string} path relative path to the file, omitting the language marker
* @param {string | URL} base base path, usually import.meta.url
* @returns {Promise<import('@openstapps/core').SCAboutPageMarkdown>}
*/
export async function markdown(path, base) {
const de = await readFile(new URL(path.replace(/\.md$/, '.de.md'), base), 'utf8');
const en = await readFile(new URL(path.replace(/\.md$/, '.en.md'), base), 'utf8');
return {
value: de,
translations: {
en: {
value: en,
},
},
type: SCAboutPageContentType.MARKDOWN,
};
}

View File

@@ -0,0 +1,33 @@
/**
* Generates a range of numbers that represent consecutive calendar months
*
* @param {number} startMonth The month to start with (inclusive)
* @param {number} endMonth The month to end with (inclusive)
* @returns {number[]}
*/
export function yearSlice(startMonth, endMonth) {
let months = [...Array.from({length: 13}).keys()].slice(1);
months = [...months, ...months];
if (!months.includes(startMonth) || !months.includes(endMonth)) {
throw new Error(`Given months not part of a year! Check ${startMonth} or ${endMonth}!`);
}
const startIndex = months.indexOf(startMonth);
const endIndex =
months.indexOf(endMonth) <= startIndex ? months.lastIndexOf(endMonth) : months.indexOf(endMonth);
return months.slice(startIndex, endIndex + 1);
}
export const sommerRange = yearSlice(3, 8);
export const winterRange = yearSlice(9, 2);
export const month = new Date().getMonth();
export const year = new Date().getFullYear();
export const winterYearOffset = month < winterRange[0] ? -1 : 0;
export const sommerYear = year + (month <= winterRange[winterRange.length] ? -1 : 0);
export const winterYear = `${year + winterYearOffset}/${(year + 1 + winterYearOffset).toString().slice(-2)}`;
export const wsAcronymShort = `WS ${winterYear}`;
export const ssAcronymShort = `SS ${sommerYear}`;
export const wsAcronymLong = `WiSe ${winterYear}`;
export const ssAcronymLong = `SoSe ${sommerYear}`;

View File

@@ -0,0 +1,37 @@
import {readFile, readdir} from 'fs/promises';
import url from 'url';
import path from 'path';
/**
* @example version(1, import.meta.url)
* @param options {Omit<import('@openstapps/core').SCAppVersionInfo, 'releaseNotes' | 'translations'>}
* @param base {string}
* @returns {Promise<import('@openstapps/core').SCAppVersionInfo>}
*/
export async function version(options, base) {
const de = await readFile(new URL(`${options.version}.de.md`, base), 'utf8');
const en = await readFile(new URL(`${options.version}.en.md`, base), 'utf8');
return {
...options,
releaseNotes: de,
translations: {
en: {
releaseNotes: en,
},
},
};
}
/**
* @param base {string} Base path of the file as `import.meta.url`
* @returns {Promise<import('@openstapps/core').SCAppVersionInfo[]>}
*/
export async function versions(base) {
const directory = await readdir(path.dirname(url.fileURLToPath(base)));
const versions = [
...new Set(directory.filter(it => it.endsWith('.md')).map(it => it.replace(/\.\w+\.md$/, ''))),
].sort((a, b) => -a.localeCompare(b, undefined, {numeric: true}));
return Promise.all(versions.map(versionName => version({version: versionName}, base)));
}

View File

@@ -0,0 +1,7 @@
Open StApps bietet Studierenden aller beteiligten Hochschulen eine qualitativ
hochwertige App für den Studienalltag. Open StApps-Verbundpartner integrieren
generalisierbare Studierendenprozesse so in App-Module, dass diese auch
von anderen Hochschulen verwendet werden können. Die in der Open StApps App
verwendeten Daten einer Datenquelle sind in einem generalisierten Datenmodell
so aufbereitet, dass ein Austausch oder Abschaltung der Datenquelle problemlos möglich
ist und die Open StApps App problemlos weiterhin funktionsfähig bleibt.

View File

@@ -0,0 +1,6 @@
Open StApps provides students from all participating universities with a
high-quality app for everyday study. Open StApps partners integrate
generalizable student processes into app modules in such a way that they can be
used by other universities. The data of a data source used in the Open StApps app
is prepared in a generalized data model in a way that the data source can be easily
exchanged or switched off while the app continues to function without any problems.

View File

@@ -0,0 +1,125 @@
import {SCAboutPageContentType} from '@openstapps/core';
import {markdown} from '../../default/tools/markdown.js';
/** @type {import('@openstapps/core').SCAboutPage} */
export const about = {
title: 'Über Open StApps',
content: [
{
title: 'Verbundprojekt mehrerer Hochschulen für eine generische Studierenden-App',
content: await markdown('./about.md', import.meta.url),
translations: {
en: {
title: 'Collaborative project of multiple universities for a single generic study app',
},
},
type: SCAboutPageContentType.SECTION,
},
{
title: 'Goethe-Uni Kontakt',
content: {
rows: [
[
{
value: 'Adresse',
translations: {
en: {
value: 'Address',
},
},
type: SCAboutPageContentType.MARKDOWN,
},
{
// language=Markdown
value:
'Goethe Universität<br>' +
'Hochschulrechenzentrum (HRZ)<br>' +
'Norbert-Wollheim-Platz 1<br>' +
'60629 Frankfurt',
translations: {},
type: SCAboutPageContentType.MARKDOWN,
},
],
[
{
value: 'Kontaktinformation',
translations: {
en: {
value: 'Contact information',
},
},
type: SCAboutPageContentType.MARKDOWN,
},
{
// language=Markdown
value:
'[app@rz.uni-frankfurt.de](mailto:app@rz.uni-frankfurt.de)<br>' +
'[+49 69 798 32936](tel:+496979832936)<br>' +
'[https://app.rz.uni-frankfurt.de](https://app.rz.uni-frankfurt.de)',
translations: {},
type: SCAboutPageContentType.MARKDOWN,
},
],
],
type: SCAboutPageContentType.TABLE,
},
translations: {
en: {
title: 'Goethe-Uni Contact',
},
},
type: SCAboutPageContentType.SECTION,
},
{
icon: 'newspaper',
title: 'Neue Funktionen / Gelöste Probleme',
link: 'changelog',
translations: {
en: {
title: 'New features / Resolved issues',
},
},
type: SCAboutPageContentType.ROUTER_LINK,
},
{
icon: 'description',
title: 'Impressum',
link: 'imprint',
translations: {
en: {
title: 'Imprint',
},
},
type: SCAboutPageContentType.ROUTER_LINK,
},
{
icon: 'policy',
title: 'Datenschutz',
link: 'privacy',
translations: {
en: {
title: 'Privacy policy',
},
},
type: SCAboutPageContentType.ROUTER_LINK,
},
{
icon: 'copyright',
title: 'Bibliotheken und Lizenzen',
link: 'licenses',
translations: {
en: {
title: 'Libraries and licenses',
},
},
type: SCAboutPageContentType.ROUTER_LINK,
},
],
translations: {
en: {
title: 'About Open StApps',
},
},
};
export default about;

View File

@@ -0,0 +1,26 @@
import {SCAboutPageContentType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCAboutPage} */
export const imprint = {
title: 'Impressum',
content: [
{
// language=Markdown
value: `[Impressum der Johann Wolfgang Goethe-Universität Frankfurt am Main](https://www.uni-frankfurt.de/impressum)`,
translations: {
en: {
// language=Markdown
value: `[Imprint of the Goethe University Frankfurt](https://www.uni-frankfurt.de/impressum)`,
},
},
type: SCAboutPageContentType.MARKDOWN,
},
],
translations: {
en: {
title: 'Imprint',
},
},
};
export default imprint;

View File

@@ -0,0 +1,12 @@
import about from './about.js';
import imprint from './imprint.js';
import privacy from './privacy.js';
/** @type {import('@openstapps/core').SCMap<import('@openstapps/core').SCAboutPage>} */
const aboutPages = {
'about': about,
'about/imprint': imprint,
'about/privacy': privacy,
};
export default aboutPages;

View File

@@ -0,0 +1,166 @@
# Datenschutzerklärung
## Kontaktdaten des Verantwortlichen
Verantwortlich im Sinne der Datenschutz-Grundverordnung und weiterer Vorschriften zum Datenschutz ist die:
Johann Wolfgang Goethe-Universität Frankfurt am Main vertreten durch ihren Präsidenten<br />
Theodor-W.-Adorno-Platz 1<br />
60323 Frankfurt am Main
Postanschrift:<br />
Goethe-Universität Frankfurt am Main<br />
60629 Frankfurt
Website: http://www.uni-frankfurt.de
## Kontaktdaten der Datenschutzbeauftragten an der Goethe-Universität
Sie erreichen die behördlichen Datenschutzbeauftragten der Johann Wolfgang Goethe-Universität Frankfurt am Main unter:<br />
Mail: <dsb@uni-frankfurt.de><br />
Website: http://www.uni-frankfurt.de/47859992/datenschutzbeauftragte
## Informationen zur Verarbeitung personenbezogener Daten
### <u>1. Umfang der Verarbeitung personenbezogener Daten</u>
Personenbezogene Daten sind gemäß Artikel 4 DSGVO alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen.
Wir verarbeiten personenbezogene Daten von Ihnen als Nutzer:innen der Goethe-Uni-App, soweit dies zur Bereitstellung einer **funktionsfähigen Applikation** technisch erforderlich ist.
Weiterhin kann eine Datenverarbeitung auf Ihrer freiwilligen Einwilligung basieren, wenn Sie **spezifische Funktionen** nutzen möchten.
Wir unterscheiden daher nachfolgend zwischen
- Zugriffsdaten bei der Nutzung der App: Inhalt der Anfragen, IP-Adressen, Datum/Uhrzeit der Anfrage, Angefragte URL, Fehlermeldungen, Browser-Kennung, HTTP-Header
- Standortbestimmung und Navigation: freiwillige Standortangaben
- Nutzer:inneneinstellungen: freiwillige Angabe von a) Sprachpräferenzen (derzeit: deutsch/englisch), b) Status (z. B. Gast/Student) oder c) spezifischen Suchanfragen und Suchergebnissen (Notifications)
- Kalenderfunktion: freiwillige Nutzung der Kalenderfunktion (optional mit freiwilliger Nutzung einer Synchronisationsfunktion: Opt-in) oder der integrierten Stundenplanfunktion, hierbei werden folgende Daten auf dem Endgerät verarbeitet und gespeichert: Termine und Veranstaltungen
- Feedbackfunktion und Kontaktaufnahme: freiwillige Nutzung mit der Angabe von Kontaktdaten und ggf. freiwilliger Übermittlung von Protokolldaten
- Campus Dienste: freiwillige Nutzung mit Verarbeitung von Notenansicht, Matrikelnummer, E-Mailadresse, Name
- Funktionen der Bibliothek: freiwillige Nutzung mit Verarbeitung von Bibliothekskontodaten, wie z.B. Ausweisnummer mit Name, E-Mailadresse, postalischer Adresse, Nutzungsberechtigung, Bestelldaten, Gebühren, Vormerkung, Ausleihdaten. Die vollständigen Angaben zur Verarbeitung finden Sie in der Datenschutzerklärung der Bibliothek:<br />
https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
Die App verlinkt an einigen Stellen auf die Website der Goethe-Universität sowie auf andere, externe Websites, die in einem In-App-Browser dargestellt werden. Wir bitten Sie bei Aufruf dieser Websites, die dort geltenden gesonderte Datenschutzhinweise und Erklärungen zu beachten.
### <u>2. Zweck(e) der Datenverarbeitung</u>
**Zugriff auf Standortdaten**
Für die Navigation benötigt die Goethe-Uni-App Zugriff auf den Standort des verwendeten Endgerätes (Location Based Services). Bei einer Anfrage erhebt die App den aktuellen Standort über GPS, Funkzellendaten und WLAN-Datenbanken, um Ihnen als Nutzer:in Informationen zu Ihrer unmittelbaren Umgebung geben zu können. Der Zugriff auf die Standortdaten erfolgt nur, wenn Sie den Zugriff auf die Standortdaten erlauben. Daten zu Ihrem Standort werden ausschließlich für die Bearbeitung von standortbezogenen Anfragen genutzt und um Ihren Standort auf der Karte anzuzeigen.
**Zugriff auf Zugriffsdaten**
Die Speicherung und Verarbeitung von Protokolldateien erfolgt, um die Funktionsfähigkeit der Goethe Uni-App für Sie sicherzustellen. Zudem benötigen wir die die Daten aus Gründen der Sicherheit unserer informationstechnischen Systeme. Eine anderweitige Auswertung oder Weitergabe findet in diesem Zusammenhang nicht statt.
**Zugriff auf Spracheinstellungen**
Der Zugriff auf die Spracheinstellung erfolgt um Ihnen die Oberfläche der App in der von Ihnen gewünschten Sprache anzuzeigen.
**Zugriff auf die Einstellung der Statusgruppe**
Der Zugriff auf die Einstellung der Statusgruppe erfolgt um Ihnen in der App die für Ihre Gruppe zutreffenden Informationen anzuzeigen, z.B. Mensapreise
**Zugriff auf personenbezogene Daten bei der Nutzung der Feedbackfunktion**
Die Verarbeitung der personenbezogenen Daten aus der Feedbackfunktion dient uns zur Kontaktaufnahme und Fehlerbehebung.
**Zugriff auf personenbezogene Daten bei der Kalendersynchronisation**
Der Zugriff auf die Termindaten erfolgt um sie bei aktivierter Kalenderfunktion in den Gerätekalender zu schreiben.
**Zugriff auf Daten der Campus Dienste**
Der Zugriff auf das Campus Management Systems erfolgt ausschließlich um persönliche Daten der Studierendenverwaltung in der App anzuzeigen (z.B. Prüfungsnoten).
**Zugriff auf bibliotheksspezifische personenbezogene Daten**
Der Zugriff auf die Daten (z.B. Ausweisnummer, Name, Postanschrift) erfolgt zur Durchführung von Bestell- und Ausleihverfahren von Büchern und sonstigen Materialien der Universitätsbibliothek. Die vollständigen Angaben zu den Verarbeitungszwecken finden Sie in der Datenschutzerklärung der Bibliothek: https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
### <u>3. Rechtsgrundlage(n) für die Datenverarbeitung</u>
Die Nutzung der Nutzungs-/Zugriffsdaten („Protokolldateien") basiert auf Artikel 6 Absatz 1 lit. f) DSGVO.
Für alle spezifischen Funktionen, bei denen die Datenverarbeitung auf Ihrer freiwilligen Einwilligung als Nutzer:innen basiert, werden explizit Einwilligungen bzw. aktive Zustimmungsakte („Opt-In") eingeholt. Die Bereitstellung personenbezogener Daten zu Ihrer Person gegenüber der Goethe-Universität erfolgen dabei auf freiwilliger Basis. Die Rechtsgrundlage ist in diesen Fällen jeweils Artikel 6 Absatz 1 lit. a) DSGVO. Sie können Ihre jeweilige Einwilligung jederzeit einzeln widerrufen bzw. Ihre Einstellungen ändern.
### <u>4. Datenlöschung und Speicherdauer</u>
Die in den Protokolldateien der App erfassten Daten werden sieben Tage nach dem Ende des Zugriffs automatisch gelöscht oder anonymisiert.
Die Löschfristen bzw. Speicherdauer der in den Bibliotheksystemen erfassten Daten finden Sie in der Datenschutzerklärung der Bibliothek: https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
Für alle anderen Funktionen und Dienste gilt: Die Löschung erfolgt hier je nach Vorgabe des genutzten Dienstes. Die personenbezogenen Daten der betroffenen Person werden gelöscht oder gesperrt, sobald der Zweck der Speicherung entfällt.
### <u>5. Datenweitergabe/Datenübermittlung</u>
Ihre personenbezogenen Daten werden von uns nicht an Dritte weitergegeben.
Von Betreiberseite wird durch technische und organisatorische Maßnahmen sichergestellt, dass Dritte keinen Zugriff auf die verarbeiteten Daten, wie z. B. Nutzungsdaten, erhalten. Ein Auftragsverarbeitungsverhältnis nach Art. 28 DSGVO besteht nicht, da ausschließlich eigene Server verwendet werden.
### <u>6. Automatisierte Entscheidungsfindung</u>
Eine automatisierte Entscheidungsfindung einschließlich Profiling erfolgt nicht.
## Rechte der betroffenen Person
Werden personenbezogene Daten von Ihnen verarbeitet, sind Sie Betroffener im Sinne der DSGVO. Die Geltendmachung Ihrer Betroffenenrechte ist kostenfrei. Sie können sich dafür selbstverständlich an uns wenden. Es stehen Ihnen folgende Betroffenenrechte gegenüber der Goethe-Universität zu:
### <u>1. Auskunftsrecht</u>
Sie können von uns als verantwortlicher Stelle eine Bestätigung darüber verlangen, ob und welche Ihrer personenbezogenen Daten von uns verarbeitet werden. Sie haben das Recht, von uns Kopien Ihrer personenbezogenen Daten zu verlangen. Bitte beachten Sie die Ausnahmen, die sich durch spezifische Vorschriften ergeben können.
### <u>2. Recht auf Berichtigung</u>
Sie haben das Recht von uns die Berichtigung und/oder Vervollständigung zu verlangen, sofern die verarbeiteten personenbezogenen Daten, die Sie betreffen, nicht (mehr) richtig oder nicht (mehr) vollständig sind.
### <u>3. Recht auf Einschränkung der Verarbeitung</u>
Unter bestimmten Voraussetzungen können Sie die Einschränkung der Verarbeitung der Sie betreffenden personenbezogenen Daten verlangen, d. h. dass dann Ihre personenbezogenen Daten zwar nicht gelöscht, aber gekennzeichnet werden, so dass eine weitere Verarbeitung eingeschränkt ist.
### <u>4. Recht auf Löschung</u>
Sie können unter bestimmten Voraussetzungen von uns verlangen, dass die Sie betreffenden personenbezogenen Daten unverzüglich gelöscht werden. Dies ist insbesondere der Fall, wenn die personenbezogenen Daten zu dem Zweck, zu dem sie ursprünglich erhoben oder verarbeitet wurden, nicht mehr erforderlich sind.
### <u>5. Recht auf Unterrichtung</u>
Haben Sie das Recht auf Berichtigung, Löschung oder Einschränkung der Verarbeitung uns gegenüber geltend gemacht, sind wir verpflichtet, allen Empfänger/innen, denen die Sie betreffenden personenbezogenen Daten offengelegt wurden, diese Berichtigung oder Löschung der Daten oder Einschränkung der Verarbeitung mitzuteilen, es sei denn, dies erweist sich als unmöglich oder ist mit einem unverhältnismäßigen Aufwand verbunden. Sie sind berechtigt, über diese Empfänger unterrichtet zu werden.
### <u>6. Recht auf Datenübertragbarkeit</u>
Sie haben unter bestimmten Voraussetzungen das Recht von uns zu verlangen, dass Ihre personenbezogenen Daten von uns direkt an einen anderen Verantwortlichen oder an eine andere Organisation übermittelt werden. Alternativ haben Sie unter bestimmten Voraussetzungen das Recht von uns zu verlangen, dass wir Ihnen selbst die Daten in einem maschinenlesbaren Format bereitstellen.
### <u>7. Widerspruchsrecht</u>
Wenn wir Ihre personenbezogenen Daten verarbeiten, weil die Verarbeitung im öffentlichen Interesse, Teil unserer öffentlichen Aufgaben ist bzw. wenn wir Ihre Daten auf Basis eines berechtigten Interesses verarbeiten, haben Sie aus Gründen, die sich aus Ihrer besonderen Situation ergeben, das Recht, jederzeit der Verarbeitung der Sie betreffenden Daten zu widersprechen.
### <u>8. Recht auf Widerruf der datenschutzrechtlichen Einwilligungserklärung</u>
Wenn wir Ihre personenbezogenen Daten verarbeiten, weil Sie uns Ihre Einwilligung gegeben haben, haben Sie jederzeit das Recht, Ihre Einwilligungserklärung zu widerrufen.
### <u>9. Recht auf Beschwerde bei einer Aufsichtsbehörde</u>
Sie haben ferner das Recht auf Beschwerde bei einer Aufsichtsbehörde. Die zuständige Aufsichtsbehörde wird Ihre Beschwerde prüfen.
## **Kontaktdaten der Aufsichtsbehörde im Bereich Datenschutz**
Wenn Sie der Ansicht sind, dass eine Verarbeitung der Sie betreffenden personenbezogenen Daten gegen Datenschutzvorschriften verstößt, wenn Sie eine allgemeine Anfrage haben oder wenn Sie sich bei einer zuständigen Fachaufsichtsbehörde beschweren wollen, können Sie sich an den Hessischen Beauftragten für Datenschutz und Informationsfreiheit (HBDI) wenden.
**Der Hessische Beauftragte für Datenschutz und Informationsfreiheit ist auf unterschiedlichen Wegen erreichbar:**
<u>**Der Hessische Beauftragte für Datenschutz und Informationsfreiheit**</u><br />
Postfach 3163<br />
65021 Wiesbaden
Telefon: +49 611 1408 -- 0
Für allgemeine Anfragen können Sie ein Kontaktformular nutzen:<br />
<https://datenschutz.hessen.de/kontakt><br />
<br />
Für Beschwerden steht Ihnen zudem ein Beschwerdeformular zur Verfügung:<br />
<https://datenschutz.hessen.de/service/beschwerde-uebermitteln>

View File

@@ -0,0 +1,166 @@
# Privacy policy
## Contact details of the person responsible
Responsible in the sense of the General Data Protection Regulation and further regulations on data protection is the:
Johann Wolfgang Goethe-Universität Frankfurt am Main represented by its president<br />
Theodor-W.-Adorno-Platz 1<br />
60323 Frankfurt am Main
Postanschrift:<br />
Goethe-Universität Frankfurt am Main<br />
60629 Frankfurt
Website: http://www.uni-frankfurt.de
## Contact details of the data protection officer at Goethe University
You can reach the data protection officers at Johann Wolfgang Goethe University Frankfurt am Main at:<br />
Mail: <dsb@uni-frankfurt.de><br />
Website: http://www.uni-frankfurt.de/47859992/datenschutzbeauftragte
## Information on the processing of personal data
### <u>1. Scope of the processing of personal data</u>.
According to Article 4 DSGVO, personal data is any information relating to an identified or identifiable natural person.
We process personal data of you as a user inside of the Goethe University App to the extent that this is technically necessary for the provision of a **functional application**.
Furthermore, data processing may be based on your voluntary consent if you wish to use **specific functions**.
We therefore distinguish below between
- Access data when using the app: content of requests, IP addresses, date/time of request, requested URL, error codes, browser identifier, HTTP header.
- Location and navigation: voluntary location information
- User settings: voluntary specification of a) language preferences (currently: German/English), b) status (e.g. guest/student) or c) specific search queries and search results (notifications)
- Calendar function: voluntary use of the calendar function (optional with voluntary use of a sync function: opt-in) or the integrated timetable function. The following data is processed and stored on the users device: appointments and events
- Feedback function and contacting: voluntary use with the provision of contact data and, if applicable, voluntary transmission of log data
- Campus services: voluntary use with processing of grade view, matriculation number, email address, name
- Services of the library: voluntary use with processing of library account data, such as ID number with name, e-mail address, postal address, right of use, order data, fees, reservation, loan data. Full details of processing can be found in the library's privacy policy:<br />
https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
In some places, the app links to the Goethe University website and to other external websites that are displayed in an in-app browser. When you visit these websites, we ask you to pay attention to the separate data protection notices and declarations that apply there.
### <u>2. Purpose(s) of data processing</u>
**Access to location data**.
For navigation, the Goethe University app requires access to the location of the end device used (location-based services). When a request is made, the app collects the current location via GPS, radio cell data and WLAN databases in order to be able to give you as a user:in information about your immediate surroundings. The location data is only accessed if you allow access to the location data. Data about your location is only used to process location-related requests and to display your location on the map.
**Access to access data**.
Log files are stored and processed to ensure that the Goethe Uni app functions properly for you. In addition, we need the data for reasons of security of our information technology systems. No other evaluation or disclosure takes place in this context.
**Access to language settings**.
Access to the language setting is made in order to display the interface of the app in the language of your choice.
**Access to the status group setting**.
Access to the status group setting is provided to show you the information in the app that applies to your group, e.g. canteen prices.
**Access to personal data when using the feedback function**.
We use the processing of personal data from the feedback function to contact you and troubleshoot problems.
**Access to personal data when synchronizing calendars**.
Appointment data is accessed in order to write it to the device calendar when the calendar function is enabled.
**Access to Campus Services data**.
Access to the Campus Management System is solely for the purpose of displaying personal student management data in the app (e.g., exam grades).
**Access to library-specific personal data**.
Access to data (e.g., ID number, name, mailing address) is for the purpose of carrying out ordering and borrowing procedures for books and other materials from the University Library. Full details of the purposes of processing can be found in the Library's Privacy Policy: https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
### <u>3. Rechtsgrundlage(n) für die Datenverarbeitung</u>
The use of usage/access data ("log files") is based on Article 6(1)(f) DSGVO.
For all specific functions where data processing is based on your voluntary consent as a user:in, explicit consent or active acts of consent ("opt-in") are obtained. The provision of personal data about you to Goethe University is done on a voluntary basis. The legal basis in each of these cases is Article 6 (1) a) DSGVO. You can individually revoke your respective consent or change your settings at any time.
### <u>4. Data deletion and storage duration</u>
The data collected in the log files of the app are automatically deleted or anonymized seven days after the end of the access.
The deletion periods or storage duration of the data collected in the library systems can be found in the library's privacy policy: https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
For all other functions and services, the following applies: deletion takes place here depending on the specifications of the service used. The personal data of the data subject will be deleted or blocked as soon as the purpose of the storage no longer applies.
### <u>5. Data disclosure/data transfer</u>
We will not pass on your personal data to third parties.
On the part of the operator, technical and organizational measures are taken to ensure that third parties do not gain access to the processed data, such as usage data. An order processing relationship according to Art. 28 DSGVO does not exist, as only our own servers are used.
### <u>6. Automated decision-making</u>
Automated decision-making, including profiling, does not take place.
## Rights of the data subject
If personal data is processed by you, you are a data subject within the meaning of the GDPR. The assertion of your data subject rights is free of charge. You can, of course, contact us for this purpose. You are entitled to the following data subject rights vis-à-vis Goethe University:
### <u>1. Right of access</u>
You can request confirmation from us as the controller as to whether and which of your personal data is being processed by us. You have the right to request copies of your personal data from us. Please note the exceptions that may arise due to specific regulations.
### <u>2. Right of rectification</u>
You have the right to request us to rectify and/or complete, if the processed personal data concerning you is not (anymore) accurate or not (anymore) complete.
### <u>3. Right to restriction of processing</u>
Under certain conditions, you can request the restriction of the processing of personal data concerning you, i.e. that your personal data is then not deleted, but marked so that further processing is restricted.
### <u>4. Right to erasure</u>
Under certain conditions, you can demand that we delete the personal data concerning you without delay. This is particularly the case if the personal data is no longer necessary for the purpose for which it was originally collected or processed.
### <u>5. Right to information</u>
If you have asserted the right to rectification, erasure or restriction of processing against us, we are obliged to inform all recipients to whom the personal data concerning you have been disclosed of this rectification or erasure of the data or restriction of processing, unless this proves impossible or involves a disproportionate effort. You are entitled to be informed about these recipients.
### <u>6. Right to data portability</u>
Under certain conditions, you have the right to request that we transfer your personal data directly to another controller or organization. Alternatively, under certain conditions, you have the right to request that we ourselves provide you with the data in a machine-readable format.
### <u>7. Right to object</u>
If we process your personal data because the processing is in the public interest, part of our public duties, or if we process your data on the basis of a legitimate interest, you have the right to object at any time to the processing of data relating to you for reasons arising from your particular situation.
### <u>8. Right to revoke the declaration of consent under data protection law</u>
If we process your personal data because you have given us your consent, you have the right to revoke your declaration of consent at any time.
### <u>9. Right to lodge a complaint with a supervisory authority</u>
You also have the right to lodge a complaint with a supervisory authority. The competent supervisory authority will examine your complaint.
## **Contact details of the supervisory authority in the area of data protection**
If you believe that the processing of your personal data violates data protection regulations, if you have a general inquiry or if you want to complain to a competent supervisory authority, you can contact the Hessian Commissioner for Data Protection and Freedom of Information (HBDI).
**The Hessian Commissioner for Data Protection and Freedom of Information can be reached in different ways:**
<u>**The Hessian Commissioner for Data Protection and Freedom of Information**</u><br />
PO Box 3163<br />
65021 Wiesbaden
Telephone: +49 611 1408 -- 0
For general inquiries you can use a contact form:<br />
<https://datenschutz.hessen.de/kontakt><br />
<br />
A complaint form is also available for complaints:<br />
<https://datenschutz.hessen.de/service/beschwerde-uebermitteln>

View File

@@ -0,0 +1,14 @@
import {markdown} from '../../default/tools/markdown.js';
/** @type {import('@openstapps/core').SCAboutPage} */
export const privacy = {
title: 'Datenschutz',
content: [await markdown('./privacy.md', import.meta.url)],
translations: {
en: {
title: 'Privacy Policy',
},
},
};
export default privacy;

View File

@@ -0,0 +1,87 @@
import aboutPages from './about-pages/index.js';
import defaultApp from '../default/app/index.js';
import {backend as defaultBackend, internal as defaultInternal} from '../default/backend/index.js';
import versionHistory from './version-history/index.js';
/**
* This is the default configuration for the Goethe university of Frankfurt
*
* @type {import('@openstapps/core').SCConfigFile}
*/
const config = {
auth: {
default: {
client: {
clientId: '1cac3f99-33fa-4234-8438-979f07e0cdab',
scopes: '',
url: 'https://cas.rz.uni-frankfurt.de/cas/oauth2.0',
},
endpoints: {
authorization: 'https://cas.rz.uni-frankfurt.de/cas/oauth2.0/authorize',
endSession: 'https://cas.rz.uni-frankfurt.de/cas/logout',
mapping: {
id: '$.id',
email: '$.attributes.mailPrimaryAddress',
familyName: '$.attributes.sn',
givenName: '$.attributes.givenName',
name: '$.attributes.givenName',
role: '$.attributes.eduPersonPrimaryAffiliation',
studentId: '$.attributes.employeeNumber',
},
token: 'https://cas.rz.uni-frankfurt.de/cas/oauth2.0/accessToken',
userinfo: 'https://cas.rz.uni-frankfurt.de/cas/oauth2.0/profile',
},
},
paia: {
client: {
clientId: '',
scopes: '',
url: 'https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php',
},
endpoints: {
authorization:
'https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php',
endSession: 'https://ubffm.hds.hebis.de/Shibboleth.sso/Logout',
mapping: {
id: '$.email',
name: '$.name',
role: '$.type',
},
token: 'https://hds.hebis.de/paia/auth/login',
userinfo: 'https://hds.hebis.de/paia/core',
},
},
},
app: {
...defaultApp,
features: {
extern: {
hisometry: {
authProvider: 'default',
url: 'https://his-self-service.rz.uni-frankfurt.de',
},
daia: {
url: 'https://daia.hebis.de/DAIA2/UB_Frankfurt',
},
hebisProxy: {
url: 'https://proxy.ub.uni-frankfurt.de/login?qurl=',
},
paia: {
authProvider: 'paia',
url: 'https://hds.hebis.de/paia/core',
},
/** TODO: idCards: {
authProvider: 'default',
url: 'TODO',
} */
},
},
versionHistory,
aboutPages,
},
backend: defaultBackend,
internal: defaultInternal,
uid: 'f-u',
};
export default config;

View File

@@ -0,0 +1,52 @@
# Goethe-Uni App 2.4
Wir freuen uns euch mehr in der Goethe-Uni App
bieten zu können.
## Navigation zu Gebäuden und Orten
Als eines der Ergebnisse des Ideenwettbewerbs wurde jetzt
ein Navigationsfeature in die App integriert.
Orte auf der Karte, Mensen, sowie sogar Termine (wenn hinterlegt)
bieten jetzt direkt die Option eine Verbindung zu finden, gestützt
durch die Karten App auf deinem Gerät.
## Integration der Jobbörse
Jobs findest du ab sofort auch in der Goethe-Uni App.
Auch das ist ein Ergebnis des Ideenwettbewerbs,
und wir freuen uns es euch hier präsentieren zu können!
## Der Umweltscore
Der Umweltscore für Gerichte wird nun auch in der App angezeigt.
> Nachhaltigkeit, Umweltschutz, Gesundheit und Klimawandel sind
> zentrale Begriffe im gesellschaftlichen Miteinander.
> Unsere Ernährung spielt hierbei eine wichtige Rolle.
> Das Studierendenwerk Frankfurt am Main zeichnet seine Speisenpläne
> ab sofort mit einem Umweltscore aus.
> Anhand dieser Bewertung können Sie direkt ersehen,
> welchen Einfluss Ihre Essenauswahl auf das Klima hat.
## Weitere Verbesserungen
### Performance
Die Performance der App beim Navigieren wurde stark verbessert und ist datensparender.
### Kalender
Die Kalenderabschnitte haben jetzt neue Namen bekommen:
- Der _Kalender_ zeigt Termine für spezifische Tage
- Die _Wochenübersicht_ ist ein Stundenplan mit allen Termine, die sich wiederholen (z. B. Vorlesungen)
- Die _Einzeltermine_ zeigen alle Termine, die sich nicht wiederholen
(z. B. Klausuren)
### Meine App
Der "Meine Kurse" Abschnitt wurde überarbeitet, und zeigt jetzt Termine
für die nächsten Tage und mit mehr Details an.

View File

@@ -0,0 +1,49 @@
# Goethe-Uni App 2.4
The Goethe-Uni App got even better!
## Navigation to buildings and places
As part of the "Ideenwettbewerb," the idea competition,
we have now integrated a navigation feature into the app.
Orte auf der Karte, Mensen, sowie sogar Termine (wenn hinterlegt)
bieten jetzt direkt die Option eine Verbindung zu finden, gestützt
durch die Karten App auf deinem Gerät.
## Integration of the job market
Jobs are now also available in the Goethe-Uni App.
This feature is also a result of the idea competition,
and we're happy to be able to present it to you here!
## The environment score
The environment score for dishes is now displayed inside the app.
> Sustainability, environment protection, health, and climate change are
> central topics in how we live today in our society.
> Our eating habits play an important role in it.
> The "Studierendenwerk Frankfurt am Main" is marking up its menus
> from now on with the so-called "Umweltscore," the environment score.
> Based on this rating, you can see the impact your meal choice would have on our climate.
## Further improvements
### Performance
The performance while navigating around the app has been heavily improved and requires less data to work.
### Calendar
The calendar sections have new names:
- The _calendar_ shows appointments on specific days
- The _week overview_ is a schedule with all events that repeat (e.g. lectures)
- The _single events_ show all appointments that don't repeat (e.g. exams)
### My App
The "my courses" section has been revamped,
and now shows events for the next days and with more detail.

View File

@@ -0,0 +1,15 @@
# Goethe-Uni App 2.5
Die Goethe-Uni App ist noch besser geworden!
## Komplett neue Kartenansicht
Wir haben die Karte überarbeitet, um eine klarere und schnellere Übersicht zu bieten.
## Deutschlandticket mit an Bord
Wenn du das Upgrade des Semesterticket zum Deutschlandticket gemacht hast und eingeloggt bist, findet es sich jetzt auch in der App.
## Bibliotheksdienste sind wieder voll funktionsfähig
Aufgrund einiger Adhoc-Änderungen im Bibliothekssystem haben wir die App so angepasst, dass sie damit umgehen kann.

View File

@@ -0,0 +1,15 @@
# Goethe-Uni App 2.5
The Goethe-Uni App got even better!
## Completely new map view
We overhauled the map to offer you a clearer and faster and overview.
## Deutschlandticket included
If you upgraded your Semesterticket to a Deutschlandticket it will now reside in the App if you are logged in.
## Library services are fully functional again
Due to some adhoc changes in the library system we adjusted the app to handle them properly.

View File

@@ -0,0 +1,6 @@
import {versions} from '../../default/tools/version.js';
/** @type {import('@openstapps/core').SCAppVersionInfo[]} */
const versionHistory = await versions(import.meta.url);
export default versionHistory;

View File

@@ -0,0 +1,22 @@
ES_HOST="elasticsearch"
BACKEND_HOST="localhost"
if [ -z $GITLAB_CI ]; then
ES_HOST=localhost
fi
( STAPPS_LOG_LEVEL=31 STAPPS_EXIT_LEVEL=8 NODE_CONFIG_ENV=elasticsearch NODE_ENV=integration-test ALLOW_NO_TRANSPORT=true ES_ADDR=http://$ES_HOST:9200 node app.js ) & backend_pid=$!
( openstapps-api e2e http://$BACKEND_HOST:3000 --reportPath coverage/integration-report-junit.xml --waiton tcp:$BACKEND_HOST:3000 --samples node_modules/@openstapps/core/test/resources/indexable ) & api_cli_pid=$!
## Check output codes
# api-cli output defines passing the test
# backend should not exit early
wait $api_cli_pid
api_cli_exit=$?
wait $backend_pid
backend_exit=$?
if [ "$api_cli_exit" -eq "0" ]; then
echo "FINISHED";
exit;
fi

View File

@@ -0,0 +1,126 @@
{
"name": "@openstapps/backend",
"description": "A reference implementation for a StApps backend",
"version": "3.3.0",
"private": true,
"type": "module",
"license": "AGPL-3.0-only",
"author": "André Bierlein <andre.mt.bierlein@gmail.com>",
"contributors": [
"Anselm Stordeur <anselmstordeur@gmail.com>",
"Benjamin Jöckel",
"Jovan Krunić <jovan.krunic@gmail.com>",
"Karl-Philipp Wulfert <krlwlfrt@gmail.com>",
"Michel Jonathan Schmitz",
"Rainer Killinger <mail-openstapps@killinger.co>",
"Sebastian Lange",
"Thea Schöbl <dev@theaninova.de>"
],
"main": "lib/app.js",
"bin": "app.js",
"files": [
"app.js",
"lib",
"config",
"Dockerfile",
"README.md",
"ROUTES.md",
"CHANGELOG.md"
],
"scripts": {
"build": "tsup-node",
"build:docker": "docker build -t openstapps:backend ../../.deploy/backend",
"deploy": "pnpm --prod --filter=@openstapps/backend deploy ../../.deploy/backend",
"dev": "tsup --watch --onSuccess \"pnpm run start\"",
"format": "prettier . -c --ignore-path ../../.gitignore",
"format:fix": "prettier --write . --ignore-path ../../.gitignore",
"lint": "tsc --noEmit && eslint --ext .ts src/",
"lint:fix": "eslint --fix --ext .ts src/",
"start": "cross-env NODE_CONFIG_ENV=elasticsearch ALLOW_NO_TRANSPORT=true node app.js",
"start:debug": "cross-env STAPPS_LOG_LEVEL=31 NODE_CONFIG_ENV=elasticsearch ALLOW_NO_TRANSPORT=true node app.js",
"test": "pnpm run test:unit",
"test:integration": "sh integration-test.sh",
"test:unit": "cross-env NODE_CONFIG_ENV=elasticsearch ALLOW_NO_TRANSPORT=true STAPPS_LOG_LEVEL=0 mocha --exit"
},
"dependencies": {
"@elastic/elasticsearch": "8.4.0",
"@openstapps/core": "workspace:*",
"@openstapps/core-tools": "workspace:*",
"@openstapps/logger": "workspace:*",
"@types/body-parser": "1.19.2",
"@types/cors": "2.8.13",
"@types/express": "4.17.17",
"@types/geojson": "1.0.6",
"@types/node": "18.15.3",
"@types/node-cron": "3.0.7",
"@types/nodemailer": "6.4.7",
"@types/promise-queue": "2.2.0",
"@types/uuid": "8.3.4",
"body-parser": "1.20.2",
"cors": "2.8.5",
"cosmiconfig": "8.1.3",
"deepmerge": "4.3.1",
"express": "4.18.2",
"express-prom-bundle": "6.6.0",
"express-promise-router": "4.1.1",
"got": "12.6.0",
"moment": "2.30.1",
"morgan": "1.10.0",
"nock": "13.3.1",
"node-cache": "5.1.2",
"node-cron": "3.0.2",
"nodemailer": "6.9.1",
"prom-client": "14.1.1",
"promise-queue": "2.2.5",
"uuid": "8.3.2"
},
"devDependencies": {
"@openstapps/api-cli": "workspace:*",
"@openstapps/eslint-config": "workspace:*",
"@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*",
"@testdeck/mocha": "0.3.3",
"@types/chai": "4.3.5",
"@types/chai-as-promised": "7.1.5",
"@types/mocha": "10.0.1",
"@types/morgan": "1.9.4",
"@types/sinon": "10.0.14",
"@types/sinon-express-mock": "1.3.9",
"@types/supertest": "2.0.12",
"c8": "7.14.0",
"chai": "4.3.7",
"chai-as-promised": "7.1.1",
"cross-env": "7.0.3",
"get-port": "5.1.1",
"mocha": "10.2.0",
"mocha-junit-reporter": "2.2.0",
"mocked-env": "1.3.5",
"sinon": "15.0.4",
"sinon-express-mock": "2.2.1",
"supertest": "6.3.3",
"ts-node": "10.9.2",
"tsup": "6.7.0",
"typescript": "5.4.2"
},
"tsup": {
"entry": [
"src/cli.ts"
],
"sourcemap": true,
"clean": true,
"target": "es2022",
"format": "esm",
"outDir": "lib"
},
"prettier": "@openstapps/prettier-config",
"eslintConfig": {
"extends": [
"@openstapps"
]
},
"openstapps-configuration": {
"overrides": [
"test"
]
}
}

226
backend/backend/src/app.ts Normal file
View File

@@ -0,0 +1,226 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCNotFoundErrorResponse,
SCRequestBodyTooLargeErrorResponse,
SCSyntaxErrorResponse,
SCUnsupportedMediaTypeErrorResponse,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import cors from 'cors';
import {Express} from 'express';
import morgan from 'morgan';
import path from 'path';
import {DEFAULT_TIMEOUT, isTestEnvironment, mailer, plugins, validator} from './common.js';
import {getPrometheusMiddleware} from './middleware/prometheus.js';
import {MailQueue} from './notification/mail-queue.js';
import {bulkAddRouter} from './routes/bulk-add-route.js';
import {bulkDoneRouter} from './routes/bulk-done-route.js';
import {bulkRouter} from './routes/bulk-route.js';
import {indexRouter} from './routes/index-route.js';
import {multiSearchRouter} from './routes/multi-search-route.js';
import {pluginRegisterRouter} from './routes/plugin-register-route.js';
import {searchRouter} from './routes/search-route.js';
import {thingUpdateRouter} from './routes/thing-update-route.js';
import {virtualPluginRoute} from './routes/virtual-plugin-route.js';
import {BulkStorage} from './storage/bulk-storage.js';
import {DatabaseConstructor} from './storage/database.js';
import {backendConfig} from './config.js';
import {fileURLToPath} from 'url';
/**
* Configure the backend
*/
export async function configureApp(app: Express, databases: {[name: string]: DatabaseConstructor}) {
let integrationTestTimeout: NodeJS.Timeout;
// request loggers have to be the first middleware to be set in express
app.use(
morgan('dev', {
skip: (_request, response) => {
if (process.env.NODE_ENV === 'integration-test') {
clearTimeout(integrationTestTimeout);
integrationTestTimeout = setTimeout(() => {
process.exit(1);
}, DEFAULT_TIMEOUT);
return false;
}
return response.statusCode < 400;
},
stream: process.stdout,
}),
);
/* istanbul ignore if */
if (process.env.PROMETHEUS_MIDDLEWARE === 'true') {
app.use(getPrometheusMiddleware());
}
const corsOptions = {
allowedHeaders: [
'DNT',
'Keep-Alive',
'User-Agent',
'X-Requested-With',
'If-Modified-Since',
'Cache-Control',
'Content-Type',
'X-StApps-Version',
],
credentials: true,
maxAge: 1_728_000,
methods: ['GET', 'POST', 'PUT', 'OPTIONS'],
optionsSuccessStatus: 204,
};
// allow all origins on all routes
app.use(cors(corsOptions));
// TODO: See if it can handle options request with no content-type
// allow cors preflight requests on every route
app.options('*', [cors(corsOptions)]);
// only accept json as content-type for all requests
app.use((request, response, next) => {
// Only accept json as content-type
if (request.is('application/json') !== 'application/json') {
// return an error in the response
const error = new SCUnsupportedMediaTypeErrorResponse(isTestEnvironment);
response.status(error.statusCode);
response.json(error);
return;
}
const bodyBuffer: Buffer[] = [];
// we don't know the full size, the only way we can get is by adding up all individual chunk sizes
let bodySize = 0;
const chunkGatherer = (chunk: Buffer) => {
bodySize += chunk.byteLength;
// when adding each chunk size to the total size, check how large it now is.
if (bodySize > backendConfig.backend.maxRequestBodySize) {
request.off('data', chunkGatherer);
request.off('end', endCallback);
// return an error in the response
const error = new SCRequestBodyTooLargeErrorResponse(isTestEnvironment);
response.status(error.statusCode);
response.json(error);
return;
}
// push the chunk in the buffer
bodyBuffer.push(chunk);
};
const endCallback = () => {
request.body = Buffer.concat(bodyBuffer).toString();
try {
request.body = JSON.parse(request.body);
next();
} catch (error) {
const error_ = new SCSyntaxErrorResponse(error.message, isTestEnvironment);
response.status(error_.statusCode);
response.json(error_);
return;
}
};
request.on('data', chunkGatherer).on('end', endCallback);
});
// validate config file
const directory = path.dirname(fileURLToPath(import.meta.url));
await validator.addSchemas(
path.join(directory, '..', 'node_modules', '@openstapps', 'core', 'lib', 'schema'),
);
// validate the config file
const configValidation = validator.validate(backendConfig, 'SCConfigFile');
// validation failed
if (configValidation.errors.length > 0) {
throw new Error(
`Validation of config file failed. Errors were: ${JSON.stringify(configValidation.errors)}`,
);
}
// check if a database name was given
if (!backendConfig.internal.database?.name) {
throw new Error('You have to configure a database');
}
const database = new databases[backendConfig.internal.database.name](
backendConfig,
// mailQueue
mailer !== undefined && backendConfig.internal.monitoring ? new MailQueue(mailer) : undefined,
);
await database.init();
if (database === undefined) {
throw new TypeError('No implementation for configured database found. Please check your configuration.');
}
Logger.ok('Validated config file successfully');
// treats /foo and /foo/ as two different routes
// see http://expressjs.com/en/api.html#app.set
app.enable('strict routing');
// make the bulk storage available to all http middlewares/routes
app.set('bulk', new BulkStorage(database));
app.set('env', process.env.NODE_ENV);
// load routes before plugins
// they now can be used or overwritten by any plugin
app.use(
bulkAddRouter,
bulkDoneRouter,
bulkRouter,
indexRouter,
multiSearchRouter,
pluginRegisterRouter,
searchRouter,
thingUpdateRouter,
);
// for plugins, as Express doesn't really want you to unregister routes (and doesn't offer any method to do so at all)
app.all('*', async (request, response, next) => {
// if the route exists, call virtual route on the plugin that registered that route
if (plugins.has(request.originalUrl)) {
try {
response.json(await virtualPluginRoute(request, plugins.get(request.originalUrl)!));
} catch (error) {
// in case of an error: send an error response
response.status(error.statusCode);
response.json(error);
}
} else {
// pass to the next matching route (which is 404)
next();
}
});
// add a route for a missing resource (404)
app.use((_request, response) => {
const errorResponse = new SCNotFoundErrorResponse(isTestEnvironment);
response.status(errorResponse.statusCode);
response.json(errorResponse);
});
}

110
backend/backend/src/cli.ts Normal file
View File

@@ -0,0 +1,110 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Logger} from '@openstapps/logger';
import express from 'express';
import http from 'http';
import {configureApp} from './app.js';
import {Elasticsearch} from './storage/elasticsearch/elasticsearch.js';
const app = express();
/**
* Get port from environment and store in Express.
*/
const port = normalizePort(process.env.PORT || '3000');
/**
* Create HTTP server.
*/
const server = http.createServer(app);
/**
* Define server handling for specific events
*/
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(value: string) {
const portNumber = Number.parseInt(value, 10);
if (Number.isNaN(portNumber)) {
// named pipe
return value;
}
if (portNumber >= 0) {
// port number
return portNumber;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
async function onError(error: {code: string; syscall: string}) {
if (error.syscall !== 'listen') {
throw error;
}
const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES': {
await Logger.error(`${bind} requires elevated privileges`);
process.exit(1);
break;
}
case 'EADDRINUSE': {
await Logger.error(`${bind} is already in use`);
process.exit(1);
break;
}
default: {
throw error;
}
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
const addr = server.address();
if (addr === null) {
void Logger.error(`Failed to start binding`);
} else {
const bind = typeof addr === 'string' ? `pipe ${addr}` : `port ${addr.port}`;
Logger.ok(`Listening on ${bind}`);
}
}
configureApp(app, {elasticsearch: Elasticsearch})
.then(() => {
Logger.ok('Successfully configured express server');
// After app setup listen on provided port, on all network interfaces
server.listen(port);
})
// eslint-disable-next-line unicorn/prefer-top-level-await
.catch(error => {
throw error;
});

View File

@@ -0,0 +1,43 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCPluginMetaData} from '@openstapps/core';
import {Validator} from '@openstapps/core-tools';
import {BackendTransport} from './notification/backend-transport.js';
/**
* Instance of the transport for sending mails
*/
export const mailer = BackendTransport.getTransportInstance();
/**
* A validator instance to check if something is a valid JSON object (e.g. a request or a thing)
*/
export const validator = new Validator();
/**
* Provides information if the backend is executed in the "test" (non-production) environment
*/
export const isTestEnvironment = process.env.NODE_ENV !== 'production';
/*
* Stores a ("key-value") list of plugins where key is route and value is plugin information
*/
export const plugins = new Map<string, SCPluginMetaData>();
/**
* The default timeout in milliseconds
*/
export const DEFAULT_TIMEOUT = 20_000;

View File

@@ -0,0 +1,48 @@
import {cosmiconfig, PublicExplorer} from 'cosmiconfig';
import {SCConfigFile} from '@openstapps/core';
import path from 'path';
import deepmerge from 'deepmerge';
import {Logger} from '@openstapps/logger';
const fallbackNamespace = 'default';
const configPath = 'config';
/**
* Creates a config loader
* @param moduleName the name of the config file (module)
*/
function configLoader(moduleName: string): PublicExplorer {
return cosmiconfig(moduleName, {
searchPlaces: ['js', 'json', 'yml', 'yaml'].map(it => `${moduleName}rc.${it}`),
loaders: {
'.js': filepath => import(`file://${filepath}`).then(it => it.default),
},
});
}
/**
* Find and load a config file
*/
async function findConfig<T>(moduleName: string, namespace = fallbackNamespace): Promise<T> {
const config = await configLoader(moduleName).search(path.posix.join('.', configPath, namespace));
if (config) {
Logger.info(`Using ${namespace} config for ${moduleName}`);
return config.config;
} else {
Logger.info(`Using ${fallbackNamespace} config for ${moduleName}`);
return configLoader(moduleName)
.search(path.posix.join('.', configPath, fallbackNamespace))
.then(it => it!.config);
}
}
const namespace = process.env.NODE_APP_INSTANCE;
const database = process.env.NODE_CONFIG_ENV;
export const prometheusConfig = await findConfig<unknown>('prometheus', namespace);
const backendConfigWithoutDatabase = await findConfig<SCConfigFile>('backend', namespace);
export const backendConfig = database
? deepmerge(backendConfigWithoutDatabase, await findConfig<never>(database, namespace))
: backendConfigWithoutDatabase;

17
backend/backend/src/environment.d.ts vendored Normal file
View File

@@ -0,0 +1,17 @@
declare global {
namespace NodeJS {
// eslint-disable-next-line unicorn/prevent-abbreviations
interface ProcessEnv {
NODE_APP_INSTANCE: 'default' | 'b-tu' | 'f-u' | 'fb-fh' | 'ks-ug' | string | undefined;
NODE_CONFIG_ENV: 'elasticsearch' | string | undefined;
STAPPS_LOG_LEVEL: `${number}`;
ALLOW_NO_TRANSPORT: `${boolean}`;
PORT: `${number}`;
ES_DEBUG: `${boolean}`;
ES_ADDR: string;
PROMETHEUS_MIDDLEWARE: `${boolean}`;
}
}
}
export {};

View File

@@ -0,0 +1,39 @@
/*
* Copyright (C) 2021 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Logger} from '@openstapps/logger';
import express_prom_bundle from 'express-prom-bundle';
import fs from 'fs';
import path from 'path';
/**
* Create and configure a new Express Prometheus Middleware instance
*
* This function tries to configure the new instance with JSON read from
* `./conf/prometheus.json`. When this fails an instance configured with
* default options is returned.
* @returns express.Express
*/
export function getPrometheusMiddleware(): express_prom_bundle.Middleware {
const configFileName = path.join('./config', 'prometheus.json');
let options: express_prom_bundle.Opts = {};
try {
options = JSON.parse(fs.readFileSync(configFileName, 'utf8'));
} catch (error) {
Logger.warn("Couldn't get options from config file for Prometheus Middleware.", error);
}
return express_prom_bundle(options);
}

View File

@@ -0,0 +1,116 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Logger, SMTP, Transport, VerifiableTransport} from '@openstapps/logger';
/**
* Provides information if a transport is a verifiable transport
* @param instance A transport that needs to be checked
*/
export function isTransportWithVerification(instance: Transport): instance is VerifiableTransport {
return typeof (instance as VerifiableTransport).verify === 'function';
}
/**
* Singleton for getting only one transport service
*
* In the future this may support more than loading SMTP as a transport.
*/
export class BackendTransport {
/**
* One (and only one) instance of the backend transport
*/
private static _instance?: BackendTransport;
/**
* Stores information if transport is in state of waiting for the verification
*/
private waitingForVerification = false;
/**
* A (SMTP) transport which includes settings for sending mails
*/
protected transport: SMTP | undefined;
/**
* Destroys the singleton instance of the class (for unit test purposes)
*/
public static destroy() {
delete BackendTransport._instance;
}
/**
* Provides instance of a backend transport
*/
public static getInstance(): BackendTransport {
if (BackendTransport._instance !== undefined) {
return BackendTransport._instance;
}
BackendTransport._instance = new BackendTransport();
return BackendTransport._instance;
}
/**
* Provides an instance of a transport
*/
public static getTransportInstance(): SMTP | undefined {
return BackendTransport.getInstance().transport;
}
private constructor() {
// get SMTP instance for the time
// in the future we may implement some other transport services which can be selected
// via the configuration files
try {
this.transport = SMTP.getInstance();
} catch (error) {
if (process.env.ALLOW_NO_TRANSPORT === 'true') {
Logger.warn('SMTP error was ignored.');
} else {
throw error;
}
}
if (this.transport !== undefined && isTransportWithVerification(this.transport)) {
void this.verifyTransport(this.transport);
}
}
/**
* Verifies the transport using its verification method
*/
private async verifyTransport(transport: VerifiableTransport): Promise<void> {
this.waitingForVerification = true;
try {
const successful = await transport.verify();
if (successful) {
Logger.log('SMTP verification successful.');
}
} catch (error) {
throw error;
} finally {
this.waitingForVerification = false;
}
}
/**
* Provides information if transport is in state of waiting for the verification
*/
public isWaitingForVerification(): boolean {
return this.waitingForVerification;
}
}

View File

@@ -0,0 +1,111 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.nse along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Logger, SMTP} from '@openstapps/logger';
import {MailOptions} from 'nodemailer/lib/sendmail-transport';
import Queue from 'promise-queue';
/**
* A queue that can send mails in serial
*/
export class MailQueue {
/**
* Number of allowed verification attempts after which the initialization of transport fails
*/
static readonly MAX_VERIFICATION_ATTEMPTS = 5;
/**
* Number of milliseconds after which verification check should be repeated
*/
static readonly VERIFICATION_TIMEOUT = 5000;
/**
* A queue that saves mails, before the transport is ready. When
* the transport gets ready this mails are getting pushed in to
* the normal queue.
*/
dryQueue: MailOptions[];
/**
* A queue that saves mails, that are being sent in series
*/
queue: Queue;
/**
* A counter for the number of verifications that failed
*/
verificationCounter: number;
/**
* Creates a mail queue
* @param transport Transport which is used for sending mails
*/
constructor(private readonly transport: SMTP) {
this.queue = new Queue(1);
// this queue saves all request when the transport is not ready yet
this.dryQueue = [];
this.verificationCounter = 0;
// if the transport can be verified it should check if it was done...
this.checkForVerification();
}
/**
* Adds a mail into the queue so it gets send when the queue is ready
* @param mail Information required for sending a mail
*/
private async addToQueue(mail: MailOptions) {
return this.queue.add<string>(() => this.transport.sendMail(mail));
}
/**
* Verify the given transport
*/
private checkForVerification() {
if (this.verificationCounter >= MailQueue.MAX_VERIFICATION_ATTEMPTS) {
throw new Error('Failed to initialize the SMTP transport for the mail queue');
}
if (this.transport.isVerified()) {
Logger.ok('Transport for mail queue was verified. We can send mails now');
// if the transport finally was verified send all our mails from the dry queue
for (const mail of this.dryQueue) {
void this.addToQueue(mail);
}
} else {
this.verificationCounter++;
setTimeout(() => {
Logger.warn('Transport not verified yet. Trying to send mails here...');
this.checkForVerification();
}, MailQueue.VERIFICATION_TIMEOUT);
}
}
/**
* Push a mail into the queue so it gets send when the queue is ready
* @param mail Information required for sending a mail
*/
public async push(mail: MailOptions) {
if (this.transport.isVerified()) {
await this.addToQueue(mail);
} else {
// the transport has verification, but is not verified yet
// push to a dry queue which gets pushed to the real queue when the transport is verified
this.dryQueue.push(mail);
}
}
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCBulkAddRequest, SCBulkAddResponse, SCBulkAddRoute, SCNotFoundErrorResponse} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import {isTestEnvironment} from '../common.js';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the route for adding bulks
*/
const bulkRouteModel = new SCBulkAddRoute();
/**
* Implementation of the bulk add route (SCBulkAddRoute)
*/
export const bulkAddRouter = createRoute<SCBulkAddRequest, SCBulkAddResponse>(
bulkRouteModel,
async (request, app, parameters) => {
const bulkMemory: BulkStorage = app.get('bulk');
const bulk = bulkMemory.read(parameters.UID);
if (bulk === undefined) {
Logger.warn(`Bulk with ${parameters.UID} not found.`);
throw new SCNotFoundErrorResponse(isTestEnvironment);
}
await bulkMemory.database.post(request, bulk);
return {};
},
);

View File

@@ -0,0 +1,51 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCBulkDoneRequest,
SCBulkDoneResponse,
SCBulkDoneRoute,
SCNotFoundErrorResponse,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import {isTestEnvironment} from '../common.js';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the route for closing bulks
*/
const bulkDoneRouteModel = new SCBulkDoneRoute();
/**
* Implementation of the bulk done request route (SCBulkDoneRoute)
*/
export const bulkDoneRouter = createRoute<SCBulkDoneRequest, SCBulkDoneResponse>(
bulkDoneRouteModel,
async (_request, app, parameters) => {
const bulkMemory: BulkStorage = app.get('bulk');
const bulk = bulkMemory.read(parameters.UID);
if (bulk === undefined) {
Logger.warn(`Bulk with ${parameters.UID} not found.`);
throw new SCNotFoundErrorResponse(isTestEnvironment);
}
bulk.state = 'done';
await bulkMemory.markAsDone(bulk);
return {};
},
);

View File

@@ -0,0 +1,32 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCBulkRequest, SCBulkResponse, SCBulkRoute} from '@openstapps/core';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the route for creating bulks
*/
const bulkRouteModel = new SCBulkRoute();
/**
* Implementation of the bulk request route (SCBulkRoute)
*/
export const bulkRouter = createRoute<SCBulkRequest, SCBulkResponse>(bulkRouteModel, async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
return bulkMemory.create(request);
});

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// the list provides option to easily implement "isHttpMethod" guard
const httpVerbs = [
'get',
'post',
'put',
'delete',
'patch',
'options',
'head',
'checkout',
'copy',
'lock',
'merge',
'mkactivity',
'mkcol',
'move',
'm-search',
'notify',
'purge',
'report',
'search',
'subscribe',
'trace',
'unlock',
'unsubscribe',
] as const;
/**
* Strings that can be used as HTTP verbs (e.g. in requests): 'get' | 'post' | 'put' | 'delete' etc.
*/
export type HTTPVerb = (typeof httpVerbs)[number];
/**
* Provides information if a text (representing a method) is an HTTP verb
* @param method A text (representing a method) to check
*/
export function isHttpMethod(method: string): method is HTTPVerb {
return (httpVerbs as unknown as string[]).includes(method);
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCIndexResponse, SCIndexRoute} from '@openstapps/core';
import {createRoute} from './route.js';
import {backendConfig} from '../config.js';
/**
* Contains information for using the index route
*/
const indexRouteModel = new SCIndexRoute();
/**
* Implementation of the index route (SCIndexRoute)
*/
export const indexRouter = createRoute<unknown, SCIndexResponse>(
indexRouteModel,
async (): Promise<SCIndexResponse> => {
return {
app: backendConfig.app,
auth: backendConfig.auth,
backend: backendConfig.backend,
};
},
);

View File

@@ -0,0 +1,59 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCMultiSearchRequest,
SCMultiSearchResponse,
SCMultiSearchRoute,
SCSearchResponse,
SCTooManyRequestsErrorResponse,
} from '@openstapps/core';
import {isTestEnvironment} from '../common.js';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
import {backendConfig} from '../config.js';
/**
* Contains information for using the multi search route
*/
const multiSearchRouteModel = new SCMultiSearchRoute();
/**
* Implementation of the multi search route (SCMultiSearchRoute)
*/
export const multiSearchRouter = createRoute<
SCMultiSearchRequest,
SCMultiSearchResponse | SCTooManyRequestsErrorResponse
>(multiSearchRouteModel, async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
const queryNames = Object.keys(request);
if (queryNames.length > backendConfig.backend.maxMultiSearchRouteQueries) {
throw new SCTooManyRequestsErrorResponse(isTestEnvironment);
}
// get a map of promises for each query
const searchRequests = queryNames.map(async queryName => {
return bulkMemory.database.search(request[queryName]);
});
const listOfSearchResponses = await Promise.all(searchRequests);
const response: {[queryName: string]: SCSearchResponse} = {};
for (const [index, queryName] of queryNames.entries()) {
response[queryName] = listOfSearchResponses[index];
}
return response;
});

View File

@@ -0,0 +1,110 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCNotFoundErrorResponse,
SCPluginAlreadyRegisteredErrorResponse,
SCPluginMetaData,
SCPluginRegisterRequest,
SCPluginRegisterResponse,
SCPluginRegisterRoute,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import {deepStrictEqual} from 'assert';
import {isTestEnvironment, plugins} from '../common.js';
import {createRoute} from './route.js';
import {backendConfig} from '../config.js';
/**
* Contains information for using the route for registering routes
*/
const pluginRegisterRouteModel = new SCPluginRegisterRoute();
/**
* Implementation of the plugin registration route (SCPluginRegisterRoute)
*/
export const pluginRegisterRouter = createRoute(pluginRegisterRouteModel, pluginRegisterHandler);
/**
* Handles requests on route for registering plugins
* @param request Request received for registering or unregistering a plugin
* @param _app Express application
*/
export async function pluginRegisterHandler(
request: SCPluginRegisterRequest,
_app: Express.Application,
): Promise<SCPluginRegisterResponse> {
switch (request.action) {
case 'add': {
return addPlugin(request.plugin);
}
case 'remove': {
return removePlugin(request.route);
}
}
}
/**
* Adds a plugin to the list (map) of registered plugins
* @param plugin Meta data of the plugin
*/
function addPlugin(plugin: SCPluginMetaData): SCPluginRegisterResponse {
// check if plugin (its route) has already been registered
if (plugins.has(plugin.route)) {
const previouslyRegistered = plugins.get(plugin.route);
try {
deepStrictEqual(previouslyRegistered, plugin);
return {success: true};
} catch {
throw new SCPluginAlreadyRegisteredErrorResponse(
'Plugin already registered',
plugins.get(plugin.route)!,
isTestEnvironment,
);
}
}
// it's a new plugin so it can be added to the map of plugins
plugins.set(plugin.route, plugin);
// add plugin info to app config
if (backendConfig.app.features.plugins === undefined) {
backendConfig.app.features.plugins = {};
}
backendConfig.app.features.plugins[plugin.name] = {urlPath: plugin.route};
Logger.log(
`Registered plugin (name: ${plugin.name}, address: ${plugin.address}) on the route "${plugin.route}".`,
);
return {success: true};
}
/**
* Removes a plugin from the list (map) of registered plugins using the provided route
* @param route Route of the plugin which needs to be unregistered
*/
function removePlugin(route: string): SCPluginRegisterResponse {
if (!plugins.has(route)) {
throw new SCNotFoundErrorResponse(isTestEnvironment);
}
if (plugins.has(route)) {
const plugin = plugins.get(route)!;
delete backendConfig.app.features.plugins?.[plugin.name];
}
// remove the plugin information using its route as a key
plugins.delete(route);
Logger.log(`Removed plugin that used the route "${route}".`);
return {success: true};
}

View File

@@ -0,0 +1,128 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCInternalServerErrorResponse,
SCMethodNotAllowedErrorResponse,
SCRoute,
SCValidationErrorResponse,
} from '@openstapps/core';
import {ValidationError} from '@openstapps/core-tools/src/types/validator.js';
import {Logger} from '@openstapps/logger';
import {Application, Router} from 'express';
import PromiseRouter from 'express-promise-router';
import {isTestEnvironment, validator} from '../common.js';
import {isHttpMethod} from './http-types.js';
/**
* Creates a router from a route class and a handler function which implements the logic
*
* The given router performs a request and response validation, sets status codes and checks if the given handler
* only returns errors that are allowed for the client to see
* @param routeClass Model of a route
* @param handler Implements the logic of the route
*/
export function createRoute<REQUESTTYPE, RETURNTYPE>(
routeClass: SCRoute,
handler: (
validatedBody: REQUESTTYPE,
app: Application,
parameters: {[parameterName: string]: string},
) => Promise<RETURNTYPE>,
): Router {
// create router
const router = PromiseRouter({mergeParams: true});
// create route
// the given type has no index signature so we have to cast to get the IRouteHandler when a HTTP method is given
const route = router.route(routeClass.urlPath);
const verb = routeClass.method.toLowerCase();
// check if route has a valid http verb
if (isHttpMethod(verb)) {
// create a route handler for the given HTTP method
route[verb](async (request, response) => {
try {
// validate request
const requestValidation = validator.validate(request.body, routeClass.requestBodyName);
if (requestValidation.errors.length > 0) {
const error = new SCValidationErrorResponse(requestValidation.errors, isTestEnvironment);
response.status(error.statusCode);
response.json(error);
await Logger.error(error);
return;
}
// hand over request to handler with path parameters
const handlerResponse = await handler(request.body, request.app, request.params);
// validate response generated by handler
const responseErrors: ValidationError[] = validator.validate(
handlerResponse,
routeClass.responseBodyName,
).errors;
if (responseErrors.length > 0) {
const validationError = new SCValidationErrorResponse(responseErrors, isTestEnvironment);
// The validation error is not caused by faulty user input, but through an error that originates somewhere in
// the backend, therefore we use this "stacked" error.
const internalServerError = new SCInternalServerErrorResponse(validationError, isTestEnvironment);
response.status(internalServerError.statusCode);
response.json(internalServerError);
await Logger.error(internalServerError);
return;
}
// set status code
response.status(routeClass.statusCodeSuccess);
// respond
response.json(handlerResponse);
} catch (error) {
// if the error response is allowed on the route
if (routeClass.errorNames.some(constructorType => error instanceof constructorType)) {
// respond with the error from the handler
response.status(error.statusCode);
response.json(error);
await Logger.error(error);
} else {
// the error is not allowed so something went wrong
const internalServerError = new SCInternalServerErrorResponse(error, isTestEnvironment);
response.status(internalServerError.statusCode);
response.json(internalServerError);
await Logger.error(error);
}
}
});
} else {
throw new Error(
'Invalid HTTP verb in route definition. Please check route definitions in `@openstapps/core`',
);
}
// return a SCMethodNotAllowedErrorResponse on all other HTTP methods
route.all((_request, response) => {
const error = new SCMethodNotAllowedErrorResponse(isTestEnvironment);
response.status(error.statusCode);
response.json(error);
Logger.warn(error);
});
return router;
}

View File

@@ -0,0 +1,35 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCSearchRequest, SCSearchResponse, SCSearchRoute} from '@openstapps/core';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the search route
*/
const searchRouteModel = new SCSearchRoute();
/**
* Implementation of the search route (SCSearchRoute)
*/
export const searchRouter = createRoute<SCSearchRequest, SCSearchResponse>(
searchRouteModel,
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
return bulkMemory.database.search(request);
},
);

View File

@@ -0,0 +1,36 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCThingUpdateRequest, SCThingUpdateResponse, SCThingUpdateRoute} from '@openstapps/core';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the route for updating single things
*/
const thingUpdateRouteModel = new SCThingUpdateRoute();
/**
* Implementation of the thing update route (SCThingUpdateRoute)
*/
export const thingUpdateRouter = createRoute<SCThingUpdateRequest, SCThingUpdateResponse>(
thingUpdateRouteModel,
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
await bulkMemory.database.put(request);
return {};
},
);

View File

@@ -0,0 +1,56 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCInternalServerErrorResponse, SCPluginMetaData, SCValidationErrorResponse} from '@openstapps/core';
import {Request} from 'express';
import got from 'got';
import {isTestEnvironment, validator} from '../common.js';
import {backendConfig} from '../config.js';
/**
* Generic route function used to proxy actual requests to plugins
* @param request The request for a plugin resource
* @param plugin Meta data of the plugin
* @throws {SCInternalServerErrorResponse} On request/response validation or response from the plugin errors
*/
export async function virtualPluginRoute(request: Request, plugin: SCPluginMetaData): Promise<object> {
try {
const requestValidation = validator.validate(request.body, plugin.requestSchema);
if (requestValidation.errors.length > 0) {
// noinspection ExceptionCaughtLocallyJS
throw new SCValidationErrorResponse(requestValidation.errors, isTestEnvironment);
}
// send the request to the plugin (forward the body) and save the response
const response = await got.post(plugin.route.replaceAll(/^\//gi, ''), {
prefixUrl: plugin.address,
json: request.body,
timeout: {
response: backendConfig.backend.externalRequestTimeout,
},
responseType: 'json',
});
const responseBody = response.body;
const responseValidation = validator.validate(responseBody, plugin.responseSchema);
if (responseValidation.errors.length > 0) {
// noinspection ExceptionCaughtLocallyJS
throw new SCValidationErrorResponse(responseValidation.errors, isTestEnvironment);
}
return responseBody as object;
} catch (error) {
// wrap exact error inside of the internal server error response
throw new SCInternalServerErrorResponse(error, isTestEnvironment);
}
}

View File

@@ -0,0 +1,192 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCBulkRequest, SCThingType} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import moment from 'moment';
import NodeCache from 'node-cache';
import {v4} from 'uuid';
import {Database} from './database.js';
/**
* Possible operations with a bulk
*/
export type BulkOperation = 'create' | 'expired' | 'update';
/**
* Describes an indexing process
*/
export class Bulk implements SCBulkRequest {
/**
* Expiration of the bulk
*
* If the bulk is not finished before the expiration date is hit, the bulk
* and all data associated with it will be deleted
*/
expiration: string;
/**
* The data source of the bulk
*
* Bulks with same type and source will be replaced and the data will be
* updated when the bulk is marked as done
*/
source: string;
/**
* State of the bulk
*
* Data can be indexed for this bulk as long as the state is `in progress`
* and the bulk is not expired
*
* When the bulk is marked as `done` it replaces the previous bulk with
* the same source and type. The data will be availabe to the user when
* the bulk switches to done
*/
state: 'in progress' | 'done';
/**
* Type of data in the bulk
*/
type: SCThingType;
/**
* Unique identifier of the bulk
*/
uid: string;
/**
* Creates a new bulk process
* @param request Data needed for requesting a bulk
*/
constructor(request: SCBulkRequest) {
this.uid = v4();
this.state = 'in progress';
this.expiration =
typeof request.expiration === 'string' ? request.expiration : moment().add(1, 'hour').toISOString();
// when should this process be finished
// where does the process come from
this.source = request.source;
// which type of data is this process about to index
this.type = request.type;
}
}
/**
* Cache for bulk-processes
*/
export class BulkStorage {
/**
* Cache for temporary storage
*/
private readonly cache: NodeCache;
/**
* Creates a new BulkStorage
* @param database the database that is controlled by this bulk storage
*/
constructor(public database: Database) {
// a bulk lives 60 minutes if no expiration is given
// the cache is checked every 60 seconds
this.cache = new NodeCache({stdTTL: 3600, checkperiod: 60});
this.cache.on('expired', async (_key, bulk: Bulk) => {
// if the bulk is not done
if (bulk.state !== 'done') {
// the database can delete the data associated with this bulk
await this.database.bulkExpired(bulk);
}
});
}
/**
* Saves a bulk process and assigns to it a user-defined ttl (time-to-live)
* @param bulk the bulk process to save
* @returns the bulk process that was saved
*/
private save(bulk: Bulk): Bulk {
const expirationInSeconds = moment(bulk.expiration).diff(moment.now()) / 1000;
Logger.info('Bulk expires in ', expirationInSeconds, 'seconds');
// save the item in the cache with it's expected expiration
this.cache.set(bulk.uid, bulk, expirationInSeconds);
return bulk;
}
/**
* Create and save a new bulk process
* @param bulkRequest a request for a new bulk process
* @returns a promise that contains the new bulk process
*/
public async create(bulkRequest: SCBulkRequest): Promise<Bulk> {
const bulk = new Bulk(bulkRequest);
bulk.source = bulkRequest.source;
bulk.type = bulkRequest.type;
this.save(bulk);
// tell the database that the bulk was created
await this.database.bulkCreated(bulk);
return bulk;
}
/**
* Delete a bulk process
* @param uid uid of the bulk process
* @returns a promise that contains the deleted bulk process
*/
public async delete(uid: string): Promise<Bulk> {
const bulk = this.read(uid);
if (bulk === undefined) {
throw new TypeError(`Bulk that should be deleted was not found. UID was "${uid}"`);
}
// delete the bulk process from the cache
this.cache.del(uid);
// tell the database to handle the expiration of the bulk
await this.database.bulkExpired(bulk);
return bulk;
}
/**
* Update an old bulk process (replace it with the new one)
* @param bulk new bulk process
* @returns an empty promise
*/
public async markAsDone(bulk: Bulk): Promise<void> {
bulk.state = 'done';
this.save(bulk);
// tell the database that this is the new bulk
await this.database.bulkUpdated(bulk);
return;
}
/**
* Read an existing bulk process
* @param uid uid of the bulk process
* @returns a promise that contains a bulk
*/
public read(uid: string): Bulk | undefined {
return this.cache.get(uid);
}
}

View File

@@ -0,0 +1,109 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCConfigFile,
SCPlace,
SCPlaceWithoutReferences,
SCSearchQuery,
SCSearchResponse,
SCThingWithCategoriesWithoutReferences,
SCThings,
SCUuid,
} from '@openstapps/core';
import {MailQueue} from '../notification/mail-queue.js';
import {Bulk} from './bulk-storage.js';
import {FeatureCollection, Point, Polygon} from 'geojson';
/**
* Creates an instance of a database
*/
export type DatabaseConstructor = new (config: SCConfigFile, mailQueue?: MailQueue) => Database;
export type SupplementaryGeoJSON = FeatureCollection<Point | Polygon, SupplementaryGeoJSONThing>;
export type SupplementaryGeoJSONThing = Pick<
Extract<SCThings, SCPlace>,
Exclude<
keyof SCPlaceWithoutReferences | keyof SCThingWithCategoriesWithoutReferences<never, never>,
'geo' | 'origin' | 'translations'
>
>;
/**
* Defines what one database class needs to have defined
*/
export interface Database {
/**
* Gets called if a bulk was created
*
* The database should
* @param bulk A bulk to be created
*/
bulkCreated(bulk: Bulk): Promise<void>;
/**
* Gets called if a bulk expires
*
* The database should delete all data that is associtated with this bulk
* @param bulk A bulk which data needs to be removed
*/
bulkExpired(bulk: Bulk): Promise<void>;
/**
* Gets called if a bulk was updated
*
* If the database holds a bulk with the same type and source as the given
* bulk it should be replaced by the given one
* @param bulk A new bulk whose data should be saved instead of the data of the old bulk
*/
bulkUpdated(bulk: Bulk): Promise<void>;
/**
* Get a single document
* @param uid Unique identifier of the document
*/
get(uid: SCUuid): Promise<SCThings>;
/**
* Initialize the database (call and wait for all needed methods)
*/
init(): Promise<void>;
/**
* Add a thing to an existing bulk
* @param thing A StAppsCore thing to be added
* @param bulk A bulk to which the thing should be added
*/
post(thing: SCThings, bulk: Bulk): Promise<void>;
/**
* Replace an existing thing in any Bulk
*
* Currently it is not possible to put an non-existing object
* @param thing A StAppsCore thing to be added to a bulk
*/
put(thing: SCThings): Promise<void>;
/**
* Search for things
* @param params Parameters which form a search query to search the backend data
*/
search(parameters: SCSearchQuery): Promise<SCSearchResponse>;
/**
* Get geo info for display on a map
*/
geo(): Promise<SupplementaryGeoJSON>;
}

View File

@@ -0,0 +1,58 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
AggregateName,
AggregationsAggregate,
AggregationsFiltersAggregate,
AggregationsMultiTermsBucket,
} from '@elastic/elasticsearch/lib/api/types.js';
import {SCFacet, SCThingType} from '@openstapps/core';
/**
* Parses elasticsearch aggregations (response from es) to facets for the app
* @param aggregationResponse - aggregations response from elasticsearch
*/
export function parseAggregations(
aggregationResponse: Record<AggregateName, AggregationsAggregate>,
): SCFacet[] {
const facets: SCFacet[] = [];
for (const aggregateName in aggregationResponse) {
const aggregation = aggregationResponse[aggregateName] as AggregationsMultiTermsBucket;
const type = aggregateName === '@all' ? {} : {onlyOnType: aggregateName as SCThingType};
for (const field in aggregation) {
const fieldAggregate = aggregation[field] as AggregationsFiltersAggregate;
if (typeof fieldAggregate !== 'object') continue;
const buckets = Object.values(fieldAggregate.buckets).map(bucket => {
return {
count: bucket.doc_count,
key: bucket.key as string,
};
});
if (buckets.length === 0) continue;
facets.push({
buckets,
field,
...type,
});
}
}
return facets;
}

View File

@@ -0,0 +1,454 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Client, events} from '@elastic/elasticsearch';
import {
AggregateName,
AggregationsMultiTermsBucket,
IndicesGetAliasResponse,
SearchHit,
SearchResponse,
} from '@elastic/elasticsearch/lib/api/types.js';
import {SCConfigFile, SCSearchQuery, SCSearchResponse, SCThings, SCUuid} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import moment from 'moment';
import {MailQueue} from '../../notification/mail-queue.js';
import {Bulk} from '../bulk-storage.js';
import {Database, SupplementaryGeoJSON, SupplementaryGeoJSONThing} from '../database.js';
import {parseAggregations} from './aggregations.js';
import * as Monitoring from './monitoring.js';
import {buildQuery} from './query/query.js';
import {buildSort} from './query/sort.js';
import {aggregations, putTemplate} from './templating.js';
import {
ElasticsearchConfig,
ElasticsearchQueryDisMaxConfig,
ElasticsearchQueryQueryStringConfig,
} from './types/elasticsearch-config.js';
import {
ACTIVE_INDICES_ALIAS,
getThingIndexName,
INACTIVE_INDICES_ALIAS,
matchIndexByType,
VALID_INDEX_REGEX,
} from './util/index.js';
import {noUndefined} from './util/no-undefined.js';
import {retryCatch, RetryOptions} from './util/retry.js';
import {Feature, Point, Polygon} from 'geojson';
/**
* A database interface for elasticsearch
*/
export class Elasticsearch implements Database {
/**
* Elasticsearch client
*/
client: Client;
/**
* Queue of mails to be sent
*/
mailQueue: MailQueue | undefined;
/**
* Stores information if elasticsearch is ready (connection to it has been established)
*/
ready: boolean;
/**
* Get the url of elasticsearch
*/
static getElasticsearchUrl(): string {
// check if we have a docker link
if (process.env.ES_ADDR !== undefined) {
return process.env.ES_ADDR;
}
// default
return 'http://localhost:9200';
}
/**
* Create a new interface for elasticsearch
* @param config an assembled config file
* @param mailQueue a mail queue for monitoring
*/
constructor(
private readonly config: SCConfigFile,
mailQueue?: MailQueue,
) {
if (config.internal.database === undefined || typeof config.internal.database.version !== 'string') {
throw new TypeError('Database version is undefined. Check your config file');
}
this.client = new Client({
node: Elasticsearch.getElasticsearchUrl(),
});
this.client.diagnostic.on(events.REQUEST, async (error: Error | null, result: unknown) => {
if (error !== null) {
await Logger.error(error);
}
if (process.env.ES_DEBUG === 'true') {
Logger.log(result);
}
});
this.ready = false;
this.mailQueue = mailQueue;
}
/**
* Gets a map which contains each alias and all indices that are associated with each alias
*/
private async cleanupDeadIndices(retryOptions: Partial<RetryOptions<IndicesGetAliasResponse>> = {}) {
const aliasResponse = await retryCatch({
maxRetries: 10,
retryInterval: 2000,
doAction: () => this.client.indices.getAlias(),
onFailedAttempt: (attempt, error, {maxRetries, retryInterval}) => {
Logger.warn('Failed getting alias map:', error);
Logger.warn(`Retrying in ${retryInterval} milliseconds. (${attempt} of ${maxRetries})`);
},
onFail: ({maxRetries}) => {
throw new TypeError(`Failed to retrieve alias map after ${maxRetries} attempts!`);
},
...retryOptions,
});
this.ready = true;
const inactiveIndices = Object.entries(aliasResponse)
.filter(([_, aliases]) => Object.keys(aliases.aliases).includes(INACTIVE_INDICES_ALIAS))
.map(([indexName]) => indexName);
if (inactiveIndices.length > 0) {
await this.client.indices.delete({
index: inactiveIndices,
});
Logger.warn(`Deleted old indices: ${inactiveIndices}`);
}
}
/**
* Provides an elasticsearch object using containing thing's UID
* @param uid an UID to use for the search
* @returns an elasticsearch object containing the thing
*/
private async getObject(uid: SCUuid): Promise<SearchHit<SCThings> | undefined> {
const searchResponse = await this.client.search<SCThings>({
body: {
query: {
term: {
'uid.raw': {
value: uid,
},
},
},
},
from: 0,
allow_no_indices: true,
index: ACTIVE_INDICES_ALIAS,
size: 1,
});
// return data from response
return searchResponse.hits.hits[0];
}
async prepareBulkWrite(bulk: Bulk): Promise<string> {
if (!this.ready) {
throw new Error('No connection to elasticsearch established yet.');
}
const index = getThingIndexName(bulk.type, bulk.source, bulk);
if (!VALID_INDEX_REGEX.test(index)) {
throw new Error(
`Index names can only consist of lowercase letters from a-z, "-", "_" and integer numbers.
Make sure to set the bulk "source" and "type" to names consisting of the characters above.`,
);
}
return index;
}
/**
* Should be called when a new bulk was created. Creates a new index and applies the mapping to the index
* @param bulk the bulk process that was created
*/
public async bulkCreated(bulk: Bulk): Promise<void> {
const index = await this.prepareBulkWrite(bulk);
// re-apply the index template before each new bulk operation
await putTemplate(this.client, bulk.type);
await this.client.indices.create({
index,
aliases: {
[INACTIVE_INDICES_ALIAS]: {},
},
});
Logger.info('Created index', index);
}
/**
* Should be called when a bulk process is expired. The index that was created with this bulk gets deleted
* @param bulk the bulk process that is expired
*/
public async bulkExpired(bulk: Bulk): Promise<void> {
const index = await this.prepareBulkWrite(bulk);
Logger.info('Bulk expired. Deleting index', index);
// don't delete indices that are in use already
if (bulk.state !== 'done') {
Logger.info('deleting obsolete index', index);
await this.client.indices.delete({index});
}
}
/**
* Should be called when a bulk process is updated (replaced by a newer bulk). This will replace the old
* index and publish all data that was indexed in the new instead
* @param bulk the new bulk process that should replace the old one with the same type and source
*/
public async bulkUpdated(bulk: Bulk): Promise<void> {
const index = await this.prepareBulkWrite(bulk);
await this.client.indices.refresh({index, allow_no_indices: false});
const activeIndices = await this.client.indices
.getAlias({
index: matchIndexByType(bulk.type, bulk.source),
name: ACTIVE_INDICES_ALIAS,
})
.then(it => Object.entries(it).map(([name]) => name))
.catch(() => [] as string[]);
await this.client.indices.updateAliases({
actions: [
{
add: {index, alias: ACTIVE_INDICES_ALIAS},
},
{
remove: {index, alias: INACTIVE_INDICES_ALIAS},
},
...activeIndices.map(index => ({
remove_index: {index},
})),
],
});
Logger.info(`Index for ${bulk.type} is now ${index}`);
Logger.info(`Also removed obsolete indices ${activeIndices}`);
}
/**
* Gets an SCThing from all indexed data
* @param uid uid of an SCThing
*/
public async get(uid: SCUuid): Promise<SCThings> {
const object = await this.getObject(uid);
if (object?._source === undefined) {
throw new TypeError('Item not found.');
}
return object._source;
}
/**
* Initialize the elasticsearch database (call all needed methods)
*/
public async init(retryOptions: Partial<RetryOptions<IndicesGetAliasResponse>> = {}): Promise<void> {
const monitoringConfiguration = this.config.internal.monitoring;
if (monitoringConfiguration !== undefined) {
if (this.mailQueue === undefined) {
throw new TypeError(
'Monitoring is defined, but MailQueue is undefined. A MailQueue is obligatory for monitoring.',
);
}
// read all watches and schedule searches on the client
await Monitoring.setUp(monitoringConfiguration, this.client, this.mailQueue);
}
return this.cleanupDeadIndices(retryOptions);
}
/**
* Add an item to an index
* @param object the SCThing to add to the index
* @param bulk the bulk process which item belongs to
*/
public async post(object: SCThings, bulk: Bulk): Promise<void> {
const index = await this.prepareBulkWrite(bulk);
const thing: SCThings & {creation_date: string} = {
...object,
creation_date: moment().format(),
};
const conflictingThing = await this.client.search({
query: {
term: {
'uid.raw': {
value: thing.uid,
},
},
},
// matches all indices but excludes indices of the same type
// https://www.elastic.co/guide/en/elasticsearch/reference/7.14/multi-index.html#multi-index
index: ['stapps_*', `-${matchIndexByType(bulk.type, bulk.source)}`],
});
if (conflictingThing.hits.hits.length > 0) {
throw new Error(
`UID conflict: ${thing.uid}. ${index} tried to post an object that already exists but which it won't replace.`,
);
}
const searchResponse = await this.client.create<SCThings>({
document: thing,
id: thing.uid,
index,
timeout: '90s',
});
if (searchResponse.result !== 'created') {
throw new Error(
`Object creation Error (${searchResponse.result}: Instance was: ${JSON.stringify(thing)}`,
);
}
}
/**
* Put (update) an existing item
* @param object SCThing to put
*/
public async put(object: SCThings): Promise<void> {
const item = await this.getObject(object.uid);
if (item !== undefined) {
await this.client.update({
body: {
doc: object,
},
id: object.uid,
index: item._index,
});
return;
}
throw new Error('You tried to PUT an non-existing object. PUT is only supported on existing objects.');
}
/**
* Search all indexed data
* @param parameters search query
*/
public async search(parameters: SCSearchQuery): Promise<SCSearchResponse> {
if (this.config.internal.database === undefined) {
throw new TypeError('Database is undefined. You have to configure the query build');
}
const esConfig: ElasticsearchConfig = {
name: this.config.internal.database.name as 'elasticsearch',
version: this.config.internal.database.version as string,
query: this.config.internal.database.query as
| ElasticsearchQueryDisMaxConfig
| ElasticsearchQueryQueryStringConfig
| undefined,
};
const response: SearchResponse<SCThings> = await this.client.search({
aggs: aggregations,
query: buildQuery(parameters, this.config, esConfig),
from: parameters.from,
index: ACTIVE_INDICES_ALIAS,
allow_no_indices: true,
size: parameters.size,
sort: parameters.sort === undefined ? undefined : buildSort(parameters.sort),
});
return {
data: response.hits.hits
.map(hit => {
// we only directly return the _source documents
// elasticsearch provides much more information, the user shouldn't see
return hit._source;
})
.filter(noUndefined),
facets:
response.aggregations === undefined
? []
: parseAggregations(response.aggregations as Record<AggregateName, AggregationsMultiTermsBucket>),
pagination: {
count: response.hits.hits.length,
offset: typeof parameters.from === 'number' ? parameters.from : 0,
total:
typeof response.hits.total === 'number' ? response.hits.total : response.hits.total?.value ?? 0,
},
stats: {
time: response.took,
},
};
}
async geo(): Promise<SupplementaryGeoJSON> {
const searchResponse = await this.client.search<Extract<SCThings, {geo: unknown}>>({
body: {
query: {
exists: {
field: 'geo',
},
},
},
from: 0,
allow_no_indices: true,
index: ACTIVE_INDICES_ALIAS,
size: 1,
});
return {
type: 'FeatureCollection',
features: searchResponse.hits.hits
.map(thing => {
return thing._source?.geo
? ({
id: Number(thing._source.identifiers?.['OSM']) || undefined,
type: 'Feature',
geometry: thing._source.geo.polygon ?? thing._source.geo.point,
properties: {
name: thing._source.name,
sameAs: thing._source.sameAs,
image: thing._source.image,
alternateNames: thing._source.alternateNames,
description: thing._source.description,
identifiers: thing._source.identifiers,
categories: thing._source.categories,
categorySpecificValues: thing._source.categorySpecificValues,
openingHours: thing._source.openingHours,
address: thing._source.address,
uid: thing._source.uid,
type: thing._source.type,
},
} satisfies Feature<Polygon | Point, SupplementaryGeoJSONThing>)
: undefined;
})
.filter(noUndefined),
};
}
}

View File

@@ -0,0 +1,147 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Client} from '@elastic/elasticsearch';
import {SearchRequest} from '@elastic/elasticsearch/lib/api/types.js';
import {
SCMonitoringConfiguration,
SCMonitoringLogAction,
SCMonitoringMailAction,
SCMonitoringMaximumLengthCondition,
SCMonitoringMinimumLengthCondition,
SCThings,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import cron from 'node-cron';
import {MailQueue} from '../../notification/mail-queue.js';
/**
* Check if the given condition fails on the given number of results and the condition
* @param condition condition
* @param total number of results
*/
function conditionFails(
condition: SCMonitoringMaximumLengthCondition | SCMonitoringMinimumLengthCondition,
total: number,
) {
if (condition.type === 'MaximumLength') {
return maxConditionFails(condition.length, total);
}
return minConditionFails(condition.length, total);
}
/**
* Check if the min condition fails
* @param minimumLength Minimal length allowed
* @param total Number of results
*/
function minConditionFails(minimumLength: number, total: number) {
return minimumLength > total;
}
/**
* Check if the max condition fails
* @param maximumLength Maximal length allowed
* @param total Number of results
*/
function maxConditionFails(maximumLength: number, total: number) {
return maximumLength < total;
}
/**
* Run all the given actions
* @param actions actions to perform
* @param watcherName name of watcher that wants to perform them
* @param triggerName name of trigger that triggered the watcher
* @param total total number of results of the query
* @param mailQueue mailQueue to execute mail actions
*/
function runActions(
actions: Array<SCMonitoringLogAction | SCMonitoringMailAction>,
watcherName: string,
triggerName: string,
total: number,
mailQueue: MailQueue,
) {
for (const action of actions) {
void (action.type === 'log'
? Logger.error(
action.prefix,
`Watcher '${watcherName}' failed. Watcher was triggered by '${triggerName}'`,
`Found ${total} hits instead`,
action.message,
)
: mailQueue.push({
subject: action.subject,
text: `Watcher '${watcherName}' failed. Watcher was triggered by '${triggerName}'
${action.message} Found ${total} hits instead`,
to: action.recipients,
}));
}
}
/**
* Set up the triggers for the configured watchers
* @param monitoringConfig configuration of the monitoring
* @param esClient elasticsearch client
* @param mailQueue mailQueue for mail actions
*/
export async function setUp(
monitoringConfig: SCMonitoringConfiguration,
esClient: Client,
mailQueue: MailQueue,
) {
// set up Watches
for (const watcher of monitoringConfig.watchers) {
// make a schedule for each trigger
for (const trigger of watcher.triggers) {
switch (trigger.executionTime) {
case 'hourly': {
trigger.executionTime = '5 * * * *';
break;
}
case 'daily': {
trigger.executionTime = '5 0 * * *';
break;
}
case 'weekly': {
trigger.executionTime = '5 0 * * 0';
break;
}
case 'monthly': {
trigger.executionTime = '5 0 1 * *';
}
}
cron.schedule(trigger.executionTime, async () => {
// execute watch (search->condition->action)
const result = await esClient.search<SCThings>(watcher.query as SearchRequest);
// check conditions
const total =
typeof result.hits.total === 'number' ? result.hits.total : result.hits.total?.value ?? -1;
for (const condition of watcher.conditions) {
if (conditionFails(condition, total)) {
runActions(watcher.actions, watcher.name, trigger.name, total, mailQueue);
}
}
});
}
}
Logger.log(`Scheduled ${monitoringConfig.watchers.length} watches`);
}

View File

@@ -0,0 +1,74 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslFunctionScoreContainer} from '@elastic/elasticsearch/lib/api/types.js';
import {SCBackendConfigurationSearchBoostingType} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
/**
* Creates boost functions for all type boost configurations
* @param boostingTypes Array of type boosting configurations
*/
export function buildFunctionsForBoostingTypes(
boostingTypes: SCBackendConfigurationSearchBoostingType[],
): QueryDslFunctionScoreContainer[] {
const functions: QueryDslFunctionScoreContainer[] = [];
for (const boostingForOneSCType of boostingTypes) {
const typeFilter: QueryDslSpecificQueryContainer<'term'> = {
term: {
type: boostingForOneSCType.type,
},
};
functions.push({
filter: typeFilter,
weight: boostingForOneSCType.factor,
});
if (boostingForOneSCType.fields !== undefined) {
const fields = boostingForOneSCType.fields;
for (const fieldName in boostingForOneSCType.fields) {
if (boostingForOneSCType.fields.hasOwnProperty(fieldName)) {
const boostingForOneField = fields[fieldName];
for (const value in boostingForOneField) {
if (boostingForOneField.hasOwnProperty(value)) {
const factor = boostingForOneField[value];
// build term filter
const termFilter: QueryDslSpecificQueryContainer<'term'> = {
term: {},
};
termFilter.term[`${fieldName}.raw`] = value;
functions.push({
filter: {
bool: {
must: [typeFilter, termFilter],
should: [],
},
},
weight: factor,
});
}
}
}
}
}
}
return functions;
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslFunctionScoreContainer} from '@elastic/elasticsearch/lib/api/types.js';
import {SCBackendConfigurationSearchBoostingContext, SCSearchContext} from '@openstapps/core';
import {buildFunctionsForBoostingTypes} from './boost-functions.js';
/**
* Builds scoring functions from boosting config
* @param boostings Backend boosting configuration for contexts and types
* @param context The context of the app from where the search was initiated
*/
export function buildScoringFunctions(
boostings: SCBackendConfigurationSearchBoostingContext,
context: SCSearchContext | undefined,
): QueryDslFunctionScoreContainer[] {
// default context
let functions = buildFunctionsForBoostingTypes(boostings['default' as SCSearchContext]);
if (context !== undefined && context !== 'default') {
// specific context provided, extend default context with additional boosts
functions = [...functions, ...buildFunctionsForBoostingTypes(boostings[context])];
}
return functions;
}

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslQueryContainer} from '@elastic/elasticsearch/lib/api/types.js';
import {SCSearchFilter} from '@openstapps/core';
import {buildBooleanFilter} from './filters/boolean.js';
import {buildAvailabilityFilter} from './filters/availability.js';
import {buildDateRangeFilter} from './filters/date-range.js';
import {buildDistanceFilter} from './filters/distance.js';
import {buildGeoFilter} from './filters/geo.js';
import {buildNumericRangeFilter} from './filters/numeric-range.js';
import {buildValueFilter} from './filters/value.js';
/**
* Converts Array of Filters to elasticsearch query-syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildFilter(filter: SCSearchFilter): QueryDslQueryContainer {
switch (filter.type) {
case 'value': {
return buildValueFilter(filter);
}
case 'availability': {
return buildAvailabilityFilter(filter);
}
case 'distance': {
return buildDistanceFilter(filter);
}
case 'boolean': {
return buildBooleanFilter(filter);
}
case 'numeric range': {
return buildNumericRangeFilter(filter);
}
case 'date range': {
return buildDateRangeFilter(filter);
}
case 'geo': {
return buildGeoFilter(filter);
}
}
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCSearchAvailabilityFilter} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
/**
* Converts an availability filter to elasticsearch syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildAvailabilityFilter(
filter: SCSearchAvailabilityFilter,
): QueryDslSpecificQueryContainer<'range'> {
const scope = filter.arguments.scope?.charAt(0) ?? 's';
const time = filter.arguments.time === undefined ? 'now' : `${filter.arguments.time}||`;
return {
range: {
[filter.arguments.field]: {
gte: `${time}/${scope}`,
lt: `${time}+1${scope}/${scope}`,
relation: 'intersects',
},
},
};
}

View File

@@ -0,0 +1,48 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslBoolQuery} from '@elastic/elasticsearch/lib/api/types.js';
import {SCSearchBooleanFilter} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
import {buildFilter} from '../filter.js';
/**
* Converts a boolean filter to elasticsearch syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildBooleanFilter(filter: SCSearchBooleanFilter): QueryDslSpecificQueryContainer<'bool'> {
const result: QueryDslBoolQuery = {
minimum_should_match: 0,
must: [],
must_not: [],
should: [],
};
if (filter.arguments.operation === 'and') {
result.must = filter.arguments.filters.map(it => buildFilter(it));
}
if (filter.arguments.operation === 'or') {
result.should = filter.arguments.filters.map(it => buildFilter(it));
result.minimum_should_match = 1;
}
if (filter.arguments.operation === 'not') {
result.must_not = filter.arguments.filters.map(it => buildFilter(it));
}
return {
bool: result,
};
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslDateRangeQuery} from '@elastic/elasticsearch/lib/api/types.js';
import {SCSearchDateRangeFilter} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
/**
* Converts a date range filter to elasticsearch syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildDateRangeFilter(
filter: SCSearchDateRangeFilter,
): QueryDslSpecificQueryContainer<'range'> {
const dateRangeObject: QueryDslDateRangeQuery = {
format: filter.arguments.format,
time_zone: filter.arguments.timeZone,
relation: filter.arguments.relation,
};
if (filter.arguments.bounds.lowerBound?.mode === 'exclusive') {
dateRangeObject.gt = filter.arguments.bounds.lowerBound.limit;
} else if (filter.arguments.bounds.lowerBound?.mode === 'inclusive') {
dateRangeObject.gte = filter.arguments.bounds.lowerBound.limit;
}
if (filter.arguments.bounds.upperBound?.mode === 'exclusive') {
dateRangeObject.lt = filter.arguments.bounds.upperBound.limit;
} else if (filter.arguments.bounds.upperBound?.mode === 'inclusive') {
dateRangeObject.lte = filter.arguments.bounds.upperBound.limit;
}
return {
range: {
[filter.arguments.field]: dateRangeObject,
},
};
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslGeoDistanceQuery} from '@elastic/elasticsearch/lib/api/types.js';
import {SCSearchDistanceFilter} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
/**
* Converts a distance filter to elasticsearch syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildDistanceFilter(
filter: SCSearchDistanceFilter,
): QueryDslSpecificQueryContainer<'geo_distance'> {
const geoObject: QueryDslGeoDistanceQuery = {
distance: `${filter.arguments.distance}m`,
[`${filter.arguments.field}.point.coordinates`]: {
lat: filter.arguments.position[1],
lon: filter.arguments.position[0],
},
};
return {
geo_distance: geoObject,
};
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCGeoFilter} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
/**
* Converts a geo filter to elasticsearch syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildGeoFilter(filter: SCGeoFilter): QueryDslSpecificQueryContainer<'bool'> {
return {
bool: {
should: [
{
geo_shape: {
ignore_unmapped: true,
[`${filter.arguments.field}.polygon`]: {
shape: filter.arguments.shape,
relation: filter.arguments.spatialRelation,
},
},
} satisfies QueryDslSpecificQueryContainer<'geo_shape'>,
{
geo_shape: {
ignore_unmapped: true,
[`${filter.arguments.field}.point`]: {
shape: filter.arguments.shape,
relation: filter.arguments.spatialRelation,
},
},
} satisfies QueryDslSpecificQueryContainer<'geo_shape'>,
],
},
};
}

Some files were not shown because too many files have changed in this diff Show More