@twentyhq/call-recorder 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/manifest.json +297 -0
- package/package.json +2 -2
- package/src/front-components/calendar-event-recording.front-component.mjs +269 -0
- package/src/front-components/calendar-event-recording.front-component.mjs.map +7 -0
- package/src/logic-functions/process-recall-webhook.mjs +1744 -0
- package/src/logic-functions/process-recall-webhook.mjs.map +7 -0
- package/src/logic-functions/recall-webhook.mjs +391 -0
- package/src/logic-functions/recall-webhook.mjs.map +7 -0
- package/src/logic-functions/reconcile-call-recorder-calendar-event.mjs +1602 -0
- package/src/logic-functions/reconcile-call-recorder-calendar-event.mjs.map +7 -0
- package/src/logic-functions/reconcile-stale-bot-state.mjs +2268 -0
- package/src/logic-functions/reconcile-stale-bot-state.mjs.map +7 -0
- package/.env.example +0 -5
- package/.nvmrc +0 -1
- package/.oxlintrc.json +0 -20
- package/AGENTS.md +0 -67
- package/CLAUDE.md +0 -67
- package/README.md +0 -24
- package/SETUP.md +0 -95
- package/src/__tests__/global-setup.ts +0 -100
- package/src/__tests__/schema.integration-test.ts +0 -104
- package/src/application-config.ts +0 -96
- package/src/constants/__tests__/call-recording-field-universal-identifiers.test.ts +0 -19
- package/src/constants/app-description.ts +0 -2
- package/src/constants/app-display-name.ts +0 -1
- package/src/constants/application-universal-identifier.ts +0 -2
- package/src/constants/calendar-event-reconciliation-logic-function-universal-identifier.ts +0 -2
- package/src/constants/calendar-event-record-page-layout-universal-identifier.ts +0 -2
- package/src/constants/calendar-event-recording-front-component-universal-identifier.ts +0 -2
- package/src/constants/calendar-event-recording-page-layout-tab-universal-identifier.ts +0 -2
- package/src/constants/calendar-event-recording-page-layout-widget-universal-identifier.ts +0 -2
- package/src/constants/call-recorder-everyone-left-timeout-seconds-app-variable-universal-identifier.ts +0 -2
- package/src/constants/call-recorder-failure-reason-on-call-recording-field-universal-identifier.ts +0 -2
- package/src/constants/call-recorder-join-early-minutes-app-variable-universal-identifier.ts +0 -2
- package/src/constants/call-recorder-name-app-variable-universal-identifier.ts +0 -2
- package/src/constants/call-recorder-noone-joined-timeout-seconds-app-variable-universal-identifier.ts +0 -2
- package/src/constants/call-recorder-preference-off-option-id.ts +0 -2
- package/src/constants/call-recorder-preference-on-calendar-event-field-universal-identifier.ts +0 -2
- package/src/constants/call-recorder-preference-on-calendar-event-view-field-universal-identifier.ts +0 -2
- package/src/constants/call-recorder-preference-on-option-id.ts +0 -2
- package/src/constants/call-recorder-preference.ts +0 -4
- package/src/constants/call-recorder-waiting-room-timeout-seconds-app-variable-universal-identifier.ts +0 -2
- package/src/constants/call-recording-audio-field-universal-identifier.ts +0 -2
- package/src/constants/call-recording-video-field-universal-identifier.ts +0 -2
- package/src/constants/default-role-universal-identifier.ts +0 -2
- package/src/constants/process-recall-webhook-logic-function-universal-identifier.ts +0 -2
- package/src/constants/recall-webhook-logic-function-universal-identifier.ts +0 -2
- package/src/constants/stale-bot-state-logic-function-universal-identifier.ts +0 -2
- package/src/default-role.ts +0 -69
- package/src/fields/call-recorder-failure-reason-on-call-recording.field.ts +0 -22
- package/src/fields/call-recorder-preference-on-calendar-event.field.ts +0 -41
- package/src/front-components/calendar-event-recording.front-component.tsx +0 -13
- package/src/front-components/components/CalendarEventRecording.tsx +0 -39
- package/src/front-components/components/CalendarEventRecordingBody.tsx +0 -96
- package/src/front-components/components/CalendarEventRecordingContent.tsx +0 -111
- package/src/front-components/components/RecordingTranscript.tsx +0 -92
- package/src/front-components/components/RecordingVideoPlayer.tsx +0 -52
- package/src/front-components/components/TranscriptEntryList.tsx +0 -61
- package/src/front-components/components/TranscriptEntryListItem.tsx +0 -115
- package/src/front-components/components/TranscriptErrorBox.tsx +0 -48
- package/src/front-components/components/TranscriptSpeakerAvatar.tsx +0 -141
- package/src/front-components/components/TranscriptSpeakerChip.tsx +0 -51
- package/src/front-components/constants/recording-theme-css-variables.ts +0 -40
- package/src/front-components/hooks/use-calendar-event-participants.ts +0 -172
- package/src/front-components/hooks/use-calendar-event-recording.ts +0 -155
- package/src/front-components/types/calendar-event-participant-by-speaker-name.type.ts +0 -6
- package/src/front-components/types/calendar-event-recording-participant.type.ts +0 -7
- package/src/front-components/types/transcript-entry.type.ts +0 -13
- package/src/front-components/utils/__tests__/find-active-transcript-entry-index.test.ts +0 -66
- package/src/front-components/utils/__tests__/format-transcript-timestamp.test.ts +0 -29
- package/src/front-components/utils/__tests__/get-speaker-name-match-keys.test.ts +0 -22
- package/src/front-components/utils/__tests__/parse-transcript-entries.test.ts +0 -162
- package/src/front-components/utils/build-calendar-event-participant-by-speaker-name.util.ts +0 -45
- package/src/front-components/utils/find-active-transcript-entry-index.util.ts +0 -77
- package/src/front-components/utils/format-transcript-timestamp.util.ts +0 -16
- package/src/front-components/utils/get-absolute-avatar-url.util.ts +0 -48
- package/src/front-components/utils/get-calendar-event-participant-for-speaker-name.util.ts +0 -24
- package/src/front-components/utils/get-speaker-name-match-keys.util.ts +0 -64
- package/src/front-components/utils/get-video-file-extension.util.ts +0 -23
- package/src/front-components/utils/parse-transcript-entries.util.ts +0 -85
- package/src/logic-functions/__tests__/process-recall-webhook.test.ts +0 -62
- package/src/logic-functions/__tests__/recall-webhook.test.ts +0 -180
- package/src/logic-functions/constants/call-recorder-everyone-left-timeout-seconds-env-var-name.ts +0 -2
- package/src/logic-functions/constants/call-recorder-everyone-left-timeout-seconds.ts +0 -1
- package/src/logic-functions/constants/call-recorder-join-early-minutes-env-var-name.ts +0 -2
- package/src/logic-functions/constants/call-recorder-name-env-var-name.ts +0 -1
- package/src/logic-functions/constants/call-recorder-noone-joined-timeout-seconds-env-var-name.ts +0 -2
- package/src/logic-functions/constants/call-recorder-noone-joined-timeout-seconds.ts +0 -1
- package/src/logic-functions/constants/call-recorder-recording-retention-hours-env-var-name.ts +0 -2
- package/src/logic-functions/constants/call-recorder-waiting-room-timeout-seconds-env-var-name.ts +0 -2
- package/src/logic-functions/constants/call-recorder-waiting-room-timeout-seconds.ts +0 -1
- package/src/logic-functions/constants/call-recording-micro-credits-per-hour.ts +0 -1
- package/src/logic-functions/constants/call-recording-request-status.ts +0 -5
- package/src/logic-functions/constants/call-recording-status.ts +0 -9
- package/src/logic-functions/constants/default-call-recorder-join-early-minutes.ts +0 -1
- package/src/logic-functions/constants/default-call-recorder-name.ts +0 -1
- package/src/logic-functions/constants/default-call-recorder-recording-retention-hours.ts +0 -2
- package/src/logic-functions/constants/default-recall-region.ts +0 -1
- package/src/logic-functions/constants/milliseconds-per-minute.ts +0 -1
- package/src/logic-functions/constants/non-terminal-call-recording-statuses.ts +0 -8
- package/src/logic-functions/constants/recall-api-key-env-var-name.ts +0 -1
- package/src/logic-functions/constants/recall-api-max-attempts.ts +0 -1
- package/src/logic-functions/constants/recall-api-retry-delay-ms.ts +0 -1
- package/src/logic-functions/constants/recall-bot-automatic-leave.ts +0 -74
- package/src/logic-functions/constants/recall-bot-everyone-left-min-activate-after-seconds.ts +0 -1
- package/src/logic-functions/constants/recall-bot-recording-config.ts +0 -34
- package/src/logic-functions/constants/recall-region-env-var-name.ts +0 -1
- package/src/logic-functions/constants/recall-webhook-secret-env-var-name.ts +0 -1
- package/src/logic-functions/constants/restricted-field-placeholder.ts +0 -3
- package/src/logic-functions/constants/stale-bot-state-cron-pattern.ts +0 -1
- package/src/logic-functions/constants/twenty-page-size.ts +0 -1
- package/src/logic-functions/data/__tests__/complete-call-recording-ingestion.test.ts +0 -55
- package/src/logic-functions/data/__tests__/fetch-all-nodes.test.ts +0 -43
- package/src/logic-functions/data/__tests__/get-current-workspace-id.test.ts +0 -38
- package/src/logic-functions/data/__tests__/strip-restricted-field-value.test.ts +0 -22
- package/src/logic-functions/data/complete-call-recording-ingestion.util.ts +0 -24
- package/src/logic-functions/data/create-call-recording.util.ts +0 -41
- package/src/logic-functions/data/fetch-all-nodes.util.ts +0 -44
- package/src/logic-functions/data/fetch-calendar-events-by-filter.util.ts +0 -80
- package/src/logic-functions/data/fetch-calendar-events-by-ids.util.ts +0 -20
- package/src/logic-functions/data/fetch-calendar-events-by-starts-at-values.util.ts +0 -19
- package/src/logic-functions/data/find-call-recordings-by-calendar-event-ids.util.ts +0 -17
- package/src/logic-functions/data/find-call-recordings-by-filter.util.ts +0 -102
- package/src/logic-functions/data/find-call-recordings-by-ids.util.ts +0 -17
- package/src/logic-functions/data/find-open-scheduled-call-recordings.util.ts +0 -14
- package/src/logic-functions/data/get-current-workspace-id.util.ts +0 -36
- package/src/logic-functions/data/strip-restricted-field-value.util.ts +0 -6
- package/src/logic-functions/data/update-call-recording.util.ts +0 -24
- package/src/logic-functions/domain/__tests__/build-call-recorder-policy-result.test.ts +0 -47
- package/src/logic-functions/domain/__tests__/compute-call-recording-charge.test.ts +0 -71
- package/src/logic-functions/domain/__tests__/compute-call-recording-id-for-meeting.test.ts +0 -37
- package/src/logic-functions/domain/__tests__/compute-real-meeting-key.test.ts +0 -88
- package/src/logic-functions/domain/__tests__/is-call-recording-ingestion-complete.test.ts +0 -59
- package/src/logic-functions/domain/__tests__/is-call-recording-status-downgrade.test.ts +0 -37
- package/src/logic-functions/domain/__tests__/resolve-call-recorder-policy-result.test.ts +0 -120
- package/src/logic-functions/domain/__tests__/should-complete-call-recording-ingestion.test.ts +0 -102
- package/src/logic-functions/domain/aggregate-call-recorder-policy-results-by-meeting.util.ts +0 -42
- package/src/logic-functions/domain/build-call-recorder-policy-result.util.ts +0 -53
- package/src/logic-functions/domain/build-failed-transcript-marker.util.ts +0 -13
- package/src/logic-functions/domain/build-pending-transcript-marker.util.ts +0 -13
- package/src/logic-functions/domain/build-recall-routing-metadata.util.ts +0 -12
- package/src/logic-functions/domain/build-transcript-failure-reason.util.ts +0 -7
- package/src/logic-functions/domain/compute-call-recording-charge.util.ts +0 -41
- package/src/logic-functions/domain/compute-call-recording-id-for-meeting.util.ts +0 -16
- package/src/logic-functions/domain/compute-real-meeting-key.util.ts +0 -48
- package/src/logic-functions/domain/compute-recall-bot-join-at.util.ts +0 -34
- package/src/logic-functions/domain/is-call-recording-ingestion-complete.util.ts +0 -19
- package/src/logic-functions/domain/is-call-recording-status-downgrade.util.ts +0 -37
- package/src/logic-functions/domain/is-recall-recording-done-signal.util.ts +0 -13
- package/src/logic-functions/domain/map-recall-status-code-to-call-recording-status.util.ts +0 -26
- package/src/logic-functions/domain/parse-transcript-marker.util.ts +0 -29
- package/src/logic-functions/domain/resolve-call-recorder-policy-result.util.ts +0 -72
- package/src/logic-functions/domain/should-complete-call-recording-ingestion.util.ts +0 -32
- package/src/logic-functions/flows/__tests__/charge-completed-call-recording.test.ts +0 -45
- package/src/logic-functions/flows/__tests__/complete-and-charge-call-recording.test.ts +0 -61
- package/src/logic-functions/flows/__tests__/converge-diverged-call-recordings.test.ts +0 -727
- package/src/logic-functions/flows/__tests__/download-transcript.test.ts +0 -74
- package/src/logic-functions/flows/__tests__/handle-recall-webhook.test.ts +0 -1301
- package/src/logic-functions/flows/__tests__/heal-call-recordings-missing-bot.test.ts +0 -225
- package/src/logic-functions/flows/__tests__/ingest-call-recording-media.test.ts +0 -153
- package/src/logic-functions/flows/__tests__/reap-orphaned-call-recorders.test.ts +0 -425
- package/src/logic-functions/flows/__tests__/reconcile-call-recorder.test.ts +0 -1007
- package/src/logic-functions/flows/cancel-call-recording-request.util.ts +0 -46
- package/src/logic-functions/flows/charge-completed-call-recording.util.ts +0 -31
- package/src/logic-functions/flows/complete-and-charge-call-recording.util.ts +0 -29
- package/src/logic-functions/flows/converge-diverged-call-recordings-result.type.ts +0 -8
- package/src/logic-functions/flows/converge-diverged-call-recordings.util.ts +0 -447
- package/src/logic-functions/flows/download-transcript.util.ts +0 -67
- package/src/logic-functions/flows/ensure-call-recorder.util.ts +0 -73
- package/src/logic-functions/flows/handle-recall-webhook.util.ts +0 -672
- package/src/logic-functions/flows/heal-call-recordings-missing-bot.util.ts +0 -82
- package/src/logic-functions/flows/ingest-call-recording-media.util.ts +0 -128
- package/src/logic-functions/flows/persist-call-recording-progress.util.ts +0 -58
- package/src/logic-functions/flows/reap-orphaned-call-recorders.util.ts +0 -183
- package/src/logic-functions/flows/reconcile-call-recorder.util.ts +0 -495
- package/src/logic-functions/flows/reconcile-call-recording-transcript-artifact-result.type.ts +0 -11
- package/src/logic-functions/flows/reconcile-call-recording-transcript-artifact.util.ts +0 -182
- package/src/logic-functions/flows/reschedule-call-recording-bot.util.ts +0 -69
- package/src/logic-functions/process-recall-webhook.ts +0 -23
- package/src/logic-functions/recall-api/__tests__/extract-recall-bot-convergence.test.ts +0 -153
- package/src/logic-functions/recall-api/__tests__/extract-recall-media-urls.test.ts +0 -67
- package/src/logic-functions/recall-api/__tests__/recall-bot-api.test.ts +0 -744
- package/src/logic-functions/recall-api/__tests__/verify-recall-webhook-signature.test.ts +0 -122
- package/src/logic-functions/recall-api/cancel-recall-bot.util.ts +0 -28
- package/src/logic-functions/recall-api/create-async-recall-transcript.util.ts +0 -47
- package/src/logic-functions/recall-api/eject-recall-bot.util.ts +0 -28
- package/src/logic-functions/recall-api/extract-recall-bot-convergence.util.ts +0 -149
- package/src/logic-functions/recall-api/extract-recall-bot-id.util.ts +0 -10
- package/src/logic-functions/recall-api/extract-recall-media-urls.util.ts +0 -30
- package/src/logic-functions/recall-api/extract-twenty-workspace-id-from-recall-webhook.util.ts +0 -8
- package/src/logic-functions/recall-api/get-recall-api-config.util.ts +0 -59
- package/src/logic-functions/recall-api/get-recall-bot.util.ts +0 -42
- package/src/logic-functions/recall-api/get-recall-recording.util.ts +0 -31
- package/src/logic-functions/recall-api/get-recall-webhook-bot-metadata.util.ts +0 -18
- package/src/logic-functions/recall-api/list-recall-transcripts.util.ts +0 -141
- package/src/logic-functions/recall-api/list-scheduled-recall-bots.util.ts +0 -106
- package/src/logic-functions/recall-api/normalize-recall-timestamp.util.ts +0 -14
- package/src/logic-functions/recall-api/parse-recall-webhook-event.util.ts +0 -88
- package/src/logic-functions/recall-api/recall-bot-api-request.util.ts +0 -165
- package/src/logic-functions/recall-api/recall-transcript-summary.type.ts +0 -5
- package/src/logic-functions/recall-api/reschedule-recall-bot.util.ts +0 -56
- package/src/logic-functions/recall-api/retrieve-recall-transcript.util.ts +0 -71
- package/src/logic-functions/recall-api/schedule-recall-bot.util.ts +0 -68
- package/src/logic-functions/recall-api/verify-recall-webhook-signature.util.ts +0 -109
- package/src/logic-functions/recall-webhook.ts +0 -90
- package/src/logic-functions/reconcile-call-recorder-calendar-event.ts +0 -178
- package/src/logic-functions/reconcile-stale-bot-state.ts +0 -106
- package/src/logic-functions/types/calendar-event-record.type.ts +0 -5
- package/src/logic-functions/types/call-recorder-policy-calendar-event-input.type.ts +0 -10
- package/src/logic-functions/types/call-recorder-policy-input.type.ts +0 -9
- package/src/logic-functions/types/call-recorder-policy-not-required-reason.type.ts +0 -5
- package/src/logic-functions/types/call-recorder-policy-required-reason.type.ts +0 -1
- package/src/logic-functions/types/call-recorder-policy-result-for-calendar-event.type.ts +0 -9
- package/src/logic-functions/types/call-recorder-policy-result-for-meeting.type.ts +0 -6
- package/src/logic-functions/types/call-recorder-policy-result.type.ts +0 -12
- package/src/logic-functions/types/call-recorder-reconciliation-result.type.ts +0 -16
- package/src/logic-functions/types/call-recording-media-file.type.ts +0 -1
- package/src/logic-functions/types/call-recording-record.type.ts +0 -15
- package/src/logic-functions/types/call-recording-update-fields.type.ts +0 -20
- package/src/logic-functions/types/files-field-value.type.ts +0 -1
- package/src/logic-functions/types/meeting-recording.type.ts +0 -7
- package/src/logic-functions/types/recall-bot-operation-result.type.ts +0 -19
- package/src/logic-functions/types/recall-routing-metadata.type.ts +0 -4
- package/src/logic-functions/types/removed-call-recorder-occurrence.type.ts +0 -6
- package/src/logic-functions/types/transcript-marker.type.ts +0 -6
- package/src/logic-functions/utils/as-record.util.ts +0 -6
- package/src/logic-functions/utils/get-application-variable-value.util.ts +0 -3
- package/src/logic-functions/utils/get-record-at-path.util.ts +0 -10
- package/src/logic-functions/utils/get-string.util.ts +0 -4
- package/src/logic-functions/utils/get-unique-sorted-ids.util.ts +0 -8
- package/src/logic-functions/utils/is-non-empty-string.util.ts +0 -5
- package/src/page-layouts/calendar-event-recording-tab.ts +0 -33
- package/src/view-fields/call-recorder-preference-on-calendar-event.view-field.ts +0 -27
- package/tsconfig.json +0 -42
- package/tsconfig.spec.json +0 -9
- package/vitest.config.ts +0 -31
- package/vitest.unit.config.ts +0 -14
package/manifest.json
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
{
|
|
2
|
+
"application": {
|
|
3
|
+
"universalIdentifier": "8da4b8b5-5edf-4880-b51f-ab6e679ec617",
|
|
4
|
+
"displayName": "Call Recorder",
|
|
5
|
+
"description": "Capture every customer conversation automatically. A call recorder joins eligible meetings and records calls for you.",
|
|
6
|
+
"logoUrl": "public/logo.svg",
|
|
7
|
+
"screenshots": [
|
|
8
|
+
"public/gallery/call-recorder-cover.png"
|
|
9
|
+
],
|
|
10
|
+
"applicationVariables": {
|
|
11
|
+
"CALL_RECORDER_NAME": {
|
|
12
|
+
"universalIdentifier": "c54cbacd-ad10-40b4-9056-7aaf23846d64",
|
|
13
|
+
"description": "Display name the call recorder uses when it joins a call.",
|
|
14
|
+
"isSecret": false,
|
|
15
|
+
"value": "Twenty.com"
|
|
16
|
+
},
|
|
17
|
+
"CALL_RECORDER_JOIN_EARLY_MINUTES": {
|
|
18
|
+
"universalIdentifier": "0568ebb2-3f64-47de-8c0d-d367dfbb7462",
|
|
19
|
+
"description": "How many minutes before the meeting start time the bot should join. Set to 0 to join at the scheduled start time.",
|
|
20
|
+
"isSecret": false,
|
|
21
|
+
"value": "1"
|
|
22
|
+
},
|
|
23
|
+
"CALL_RECORDER_WAITING_ROOM_TIMEOUT_SECONDS": {
|
|
24
|
+
"universalIdentifier": "12e4e14d-d539-4d07-b477-4773539dd20b",
|
|
25
|
+
"description": "How many seconds the bot waits in a meeting lobby before giving up and leaving.",
|
|
26
|
+
"isSecret": false,
|
|
27
|
+
"value": "1200"
|
|
28
|
+
},
|
|
29
|
+
"CALL_RECORDER_NOONE_JOINED_TIMEOUT_SECONDS": {
|
|
30
|
+
"universalIdentifier": "241180e8-d864-4160-ad02-db44a9e8d395",
|
|
31
|
+
"description": "How many seconds the bot stays in an empty meeting when no one else ever joins.",
|
|
32
|
+
"isSecret": false,
|
|
33
|
+
"value": "1200"
|
|
34
|
+
},
|
|
35
|
+
"CALL_RECORDER_EVERYONE_LEFT_TIMEOUT_SECONDS": {
|
|
36
|
+
"universalIdentifier": "c866ddd4-fb7b-4cb4-8ad1-5599755e495c",
|
|
37
|
+
"description": "How many seconds the bot keeps recording after everyone else leaves the meeting.",
|
|
38
|
+
"isSecret": false,
|
|
39
|
+
"value": "2"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"serverVariables": {
|
|
43
|
+
"RECALL_API_KEY": {
|
|
44
|
+
"description": "Recall.ai API key for the configured region. Set by the server admin on this registration after installation; used to create, update, and cancel scheduled recording bots.",
|
|
45
|
+
"isSecret": true,
|
|
46
|
+
"isRequired": true
|
|
47
|
+
},
|
|
48
|
+
"RECALL_REGION": {
|
|
49
|
+
"description": "Recall.ai region used for API requests. Defaults to eu-central-1 when unset. Europe Frankfurt is eu-central-1.",
|
|
50
|
+
"isSecret": false
|
|
51
|
+
},
|
|
52
|
+
"CALL_RECORDER_RECORDING_RETENTION_HOURS": {
|
|
53
|
+
"description": "How many hours Recall.ai retains recording media after processing. Defaults to 166 hours (6 days and 22 hours) to stay below Recall.ai's 7-day free storage window. Values above 168 hours may incur Recall.ai storage charges.",
|
|
54
|
+
"isSecret": false
|
|
55
|
+
},
|
|
56
|
+
"RECALL_WEBHOOK_SECRET": {
|
|
57
|
+
"description": "Recall.ai webhook signing secret (whsec_...). Set by the server admin from the Recall webhook endpoint settings; used to verify the Svix signature of incoming Recall webhook deliveries.",
|
|
58
|
+
"isSecret": true,
|
|
59
|
+
"isRequired": true
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"defaultRoleUniversalIdentifier": "5fcf4d3a-0aca-42d9-9beb-7387f43ec180",
|
|
63
|
+
"aboutDescription": "# Call Recorder\n\n**Record, transcribe, and save every meeting — right inside your CRM.**\n\n## ✨ What you get\n\n- **Recordings on every meeting**\n- **A Call Recording tab**\n- **A per-meeting on/off switch**\n- **Built for AI & automation**\n\n## 💳 Billing\n\nMetered in Twenty credits based on the bot's actual recording time, prorated by\nduration — **$1.00 per recording-hour** (1 credit). No recording — opted out,\ncanceled, or no-show — means no charge.\n\n## 📌 Heads up\n\n- **Needs a synced calendar + video link** — ad-hoc calls that were never on\n your Google, Outlook, or CalDAV calendar aren't recorded.\n- **Your copy is yours** — Twenty stores its own video, audio, and transcript,\n so they stay available after the source media expires.\n\n",
|
|
64
|
+
"yarnLockChecksum": "06f5858491f119b83b08291092decc47",
|
|
65
|
+
"packageJsonChecksum": "3fe7dcb915f2f0344a761122478ebefa"
|
|
66
|
+
},
|
|
67
|
+
"objects": [],
|
|
68
|
+
"fields": [
|
|
69
|
+
{
|
|
70
|
+
"universalIdentifier": "33a577e4-02f5-48bd-8bed-d365949caa72",
|
|
71
|
+
"objectUniversalIdentifier": "ce19efb9-710f-45b2-b141-473abbeea60b",
|
|
72
|
+
"type": "TEXT",
|
|
73
|
+
"name": "callRecorderFailureReason",
|
|
74
|
+
"label": "Call Recorder Failure Reason",
|
|
75
|
+
"description": "Provider-specific reason the call recorder could not produce a recording.",
|
|
76
|
+
"icon": "IconAlertTriangle",
|
|
77
|
+
"isNullable": true,
|
|
78
|
+
"isUIEditable": false
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"universalIdentifier": "8ee9444a-2437-4def-8e61-6e493862a4fd",
|
|
82
|
+
"objectUniversalIdentifier": "20202020-8f1d-4eef-9f85-0d1965e27221",
|
|
83
|
+
"type": "SELECT",
|
|
84
|
+
"name": "callRecorderPreference",
|
|
85
|
+
"label": "Recording Bot",
|
|
86
|
+
"description": "Call recording is on by default when the app is installed. Turn it off for this event when needed.",
|
|
87
|
+
"icon": "IconRobot",
|
|
88
|
+
"isNullable": false,
|
|
89
|
+
"defaultValue": "'ON'",
|
|
90
|
+
"options": [
|
|
91
|
+
{
|
|
92
|
+
"id": "72431216-49c4-47c8-99af-de4c3831b0be",
|
|
93
|
+
"value": "ON",
|
|
94
|
+
"label": "On",
|
|
95
|
+
"position": 0,
|
|
96
|
+
"color": "green"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "cc7de62a-08b6-46c8-aa69-f8117e7dd722",
|
|
100
|
+
"value": "OFF",
|
|
101
|
+
"label": "Off",
|
|
102
|
+
"position": 1,
|
|
103
|
+
"color": "red"
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"indexes": [],
|
|
109
|
+
"permissionFlags": [],
|
|
110
|
+
"roles": [
|
|
111
|
+
{
|
|
112
|
+
"universalIdentifier": "5fcf4d3a-0aca-42d9-9beb-7387f43ec180",
|
|
113
|
+
"label": "Call Recorder default role",
|
|
114
|
+
"description": "Reads calendar events to decide whether the call recorder should attend a meeting; writes the resulting CallRecording records, uploads recording media, and fills transcripts.",
|
|
115
|
+
"canReadAllObjectRecords": false,
|
|
116
|
+
"canUpdateAllObjectRecords": false,
|
|
117
|
+
"canSoftDeleteAllObjectRecords": false,
|
|
118
|
+
"canDestroyAllObjectRecords": false,
|
|
119
|
+
"canUpdateAllSettings": false,
|
|
120
|
+
"canBeAssignedToAgents": false,
|
|
121
|
+
"canBeAssignedToUsers": false,
|
|
122
|
+
"canBeAssignedToApiKeys": false,
|
|
123
|
+
"objectPermissions": [
|
|
124
|
+
{
|
|
125
|
+
"objectUniversalIdentifier": "20202020-8f1d-4eef-9f85-0d1965e27221",
|
|
126
|
+
"canReadObjectRecords": true,
|
|
127
|
+
"canUpdateObjectRecords": false,
|
|
128
|
+
"canSoftDeleteObjectRecords": false,
|
|
129
|
+
"canDestroyObjectRecords": false,
|
|
130
|
+
"universalIdentifier": "ad99cfa6-30cd-5415-8129-42f4b353eb8c"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"objectUniversalIdentifier": "20202020-a1c3-47a6-9732-27e5b1e8436d",
|
|
134
|
+
"canReadObjectRecords": true,
|
|
135
|
+
"canUpdateObjectRecords": false,
|
|
136
|
+
"canSoftDeleteObjectRecords": false,
|
|
137
|
+
"canDestroyObjectRecords": false,
|
|
138
|
+
"universalIdentifier": "5c276074-7178-5766-ae86-e0e7f954eec2"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"objectUniversalIdentifier": "ce19efb9-710f-45b2-b141-473abbeea60b",
|
|
142
|
+
"canReadObjectRecords": true,
|
|
143
|
+
"canUpdateObjectRecords": true,
|
|
144
|
+
"canSoftDeleteObjectRecords": false,
|
|
145
|
+
"canDestroyObjectRecords": false,
|
|
146
|
+
"universalIdentifier": "12f6be8c-d362-5304-bdc7-487a24b4e522"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"objectUniversalIdentifier": "20202020-e674-48e5-a542-72570eee7213",
|
|
150
|
+
"canReadObjectRecords": true,
|
|
151
|
+
"canUpdateObjectRecords": false,
|
|
152
|
+
"canSoftDeleteObjectRecords": false,
|
|
153
|
+
"canDestroyObjectRecords": false,
|
|
154
|
+
"universalIdentifier": "2c6d53b6-7ccf-5447-a512-0708e857b1e1"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"objectUniversalIdentifier": "20202020-3319-4234-a34c-82d5c0e881a6",
|
|
158
|
+
"canReadObjectRecords": true,
|
|
159
|
+
"canUpdateObjectRecords": false,
|
|
160
|
+
"canSoftDeleteObjectRecords": false,
|
|
161
|
+
"canDestroyObjectRecords": false,
|
|
162
|
+
"universalIdentifier": "a1b8b441-795d-58b7-af02-1696580c78ac"
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"fieldPermissions": [],
|
|
166
|
+
"permissionFlagUniversalIdentifiers": [
|
|
167
|
+
"dc6931a9-44bd-5164-a983-3db5db837f54"
|
|
168
|
+
],
|
|
169
|
+
"rowLevelPermissionPredicateGroups": [],
|
|
170
|
+
"rowLevelPermissionPredicates": []
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
"skills": [],
|
|
174
|
+
"agents": [],
|
|
175
|
+
"connectionProviders": [],
|
|
176
|
+
"logicFunctions": [
|
|
177
|
+
{
|
|
178
|
+
"universalIdentifier": "13d9c427-447e-494a-8d3c-1af5d0bacb82",
|
|
179
|
+
"name": "process-recall-webhook",
|
|
180
|
+
"description": "Updates the matching CallRecording lifecycle status from a verified Recall.ai webhook event.",
|
|
181
|
+
"timeoutSeconds": 30,
|
|
182
|
+
"handlerName": "default.config.handler",
|
|
183
|
+
"sourceHandlerPath": "src/logic-functions/process-recall-webhook.ts",
|
|
184
|
+
"builtHandlerPath": "src/logic-functions/process-recall-webhook.mjs",
|
|
185
|
+
"builtHandlerChecksum": "d5fffe7e2b43297988cd0c5b9b295c55"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"universalIdentifier": "1f28c477-6423-4911-85bf-2296ef112be9",
|
|
189
|
+
"name": "reconcile-call-recorder-calendar-event",
|
|
190
|
+
"description": "Reconciles app-managed Recall bot recording requests when calendar events change.",
|
|
191
|
+
"timeoutSeconds": 60,
|
|
192
|
+
"databaseEventTriggerSettings": {
|
|
193
|
+
"eventName": "calendarEvent.*"
|
|
194
|
+
},
|
|
195
|
+
"handlerName": "default.config.handler",
|
|
196
|
+
"sourceHandlerPath": "src/logic-functions/reconcile-call-recorder-calendar-event.ts",
|
|
197
|
+
"builtHandlerPath": "src/logic-functions/reconcile-call-recorder-calendar-event.mjs",
|
|
198
|
+
"builtHandlerChecksum": "aa463e3ff7b0edc6173e14daaede570f"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"universalIdentifier": "9215afe6-1497-4149-a49d-e608e239bbaf",
|
|
202
|
+
"name": "recall-webhook",
|
|
203
|
+
"description": "Verifies Recall.ai webhook signatures and resolves the target workspace for the matching CallRecording update.",
|
|
204
|
+
"timeoutSeconds": 30,
|
|
205
|
+
"serverRouteTriggerSettings": {
|
|
206
|
+
"forwardedRequestHeaders": [
|
|
207
|
+
"webhook-id",
|
|
208
|
+
"webhook-timestamp",
|
|
209
|
+
"webhook-signature",
|
|
210
|
+
"svix-id",
|
|
211
|
+
"svix-timestamp",
|
|
212
|
+
"svix-signature"
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
"handlerName": "default.config.handler",
|
|
216
|
+
"sourceHandlerPath": "src/logic-functions/recall-webhook.ts",
|
|
217
|
+
"builtHandlerPath": "src/logic-functions/recall-webhook.mjs",
|
|
218
|
+
"builtHandlerChecksum": "4edeeec6298f3143f76168c55ba24bb3"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"universalIdentifier": "e362aa9b-52c6-4b7e-bb20-927e0e8d7cbe",
|
|
222
|
+
"name": "reconcile-stale-bot-state",
|
|
223
|
+
"description": "Converges call recordings with Recall on a schedule: pulls stale bot statuses and overdue transcripts, finishes failed cancellations, schedules bots for recordings still missing one, and reaps unclaimed bots. Reads calendar events only to heal already-decided recordings, never to discover meetings.",
|
|
224
|
+
"timeoutSeconds": 250,
|
|
225
|
+
"cronTriggerSettings": {
|
|
226
|
+
"pattern": "*/5 * * * *"
|
|
227
|
+
},
|
|
228
|
+
"handlerName": "default.config.handler",
|
|
229
|
+
"sourceHandlerPath": "src/logic-functions/reconcile-stale-bot-state.ts",
|
|
230
|
+
"builtHandlerPath": "src/logic-functions/reconcile-stale-bot-state.mjs",
|
|
231
|
+
"builtHandlerChecksum": "77e7a2c0c48044e930cfaf52ebd45a22"
|
|
232
|
+
}
|
|
233
|
+
],
|
|
234
|
+
"frontComponents": [
|
|
235
|
+
{
|
|
236
|
+
"universalIdentifier": "445d742e-1c27-46ee-a9ab-4a1dde65adcf",
|
|
237
|
+
"name": "calendar-event-recording",
|
|
238
|
+
"description": "Read-only recording viewer with synced transcript for the calendar event record page.",
|
|
239
|
+
"componentName": "CalendarEventRecording",
|
|
240
|
+
"sourceComponentPath": "src/front-components/calendar-event-recording.front-component.tsx",
|
|
241
|
+
"builtComponentPath": "src/front-components/calendar-event-recording.front-component.mjs",
|
|
242
|
+
"builtComponentChecksum": "d321b6631927a49c888713706f7fac85",
|
|
243
|
+
"isHeadless": false,
|
|
244
|
+
"usesSdkClient": true
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
"publicAssets": [
|
|
248
|
+
{
|
|
249
|
+
"filePath": "public/gallery/call-recorder-cover.png",
|
|
250
|
+
"fileName": "call-recorder-cover.png",
|
|
251
|
+
"fileType": "png",
|
|
252
|
+
"checksum": "a2a15819580852ebf309fe2dfc890329"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"filePath": "public/logo.svg",
|
|
256
|
+
"fileName": "logo.svg",
|
|
257
|
+
"fileType": "svg",
|
|
258
|
+
"checksum": "50556054b4a4e26b0160c965a551c81b"
|
|
259
|
+
}
|
|
260
|
+
],
|
|
261
|
+
"views": [],
|
|
262
|
+
"viewFields": [
|
|
263
|
+
{
|
|
264
|
+
"universalIdentifier": "e8c7e9c5-2b4f-4a75-ae46-ea331809106c",
|
|
265
|
+
"viewUniversalIdentifier": "c73668d1-022d-4eaf-b825-4e2548180db6",
|
|
266
|
+
"viewFieldGroupUniversalIdentifier": "aeadeb9e-3673-4c0c-8845-f59cb1e6ca42",
|
|
267
|
+
"fieldMetadataUniversalIdentifier": "8ee9444a-2437-4def-8e61-6e493862a4fd",
|
|
268
|
+
"position": 8,
|
|
269
|
+
"isVisible": true,
|
|
270
|
+
"size": 150
|
|
271
|
+
}
|
|
272
|
+
],
|
|
273
|
+
"navigationMenuItems": [],
|
|
274
|
+
"pageLayouts": [],
|
|
275
|
+
"pageLayoutTabs": [
|
|
276
|
+
{
|
|
277
|
+
"universalIdentifier": "10c2c22d-952b-42ea-81fe-2e93e7d30f86",
|
|
278
|
+
"title": "Call Recording",
|
|
279
|
+
"position": 15,
|
|
280
|
+
"icon": "IconVideo",
|
|
281
|
+
"layoutMode": "CANVAS",
|
|
282
|
+
"pageLayoutUniversalIdentifier": "b9b10e40-9ce2-4704-8ac6-c6e92e2563c1",
|
|
283
|
+
"widgets": [
|
|
284
|
+
{
|
|
285
|
+
"universalIdentifier": "29c2315b-2ee6-41df-91b7-42f58f6c1a53",
|
|
286
|
+
"title": "Transcript",
|
|
287
|
+
"type": "FRONT_COMPONENT",
|
|
288
|
+
"configuration": {
|
|
289
|
+
"configurationType": "FRONT_COMPONENT",
|
|
290
|
+
"frontComponentUniversalIdentifier": "445d742e-1c27-46ee-a9ab-4a1dde65adcf"
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
],
|
|
296
|
+
"commandMenuItems": []
|
|
297
|
+
}
|
package/package.json
CHANGED