Compare commits

...

555 Commits

Author SHA1 Message Date
e66ff65eaf content-type??? 2021-12-01 21:41:54 +01:00
b0363a4414 bump debian changelog 2021-12-01 21:37:13 +01:00
2bea8813af adjust install rules 2021-12-01 21:27:51 +01:00
4fbbee06f4 add webpack-polyfill-thing 2021-12-01 21:27:51 +01:00
dce2c86fc2 fixes 2021-12-01 21:27:51 +01:00
0582a26af9 another bump 2021-12-01 21:27:51 +01:00
d7df8f6978 bump debian changelog 2021-12-01 21:27:51 +01:00
f75ed771e7 Two minor fixes 2021-12-01 21:27:51 +01:00
28805c62f4 initial import of debian directory 2021-12-01 21:27:51 +01:00
ae81170396 allow external configuration 2021-12-01 21:27:50 +01:00
grégoire parant
4875a8fed9
Merge pull request #1610 from thecodingmachine/fixingQueryParamsRegisterUrl
Fixing "Query string parameters prevent WA from loading"
2021-11-30 17:45:07 +01:00
Gregoire Parant
b098b5f37d Fixing "Query string parameters prevent WA from loading"
Due to a regression, query string parameters added to the URL (like:

http://play.workadventure.localhost/_/global/maps.workadventure.localhost/starter/map.json?utm_source=sendinblue&utm_campaign=WA+-+2021+Christmap+map+launch&utm_medium=email#foo

) were causing a crash in WA.

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-30 17:29:53 +01:00
David Négrier
7b52c13fae
Merge pull request #1609 from thecodingmachine/fix_prod_docker_compose
Adding missing environment variable in docker-compose.prod.yml
2021-11-30 15:09:52 +01:00
David Négrier
0a6d9e88bc
Merge pull request #1608 from thecodingmachine/admin_url_not_compulsory
Making the ADMIN_URL parameter optionnal in front
2021-11-30 15:06:47 +01:00
David Négrier
8205775dc9 Adding missing environment variable in docker-compose.prod.yml
In the new version, a new FRONT_URL environment variable is now compulsory in the Pusher.
This is done to setup CORS security in the pusher.

This commit adds this environment variable in the sample docker-compose.prod.yml file.
2021-11-30 15:02:52 +01:00
David Négrier
d81ecb3199 Making the ADMIN_URL parameter optionnal in front
This parameter is only used in the SAAS version (and ideally, should disappear completely).
The warning message that uses the ADMIN_URL should originate from the admin itself.
2021-11-30 14:58:37 +01:00
David Négrier
986f826830
Merge pull request #1607 from thecodingmachine/fix_query_string
Fixing "Query string parameters prevent WA from loading"
2021-11-30 14:48:15 +01:00
David Négrier
06483fd586 Fixing "Query string parameters prevent WA from loading"
Due to a regression, query string parameters added to the URL (like:

http://play.workadventure.localhost/_/global/maps.workadventure.localhost/starter/map.json?utm_source=sendinblue&utm_campaign=WA+-+2021+Christmap+map+launch&utm_medium=email#foo

) were causing a crash in WA.

