1+ #!/usr/bin/env ruby
2+ # frozen_string_literal: true
3+
4+ $LOAD_PATH. unshift File . expand_path ( '../../lib' , __dir__ )
5+ require "nylas"
6+ require "json"
7+ require "time"
8+
9+ # Initialize the Nylas client
10+ nylas = Nylas ::Client . new (
11+ api_key : ENV [ "NYLAS_API_KEY" ] ,
12+ api_uri : ENV [ "NYLAS_API_URI" ] || "https://api.us.nylas.com"
13+ )
14+
15+ def create_event_with_notetaker ( nylas )
16+ puts "\n === Creating Event with Notetaker ==="
17+
18+ # Create the event time
19+ start_time = Time . now + ( 24 * 60 * 60 ) # tomorrow
20+ end_time = start_time + ( 60 * 60 ) # 1 hour later
21+
22+ request_body = {
23+ title : "Project Planning Meeting" ,
24+ description : "Initial project planning and resource allocation" ,
25+ when : {
26+ start_time : start_time . to_i ,
27+ end_time : end_time . to_i
28+ } ,
29+ metadata : {
30+ project_id : "PROJ-123" ,
31+ priority : "high"
32+ } ,
33+ conferencing : {
34+ provider : "Google Meet" ,
35+ autocreate : { }
36+ } ,
37+ notetaker : {
38+ name : "Nylas Notetaker" ,
39+ meeting_settings : {
40+ video_recording : true ,
41+ audio_recording : true ,
42+ transcription : true
43+ }
44+ }
45+ }
46+
47+ query_params = {
48+ calendar_id : ENV [ "NYLAS_CALENDAR_ID" ]
49+ }
50+
51+ puts "Creating event with request body: #{ JSON . pretty_generate ( request_body ) } "
52+
53+ event , request_id = nylas . events . create (
54+ identifier : ENV [ "NYLAS_GRANT_ID" ] ,
55+ request_body : request_body ,
56+ query_params : query_params
57+ )
58+
59+ puts "Created event with ID: #{ event [ :id ] } "
60+ puts "Event Notetaker ID: #{ event [ :notetaker ] [ :id ] } "
61+ puts "Request ID: #{ request_id } "
62+
63+ event
64+ end
65+
66+ def get_event_notetaker ( nylas , event_id )
67+ puts "\n === Retrieving Event Notetaker ==="
68+
69+ # First get the event to get the Notetaker ID
70+ begin
71+ event , request_id = nylas . events . find (
72+ identifier : ENV [ "NYLAS_GRANT_ID" ] ,
73+ event_id : event_id ,
74+ query_params : { calendar_id : ENV [ "NYLAS_CALENDAR_ID" ] }
75+ )
76+ rescue StandardError => e
77+ puts "Error getting event: #{ e . message } "
78+ return nil
79+ end
80+
81+ unless event [ :notetaker ] && event [ :notetaker ] [ :id ]
82+ puts "No Notetaker found for event #{ event_id } "
83+ return nil
84+ end
85+
86+ notetaker , request_id = nylas . notetakers . find (
87+ notetaker_id : event [ :notetaker ] [ :id ] ,
88+ identifier : ENV [ "NYLAS_GRANT_ID" ]
89+ )
90+
91+ puts "Found Notetaker for event #{ event_id } :"
92+ puts "- ID: #{ notetaker [ :id ] } "
93+ puts "- State: #{ notetaker [ :state ] } "
94+ puts "- Meeting Provider: #{ notetaker [ :meeting_provider ] } "
95+ puts "- Meeting Settings:"
96+ puts " - Video Recording: #{ notetaker [ :meeting_settings ] [ :video_recording ] } "
97+ puts " - Audio Recording: #{ notetaker [ :meeting_settings ] [ :audio_recording ] } "
98+ puts " - Transcription: #{ notetaker [ :meeting_settings ] [ :transcription ] } "
99+ puts "Request ID: #{ request_id } "
100+
101+ notetaker
102+ end
103+
104+ def update_event_and_notetaker ( nylas , event_id , notetaker_id )
105+ puts "\n === Updating Event and Notetaker ==="
106+
107+ request_body = {
108+ title : "Updated Project Planning Meeting" ,
109+ description : "Revised project planning with new timeline" ,
110+ metadata : {
111+ project_id : "PROJ-123" ,
112+ priority : "urgent"
113+ } ,
114+ notetaker : {
115+ id : notetaker_id ,
116+ name : "Updated Nylas Notetaker" ,
117+ meeting_settings : {
118+ video_recording : false ,
119+ audio_recording : true ,
120+ transcription : false
121+ }
122+ }
123+ }
124+
125+ query_params = {
126+ calendar_id : ENV [ "NYLAS_CALENDAR_ID" ]
127+ }
128+
129+ updated_event , request_id = nylas . events . update (
130+ identifier : ENV [ "NYLAS_GRANT_ID" ] ,
131+ event_id : event_id ,
132+ request_body : request_body ,
133+ query_params : query_params
134+ )
135+
136+ puts "Updated event with ID: #{ updated_event [ :id ] } "
137+ puts "Request ID: #{ request_id } "
138+
139+ updated_event
140+ end
141+
142+ def main
143+ # Check for required environment variables
144+ required_env_vars = %w[ NYLAS_API_KEY NYLAS_GRANT_ID NYLAS_CALENDAR_ID ]
145+ missing_vars = required_env_vars . select { |var | ENV [ var ] . nil? }
146+
147+ unless missing_vars . empty?
148+ raise "Missing required environment variables: #{ missing_vars . join ( ', ' ) } "
149+ end
150+
151+ puts "Using API key: #{ ENV [ 'NYLAS_API_KEY' ] [ 0 ..4 ] } ..."
152+
153+ # Initialize Nylas client
154+ nylas = Nylas ::Client . new (
155+ api_key : ENV [ "NYLAS_API_KEY" ] ,
156+ api_uri : ENV [ "NYLAS_API_URI" ] || "https://api.us.nylas.com"
157+ )
158+
159+ begin
160+ # Create an event with a Notetaker
161+ event = create_event_with_notetaker ( nylas )
162+ unless event
163+ puts "Failed to create event"
164+ return
165+ end
166+
167+ # Get the Notetaker for the event
168+ notetaker = get_event_notetaker ( nylas , event [ :id ] )
169+ unless notetaker
170+ puts "Failed to get Notetaker for event #{ event [ :id ] } "
171+ return
172+ end
173+
174+ # Update both the event and its Notetaker
175+ updated_event = update_event_and_notetaker ( nylas , event [ :id ] , notetaker [ :id ] )
176+ unless updated_event
177+ puts "Failed to update event #{ event [ :id ] } "
178+ return
179+ end
180+
181+ rescue StandardError => e
182+ puts "An error occurred: #{ e . message } "
183+ end
184+ end
185+
186+ main if __FILE__ == $PROGRAM_NAME
0 commit comments