openemail 0.0.1 → 0.0.3

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.
@@ -1,6 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenEmail
4
+ ADDRESS_CHECK_REASONS = {
5
+ INVALID_SYNTAX: "invalid_syntax",
6
+ DOMAIN_NOT_FOUND: "domain_not_found",
7
+ NO_MAIL_SERVER: "no_mail_server",
8
+ NULL_MX: "null_mx",
9
+ NO_MX_RECORD: "no_mx_record",
10
+ DNS_UNREACHABLE: "dns_unreachable",
11
+ DISPOSABLE: "disposable",
12
+ ROLE_ADDRESS: "role_address",
13
+ TYPO_SUSPECTED: "typo_suspected",
14
+ SUPPRESSED: "suppressed",
15
+ BOUNCED_BEFORE: "bounced_before",
16
+ MAILBOX_NOT_FOUND: "mailbox_not_found",
17
+ MAILBOX_UNCERTAIN: "mailbox_uncertain",
18
+ RANDOM_INPUT: "random_input"
19
+ }.freeze
20
+
21
+ ADDRESS_CHECK_RESULTS = {VALID: "valid", RISKY: "risky", INVALID: "invalid", UNKNOWN: "unknown"}.freeze
22
+
23
+ ADDRESS_CONFIDENCES = {HIGH: "high", MEDIUM: "medium", LOW: "low"}.freeze
24
+
4
25
  ADDRESS_FORWARD_CONSENT_STATUSES = {
5
26
  SENT: "sent",
6
27
  ALREADY_CONFIRMED: "already-confirmed",
@@ -18,6 +39,17 @@ module OpenEmail
18
39
  DIRECT: "direct"
19
40
  }.freeze
20
41
 
