@twentyhq/call-recorder 1.0.0 → 1.0.2-canary.0

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