Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
43 lines
1.7 KiB
Markdown
43 lines
1.7 KiB
Markdown
# Media Notes
|
|
|
|
Example Twenty app demonstrating media recording with the **standard web
|
|
APIs**: the sandbox polyfills `navigator.mediaDevices.getUserMedia` and
|
|
`MediaRecorder`, so the recording code reads like it would in any web page.
|
|
The only Twenty-specific call is `uploadFile` from
|
|
`twenty-sdk/front-component`, which stores the recorded blob in a FILES
|
|
field.
|
|
|
|
A pinned global command ("Record media note") opens a front component that
|
|
records a voice or video note with its own UI, uploads it on stop, attaches
|
|
it to a Media note record, then plays the stored file back from its signed
|
|
URL.
|
|
|
|
## Run the e2e regression test
|
|
|
|
The test drives the full flow against a local Twenty instance with Chromium's
|
|
fake media devices (no real microphone or camera needed):
|
|
|
|
Cookie sessions are credentialed, so the front only authenticates from the
|
|
API's own origin — workspace subdomains included, which the login flow lands
|
|
on. Serve the front build from the server rather than on its own port:
|
|
|
|
```sh
|
|
# from the repo root
|
|
npx nx build twenty-sdk
|
|
NODE_ENV=production npx nx build twenty-front
|
|
npx nx build twenty-server
|
|
cp -r packages/twenty-front/build packages/twenty-server/dist/front
|
|
|
|
# start:ci, not start: the watch target would rimraf dist and delete the front
|
|
npx nx start:ci twenty-server &
|
|
|
|
node packages/twenty-sdk/dist/cli.cjs app:publish --private && node packages/twenty-sdk/dist/cli.cjs app:install
|
|
|
|
# then, from this directory
|
|
FRONT_BASE_URL=http://localhost:3000 npx playwright test --project=setup --project=chromium
|
|
```
|
|
|
|
It asserts the app-owned recording timer, the playback preview, the uploaded
|
|
file reference received by the component, and the cancel path — screenshots
|
|
of each step land in `e2e/.results/screenshots/`.
|