42
+ ADDRESS_MX_STATUSES = {
43
+ FOUND: "found",
44
+ IMPLICIT: "implicit",
45
+ MISSING: "missing",
46
+ NULL_MX: "null_mx",
47
+ DOMAIN_NOT_FOUND: "domain_not_found",
48
+ UNKNOWN: "unknown"
49
+ }.freeze
50
+
51
+ ADD_ONS = {DEDICATED_IP: "dedicated-ip"}.freeze
52
+
21
53
  API_SCOPES = {
22
54
  EMAILS_SEND: "emails:send",
23
55
  EMAILS_READ: "emails:read",
@@ -55,6 +87,8 @@ module OpenEmail
55
87
  KEYS_MANAGE: "keys:manage",
56
88
  FORMS_READ: "forms:read",
57
89
  FORMS_WRITE: "forms:write",
90
+ KNOWLEDGE_READ: "knowledge:read",
91
+ KNOWLEDGE_WRITE: "knowledge:write",
58
92
  BILLING_READ: "billing:read",
59
93
  BILLING_WRITE: "billing:write",
60
94
  ACCOUNT_READ: "account:read",
@@ -63,8 +97,100 @@ module OpenEmail
63
97
 
64
98
  APP_HOST_STATUSES = {NONE: "none", PENDING: "pending", ACTIVE: "active", FAILED: "failed"}.freeze
65
99
 
100
+ APP_PASSWORD_ORIGINS = {SETTINGS: "settings", SETUP_LINK: "setup-link", API: "api"}.freeze
101
+
66
102
  AUDIENCE_MEMBER_STATUSES = {SUBSCRIBED: "subscribed", UNSUBSCRIBED: "unsubscribed"}.freeze
67
103
 
104
+ AUTOMATION_CONDITION_KINDS = {
105
+ EMAIL_OPENED: "email_opened",
106
+ EMAIL_CLICKED: "email_clicked",
107
+ IN_AUDIENCE: "in_audience",
108
+ FIELD: "field",
109
+ EVENT: "event"
110
+ }.freeze
111
+
112
+ AUTOMATION_DATE_FIELDS = {BIRTHDAY: "birthday", JOINED: "joined"}.freeze
113
+
114
+ AUTOMATION_DURATION_UNITS = {MINUTES: "minutes", HOURS: "hours", DAYS: "days", WEEKS: "weeks"}.freeze
115
+
116
+ AUTOMATION_ENROLLMENT_SOURCES = {TRIGGER: "trigger", MANUAL: "manual", API: "api"}.freeze
117
+
118
+ AUTOMATION_ENROLLMENT_STATUSES = {ACTIVE: "active", COMPLETED: "completed", EXITED: "exited"}.freeze
119
+
120
+ AUTOMATION_EXIT_REASONS = {
121
+ COMPLETED: "completed",
122
+ EXIT_STEP: "exit_step",
123
+ UNSUBSCRIBED: "unsubscribed",
124
+ SUPPRESSED: "suppressed",
125
+ LEFT_AUDIENCE: "left_audience",
126
+ REMOVED: "removed",
127
+ ARCHIVED: "archived",
128
+ FAILED: "failed"
129
+ }.freeze
130
+
131
+ AUTOMATION_FIELD_OPERATORS = {
132
+ EQUALS: "equals",
133
+ NOT_EQUALS: "not_equals",
134
+ CONTAINS: "contains",
135
+ NOT_CONTAINS: "not_contains",
136
+ STARTS_WITH: "starts_with",
137
+ ENDS_WITH: "ends_with",
138
+ IS_SET: "is_set",
139
+ IS_NOT_SET: "is_not_set",
140
+ GREATER_THAN: "greater_than",
141
+ LESS_THAN: "less_than"
142
+ }.freeze
143
+
144
+ AUTOMATION_HOLD_REASONS = {WINDOW: "window", QUOTA: "quota", LANE: "lane", RETRY: "retry"}.freeze
145
+
146
+ AUTOMATION_PAUSE_REASONS = {
147
+ MANUAL: "manual",
148
+ SENDER_REFUSED: "sender_refused",
149
+ KEY_REVOKED: "key_revoked",
150
+ TEMPLATE_UNAVAILABLE: "template_unavailable",
151
+ AUDIENCE_MISSING: "audience_missing",
152
+ PLAN_LIMIT: "plan_limit"
153
+ }.freeze
154
+
155
+ AUTOMATION_RUN_OUTCOMES = {
156
+ SENT: "sent",
157
+ SKIPPED: "skipped",
158
+ WAITED: "waited",
159
+ YES: "yes",
160
+ NO: "no",
161
+ ADDED: "added",
162
+ REMOVED: "removed",
163
+ UPDATED: "updated",
164
+ CALLED: "called",
165
+ EXITED: "exited",
166
+ FAILED: "failed"
167
+ }.freeze
168
+
169
+ AUTOMATION_STATUSES = {DRAFT: "draft", LIVE: "live", PAUSED: "paused", ARCHIVED: "archived"}.freeze
170
+
171
+ AUTOMATION_STEP_KINDS = {
172
+ SEND_EMAIL: "send_email",
173
+ WAIT: "wait",
174
+ BRANCH: "branch",
175
+ ADD_TO_AUDIENCE: "add_to_audience",
176
+ REMOVE_FROM_AUDIENCE: "remove_from_audience",
177
+ UPDATE_FIELD: "update_field",
178
+ WEBHOOK: "webhook",
179
+ EXIT: "exit"
180
+ }.freeze
181
+
182
+ AUTOMATION_TRIGGER_KINDS = {
183
+ AUDIENCE_JOINED: "audience_joined",
184
+ FORM_SUBMITTED: "form_submitted",
185
+ EVENT: "event",
186
+ DATE: "date",
187
+ MANUAL: "manual"
188
+ }.freeze
189
+
190
+ AUTOMATION_VALUE_SOURCES = {STATIC: "static", CONTACT: "contact", EVENT: "event"}.freeze
191
+
192
+ AUTOMATION_WAIT_MODES = {DURATION: "duration", UNTIL: "until", EVENT: "event"}.freeze
193
+
68
194
  BILLING_ALERT_KINDS = {
69
195
  PAYMENT_FAILED: "payment_failed",
70
196
  PAY_AS_YOU_GO_PAUSED: "pay_as_you_go_paused",
@@ -168,10 +294,35 @@ module OpenEmail
168
294
  FAILED: "failed"
169
295
  }.freeze
170
296
 
297
+ CALENDAR_COLORS = {
298
+ BLUE: "blue",
299
+ SKY: "sky",
300
+ TEAL: "teal",
301
+ GREEN: "green",
302
+ LIME: "lime",
303
+ YELLOW: "yellow",
304
+ ORANGE: "orange",
305
+ RED: "red",
306
+ PINK: "pink",
307
+ PURPLE: "purple",
308
+ GRAY: "gray"
309
+ }.freeze
310
+
311
+ CALENDAR_FEED_MODES = {FULL: "full", BUSY: "busy"}.freeze
312
+
171
313
  CALENDAR_REMINDER_ACTIONS = {DISPLAY: "DISPLAY", EMAIL: "EMAIL", AUDIO: "AUDIO"}.freeze
172
314
 
173
315
  CALENDAR_RESPONSES = {ACCEPTED: "ACCEPTED", DECLINED: "DECLINED", TENTATIVE: "TENTATIVE"}.freeze
174
316
 
317
+ CALENDAR_SUBSCRIPTION_ERRORS = {
318
+ UNREACHABLE: "unreachable",
319
+ TOO_LARGE: "too-large",
320
+ NOT_A_CALENDAR: "not-a-calendar",
321
+ TOO_MANY_EVENTS: "too-many-events"
322
+ }.freeze
323
+
324
+ CALENDAR_SUBSCRIPTION_STATUSES = {ACTIVE: "active", FAILING: "failing", STOPPED: "stopped"}.freeze
325
+
175
326
  CALENDAR_TRANSPARENCIES = {OPAQUE: "OPAQUE", TRANSPARENT: "TRANSPARENT"}.freeze
176
327
 
177
328
  CALENDAR_VISIBILITIES = {PUBLIC: "PUBLIC", PRIVATE: "PRIVATE", CONFIDENTIAL: "CONFIDENTIAL"}.freeze
@@ -198,12 +349,28 @@ module OpenEmail
198
349
 
199
350
  CONTACT_BLOCK_LISTS = {BLOCKED_SENDERS: "blockedSenders", BLOCKED_DOMAINS: "blockedDomains"}.freeze
200
351
 
352
+ CONTACT_CARD_LABELS = {
353
+ HOME: "home",
354
+ WORK: "work",
355
+ MOBILE: "mobile",
356
+ MAIN: "main",
357
+ FAX: "fax",
358
+ PAGER: "pager",
359
+ OTHER: "other"
360
+ }.freeze
361
+
201
362
  CONTACT_PHOTO_TYPES = {PNG: "image/png", JPEG: "image/jpeg", WEBP: "image/webp", GIF: "image/gif"}.freeze
202
363
 
364
+ CONTACT_SOURCES = {MANUAL: "manual", AUTO: "auto", FORM: "form"}.freeze
365
+
203
366
  CONTACT_THREAD_SORTS = {NEWEST: "newest", OLDEST: "oldest", SENDER: "sender", SUBJECT: "subject"}.freeze
204
367
 
205
368
  CREDENTIAL_KINDS = {API_KEY: "apiKey", OAUTH: "oauth"}.freeze
206
369
 
370
+ DEDICATED_IP_INELIGIBLE_REASONS = {PLAN: "plan", VOLUME: "volume"}.freeze
371
+
372
+ DEDICATED_IP_STATUSES = {AVAILABLE: "available", WARMING: "warming", READY: "ready", RELEASED: "released"}.freeze
373
+
207
374
  DELIVERABILITY_CHECK_IDS = {MX: "mx", SPF: "spf", DKIM: "dkim", DMARC: "dmarc", BIMI: "bimi"}.freeze
208
375
 
209
376
  DELIVERABILITY_CHECK_STATUSES = {PASS: "pass", WARN: "warn", FAIL: "fail", ABSENT: "absent"}.freeze
@@ -296,11 +463,23 @@ module OpenEmail
296
463
 
297
464
  FILE_VISIBILITIES = {PUBLIC: "public", PRIVATE: "private"}.freeze
298
465
 
466
+ FOLLOW_UP_STATUSES = {WAITING: "waiting", ANSWERED: "answered", DUE: "due", CANCELLED: "cancelled"}.freeze
467
+
299
468
  FORM_ALIGNS = {LEFT: "left", CENTER: "center"}.freeze
300
469
 
301
470
  FORM_CONFIRM_SOURCES = {LINK: "link", APPROVAL: "approval"}.freeze
302
471
 
303
- FORM_CONTACT_FIELDS = {EMAIL: "email", FIRST_NAME: "firstName", LAST_NAME: "lastName", NAME: "name"}.freeze
472
+ FORM_CONTACT_FIELDS = {
473
+ EMAIL: "email",
474
+ FIRST_NAME: "firstName",
475
+ LAST_NAME: "lastName",
476
+ NAME: "name",
477
+ PHONE: "phone",
478
+ COMPANY: "company",
479
+ JOB_TITLE: "jobTitle",
480
+ WEBSITE: "website",
481
+ BIRTHDAY: "birthday"
482
+ }.freeze
304
483
 
305
484
  FORM_FIELD_ERRORS = {
306
485
  REQUIRED: "required",
@@ -365,6 +544,106 @@ module OpenEmail
365
544
 
366
545
  FORM_WIDTHS = {NARROW: "narrow", NORMAL: "normal", WIDE: "wide"}.freeze
367
546
 
547
+ IMPORT_FORMATS = {
548
+ GMAIL: "gmail",
549
+ OPENEMAIL: "openemail",
550
+ THUNDERBIRD: "thunderbird",
551
+ PROTON: "proton",
552
+ MBOX: "mbox",
553
+ EML: "eml",
554
+ IMAP: "imap",
555
+ MICROSOFT: "microsoft"
556
+ }.freeze
557
+
558
+ IMPORT_PAUSE_REASONS = {
559
+ THROTTLED: "throttled",
560
+ DAILY_LIMIT: "daily-limit",
561
+ UNREACHABLE: "unreachable",
562
+ SIGN_IN: "sign-in"
563
+ }.freeze
564
+
565
+ IMPORT_STATUSES = {
566
+ UPLOADING: "uploading",
567
+ QUEUED: "queued",
568
+ RUNNING: "running",
569
+ PARKED: "parked",
570
+ NEEDS_PASSWORD: "needs-password",
571
+ COMPLETED: "completed",
572
+ FAILED: "failed",
573
+ CANCELLED: "cancelled"
574
+ }.freeze
575
+
576
+ INBOX_CATEGORIES = {
577
+ PRIMARY: "primary",
578
+ PROMOTIONS: "promotions",
579
+ UPDATES: "updates",
580
+ SOCIAL: "social",
581
+ FORUMS: "forums"
582
+ }.freeze
583
+
584
+ ITEM_IMPORT_KINDS = {CALENDAR: "calendar", CONTACTS: "contacts"}.freeze
585
+
586
+ ITEM_IMPORT_SKIP_REASONS = {
587
+ UID_TAKEN: "uid-taken",
588
+ NO_START: "no-start",
589
+ DUPLICATE: "duplicate",
590
+ LIMIT: "limit",
591
+ INVALID: "invalid",
592
+ EMPTY: "empty"
593
+ }.freeze
594
+
595
+ ITEM_IMPORT_SOURCES = {
596
+ FILE: "file",
597
+ TAKEOUT: "takeout",
598
+ CALDAV: "caldav",
599
+ CARDDAV: "carddav",
600
+ MICROSOFT: "microsoft"
601
+ }.freeze
602
+
603
+ ITEM_IMPORT_STATUSES = {
604
+ UPLOADING: "uploading",
605
+ QUEUED: "queued",
606
+ RUNNING: "running",
607
+ COMPLETED: "completed",
608
+ FAILED: "failed",
609
+ CANCELLED: "cancelled",
610
+ UNDONE: "undone"
611
+ }.freeze
612
+
613
+ KNOWLEDGE_CONNECTOR_KINDS = {SITE: "site", SITEMAP: "sitemap", FEED: "feed", ZENDESK: "zendesk"}.freeze
614
+
615
+ KNOWLEDGE_CONNECTOR_STATUSES = {QUEUED: "queued", SYNCING: "syncing", READY: "ready", FAILED: "failed"}.freeze
616
+
617
+ KNOWLEDGE_FAILURES = {
618
+ UNSUPPORTED: "unsupported",
619
+ EMPTY: "empty",
620
+ TOO_LARGE: "too_large",
621
+ FETCH_FAILED: "fetch_failed",
622
+ BLOCKED_URL: "blocked_url",
623
+ CONVERSION_FAILED: "conversion_failed",
624
+ INDEX_FAILED: "index_failed",
625
+ OVER_ALLOWANCE: "over_allowance",
626
+ MISSING_FILE: "missing_file"
627
+ }.freeze
628
+
629
+ KNOWLEDGE_FLAG_KINDS = {DUPLICATE: "duplicate", CONFLICT: "conflict"}.freeze
630
+
631
+ KNOWLEDGE_FLAG_STATUSES = {OPEN: "open", DISMISSED: "dismissed"}.freeze
632
+
633
+ KNOWLEDGE_KINDS = {NOTE: "note", FILE: "file", LINK: "link"}.freeze
634
+
635
+ KNOWLEDGE_LEVELS = {WORKSPACE: "workspace", DOMAIN: "domain", ADDRESS: "address"}.freeze
636
+
637
+ KNOWLEDGE_ORIGINS = {APP: "app", API: "api", ASSISTANT: "assistant", MCP: "mcp"}.freeze
638
+
639
+ KNOWLEDGE_REFRESH_DAY_CHOICES = {DAY: 1, WEEK: 7, MONTH: 30}.freeze
640
+
641
+ KNOWLEDGE_STATUSES = {QUEUED: "queued", PROCESSING: "processing", READY: "ready", FAILED: "failed"}.freeze
642
+
643
+ KNOWLEDGE_SUGGESTION_KINDS = {LEARNED: "learned", QUESTION: "question"}.freeze
644
+
645
+ KNOWLEDGE_SUGGESTION_STATUSES = {PENDING: "pending", ACCEPTED: "accepted", DISMISSED: "dismissed"}.freeze
646
+
368
647
  LANGUAGES = [
369
648
  {code: "en", label: "English", native: "English", flag: "🇬🇧", rtl: false}.freeze,
370
649
  {code: "es", label: "Spanish", native: "Español", flag: "🇪🇸", rtl: false}.freeze,
@@ -652,6 +931,62 @@ module OpenEmail
652
931
 
653
932
  LOGIN_LOGOS = {DARK: "dark", LIGHT: "light"}.freeze
654
933
 
934
+ MAILBOX_FOLDER_ROLES = {
935
+ INBOX: "inbox",
936
+ SENT: "sent",
937
+ DRAFTS: "drafts",
938
+ SPAM: "spam",
939
+ TRASH: "trash",
940
+ ARCHIVE: "archive",
941
+ ALL: "all",
942
+ FLAGGED: "flagged",
943
+ IMPORTANT: "important",
944
+ FOLDER: "folder"
945
+ }.freeze
946
+
947
+ MAILBOX_IMPORT_SOURCES = {FILE: "file", IMAP: "imap", MICROSOFT: "microsoft"}.freeze
948
+
949
+ MAILBOX_PROVIDERS = {
950
+ GMAIL: "gmail",
951
+ OUTLOOK: "outlook",
952
+ YAHOO: "yahoo",
953
+ AOL: "aol",
954
+ ICLOUD: "icloud",
955
+ FASTMAIL: "fastmail",
956
+ ZOHO: "zoho",
957
+ OTHER: "other"
958
+ }.freeze
959
+
960
+ MAILBOX_SECURITIES = {TLS: "tls", STARTTLS: "starttls"}.freeze
961
+
962
+ MAILBOX_SETTINGS_SOURCES = {PRESET: "preset", MX: "mx", AUTOCONFIG: "autoconfig", SRV: "srv", GIVEN: "given"}.freeze
963
+
964
+ MAILBOX_SIGN_INS = {APP_PASSWORD: "app-password", PASSWORD: "password", MICROSOFT: "microsoft"}.freeze
965
+
966
+ MAIL_APP_PROTOCOLS = {IMAP: "imap", SMTP: "smtp", POP3: "pop3", CALDAV: "caldav", CARDDAV: "carddav"}.freeze
967
+
968
+ MAIL_APP_SECURITIES = {SSL_TLS: "ssl-tls", STARTTLS: "starttls"}.freeze
969
+
970
+ MAIL_SERVICES = {
971
+ OPENEMAIL: "openemail",
972
+ GMAIL: "gmail",
973
+ OUTLOOK: "outlook",
974
+ ICLOUD: "icloud",
975
+ YAHOO: "yahoo",
976
+ PROTON: "proton",
977
+ ZOHO: "zoho",
978
+ FASTMAIL: "fastmail",
979
+ RESEND: "resend",
980
+ SENDGRID: "sendgrid",
981
+ MAILGUN: "mailgun",
982
+ POSTMARK: "postmark",
983
+ MAILCHIMP: "mailchimp",
984
+ BREVO: "brevo",
985
+ SPARKPOST: "sparkpost",
986
+ HUBSPOT: "hubspot",
987
+ AMAZON_SES: "amazon-ses"
988
+ }.freeze
989
+
655
990
  MESSAGE_ENCRYPTION_FORMATS = {
656
991
  PGP_MIME: "pgp-mime",
657
992
  PGP_SIGNED: "pgp-signed",
@@ -668,10 +1003,20 @@ module OpenEmail
668
1003
 
669
1004
  PEOPLE_SORTS = {RECENT: "recent", NAME: "name", THREADS: "threads"}.freeze
670
1005
 
1006
+ PLAN_BLOCKERS = {DOMAINS: "domains", PEOPLE: "people", SENDS: "sends"}.freeze
1007
+
671
1008
  PLAN_IDS = {FREE: "free", STARTER: "starter", BUSINESS: "business", ENTERPRISE: "enterprise"}.freeze
672
1009
 
673
1010
  PROVIDER_IMPORT_DOMAIN_STATES = {ABSENT: "absent", ADDED: "added", VERIFIED: "verified"}.freeze
674
1011
 
1012
+ PROVIDER_IMPORT_PROVIDERS = {
1013
+ RESEND: "resend",
1014
+ SENDGRID: "sendgrid",
1015
+ POSTMARK: "postmark",
1016
+ MAILGUN: "mailgun",
1017
+ MAILCHIMP: "mailchimp"
1018
+ }.freeze
1019
+
675
1020
  PROVIDER_IMPORT_RESOURCES = {
676
1021
  SUPPRESSIONS: "suppressions",
677
1022
  AUDIENCES: "audiences",
@@ -690,6 +1035,8 @@ module OpenEmail
690
1035
  CANCELLED: "cancelled"
691
1036
  }.freeze
692
1037
 
1038
+ REPLY_SUGGESTION_STATES = {READY: "ready", PENDING: "pending", NONE: "none"}.freeze
1039
+
693
1040
  REWRITE_ACTIONS = {
694
1041
  SHORTEN: "shorten",
695
1042
  LENGTHEN: "lengthen",
@@ -749,6 +1096,31 @@ module OpenEmail
749
1096
  LT: "lt"
750
1097
  }.freeze
751
1098
 
1099
+ SENDING_POOL_STATUSES = {
1100
+ PENDING: "pending",
1101
+ WARMING: "warming",
1102
+ ACTIVE: "active",
1103
+ RELEASING: "releasing",
1104
+ RELEASED: "released",
1105
+ FAILED: "failed"
1106
+ }.freeze
1107
+
1108
+ SENDING_STREAM_PAUSE_REASONS = {BOUNCE_RATE: "bounce_rate", COMPLAINT_RATE: "complaint_rate"}.freeze
1109
+
1110
+ SENDING_STREAM_STATUSES = {ACTIVE: "active", PAUSED: "paused"}.freeze
1111
+
1112
+ SEND_STREAMS = {TRANSACTIONAL: "transactional", BROADCAST: "broadcast"}.freeze
1113
+
1114
+ SETTINGS_COLOR_THEMES = {LIGHT: "light", DARK: "dark", SYSTEM: "system"}.freeze
1115
+
1116
+ SETTINGS_DATE_FORMATS = {DMY: "dmy", MDY: "mdy", YMD: "ymd"}.freeze
1117
+
1118
+ SETTINGS_IMAGE_COMPRESSIONS = {LOW: "low", MEDIUM: "medium", ORIGINAL: "original"}.freeze
1119
+
1120
+ SETTINGS_TIME_FORMATS = {H12: "12h", H24: "24h"}.freeze
1121
+
1122
+ SETTINGS_WEEK_STARTS = {MONDAY: "monday", SUNDAY: "sunday"}.freeze
1123
+
752
1124
  STEP_UP_ERROR_CODES = {
753
1125
  STEP_UP_REQUIRED: "step_up_required",
754
1126
  STEP_UP_NOT_APPLICABLE: "step_up_not_applicable",
@@ -828,7 +1200,11 @@ module OpenEmail
828
1200
  FILE_UPLOADED: "file.uploaded",
829
1201
  FILE_DELETED: "file.deleted",
830
1202
  FORM_SUBMITTED: "form.submitted",
831
- FORM_CONFIRMED: "form.confirmed"
1203
+ FORM_CONFIRMED: "form.confirmed",
1204
+ AUTOMATION_ENTERED: "automation.entered",
1205
+ AUTOMATION_EXITED: "automation.exited",
1206
+ AUTOMATION_PAUSED: "automation.paused",
1207
+ AUTOMATION_WEBHOOK: "automation.webhook"
832
1208
  }.freeze
833
1209
 
834
1210
  WEBHOOK_REPLAY_ERROR_CODES = {
@@ -11,6 +11,7 @@ module OpenEmail
11
11
  CONTENT_TYPES = {
12
12
  JSON: "application/json",
13
13
  CALENDAR: "text/calendar",
14
+ VCARD: "text/vcard",
14
15
  OCTET_STREAM: "application/octet-stream"
15
16
  }.freeze
16
17
 
@@ -123,10 +124,12 @@ module OpenEmail
123
124
  BROADCAST_ID: "broadcastId",
124
125
  BROADCAST_IDS: "broadcastIds",
125
126
  EMAIL: "email",
127
+ WITHOUT_EMAIL: "withoutEmail",
126
128
  BLOCKED: "blocked",
127
129
  DATE_FROM: "dateFrom",
128
130
  DATE_TO: "dateTo",
129
131
  FROM_CONTACTS: "fromContacts",
132
+ SEMANTIC: "semantic",
130
133
  REASON: "reason",
131
134
  KIND: "kind",
132
135
  ENDPOINT_IDS: "endpointIds",
@@ -142,7 +145,22 @@ module OpenEmail
142
145
  OFFSET: "offset",
143
146
  REFRESH: "refresh",
144
147
  CONFIRM: "confirm",
145
- USERNAME: "username"
148
+ USERNAME: "username",
149
+ SCOPE: "scope",
150
+ LEVEL: "level",
151
+ PINNED: "pinned",
152
+ TITLE: "title",
153
+ ITEM_ID: "itemId",
154
+ SENDS: "sends",
155
+ DOMAINS: "domains",
156
+ PEOPLE: "people",
157
+ AI_ACTIONS: "aiActions",
158
+ INTERVAL: "interval",
159
+ CATEGORY: "category",
160
+ DEEP: "deep",
161
+ PATH: "path",
162
+ STEP_KEY: "stepKey",
163
+ NAME: "name"
146
164
  }.freeze
147
165
 
148
166
  RETRY = {
@@ -43,6 +43,15 @@ module OpenEmail
43
43
  Wire.instant(value)
44
44
  end
45
45
 
46
+ def log_window_query(since, until_value)
47
+ query_params(since: instant(since), until: instant(until_value))
48
+ end
49
+
50
+ def log_request_query(since, until_value, failed_only, statuses, path)
51
+ status = (statuses.nil? || statuses.empty?) ? nil : joined(statuses)
52
+ log_window_query(since, until_value).merge(query_params(failed_only: flag(failed_only), status:, path:))
53
+ end
54
+
46
55
  def fetch_page(path, query = nil, style: CURSOR, limit: nil, cursor: nil, api_key: nil)
47
56
  Pagination.fetch_page(@transport, path, query:, style:, limit:, cursor:, api_key:)
48
57
  end
@@ -66,5 +75,23 @@ module OpenEmail
66
75
  def raw_content_type(data, content_type)
67
76
  RawBody.content_type(data, content_type)
68
77
  end
78
+
79
+ def upload_name(data, filename)
80
+ name = (filename.nil? ? RawBody.file_name(data) : filename).to_s.strip
81
+ raise ArgumentError, Defaults::MESSAGES[:FILENAME_REQUIRED] if name.empty?
82
+
83
+ name
84
+ end
85
+
86
+ def optional_upload_name(data, filename)
87
+ filename.nil? ? RawBody.file_name(data) : filename
88
+ end
89
+
90
+ def upload_timeout(timeout)
91
+ return timeout unless timeout.nil?
92
+
93
+ base = @transport.timeout
94
+ base.to_f.positive? ? [base, Defaults::UPLOAD_TIMEOUT].max : base
95
+ end
69
96
  end
70
97
  end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenEmail
4
+ module Resources
5
+ class Automations < Resource
6
+ def list(status: nil, limit: nil, cursor: nil, api_key: nil)
7
+ fetch_page(ApiPaths::AUTOMATIONS, query_params(status:), limit:, cursor:, api_key:)
8
+ end
9
+
10
+ def list_all(status: nil, limit: nil, cursor: nil, api_key: nil)
11
+ collect_all(ApiPaths::AUTOMATIONS, query_params(status:), limit:, cursor:, api_key:)
12
+ end
13
+
14
+ def iterate(status: nil, limit: nil, cursor: nil, api_key: nil, &)
15
+ iterate_pages(ApiPaths::AUTOMATIONS, query_params(status:), limit:, cursor:, api_key:, &)
16
+ end
17
+
18
+ def create(body = nil, api_key: nil, **fields)
19
+ request(ApiPaths::AUTOMATIONS, method: :post, body: payload(body, fields), api_key:)
20
+ end
21
+
22
+ def list_starters(api_key: nil)
23
+ fetch_list(ApiPaths::AUTOMATION_STARTERS, api_key:)
24
+ end
25
+
26
+ def get(id, api_key: nil)
27
+ request(fill(ApiPaths::AUTOMATION, id:), api_key:)
28
+ end
29
+
30
+ def update(id, patch = nil, api_key: nil, **fields)
31
+ request(fill(ApiPaths::AUTOMATION, id:), method: :patch, body: payload(patch, fields), repeatable: true,
32
+ api_key:)
33
+ end
34
+
35
+ def delete(id, api_key: nil)
36
+ request(fill(ApiPaths::AUTOMATION, id:), method: :delete, api_key:)
37
+ end
38
+
39
+ def publish(id, api_key: nil)
40
+ request(fill(ApiPaths::AUTOMATION_PUBLISH, id:), method: :post, repeatable: true, api_key:)
41
+ end
42
+
43
+ def pause(id, api_key: nil)
44
+ request(fill(ApiPaths::AUTOMATION_PAUSE, id:), method: :post, repeatable: true, api_key:)
45
+ end
46
+
47
+ def resume(id, api_key: nil)
48
+ request(fill(ApiPaths::AUTOMATION_RESUME, id:), method: :post, repeatable: true, api_key:)
49
+ end
50
+
51
+ def archive(id, api_key: nil)
52
+ request(fill(ApiPaths::AUTOMATION_ARCHIVE, id:), method: :post, repeatable: true, api_key:)
53
+ end
54
+
55
+ def duplicate(id, api_key: nil)
56
+ request(fill(ApiPaths::AUTOMATION_DUPLICATE, id:), method: :post, api_key:)
57
+ end
58
+
59
+ def send_test(id, body = nil, api_key: nil, **fields)
60
+ request(fill(ApiPaths::AUTOMATION_TEST, id:), method: :post, body: payload(body, fields), api_key:)
61
+ end
62
+
63
+ def list_versions(id, api_key: nil)
64
+ fetch_list(fill(ApiPaths::AUTOMATION_VERSIONS, id:), api_key:)
65
+ end
66
+
67
+ def restore_version(id, version, api_key: nil)
68
+ request(fill(ApiPaths::AUTOMATION_VERSION_RESTORE, id:, version:), method: :post, repeatable: true, api_key:)
69
+ end
70
+
71
+ def stats(id, since: nil, until: nil, api_key: nil)
72
+ query = log_window_query(since, binding.local_variable_get(:until))
73
+ request(fill(ApiPaths::AUTOMATION_STATS, id:), query:, api_key:)
74
+ end
75
+
76
+ def list_enrollments(id, status: nil, step_key: nil, q: nil, limit: nil, cursor: nil, api_key: nil)
77
+ fetch_page(fill(ApiPaths::AUTOMATION_ENROLLMENTS, id:), query_params(status:, step_key:, q:), limit:, cursor:,
78
+ api_key:)
79
+ end
80
+
81
+ def list_all_enrollments(id, status: nil, step_key: nil, q: nil, limit: nil, cursor: nil, api_key: nil)
82
+ collect_all(fill(ApiPaths::AUTOMATION_ENROLLMENTS, id:), query_params(status:, step_key:, q:), limit:, cursor:,
83
+ api_key:)
84
+ end
85
+
86
+ def iterate_enrollments(id, status: nil, step_key: nil, q: nil, limit: nil, cursor: nil, api_key: nil, &)
87
+ iterate_pages(fill(ApiPaths::AUTOMATION_ENROLLMENTS, id:), query_params(status:, step_key:, q:), limit:,
88
+ cursor:, api_key:, &)
89
+ end
90
+
91
+ def get_enrollment(id, enrollment_id, api_key: nil)
92
+ request(fill(ApiPaths::AUTOMATION_ENROLLMENT, id:, enrollmentId: enrollment_id), api_key:)
93
+ end
94
+
95
+ def enroll(id, body = nil, api_key: nil, **fields)
96
+ request(fill(ApiPaths::AUTOMATION_ENROLLMENTS, id:), method: :post, body: payload(body, fields), api_key:)
97
+ end
98
+
99
+ def exit_enrollment(id, enrollment_id, api_key: nil)
100
+ request(fill(ApiPaths::AUTOMATION_ENROLLMENT_EXIT, id:, enrollmentId: enrollment_id), method: :post, api_key:)
101
+ end
102
+ end
103
+ end
104
+ end
@@ -43,6 +43,18 @@ module OpenEmail
43
43
  request(ApiPaths::BILLING_CHECKOUT, method: :post, body: payload(body, fields), api_key:)
44
44
  end
45
45
 
46
+ def list_add_ons(api_key: nil)
47
+ request(ApiPaths::BILLING_ADD_ONS, api_key:)
48
+ end
49
+
50
+ def start_add_on_checkout(body = nil, api_key: nil, **fields)
51
+ request(ApiPaths::BILLING_ADD_ON_CHECKOUT, method: :post, body: payload(body, fields), api_key:)
52
+ end
53
+
54
+ def cancel_add_on(add_on, api_key: nil)
55
+ request(fill(ApiPaths::BILLING_ADD_ON, addOn: add_on), method: :delete, api_key:)
56
+ end
57
+
46
58
  def open_portal(body = nil, api_key: nil, **fields)
47
59
  request(ApiPaths::BILLING_PORTAL, method: :post, body: payload(body, fields), api_key:)
48
60
  end