This commit fixes the issue (and adds a E2E test)
2021-11-30 14:34:43 +01:00
David Négrier
21e400a4a1
Merge pull request #1604 from thecodingmachine/develop
Deploy 2021-11-29
2021-11-29 18:43:57 +01:00
David Négrier
591467f1e3
Merge pull request #1603 from thecodingmachine/fix-black-screen
Cannot rezise main cowebsite when fullscreen is enable
2021-11-29 18:37:36 +01:00
Alexis Faizeau
812485f863 Cannot rezise main cowebsite when fullscreen is enable 2021-11-29 18:35:32 +01:00
David Négrier
233c3d1abe
Merge pull request #1598 from thecodingmachine/refactor_testcafe_tests
Refactoring test cafe tests
2021-11-28 16:52:24 +01:00
David Négrier
eac4bb2875 Refactoring test cafe tests
- Using "Roles" to log users
- Adding seemingly useless import statement but important for code completion
2021-11-28 16:43:12 +01:00
grégoire parant
5e11cccdf9
Merge pull request #1593 from thecodingmachine/develop
Next release 1.5.7
2021-11-25 11:44:36 +01:00
grégoire parant
923a134270
Merge pull request #1592 from thecodingmachine/fix-blank-cowebsite-bar
Resize cowebsites when main slot is loaded
2021-11-25 11:36:48 +01:00
Alexis Faizeau
a775a01d2a Resize cowebsites when main slot is loaded 2021-11-25 10:48:14 +01:00
David Négrier
3d29fcad7e
Merge pull request #1591 from thecodingmachine/develop
Next release 1.5.7
2021-11-24 22:57:20 +01:00
David Négrier
ecb72d0fd1 Adding FRONT_URL in pusher 2021-11-24 22:47:46 +01:00
grégoire parant
5bdb5d98a9
Merge pull request #1589 from thecodingmachine/fix-grab-cowebsite
Handle touch & mouse events on same time for cowebsite holder
2021-11-24 19:44:07 +01:00
grégoire parant
a59c07d8a3
Merge pull request #1590 from thecodingmachine/FixHashLocalStorage
Fix htag last map URL visited in localstorage
2021-11-24 19:43:48 +01:00
Gregoire Parant
060c844468 Fix htag in localstorage
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-24 19:24:43 +01:00
Alexis Faizeau
07c01d81bf Handle touch & mouse events on same time for cowebsite holder 2021-11-24 18:38:39 +01:00
David Négrier
69a26a0e55
Merge pull request #1588 from thecodingmachine/develop
Deploy 2021-11-24 2
2021-11-24 17:44:48 +01:00
David Négrier
445599416c Commenting waiting as this does not work for some reason 2021-11-24 17:24:11 +01:00
David Négrier
e8a78a0646
Merge pull request #1585 from thecodingmachine/HotFixCleanTokenParamUrl
Clean token auth of url params
2021-11-24 17:10:22 +01:00
David Négrier
94959e2e91 Merge branch 'develop' of github.com:thecodingmachine/workadventure into HotFixCleanTokenParamUrl
# Conflicts:
#	back/src/Services/Logger.ts
2021-11-24 17:03:29 +01:00
David Négrier
257162c451 Fixing prettier 2021-11-24 17:02:11 +01:00
David Négrier
cf6d461247
Merge pull request #1586 from thecodingmachine/revert-1552-improve_logging
Revert "Improving log messages"
2021-11-24 17:00:37 +01:00
David Négrier
d1122d75ec Fixing CI 2021-11-24 16:59:22 +01:00
David Négrier
d8c10ce10a CI fix 2021-11-24 16:32:37 +01:00
David Négrier
065404758b Making sure pusher and admin are started in CI 2021-11-24 16:22:26 +01:00
David Négrier
6e6cdc7bde
Revert "Improving log messages" 2021-11-24 16:20:07 +01:00
David Négrier
6c5f330b71
Merge pull request #1584 from thecodingmachine/fixes
Fixes
2021-11-24 15:55:33 +01:00
Gregoire Parant
b02c09fc7b Clean token auth of url params
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-24 15:49:45 +01:00
David Négrier
be3c1eea6f
Merge pull request #1583 from thecodingmachine/pretty_ci_front_fix
Fixing running of prettier check on the front
2021-11-24 15:46:18 +01:00
David Négrier
0fe2de090e
Merge pull request #1552 from thecodingmachine/improve_logging
Improving log messages
2021-11-24 15:43:24 +01:00
Alexis Faizeau
5c3036e18b Display a default skin on remote player entity 2021-11-24 15:43:01 +01:00
David Négrier
a1107bd20e Merge branch 'develop' of github.com:thecodingmachine/workadventure into improve_logging 2021-11-24 15:36:35 +01:00
David Négrier
07ba532c5e Prettier fixes on front 2021-11-24 15:31:17 +01:00
David Négrier
9b29fde1b3 Merge branch 'develop' of github.com:thecodingmachine/workadventure into pretty_ci_front_fix 2021-11-24 15:30:29 +01:00
David Négrier
dc58f16418
Merge pull request #1582 from thecodingmachine/end-to-end-tests
Making the loader resizable
2021-11-24 15:30:15 +01:00
David Négrier
2cbf5b56af Fixing linting 2021-11-24 15:29:12 +01:00
David Négrier
d3bd99b5ee Fixing running of prettier check on the front 2021-11-24 15:24:24 +01:00
David Négrier
7c6105d93a Making the loader resizable
This way, if the window is resized while loading, the loading bar will stay in the middle
2021-11-24 15:21:07 +01:00
Alexis Faizeau
24640d13bb Fix removing of co-website action trigger 2021-11-24 14:50:19 +01:00
David Négrier
ced08e69c9
Merge pull request #1581 from thecodingmachine/develop
Deploy 2021-12-24
2021-11-24 13:36:11 +01:00
David Négrier
bb435f3580
Merge pull request #1556 from thecodingmachine/iconserver
Add icon server on self host services
2021-11-24 12:24:57 +01:00
David Négrier
64e86411c5
Fixing env var for ICON_URL 2021-11-24 12:19:45 +01:00
David Négrier
2f632ae472
Merge pull request #1580 from thecodingmachine/fix-tab
Fix tab index on embedded iframes
2021-11-24 12:17:25 +01:00
David Négrier
f3e498439c
Merge pull request #1579 from thecodingmachine/end-to-end-tests
Adding End to end tests
2021-11-24 12:09:23 +01:00
David Négrier
dfad0a7b57 Removing useless wait 2021-11-24 12:03:48 +01:00
Alexis Faizeau
6a7385947d Fix authentication mandatory 2021-11-24 11:55:28 +01:00
David Négrier
7c2bf8700b Fixing test 2021-11-24 11:50:23 +01:00
David Négrier
780d92782c Adding a wait step for messages generated file to be available before starting pusher and back 2021-11-24 11:31:11 +01:00
David Négrier
168156b7ff Display error logs in failure 2021-11-24 11:11:38 +01:00
Alexis Faizeau
4ca763c028 Fix tab index on embbed iframes 2021-11-24 11:05:18 +01:00
David Négrier
550ffaf8a8 Merge branch 'develop' of github.com:thecodingmachine/workadventure into end-to-end-tests
# Conflicts:
#	front/src/Administration/AnalyticsClient.ts
2021-11-24 11:01:50 +01:00
David Négrier
8eb346de25 Displaying logs in case of error 2021-11-24 10:58:26 +01:00
David Négrier
7ef6431b64 More CI debug 2021-11-24 10:21:35 +01:00
David Négrier
806b97afab Refactoring Analytics to remove errors 2021-11-24 10:21:19 +01:00
grégoire parant
29c0b57f0c
Merge pull request #1573 from thecodingmachine/PostHogNewAction
Add new action post hog
2021-11-24 10:02:34 +01:00
David Négrier
02ed853399 Switching to actions/upload-artifact 2021-11-24 10:01:35 +01:00
David Négrier
c32a523923 CI fix 2021-11-24 09:29:50 +01:00
David Négrier
963486b663 Adding code to post screenshots of failed tests 2021-11-24 09:26:54 +01:00
David Négrier
a9ecbeec84 More CI fix 2021-11-24 09:12:24 +01:00
David Négrier
24249a1e74 Fixing CI 2021-11-24 08:57:49 +01:00
David Négrier
609af979ff Trying to speed up process 2021-11-23 19:01:56 +01:00
David Négrier
678fb71a7a More Github action fixes 2021-11-23 19:00:10 +01:00
David Négrier
303251b465 Github Actions fix attempt 2021-11-23 18:54:15 +01:00
David Négrier
0932e1de73 Taking exit code from the container 2021-11-23 18:44:00 +01:00
David Négrier
ab337409a1 Trying to fix issue with Github rights 2021-11-23 18:42:25 +01:00
David Négrier
3aec774cf3 Adding end-to-end test run in Github actions 2021-11-23 15:49:44 +01:00
David Négrier
a82f4e1813 Adding end-to-end tests
The first test is testing a tricky cache scenario with the back when testing variables.
The end-to-end package used is testcafe.
2021-11-23 15:43:34 +01:00
David Négrier
d8ecae64f0 Moving lastLoad initialization before we start loading to avoid loading several times 2021-11-23 09:34:39 +01:00
David Négrier
82a1a5fc1e Retry loading map on variable error
If the back is getting an error (because the user has no right to set a variable),
instead of failing directly, let's try to reload the map (maybe we have cached a wrong version of the map).
2021-11-22 18:43:56 +01:00
Gregoire Parant
ecc6321e17 Add new action post hog
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-18 11:39:56 +01:00
David Négrier
3487fa90e0
Merge pull request #1570 from thecodingmachine/fixZoom
Fix zoom
2021-11-17 16:19:26 +01:00
Alexis Faizeau
44c99fb0ef Fix zoom from cowebsite changes 2021-11-17 15:26:58 +01:00
grégoire parant
80c314bb9e
Merge pull request #1568 from thecodingmachine/master
Master release 1.6.0
2021-11-17 02:23:27 +01:00
grégoire parant
26fa566d85
Change 'access-control-allow-origin' to FRONT_URL env variavle (#1567)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-17 02:21:58 +01:00
grégoire parant
75ba9ddae8
HotFix Allow Origin header for CORS (#1566)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-16 18:38:18 +01:00
grégoire parant
f6b8677c2e
Merge pull request #1565 from thecodingmachine/HotFixCreditPage
Update design of credit page
2021-11-16 15:33:35 +01:00
Gregoire Parant
e5979998c5 Update design of credit page
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-16 15:28:54 +01:00
grégoire parant
7d73ca321d
Merge pull request #1564 from thecodingmachine/HotFixAuthenticationManager
Hot fix authentication manager
2021-11-16 15:17:46 +01:00
Gregoire Parant
0614fa7b47 HotFix copy link to share it
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-16 15:03:54 +01:00
Gregoire Parant
e54732be1b HotFix authentication manager to get data from back
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-16 14:46:32 +01:00
grégoire parant
6fafb727ba
Merge pull request #1563 from thecodingmachine/HotFixConnexionManager
HotFix connexion manager
2021-11-16 13:31:43 +01:00
Gregoire Parant
ba89d9b122 HotFix DISABLED_ROOM for env variable
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-16 13:18:40 +01:00
Gregoire Parant
8768374460 HotFix connexion manager
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-16 13:14:40 +01:00
grégoire parant
832c4ab300
Merge pull request #1562 from thecodingmachine/HotFixNewJwtTokenDecrypted
HotFix encrypted and decrypted error
2021-11-16 11:26:35 +01:00
Gregoire Parant
ec1cc92c8b replace console log by error
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-16 11:23:18 +01:00
Gregoire Parant
c1dc438138 HotFix encrypted and decrypted error
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-16 11:14:27 +01:00
David Négrier
78698ff17f
Merge pull request #1551 from thecodingmachine/deprecate-onenterzone
Updates API documentation (other than room) following onEnterZone & onLeaveZone deprecation
2021-11-15 17:37:05 +01:00
grégoire parant
9bdda210f5
Merge pull request #1561 from thecodingmachine/develop
Release v1.6.0
2021-11-15 16:51:48 +01:00
Gregoire Parant
d3964ae25b HotFix conflict merging 2021-11-15 16:36:10 +01:00
Gregoire Parant
20164417fb Change data by resCheckTokenAuth 2021-11-15 16:34:23 +01:00
David Négrier
4e042389c5 Merge branch 'master' of github.com:thecodingmachine/workadventure into develop
# Conflicts:
#	front/src/Connexion/ConnectionManager.ts
#	pusher/src/Controller/AuthenticateController.ts
#	pusher/src/Controller/IoSocketController.ts
#	pusher/src/Services/JWTTokenManager.ts
2021-11-15 16:30:45 +01:00
David Négrier
578fa21591
Merge pull request #1543 from thecodingmachine/fixAdminSocket
FIX: the admin sockets now uses a short live to check room authorization
2021-11-15 16:21:20 +01:00
David Négrier
8b6c16fd30
Merge pull request #1553 from thecodingmachine/openidAdminConnect
OpenId & Admin connect
2021-11-15 16:20:00 +01:00
Gregoire Parant
210a789aa4 Fix feedback @moufmouf 2021-11-15 15:58:08 +01:00
grégoire parant
a4b8a8422f
Merge pull request #1559 from thecodingmachine/openIdDisabledAnonymousSelfHost
Open id disabled anonymous self hosted
2021-11-15 15:29:55 +01:00
Gregoire Parant
bbc2ac2550 Update Connection manager to clean url history of navigator 2021-11-15 15:25:49 +01:00
Gregoire Parant
61b8d584af delete useless userIdentify 2021-11-15 14:34:23 +01:00
Gregoire Parant
16c08d86f2 Update hydraAccessToken to accessToken 2021-11-15 12:30:25 +01:00
Gregoire Parant
7d0b573d37 Define profile variable to show user connected
- OPID_PROFILE_SCREEN_PROVIDER is a variable to show profile of user connected. You can defined your own provider or use classic provider of WorkAdventure.
 - OpenIdProfileController with url "/profile" get user data and create simple html to show user informations. This url will be called with params 'accessToken'
 - If you define your custom profile url, it will be called with param 'accessToken'.

accessToken is token to access at user informations in your OpenId provider.
2021-11-12 20:48:26 +01:00
Gregoire Parant
15cdc54ec3 Add evnvironment Enum for OPID_LOGIN_SCREEN_PROVIDER variable 2021-11-12 19:36:37 +01:00
Gregoire Parant
f905426ebd Add new variable login provider to connect user 2021-11-12 19:36:13 +01:00
Gregoire Parant
24a1f324c7 Add OpenId login url and provider to login user 2021-11-12 19:35:34 +01:00
Gregoire Parant
e073d70098 Merge branch 'develop' into openidAdminConnect
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-12 17:01:26 +01:00
Gregoire Parant
ca74f92051 Pull open id admin from @GRP 2021-11-12 16:59:34 +01:00
Gregoire Parant
c21ea8803a Add OPID redirect url
Is important to defined redirect url to be connected with openid provider
2021-11-12 16:52:44 +01:00
Gregoire Parant
213af0cfa3 Changes ANONYMOUS dynamic variable 2021-11-12 16:47:39 +01:00
Gregoire Parant
fa233e13c6 Changes ANONYMOUS variable
This variable will be use to mandatory login user in self hosted
2021-11-12 16:43:37 +01:00
grégoire parant
c1788424b5
Merge pull request #1533 from Lurkars/oidcRequired
use OIDC without admin api, option to disable anonymous login

Thanks for your work @Lurkars. I will take your changes and apply some update. When I will finish, I will  share you the result and requirement for mounting correct openid connection with puhser and without ADMIN part 💪  🚀
2021-11-12 16:39:15 +01:00
Gregoire Parant
461dee776c Update css 2021-11-12 16:22:37 +01:00
Gregoire Parant
49f68451ae Update profile menu and change UX
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-12 15:31:49 +01:00
Gregoire Parant
d3f120f2bb Update to have token when user is connected
- Update menu design

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-12 12:13:44 +01:00
Gregoire Parant
1db22d82af Set state in local storage when openid provider redirect on jwt with token value
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-10 18:26:50 +01:00
Alexis Faizeau
2513f8b3d6 Add icon server on production docker services 2021-11-10 18:22:03 +01:00
Alexis Faizeau
eac5e8adc8 Add icon server on single domain services 2021-11-10 18:20:30 +01:00
David Négrier
ee4ec7ba97
Merge pull request #1555 from thecodingmachine/iconserver
Add iconserver in services
2021-11-10 18:12:47 +01:00
David Négrier
0f6ecfc311
Merge pull request #1554 from thecodingmachine/twemojiImplementation
Implement Twemoji on emote
2021-11-10 18:11:51 +01:00
Alexis Faizeau
624593e425 Implement twemoji on emote 2021-11-10 16:55:20 +01:00
Alexis Faizeau
1c48feeb61 Add iconserver in services 2021-11-10 16:46:13 +01:00
Gregoire Parant
7406b62093 Add jwt token if is defined un URL
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-09 00:38:32 +01:00
Gregoire Parant
89baafba2f Rollback openid connect to use code and nonce
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-09 00:08:01 +01:00
Gregoire Parant
4c028bfcb3 OpenId from Admin connect
- Create admin environment for redirect uri of openID
 - Add log out redirect when user click on log out button

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-11-08 19:27:01 +01:00
Alexis Faizeau
dd89f12c2e Implement logger on pusher 2021-11-08 19:05:25 +01:00
Alexis Faizeau
6a195be814 Implement logger on back 2021-11-08 17:44:57 +01:00
Alexis Faizeau
c573e9fbaf Implement no floating promises on eslint rules 2021-11-08 14:45:25 +01:00
David Négrier
6c6a7e6fe4 Improving log messages
Signed-off-by: David Négrier <d.negrier@thecodingmachine.com>
2021-11-08 14:30:54 +01:00
Bénédicte Q
b9bf27983f
Update maps/tests/TriggerMessageApi/script.js
Co-authored-by: David Négrier <d.negrier@thecodingmachine.com>
2021-11-08 10:51:18 +01:00
Bénédicte Q
7da975749c
Update maps/tests/TriggerMessageApi/script.js
Co-authored-by: David Négrier <d.negrier@thecodingmachine.com>
2021-11-08 10:51:08 +01:00
Benedicte Quimbert
854d8775d5 Edit documentation exemples 2021-11-03 19:24:24 +01:00
Benedicte Quimbert
f20c39f6a4 wip 2021-11-03 16:51:33 +01:00
David Négrier
603045bcad
Merge pull request #1549 from thecodingmachine/property-index
Create GameMapProperties index
2021-11-03 00:05:27 +01:00
Alexis Faizeau
5a3d510f05 Create GameMapProperties index 2021-11-02 10:52:25 +01:00
Alexis Faizeau
ec3120cf8f
Merge pull request #1546 from thecodingmachine/fix-room-api
Fix change layer api functions
2021-10-29 23:37:54 +02:00
Alexis Faizeau
dbd6ce5bdc Fix player movement tests 2021-10-29 23:30:02 +02:00
Alexis Faizeau
d4470568ec Fix change layer api functions 2021-10-29 23:16:36 +02:00
David Négrier
145117dc58
Merge pull request #1544 from thecodingmachine/property-layer-management
Implement on enters/leaves layer events
2021-10-29 19:46:42 +02:00
Alexis Faizeau
e1d454d834 Add enters/leaves layer with api test map 2021-10-29 19:45:03 +02:00
Alexis Faizeau
db82ae4b88 Replace the enter/leave zone by enter/leave layer on doc 2021-10-29 19:45:03 +02:00
Alexis Faizeau
f4df12e5ff Cowebsite properties manage by layer and not by property index 2021-10-29 19:45:03 +02:00
Alexis Faizeau
934e24f837 Implement on enter/leave layer events 2021-10-29 19:44:58 +02:00
Alexis Faizeau
0b08d9251e Fix link of cowebsite propeerty test map fix 2021-10-29 15:46:05 +02:00
David Négrier
60a82c5eb2
Merge pull request #1516 from thecodingmachine/iframeManager
Display multi co-websites
2021-10-29 15:33:56 +02:00
Alexis Faizeau
e216b6caf4 Handle landscape mobile with cowebsite 2021-10-29 15:23:09 +02:00
Kharhamel
6c78717d97 FIX: the admin sockets now uses a short live to check room authorization 2021-10-28 14:53:07 +02:00
Alexis Faizeau
68c626088d Add co-website icon on mobile landscape 2021-10-28 11:31:28 +02:00
Alexis Faizeau
b03e7ec8f6 Add how to have a jitsi & cowebsite on doc 2021-10-28 10:00:12 +02:00
grégoire parant
4d3bce0266
Merge pull request #1542 from thecodingmachine/HotFixLastRoomDefault
HotFix set last room for first connexion
2021-10-27 17:07:23 +02:00
Gregoire Parant
6c0d8942e5 HotFix set last room for first connexion
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-27 16:48:33 +02:00
grégoire parant
7f677cf5b9
Merge pull request #1541 from thecodingmachine/HotFixOnChatMessageEvent
Hot fix on chat message event
2021-10-27 14:46:15 +02:00
grégoire parant
1f3b712097
Merge pull request #1540 from thecodingmachine/TypoChatMessage
Typo Chat message Store
2021-10-27 14:29:53 +02:00
Gregoire Parant
f8ae189cee HotFix handler message in chat store
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-27 14:29:39 +02:00
Alexis Faizeau
c886feca79 Add max iframe count on doc 2021-10-27 12:12:42 +02:00
Gregoire Parant
385ea1360e Type Chat message Store
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-27 10:02:47 +02:00
Alexis Faizeau
820767db3d Add multi co website to the changelog 2021-10-27 09:47:15 +02:00
Kharhamel
65c472d936
Merge pull request #1539 from thecodingmachine/hotifxnodeApiToken
HOTFIX: now uses a specific secret token for the admin sockets
2021-10-26 15:47:31 +02:00
Kharhamel
d809682c08 HOTFIX: now uses a specific secret token for the admin sockets 2021-10-26 14:58:34 +02:00
Alexis Faizeau
ab1a9b358a Change favicon snatcher http to https 2021-10-26 14:16:00 +02:00
Alexis Faizeau
4538f6d915 Update cowebsite script map 2021-10-25 19:00:26 +02:00
Alexis Faizeau
fb7fe0dc0a Rename cowebsite API functions 2021-10-25 19:00:26 +02:00
Alexis Faizeau
fbff7491df Zoom x 2 thumbnail cowebsite 2021-10-25 19:00:26 +02:00
Alexis Faizeau
f84c4b3276 Refacto insert cowebsite 2021-10-25 19:00:26 +02:00
Gregoire Parant
251d14a470 Add new test for cowebsite and jitsi room
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-25 19:00:26 +02:00
Alexis Faizeau
5eb6c05189 Add a Jitsi room on co-website api test map 2021-10-25 19:00:26 +02:00
Alexis Faizeau
b81b1ff68b Implement new cowbesite system on API 2021-10-25 19:00:26 +02:00
Alexis Faizeau
c29c4bfaa4 Fix onChatMessage subscriber 2021-10-25 19:00:26 +02:00
Alexis Faizeau
da8cc661b7 Implement the new co website system 2021-10-25 19:00:26 +02:00
Alexis Faizeau
1ee0b28f66 Fix co website closing on exit zone 2021-10-25 19:00:26 +02:00
David Négrier
1efcbb4529
Merge pull request #1521 from thecodingmachine/change-player-depth
Change character depth to 0
2021-10-25 15:11:09 +02:00
Lurkars
78e0d1bead fix linter, cleanup 2021-10-21 16:53:24 +02:00
Lurkars
6832fe4990 use OIDC without admin api, option to disable anonymous login 2021-10-21 16:28:57 +02:00
David Négrier
14a31d81ea
Merge pull request #1529 from Floupp/fix/readme-typo
Change pusher host in readme from .testing to .localhost
2021-10-20 09:20:08 +02:00
Mathieu Reynaud
ee432341da Change pusher host from testing to localhost 2021-10-19 20:07:23 +02:00
David Négrier
b6d571500e
Merge pull request #1528 from thecodingmachine/api_chat_multiple_virtual_users
When there are many virtual users (generated by chat), only the name of a first user is displayed.
2021-10-18 15:02:21 +02:00
David Négrier
4a40c08578 Fixing chat message attributed to wrong user
When a new user entered a chat message, the message was still attributed to the last user who wrote.
2021-10-18 14:58:29 +02:00
David Négrier
4abf7208ff
Merge pull request #1524 from thecodingmachine/player-direction
Display the real sprite direction on character loaded
2021-10-18 14:37:01 +02:00
David Négrier
f8b506144d When there are many virtual users (generated by chat), only the name of a first user is displayed.
Adding a test case for this.
2021-10-18 14:34:47 +02:00
David Négrier
bbd6613558
Merge pull request #1527 from thecodingmachine/upgrade_type_guard
Upgrading @workadventure/tiled-map-type-guard to 1.0.3
2021-10-18 14:24:11 +02:00
David Négrier
b201165b81 Upgrading @workadventure/tiled-map-type-guard to 1.0.3
This will fix the issue with maps containing group layers.
2021-10-18 14:11:24 +02:00
Alexis Faizeau
c13839ce8d Display the real sprite direction on character loaded 2021-10-15 16:35:42 +02:00
David Négrier
958fc9eee8
Merge pull request #1523 from thecodingmachine/fix_back_forth_localhost
Fixing exit problem on localhost maps
2021-10-15 16:27:32 +02:00
David Négrier
70d5c7f658 Triggering onload even if file already loaded for files loaded via http:// 2021-10-15 16:14:17 +02:00
grégoire parant
79e83d3782
Merge pull request #1522 from thecodingmachine/HotFixContactPage
Fix share link for website
2021-10-15 15:44:44 +02:00
Gregoire Parant
a8d6024352 Fix share link for website
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-15 15:25:23 +02:00
David Négrier
8b76e5bc36 Adding test case for exits 2021-10-15 15:24:34 +02:00
David Négrier
79a5916057 Removing dead code 2021-10-15 15:08:06 +02:00
grégoire parant
a7699edd6d
Merge pull request #1520 from thecodingmachine/HotFixUserData
HotFix user data connection
2021-10-14 17:37:54 +02:00
Gregoire Parant
497a7c3467 Fix typo emails => email
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-14 17:33:53 +02:00
Alexis Faizeau
cdf4023928 Change character depth to 0 2021-10-14 17:32:27 +02:00
Gregoire Parant
b7692dd355 Fix local user useless
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-14 17:25:36 +02:00
Gregoire Parant
f87422187f HotFix user data connection
Create local store for user connected in SSO

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-14 17:22:43 +02:00
grégoire parant
ee906dc52b
Merge pull request #1517 from thecodingmachine/develop
Release 1.5.5
2021-10-12 20:52:42 +02:00
Kharhamel
524a6c2c4d
Merge pull request #1497 from thecodingmachine/betterAnalytics
FEATURE: analytics client now scrape user email and room instance
2021-10-12 13:52:14 +02:00
Kharhamel
726f52976d FEATURE: analytics client now scrape user email and room group 2021-10-11 16:30:01 +02:00
Kharhamel
d0c0f3e7fc
Merge pull request #1513 from thecodingmachine/editChangelog
FIX: edited changelog
2021-10-11 11:53:25 +02:00
Kharhamel
57bfc1001f FIX: edited changelog 2021-10-11 11:34:10 +02:00
David Négrier
3c9332f9c1
Merge pull request #1512 from thecodingmachine/updatePosthog
FIX: updated posthog client version and fixed a bug with its toolbar
2021-10-08 14:41:08 +02:00
Kharhamel
72583a58d9
Merge pull request #1509 from thecodingmachine/fixGroupCreation
FIX: if a conversion group move to another user, this user will be added to the group
2021-10-08 14:25:21 +02:00
Kharhamel
59fa68e063 FIX: updated posthog client version and fixed a bug with its toolbar 2021-10-08 11:55:27 +02:00
Kharhamel
5255847452 FIX: if a conversion group move to another user, this user will be added to the group 2021-10-08 11:02:58 +02:00
Kharhamel
60eefbce94
Merge pull request #1508 from thecodingmachine/fixSilentZones
FIX: being in a silent zone new forces mediaConstraints to false
2021-10-07 14:50:40 +02:00
Kharhamel
9dd3e8ff85 FIX: being in a silent zone new forces mediaConstraints to false 2021-10-06 17:59:20 +02:00
grégoire parant
900c53f499
Update icon message and profile (#1504)
- Add new icon profil pixel
 - Add new icon message pixel
 - Migrate message icon in svelt menu

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-06 15:36:42 +02:00
Gregoire Parant
2f2aa55fd7 Merge branch 'master' into develop
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-05 23:49:05 +02:00
grégoire parant
358d9a79d3
Add condition Hash for start layer (#1506)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-05 23:34:18 +02:00
grégoire parant
908b78fdda
HotFix mandatory login with ADMIN openid connexion (#1503)
Before anonymous connexion, we must get the details of the map and permit to check mandatory connexion and redirect user to login page.

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-05 18:59:26 +02:00
grégoire parant
b33e271d2e
Merge pull request #1499 from thecodingmachine/develop
Release 1.5.3
2021-10-04 20:54:13 +02:00
Gregoire Parant
2db446889b Create emoji test
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-04 20:39:01 +02:00
Kharhamel
a265290e41
Merge pull request #1501 from thecodingmachine/fixEmoteMenu
FIX: fixes for the emnote menu
2021-10-04 15:12:53 +02:00
Kharhamel
02108ce977 FIX: fixes for the emnote menu 2021-10-04 14:43:19 +02:00
Kharhamel
7bb0175648
FIX: we now make sure to completly disable the old stream before attempting to create a new one (#1493)
* FIX: we now make sure to completly disable the old stream before attempting to create a new one

* FIX: disable audio optimization on chrome

* always reemit the stream on chrome

* Try fix on stop current stream

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Try fix on stop current stream

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Push fix microphone

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

Co-authored-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-10-02 23:58:33 +02:00
Valdo
f6fcb37d91
Updated README (logo, map, wording) (#1485)
Co-authored-by: Valdo Romao <v.romao@thecodingmachine.com>
2021-10-02 15:59:45 +02:00
Alexis Faizeau
8c3b708981
Remove audio manager range volume control by keys (#1489)
Co-authored-by: Alexis Faizeau <a.faizeau@workadventu.re>
2021-10-02 15:55:54 +02:00
David Négrier
a7424b9329
Merge pull request #1496 from thecodingmachine/fixCD
FIX: removed admin url from deeployer and changed starter map
2021-09-30 11:54:51 +02:00
Kharhamel
2e34420605 FIX: removed admin url from deeployer on develop and master and changed starter map 2021-09-30 11:51:41 +02:00
grégoire parant
1e69bb0f49
Manage redirect URL from admin and save in hydra via pusher (#1492)
Add redirect parameter url to connect user directly on private openId application

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-30 11:16:25 +02:00
David Négrier
2b5211d098
Merge pull request #1486 from thecodingmachine/fix-links
Fixing links in the documentation
2021-09-27 15:41:23 +02:00
David Négrier
7d758af900 Fixing .md link 2021-09-27 12:01:40 +02:00
David Négrier
ad5489c102 Adding edit URLs to allow people to directly propose changes 2021-09-27 11:32:57 +02:00
David Négrier
b8996d5abb Fixing links in the documentation 2021-09-27 11:13:35 +02:00
Kharhamel
8d1943d6e9
Merge pull request #1484 from thecodingmachine/fixExitUrl
FIX: initPositionFromLayerName will now prioritize its target layer rather than the start layer
2021-09-24 12:00:23 +02:00
Kharhamel
ce26294250 FIX: initPositionFromLayerName will now prioritize its target layer rather than the start layer 2021-09-24 11:54:19 +02:00
Kharhamel
4650f4e8cf
Merge pull request #1480 from ValdoTR/maps
Removed old maps and add starter-kit map
2021-09-24 10:58:31 +02:00
Valdo Romao
b44c219441 Added default map path 2021-09-24 09:53:02 +01:00
Kharhamel
bf0c333266
Merge pull request #1463 from thecodingmachine/dependabot/npm_and_yarn/front/axios-0.21.2
Bump axios from 0.21.1 to 0.21.2 in /front
2021-09-23 18:36:51 +02:00
Kharhamel
ff5c2c5e58
Merge pull request #1464 from thecodingmachine/dependabot/npm_and_yarn/back/axios-0.21.2
Bump axios from 0.21.1 to 0.21.2 in /back
2021-09-23 18:36:45 +02:00
Kharhamel
d2bf7b8fde
Merge pull request #1465 from thecodingmachine/dependabot/npm_and_yarn/pusher/axios-0.21.2
Bump axios from 0.21.1 to 0.21.2 in /pusher
2021-09-23 18:36:34 +02:00
Valdo Romao
e8ba9e9785 Removed old maps and add starter-kit map 2021-09-23 12:29:14 +01:00
GRL78
3f1c5246f8
TO MERGE : Contact page from Admin or Environment Variable (#1401)
* Contact page from Admin or Environment Variable

* Get contact page from admin by pusher

* Changes requested

* Modify contactPageStore management

* documentation environment variables

Co-authored-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-21 20:24:53 +02:00
Kharhamel
ccea46fe2b
Merge pull request #1476 from thecodingmachine/fixCustomWoka
FIX: added another catch case for default model
2021-09-21 17:45:31 +02:00
grégoire parant
d033b78c58
Update Youtube link markdown (#1477)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-21 16:07:57 +02:00
Kharhamel
8b099e5725 FIX: added another catch case for default model 2021-09-21 14:29:15 +02:00
Gregoire Parant
3f954d273c Merge branch 'master' into develop
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-21 02:37:56 +02:00
grégoire parant
e77d4dda84
Update favicon and logo to deploy new design (#1475)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-20 22:42:15 +02:00
Kharhamel
2fbf8f0a10
Merge pull request #1474 from Lurkars/twemojiEmoteMenuSvelte
fix wrong font name
2021-09-20 15:54:31 +02:00
Lurkars
781c69387c fix wrong font name 2021-09-20 15:22:54 +02:00
dependabot[bot]
8ecef9eadc
Bump axios from 0.21.1 to 0.21.2 in /front
Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-20 12:34:07 +00:00
dependabot[bot]
16d45c921f
Bump axios from 0.21.1 to 0.21.2 in /back
Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-20 12:34:04 +00:00
dependabot[bot]
62c163f11e
Bump axios from 0.21.1 to 0.21.2 in /pusher
Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-20 12:34:04 +00:00
Kharhamel
9b13a6780c
Merge pull request #1437 from Lurkars/twemojiEmoteMenuSvelte
Twemoji emote menu svelte (upgrade of #1301)
2021-09-20 14:33:16 +02:00
Gregoire Parant
f247ec44f1 Merge branch 'master' into develop
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-18 12:20:02 +02:00
grégoire parant
8c96b514d4
HotFix to test hydra connexion (#1471) 2021-09-18 11:35:29 +02:00
Lurkars
63c4eeb4c7 Merge branch 'twemojiEmoteMenuSvelte' of github.com:thecodingmachine/workadventure into twemojiEmoteMenuSvelte 2021-09-16 18:20:42 +02:00
Lurkars
7922de10ff Merge branch 'develop' of github.com:thecodingmachine/workadventure into twemojiEmoteMenuSvelte 2021-09-16 18:12:51 +02:00
grégoire parant
553902e52a
Add log for Oauth login connexion (#1468)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-16 17:57:14 +02:00
David Négrier
9f39cf154a
Merge pull request #1467 from thecodingmachine/master
Backporting changes to develop
2021-09-16 17:49:05 +02:00
David Négrier
8d0f53ada0 Merge branch 'develop' of github.com:thecodingmachine/workadventure 2021-09-16 17:04:43 +02:00
David Négrier
bc45c93932 Fixing Posthog env var 2021-09-16 17:03:49 +02:00
David Négrier
7ef27a0040 Updating Changelog 2021-09-16 16:46:48 +02:00
David Négrier
4728c3a59a Merge branch 'master' of github.com:thecodingmachine/workadventure 2021-09-16 16:46:27 +02:00
David Négrier
950ffaafda
Merge pull request #1466 from thecodingmachine/develop
Deploy 2021-09-16
2021-09-16 16:22:50 +02:00
Kharhamel
483191c521
Merge pull request #1458 from thecodingmachine/posthog
FEATURE: added posthog as new analytics tool
2021-09-16 15:24:27 +02:00
Kharhamel
2e111aa13a FEATURE: added posthog as new analytics tool 2021-09-16 15:16:10 +02:00
David Négrier
a3eebb05ba Fixing type of openWebsiteWidth in doc 2021-09-16 09:58:42 +02:00
David Négrier
74b5e2797f
Merge pull request #1459 from thecodingmachine/turn_off_audio_on_exit
Turn off audio on exit
2021-09-15 15:35:37 +02:00
David Négrier
801ec3bf4c Turn off audio on exit
If an exit zone is overlapping an audio zone, when exiting, the audio is stopped.
We do this by actually triggering the fact that a user should "leave" all active zones when exiting.
2021-09-15 15:28:55 +02:00
David Négrier
8a6419a3b7
Merge pull request #1457 from thecodingmachine/fix_yarn_not_working
fix yarn install not working
2021-09-15 11:50:50 +02:00
David Négrier
bb8583872b Fixing messages generation in Front container 2021-09-15 11:32:32 +02:00
David Négrier
0c374aba48
Merge pull request #1456 from thecodingmachine/jitsi-silent
Fixing silent zone not respected when exiting Jitsi
2021-09-15 11:27:50 +02:00
David Négrier
d26325d8dc Fixing silent zone not respected when exiting Jitsi
Now, when a silent zone is adjacent to a Jitsi, it is enforced, even after leaving the Jitsi zone
2021-09-15 11:16:23 +02:00
TabascoEye
5a855fb7e4
fix yarn install not working
problem for virtually all people trying self-hosting according to #1433, #738 and likely more
2021-09-15 10:43:01 +02:00
GRL78
680e538fd6
save button in settings close menu (#1451) 2021-09-14 16:43:00 +02:00
David Négrier
9006283c90
Merge pull request #1452 from Lurkars/audioPlayerImprovements
some fixes on the audio player controls
2021-09-14 14:41:40 +02:00
David Négrier
6ed4857b1d
Merge pull request #1450 from thecodingmachine/fixScrollChat
Chat scroll to bottom when it open
2021-09-14 14:39:42 +02:00
Lurkars
8c780f07c6 fix font 2021-09-14 11:41:51 +02:00
Lurkars
f1bd92fa52 use included twemoji mozilla font instead of loading external 2021-09-14 11:39:36 +02:00
GRL
ff3e844b68 chat scroll to bottom when it open 2021-09-14 09:36:49 +02:00
Lurkars
34d81b0e6c fix behaviour 2021-09-14 08:55:15 +02:00
Lurkars
91bc524e06 disable controls 2021-09-14 08:50:43 +02:00
Lurkars
beed50874b fix emotemenu on open jitsi rooms 2021-09-13 19:16:47 +02:00
David Négrier
01bd36ca3f Removing test in double 2021-09-13 18:58:00 +02:00
David Négrier
7cf9f8ff10
Merge pull request #1447 from thecodingmachine/fix_api_chat
Fixing broken chat API
2021-09-13 15:57:37 +02:00
David Négrier
f92b728a8e Fixing broken chat API 2021-09-13 14:50:02 +02:00
David Négrier
fae57e36e3
Merge pull request #1446 from thecodingmachine/develop
Deploy 2021-09-13
2021-09-13 11:27:22 +02:00
David Négrier
8b4764912a Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-09-13 10:47:02 +02:00
David Négrier
e3896bf5e7 Adding features to CHANGELOG 2021-09-13 10:45:32 +02:00
David Négrier
3be328af35
Merge pull request #1445 from thecodingmachine/fix-menu-pointer-too-large
Fixing broken sound controls
2021-09-13 10:38:42 +02:00
David Négrier
fbddd54059 Adding a test case for audio 2021-09-13 10:22:55 +02:00
David Négrier
f0b83663f6 Fixing broken sound controls
Because of the rework of the menu, the clickable zone for the menu was extending at the complete top of the screen, which caused interactive items at the top of the screen (like sound controls) to be broken.

This commit fixes this.
2021-09-13 10:06:08 +02:00
David Négrier
bfd418d8b5
Merge pull request #1436 from thecodingmachine/better_test_page
Adding more tests
2021-09-13 09:25:58 +02:00
David Négrier
62227bb15f
Merge pull request #1439 from thecodingmachine/increse_ilde_timeout
Fix disconnects after 5 minutes in Chrome
2021-09-13 09:25:35 +02:00
David Négrier
aa462258ff
Merge pull request #1441 from tabascoeye/patch-1
add the possibilities of "onaction" and message to  new "openTab" pro…
2021-09-13 09:20:56 +02:00
Lurkars
59c22c8dfc svelte check fix 2021-09-12 11:29:53 +02:00
Lurkars
e5b3088b5e Merge branch 'develop' of github.com:thecodingmachine/workadventure into twemojiEmoteMenuSvelte 2021-09-12 11:22:46 +02:00
Lurkars
3080e1fdc7 improvements on svelte store + handling 2021-09-12 11:11:52 +02:00
TabascoEye
94517c0f4b
add the possibilities of "onaction" and message to new "openTab" property 2021-09-10 23:17:04 +02:00
David Négrier
05646718a9 Fix disconnects after 5 minutes in Chrome
This commit increases idle timeout for websocket connection

Issue: after 5 minutes of inactive tab (hidden tab) in Chrome, WorkAdventure was disconnected.

I believe Google was going in "intensive throttling" mode (see  https://developer.chrome.com/blog/timer-throttling-in-chrome-88/#intensive-throttling)
This means setTimeouts are run only once per minute.

And I believe the "keep alive" must be implemented with a "setTimeout" (one way or another even if I can't find a trace of this in the code). This would mean that the browser would send keep alive requests only once per minute.
But the pusher is configured to shut the connection after 30 seconds of idle activity.

Therefore, the pusher disconnects inactive Chrome tabs. By raising the Pusher idle timer to 2 minutes, we give a chance to Chrome to send a ping to the server in time (since Chrome won't send more than 1 ping per minute).
2021-09-10 18:30:36 +02:00
Lurkars
e553392d9d move twemoji menu to svelte 2021-09-10 16:57:21 +02:00
Kharhamel
352b05b1ea
Merge pull request #1431 from thecodingmachine/fixVideoHeight
FIX: the video element should not have a bigger height than its container
2021-09-10 16:54:47 +02:00
David Négrier
7cabf64b11 Adding more tests 2021-09-10 16:40:09 +02:00
Kharhamel
d071f5fa90 FIX: the video element should not have a bigger height than its container 2021-09-10 16:04:15 +02:00
Lurkars
b50253a529 Merge branch 'develop' of github.com:thecodingmachine/workadventure into twemojiEmoteMenuSvelte 2021-09-10 15:10:11 +02:00
Lurkars
d23820227e Merge branch 'twemojiEmoteMenu' of github.com:Lurkars/workadventure into twemojiEmoteMenuSvelte 2021-09-10 14:58:49 +02:00
Kharhamel
7471da6c26
Merge pull request #1434 from tabascoeye/patch-1
explain new property jitsiWidth
2021-09-10 14:09:28 +02:00
TabascoEye
9f310383ba
explain new property jitsiWidth 2021-09-09 22:58:30 +02:00
David Négrier
5626e45f4a
Merge pull request #1430 from thecodingmachine/better_test_page
Improving design of the test page
2021-09-09 14:07:19 +02:00
David Négrier
e715ca42c4 Improving design of the test page 2021-09-09 11:35:17 +02:00
grégoire parant
1e6433a65e
Merge pull request #1429 from thecodingmachine/develop
Next release v1.5.0
2021-09-09 11:27:05 +02:00
David Négrier
c07d853588
Merge pull request #1428 from thecodingmachine/more_test
Adding a new test case to check video display from mobile
2021-09-09 11:15:36 +02:00
David Négrier
24cd17ac51 Adding a new test case to check video display on mobile 2021-09-09 10:41:17 +02:00
David Négrier
7432f15e27
Merge pull request #1427 from Lurkars/fixFlattenGroupLayers
Fix flatten group layers
2021-09-09 10:20:05 +02:00
Lurkars
0530735547 .gitignore to upstream 2021-09-09 08:52:24 +02:00
Lurkars
8dd404801a .gitignore to upstream 2021-09-09 08:51:20 +02:00
Lurkars
30b22d87a6 .gitignore to upstream 2021-09-09 08:50:57 +02:00
Lurkars
36df585a5e fix wrong layer names after re-enter room 2021-09-09 08:47:38 +02:00
Lurkars
1db11a45e3 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-09-09 08:37:28 +02:00
Gregoire Parant
2a0d3759b1 Merge branch 'develop'
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-08 18:26:48 +02:00
Gregoire Parant
3a3e5d5f3b Merge branch 'master' into develop
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

# Conflicts:
#	front/src/Components/Menu/Menu.svelte
#	front/src/Components/Menu/ProfileSubMenu.svelte
#	front/src/Components/Menu/SettingsSubMenu.svelte
#	front/src/Connexion/ConnectionManager.ts
#	front/src/Stores/MediaStore.ts
#	front/src/Stores/MenuStore.ts
#	front/style/TextGlobalMessageSvelte-Style.scss
#	front/style/style.scss
2021-09-08 18:20:13 +02:00
GRL78
2ea7b0cff1
Menu style will adapt if iframe in map is opened (#1422) 2021-09-08 15:43:46 +02:00
David Négrier
65b9da926b
Adding the menu of the workadventu.re website in this repo (#1420)
Because the workadventu.re website documentation regarding map building directly comes from that repo, it makes sense to export the menu in the repo.
This way, when we add a new documentation page, we can edit the menu in the same pull request.
2021-09-08 14:28:29 +02:00
David Négrier
d7a5435d9e
Adding documentation for the new "openTab" property (#1419) 2021-09-08 14:27:40 +02:00
grégoire parant
6cf86ec8dc
Add play uri for login and register in hydra (#1421)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-08 13:39:46 +02:00
David Négrier
149b417d8d
Merge pull request #1417 from thecodingmachine/doc_special_zones
Migrating documentation to this repository
2021-09-08 10:43:29 +02:00
David Négrier
699097c55b Migrating all the map-building documentation to Github.
+ adding links to Youtube tutorials
2021-09-08 10:28:39 +02:00
David Négrier
9ccd967cb8 Adding special zone documentation and Typescript documentation
This commit splits the special zone documentation in 3 different pages (open website / meeting rooms / special zones).
It also migrates special zones doc and using-typescript doc to Github repository
2021-09-08 08:46:01 +02:00
Kharhamel
0a44e3b4a1
Merge pull request #1415 from thecodingmachine/fixChromeTracks
FIX: reimplemented the old stream behavior on bad navigators like chrome
2021-09-07 17:06:18 +02:00
kharhamel
fa9929757d FIX: reimplemented the old stream behavior on bad navigators like chrome 2021-09-07 16:39:44 +02:00
grégoire parant
f60678478b
Update right css (#1416)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-07 13:59:08 +02:00
Lurkars
09125621d8 update gitignore 2021-09-06 19:16:05 +02:00
Lurkars
b29f649822 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-09-06 18:23:40 +02:00
David Négrier
62682cb18c
Merge pull request #1414 from thecodingmachine/doc_variables
Adding a dedicated doc for variables
2021-09-06 16:12:17 +02:00
David Négrier
76362e81e8 Adding a dedicated doc for variables 2021-09-06 16:06:49 +02:00
Kharhamel
317fe28286
Merge pull request #1413 from thecodingmachine/frontpretty
Frontpretty
2021-09-06 14:35:50 +02:00
kharhamel
4160235b92 ran pretty on the front 2021-09-06 14:31:59 +02:00
kharhamel
7743bda3eb added yarn run pretty to the front ci 2021-09-06 14:27:01 +02:00
grégoire parant
bf1953fe22
Release v1.4.15 (#1411)
* audio player volume improvements

* Add workaround for #932

* Bump striptags from 3.1.1 to 3.2.0 in /messages

Bumps [striptags](https://github.com/ericnorris/striptags) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/ericnorris/striptags/releases)
- [Commits](https://github.com/ericnorris/striptags/compare/v3.1.1...v3.2.0)

---
updated-dependencies:
- dependency-name: striptags
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add anthoer note for https://github.com/thecodingmachine/workadventure/issues/932#issuecomment-867562208

* WIP: svelte menu

* temp

* temp

* Bump tar from 4.4.13 to 4.4.15 in /back

Bumps [tar](https://github.com/npm/node-tar) from 4.4.13 to 4.4.15.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v4.4.13...v4.4.15)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* New menu svelte

* Migration of report menu in svelte

* Migration of registerCustomMenu for Menu in Svelte
Refactor subMenuStore
Suppression of old MenuScene and ReportMenu

* Suppression of HTML files that aren't use anymore

* New version of cache management (#1365)

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* migrate to svelte

* remove redundancy

* initial localUserStore volume

* Exit scene acess denied detected (#1369)

* Add auth token user to get right in admin and check if user have right

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update error show

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update token generation (#1372)

- Permit only decode token to get map details,
 - If user have token expired, set the token to null and reload the page. This feature will be updated when authentication stategy will be finished.

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* GameManager has an attribute scenePlugin

* GameManager has an attribute scenePlugin

* Suppression of gameManager in IframeListener

* fix deeployer

* fix deeployer

* Fixing enter/leave event not properly sent on adjacent zones

On adjacent zones, the zone leave event was not properly triggered when leaving a zone for the zone next to it.
Closes #1366

* First pass on css

* First pass on css

* Second pass on css and reportMenu

* Second pass on css and reportMenu

* Second pass on css and reportMenu

* Improving popup

If a popup message is empty, only the buttons will be displayed (not the container)

Unrelated: the Sound.play method in the API now accepts 0 arguments.

* Third pass on css and reportMenu

* Correction following test

* Player return a the same position when after editing his profile

* Player return a the same position when after editing his profile (same as reconnection)

* Contact page only if environment variable exist

* Execute scripts of the map after creating gameScene

* Rollback on createPromise switched to public

* Bump tar from 6.1.0 to 6.1.10 in /pusher

Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.10.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.10)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add iframe submenu by scripting API
Delete menu by scripting API

* Removing ts-ignore

* REVIEW : Migration Menu and Report Menu in Svelte (#1363)

* WIP: svelte menu

* temp

* temp

* New menu svelte

* Migration of report menu in svelte

* Migration of registerCustomMenu for Menu in Svelte
Refactor subMenuStore
Suppression of old MenuScene and ReportMenu

* Suppression of HTML files that aren't use anymore

* fix deeployer

* First pass on css

* First pass on css

* Second pass on css and reportMenu

* Second pass on css and reportMenu

* Second pass on css and reportMenu

* Third pass on css and reportMenu

* Correction following test

* Contact page only if environment variable exist

* Update service worker

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Change requested

* Change requested

Co-authored-by: kharhamel <oognic@gmail.com>
Co-authored-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Refactor to only have one function registerMenuCommand
When selected custom menu is removed, go to settings menu
Allow iframe in custom menu to use Scripting API
Return menu object when it is registered, can call remove function on it

* Correct bad change

* Add types file in API

* Add types file in API

* Fixing "has/in" on variables proxy object

When using WA.state, using `"myVariable" in WA.state` would always return false.
This is now fixed by adding a "has" method on the Proxy class.

Also, added a `WA.state.hasVariable` method.

* Add documentation
delete unused test map

* Properties changed via the Iframe API now trigger changes directly

Changes performed in WA.room.setPropertyLayer now have a real-time impact.
If the property is changed on a layer the current player is on, the changes will be triggered.

* documentation and CHANGELOG

* add possibility to set size of coWebsite and Jitsis via map property

* Update GameScene.ts

typo fixed

* Update CoWebsiteManager.ts

typos and style

* Update CoWebsiteManager.ts

yet another typo

* FIX: media tracks were not readded to a 3rd person in some situations

* fix ReportMenu (#1397)

* remove the package systeminformation from back

* Bump url-parse from 1.5.1 to 1.5.3 in /front

Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump tar from 4.4.15 to 4.4.19 in /back

Bumps [tar](https://github.com/npm/node-tar) from 4.4.15 to 4.4.19.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v4.4.15...v4.4.19)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump path-parse from 1.0.6 to 1.0.7 in /messages

Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* openTabPropertyKey (create new props in own file)

* Bump path-parse from 1.0.6 to 1.0.7 in /uploader

Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump path-parse from 1.0.6 to 1.0.7 in /front

Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump path-parse from 1.0.6 to 1.0.7 in /back

Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump path-parse from 1.0.6 to 1.0.7 in /maps

Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* FEATURE: improved the mediaStore code to disable tracks instead of deleting them

* Bump path-parse from 1.0.6 to 1.0.7 in /benchmark

Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* added jitsiTypes

* renamed

* Allowing variables nested in group layers

Up until this commit, variables nested in object layers inside group layers where not found by the front nor the back.
This PR changes analysis so that variables can be detected.

* FIX: fixed a circular dependancy in stores by rewriting createPeerStore() and createScreenSharingPeerStore()

* WIP: Bypass camera scene (#1337)

* Set new local camera setup variable

* Finish by pass video settings

 - TODO add button to update camera settings

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Merge branch 'develop' into jumpVideoCamera

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

# Conflicts:
#	front/src/Connexion/LocalUserStore.ts
#	front/src/Phaser/Components/Loader.ts
#	front/src/Phaser/Game/GameManager.ts
#	front/src/Phaser/Login/EnableCameraScene.ts

* Add menu to open enable camera scene

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Finish jump camera setup

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Active authentication Oauth (#1377)

* Active authentication Oauth

 - Google authentication
 - GitHub authentication
 - Linkedin authentication

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Finish connexion et get user info connexion

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Fix lint error

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Change the expires token for 30 days

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update connexion stratgey

 - Set last room when it will be created and not when connexion is openned
 - Add '/login' end point permit to logout and open iframe to log user
 - Add logout feature permit to logout in front

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Implement logout and revoke token with hydra

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Fix pull develop conflict

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Profile url (#1399)

* Create function that permit to get profile URL

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Continue profil user

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Add menu and logout button

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update last room use

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Profile callback permit to get url profile setting from admin

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Finish profile show

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Delete profileUrl will be not use today

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Correct lint

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update size of iframe

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Delete console log

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update feedback ARP

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Emote silent zone (#1342)

* Add an emote when the user is in silent zone

* Update silent icon strategy

* Update strategy for silent zone

 - Add svelte store
 - Show silent zone indication and replace camera

This update permit to hide silent zone when user is in Jitsi discussion

* Fix css silent zone

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Hotfix media constraint error

 - Create error to manage displayed warning when we try to access on media with no constraint video and audio
 - Fix disabled microphone if we try to active and we don't have right or there is an error.

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

Co-authored-by: Lurkars <git@8lh.de>
Co-authored-by: Guy Sheffer <guysoft@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kharhamel <oognic@gmail.com>
Co-authored-by: GRL <g.lesniewski@thecodingmachine.com>
Co-authored-by: David Négrier <d.negrier@thecodingmachine.com>
Co-authored-by: GRL78 <80678534+GRL78@users.noreply.github.com>
Co-authored-by: ¯\_(ツ)_/¯ <tabascoeye@gmail.com>
Co-authored-by: Kharhamel <Kharhamel@users.noreply.github.com>
Co-authored-by: jonny <ga86lad@mytum.de>
2021-09-05 19:51:33 +02:00
Gregoire Parant
f2ca021740 Hotfix media constraint error
- Create error to manage displayed warning when we try to access on media with no constraint video and audio
 - Fix disabled microphone if we try to active and we don't have right or there is an error.

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-05 19:36:57 +02:00
grégoire parant
4f0bb95a38
Emote silent zone (#1342)
* Add an emote when the user is in silent zone

* Update silent icon strategy

* Update strategy for silent zone

 - Add svelte store
 - Show silent zone indication and replace camera

This update permit to hide silent zone when user is in Jitsi discussion

* Fix css silent zone

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-05 18:36:22 +02:00
grégoire parant
d2b8d7dc04
Active authentication Oauth (#1377)
* Active authentication Oauth

 - Google authentication
 - GitHub authentication
 - Linkedin authentication

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Finish connexion et get user info connexion

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Fix lint error

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Change the expires token for 30 days

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update connexion stratgey

 - Set last room when it will be created and not when connexion is openned
 - Add '/login' end point permit to logout and open iframe to log user
 - Add logout feature permit to logout in front

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Implement logout and revoke token with hydra

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Fix pull develop conflict

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Profile url (#1399)

* Create function that permit to get profile URL

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Continue profil user

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Add menu and logout button

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update last room use

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Profile callback permit to get url profile setting from admin

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Finish profile show

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Delete profileUrl will be not use today

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Correct lint

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update size of iframe

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Delete console log

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update feedback ARP

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-05 18:17:49 +02:00
grégoire parant
a0d863569b
WIP: Bypass camera scene (#1337)
* Set new local camera setup variable

* Finish by pass video settings

 - TODO add button to update camera settings

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Merge branch 'develop' into jumpVideoCamera

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

# Conflicts:
#	front/src/Connexion/LocalUserStore.ts
#	front/src/Phaser/Components/Loader.ts
#	front/src/Phaser/Game/GameManager.ts
#	front/src/Phaser/Login/EnableCameraScene.ts

* Add menu to open enable camera scene

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Finish jump camera setup

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-09-04 21:31:36 +02:00
Kharhamel
ce16dab65f
Merge pull request #1410 from thecodingmachine/betterMEdiaStore
FIX: fixed a circular dependancy in stores
2021-09-03 17:27:12 +02:00
kharhamel
ba5fa06306 FIX: fixed a circular dependancy in stores by rewriting createPeerStore() and createScreenSharingPeerStore() 2021-09-03 17:16:31 +02:00
Kharhamel
6cb0f14e5a
Merge pull request #919 from Lurkars/audioPlayerImprovements
audio player volume improvements
2021-09-03 11:50:23 +02:00
David Négrier
86858a176e
Merge pull request #1406 from thecodingmachine/fix/recursive_variables
Allowing variables nested in group layers
2021-09-02 18:37:27 +02:00
David Négrier
68a4772627 Allowing variables nested in group layers
Up until this commit, variables nested in object layers inside group layers where not found by the front nor the back.
This PR changes analysis so that variables can be detected.
2021-09-02 18:05:55 +02:00
Kharhamel
8d2da6bdc7
Merge pull request #1405 from jonnytest1/opentab2
openTabPropertyKey (create new props in own file)
2021-09-02 17:19:20 +02:00
Lurkars
49b1a55042 Merge branch 'develop' of github.com:thecodingmachine/workadventure into audioPlayerImprovements 2021-09-01 19:25:37 +02:00
Lurkars
cc048f9b20 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-09-01 19:25:11 +02:00
Lurkars
e584c16aaa socket 2021-09-01 19:25:05 +02:00
jonny
606e9093e1 renamed 2021-09-01 18:16:31 +02:00
jonny
181232c1e6 added jitsiTypes 2021-09-01 17:55:23 +02:00
Kharhamel
1d5ad96646
Merge pull request #1357 from thecodingmachine/dependabot/npm_and_yarn/benchmark/path-parse-1.0.7
Bump path-parse from 1.0.6 to 1.0.7 in /benchmark
2021-09-01 17:48:28 +02:00
dependabot[bot]
949da0529f
Bump path-parse from 1.0.6 to 1.0.7 in /benchmark
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 15:48:20 +00:00
Kharhamel
295d413fdc
Merge pull request #1358 from thecodingmachine/dependabot/npm_and_yarn/maps/path-parse-1.0.7
Bump path-parse from 1.0.6 to 1.0.7 in /maps
2021-09-01 17:48:14 +02:00
Kharhamel
04fe8fdd1e
Merge pull request #1359 from thecodingmachine/dependabot/npm_and_yarn/back/path-parse-1.0.7
Bump path-parse from 1.0.6 to 1.0.7 in /back
2021-09-01 17:48:01 +02:00
Kharhamel
8f31380084
Merge pull request #1360 from thecodingmachine/dependabot/npm_and_yarn/uploader/path-parse-1.0.7
Bump path-parse from 1.0.6 to 1.0.7 in /uploader
2021-09-01 17:47:48 +02:00
Kharhamel
93238abd76
Merge pull request #1361 from thecodingmachine/dependabot/npm_and_yarn/front/path-parse-1.0.7
Bump path-parse from 1.0.6 to 1.0.7 in /front
2021-09-01 17:47:34 +02:00
Kharhamel
3191930fdb
Merge pull request #1208 from thecodingmachine/dependabot/npm_and_yarn/messages/striptags-3.2.0
Bump striptags from 3.1.1 to 3.2.0 in /messages
2021-09-01 17:41:35 +02:00
Kharhamel
095a486621
Merge pull request #1402 from thecodingmachine/betterMEdiaStore
FEATURE: improved the mediaStore code to disable tracks instead of deleting them
2021-09-01 17:30:59 +02:00
kharhamel
52fe79df47 FEATURE: improved the mediaStore code to disable tracks instead of deleting them 2021-09-01 17:14:05 +02:00
David Négrier
4fac9eb928 Adding "collides" video to documentation 2021-09-01 16:11:55 +02:00
dependabot[bot]
e2b8d3b6ef
Bump path-parse from 1.0.6 to 1.0.7 in /maps
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 13:10:28 +00:00
dependabot[bot]
1b5042ef6a
Bump path-parse from 1.0.6 to 1.0.7 in /back
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 13:10:28 +00:00
dependabot[bot]
3f143ba912
Bump path-parse from 1.0.6 to 1.0.7 in /front
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 13:10:14 +00:00
dependabot[bot]
80601ae432
Bump path-parse from 1.0.6 to 1.0.7 in /uploader
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 13:10:13 +00:00
Kharhamel
49c2ba3c4b
Merge pull request #1362 from thecodingmachine/dependabot/npm_and_yarn/messages/path-parse-1.0.7
Bump path-parse from 1.0.6 to 1.0.7 in /messages
2021-09-01 15:09:19 +02:00
jonny
0272e4f691 merged in develop again 2021-09-01 14:55:29 +02:00
jonny
7971daa27f openTabPropertyKey (create new props in own file) 2021-09-01 14:50:48 +02:00
Kharhamel
ad60993b9a
Merge pull request #1398 from tabascoeye/develop
add possibility to set size of coWebsite and Jitsis via map property
2021-09-01 14:42:41 +02:00
dependabot[bot]
7244fcd128
Bump path-parse from 1.0.6 to 1.0.7 in /messages
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 12:35:56 +00:00
Kharhamel
c0547637b5
Merge pull request #1404 from thecodingmachine/dependabot/npm_and_yarn/back/tar-4.4.19
Bump tar from 4.4.15 to 4.4.19 in /back
2021-09-01 14:33:57 +02:00
Kharhamel
5315628a10
Merge pull request #1403 from thecodingmachine/removesysteminformation
remove the package systeminformation from back
2021-09-01 14:29:05 +02:00
dependabot[bot]
df0546a2f3
Bump tar from 4.4.15 to 4.4.19 in /back
Bumps [tar](https://github.com/npm/node-tar) from 4.4.15 to 4.4.19.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v4.4.15...v4.4.19)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 12:28:03 +00:00
Kharhamel
4f8273bae7
Merge pull request #1356 from thecodingmachine/dependabot/npm_and_yarn/front/url-parse-1.5.3
Bump url-parse from 1.5.1 to 1.5.3 in /front
2021-09-01 14:27:18 +02:00
Kharhamel
b4501a4d2a
Merge pull request #1200 from guysoft/patch-1
Add workaround for #932
2021-09-01 14:26:22 +02:00
dependabot[bot]
96ff1f3af1
Bump url-parse from 1.5.1 to 1.5.3 in /front
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 12:23:36 +00:00
kharhamel
bc9131119f remove the package systeminformation from back 2021-09-01 14:21:26 +02:00
GRL78
19baf7f582
fix ReportMenu (#1397) 2021-09-01 10:11:12 +02:00
Kharhamel
d7b552a513
Merge pull request #1400 from thecodingmachine/bugA3
FIX: media tracks were not readded to a 3rd person in some situations
2021-08-31 16:30:41 +02:00
kharhamel
1e20466f74 FIX: media tracks were not readded to a 3rd person in some situations 2021-08-31 16:29:23 +02:00
TabascoEye
a0d73f27d9
Update CoWebsiteManager.ts
yet another typo
2021-08-30 19:51:14 +02:00
TabascoEye
e6ae343975
Update CoWebsiteManager.ts
typos and style
2021-08-30 19:44:50 +02:00
TabascoEye
da03e60de4
Update GameScene.ts
typo fixed
2021-08-30 19:42:18 +02:00
¯\_(ツ)_/¯
ae3e2a09d9 add possibility to set size of coWebsite and Jitsis via map property 2021-08-30 19:32:02 +02:00
David Négrier
d2816220eb
Merge pull request #1395 from thecodingmachine/triggerOnSetLayer
Properties changed via the Iframe API now trigger changes directly
2021-08-27 17:41:58 +02:00
David Négrier
7576fbbe6d
Merge pull request #1392 from thecodingmachine/iframeMenuScript
Iframe menu script
2021-08-27 17:41:04 +02:00
GRL
12108bc529 documentation and CHANGELOG 2021-08-27 16:28:59 +02:00
David Négrier
10c08dea6d
Merge pull request #1393 from thecodingmachine/variableHasProxy
Fixing "has/in" on variables proxy object
2021-08-27 15:07:50 +02:00
David Négrier
4536a63e69 Properties changed via the Iframe API now trigger changes directly
Changes performed in WA.room.setPropertyLayer now have a real-time impact.
If the property is changed on a layer the current player is on, the changes will be triggered.
2021-08-27 15:05:14 +02:00
GRL
ebcf4a6ae3 Add documentation
delete unused test map
2021-08-27 14:49:57 +02:00
David Négrier
a0d3685227 Fixing "has/in" on variables proxy object
When using WA.state, using `"myVariable" in WA.state` would always return false.
This is now fixed by adding a "has" method on the Proxy class.

Also, added a `WA.state.hasVariable` method.
2021-08-27 11:29:59 +02:00
GRL
cb7b98de0d Merge branch 'iframeMenuScript' of github.com:thecodingmachine/workadventure into iframeMenuScript 2021-08-27 11:18:58 +02:00
GRL
706f531ca2 Add types file in API 2021-08-27 11:17:48 +02:00
GRL
12a150c817 Add types file in API 2021-08-27 11:14:07 +02:00
GRL
a195870cfb Correct bad change 2021-08-27 11:12:23 +02:00
GRL
833c15b2d5 Merge branch 'develop' of github.com:thecodingmachine/workadventure into iframeMenuScript 2021-08-27 10:44:32 +02:00
GRL
cf7bfe79ca Refactor to only have one function registerMenuCommand
When selected custom menu is removed, go to settings menu
Allow iframe in custom menu to use Scripting API
Return menu object when it is registered, can call remove function on it
2021-08-27 10:34:03 +02:00
GRL78
7c956d1481
REVIEW : Migration Menu and Report Menu in Svelte (#1363)
* WIP: svelte menu

* temp

* temp

* New menu svelte

* Migration of report menu in svelte

* Migration of registerCustomMenu for Menu in Svelte
Refactor subMenuStore
Suppression of old MenuScene and ReportMenu

* Suppression of HTML files that aren't use anymore

* fix deeployer

* First pass on css

* First pass on css

* Second pass on css and reportMenu

* Second pass on css and reportMenu

* Second pass on css and reportMenu

* Third pass on css and reportMenu

* Correction following test

* Contact page only if environment variable exist

* Update service worker

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Change requested

* Change requested

Co-authored-by: kharhamel <oognic@gmail.com>
Co-authored-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-26 12:01:07 +02:00
David Négrier
5cd3ab4b4c Removing ts-ignore 2021-08-25 09:30:05 +02:00
GRL
f3c4d344b3 Add iframe submenu by scripting API
Delete menu by scripting API
2021-08-24 17:35:06 +02:00
David Négrier
29c1ea25c7
Merge pull request #1391 from thecodingmachine/dependabot/npm_and_yarn/pusher/tar-6.1.10
Bump tar from 6.1.0 to 6.1.10 in /pusher
2021-08-24 16:17:04 +02:00
dependabot[bot]
32290de8dd
Bump tar from 6.1.0 to 6.1.10 in /pusher
Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.10.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.10)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-24 09:59:46 +00:00
David Négrier
428fbaae02
Merge pull request #1338 from thecodingmachine/dependabot/npm_and_yarn/back/tar-4.4.15
Bump tar from 4.4.13 to 4.4.15 in /back
2021-08-24 11:58:54 +02:00
Gregoire Parant
54fab3d233 Merge branch 'master' into develop 2021-08-24 10:45:03 +02:00
GRL
49eb28dacf Merge branch 'develop' of github.com:thecodingmachine/workadventure into menuInSvelte 2021-08-24 09:38:24 +02:00
David Négrier
60b6e7baa1
Merge pull request #1375 from thecodingmachine/ListenIFrameWaitCreate
Execute scripts of the map after creating gameScene
2021-08-23 19:12:01 +02:00
David Négrier
8c43c2e6e8 Rollback on createPromise switched to public 2021-08-23 18:54:00 +02:00
GRL
ad95fa5e11 Execute scripts of the map after creating gameScene 2021-08-23 18:53:59 +02:00
David Négrier
41c31d3d2f
Merge pull request #1381 from thecodingmachine/samePlaceAfterEditProfile
Player return a the same position when after editing his profile
2021-08-23 18:36:43 +02:00
David Négrier
bf6ce94b80 Merge branch 'develop' of github.com:thecodingmachine/workadventure into samePlaceAfterEditProfile 2021-08-23 18:04:09 +02:00
GRL
2f76a24dff Contact page only if environment variable exist 2021-08-23 17:30:07 +02:00
David Négrier
7fdbcde71c
Merge pull request #1388 from thecodingmachine/BackToLinePopUp
Update escapeHtml
2021-08-23 11:25:04 +02:00
Gregoire Parant
99a9b5f9a2 Update strategy to use css
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-23 10:20:48 +02:00
Gregoire Parant
c4a9da41ba Merge branch 'master' into BackToLinePopUp 2021-08-23 09:45:32 +02:00
Gregoire Parant
8c4ead8421 Add "\n\r" to match
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-23 09:43:43 +02:00
Gregoire Parant
da00fa7868 Update escapeHtml
Update escapeHtml in HtmlUtils class to create paragraphe when user have \r\n in popup text

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-23 09:16:22 +02:00
David Négrier
1f7e964a7d
Merge pull request #1386 from thecodingmachine/master
Backporting master to develop
2021-08-23 09:01:19 +02:00
David Négrier
7e4292f0fd
Merge pull request #1376 from thecodingmachine/deployerFix
fix deeployer
2021-08-20 17:11:10 +02:00
David Négrier
9a150cbcca
Merge pull request #1385 from thecodingmachine/images_in_doc
Migrating images from the WorkAdventure website to the docs/ directory
2021-08-20 17:10:46 +02:00
David Négrier
821e224aac Migrating images from the WorkAdventure website to the docs/ directory
Images belong to the docs, so they should sit next to the documentation files in the /docs directory.
2021-08-20 16:56:03 +02:00
GRL
edfe440c6e Merge branch 'develop' of github.com:thecodingmachine/workadventure into menuInSvelte 2021-08-20 16:18:45 +02:00
GRL
c2b3d23ec0 Player return a the same position when after editing his profile (same as reconnection) 2021-08-20 09:49:37 +02:00
Gregoire Parant
4d4c9c8c6e Merge branch 'master' into develop 2021-08-19 18:50:34 +02:00
grégoire parant
e32f433688
Update cache version (#1383)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-19 18:48:24 +02:00
Gregoire Parant
86c32cf9ff Merge branch 'master' into develop
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

# Conflicts:
#	front/dist/service-worker-prod.js
2021-08-19 18:31:30 +02:00
grégoire parant
1ffd198b00
Update cache management (#1382)
Change strategy of cache management. Today we don't have version of map building so we cannot use cache correctly. The idea is to have a less cache and keep HTPP cache management with GET method.

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-19 18:23:30 +02:00
GRL
0c796dff90 Player return a the same position when after editing his profile 2021-08-19 17:22:16 +02:00
GRL
2ebf05f7d6 Correction following test 2021-08-19 11:17:46 +02:00
David Négrier
5fa8c1de9a
Merge pull request #1379 from thecodingmachine/popup_improvements
Improving popup
2021-08-19 09:52:35 +02:00
GRL
d6bd883c94 Third pass on css and reportMenu 2021-08-18 15:34:26 +02:00
David Négrier
8a64491952 Improving popup
If a popup message is empty, only the buttons will be displayed (not the container)

Unrelated: the Sound.play method in the API now accepts 0 arguments.
2021-08-18 11:53:41 +02:00
GRL
0d29ef5787 Merge branch 'menuInSvelte' of github.com:thecodingmachine/workadventure into menuInSvelte 2021-08-18 11:30:28 +02:00
GRL
5a8e7d277f Second pass on css and reportMenu 2021-08-18 11:30:11 +02:00
GRL
ac825bf725 Second pass on css and reportMenu 2021-08-18 11:20:57 +02:00
GRL
4c3097155b Second pass on css and reportMenu 2021-08-18 11:15:46 +02:00
Lurkars
f3cfe7ec82 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-08-17 20:24:25 +02:00
GRL
9e5cc3b9a7 First pass on css 2021-08-17 15:17:29 +02:00
GRL
096baa8897 First pass on css 2021-08-17 14:44:43 +02:00
grégoire parant
0bfac1a164
Update cache API index (#1378)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-17 13:26:20 +02:00
David Négrier
06be65c12f
Merge pull request #1368 from thecodingmachine/fix_zone_enter_exit
Fixing enter/leave event not properly sent on adjacent zones
2021-08-17 10:08:51 +02:00
David Négrier
1d45bab46d Fixing enter/leave event not properly sent on adjacent zones
On adjacent zones, the zone leave event was not properly triggered when leaving a zone for the zone next to it.
Closes #1366
2021-08-17 10:04:11 +02:00
GRL
82b95faa53 fix deeployer 2021-08-16 14:45:22 +02:00
GRL
d0a85b0870 fix deeployer 2021-08-16 14:33:53 +02:00
GRL
aa9e5c4543 Merge branch 'develop' of github.com:thecodingmachine/workadventure into menuInSvelte 2021-08-16 14:19:28 +02:00
David Négrier
1845b8f66e
Merge pull request #1374 from thecodingmachine/GameManagerRefactor
GameManager has an attribute scenePlugin
2021-08-16 11:59:30 +02:00
GRL
151e63ff91 Suppression of gameManager in IframeListener 2021-08-16 11:56:00 +02:00
GRL
736ac19ed0 Merge remote-tracking branch 'origin/GameManagerRefactor' into GameManagerRefactor 2021-08-16 11:50:22 +02:00
GRL
d2413896c7 GameManager has an attribute scenePlugin 2021-08-16 11:50:09 +02:00
GRL
482a6da1d8 GameManager has an attribute scenePlugin 2021-08-16 11:43:29 +02:00
grégoire parant
005a3c5a0d
Release 1.4.14 (#1370)
* New version of cache management (#1365)

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Exit scene acess denied detected (#1369)

* Add auth token user to get right in admin and check if user have right

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update error show

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update token generation (#1372)

- Permit only decode token to get map details,
 - If user have token expired, set the token to null and reload the page. This feature will be updated when authentication stategy will be finished.

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-15 23:13:48 +02:00
grégoire parant
8d57886bae
Update token generation (#1372)
- Permit only decode token to get map details,
 - If user have token expired, set the token to null and reload the page. This feature will be updated when authentication stategy will be finished.

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-15 22:51:06 +02:00
grégoire parant
02a21209ec
Exit scene acess denied detected (#1369)
* Add auth token user to get right in admin and check if user have right

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>

* Update error show

Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-15 08:51:35 +02:00
Lurkars
aa38d1a5bd initial localUserStore volume 2021-08-11 20:29:48 +02:00
Lurkars
0d27b4ad43 remove redundancy 2021-08-11 20:07:09 +02:00
Lurkars
3702173cd4 migrate to svelte 2021-08-11 20:01:51 +02:00
Lurkars
e8104f63ac Merge branch 'develop' of github.com:thecodingmachine/workadventure into audioPlayerImprovements 2021-08-11 19:55:36 +02:00
Lurkars
5b979fa151 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-08-11 19:54:36 +02:00
grégoire parant
f7daf16ac5
New version of cache management (#1365)
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-11 17:09:17 +02:00
GRL
f4ce5f9a3b Merge branch 'ReportMenuSvelte' of github.com:thecodingmachine/workadventure into menuInSvelte 2021-08-11 15:04:47 +02:00
GRL
46a2e3f453 Suppression of HTML files that aren't use anymore 2021-08-11 14:23:34 +02:00
GRL
e86892b9a5 Merge branch 'develop' of github.com:thecodingmachine/workadventure into MenuSvelte 2021-08-11 14:13:31 +02:00
GRL
8105e966ff Migration of registerCustomMenu for Menu in Svelte
Refactor subMenuStore
Suppression of old MenuScene and ReportMenu
2021-08-11 14:07:34 +02:00
Gregoire Parant
45a56c2e02 HotFix feedback svelte continuous integration
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-11 10:09:04 +02:00
Gregoire Parant
434b112c65 Improve service worker store managment
Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
2021-08-11 10:01:56 +02:00
grégoire parant
bced495570
Add comment use service worker (#1355) 2021-08-10 23:10:56 +02:00
grégoire parant
c7fdfed00c
Improve mobile camera shown (#1354)
- Add new store to send mobile size
 - Update style to show video for mobile size
2021-08-10 22:35:26 +02:00
grégoire parant
22a46a98ea
Improve service worker (#1353)
* Improve service worker

 - Add new env variable in WebPack "NODE_ENV"
 - Add new service worker for mode dev that permit to by pass response in cache storage
 - Add new WorkAdventure icon

* Remove console.log

* Add service worker file prod and dev
2021-08-10 22:34:46 +02:00
Lurkars
fc1a7afd9a Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-08-10 14:20:39 +02:00
grégoire parant
1db2e2aba9
Update style of microphone (#1352)
- Active microphone close when user haven't microphone in the discussion
2021-08-10 10:12:31 +02:00
grégoire parant
dbe7dc4ce0
Merge pull request #1348 from thecodingmachine/develop
Release v1.4.14
2021-08-09 23:15:31 +02:00
GRL
9c1926f636 Merge branch 'develop' of github.com:thecodingmachine/workadventure into MenuSvelte 2021-08-09 16:59:12 +02:00
GRL
d10e2dbca7 Migration of report menu in svelte 2021-08-09 16:56:28 +02:00
grégoire parant
a5b44be6a1
Update JWT expires days (#1349) 2021-08-09 16:37:24 +02:00
grégoire parant
ddecf48697
Update JWT expires days (#1347) 2021-08-09 16:31:55 +02:00
GRL
56fa2e49f6 New menu svelte 2021-08-09 14:49:17 +02:00
Datalog-Mindhack
bc24a6b1db
Update package.json (#1344)
Thans for your Merge Request 🚀
2021-08-09 14:36:53 +02:00
Lurkars
06290cdd78 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-08-08 19:33:58 +02:00
Gregoire Parant
154f8f03da Merge branch 'master' into develop 2021-08-06 18:29:09 +02:00
grégoire parant
fbcb9d898d
Update report message (#1343) 2021-08-06 18:28:18 +02:00
felixdoerre
d051650457
Delete sol_intérieur.png (#1341)
The file was initially renamed but accidentally re-added later. Removing it finished the move.
2021-08-06 17:23:22 +02:00
Gregoire Parant
af613f5b5b Merge branch 'master' into develop 2021-08-06 15:53:33 +02:00
GRL78
e0fb31fc58
WIP: Migrate AudioManager in Svelte (#1325)
* Migrate AudioManager in Svelte

* use import type when needed
2021-08-06 09:11:17 +02:00
David Négrier
ac282db1ac Removing pointless console.log 2021-08-05 17:21:55 +02:00
David Négrier
56cf535551
Merge pull request #1312 from thecodingmachine/iframe_in_map
Adding the ability to inject websites directly inside maps
2021-08-05 12:44:23 +02:00
David Négrier
6b9b999996 Making embedded iframes scriptable using the WA.room.website namespace. 2021-08-05 12:37:05 +02:00
David Négrier
5bb29e99ba Adding a "allowApi" property to authorize the API in a website. 2021-08-05 12:30:07 +02:00
David Négrier
ce3c53ae3f Adding the ability to inject websites directly inside maps
This PR adds the ability to inject a website INSIDE a map (as an iframe inside a Phaser HTML object)
The iFrame will be rendered transparently, unless you set a background-color on the body, which opens a number of cool possibilities.

Needs to be done: allowing the iframe API in those iframes.
2021-08-05 12:30:05 +02:00
David Négrier
a09f27b448
Merge pull request #1227 from jonnytest1/trigger-message-refv3
trigger message api refactorv3
2021-08-05 12:18:55 +02:00
David Négrier
570110f831 Fixing openWebsiteTriggerMessage not hidden when moving out of zone. 2021-08-05 12:07:12 +02:00
David Négrier
bc1c6a4986 Refactoring displayActionMessage signature. Now accepting an options object. This should allow for more options in the future. 2021-08-05 12:02:00 +02:00
David Négrier
87e4367455 Refactoring layoutManagerActionStore. It now supports an uuid field.
layoutManagerVisibilityStore is now a derived field from layoutManagerActionStore.
2021-08-05 11:19:28 +02:00
GRL
2cd5b7f0a8 Merge branch 'develop' of github.com:thecodingmachine/workadventure into MenuSvelte 2021-08-05 10:01:23 +02:00
David Négrier
92fee33b64 Merge branch 'develop' of github.com:thecodingmachine/workadventure into trigger-message-refv3 2021-08-05 09:24:05 +02:00
David Négrier
d1e5d57459 Changing the method name from "triggerMessage" to "displayActionMessage".
Generally speaking, I like to call the message at the bottom an "action message".
And things can "trigger" it, but in the case of a method that actually proactively displays the message, I find "displayActionMessage" to be a better name.

Also, removing package-lock files and improving code style
2021-08-05 09:17:33 +02:00
dependabot[bot]
2e3489a489
Bump tar from 4.4.13 to 4.4.15 in /back
Bumps [tar](https://github.com/npm/node-tar) from 4.4.13 to 4.4.15.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v4.4.13...v4.4.15)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-05 03:09:10 +00:00
grégoire parant
d644b43e24
Merge pull request #1330 from thecodingmachine/layoutManagerSvelte
Migrate layoutManager in Svelte
2021-08-04 21:01:29 +02:00
grégoire parant
7c11441f50
Merge pull request #1336 from thecodingmachine/HotFixJoystickMobile
Fix joystick postion
2021-08-04 18:42:31 +02:00
Gregoire Parant
190007a21f Fix joystick postion
- Aply new size after open and close iframe and permit to keep the good position of the joystick on the WorkAdventure screen
2021-08-04 18:07:04 +02:00
grégoire parant
238d5c22db
Merge pull request #1334 from thecodingmachine/PWAIcon
Update PWA apple icon
2021-08-04 15:05:57 +02:00
Gregoire Parant
f9992876df Update PWA apple icon 2021-08-04 15:05:11 +02:00
grégoire parant
588af2e3cc
Merge pull request #1333 from thecodingmachine/ImproveWA
Force to add service worker js file
2021-08-04 14:32:17 +02:00
Gregoire Parant
383bbbdafe Force to add service worker js file 2021-08-04 14:31:12 +02:00
grégoire parant
3df5eece38
Merge pull request #1331 from thecodingmachine/UpdatePWA
Update PWA design
2021-08-04 13:53:13 +02:00
Gregoire Parant
707040b506 improve PWA and last room strating 2021-08-04 13:33:58 +02:00
David Négrier
82832b7055 Adding a test case for WA.ui.triggerMessage 2021-08-03 22:37:49 +02:00
David Négrier
4713010929 Merge branch 'develop' of github.com:thecodingmachine/workadventure into trigger-message-refv3 2021-08-03 19:01:16 +02:00
Gregoire Parant
1ad9f5b045 Add new icon manifest 2021-08-03 17:49:25 +02:00
Gregoire Parant
d781b2eb91 Update favicon and service worker html 2021-08-03 17:28:27 +02:00
GRL
fe585297fc Merge branch 'develop' of github.com:thecodingmachine/workadventure into MenuSvelte 2021-08-03 17:19:47 +02:00
GRL
2d8098b06d Merge branch 'develop' of github.com:thecodingmachine/workadventure into layoutManagerSvelte 2021-08-03 11:40:51 +02:00
GRL
1436b15328 Migrate layoutManager in Svelte 2021-08-03 11:13:08 +02:00
David Négrier
cdd61bdb2c Merging with develop 2021-07-23 16:41:38 +02:00
David Négrier
3d5c222957 Reverting changes regarding single quotes 2021-07-23 14:59:56 +02:00
David Négrier
a146065cc6 Reverting changes regarding single quotes 2021-07-23 14:55:14 +02:00
Lurkars
c0b09db05e change port back 2021-07-21 19:29:45 +02:00
Lurkars
fb2bd1c346 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-07-21 19:28:00 +02:00
Lurkars
285f1ebe89 Merge branch 'develop' of github.com:thecodingmachine/workadventure into audioPlayerImprovements 2021-07-21 19:26:29 +02:00
Lurkars
7285122fed fix port 2021-07-21 12:00:15 +02:00
Lurkars
9d518eded8 Merge branch 'develop' of github.com:thecodingmachine/workadventure into twemojiEmoteMenu 2021-07-21 11:56:36 +02:00
Lurkars
d43202d90d fix userInput 2021-07-21 10:17:46 +02:00
Lurkars
f43deff626 use emote button 2021-07-21 09:41:22 +02:00
Lurkars
83bd19c8dc Merge branch 'develop' of github.com:thecodingmachine/workadventure into twemojiEmoteMenu 2021-07-20 16:27:49 +02:00
kharhamel
1ce801cced temp 2021-07-13 14:40:35 +02:00
kharhamel
50f3af81e4 temp 2021-07-13 14:40:35 +02:00
kharhamel
fecbc8a018 WIP: svelte menu 2021-07-13 14:40:35 +02:00
jonny
4ea6a12d20 cast callback 2021-07-05 16:26:29 +02:00
jonny
9bcdc9ba33 linter fixes 2021-07-02 19:05:03 +02:00
jonny
310e131a6e eslint restart 2021-07-02 19:03:34 +02:00
jonny
369d453455 Merge remote-tracking branch 'remotes/upstream/develop' into trigger-message-refv3 2021-07-02 18:49:22 +02:00
Lurkars
bba26fdc20 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-07-01 13:39:04 +02:00
Lurkars
445449d2db remove port change for sync 2021-06-29 08:40:24 +02:00
Lurkars
81f2c8b746 Merge branch 'develop' of github.com:thecodingmachine/workadventure into twemojiEmoteMenu 2021-06-29 08:37:08 +02:00
Lurkars
c264364752 Twemoji Emote Menu 2021-06-29 08:37:01 +02:00
jonny
917f3728d5 added callback in example 2021-06-28 11:17:22 +02:00
jonny
9643c7adf9 added callback documentation 2021-06-28 11:16:29 +02:00
Lurkars
7d12d8561a Merge branch 'develop' of github.com:thecodingmachine/workadventure into audioPlayerImprovements 2021-06-25 16:13:26 +02:00
Lurkars
4c8ee41cf2 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-06-24 18:28:12 +02:00
Lurkars
d28f0bed50 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-06-24 15:43:06 +02:00
Guy Sheffer
120f19af65
Add anthoer note for https://github.com/thecodingmachine/workadventure/issues/932#issuecomment-867562208 2021-06-24 14:35:18 +03:00
Lurkars
116c56be81 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-06-24 13:04:28 +02:00
Lurkars
a0418ddb78 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-06-24 09:19:55 +02:00
jonny
5472d220ba added trigger message code 2021-06-23 17:32:32 +02:00
dependabot[bot]
abfaf73a25
Bump striptags from 3.1.1 to 3.2.0 in /messages
Bumps [striptags](https://github.com/ericnorris/striptags) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/ericnorris/striptags/releases)
- [Commits](https://github.com/ericnorris/striptags/compare/v3.1.1...v3.2.0)

---
updated-dependencies:
- dependency-name: striptags
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-18 20:36:36 +00:00
Guy Sheffer
3e54e75040
Add workaround for #932 2021-06-17 15:14:54 +03:00
Lurkars
417feec56b Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-06-04 09:28:20 +02:00
Lurkars
451fa7dcd7 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-05-18 15:57:40 +02:00
Lurkars
679c8a5ec5 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-05-17 15:25:26 +02:00
Lurkars
85edd47a49 Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-05-17 14:19:55 +02:00
Lurkars
498f23b5fc Merge branch 'develop' of github.com:thecodingmachine/workadventure into develop 2021-05-15 19:02:02 +02:00
Lurkars
cc44bfac77 port 2021-05-13 16:13:07 +02:00
Lurkars
405f7b1137 audio player volume improvements 2021-04-20 21:37:48 +02:00
484 changed files with 23155 additions and 13199 deletions

View File

@ -5,7 +5,7 @@ JITSI_PRIVATE_MODE=false
JITSI_ISS=
SECRET_JITSI_KEY=
ADMIN_API_TOKEN=123
START_ROOM_URL=/_/global/maps.workadventure.localhost/Floor0/floor0.json
START_ROOM_URL=/_/global/maps.workadventure.localhost/starter/map.json
# If your Turn server is configured to use the Turn REST API, you should put the shared auth secret here.
# If you are using Coturn, this is the value of the "static-auth-secret" parameter in your coturn config file.
# Keep empty if you are sharing hard coded / clear text credentials.
@ -22,3 +22,10 @@ MAX_USERNAME_LENGTH=8
OPID_CLIENT_ID=
OPID_CLIENT_SECRET=
OPID_CLIENT_ISSUER=
OPID_CLIENT_REDIRECT_URL=
OPID_LOGIN_SCREEN_PROVIDER=http://pusher.workadventure.localhost/login-screen
OPID_PROFILE_SCREEN_PROVIDER=
DISABLE_ANONYMOUS=
# If you want to have a contact page in your menu, you MUST set CONTACT_URL to the URL of the page that you want
CONTACT_URL=

View File

@ -190,6 +190,8 @@ jobs:
SECRET_JITSI_KEY: ${{ secrets.SECRET_JITSI_KEY }}
TURN_STATIC_AUTH_SECRET: ${{ secrets.TURN_STATIC_AUTH_SECRET }}
DEPLOY_REF: ${{ github.event_name == 'pull_request' && env.GITHUB_HEAD_REF_SLUG || env.GITHUB_REF_SLUG }}
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
POSTHOG_URL: ${{ secrets.POSTHOG_URL }}
with:
namespace: workadventure-${{ github.event_name == 'pull_request' && env.GITHUB_HEAD_REF_SLUG || env.GITHUB_REF_SLUG }}

View File

@ -61,15 +61,14 @@ jobs:
run: yarn run lint
working-directory: "front"
- name: "Pretty"
run: yarn run pretty-check
working-directory: "front"
- name: "Jasmine"
run: yarn test
working-directory: "front"
# We will enable prettier checks on front in a few month, when most PRs without prettier have been merged
# - name: "Prettier"
# run: yarn run pretty-check
# working-directory: "front"
continuous-integration-pusher:
name: "Continuous Integration Pusher"

60
.github/workflows/end_to_end_tests.yml vendored Normal file
View File

@ -0,0 +1,60 @@
# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
name: "End to end tests"
on:
push:
branches:
- master
- develop
pull_request:
jobs:
end-to-end-tests:
name: "End-to-end testcafe tests"
runs-on: "ubuntu-latest"
steps:
- name: "Checkout"
uses: "actions/checkout@v2.0.0"
- name: "Setup .env file"
run: cp .env.template .env
- name: "Edit ownership of file for test cases"
run: sudo chown 1000:1000 -R .
- name: "Start environment"
run: docker-compose up -d
- name: "Wait for environment to build (and downloading testcafe image)"
run: (docker-compose -f docker-compose.testcafe.yml pull &) && docker-compose logs -f --tail=0 front | grep -q "Compiled successfully"
# - name: "temp debug: display logs"
# run: docker-compose logs
#
# - name: "Wait for back start"
# run: docker-compose logs -f back | grep -q "WorkAdventure HTTP API starting on port"
#
# - name: "Wait for pusher start"
# run: docker-compose logs -f pusher | grep -q "WorkAdventure starting on port"
- name: "Run tests"
run: docker-compose -f docker-compose.testcafe.yml up --exit-code-from testcafe
- name: Upload failed tests
if: ${{ failure() }}
uses: actions/upload-artifact@v2
with:
name: my-artifact
path: './tests/screenshots/'
- name: Display state
if: ${{ failure() }}
run: docker-compose ps
- name: Display logs
if: ${{ failure() }}
run: docker-compose logs

View File

@ -1,5 +1,53 @@
## Version develop
### Updates
- Added multi Co-Website management
### Bugfix
- Moving a discussion over a user will now add this user to the discussion
- Being in a silent zone new forces mediaConstraints to false (#1508)
- Fixes for the emote menu (#1501)
- Fixing chat message attributed to wrong user (#1507 #1528)
## Version 1.5.0
### Updates
- Added support for login with OpenID Connect
- New scripting library available to extend WorkAdventure: see [Scripting API Extra](https://github.com/workadventure/scripting-api-extra/)
- New menu design!
- New `openTab` property (#1419)
- Possible integration with Posthog (#1458)
### Bugfix
- Fixing layers flattened several times (#1427 @Lurkars)
- Fixing CSS of video elements
- Chat now scrolls to bottom when opened (#1450)
- Fixing silent zone not respected when exiting from Jitsi (#1456)
- Fixing "yarn install" failing because of missing rights on some Docker installs (#1457)
- Fixing audio not shut down when exiting a room (#1459)
### Misc
- Finished migrating "Build your map" documentation into the "/docs" directory of this repository (#1417 #1385)
- Refactoring documentation (dedicated page for variables) (#1414)
- Front container code is now completely linted (#1413)
## Version 1.4.15
### Updates
- New scripting API features :
- Use `WA.ui.registerMenuCommand(commandDescriptor: string, options: MenuOptions): Menu` to add a custom menu or an iframe to the menu.
- New `jitsiWidth` parameter to set the width of Jitsi and Cowebsite (#1398 @tabascoeye)
- Refactored the way videos are displayed to better cope for vertical videos (on mobile)
- Fixing reconnection issues after 5 minutes of an inactive tab on Google Chrome
- Changes performed in `WA.room.setPropertyLayer` now have a real-time impact (#1395)
### Bugfixes
- Fixing streams in bubbles sometimes improperly muted when there are more than 2 people in the bubble (#1400 #1402)
- Properly displaying carriage returns in popups (#1388)
- `WA.state` now answers correctly to "in" keyword (#1393)
- Variables can now be nested in group layers (#1406)
## Version 1.4.14
### Updates
- New scripting API features :
- Use `WA.room.loadTileset(url: string) : Promise<number>` to load a tileset from a JSON file.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 KiB

1
README-LOGO.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

BIN
README-MAP.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -1,17 +1,18 @@
![](https://github.com/thecodingmachine/workadventure/workflows/Continuous%20Integration/badge.svg) [![Discord](https://img.shields.io/discord/821338762134290432?label=Discord)](https://discord.gg/YGtngdh9gt)
![WorkAdventure landscape image](README-INTRO.jpg)
![WorkAdventure logo](README-LOGO.svg)
![WorkAdventure office image](README-MAP.png)
Demo here : [https://workadventu.re/](https://workadventu.re/).
Live demo [here](https://play.workadventu.re/@/tcm/workadventure/wa-village).
# Work Adventure
# WorkAdventure
Work Adventure is a web-based collaborative workspace for small to medium teams (2-100 people) presented in the form of a
WorkAdventure is a web-based collaborative workspace presented in the form of a
16-bit video game.
In Work Adventure, you can move around your office and talk to your colleagues (using a video-chat feature that is
triggered when you move next to a colleague).
In WorkAdventure you can move around your office and talk to your colleagues (using a video-chat system, triggered when you approach someone).
See more features for your virtual office: https://workadventu.re/virtual-office
## Setting up a development environment
@ -20,6 +21,7 @@ Install Docker.
Run:
```
cp .env.template .env
docker-compose up -d
```
@ -35,6 +37,9 @@ Note: on some OSes, you will need to add this line to your `/etc/hosts` file:
127.0.0.1 workadventure.localhost
```
Note: If on the first run you get a page with "network error". Try to ``docker-compose stop`` , then ``docker-compose start``.
Note 2: If you are still getting "network error". Make sure you are authorizing the self-signed certificate by entering https://pusher.workadventure.localhost and accepting them.
### MacOS developers, your environment with Vagrant
If you are using MacOS, you can increase Docker performance using Vagrant. If you want more explanations, you can read [this medium article](https://medium.com/better-programming/vagrant-to-increase-docker-performance-with-macos-25b354b0c65c).

View File

@ -40,8 +40,8 @@
},
"homepage": "https://github.com/thecodingmachine/workadventure#readme",
"dependencies": {
"@workadventure/tiled-map-type-guard": "^1.0.0",
"axios": "^0.21.1",
"@workadventure/tiled-map-type-guard": "^1.0.3",
"axios": "^0.21.2",
"busboy": "^0.3.1",
"circular-json": "^0.5.9",
"debug": "^4.3.1",
@ -54,7 +54,6 @@
"prom-client": "^12.0.0",
"query-string": "^6.13.3",
"redis": "^3.1.2",
"systeminformation": "^4.31.1",
"uWebSockets.js": "uNetworking/uWebSockets.js#v18.5.0",
"uuidv4": "^6.0.7"
},

View File

@ -9,12 +9,12 @@ const JITSI_ISS = process.env.JITSI_ISS || "";
const SECRET_JITSI_KEY = process.env.SECRET_JITSI_KEY || "";
const HTTP_PORT = parseInt(process.env.HTTP_PORT || "8080") || 8080;
const GRPC_PORT = parseInt(process.env.GRPC_PORT || "50051") || 50051;
export const SOCKET_IDLE_TIMER = parseInt(process.env.SOCKET_IDLE_TIMER as string) || 30; // maximum time (in second) without activity before a socket is closed
export const TURN_STATIC_AUTH_SECRET = process.env.TURN_STATIC_AUTH_SECRET || "";
export const MAX_PER_GROUP = parseInt(process.env.MAX_PER_GROUP || "4");
export const REDIS_HOST = process.env.REDIS_HOST || undefined;
export const REDIS_PORT = parseInt(process.env.REDIS_PORT || "6379") || 6379;
export const REDIS_PASSWORD = process.env.REDIS_PASSWORD || undefined;
export const STORE_VARIABLES_FOR_LOCAL_MAPS = process.env.STORE_VARIABLES_FOR_LOCAL_MAPS === "true";
export {
MINIMUM_DISTANCE,

View File

@ -26,6 +26,7 @@ import { VariablesManager } from "../Services/VariablesManager";
import { ADMIN_API_URL } from "../Enum/EnvironmentVariable";
import { LocalUrlError } from "../Services/LocalUrlError";
import { emitErrorOnRoomSocket } from "../Services/MessageHelpers";
import { VariableError } from "../Services/VariableError";
export type ConnectCallback = (user: User, group: Group) => void;
export type DisconnectCallback = (user: User, group: Group) => void;
@ -181,6 +182,7 @@ export class GameRoom {
private updateUserGroup(user: User): void {
user.group?.updatePosition();
user.group?.searchForNearbyUsers();
if (user.silent) {
return;
@ -206,6 +208,7 @@ export class GameRoom {
const group: Group = new Group(
this.roomUrl,
[user, closestUser],
this.groupRadius,
this.connectCallback,
this.disconnectCallback,
this.positionNotifier
@ -334,30 +337,62 @@ export class GameRoom {
// First, let's check if "user" is allowed to modify the variable.
const variableManager = await this.getVariableManager();
const readableBy = variableManager.setVariable(name, value, user);
try {
const readableBy = variableManager.setVariable(name, value, user);
// If the variable was not changed, let's not dispatch anything.
if (readableBy === false) {
return;
}
// If the variable was not changed, let's not dispatch anything.
if (readableBy === false) {
return;
}
// TODO: should we batch those every 100ms?
const variableMessage = new VariableWithTagMessage();
variableMessage.setName(name);
variableMessage.setValue(value);
if (readableBy) {
variableMessage.setReadableby(readableBy);
}
// TODO: should we batch those every 100ms?
const variableMessage = new VariableWithTagMessage();
variableMessage.setName(name);
variableMessage.setValue(value);
if (readableBy) {
variableMessage.setReadableby(readableBy);
}
const subMessage = new SubToPusherRoomMessage();
subMessage.setVariablemessage(variableMessage);
const subMessage = new SubToPusherRoomMessage();
subMessage.setVariablemessage(variableMessage);
const batchMessage = new BatchToPusherRoomMessage();
batchMessage.addPayload(subMessage);
const batchMessage = new BatchToPusherRoomMessage();
batchMessage.addPayload(subMessage);
// Dispatch the message on the room listeners
for (const socket of this.roomListeners) {
socket.write(batchMessage);
// Dispatch the message on the room listeners
for (const socket of this.roomListeners) {
socket.write(batchMessage);
}
} catch (e) {
if (e instanceof VariableError) {
// Ok, we have an error setting a variable. Either the user is trying to hack the map... or the map
// is not up to date. So let's try to reload the map from scratch.
if (this.variableManagerLastLoad === undefined) {
throw e;
}
const lastLoaded = new Date().getTime() - this.variableManagerLastLoad.getTime();
if (lastLoaded < 10000) {
console.log(
'An error occurred while setting the "' +
name +
"\" variable. But we tried to reload the map less than 10 seconds ago, so let's fail."
);
// Do not try to reload if we tried to reload less than 10 seconds ago.
throw e;
}
// Reset the variable manager
this.variableManagerPromise = undefined;
this.mapPromise = undefined;
console.log(
'An error occurred while setting the "' + name + "\" variable. Let's reload the map and try again"
);
// Try to set the variable again!
await this.setVariable(name, value, user);
} else {
throw e;
}
}
}
@ -447,9 +482,11 @@ export class GameRoom {
}
private variableManagerPromise: Promise<VariablesManager> | undefined;
private variableManagerLastLoad: Date | undefined;
private getVariableManager(): Promise<VariablesManager> {
if (!this.variableManagerPromise) {
this.variableManagerLastLoad = new Date();
this.variableManagerPromise = this.getMap()
.then((map) => {
const variablesManager = new VariablesManager(this.roomUrl, map);

View File

@ -1,10 +1,10 @@
import { ConnectCallback, DisconnectCallback } from "./GameRoom";
import { ConnectCallback, DisconnectCallback, GameRoom } from "./GameRoom";
import { User } from "./User";
import { PositionInterface } from "_Model/PositionInterface";
import { Movable } from "_Model/Movable";
import { PositionNotifier } from "_Model/PositionNotifier";
import { gaugeManager } from "../Services/GaugeManager";
import { MAX_PER_GROUP } from "../Enum/EnvironmentVariable";
import type { Zone } from "../Model/Zone";
export class Group implements Movable {
private static nextId: number = 1;
@ -13,13 +13,14 @@ export class Group implements Movable {
private users: Set<User>;
private x!: number;
private y!: number;
private hasEditedGauge: boolean = false;
private wasDestroyed: boolean = false;
private roomId: string;
private currentZone: Zone | null = null;
constructor(
roomId: string,
users: User[],
private groupRadius: number,
private connectCallback: ConnectCallback,
private disconnectCallback: DisconnectCallback,
private positionNotifier: PositionNotifier
@ -28,13 +29,6 @@ export class Group implements Movable {
this.users = new Set<User>();
this.id = Group.nextId;
Group.nextId++;
//we only send a event for prometheus metrics if the group lives more than 5 seconds
setTimeout(() => {
if (!this.wasDestroyed) {
this.hasEditedGauge = true;
gaugeManager.incNbGroupsPerRoomGauge(roomId);
}
}, 5000);
users.forEach((user: User) => {
this.join(user);
@ -85,9 +79,22 @@ export class Group implements Movable {
this.y = y;
if (oldX === undefined) {
this.positionNotifier.enter(this);
this.currentZone = this.positionNotifier.enter(this);
} else {
this.positionNotifier.updatePosition(this, { x, y }, { x: oldX, y: oldY });
this.currentZone = this.positionNotifier.updatePosition(this, { x, y }, { x: oldX, y: oldY });
}
}
searchForNearbyUsers(): void {
if (!this.currentZone) return;
for (const user of this.positionNotifier.getAllUsersInSquareAroundZone(this.currentZone)) {
if (user.group || this.isFull()) return; //we ignore users that are already in a group.
const distance = GameRoom.computeDistanceBetweenPositions(user.getPosition(), this.getPosition());
if (distance < this.groupRadius) {
this.join(user);
this.updatePosition();
}
}
}
@ -126,7 +133,6 @@ export class Group implements Movable {
* Usually used when there is only one user left.
*/
destroy(): void {
if (this.hasEditedGauge) gaugeManager.decNbGroupsPerRoomGauge(this.roomId);
for (const user of this.users) {
this.leave(user);
}

View File

@ -12,7 +12,7 @@ import { EmoteCallback, EntersCallback, LeavesCallback, MovesCallback, Zone } fr
import { Movable } from "_Model/Movable";
import { PositionInterface } from "_Model/PositionInterface";
import { ZoneSocket } from "../RoomManager";
import { User } from "_Model/User";
import { User } from "../Model/User";
import { EmoteEventMessage } from "../Messages/generated/messages_pb";
interface ZoneDescriptor {
@ -20,6 +20,17 @@ interface ZoneDescriptor {
j: number;
}
export function* getNearbyDescriptorsMatrix(middleZoneDescriptor: ZoneDescriptor): Generator<ZoneDescriptor> {
for (let n = 0; n < 9; n++) {
const i = middleZoneDescriptor.i + ((n % 3) - 1);
const j = middleZoneDescriptor.j + (Math.floor(n / 3) - 1);
if (i >= 0 && j >= 0) {
yield { i, j };
}
}
}
export class PositionNotifier {
// TODO: we need a way to clean the zones if no one is in the zone and no one listening (to free memory!)
@ -41,14 +52,15 @@ export class PositionNotifier {
};
}
public enter(thing: Movable): void {
public enter(thing: Movable): Zone {
const position = thing.getPosition();
const zoneDesc = this.getZoneDescriptorFromCoordinates(position.x, position.y);
const zone = this.getZone(zoneDesc.i, zoneDesc.j);
zone.enter(thing, null, position);
return zone;
}
public updatePosition(thing: Movable, newPosition: PositionInterface, oldPosition: PositionInterface): void {
public updatePosition(thing: Movable, newPosition: PositionInterface, oldPosition: PositionInterface): Zone {
// Did we change zone?
const oldZoneDesc = this.getZoneDescriptorFromCoordinates(oldPosition.x, oldPosition.y);
const newZoneDesc = this.getZoneDescriptorFromCoordinates(newPosition.x, newPosition.y);
@ -62,9 +74,11 @@ export class PositionNotifier {
// Enter new zone
newZone.enter(thing, oldZone, newPosition);
return newZone;
} else {
const zone = this.getZone(oldZoneDesc.i, oldZoneDesc.j);
zone.move(thing, newPosition);
return zone;
}
}
@ -106,4 +120,16 @@ export class PositionNotifier {
const zone = this.getZone(zoneDesc.i, zoneDesc.j);
zone.emitEmoteEvent(emoteEventMessage);
}
public *getAllUsersInSquareAroundZone(zone: Zone): Generator<User> {
const zoneDescriptor = this.getZoneDescriptorFromCoordinates(zone.x, zone.y);
for (const d of getNearbyDescriptorsMatrix(zoneDescriptor)) {
const zone = this.getZone(d.i, d.j);
for (const thing of zone.getThings()) {
if (thing instanceof User) {
yield thing;
}
}
}
}
}

View File

@ -52,15 +52,6 @@ class GaugeManager {
this.nbClientsGauge.dec();
this.nbClientsPerRoomGauge.dec({ room: roomId });
}
incNbGroupsPerRoomGauge(roomId: string): void {
this.nbGroupsPerRoomCounter.inc({ room: roomId });
this.nbGroupsPerRoomGauge.inc({ room: roomId });
}
decNbGroupsPerRoomGauge(roomId: string): void {
this.nbGroupsPerRoomGauge.dec({ room: roomId });
}
}
export const gaugeManager = new GaugeManager();

View File

View File

@ -5,12 +5,13 @@ import { promisify } from "util";
import { LocalUrlError } from "./LocalUrlError";
import { ITiledMap } from "@workadventure/tiled-map-type-guard";
import { isTiledMap } from "@workadventure/tiled-map-type-guard/dist";
import { STORE_VARIABLES_FOR_LOCAL_MAPS } from "../Enum/EnvironmentVariable";
class MapFetcher {
async fetchMap(mapUrl: string): Promise<ITiledMap> {
// Before trying to make the query, let's verify the map is actually on the open internet (and not a local test map)
if (await this.isLocalUrl(mapUrl)) {
if ((await this.isLocalUrl(mapUrl)) && !STORE_VARIABLES_FOR_LOCAL_MAPS) {
throw new LocalUrlError('URL for map "' + mapUrl + '" targets a local map');
}

View File

@ -0,0 +1,9 @@
/**
* Errors related to variable handling.
*/
export class VariableError extends Error {
constructor(message: string) {
super(message);
Object.setPrototypeOf(this, VariableError.prototype);
}
}

View File

@ -1,10 +1,16 @@
/**
* Handles variables shared between the scripting API and the server.
*/
import { ITiledMap, ITiledMapObject, ITiledMapObjectLayer } from "@workadventure/tiled-map-type-guard/dist";
import {
ITiledMap,
ITiledMapLayer,
ITiledMapObject,
ITiledMapObjectLayer,
} from "@workadventure/tiled-map-type-guard/dist";
import { User } from "_Model/User";
import { variablesRepository } from "./Repository/VariablesRepository";
import { redisClient } from "./RedisClient";
import { VariableError } from "./VariableError";
interface Variable {
defaultValue?: string;
@ -83,25 +89,33 @@ export class VariablesManager {
private static findVariablesInMap(map: ITiledMap): Map<string, Variable> {
const objects = new Map<string, Variable>();
for (const layer of map.layers) {
if (layer.type === "objectgroup") {
for (const object of (layer as ITiledMapObjectLayer).objects) {
if (object.type === "variable") {
if (object.template) {
console.warn(
'Warning, a variable object is using a Tiled "template". WorkAdventure does not support objects generated from Tiled templates.'
);
continue;
}
// We store a copy of the object (to make it immutable)
objects.set(object.name, this.iTiledObjectToVariable(object));
}
}
}
this.recursiveFindVariablesInLayer(layer, objects);
}
return objects;
}
private static recursiveFindVariablesInLayer(layer: ITiledMapLayer, objects: Map<string, Variable>): void {
if (layer.type === "objectgroup") {
for (const object of layer.objects) {
if (object.type === "variable") {
if (object.template) {
console.warn(
'Warning, a variable object is using a Tiled "template". WorkAdventure does not support objects generated from Tiled templates.'
);
continue;
}
// We store a copy of the object (to make it immutable)
objects.set(object.name, this.iTiledObjectToVariable(object));
}
}
} else if (layer.type === "group") {
for (const innerLayer of layer.layers) {
this.recursiveFindVariablesInLayer(innerLayer, objects);
}
}
}
private static iTiledObjectToVariable(object: ITiledMapObject): Variable {
const variable: Variable = {};
@ -161,11 +175,13 @@ export class VariablesManager {
if (this.variableObjects) {
variableObject = this.variableObjects.get(name);
if (variableObject === undefined) {
throw new Error('Trying to set a variable "' + name + '" that is not defined as an object in the map.');
throw new VariableError(
'Trying to set a variable "' + name + '" that is not defined as an object in the map.'
);
}
if (variableObject.writableBy && !user.tags.includes(variableObject.writableBy)) {
throw new Error(
throw new VariableError(
'Trying to set a variable "' +
name +
'". User "' +

View File

@ -0,0 +1,67 @@
import "jasmine";
import { getNearbyDescriptorsMatrix } from "../src/Model/PositionNotifier";
describe("getNearbyDescriptorsMatrix", () => {
it("should create a matrix of coordinates in a square around the parameter", () => {
const matrix = [];
for (const d of getNearbyDescriptorsMatrix({ i: 1, j: 1 })) {
matrix.push(d);
}
expect(matrix).toEqual([
{ i: 0, j: 0 },
{ i: 1, j: 0 },
{ i: 2, j: 0 },
{ i: 0, j: 1 },
{ i: 1, j: 1 },
{ i: 2, j: 1 },
{ i: 0, j: 2 },
{ i: 1, j: 2 },
{ i: 2, j: 2 },
]);
});
it("should create a matrix of coordinates in a square around the parameter bis", () => {
const matrix = [];
for (const d of getNearbyDescriptorsMatrix({ i: 8, j: 3 })) {
matrix.push(d);
}
expect(matrix).toEqual([
{ i: 7, j: 2 },
{ i: 8, j: 2 },
{ i: 9, j: 2 },
{ i: 7, j: 3 },
{ i: 8, j: 3 },
{ i: 9, j: 3 },
{ i: 7, j: 4 },
{ i: 8, j: 4 },
{ i: 9, j: 4 },
]);
});
it("should not create a matrix with negative coordinates", () => {
const matrix = [];
for (const d of getNearbyDescriptorsMatrix({ i: 0, j: 0 })) {
matrix.push(d);
}
expect(matrix).toEqual([
{ i: 0, j: 0 },
{ i: 1, j: 0 },
{ i: 0, j: 1 },
{ i: 1, j: 1 },
]);
});
/*it("should not create a matrix with coordinates bigger than its dimmensions", () => {
const matrix = getNearbyDescriptorsMatrix({i: 4, j: 4}, 5, 5);
expect(matrix).toEqual([
{i: 3,j: 3},
{i: 4,j: 3},
{i: 3,j: 4},
{i: 4,j: 4},
])
});*/
});

View File

@ -194,10 +194,10 @@
semver "^7.3.2"
tsutils "^3.17.1"
"@workadventure/tiled-map-type-guard@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@workadventure/tiled-map-type-guard/-/tiled-map-type-guard-1.0.0.tgz#02524602ee8b2688429a1f56df1d04da3fc171ba"
integrity sha512-Mc0SE128otQnYlScQWVaQVyu1+CkailU/FTBh09UTrVnBAhyMO+jIn9vT9+Dv244xq+uzgQDpXmiVdjgrYFQ+A==
"@workadventure/tiled-map-type-guard@^1.0.3":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@workadventure/tiled-map-type-guard/-/tiled-map-type-guard-1.0.3.tgz#62c2061cacbe1360b84162af0b7e4639ed8bfa7e"
integrity sha512-pUMxBBZHYAFkpnGWZAVAE8+M+Wn9UtzqZhXvBBBbB1gEakHIka7ahdTGfh0DgRaWrVszVXOP3tf49Dhdmn9pDg==
dependencies:
generic-type-guard "^3.4.1"
@ -381,12 +381,12 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
axios@^0.21.1:
version "0.21.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
axios@^0.21.2:
version "0.21.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017"
integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==
dependencies:
follow-redirects "^1.10.0"
follow-redirects "^1.14.0"
balanced-match@^1.0.0:
version "1.0.0"
@ -554,7 +554,7 @@ chokidar@^3.4.0:
optionalDependencies:
fsevents "~2.1.2"
chownr@^1.1.1:
chownr@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
@ -1142,10 +1142,10 @@ flatted@^2.0.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
follow-redirects@^1.10.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==
follow-redirects@^1.14.0:
version "1.14.4"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379"
integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==
for-in@^1.0.2:
version "1.0.2"
@ -1159,7 +1159,7 @@ fragment-cache@^0.2.1:
dependencies:
map-cache "^0.2.2"
fs-minipass@^1.2.5:
fs-minipass@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
@ -1969,7 +1969,7 @@ minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
minipass@^2.6.0, minipass@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
@ -1977,7 +1977,7 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
safe-buffer "^5.1.2"
yallist "^3.0.0"
minizlib@^1.2.1:
minizlib@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
@ -1992,7 +1992,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3:
mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@ -2290,9 +2290,9 @@ path-key@^3.0.0, path-key@^3.1.0:
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
path-parse@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
path-type@^1.0.0:
version "1.1.0"
@ -2578,7 +2578,7 @@ rxjs@^6.6.7:
dependencies:
tslib "^1.9.0"
safe-buffer@^5.0.1, safe-buffer@^5.1.2:
safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@ -2962,11 +2962,6 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
systeminformation@^4.31.1:
version "4.31.1"
resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-4.31.1.tgz#2e02c26987494d4b6a4d2d83138724593bc98d50"
integrity sha512-dVCDWNMN8ncMZo5vbMCA5dpAdMgzafK2ucuJy5LFmGtp1cG6farnPg8QNvoOSky9SkFoEX1Aw0XhcOFV6TnLYA==
table@^5.2.3:
version "5.4.6"
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
@ -2978,17 +2973,17 @@ table@^5.2.3:
string-width "^3.0.0"
tar@^4.4.2:
version "4.4.13"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
version "4.4.19"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3"
integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==
dependencies:
chownr "^1.1.1"
fs-minipass "^1.2.5"
minipass "^2.8.6"
minizlib "^1.2.1"
mkdirp "^0.5.0"
safe-buffer "^5.1.2"
yallist "^3.0.3"
chownr "^1.1.4"
fs-minipass "^1.2.7"
minipass "^2.9.0"
minizlib "^1.3.3"
mkdirp "^0.5.5"
safe-buffer "^5.2.1"
yallist "^3.1.1"
tdigest@^0.1.1:
version "0.1.1"
@ -3282,7 +3277,7 @@ y18n@^3.2.0:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696"
integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==
yallist@^3.0.0, yallist@^3.0.3:
yallist@^3.0.0, yallist@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==

View File

@ -429,9 +429,9 @@
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"path-type": {
"version": "1.1.0",

View File

@ -315,8 +315,8 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
path-parse@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
path-type@^1.0.0:
version "1.1.0"

View File

@ -38,6 +38,7 @@ services:
JITSI_URL: $JITSI_URL
JITSI_PRIVATE_MODE: "$JITSI_PRIVATE_MODE"
PUSHER_URL: //pusher.${DOMAIN}
ICON_URL: //icon.${DOMAIN}
TURN_SERVER: "${TURN_SERVER}"
TURN_USER: "${TURN_USER}"
TURN_PASSWORD: "${TURN_PASSWORD}"
@ -65,6 +66,7 @@ services:
API_URL: back:50051
JITSI_URL: $JITSI_URL
JITSI_ISS: $JITSI_ISS
FRONT_URL: https://play.${DOMAIN}
labels:
- "traefik.http.routers.pusher.rule=Host(`pusher.${DOMAIN}`)"
- "traefik.http.routers.pusher.entryPoints=web,traefik"
@ -98,3 +100,15 @@ services:
- "traefik.http.routers.back-ssl.service=back"
- "traefik.http.routers.back-ssl.tls.certresolver=myresolver"
restart: unless-stopped
icon:
image: matthiasluedtke/iconserver:v3.13.0
labels:
- "traefik.http.routers.icon.rule=Host(`icon.${DOMAIN}`)"
- "traefik.http.routers.icon.entryPoints=web,traefik"
- "traefik.http.services.icon.loadbalancer.server.port=8080"
- "traefik.http.routers.icon-ssl.rule=Host(`icon.${DOMAIN}`)"
- "traefik.http.routers.icon-ssl.entryPoints=websecure"
- "traefik.http.routers.icon-ssl.tls=true"
- "traefik.http.routers.icon-ssl.service=icon"
- "traefik.http.routers.icon-ssl.tls.certresolver=myresolver"

2
debian/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*~
\#*\#

10
debian/README.Debian vendored Normal file
View File

@ -0,0 +1,10 @@
workadventure for Debian
-----------------------
To install:
- Install workadventure-back workadventure-front workadventure-pusher
- Go to "/var/lib/workadvenure/{back,pusher}" and run "yarn install --production"
- Serve "/usr/src/workadventure/front" as web page
- Provide configuration for the UI in "/usr/src/workadventure/front/config.js"
-- unknown <felix@localhost> Sat, 17 Apr 2021 14:06:51 +0200

24
debian/changelog vendored Normal file
View File

@ -0,0 +1,24 @@
workadventure (1.6.3-1) unstable; urgency=medium
* Update to 1.6.3
-- unknown <felix@localhost> Mon, 29 Nov 2021 20:10:29 +0200
workadventure (1.4.12-1) unstable; urgency=medium
* Update to 1.4.12
-- unknown <felix@localhost> Fri, 06 Aug 2021 15:00:35 +0200
workadventure (1.2.4-2) unstable; urgency=medium
* Fix chat dialog spacing
* Improve systemd unit for backend
-- unknown <felix@localhost> Wed, 21 Apr 2021 21:55:41 +0200
workadventure (1.2.4-1) unstable; urgency=medium
* Initial release
-- unknown <felix@localhost> Sat, 17 Apr 2021 14:06:51 +0200

32
debian/control vendored Normal file
View File

@ -0,0 +1,32 @@
Source: workadventure
Section: unknown
Priority: optional
Maintainer: unknown <felix@localhost>
Build-Depends: debhelper-compat (= 12), yarnpkg
Standards-Version: 4.5.1
Homepage: <insert the upstream URL, if relevant>
Rules-Requires-Root: no
Package: workadventure-back
Architecture: all
Depends: ${misc:Depends}, yarnpkg
Description: <insert up to 60 chars description>
<insert long description, indented with spaces>
Package: workadventure-pusher
Architecture: all
Depends: ${misc:Depends}, yarnpkg
Description: <insert up to 60 chars description>
<insert long description, indented with spaces>
Package: workadventure-front
Architecture: all
Depends: ${misc:Depends}
Description: <insert up to 60 chars description>
<insert long description, indented with spaces>
Package: workadventure-front-map
Architecture: all
Depends: ${misc:Depends}, workadventure-front
Description: <insert up to 60 chars description>
<insert long description, indented with spaces>

32
debian/copyright vendored Normal file
View File

@ -0,0 +1,32 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: workadventure
Upstream-Contact: <preferred name and address to reach the upstream project>
Source: <url://example.com>
Files: *
Copyright: 2021 TheCodingMachine
License: AGPL-3 with Commons Clause
<Put the license of the package here indented by 1 space>
<This follows the format of Description: lines in control file>
.
<Including paragraphs>
Files: debian/*
Copyright: 2021 unknown <felix@localhost>
License: GPL-2+
This package 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 2 of the License, or
(at your option) any later version.
.
This package 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/>
.
On Debian systems, the complete text of the GNU General
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".

49
debian/rules vendored Executable file
View File

@ -0,0 +1,49 @@
#!/usr/bin/make -f
%:
dh $@
override_dh_install:
install -Dt debian/workadventure-front/usr/src/workadventure/front front/dist/index.html
install -d debian/workadventure-front/usr/src/workadventure/front/js
cp -r front/dist/static front/dist/fonts front/dist/resources front/dist/*.js front/dist/*.png front/dist/*.css debian/workadventure-front/usr/src/workadventure/front
cp -r front/dist/js/*.js debian/workadventure-front/usr/src/workadventure/front/js
install -d debian/workadventure-front-map/usr/src/workadventure/front/js
cp -r front/dist/*.js.map front/dist/*.css.map debian/workadventure-front-map/usr/src/workadventure/front
cp -r front/dist/js/*.js.map debian/workadventure-front-map/usr/src/workadventure/front/js
install -d debian/workadventure-back/usr/src/workadventure/back
cp -r back/dist/server.js back/dist/src debian/workadventure-back/usr/src/workadventure/back
cp back/yarn.lock back/package.json debian/workadventure-back/usr/src/workadventure/back
install -d debian/workadventure-back/var/lib/workadventure/back
ln -s /usr/src/workadventure/back/package.json /usr/src/workadventure/back/yarn.lock /usr/src/workadventure/back/src /usr/src/workadventure/back/server.js debian/workadventure-back/var/lib/workadventure/back/
install -d debian/workadventure-pusher/usr/src/workadventure/pusher
cp -r pusher/dist/server.js pusher/dist/src debian/workadventure-pusher/usr/src/workadventure/pusher
cp pusher/yarn.lock pusher/package.json debian/workadventure-pusher/usr/src/workadventure/pusher
install -d debian/workadventure-back/var/lib/workadventure/pusher
ln -s /usr/src/workadventure/pusher/package.json /usr/src/workadventure/pusher/yarn.lock /usr/src/workadventure/pusher/src /usr/src/workadventure/pusher/server.js debian/workadventure-back/var/lib/workadventure/pusher/
front/src/Messages/generated:
ln -s ../../../messages/generated front/src/Messages
back/src/Messages/generated:
ln -s ../../../messages/generated back/src/Messages
pusher/src/Messages/generated:
ln -s ../../../messages/generated pusher/src/Messages
override_dh_auto_build: front/src/Messages/generated back/src/Messages/generated pusher/src/Messages/generated
cd messages && yarnpkg install && yarnpkg run proto
rm -Rf front/dist/js
cd front && ./templater.sh && yarnpkg install && yarnpkg run build
cd back && yarnpkg install && yarnpkg run tsc
cd pusher && yarnpkg install && yarnpkg run tsc
# dh_make generated override targets
# This is example for Cmake (See https://bugs.debian.org/641051 )
#override_dh_auto_configure:
# dh_auto_configure -- \
# -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)

1
debian/source/format vendored Normal file
View File

@ -0,0 +1 @@
3.0 (quilt)

13
debian/workadventure-back.service vendored Normal file
View File

@ -0,0 +1,13 @@
[Unit]
Description="Workadventure Backend"
[Service]
User=webspace-user
WorkingDirectory=/var/lib/workadventure/back
Environment=NODE_PATH=node_modules
ExecStart=node --max-old-space-size=4096 server.js
ProtectSystem=Full
ProtectHome=true
[Install]
WantedBy=multi-user.target

2
debian/workadventure-docs.docs vendored Normal file
View File

@ -0,0 +1,2 @@
README.source
README.Debian

15
debian/workadventure-pusher.service vendored Normal file
View File

@ -0,0 +1,15 @@
[Unit]
Description="Workadventure Pusher"
[Service]
User=webspace-user
WorkingDirectory=/var/lib/workadventure/pusher
Environment=NODE_PATH=node_modules
Environment=PUSHER_HTTP_PORT=8081
Environment=API_URL=localhost:50051
ExecStart=node --max-old-space-size=4096 server.js
ProtectSystem=Full
ProtectHome=true
[Install]
WantedBy=multi-user.target

View File

@ -4,7 +4,7 @@
local tag = namespace,
local url = namespace+".test.workadventu.re",
// develop branch does not use admin because of issue with SSL certificate of admin as of now.
local adminUrl = if namespace == "master" || namespace == "develop" || std.startsWith(namespace, "admin") then "https://"+url else null,
local adminUrl = if std.startsWith(namespace, "admin") then "https://"+url else null,
"$schema": "https://raw.githubusercontent.com/thecodingmachine/deeployer/master/deeployer.schema.json",
"version": "1.0",
"containers": {
@ -17,7 +17,6 @@
"ports": [8080, 50051],
"env": {
"SECRET_KEY": "tempSecretKeyNeedsToChange",
"ADMIN_API_TOKEN": env.ADMIN_API_TOKEN,
"JITSI_ISS": env.JITSI_ISS,
"JITSI_URL": env.JITSI_URL,
"SECRET_JITSI_KEY": env.SECRET_JITSI_KEY,
@ -25,6 +24,7 @@
"REDIS_HOST": "redis",
} + (if adminUrl != null then {
"ADMIN_API_URL": adminUrl,
"ADMIN_API_TOKEN": env.ADMIN_API_TOKEN,
} else {})
},
"back2": {
@ -36,7 +36,6 @@
"ports": [8080, 50051],
"env": {
"SECRET_KEY": "tempSecretKeyNeedsToChange",
"ADMIN_API_TOKEN": env.ADMIN_API_TOKEN,
"JITSI_ISS": env.JITSI_ISS,
"JITSI_URL": env.JITSI_URL,
"SECRET_JITSI_KEY": env.SECRET_JITSI_KEY,
@ -44,6 +43,7 @@
"REDIS_HOST": "redis",
} + (if adminUrl != null then {
"ADMIN_API_URL": adminUrl,
"ADMIN_API_TOKEN": env.ADMIN_API_TOKEN,
} else {})
},
"pusher": {
@ -55,13 +55,15 @@
"ports": [8080],
"env": {
"SECRET_KEY": "tempSecretKeyNeedsToChange",
"ADMIN_API_TOKEN": env.ADMIN_API_TOKEN,
"JITSI_ISS": env.JITSI_ISS,
"JITSI_URL": env.JITSI_URL,
"API_URL": "back1:50051,back2:50051",
"SECRET_JITSI_KEY": env.SECRET_JITSI_KEY,
"FRONT_URL": "https://play-"+url
} + (if adminUrl != null then {
"ADMIN_API_URL": adminUrl,
"ADMIN_API_TOKEN": env.ADMIN_API_TOKEN,
"ADMIN_SOCKETS_TOKEN": env.ADMIN_SOCKETS_TOKEN,
} else {})
},
"front": {
@ -75,11 +77,13 @@
"UPLOADER_URL": "//uploader-"+url,
"ADMIN_URL": "//"+url,
"JITSI_URL": env.JITSI_URL,
#POSTHOG
"POSTHOG_API_KEY": if namespace == "master" then env.POSTHOG_API_KEY else "",
"POSTHOG_URL": if namespace == "master" then env.POSTHOG_URL else "",
"SECRET_JITSI_KEY": env.SECRET_JITSI_KEY,
"TURN_SERVER": "turn:coturn.workadventu.re:443,turns:coturn.workadventu.re:443",
"JITSI_PRIVATE_MODE": if env.SECRET_JITSI_KEY != '' then "true" else "false",
"START_ROOM_URL": "/_/global/maps-"+url+"/Floor0/floor0.json"
//"GA_TRACKING_ID": "UA-10196481-11"
"START_ROOM_URL": "/_/global/maps-"+url+"/starter/map.json"
}
},
"uploader": {
@ -101,6 +105,7 @@
},
"redis": {
"image": "redis:6",
"ports": [6379]
}
},
"config": {

View File

@ -28,8 +28,9 @@ services:
NODE_ENV: development
PUSHER_URL: /pusher
UPLOADER_URL: /uploader
ADMIN_URL: /admin
#ADMIN_URL: /admin
MAPS_URL: /maps
ICON_URL: /icon
STARTUP_COMMAND_1: ./templater.sh
STARTUP_COMMAND_2: yarn install
TURN_SERVER: "turn:localhost:3478,turns:localhost:5349"
@ -40,6 +41,7 @@ services:
TURN_USER: ""
TURN_PASSWORD: ""
START_ROOM_URL: "$START_ROOM_URL"
DISABLE_ANONYMOUS: "$DISABLE_ANONYMOUS"
command: yarn run start
volumes:
- ./front:/usr/src/app
@ -60,6 +62,8 @@ services:
environment:
DEBUG: "*"
STARTUP_COMMAND_1: yarn install
# wait for files generated by "messages" container to exists
STARTUP_COMMAND_2: while [ ! -f /usr/src/app/src/Messages/generated/messages_pb.js ]; do sleep 1; done
SECRET_JITSI_KEY: "$SECRET_JITSI_KEY"
SECRET_KEY: yourSecretKey
ADMIN_API_TOKEN: "$ADMIN_API_TOKEN"
@ -70,6 +74,9 @@ services:
OPID_CLIENT_ID: $OPID_CLIENT_ID
OPID_CLIENT_SECRET: $OPID_CLIENT_SECRET
OPID_CLIENT_ISSUER: $OPID_CLIENT_ISSUER
OPID_CLIENT_REDIRECT_URL: $OPID_CLIENT_REDIRECT_URL
OPID_PROFILE_SCREEN_PROVIDER: $OPID_PROFILE_SCREEN_PROVIDER
DISABLE_ANONYMOUS: $DISABLE_ANONYMOUS
volumes:
- ./pusher:/usr/src/app
labels:
@ -117,6 +124,8 @@ services:
environment:
DEBUG: "*"
STARTUP_COMMAND_1: yarn install
# wait for files generated by "messages" container to exists
STARTUP_COMMAND_2: while [ ! -f /usr/src/app/src/Messages/generated/messages_pb.js ]; do sleep 1; done
SECRET_KEY: yourSecretKey
SECRET_JITSI_KEY: "$SECRET_JITSI_KEY"
ALLOW_ARTILLERY: "true"
@ -177,6 +186,20 @@ services:
redis:
image: redis:6
icon:
image: matthiasluedtke/iconserver:v3.13.0
labels:
- "traefik.http.middlewares.strip-icon-prefix.stripprefix.prefixes=/icon"
- "traefik.http.routers.icon.rule=PathPrefix(`/icon`)"
- "traefik.http.routers.icon.middlewares=strip-icon-prefix@docker"
- "traefik.http.routers.icon.entryPoints=web"
- "traefik.http.services.icon.loadbalancer.server.port=8080"
- "traefik.http.routers.icon-ssl.rule=PathPrefix(`/icon`)"
- "traefik.http.routers.icon-ssl.middlewares=strip-icon-prefix@docker"
- "traefik.http.routers.icon-ssl.entryPoints=websecure"
- "traefik.http.routers.icon-ssl.tls=true"
- "traefik.http.routers.icon-ssl.service=icon"
# coturn:
# image: coturn/coturn:4.5.2
# command:

View File

@ -0,0 +1,12 @@
version: "3"
services:
testcafe:
image: testcafe/testcafe:1.17.1
working_dir: /tests
environment:
BROWSER: "chromium --use-fake-device-for-media-stream"
volumes:
- ./tests:/tests
- ./maps:/maps
# security_opt:
# - seccomp:unconfined

View File

@ -17,6 +17,12 @@ services:
- front
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
default:
aliases:
- 'play.workadventure.localhost'
- 'pusher.workadventure.localhost'
- 'maps.workadventure.localhost'
front:
image: thecodingmachine/nodejs:14
@ -28,7 +34,8 @@ services:
NODE_ENV: development
PUSHER_URL: //pusher.workadventure.localhost
UPLOADER_URL: //uploader.workadventure.localhost
ADMIN_URL: //workadventure.localhost
#ADMIN_URL: //workadventure.localhost
ICON_URL: //icon.workadventure.localhost
STARTUP_COMMAND_1: ./templater.sh
STARTUP_COMMAND_2: yarn install
STUN_SERVER: "stun:stun.l.google.com:19302"
@ -42,6 +49,8 @@ services:
START_ROOM_URL: "$START_ROOM_URL"
MAX_PER_GROUP: "$MAX_PER_GROUP"
MAX_USERNAME_LENGTH: "$MAX_USERNAME_LENGTH"
DISABLE_ANONYMOUS: "$DISABLE_ANONYMOUS"
OPID_LOGIN_SCREEN_PROVIDER: "$OPID_LOGIN_SCREEN_PROVIDER"
command: yarn run start
volumes:
- ./front:/usr/src/app
@ -60,6 +69,8 @@ services:
environment:
DEBUG: "socket:*"
STARTUP_COMMAND_1: yarn install
# wait for files generated by "messages" container to exists
STARTUP_COMMAND_2: while [ ! -f /usr/src/app/src/Messages/generated/messages_pb.js ]; do sleep 1; done
SECRET_JITSI_KEY: "$SECRET_JITSI_KEY"
SECRET_KEY: yourSecretKey
ADMIN_API_TOKEN: "$ADMIN_API_TOKEN"
@ -70,6 +81,9 @@ services:
OPID_CLIENT_ID: $OPID_CLIENT_ID
OPID_CLIENT_SECRET: $OPID_CLIENT_SECRET
OPID_CLIENT_ISSUER: $OPID_CLIENT_ISSUER
OPID_CLIENT_REDIRECT_URL: $OPID_CLIENT_REDIRECT_URL
OPID_PROFILE_SCREEN_PROVIDER: $OPID_PROFILE_SCREEN_PROVIDER
DISABLE_ANONYMOUS: $DISABLE_ANONYMOUS
volumes:
- ./pusher:/usr/src/app
labels:
@ -111,6 +125,8 @@ services:
environment:
DEBUG: "*"
STARTUP_COMMAND_1: yarn install
# wait for files generated by "messages" container to exists
STARTUP_COMMAND_2: while [ ! -f /usr/src/app/src/Messages/generated/messages_pb.js ]; do sleep 1; done
SECRET_KEY: yourSecretKey
SECRET_JITSI_KEY: "$SECRET_JITSI_KEY"
ALLOW_ARTILLERY: "true"
@ -121,6 +137,7 @@ services:
MAX_PER_GROUP: "MAX_PER_GROUP"
REDIS_HOST: redis
NODE_ENV: development
STORE_VARIABLES_FOR_LOCAL_MAPS: "true"
volumes:
- ./back:/usr/src/app
labels:
@ -177,6 +194,17 @@ services:
- "traefik.http.routers.redisinsight-ssl.tls=true"
- "traefik.http.routers.redisinsight-ssl.service=redisinsight"
icon:
image: matthiasluedtke/iconserver:v3.13.0
labels:
- "traefik.http.routers.icon.rule=Host(`icon.workadventure.localhost`)"
- "traefik.http.routers.icon.entryPoints=web"
- "traefik.http.services.icon.loadbalancer.server.port=8080"
- "traefik.http.routers.icon-ssl.rule=Host(`icon.workadventure.localhost`)"
- "traefik.http.routers.icon-ssl.entryPoints=websecure"
- "traefik.http.routers.icon-ssl.tls=true"
- "traefik.http.routers.icon-ssl.service=icon"
# coturn:
# image: coturn/coturn:4.5.2
# command:

View File

@ -7,14 +7,14 @@ not overwrite existing ones) and click on the animation editor:
<div class="px-5 card rounded d-inline-block">
<img class="document-img" src="https://workadventu.re/img/docs/anims/camera.png" alt="" />
<img class="document-img" src="images/anims/camera.png" alt="" />
</div>
You can now add all tiles that should be part of the animation via drag and drop to the "playlist" and adjust the frame duration:
<div>
<figure class="figure">
<img class="figure-img img-fluid rounded" src="https://workadventu.re/img/docs/anims/animation_editor.png" alt="" />
<img class="figure-img img-fluid rounded" src="images/anims/animation_editor.png" alt="" />
<figcaption class="figure-caption">The tile animation editor</figcaption>
</figure>
</div>
@ -24,7 +24,7 @@ You can preview animations directly in Tiled, using the "Show tile animations" o
<div>
<figure class="figure">
<img class="figure-img img-fluid rounded" src="https://workadventu.re/img/docs/anims/settings_show_animations.png" alt="" />
<img class="figure-img img-fluid rounded" src="images/anims/settings_show_animations.png" alt="" />
<figcaption class="figure-caption">The Show Tile Animations option</figcaption>
</figure>
</div>

View File

@ -15,7 +15,7 @@ When controls are disabled, the user cannot move anymore using keyboard input. T
Example:
```javascript
WA.room.onEnterZone('myZone', () => {
WA.room.onEnterLayer('myZone').subscribe(() => {
WA.controls.disablePlayerControls();
WA.ui.openPopup("popupRectangle", 'This is an imporant message!', [{
label: "Got it!",
@ -25,5 +25,5 @@ WA.room.onEnterZone('myZone', () => {
popup.close();
}
}]);
});
})
```

View File

@ -3,18 +3,21 @@
The list of functions below is **deprecated**. You should not use those but. use the replacement functions.
- Method `WA.sendChatMessage` is deprecated. It has been renamed to `WA.chat.sendChatMessage`.
- Method `WA.disablePlayerControls` is deprecated. It has been renamed to `WA.controls.disablePlayerControls`.
- Method `WA.restorePlayerControls` is deprecated. It has been renamed to `WA.controls.restorePlayerControls`.
- Method `WA.sendChatMessage` is deprecated. It has been renamed to [`WA.chat.sendChatMessage`](api-chat.md#sending-a-message-in-the-chat).
- Method `WA.disablePlayerControls` is deprecated. It has been renamed to [`WA.controls.disablePlayerControls`](api-controls.md#disabling--restoring-controls).
- Method `WA.restorePlayerControls` is deprecated. It has been renamed to [`WA.controls.restorePlayerControls`](api-controls.md#disabling--restoring-controls).
- Method `WA.displayBubble` is deprecated. It has been renamed to `WA.ui.displayBubble`.
- Method `WA.removeBubble` is deprecated. It has been renamed to `WA.ui.removeBubble`.
- Method `WA.openTab` is deprecated. It has been renamed to `WA.nav.openTab`.
- Method `WA.loadSound` is deprecated. It has been renamed to `WA.sound.loadSound`.
- Method `WA.goToPage` is deprecated. It has been renamed to `WA.nav.goToPage`.
- Method `WA.goToRoom` is deprecated. It has been renamed to `WA.nav.goToRoom`.
- Method `WA.openCoWebSite` is deprecated. It has been renamed to `WA.nav.openCoWebSite`.
- Method `WA.closeCoWebSite` is deprecated. It has been renamed to `WA.nav.closeCoWebSite`.
- Method `WA.openPopup` is deprecated. It has been renamed to `WA.ui.openPopup`.
- Method `WA.onChatMessage` is deprecated. It has been renamed to `WA.chat.onChatMessage`.
- Method `WA.onEnterZone` is deprecated. It has been renamed to `WA.room.onEnterZone`.
- Method `WA.onLeaveZone` is deprecated. It has been renamed to `WA.room.onLeaveZone`.
- Method `WA.openTab` is deprecated. It has been renamed to [`WA.nav.openTab`](api-nav.md#opening-a-web-page-in-a-new-tab).
- Method `WA.loadSound` is deprecated. It has been renamed to [`WA.sound.loadSound`](api-sound.md#load-a-sound-from-an-url).
- Method `WA.goToPage` is deprecated. It has been renamed to [`WA.nav.goToPage`](api-nav.md#opening-a-web-page-in-the-current-tab).
- Method `WA.goToRoom` is deprecated. It has been renamed to [`WA.nav.goToRoom`](api-nav.md#going-to-a-different-map-from-the-script).
- Method `WA.openCoWebSite` is deprecated. It has been renamed to [`WA.nav.openCoWebSite`](api-nav.md#openingclosing-web-page-in-co-websites).
- Method `WA.closeCoWebSite` is deprecated. It has been remove and [replace by a function close](api-nav.md#openingclosing-web-page-in-co-websites).
- Method `WA.openPopup` is deprecated. It has been renamed to [`WA.ui.openPopup`](api-ui.md#opening-a-popup).
- Method `WA.onChatMessage` is deprecated. It has been renamed to [`WA.chat.onChatMessage`](api-chat.md#listening-to-messages-from-the-chat).
- Method `WA.onEnterZone` is deprecated. It has been renamed to [`WA.room.onEnterZone`](api-room.md#detecting-when-the-user-entersleaves-a-layer).
- Method `WA.onLeaveZone` is deprecated. It has been renamed to [`WA.room.onLeaveZone`](api-room.md#detecting-when-the-user-entersleaves-a-layer).
- Method `WA.ui.registerMenuCommand` parameter `callback` is deprecated. Use [`WA.ui.registerMenuCommand(commandDescriptor: string, options: MenuOptions)`](api-ui.md#add-custom-menu).
- Method `WA.room.onEnterZone` is deprecated. Use instead [`WA.room.onEnterLayer`](api-room.md#detecting-when-the-user-entersleaves-a-layer).
- Method `WA.room.onLeaveZone` is deprecated. Use instead [`WA.room.onLeaveLayer`](api-room.md#detecting-when-the-user-entersleaves-a-layer).

View File

@ -49,19 +49,34 @@ WA.nav.goToRoom('../otherMap/map.json');
WA.nav.goToRoom("/_/global/<path to global map>.json#start-layer-2")
```
### Opening/closing a web page in an iFrame
### Opening/closing web page in Co-Websites
```
WA.nav.openCoWebSite(url: string, allowApi: boolean = false, allowPolicy: string = ""): void
WA.nav.closeCoWebSite(): void
WA.nav.openCoWebSite(url: string, allowApi: boolean = false, allowPolicy: string = "", position: number = 0): Promise<CoWebsite>
```
Opens the webpage at "url" in an iFrame (on the right side of the screen) or close that iFrame. `allowApi` allows the webpage to use the "IFrame API" and execute script (it is equivalent to putting the `openWebsiteAllowApi` property in the map). `allowPolicy` grants additional access rights to the iFrame. The `allowPolicy` parameter is turned into an [`allow` feature policy in the iFrame](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allow).
Opens the webpage at "url" in an iFrame (on the right side of the screen) or close that iFrame. `allowApi` allows the webpage to use the "IFrame API" and execute script (it is equivalent to putting the `openWebsiteAllowApi` property in the map). `allowPolicy` grants additional access rights to the iFrame. The `allowPolicy` parameter is turned into an [`allow` feature policy in the iFrame](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allow), position in whitch slot the web page will be open.
You can have only 5 co-wbesites open simultaneously.
Example:
```javascript
WA.nav.openCoWebSite('https://www.wikipedia.org/');
const coWebsite = await WA.nav.openCoWebSite('https://www.wikipedia.org/');
const coWebsiteWorkAdventure = await WA.nav.openCoWebSite('https://workadventu.re/', true, "", 1);
// ...
WA.nav.closeCoWebSite();
coWebsite.close();
```
### Get all Co-Websites
```
WA.nav.getCoWebSites(): Promise<CoWebsite[]>
```
Get all opened co-websites with their ids and positions.
Example:
```javascript
const coWebsites = await WA.nav.getCowebSites();
```

View File

@ -68,7 +68,9 @@ The event has the following attributes :
* **moving (boolean):** **true** when the current player is moving, **false** otherwise.
* **direction (string):** **"right"** | **"left"** | **"down"** | **"top"** the direction where the current player is moving.
* **x (number):** coordinate X of the current player.
* **y (number):** coordinate Y of the current player.
* **y (number):** coordinate Y of the current player.
* **oldX (number):** old coordinate X of the current player.
* **oldY (number):** old coordinate Y of the current player.
**callback:** the function that will be called when the current player is moving. It contains the event.

View File

@ -7,7 +7,7 @@ If you use group layers in your map, to reference a layer in a group you will ne
Example :
<div class="row">
<div class="col">
<img src="https://workadventu.re/img/docs/groupLayer.png" class="figure-img img-fluid rounded" alt="" />
<img src="images/groupLayer.png" class="figure-img img-fluid rounded" alt="" />
</div>
</div>
@ -17,35 +17,27 @@ The name of the layers of this map are :
* `bottom/build/carpet`
* `wall`
### Detecting when the user enters/leaves a zone
### Detecting when the user enters/leaves a layer
```
WA.room.onEnterZone(name: string, callback: () => void): void
WA.room.onLeaveZone(name: string, callback: () => void): void
WA.room.onEnterLayer(name: string): Subscription
WA.room.onLeaveLayer(name: string): Subscription
```
Listens to the position of the current user. The event is triggered when the user enters or leaves a given zone. The name of the zone is stored in the map, on a dedicated layer with the `zone` property.
Listens to the position of the current user. The event is triggered when the user enters or leaves a given layer.
<div>
<figure class="figure">
<img src="https://workadventu.re/img/docs/trigger_event.png" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">The `zone` property, applied on a layer</figcaption>
</figure>
</div>
* **name**: the name of the zone, as defined in the `zone` property.
* **callback**: the function that will be called when a user enters or leaves the zone.
* **name**: the name of the layer who as defined in Tiled.
Example:
```javascript
WA.room.onEnterZone('myZone', () => {
WA.room.onEnterLayer('myLayer').subscribe(() => {
WA.chat.sendChatMessage("Hello!", 'Mr Robot');
})
});
WA.room.onLeaveZone('myZone', () => {
WA.room.onLeaveLayer('myLayer').subscribe(() => {
WA.chat.sendChatMessage("Goodbye!", 'Mr Robot');
})
});
```
### Show / Hide a layer
@ -71,7 +63,7 @@ WA.room.setProperty(layerName : string, propertyName : string, propertyValue : s
Set the value of the `propertyName` property of the layer `layerName` at `propertyValue`. If the property doesn't exist, create the property `propertyName` and set the value of the property at `propertyValue`.
Note :
Note :
To unset a property from a layer, use `setProperty` with `propertyValue` set to `undefined`.
Example :
@ -131,7 +123,7 @@ console.log("Map generated with Tiled version ", map.tiledversion);
Check the [Tiled documentation to learn more about the format of the JSON map](https://doc.mapeditor.org/en/stable/reference/json-map-format/).
### Changing tiles
### Changing tiles
```
WA.room.setTiles(tiles: TileDescriptor[]): void
```
@ -140,11 +132,11 @@ Replace the tile at the `x` and `y` coordinates in the layer named `layer` by th
If `tile` is a string, it's not the id of the tile but the value of the property `name`.
<div class="row">
<div class="col">
<img src="https://workadventu.re/img/docs/nameIndexProperty.png" class="figure-img img-fluid rounded" alt="" />
<img src="images/nameIndexProperty.png" class="figure-img img-fluid rounded" alt="" />
</div>
</div>
`TileDescriptor` has the following attributes :
`TileDescriptor` has the following attributes :
* **x (number) :** The coordinate x of the tile that you want to replace.
* **y (number) :** The coordinate y of the tile that you want to replace.
* **tile (number | string) :** The id of the tile that will be placed in the map.
@ -154,7 +146,7 @@ If `tile` is a string, it's not the id of the tile but the value of the property
Note: If you want to unset a tile, use `setTiles` with `tile` set to `null`.
Example :
Example :
```javascript
WA.room.setTiles([
{x: 6, y: 4, tile: 'blue', layer: 'setTiles'},
@ -176,4 +168,102 @@ You can create a tileset file in Tile Editor.
WA.room.loadTileset("Assets/Tileset.json").then((firstId) => {
WA.room.setTiles([{x: 4, y: 4, tile: firstId, layer: 'bottom'}]);
})
```
```
## Embedding websites in a map
You can use the scripting API to embed websites in a map, or to edit websites that are already embedded (using the ["website" objects](website-in-map.md)).
### Getting an instance of a website already embedded in the map
```
WA.room.website.get(objectName: string): Promise<EmbeddedWebsite>
```
You can get an instance of an embedded website by using the `WA.room.website.get()` method.
It returns a promise of an `EmbeddedWebsite` instance.
```javascript
// Get an existing website object where 'my_website' is the name of the object (on any layer object of the map)
const website = await WA.room.website.get('my_website');
website.url = 'https://example.com';
website.visible = true;
```
### Adding a new website in a map
```
WA.room.website.create(website: CreateEmbeddedWebsiteEvent): EmbeddedWebsite
interface CreateEmbeddedWebsiteEvent {
name: string; // A unique name for this iframe
url: string; // The URL the iframe points to.
position: {
x: number, // In pixels, relative to the map coordinates
y: number, // In pixels, relative to the map coordinates
width: number, // In pixels, sensitive to zoom level
height: number, // In pixels, sensitive to zoom level
},
visible?: boolean, // Whether to display the iframe or not
allowApi?: boolean, // Whether the scripting API should be available to the iframe
allow?: string, // The list of feature policies allowed
}
```
You can create an instance of an embedded website by using the `WA.room.website.create()` method.
It returns an `EmbeddedWebsite` instance.
```javascript
// Create a new website object
const website = WA.room.website.create({
name: "my_website",
url: "https://example.com",
position: {
x: 64,
y: 128,
width: 320,
height: 240,
},
visible: true,
allowApi: true,
allow: "fullscreen",
});
```
### Deleting a website from a map
```
WA.room.website.delete(name: string): Promise<void>
```
Use `WA.room.website.delete` to completely remove an embedded website from your map.
### The EmbeddedWebsite class
Instances of the `EmbeddedWebsite` class represent the website displayed on the map.
```typescript
class EmbeddedWebsite {
readonly name: string;
url: string;
visible: boolean;
allow: string;
allowApi: boolean;
x: number; // In pixels, relative to the map coordinates
y: number; // In pixels, relative to the map coordinates
width: number; // In pixels, sensitive to zoom level
height: number; // In pixels, sensitive to zoom level
}
```
When you modify a property of an `EmbeddedWebsite` instance, the iframe is automatically modified in the map.
{.alert.alert-warning}
The websites you add/edit/delete via the scripting API are only shown locally. If you want them
to be displayed for every player, you can use [variables](api-start.md) to share a common state
between all users.

View File

@ -9,11 +9,12 @@ Moreover, `WA.state` functions can be used to persist this state across reloads.
```
WA.state.saveVariable(key : string, data : unknown): void
WA.state.loadVariable(key : string) : unknown
WA.state.hasVariable(key : string) : boolean
WA.state.onVariableChange(key : string).subscribe((data: unknown) => {}) : Subscription
WA.state.[any property]: unknown
```
These methods and properties can be used to save, load and track changes in variables related to the current room.
These methods and properties can be used to save, load and track changes in [variables related to the current room](variables.md).
Variables stored in `WA.state` can be any value that is serializable in JSON.
@ -62,44 +63,11 @@ that you get the expected type).
For security reasons, the list of variables you are allowed to access and modify is **restricted** (otherwise, anyone on your map could set any data).
Variables storage is subject to an authorization process. Read below to learn more.
### Declaring allowed keys
## Defining a variable
In order to declare allowed keys related to a room, you need to add **objects** in an "object layer" of the map.
Each object will represent a variable.
<div class="row">
<div class="col">
<img src="https://workadventu.re/img/docs/object_variable.png" class="figure-img img-fluid rounded" alt="" />
</div>
</div>
The name of the variable is the name of the object.
The object **type** MUST be **variable**.
You can set a default value for the object in the `default` property.
### Persisting variables state
Use the `persist` property to save the state of the variable in database. If `persist` is false, the variable will stay
in the memory of the WorkAdventure servers but will be wiped out of the memory as soon as the room is empty (or if the
server restarts).
{.alert.alert-info}
Do not use `persist` for highly dynamic values that have a short life spawn.
### Managing access rights to variables
With `readableBy` and `writableBy`, you control who can read of write in this variable. The property accepts a string
representing a "tag". Anyone having this "tag" can read/write in the variable.
{.alert.alert-warning}
`readableBy` and `writableBy` are specific to the "online" version of WorkAdventure because the notion of tags
is not available unless you have an "admin" server (that is not part of the self-hosted version of WorkAdventure).
Finally, the `jsonSchema` property can contain [a complete JSON schema](https://json-schema.org/) to validate the content of the variable.
Trying to set a variable to a value that is not compatible with the schema will fail.
Out of the box, you cannot edit *any* variable. Variables MUST be declared in the map.
Check the [dedicated variables page](variables.md) to learn how to declare a variable in a map.
## Tracking variables changes

View File

@ -9,10 +9,10 @@ You can position this popup by using a "rectangle" object in Tiled that you will
<div class="row">
<div class="col">
<img src="https://workadventu.re/img/docs/screen_popup_tiled.png" class="figure-img img-fluid rounded" alt="" />
<img src="images/screen_popup_tiled.png" class="figure-img img-fluid rounded" alt="" />
</div>
<div class="col">
<img src="https://workadventu.re/img/docs/screen_popup_in_game.png" class="figure-img img-fluid rounded" alt="" />
<img src="images/screen_popup_in_game.png" class="figure-img img-fluid rounded" alt="" />
</div>
</div>
@ -49,7 +49,7 @@ Example:
let helloWorldPopup;
// Open the popup when we enter a given zone
helloWorldPopup = WA.room.onEnterZone('myZone', () => {
helloWorldPopup = WA.room.onEnterLayer("myZone").subscribe(() => {
WA.ui.openPopup("popupRectangle", 'Hello world!', [{
label: "Close",
className: "primary",
@ -57,33 +57,108 @@ helloWorldPopup = WA.room.onEnterZone('myZone', () => {
// Close the popup when the "Close" button is pressed.
popup.close();
}
});
}]);
}]);
});
// Close the popup when we leave the zone.
WA.room.onLeaveZone('myZone', () => {
WA.room.onLeaveLayer("myZone").subscribe(() => {
helloWorldPopup.close();
});
})
```
### Add custom menu
```typescript
WA.ui.registerMenuCommand(menuCommand: string, callback: (menuCommand: string) => void): void
```
Add a custom menu item containing the text `commandDescriptor` in the main menu. A click on the menu will trigger the `callback`.
WA.ui.registerMenuCommand(commandDescriptor: string, options: MenuOptions): Menu
```
Add a custom menu item containing the text `commandDescriptor` in the navbar of the menu.
`options` attribute accepts an object with three properties :
- `callback : (commandDescriptor: string) => void` : A click on the custom menu will trigger the `callback`.
- `iframe: string` : A click on the custom menu will open the `iframe` inside the menu.
- `allowApi?: boolean` : Allow the iframe of the custom menu to use the Scripting API.
Important : `options` accepts only `callback` or `iframe` not both.
Custom menu exist only until the map is unloaded, or you leave the iframe zone of the script.
<div class="row">
<div class="col">
<img src="images/custom-menu-navbar.png" class="figure-img img-fluid rounded" alt="" />
</div>
<div class="col">
<img src="images/custom-menu-iframe.png" class="figure-img img-fluid rounded" alt="" />
</div>
</div>
Example:
```javascript
const menu = WA.ui.registerMenuCommand('menu test',
{
callback: () => {
WA.chat.sendChatMessage('test');
}
})
// Some time later, if you want to remove the menu:
menu.remove();
```
Please note that `registerMenuCommand` returns an object of the `Menu` class.
The `Menu` class contains a single method: `remove(): void`. This will obviously remove the menu when called.
```javascript
class Menu {
/**
* Remove the menu
*/
remove() {};
}
```
### Awaiting User Confirmation (with space bar)
```
WA.ui.displayActionMessage({
message: string,
callback: () => void,
type?: "message"|"warning",
}): ActionMessage
```
Displays a message at the bottom of the screen (that will disappear when space bar is pressed).
<div class="col">
<img src="images/trigger_message.png" class="figure-img img-fluid rounded" alt="" />
</div>
Example:
```javascript
const triggerMessage = WA.ui.displayActionMessage({
message: "press 'space' to confirm",
callback: () => {
WA.chat.sendChatMessage("confirmed", "trigger message logic")
}
});
WA.ui.registerMenuCommand("test", () => {
WA.chat.sendChatMessage("test clicked", "menu cmd")
})
setTimeout(() => {
// later
triggerMessage.remove();
}, 1000)
```
<div class="col">
<img src="https://workadventu.re/img/docs/menu-command.png" class="figure-img img-fluid rounded" alt="" />
</div>
Please note that `displayActionMessage` returns an object of the `ActionMessage` class.
The `ActionMessage` class contains a single method: `remove(): Promise<void>`. This will obviously remove the message when called.
```javascript
class ActionMessage {
/**
* Hides the message
*/
remove() {};
}
```

67
docs/maps/entry-exit.md Normal file
View File

@ -0,0 +1,67 @@
{.section-title.accent.text-primary}
# Entries and exits
[Building your map - Defined entries and exits](https://www.youtube.com/watch?v=MuhVgu8H7U0)
## Defining a default entry point
In order to define a default start position, you MUST create a layer named "`start`" on your map. This layer MUST contain at least one tile. The players will start on the tile of this layer. If the layer contains many tiles, the players will start randomly on one of those tiles.
![Start layer screenshot](images/start_layer.png)
In the screenshot above, the start layer is made of the 2 white tiles. These tiles are not visible to the end user because they are hidden below the "bottom" layer that displays the floor of the map.
{.alert.alert-info}
**Pro tip**: if you expect many people to connect to your map at the same time (for instance, if you are organizing a big event), consider making a large start zone. This way, users will not all appear at the same position and will not pop randomly in a chat with someone connecting at the same moment.
## Defining exits
In order to place an exit on your scene that leads to another scene:
* You must create a specific layer. When a character reaches ANY tile of that layer, it will exit the scene.
* In layer properties, you MUST add "`exitUrl`" property. It represents the URL of the next scene. You can put relative or absolute URLs.
* If you want to have multiple exits, you can create many layers. Each layer has a different key `exitUrl` and has tiles that represent exits to another scene.
![](images/exit_layer_map.png)
{.alert.alert-warning}
**Note:** in older releases of WorkAdventure, you could link to a map file directly using properties `exitSceneUrl` and `exitInstance`. Those properties are now **deprecated**. Use "`exitUrl`" instead.
## Understanding map URLs in WorkAdventure
There are 2 kinds of URLs in WorkAdventure:
* Public URLs are in the form `https://play.workadventu.re/_/[instance]/[server]/[path to map]`
* Private URLs (used in paid accounts) are in the form `https://play.workadventu.re/@/[organization]/[world]/[map]`
Assuming your JSON map is hosted at "`https://example.com/my/map.json`", then you can browse your map at "`https://play.workadventu.re/_/global/example.com/my/map.json`". Here, "global" is a name of an "instance" of your map. You can put anything instead of "global" here. People on the same instance of the map can see each others. If 2 users use 2 different instances, they are on the same map, but in 2 parallel universes. They cannot see each other.
## Defining several entry points
Often your map will have several exits, and therefore, several entry points. For instance, if there is an exit by a door that leads to the garden map, when you come back from the garden you expect to come back by the same door. Therefore, a map can have several entry points. Those entry points are "named" (they have a name).
In order to create a named entry point:
You can create a new layer for your entry point or use an existing layer with named tiles.
* If you don't use the layer named "`start`", you MUST add a boolean "`startLayer`" property to the layer properties. It MUST be set to true.
* If you use this method, when a character enters the map by this entry point, it will enter randomly on ANY tile of that layer. The name of the entry point is the name of that layer.
![](images/layer-entry-point.png)
You can also use the tiles properties to create entry point.
* To do that, you will need to have a layer named "`start`" or with the "`startLayer`" property. Then you MUST add a string "`start`" property to a tile than you use in that layer. The name of the entry point is the value that property.
* If you use this method, when a character enters the map by this entry point, it will enter on ANY tile of the same kind in that layer.
![](images/tile-entry-point.png)
Notes :
* Two tiles with a string "start" property with different value can be in the same layer of entries.
* A tile with a string "start" property that is not in a layer of entries won't usable as an entry point.
How to use entry point :
* To enter via this entry point, simply add a hash with the entry point name to the URL ("#[_entryPointName_]"). For instance: "`https://workadventu.re/_/global/mymap.com/path/map.json#my-entry-point`".
* You can of course use the "#" notation in an exit scene URL (so an exit scene URL will point to a given entry scene URL)

25
docs/maps/hosting.md Normal file
View File

@ -0,0 +1,25 @@
{.section-title.accent.text-primary}
# Hosting your map
The [Getting Started](.) page proposes to use a "starter kit" that is relying on GitHub pages for hosting the map. This is a fairly good solution as GitHub pages offers a free and performant hosting.
But using GitHub pages is not necessary. You can host your maps on any webserver.
{.alert.alert-warning}
If you decide to host your maps on your own webserver, you must **configure CORS headers** in your browser to allow access from WorkAdventure.
## Configuring CORS headers
CORS headers ([Cross Origin Resource Sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)) are useful when a website want to make some resources accessible to another website. This is exactly what we want to do. We want the map you are designing to be accessible from the WorkAdventure domain (`play.workadventu.re`).
### Enabling CORS for Apache
In order to enable CORS in your Apache configuration, you will need to ensure the `headers` module is enabled.
In your Apache configuration file, simply add the following line inside either the `<Directory>`, `<Location>`, `<Files>` or `<VirtualHost>` sections, or within a `.htaccess` file.
Header set Access-Control-Allow-Origin "*"
### Enabling CORS on another webserver
Check out [enable-cors.org](https://enable-cors.org/server.html) which has detailed instructions on how to enable CORS on many different webservers.

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

128
docs/maps/index.md Normal file
View File

@ -0,0 +1,128 @@
{.section-title.accent.text-primary}
# Create your map
## Tools you will need
In order to build your own map for WorkAdventure, you need:
* the [Tiled editor](https://www.mapeditor.org/) software
* "tiles" (i.e. images) to create your map
* a web-server to serve your map
WorkAdventure comes with a "map starter kit" that we recommend using to start designing your map quickly. It contains **a good default tileset** for building an office and it proposes to **use Github static pages as a web-server** which is both free and performant. It also comes with a local webserver for testing purpose and with Typescript support (if you are looking to use the [map scripting API]({{url('/map-building/scripting')}}).
{.alert.alert-info}
If you are looking to host your maps on your own webserver, be sure to read the [Self-hosting your map](hosting.md) guide.
[Building your map - Create your map](https://www.youtube.com/watch?v=lu1IZgBJJD4)
## Getting started
Start by [creating a GitHub account](https://github.com/join) if you don't already have one.
Then, go to the [Github map starter kit repository page](https://github.com/thecodingmachine/workadventure-map-starter-kit) and click the **"Use this template"** button.
<figure class="figure my-5">
<img src="images/use_this_template.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">The "Use this template" button</figcaption>
</figure>
You will be prompted to enter a repository name for your map.
<figure class="figure my-5">
<img src="images/create_repo.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">The "create a new repository" page</figcaption>
</figure>
**Make sure to check the "Include all branches" checkbox, otherwise the Github Pages deployment process will not be setup automatically.**
If you miss that step, don't worry, you can always fix that by clicking on the **Settings tab** of your repository and scroll down to the **GitHub Pages** section. Then select the **gh-pages** branch. It might already be selected, but please be sure to click on it nonetheless (otherwise GitHub will not enable GitHub pages).
{.alert.alert-info}
If you only see a "master" branch and if the **gh-pages** branch does not appear here, simply wait a few minutes and refresh your page. When you created the project, Github Actions triggered a job that is in charge of creating the **gh-pages** branch. Maybe the job is not finished yet.
<figure class="figure my-5">
<img src="images/github_pages.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">The GitHub pages configuration section</figcaption>
</figure>
Wait a few minutes... Github will deploy a new website with the content of the repository. The address of the website is visible in the "GitHub Pages" section.
<figure class="figure my-5">
<img src="images/website_address.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">Your website is ready!</figcaption>
</figure>
Click on the link. You should be redirected directly to WorkAdventure, on your map!
## Customizing your map
Your map is now up and online, but this is still the demo map from the starter kit. You need to customize it.
### Cloning the map
Start by cloning the map. If you are used to Git and GitHub, simply clone the map to your computer using your preferred tool and [jump to the next chapter](#loading-the-map-in-tiled).
If you are new to Git, cloning the map means downloading the map to your computer. To do this, you will need Git, or a Git compatible tool. Our advice is to use [GitHub Desktop](https://desktop.github.com/). We recommend you take some time mastering the notion of pull / commit / push as this will make uploading your maps really easier.
As an (easier) alternative, you can simply use the "Export" button to download the code of the map in a big Zip file. When you want to upload your work again, you will simply drag'n'drop your files in the GitHub website.
### Loading the map in Tiled
The sample map is in the file `map.json`. You can load this file in [Tiled](https://www.mapeditor.org/).
Now, it's up to you to edit the map and write your own map.
Some resources regarding Tiled:
* [Tiled documentation](https://doc.mapeditor.org/en/stable/manual/introduction/)
* [Tiled video tutorials](https://www.gamefromscratch.com/post/2015/10/14/Tiled-Map-Editor-Tutorial-Series.aspx)
### Testing your map locally
In order to test your map, you need a webserver to host your map. The "map starter kit" comes with a local webserver that you can use to test your map.
In order to start the webserver, you will need [Node.JS](https://nodejs.org/en/). When it is downloaded, open your command line and from the directory of the map, run this command:
$ npm install
This will install the local webserver.
$ npm run start
This command will start the webserver and open the welcome page. You should see a page looking like this:
<figure class="figure my-5">
<img src="images/start_kit_start_screen.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">The welcome page of the "map start kit"</figcaption>
</figure>
From here, you simply need to click the "Test this map" button to test your map in WorkAdventure.
{.alert.alert-warning}
The local web server can only be used to test your map locally. In particular, the link will only work on your computer. You cannot share it with other people.
### Pushing the map
When your changes are ready, you need to "commit" and "push" (i.e. "upload") the changes back to GitHub. Just wait a few minutes, and your map will be propagated automatically to the GitHub pages web-server.
## Testing your map
To test your map, you need to find its URL. There are 2 kinds of URLs in WorkAdventure:
* Test URLs are in the form `https://play.workadventu.re/_/[instance]/[server]/[path to map]`
* Registered URLs are in the form `https://play.workadventu.re/@/[organization]/[world]/[map]`
Assuming your JSON map is hosted at "`https://myuser.github.io/myrepo/map.json`", then you can browse your map at "`https://play.workadventu.re/_/global/myuser.github.io/myrepo/map.json`". Here, "global" is a name of an "instance" of your map. You can put anything instead of "global" here. People on the same instance of the map can see each others. If 2 users use 2 different instances, they are on the same map, but in 2 parallel universes. They cannot see each other.
This will connect you to a "public" instance. Anyone can come and connect to a public instance. If you want to manage invitations, or to perform some moderation, you will need to create a "private" instance. Private instances are available in "pro" accounts.
<div class="card">
<div class="card-body">
<h3 id="need-some-help">Need some help?</h3>
<p>WorkAdventure is a constantly evolving project and there is plenty of room for improvement regarding map editing.</p>
<p>If you are facing any troubles, do not hesitate to open an "issue" in the
<a href="https://github.com/thecodingmachine/workadventure/issues" target="_blank">GitHub WorkAdventure account</a>.
</p>
</div>
</div>

View File

@ -0,0 +1,82 @@
{.section-title.accent.text-primary}
# Meeting rooms
[Building your map - Meeting room](https://www.youtube.com/watch?v=cN9VMWHN0eo)
## Opening a Jitsi meet when walking on the map
On your map, you can define special zones (meeting rooms) that will trigger the opening of a Jitsi meet. When a player will pass over these zones, a Jitsi meet will open (as an iframe on the right side of the screen)
In order to create Jitsi meet zones:
* You must create a specific layer.
* In layer properties, you MUST add a "`jitsiRoom`" property (of type "`string`"). The value of the property is the name of the room in Jitsi. Note: the name of the room will be "slugified" and prepended with the name of the instance of the map (so that different instances of the map have different rooms)
* You may also use "jitsiWidth" property (of type "number" between 0 and 100) to control the width of the iframe containing the meeting room.
## Triggering of the "Jitsi meet" action
By default, Jitsi meet will open when a user enters the zone defined on the map.
It is however possible to trigger Jitsi only on user action. You can do this with the `jitsiTrigger` property.
If you set `jitsiTrigger: onaction`, when the user walks on the layer, an alert message will be displayed at the bottom of the screen:
<figure class="figure">
<img src="images/click_space_jitsi.png" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">Jitsi meet will only open if the user clicks Space</figcaption>
</figure>
If you set `jitsiTriggerMessage: your message action` you can edit alert message displayed. If is not defined, the default message displayed is 'Press on SPACE to enter in jitsi meet room'.
## Customizing your "Jitsi meet"
Your Jitsi meet experience can be customized using Jitsi specific config options. The `jitsiConfig` and `jitsiInterfaceConfig` properties can be used on the Jitsi layer to change the way Jitsi looks and behaves. Those 2 properties are accepting a JSON string.
For instance, use `jitsiConfig: { "startWithAudioMuted": true }` to automatically mute the microphone when someone enters a room. Or use `jitsiInterfaceConfig: { "DEFAULT_BACKGROUND": "#77ee77" }` to change the background color of Jitsi.
The `jitsiConfig` property will override the Jitsi [config.js](https://github.com/jitsi/jitsi-meet/blob/master/config.js) file
The `jitsiInterfaceConfig` property will override the Jitsi [interface_config.js](https://github.com/jitsi/jitsi-meet/blob/master/interface_config.js) file
<div class="alert alert-warning">If your customizations are not working:
<ul>
<li>First, check that the JSON you are entering is valid. Take a look at the console in your browser. If the JSON string is invalid, you should see a warning.</li>
<li>Then, check that the JSON you are using is matching the version of Jitsi used.</li>
</ul>
</div>
## Granting moderator controls in Jitsi
{.alert.alert-info}
Moderator controls are linked to member tags. You need a pro account to edit member tags.
You can grant moderator rights to some of your members. Jitsi moderators can:
* Publish a Jitsi meeting on Youtube Live (you will need a Youtube Live account)
* Record a meeting to Dropbox (you will need a Dropbox account)
* Mute someone
* Mute everybody expect one speaker
* Kick users out of the meeting
In order to grant moderator rights to a given user, you can add a `jitsiRoomAdminTag` property to your Jitsi layer. For instance, if you write a property:
jitsiRoomAdminTag: speaker
then, any of your member with the `speaker` tag will be automatically granted moderator rights over this Jitsi instance.
You can read more about [managing member tags in the admin documentation](/admin-guide/manage-members).
## Using another Jitsi server
WorkAdventure usually comes with a default Jitsi meet installation. If you are using the online version at `workadventu.re`, we are handling a Jitsi meet cluster for you. If you are running the self-hosted version of WorkAdventure, the administrator probably set up a Jitsi meet instance too.
You have the possibility, in your map, to override the Jitsi meet instance that will be used by default. This can be useful for regulatory reasons. Maybe your company wants to keep control on the video streams and therefore, wants to self-host a Jitsi instance? Or maybe you want to use a very special configuration or very special version of Jitsi?
Use the `jitsiUrl` property to in the Jitsi layer to specify the Jitsi instance that should be used. Beware, `jitsiUrl` takes in parameter a **domain name**, without the protocol. So you should use:
`jitsiUrl: meet.jit.si`
and not
`jitsiUrl: https://meet.jit.si`
{.alert.alert-info}
When you use `jitsiUrl`, the targeted Jitsi instance must be public. You cannot use moderation features or the JWT
tokens authentication with maps configured using the `jitsiUrl` property.

154
docs/maps/menu.php Normal file
View File

@ -0,0 +1,154 @@
<?php
$extraMenu = require __DIR__.'/../../scripting_api_extra_doc/menu.php';
$extraUtilsMenu = require __DIR__.'/../../scripting_api_extra_doc/menu_functions.php';
return [
[
'title' => 'Getting started',
'url' => '/map-building/',
'markdown' => 'maps.index',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/index.md',
],
[
'title' => 'WorkAdventure maps',
'url' => '/map-building/wa-maps.md',
'markdown' => 'maps.wa-maps',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/wa-maps.md',
],
[
'title' => 'Entries and exits',
'url' => '/map-building/entry-exit.md',
'markdown' => 'maps.entry-exit',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/entry-exit.md',
],
[
'title' => 'Opening a website',
'url' => '/map-building/opening-a-website.md',
'markdown' => 'maps.opening-a-website',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/opening-a-website.md',
],
[
'title' => 'Meeting rooms',
'url' => '/map-building/meeting-rooms.md',
'markdown' => 'maps.meeting-rooms',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/meeting-rooms.md',
],
[
'title' => 'Special zones',
'url' => '/map-building/special-zones.md',
'markdown' => 'maps.special-zones',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/special-zones.md',
],
[
'title' => 'Animations',
'url' => '/map-building/animations.md',
'markdown' => 'maps.animations',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/animations.md',
],
[
'title' => 'Integrated websites',
'url' => '/map-building/website-in-map.md',
'markdown' => 'maps.website-in-map',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/website-in-map.md',
],
[
'title' => 'Variables',
'url' => '/map-building/variables.md',
'markdown' => 'maps.variables',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/variables.md',
],
[
'title' => 'Self-hosting your map',
'url' => '/map-building/hosting.md',
'markdown' => 'maps.hosting',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/hosting.md',
],
$extraMenu,
[
'title' => 'Scripting maps',
'url' => '/map-building/scripting.md',
'markdown' => 'maps.scripting',
'children' => [
[
'title' => 'Using Typescript',
'url' => '/map-building/using-typescript.md',
'markdown' => 'maps.using-typescript',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/using-typescript.md',
],
[
'title' => 'API Reference',
'url' => '/map-building/api-reference',
'markdown' => 'maps.api-reference',
'collapse' => true,
'children' => [
[
'title' => 'Initialization',
'url' => '/map-building/api-start.md',
'markdown' => 'maps.api-start',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-start.md',
],
[
'title' => 'Navigation',
'url' => '/map-building/api-nav.md',
'markdown' => 'maps.api-nav',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-nav.md',
],
[
'title' => 'Chat',
'url' => '/map-building/api-chat.md',
'markdown' => 'maps.api-chat',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-chat.md',
],
[
'title' => 'Room',
'url' => '/map-building/api-room.md',
'markdown' => 'maps.api-room',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-room.md',
],
[
'title' => 'State',
'url' => '/map-building/api-state.md',
'markdown' => 'maps.api-state',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-state.md',
],
[
'title' => 'Player',
'url' => '/map-building/api-player.md',
'markdown' => 'maps.api-player',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-player.md',
],
[
'title' => 'UI',
'url' => '/map-building/api-ui.md',
'markdown' => 'maps.api-ui',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-ui.md',
],
[
'title' => 'Sound',
'url' => '/map-building/api-sound.md',
'markdown' => 'maps.api-sound',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-sound.md',
],
[
'title' => 'Controls',
'url' => '/map-building/api-controls.md',
'markdown' => 'maps.api-controls',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-controls.md',
],
[
'title' => 'Deprecated',
'url' => '/map-building/api-deprecated.md',
'markdown' => 'maps.api-deprecated',
'editUrl' => 'https://github.com/thecodingmachine/workadventure/edit/develop/docs/maps/api-deprecated.md',
],
]
],
$extraUtilsMenu
]
],
[
'title' => 'Troubleshooting',
'url' => '/map-building/troubleshooting',
'view' => 'content.map.troubleshooting'
],
];

View File

@ -0,0 +1,76 @@
{.section-title.accent.text-primary}
# Opening a website when walking on the map
[Building your map - Opening a website](https://www.youtube.com/watch?v=Me8cu5lLN3A)
## The openWebsite property
On your map, you can define special zones. When a player will pass over these zones, a website will open (as an iframe
on the right side of the screen)
In order to create a zone that opens websites:
* You must create a specific layer.
* In layer properties, you MUST add a "`openWebsite`" property (of type "`string`"). The value of the property is the URL of the website to open (the URL must start with "https://")
* You may also use "`openWebsiteWidth`" property (of type "`int`" or "`float`" between 0 and 100) to control the width of the iframe.
* You may also use "`openTab`" property (of type "`string`") to open in a new tab instead.
{.alert.alert-warning}
A website can explicitly forbid another website from loading it in an iFrame using
the [X-Frame-Options HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options).
## Integrating a Youtube video
A common use case is to use `openWebsite` to open a Youtube video.
The global Youtube page cannot be embedded into an iFrame (it has the `X-Frame-Options` HTTP header).
To embed a Youtube video, be sure to **use the "embed" link**. You can get this link be clicking "Share > Embed" in Youtube.
<figure class="figure">
<img src="images/youtube.jpg" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">Find the URL of your video in the "embed Video" HTML snippet on Youtube</figcaption>
</figure>
<figure class="figure">
<img src="images/open_website.jpg" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">Put this URL in the "openWebsite" property</figcaption>
</figure>
### Triggering of the "open website" action
By default, the iFrame will open when a user enters the zone defined on the map.
It is however possible to trigger the iFrame only on user action. You can do this with the `openWebsiteTrigger` property.
If you set `openWebsiteTrigger: onaction`, when the user walks on the layer, an alert message will be displayed at the bottom of the screen:
<figure class="figure">
<img src="images/click_space_open_website.jpg" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">The iFrame will only open if the user clicks Space</figcaption>
</figure>
If you set `openWebsiteTriggerMessage: your message action` you can edit alert message displayed. If is not defined, the default message displayed is 'Press on SPACE to open the web site'.
### Setting the iFrame "allow" attribute
By default, iFrames have limited rights in browsers. For instance, they cannot put their content in fullscreen, they cannot start your webcam, etc...
If you want to grant additional access rights to your iFrame, you should use the `openWebsitePolicy` property. The value of this property will be directly used for the [`allow` atttribute of your iFrame](https://developer.mozilla.org/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy#the_iframe_allow_attribute).
For instance, if you want an iFrame to be able to go in fullscreen, you will use the property `openWebsitePolicy: fullscreen`
<figure class="figure">
<img src="images/open_website_policy.jpg" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">The generated iFrame will have the allow attribute set to: <code>&lt;iframe allow="fullscreen"&gt;</code></figcaption>
</figure>
### Open a Jitsi with a co-website
Cowebsites allow you to have several sites open at the same time.
If you want to open a Jitsi and another page it's easy!
You have just to [add a Jitsi to the map](meeting-rooms.md) and [add a co-website](opening-a-website.md#the-openwebsite-property) on the same layer.
It's done!

View File

@ -46,7 +46,7 @@ You can put relative URLs. If your script file is next to your map, you can simp
<div>
<figure class="figure">
<img src="https://workadventu.re/img/docs/script_property.png" class="figure-img img-fluid rounded" alt="" />
<img src="images/script_property.png" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">The script property</figcaption>
</figure>
</div>
@ -72,7 +72,7 @@ In order to allow communication with WorkAdventure, you need to add an additiona
<div>
<figure class="figure">
<img src="https://workadventu.re/img/docs/open_website_allow_api.png" class="figure-img img-fluid rounded" alt="" />
<img src="images/open_website_allow_api.png" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">The `openWebsiteAllowApi` property</figcaption>
</figure>
</div>

View File

@ -0,0 +1,27 @@
{.section-title.accent.text-primary}
# Other special zones
## Making a "silent" zone
[Building your map - Special zones](https://www.youtube.com/watch?v=z7XLo06o-ow)
On your map, you can define special silent zones where nobody is allowed to talk. In these zones, users will not speak to each others, even if they are next to each others.
In order to create a silent zone:
* You must create a specific layer.
* In layer properties, you MUST add a boolean "`silent`" property. If the silent property is checked, the users are entering the silent zone when they walk on any tile of the layer.
## Playing sounds or background music
Your map can define special zones where a sound or background music will automatically be played.
In order to create a zone that triggers sounds/music:
* You must create a specific layer.
* In layer properties, you MUST add a "`playAudio`" property. The value of the property is a URL to an MP3 file that will be played. The URL can be relative to the URL of the map.
* You may use the boolean property "`audioLoop`" to make the sound loop (thanks captain obvious).
* If the "`audioVolume`" property is set, the audio player uses either the value of the property or the last volume set by the user - whichever is smaller. This property is a float from 0 to 1.0
{.alert.alert-info}
"`playAudioLoop`" is deprecated and should not be used anymore.

View File

@ -29,7 +29,7 @@ font that has support for a variety of accents. It renders great when used at *8
<div>
<figure class="figure">
<img src="https://workadventu.re/img/docs/text-object.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<img src="images/text-object.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">The "font-family" property</figcaption>
</figure>
</div>

View File

@ -0,0 +1,183 @@
{.section-title.accent.text-primary}
# Using Typescript with the scripting API
{.alert.alert-info}
The easiest way to get started with writing scripts in Typescript is to use the
[Github map starter kit repository](https://github.com/thecodingmachine/workadventure-map-starter-kit). It comes with
Typescript enabled. If you are **not** using the "map starter kit", this page explains how to add Typescript to your
own scripts.
## The short story
In this page, we will assume you already know Typescript and know how to set it up with Webpack.
To work with the scripting API in Typescript, you will need the typings of the `WA` object. These typings can be downloaded from the `@workadventure/iframe-api-typings` package.
```console
$ npm install --save-dev @workadventure/iframe-api-typings
```
Furthermore, you need to make the global `WA` object available. To do this, edit the entry point of your project (usually, it is a file called `index.ts` in the root directory).
Add this line at the top of the file:
**index.ts**
```typescript
/// <reference path="../node_modules/@workadventure/iframe-api-typings/iframe_api.d.ts" />
```
From there, you should be able to use Typescript in your project.
## The long story
Below is a step by step guide explaining how to set up Typescript + Webpack along your WorkAdventure map.
In your map directory, start by adding a `package.json` file. This file will contain dependencies on Webpack, Typescript and the Workadventure typings:
**package.json**
```json
{
"devDependencies": {
"@workadventure/iframe-api-typings": "^1.2.1",
"eslint": "^7.24.0",
"html-webpack-plugin": "^5.3.1",
"ts-loader": "^8.1.0",
"ts-node": "^9.1.1",
"typescript": "^4.2.4",
"webpack": "^5.31.2",
"webpack-cli": "^4.6.0",
"webpack-dev-server": "^3.11.2",
"webpack-merge": "^5.7.3"
},
"scripts": {
"start": "webpack serve --open",
"build": "webpack --config webpack.prod.js",
}
}
```
You can now install the dependencies:
```console
$ npm install
```
We now need to add a Webpack configuration file (for development mode). This Webpack file will:
* Start a local webserver that will be in charge of serving the map
* Compile Typescript into Javascript and serve it automatically
**webpack.config.js**
```js
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode: 'development',
entry: './src/index.ts',
devtool: 'inline-source-map',
devServer: {
// The test webserver serves static files from the root directory.
// It comes with CORS enabled (important for WorkAdventure to be able to load the map)
static: {
directory: ".",
serveIndex: true,
watch: true,
},
host: 'localhost',
allowedHosts: "all",
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
}
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ],
},
output: {
filename: 'script.js',
path: path.resolve(__dirname, 'dist'),
publicPath: '/'
}
};
```
We need to configure Typescript, using a `tsconfig.json` file.
**tsconfig.json**
```json
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"moduleResolution": "node",
"module": "CommonJS",
"target": "ES2015",
"declaration": false,
"downlevelIteration": true,
"jsx": "react",
"allowJs": true,
"strict": true
}
}
```
Create your entry point (the Typescript file at the root of your project).
**src/index.ts**
```typescript
/// <reference path="../node_modules/@workadventure/iframe-api-typings/iframe_api.d.ts" />
console.log('Hello world!');
```
The first comment line is important in order to get `WA` typings.
Now, you can start Webpack in dev mode!
```console
$ npm run start
```
This will automatically compile Typescript, and serve it (along the map) on your local webserver (so at `http://localhost:8080/script.js`). Please note that the `script.js` file is never written to the disk. So do not worry if you don't see it appearing, you need to "build" it to actually write it to the disk.
Final step, you must reference the script inside your map, by adding a `script` property at the root of your map:
<figure class="figure">
<img src="images/script_property.png" class="figure-img img-fluid rounded" alt="" />
<figcaption class="figure-caption">The script property</figcaption>
</figure>
### Building the final script
We now have a correct development setup. But we still need to be able to build the production script from Typescript files. We are not going to use the development server in production. To do this, we will add an additional `webpack.prod.js` file.
**webpack.prod.js**
```javascript
const { merge } = require('webpack-merge');
const common = require('./webpack.config.js');
module.exports = merge(common, {
mode: 'production',
devtool: 'source-map'
});
```
This file will simply switch the Webpack config file in "production" mode. You can simply run:
```console
$ npm run build
```
and the `script.js` file will be generated in the `dist/` folder. Beware, you will need to move it at the root of map for it to be read by the map.

59
docs/maps/variables.md Normal file
View File

@ -0,0 +1,59 @@
{.section-title.accent.text-primary}
# Variables
Maps can contain **variables**. Variables are piece of information that store some data. In computer science, we like
to say variables are storing the "state" of the room.
- Variables are shared amongst all players in a given room. When the value of a variable changes for one player, it changes
for everyone.
- Variables are **invisible**. There are plenty of ways they can act on the room, but by default, you don't see them.
## Declaring a variable
In order to declare allowed variables in a room, you need to add **objects** in an "object layer" of the map.
Each object will represent a variable.
<div class="row">
<div class="col">
<img src="images/object_variable.png" class="figure-img img-fluid rounded" alt="" />
</div>
</div>
The name of the variable is the name of the object.
The object **type** MUST be **variable**.
You can set a default value for the object in the `default` property.
## Persisting variables state
Use the `persist` property to save the state of the variable in database. If `persist` is false, the variable will stay
in the memory of the WorkAdventure servers but will be wiped out of the memory as soon as the room is empty (or if the
server restarts).
{.alert.alert-info}
Do not use `persist` for highly dynamic values that have a short life spawn.
## Managing access rights to variables
With `readableBy` and `writableBy`, you control who can read of write in this variable. The property accepts a string
representing a "tag". Anyone having this "tag" can read/write in the variable.
{.alert.alert-warning}
`readableBy` and `writableBy` are specific to the "online" version of WorkAdventure because the notion of tags
is not available unless you have an "admin" server (that is not part of the self-hosted version of WorkAdventure).
In a future release, the `jsonSchema` property will contain [a complete JSON schema](https://json-schema.org/) to validate the content of the variable.
Trying to set a variable to a value that is not compatible with the schema will fail.
## Using variables
There are plenty of ways to use variables in WorkAdventure:
- Using the [scripting API](api-state.md), you can read, edit or track the content of variables.
- Using the [Action zones](https://workadventu.re/map-building-extra/generic-action-zones.md), you can set the value of a variable when someone is entering or leaving a zone
- By [binding variable values to properties in the map](https://workadventu.re/map-building-extra/variable-to-property-binding.md)
- By [using automatically generated configuration screens](https://workadventu.re/map-building-extra/automatic-configuration.md) to create forms to edit the value of variables
In general, variables can be used by third party libraries that you can embed in your map to add extra features.
A good example of such a library is the ["Scripting API Extra" library](https://workadventu.re/map-building-extra/about.md)

View File

@ -49,34 +49,36 @@ A few things to notice:
<div>
<figure class="figure">
<img src="https://workadventu.re/img/docs/tiled_screenshot_1.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<img src="images/tiled_screenshot_1.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">"floorLayer" is compulsory</figcaption>
</figure>
</div>
## Building walls and "collidable" areas
[Building your map - Collides](https://www.youtube.com/watch?v=qTK50ymhMIE)
By default, the characters can traverse any tiles. If you want to prevent your character from going through a tile (like a wall or a desktop), you must make this tile "collidable". You can do this by settings the `collides` property on a given tile.
To make a tile "collidable", you should:
1. select the relevant tileset and switch to "edit" mode:
![](https://workadventu.re/img/docs/collides-1.png){.document-img}
![](images/collides-1.png){.document-img}
2. right click on a tile of the tileset to select it:
![](https://workadventu.re/img/docs/collides-2.png){.document-img}
![](images/collides-2.png){.document-img}
3. on the left pane in the custom properties section, right click and select "Add properties":
![](https://workadventu.re/img/docs/collides-3.png){.document-img}
![](images/collides-3.png){.document-img}
Please add a `collides` property. The type of the property must be **bool**.
4. finally, check the checkbox for the `collides` property:
![](https://workadventu.re/img/docs/collides-4.png){.document-img}
![](images/collides-4.png){.document-img}
Repeat for every tile that should be "collidable".

View File

@ -0,0 +1,40 @@
{.section-title.accent.text-primary}
# Putting a website inside a map
You can inject a website directly into your map, at a given position.
To do this in Tiled:
- Select an object layer
- Create a rectangular object, at the position where you want your website to appear
- Add a `url` property to your object pointing to the URL you want to open
<div>
<figure class="figure">
<img src="images/website_url_property.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">A "website" object</figcaption>
</figure>
</div>
The `url` can be absolute, or relative to your map.
{.alert.alert-info}
Internally, WorkAdventure will create an "iFrame" to load the website.
Some websites forbid being opened by iframes using the [`X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options)
HTTP header.
{.alert.alert-warning}
Please note that the website always appears **on top** of the tiles (even if you put the object layer that
contains the "website" object under the tiles).
## Allowing the scripting API in your iframe
If you are planning to use the WorkAdventure scripting API inside your iframe, you need
to explicitly allow it, by setting an additional `allowApi` property to `true`.
<div>
<figure class="figure">
<img src="images/website_allowapi_property.png" class="figure-img img-fluid rounded" alt="" style="width: 70%" />
<figcaption class="figure-caption">A "website" object that can communicate using the Iframe API</figcaption>
</figure>
</div>

View File

@ -26,7 +26,6 @@
"rules": {
"no-unused-vars": "off",
"@typescript-eslint/no-explicit-any": "error",
// TODO: remove those ignored rules and write a stronger code!
"@typescript-eslint/no-floating-promises": "off",
"@typescript-eslint/no-unsafe-call": "off",

View File

@ -1,13 +1,13 @@
FROM thecodingmachine/workadventure-back-base:latest as builder
WORKDIR /var/www/messages
COPY --chown=docker:docker messages .
FROM node:14.15.4-buster-slim@sha256:cbae886186467bbfd274b82a234a1cdfbbd31201c2a6ee63a6893eefcf3c6e76 as builder
WORKDIR /usr/src
COPY messages .
RUN yarn install && yarn proto
# we are rebuilding on each deploy to cope with the PUSHER_URL environment URL
FROM thecodingmachine/nodejs:14-apache
COPY --chown=docker:docker front .
COPY --from=builder --chown=docker:docker /var/www/messages/generated /var/www/html/src/Messages/generated
COPY --from=builder --chown=docker:docker /usr/src/generated /var/www/html/src/Messages/generated
# Removing the iframe.html file from the final image as this adds a XSS attack.
# iframe.html is only in dev mode to circumvent a limitation

View File

@ -22,3 +22,5 @@ RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^[_@]/" "/index.html" [L]
RewriteRule "^register/" "/index.html" [L]
RewriteRule "^login" "/index.html" [L]
RewriteRule "^jwt" "/index.html" [L]

View File

@ -34,10 +34,57 @@
<title>WorkAdventure</title>
</head>
<body id="body" style="margin: 0; background-color: #000">
<div class="main-container" id="main-container">
<!-- Create the editor container -->
<div id="game" class="game">
<div id="cowebsite-container">
<div id="cowebsite-container-main">
<div id="cowebsite-slot-1">
<div class="actions">
<button type="button" class="nes-btn is-primary expand">></button>
<button type="button" class="nes-btn is-error close">&times;</button>
</div>
</div>
</div>
<div id="cowebsite-container-sub">
<div id="cowebsite-slot-2">
<div class="overlay">
<div class="actions">
<button type="button" title="Close" class="nes-btn is-error close">&times;</button>
</div>
<div class="actions-move">
<button type="button" title="Expand" class="nes-btn is-primary expand">></button>
<button type="button" title="Hightlight" class="nes-btn is-secondary hightlight">&Xi;</button>
</div>
</div>
</div>
<div id="cowebsite-slot-3">
<div class="overlay">
<div class="actions">
<button type="button" title="Close" class="nes-btn is-error close">&times;</button>
</div>
<div class="actions-move">
<button type="button" title="Expand" class="nes-btn is-primary expand">></button>
<button type="button" title="Hightlight" class="nes-btn is-secondary hightlight">&Xi;</button>
</div>
</div>
</div>
<div id="cowebsite-slot-4">
<div class="overlay">
<div class="actions">
<button type="button" title="Close" class="nes-btn is-error close">&times;</button>
</div>
<div class="actions-move">
<button type="button" title="Expand" class="nes-btn is-primary expand">></button>
<button type="button" title="Hightlight" class="nes-btn is-secondary hightlight">&Xi;</button>
</div>
</div>
</div>
</div>
</div>
<div id="svelte-overlay"></div>
<div id="game-overlay" class="game-overlay">
<div id="main-section" class="main-section">
@ -49,44 +96,24 @@
</div>
</div>
<div id="cowebsite" class="cowebsite hidden">
<aside id="cowebsite-aside">
<img src="/static/images/menu.svg" alt="hold to resize"/>
</aside>
<main id="cowebsite-main">
</main>
<button class="top-right-btn" id="cowebsite-fullscreen" alt="fullscreen mode">
<img id="cowebsite-fullscreen-open" src="resources/logos/fullscreen.svg"/>
<img id="cowebsite-fullscreen-close" style="display: none;" src="resources/logos/fullscreen-exit.svg"/>
</button>
<button class="top-right-btn" id="cowebsite-close" alt="close the iframe">
<img src="resources/logos/close.svg"/>
</button>
</div>
<div id="audioplayerctrl" class="hidden">
<div class="audioplayer">
<button type="button" id="audioplayer_mute" class="fa fa-volump-up">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-volume-up" fill="white" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M6.717 3.55A.5.5 0 0 1 7 4v8a.5.5 0 0 1-.812.39L3.825 10.5H1.5A.5.5 0 0 1 1 10V6a.5.5 0 0 1 .5-.5h2.325l2.363-1.89a.5.5 0 0 1 .529-.06zM6 5.04L4.312 6.39A.5.5 0 0 1 4 6.5H2v3h2a.5.5 0 0 1 .312.11L6 10.96V5.04z" />
<g id="audioplayer_volume_icon_playing">
<path d="M11.536 14.01A8.473 8.473 0 0 0 14.026 8a8.473 8.473 0 0 0-2.49-6.01l-.708.707A7.476 7.476 0 0 1 13.025 8c0 2.071-.84 3.946-2.197 5.303l.708.707z" />
<path d="M10.121 12.596A6.48 6.48 0 0 0 12.025 8a6.48 6.48 0 0 0-1.904-4.596l-.707.707A5.483 5.483 0 0 1 11.025 8a5.483 5.483 0 0 1-1.61 3.89l.706.706z" />
<path d="M8.707 11.182A4.486 4.486 0 0 0 10.025 8a4.486 4.486 0 0 0-1.318-3.182L8 5.525A3.489 3.489 0 0 1 9.025 8 3.49 3.49 0 0 1 8 10.475l.707.707z" />
</g>
</svg>
</button>
<div class="audioplayer">
<input type="range" id="audioplayer_volume" min="0" max="1" step="0.025" value="1" />
<aside id="cowebsite-aside" class="noselect">
<div id="cowebsite-aside-buttons">
<button class="top-right-btn nes-btn is-error" id="cowebsite-close" alt="close all co-websites">
&times;
</button>
<button class="top-right-btn nes-btn is-primary" id="cowebsite-fullscreen" alt="fullscreen mode">
<img id="cowebsite-fullscreen-close" style="display: none;" src="resources/logos/fullscreen-exit.svg"/>
<img id="cowebsite-fullscreen-open" src="resources/logos/fullscreen.svg"/>
</button>
</div>
</div>
<div class="audioplayer">
<label id="label-audioplayer_decrease_while_talking" for="audioplayer_decrease_while_talking" title="decrease background volume by 50% when entering conversations">
reduce in conversations
<input type="checkbox" id="audioplayer_decrease_while_talking" checked />
</label>
<div id="audioplayer" style="visibility: hidden"></div>
</div>
<div id="cowebsite-aside-holder">
<img src="/static/images/menu.svg" alt="hold to resize"/>
</div>
<div id="cowebsite-sub-icons"></div>
</aside>
<main id="cowebsite-slot-0"></main>
</div>
<div id="cowebsite-buffer"></div>
</div>
<div id="activeScreenSharing" class="active-screen-sharing active">
@ -94,6 +121,7 @@
<audio id="report-message">
<source src="/resources/objects/report-message.mp3" type="audio/mp3">
</audio>
<script type="text/javascript" src="config.js"></script>
</body>
</html>

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