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.
- checksums.yaml +4 -4
- data/lib/openemail/api_paths.rb +84 -0
- data/lib/openemail/client.rb +6 -0
- data/lib/openemail/constants.rb +378 -2
- data/lib/openemail/protocol.rb +19 -1
- data/lib/openemail/resource.rb +27 -0
- data/lib/openemail/resources/automations.rb +104 -0
- data/lib/openemail/resources/billing.rb +12 -0
- data/lib/openemail/resources/calendar.rb +72 -1
- data/lib/openemail/resources/contacts.rb +70 -0
- data/lib/openemail/resources/domains.rb +33 -0
- data/lib/openemail/resources/events.rb +22 -0
- data/lib/openemail/resources/files.rb +0 -14
- data/lib/openemail/resources/follow_ups.rb +21 -0
- data/lib/openemail/resources/imports.rb +16 -0
- data/lib/openemail/resources/keys.rb +29 -30
- data/lib/openemail/resources/knowledge.rb +137 -0
- data/lib/openemail/resources/labels.rb +4 -0
- data/lib/openemail/resources/me.rb +38 -0
- data/lib/openemail/resources/out_of_office.rb +28 -0
- data/lib/openemail/resources/provider_imports.rb +4 -2
- data/lib/openemail/resources/sending.rb +23 -0
- data/lib/openemail/resources/templates.rb +3 -2
- data/lib/openemail/resources/threads.rb +37 -8
- data/lib/openemail/resources/tools.rb +16 -0
- data/lib/openemail/resources/tracking.rb +17 -12
- data/lib/openemail/version.rb +1 -1
- data/lib/openemail/wire.rb +1 -0
- metadata +8 -2
data/lib/openemail/constants.rb
CHANGED
|
@@ -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 = {
|
|
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 = {
|
data/lib/openemail/protocol.rb
CHANGED
|
@@ -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 = {
|
data/lib/openemail/resource.rb
CHANGED
|
@@ -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
|