ProtectedProviderReturns the name of this provider for use in error messages. Override in subclasses to provide a more descriptive name.
Convenience gate: true when this provider supports inbound push in ANY form
(subscription-managed or inbound-parse), false otherwise. Lets callers cleanly
short-circuit — if (provider.SupportsPush) { ... } — instead of probing individual
operations.
Derived from GetSubscriptionCapabilities so it stays in lockstep with actual
capability: providers that support push return capabilities and thereby report
SupportsPush === true for free; providers that don't return undefined and report
false. Subclasses normally do NOT override this — override
GetSubscriptionCapabilities instead.
Archives a message. Override in subclasses that support this operation.
Parameters for archiving the message
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Expo push has no draft concept; creating drafts is not supported.
Optionalcredentials: ExpoPushCredentialsCreates a push-notification subscription with the remote messaging service. Override in subclasses that support this operation.
Parameters describing what to watch and where to notify
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Deletes a message. Override in subclasses that support this operation.
Parameters for deleting the message
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Deletes an existing subscription. The caller MUST pass credentials for the same account/app registration used to create the subscription. Implementations should treat "already gone" (e.g. 404) as success - deletion is idempotent from the consumer's perspective. Override in subclasses that support this operation.
Parameters identifying the subscription to delete
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Downloads an attachment from a message. Override in subclasses that support this operation.
Parameters for downloading the attachment
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Expo push is send-only; forwarding is not supported.
Optionalcredentials: ExpoPushCredentialsExpo push is send-only; retrieving messages is not supported.
Optionalcredentials: ExpoPushCredentialsGets a single message by ID. Override in subclasses that support this operation.
Parameters for retrieving the message
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Returns this provider's subscription capabilities, or undefined when subscriptions
are not supported. Consumers use this to schedule renewals and validate change types
generically. Override in subclasses that support subscriptions.
INVARIANT: returning a defined value here REQUIRES the four subscription operations to appear in getSupportedOperations.
SubscriptionCapabilities when supported, otherwise undefined
Push is a real-time, send-only channel — only SendSingleMessage is supported.
Lists attachments on a message. Override in subclasses that support this operation.
Parameters for listing attachments
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Lists folders/mailboxes available in the provider. Override in subclasses that support this operation.
Parameters for listing folders
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Marks message(s) as read or unread. Override in subclasses that support this operation.
Parameters for marking messages
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Moves a message to a different folder. Override in subclasses that support this operation.
Parameters for moving the message
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Parses and validates an inbound push notification. This is a pure operation: no
network calls. It MUST be safe on hostile/garbage input - never throw on malformed
payloads; return Success: false with SuggestedResponseStatus: 400 instead.
When the result carries a ParseNotificationResult.Handshake, the consumer must send exactly that response and process nothing else (endpoint validation). Override in subclasses that support this operation.
Transport-neutral capture of the inbound webhook request
Optionalcredentials: ProviderCredentialsBaseOptional credentials override (for schemes that verify signatures)
Promise
Renews an existing subscription before it expires. The caller MUST pass credentials for the same account/app registration used to create the subscription. Override in subclasses that support this operation.
Parameters identifying the subscription and the new expiration
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Expo push is send-only; replying is not supported.
Optionalcredentials: ExpoPushCredentialsSearches messages using a query string. Override in subclasses that support this operation.
Parameters for searching messages
Optionalcredentials: ProviderCredentialsBaseOptional credentials override for this request
Promise
Sends a single push notification via the Expo Push API.
Maps the framework message model onto the Expo payload:
message.To → the recipient Expo push tokenmessage.ProcessedSubject (fallback message.Subject) → titlemessage.ProcessedBody (fallback message.Body) → bodymessage.ContextData.pushData / .data → dataThe processed message to send.
Optionalcredentials: ExpoPushCredentialsOptional per-request credential override. When omitted, the Expo access token (if any) is read from the environment.
The framework's standard MessageResult.
Checks if this provider supports a specific operation.
The operation to check
true if the operation is supported
Implementation of the Expo push-notification provider for MemberJunction's Communication framework. Sends mobile push notifications to Expo push tokens via the Expo Push API using a simple HTTPS POST (no SDK dependency).
Remarks
Push notifications are a fire-and-forget, send-only channel. Consequently this provider implements only SendSingleMessage; the mailbox-style operations (
GetMessages,ForwardMessage,ReplyToMessage,CreateDraft) return a "not supported" result, consistent with the base-class contract.