@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.
Files changed (237) hide show
  1. package/manifest.json +297 -0
  2. package/package.json +2 -2
  3. package/src/front-components/calendar-event-recording.front-component.mjs +269 -0
  4. package/src/front-components/calendar-event-recording.front-component.mjs.map +7 -0
  5. package/src/logic-functions/process-recall-webhook.mjs +1744 -0
  6. package/src/logic-functions/process-recall-webhook.mjs.map +7 -0
  7. package/src/logic-functions/recall-webhook.mjs +391 -0
  8. package/src/logic-functions/recall-webhook.mjs.map +7 -0
  9. package/src/logic-functions/reconcile-call-recorder-calendar-event.mjs +1602 -0
  10. package/src/logic-functions/reconcile-call-recorder-calendar-event.mjs.map +7 -0
  11. package/src/logic-functions/reconcile-stale-bot-state.mjs +2268 -0
  12. package/src/logic-functions/reconcile-stale-bot-state.mjs.map +7 -0
  13. package/.env.example +0 -5
  14. package/.nvmrc +0 -1
  15. package/.oxlintrc.json +0 -20
  16. package/AGENTS.md +0 -67
  17. package/CLAUDE.md +0 -67
  18. package/README.md +0 -24
  19. package/SETUP.md +0 -95
  20. package/src/__tests__/global-setup.ts +0 -100
  21. package/src/__tests__/schema.integration-test.ts +0 -104
  22. package/src/application-config.ts +0 -96
  23. package/src/constants/__tests__/call-recording-field-universal-identifiers.test.ts +0 -19
  24. package/src/constants/app-description.ts +0 -2
  25. package/src/constants/app-display-name.ts +0 -1
  26. package/src/constants/application-universal-identifier.ts +0 -2
  27. package/src/constants/calendar-event-reconciliation-logic-function-universal-identifier.ts +0 -2
  28. package/src/constants/calendar-event-record-page-layout-universal-identifier.ts +0 -2
  29. package/src/constants/calendar-event-recording-front-component-universal-identifier.ts +0 -2
  30. package/src/constants/calendar-event-recording-page-layout-tab-universal-identifier.ts +0 -2
  31. package/src/constants/calendar-event-recording-page-layout-widget-universal-identifier.ts +0 -2
  32. package/src/constants/call-recorder-everyone-left-timeout-seconds-app-variable-universal-identifier.ts +0 -2
  33. package/src/constants/call-recorder-failure-reason-on-call-recording-field-universal-identifier.ts +0 -2
  34. package/src/constants/call-recorder-join-early-minutes-app-variable-universal-identifier.ts +0 -2
  35. package/src/constants/call-recorder-name-app-variable-universal-identifier.ts +0 -2
  36. package/src/constants/call-recorder-noone-joined-timeout-seconds-app-variable-universal-identifier.ts +0 -2
  37. package/src/constants/call-recorder-preference-off-option-id.ts +0 -2
  38. package/src/constants/call-recorder-preference-on-calendar-event-field-universal-identifier.ts +0 -2
  39. package/src/constants/call-recorder-preference-on-calendar-event-view-field-universal-identifier.ts +0 -2
  40. package/src/constants/call-recorder-preference-on-option-id.ts +0 -2
  41. package/src/constants/call-recorder-preference.ts +0 -4
  42. package/src/constants/call-recorder-waiting-room-timeout-seconds-app-variable-universal-identifier.ts +0 -2
  43. package/src/constants/call-recording-audio-field-universal-identifier.ts +0 -2
  44. package/src/constants/call-recording-video-field-universal-identifier.ts +0 -2
  45. package/src/constants/default-role-universal-identifier.ts +0 -2
  46. package/src/constants/process-recall-webhook-logic-function-universal-identifier.ts +0 -2
  47. package/src/constants/recall-webhook-logic-function-universal-identifier.ts +0 -2
  48. package/src/constants/stale-bot-state-logic-function-universal-identifier.ts +0 -2
  49. package/src/default-role.ts +0 -69
  50. package/src/fields/call-recorder-failure-reason-on-call-recording.field.ts +0 -22
  51. package/src/fields/call-recorder-preference-on-calendar-event.field.ts +0 -41
  52. package/src/front-components/calendar-event-recording.front-component.tsx +0 -13
  53. package/src/front-components/components/CalendarEventRecording.tsx +0 -39
  54. package/src/front-components/components/CalendarEventRecordingBody.tsx +0 -96
  55. package/src/front-components/components/CalendarEventRecordingContent.tsx +0 -111
  56. package/src/front-components/components/RecordingTranscript.tsx +0 -92
  57. package/src/front-components/components/RecordingVideoPlayer.tsx +0 -52
  58. package/src/front-components/components/TranscriptEntryList.tsx +0 -61
  59. package/src/front-components/components/TranscriptEntryListItem.tsx +0 -115
  60. package/src/front-components/components/TranscriptErrorBox.tsx +0 -48
  61. package/src/front-components/components/TranscriptSpeakerAvatar.tsx +0 -141
  62. package/src/front-components/components/TranscriptSpeakerChip.tsx +0 -51
  63. package/src/front-components/constants/recording-theme-css-variables.ts +0 -40
  64. package/src/front-components/hooks/use-calendar-event-participants.ts +0 -172
  65. package/src/front-components/hooks/use-calendar-event-recording.ts +0 -155
  66. package/src/front-components/types/calendar-event-participant-by-speaker-name.type.ts +0 -6
  67. package/src/front-components/types/calendar-event-recording-participant.type.ts +0 -7
  68. package/src/front-components/types/transcript-entry.type.ts +0 -13
  69. package/src/front-components/utils/__tests__/find-active-transcript-entry-index.test.ts +0 -66
  70. package/src/front-components/utils/__tests__/format-transcript-timestamp.test.ts +0 -29
  71. package/src/front-components/utils/__tests__/get-speaker-name-match-keys.test.ts +0 -22
  72. package/src/front-components/utils/__tests__/parse-transcript-entries.test.ts +0 -162
  73. package/src/front-components/utils/build-calendar-event-participant-by-speaker-name.util.ts +0 -45
  74. package/src/front-components/utils/find-active-transcript-entry-index.util.ts +0 -77
  75. package/src/front-components/utils/format-transcript-timestamp.util.ts +0 -16
  76. package/src/front-components/utils/get-absolute-avatar-url.util.ts +0 -48
  77. package/src/front-components/utils/get-calendar-event-participant-for-speaker-name.util.ts +0 -24
  78. package/src/front-components/utils/get-speaker-name-match-keys.util.ts +0 -64
  79. package/src/front-components/utils/get-video-file-extension.util.ts +0 -23
  80. package/src/front-components/utils/parse-transcript-entries.util.ts +0 -85
  81. package/src/logic-functions/__tests__/process-recall-webhook.test.ts +0 -62
  82. package/src/logic-functions/__tests__/recall-webhook.test.ts +0 -180
  83. package/src/logic-functions/constants/call-recorder-everyone-left-timeout-seconds-env-var-name.ts +0 -2
  84. package/src/logic-functions/constants/call-recorder-everyone-left-timeout-seconds.ts +0 -1
  85. package/src/logic-functions/constants/call-recorder-join-early-minutes-env-var-name.ts +0 -2
  86. package/src/logic-functions/constants/call-recorder-name-env-var-name.ts +0 -1
  87. package/src/logic-functions/constants/call-recorder-noone-joined-timeout-seconds-env-var-name.ts +0 -2
  88. package/src/logic-functions/constants/call-recorder-noone-joined-timeout-seconds.ts +0 -1
  89. package/src/logic-functions/constants/call-recorder-recording-retention-hours-env-var-name.ts +0 -2
  90. package/src/logic-functions/constants/call-recorder-waiting-room-timeout-seconds-env-var-name.ts +0 -2
  91. package/src/logic-functions/constants/call-recorder-waiting-room-timeout-seconds.ts +0 -1
  92. package/src/logic-functions/constants/call-recording-micro-credits-per-hour.ts +0 -1
  93. package/src/logic-functions/constants/call-recording-request-status.ts +0 -5
  94. package/src/logic-functions/constants/call-recording-status.ts +0 -9
  95. package/src/logic-functions/constants/default-call-recorder-join-early-minutes.ts +0 -1
  96. package/src/logic-functions/constants/default-call-recorder-name.ts +0 -1
  97. package/src/logic-functions/constants/default-call-recorder-recording-retention-hours.ts +0 -2
  98. package/src/logic-functions/constants/default-recall-region.ts +0 -1
  99. package/src/logic-functions/constants/milliseconds-per-minute.ts +0 -1
  100. package/src/logic-functions/constants/non-terminal-call-recording-statuses.ts +0 -8
  101. package/src/logic-functions/constants/recall-api-key-env-var-name.ts +0 -1
  102. package/src/logic-functions/constants/recall-api-max-attempts.ts +0 -1
  103. package/src/logic-functions/constants/recall-api-retry-delay-ms.ts +0 -1
  104. package/src/logic-functions/constants/recall-bot-automatic-leave.ts +0 -74
  105. package/src/logic-functions/constants/recall-bot-everyone-left-min-activate-after-seconds.ts +0 -1
  106. package/src/logic-functions/constants/recall-bot-recording-config.ts +0 -34
  107. package/src/logic-functions/constants/recall-region-env-var-name.ts +0 -1
  108. package/src/logic-functions/constants/recall-webhook-secret-env-var-name.ts +0 -1
  109. package/src/logic-functions/constants/restricted-field-placeholder.ts +0 -3
  110. package/src/logic-functions/constants/stale-bot-state-cron-pattern.ts +0 -1
  111. package/src/logic-functions/constants/twenty-page-size.ts +0 -1
  112. package/src/logic-functions/data/__tests__/complete-call-recording-ingestion.test.ts +0 -55
  113. package/src/logic-functions/data/__tests__/fetch-all-nodes.test.ts +0 -43
  114. package/src/logic-functions/data/__tests__/get-current-workspace-id.test.ts +0 -38
  115. package/src/logic-functions/data/__tests__/strip-restricted-field-value.test.ts +0 -22
  116. package/src/logic-functions/data/complete-call-recording-ingestion.util.ts +0 -24
  117. package/src/logic-functions/data/create-call-recording.util.ts +0 -41
  118. package/src/logic-functions/data/fetch-all-nodes.util.ts +0 -44
  119. package/src/logic-functions/data/fetch-calendar-events-by-filter.util.ts +0 -80
  120. package/src/logic-functions/data/fetch-calendar-events-by-ids.util.ts +0 -20
  121. package/src/logic-functions/data/fetch-calendar-events-by-starts-at-values.util.ts +0 -19
  122. package/src/logic-functions/data/find-call-recordings-by-calendar-event-ids.util.ts +0 -17
  123. package/src/logic-functions/data/find-call-recordings-by-filter.util.ts +0 -102
  124. package/src/logic-functions/data/find-call-recordings-by-ids.util.ts +0 -17
  125. package/src/logic-functions/data/find-open-scheduled-call-recordings.util.ts +0 -14
  126. package/src/logic-functions/data/get-current-workspace-id.util.ts +0 -36
  127. package/src/logic-functions/data/strip-restricted-field-value.util.ts +0 -6
  128. package/src/logic-functions/data/update-call-recording.util.ts +0 -24
  129. package/src/logic-functions/domain/__tests__/build-call-recorder-policy-result.test.ts +0 -47
  130. package/src/logic-functions/domain/__tests__/compute-call-recording-charge.test.ts +0 -71
  131. package/src/logic-functions/domain/__tests__/compute-call-recording-id-for-meeting.test.ts +0 -37
  132. package/src/logic-functions/domain/__tests__/compute-real-meeting-key.test.ts +0 -88
  133. package/src/logic-functions/domain/__tests__/is-call-recording-ingestion-complete.test.ts +0 -59
  134. package/src/logic-functions/domain/__tests__/is-call-recording-status-downgrade.test.ts +0 -37
  135. package/src/logic-functions/domain/__tests__/resolve-call-recorder-policy-result.test.ts +0 -120
  136. package/src/logic-functions/domain/__tests__/should-complete-call-recording-ingestion.test.ts +0 -102
  137. package/src/logic-functions/domain/aggregate-call-recorder-policy-results-by-meeting.util.ts +0 -42
  138. package/src/logic-functions/domain/build-call-recorder-policy-result.util.ts +0 -53
  139. package/src/logic-functions/domain/build-failed-transcript-marker.util.ts +0 -13
  140. package/src/logic-functions/domain/build-pending-transcript-marker.util.ts +0 -13
  141. package/src/logic-functions/domain/build-recall-routing-metadata.util.ts +0 -12
  142. package/src/logic-functions/domain/build-transcript-failure-reason.util.ts +0 -7
  143. package/src/logic-functions/domain/compute-call-recording-charge.util.ts +0 -41
  144. package/src/logic-functions/domain/compute-call-recording-id-for-meeting.util.ts +0 -16
  145. package/src/logic-functions/domain/compute-real-meeting-key.util.ts +0 -48
  146. package/src/logic-functions/domain/compute-recall-bot-join-at.util.ts +0 -34
  147. package/src/logic-functions/domain/is-call-recording-ingestion-complete.util.ts +0 -19
  148. package/src/logic-functions/domain/is-call-recording-status-downgrade.util.ts +0 -37
  149. package/src/logic-functions/domain/is-recall-recording-done-signal.util.ts +0 -13
  150. package/src/logic-functions/domain/map-recall-status-code-to-call-recording-status.util.ts +0 -26
  151. package/src/logic-functions/domain/parse-transcript-marker.util.ts +0 -29
  152. package/src/logic-functions/domain/resolve-call-recorder-policy-result.util.ts +0 -72
  153. package/src/logic-functions/domain/should-complete-call-recording-ingestion.util.ts +0 -32
  154. package/src/logic-functions/flows/__tests__/charge-completed-call-recording.test.ts +0 -45
  155. package/src/logic-functions/flows/__tests__/complete-and-charge-call-recording.test.ts +0 -61
  156. package/src/logic-functions/flows/__tests__/converge-diverged-call-recordings.test.ts +0 -727
  157. package/src/logic-functions/flows/__tests__/download-transcript.test.ts +0 -74
  158. package/src/logic-functions/flows/__tests__/handle-recall-webhook.test.ts +0 -1301
  159. package/src/logic-functions/flows/__tests__/heal-call-recordings-missing-bot.test.ts +0 -225
  160. package/src/logic-functions/flows/__tests__/ingest-call-recording-media.test.ts +0 -153
  161. package/src/logic-functions/flows/__tests__/reap-orphaned-call-recorders.test.ts +0 -425
  162. package/src/logic-functions/flows/__tests__/reconcile-call-recorder.test.ts +0 -1007
  163. package/src/logic-functions/flows/cancel-call-recording-request.util.ts +0 -46
  164. package/src/logic-functions/flows/charge-completed-call-recording.util.ts +0 -31
  165. package/src/logic-functions/flows/complete-and-charge-call-recording.util.ts +0 -29
  166. package/src/logic-functions/flows/converge-diverged-call-recordings-result.type.ts +0 -8
  167. package/src/logic-functions/flows/converge-diverged-call-recordings.util.ts +0 -447
  168. package/src/logic-functions/flows/download-transcript.util.ts +0 -67
  169. package/src/logic-functions/flows/ensure-call-recorder.util.ts +0 -73
  170. package/src/logic-functions/flows/handle-recall-webhook.util.ts +0 -672
  171. package/src/logic-functions/flows/heal-call-recordings-missing-bot.util.ts +0 -82
  172. package/src/logic-functions/flows/ingest-call-recording-media.util.ts +0 -128
  173. package/src/logic-functions/flows/persist-call-recording-progress.util.ts +0 -58
  174. package/src/logic-functions/flows/reap-orphaned-call-recorders.util.ts +0 -183
  175. package/src/logic-functions/flows/reconcile-call-recorder.util.ts +0 -495
  176. package/src/logic-functions/flows/reconcile-call-recording-transcript-artifact-result.type.ts +0 -11
  177. package/src/logic-functions/flows/reconcile-call-recording-transcript-artifact.util.ts +0 -182
  178. package/src/logic-functions/flows/reschedule-call-recording-bot.util.ts +0 -69
  179. package/src/logic-functions/process-recall-webhook.ts +0 -23
  180. package/src/logic-functions/recall-api/__tests__/extract-recall-bot-convergence.test.ts +0 -153
  181. package/src/logic-functions/recall-api/__tests__/extract-recall-media-urls.test.ts +0 -67
  182. package/src/logic-functions/recall-api/__tests__/recall-bot-api.test.ts +0 -744
  183. package/src/logic-functions/recall-api/__tests__/verify-recall-webhook-signature.test.ts +0 -122
  184. package/src/logic-functions/recall-api/cancel-recall-bot.util.ts +0 -28
  185. package/src/logic-functions/recall-api/create-async-recall-transcript.util.ts +0 -47
  186. package/src/logic-functions/recall-api/eject-recall-bot.util.ts +0 -28
  187. package/src/logic-functions/recall-api/extract-recall-bot-convergence.util.ts +0 -149
  188. package/src/logic-functions/recall-api/extract-recall-bot-id.util.ts +0 -10
  189. package/src/logic-functions/recall-api/extract-recall-media-urls.util.ts +0 -30
  190. package/src/logic-functions/recall-api/extract-twenty-workspace-id-from-recall-webhook.util.ts +0 -8
  191. package/src/logic-functions/recall-api/get-recall-api-config.util.ts +0 -59
  192. package/src/logic-functions/recall-api/get-recall-bot.util.ts +0 -42
  193. package/src/logic-functions/recall-api/get-recall-recording.util.ts +0 -31
  194. package/src/logic-functions/recall-api/get-recall-webhook-bot-metadata.util.ts +0 -18
  195. package/src/logic-functions/recall-api/list-recall-transcripts.util.ts +0 -141
  196. package/src/logic-functions/recall-api/list-scheduled-recall-bots.util.ts +0 -106
  197. package/src/logic-functions/recall-api/normalize-recall-timestamp.util.ts +0 -14
  198. package/src/logic-functions/recall-api/parse-recall-webhook-event.util.ts +0 -88
  199. package/src/logic-functions/recall-api/recall-bot-api-request.util.ts +0 -165
  200. package/src/logic-functions/recall-api/recall-transcript-summary.type.ts +0 -5
  201. package/src/logic-functions/recall-api/reschedule-recall-bot.util.ts +0 -56
  202. package/src/logic-functions/recall-api/retrieve-recall-transcript.util.ts +0 -71
  203. package/src/logic-functions/recall-api/schedule-recall-bot.util.ts +0 -68
  204. package/src/logic-functions/recall-api/verify-recall-webhook-signature.util.ts +0 -109
  205. package/src/logic-functions/recall-webhook.ts +0 -90
  206. package/src/logic-functions/reconcile-call-recorder-calendar-event.ts +0 -178
  207. package/src/logic-functions/reconcile-stale-bot-state.ts +0 -106
  208. package/src/logic-functions/types/calendar-event-record.type.ts +0 -5
  209. package/src/logic-functions/types/call-recorder-policy-calendar-event-input.type.ts +0 -10
  210. package/src/logic-functions/types/call-recorder-policy-input.type.ts +0 -9
  211. package/src/logic-functions/types/call-recorder-policy-not-required-reason.type.ts +0 -5
  212. package/src/logic-functions/types/call-recorder-policy-required-reason.type.ts +0 -1
  213. package/src/logic-functions/types/call-recorder-policy-result-for-calendar-event.type.ts +0 -9
  214. package/src/logic-functions/types/call-recorder-policy-result-for-meeting.type.ts +0 -6
  215. package/src/logic-functions/types/call-recorder-policy-result.type.ts +0 -12
  216. package/src/logic-functions/types/call-recorder-reconciliation-result.type.ts +0 -16
  217. package/src/logic-functions/types/call-recording-media-file.type.ts +0 -1
  218. package/src/logic-functions/types/call-recording-record.type.ts +0 -15
  219. package/src/logic-functions/types/call-recording-update-fields.type.ts +0 -20
  220. package/src/logic-functions/types/files-field-value.type.ts +0 -1
  221. package/src/logic-functions/types/meeting-recording.type.ts +0 -7
  222. package/src/logic-functions/types/recall-bot-operation-result.type.ts +0 -19
  223. package/src/logic-functions/types/recall-routing-metadata.type.ts +0 -4
  224. package/src/logic-functions/types/removed-call-recorder-occurrence.type.ts +0 -6
  225. package/src/logic-functions/types/transcript-marker.type.ts +0 -6
  226. package/src/logic-functions/utils/as-record.util.ts +0 -6
  227. package/src/logic-functions/utils/get-application-variable-value.util.ts +0 -3
  228. package/src/logic-functions/utils/get-record-at-path.util.ts +0 -10
  229. package/src/logic-functions/utils/get-string.util.ts +0 -4
  230. package/src/logic-functions/utils/get-unique-sorted-ids.util.ts +0 -8
  231. package/src/logic-functions/utils/is-non-empty-string.util.ts +0 -5
  232. package/src/page-layouts/calendar-event-recording-tab.ts +0 -33
  233. package/src/view-fields/call-recorder-preference-on-calendar-event.view-field.ts +0 -27
  234. package/tsconfig.json +0 -42
  235. package/tsconfig.spec.json +0 -9
  236. package/vitest.config.ts +0 -31
  237. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twentyhq/call-recorder",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "license": "MIT",
5
5
  "engines": {
6
6
  "node": "^24.5.0",
@@ -39,4 +39,4 @@
39
39
  "vite-tsconfig-paths": "^4.2.1",
40
40
  "vitest": "^4.1.9"
41
41
  }
42
- }
42
+ }