2.48.0 • Published 4 months ago

@memberjunction/communication-types v2.48.0

Weekly downloads
-
License
ISC
Repository
-
Last release
4 months ago

@memberjunction/communication-types

MemberJunction Communication Framework Library Generic Types - Base types and interfaces for building communication providers and engines in the MemberJunction ecosystem.

Overview

This package provides the foundational types, base classes, and interfaces for implementing communication functionality within MemberJunction applications. It includes base classes for communication engines and providers, message handling, and integration with the MemberJunction metadata system.

Installation

npm install @memberjunction/communication-types

Key Components

CommunicationEngineBase

The core engine class that manages communication metadata and orchestrates communication operations across different providers.

import { CommunicationEngineBase } from '@memberjunction/communication-types';

// Get the singleton instance
const engine = CommunicationEngineBase.Instance;

// Configure the engine (required before use)
await engine.Config(false, userInfo);

// Access communication metadata
const providers = engine.Providers;
const messageTypes = engine.BaseMessageTypes;

BaseCommunicationProvider

Abstract base class for implementing communication providers (email, SMS, social media, etc.).

import { BaseCommunicationProvider, ProcessedMessage, MessageResult } from '@memberjunction/communication-types';

export class MyEmailProvider extends BaseCommunicationProvider {
    public async SendSingleMessage(message: ProcessedMessage): Promise<MessageResult> {
        // Implement provider-specific sending logic
    }

    public async GetMessages(params: GetMessagesParams): Promise<GetMessagesResult> {
        // Implement message retrieval
    }

    public async ForwardMessage(params: ForwardMessageParams): Promise<ForwardMessageResult> {
        // Implement message forwarding
    }

    public async ReplyToMessage(params: ReplyToMessageParams): Promise<ReplyToMessageResult> {
        // Implement message replies
    }
}

Message Classes

Message

Base class for message data:

import { Message } from '@memberjunction/communication-types';

const message = new Message();
message.From = "sender@example.com";
message.To = "recipient@example.com";
message.Subject = "Hello";
message.Body = "Message content";
message.HTMLBody = "<p>HTML content</p>";

// Using templates
message.BodyTemplate = templateEntity;
message.SubjectTemplate = subjectTemplateEntity;
message.ContextData = { name: "John", company: "Acme Corp" };

ProcessedMessage

Abstract class for messages that have been processed (templates rendered, etc.):

export class MyProcessedMessage extends ProcessedMessage {
    public async Process(forceTemplateRefresh?: boolean, contextUser?: UserInfo): Promise<{Success: boolean, Message?: string}> {
        // Implement template processing logic
        this.ProcessedBody = // processed body
        this.ProcessedHTMLBody = // processed HTML
        this.ProcessedSubject = // processed subject
        return { Success: true };
    }
}

MessageRecipient

Information about a message recipient:

import { MessageRecipient } from '@memberjunction/communication-types';

const recipient = new MessageRecipient();
recipient.To = "user@example.com";
recipient.FullName = "John Doe";
recipient.ContextData = { customField: "value" };

Types and Interfaces

GetMessagesParams

Parameters for retrieving messages:

type GetMessagesParams<T = Record<string, any>> = {
    NumMessages: number;
    UnreadOnly?: boolean;
    ContextData?: T;
};

GetMessagesResult

Result structure for retrieved messages:

type GetMessagesResult<T = Record<string, any>> = {
    Success: boolean;
    ErrorMessage?: string;
    SourceData?: T[];
    Messages: GetMessageMessage[];
};

ForwardMessageParams

Parameters for forwarding messages:

type ForwardMessageParams = {
    MessageID: string;
    Message?: string;
    ToRecipients: string[];
    CCRecipients?: string[];
    BCCRecipients?: string[];
};

ReplyToMessageParams

Parameters for replying to messages:

type ReplyToMessageParams<T = Record<string, any>> = {
    MessageID: string;
    Message: ProcessedMessage;
    ContextData?: T;
};

Usage Examples

Setting up the Communication Engine

import { CommunicationEngineBase } from '@memberjunction/communication-types';
import { UserInfo } from '@memberjunction/core';

async function initializeCommunications(user: UserInfo) {
    const engine = CommunicationEngineBase.Instance;
    
    // Configure the engine
    await engine.Config(false, user);
    
    // Access available providers
    const providers = engine.Providers;
    console.log(`Available providers: ${providers.map(p => p.Name).join(', ')}`);
    
    // Get message types for a specific provider
    const emailProvider = providers.find(p => p.Name === 'Email');
    const messageTypes = emailProvider?.MessageTypes;
}

Creating a Custom Communication Provider

import { 
    BaseCommunicationProvider, 
    ProcessedMessage, 
    MessageResult,
    GetMessagesParams,
    GetMessagesResult 
} from '@memberjunction/communication-types';

export class CustomSMSProvider extends BaseCommunicationProvider {
    public async SendSingleMessage(message: ProcessedMessage): Promise<MessageResult> {
        try {
            // Implement SMS sending logic
            const result = await this.sendSMS(message.To, message.ProcessedBody);
            
            return {
                Message: message,
                Success: true,
                Error: null
            };
        } catch (error) {
            return {
                Message: message,
                Success: false,
                Error: error.message
            };
        }
    }

    public async GetMessages(params: GetMessagesParams): Promise<GetMessagesResult> {
        // Implement SMS retrieval logic
        const messages = await this.fetchSMSMessages(params.NumMessages);
        
        return {
            Success: true,
            Messages: messages.map(m => ({
                From: m.sender,
                To: m.recipient,
                Body: m.text,
                ExternalSystemRecordID: m.id
            }))
        };
    }

    public async ForwardMessage(params: ForwardMessageParams): Promise<ForwardMessageResult> {
        // SMS forwarding implementation
        return { Success: true };
    }

    public async ReplyToMessage(params: ReplyToMessageParams): Promise<ReplyToMessageResult> {
        // SMS reply implementation
        return { Success: true };
    }

    private async sendSMS(to: string, message: string): Promise<any> {
        // Provider-specific implementation
    }

    private async fetchSMSMessages(count: number): Promise<any[]> {
        // Provider-specific implementation
    }
}

Integration with MemberJunction

This package integrates seamlessly with other MemberJunction packages:

  • @memberjunction/core: Provides base entity functionality and metadata system integration
  • @memberjunction/core-entities: Contains the entity definitions for communication-related data
  • @memberjunction/templates-base-types: Enables template-based message content
  • @memberjunction/global: Provides utility functions and global registry

Working with Communication Logs

The engine provides methods for tracking communication activities:

// Start a communication run
const run = await engine.StartRun();

// Log individual messages
const log = await engine.StartLog(processedMessage, run);

// Complete the run
await engine.EndRun(run);

Dependencies

  • @memberjunction/global: ^2.43.0
  • @memberjunction/core: ^2.43.0
  • @memberjunction/templates-base-types: ^2.43.0
  • @memberjunction/core-entities: ^2.43.0
  • rxjs: ^7.8.1

Development

Building

npm run build

Development Mode

npm start

Extended Entity Support

The package includes an extended Communication Provider entity that automatically links message types:

import { CommunicationProviderEntityExtended } from '@memberjunction/communication-types';

// The extended entity automatically includes related message types
const provider = await md.GetEntityObject<CommunicationProviderEntityExtended>('Communication Providers');
const messageTypes = provider.MessageTypes; // Automatically populated

License

ISC

2.27.1

8 months ago

2.23.2

8 months ago

2.46.0

5 months ago

2.23.1

8 months ago

2.27.0

8 months ago

2.34.0

6 months ago

2.30.0

7 months ago

2.19.4

9 months ago

2.19.5

9 months ago

2.19.2

9 months ago

2.19.3

9 months ago

2.19.0

9 months ago

2.19.1

9 months ago

2.15.2

9 months ago

2.34.2

6 months ago

2.34.1

6 months ago

2.15.1

9 months ago

2.38.0

5 months ago

2.45.0

5 months ago

2.22.1

9 months ago

2.22.0

9 months ago

2.41.0

5 months ago

2.22.2

9 months ago

2.26.1

8 months ago

2.26.0

8 months ago

2.33.0

6 months ago

2.18.3

9 months ago

2.18.1

9 months ago

2.18.2

9 months ago

2.18.0

9 months ago

2.37.1

6 months ago

2.37.0

6 months ago

2.14.0

10 months ago

2.21.0

9 months ago

2.44.0

5 months ago

2.40.0

5 months ago

2.29.0

8 months ago

2.29.2

8 months ago

2.29.1

8 months ago

2.25.0

8 months ago

2.48.0

4 months ago

2.32.0

7 months ago

2.32.2

7 months ago

2.32.1

7 months ago

2.17.0

9 months ago

2.13.4

10 months ago

2.36.0

6 months ago

2.13.2

11 months ago

2.13.3

10 months ago

2.13.0

11 months ago

2.36.1

6 months ago

2.13.1

11 months ago

2.43.0

5 months ago

2.20.2

9 months ago

2.20.3

9 months ago

2.20.0

9 months ago

2.20.1

9 months ago

2.28.0

8 months ago

2.47.0

5 months ago

2.24.1

8 months ago

2.24.0

8 months ago

2.31.0

7 months ago

2.12.0

12 months ago

2.39.0

5 months ago

2.16.1

9 months ago

2.35.1

6 months ago

2.35.0

6 months ago

2.16.0

9 months ago

2.42.1

5 months ago

2.42.0

5 months ago

2.23.0

8 months ago

2.11.0

12 months ago

2.10.0

12 months ago

2.9.0

1 year ago

2.8.0

1 year ago

2.7.0

1 year ago

2.6.1

1 year ago

2.5.2

1 year ago

2.6.0

1 year ago

2.7.1

1 year ago

2.5.1

1 year ago

2.5.0

1 year ago

2.4.1

1 year ago

2.4.0

1 year ago

2.3.3

1 year ago

2.3.2

1 year ago

2.3.1

1 year ago

2.3.0

1 year ago

2.2.1

1 year ago

2.2.0

1 year ago

2.1.5

1 year ago

2.1.4

1 year ago

2.1.3

1 year ago

2.1.2

1 year ago

2.1.1

1 year ago

2.1.0

1 year ago

2.0.0

1 year ago

1.8.1

1 year ago

1.8.0

1 year ago

1.7.1

1 year ago

1.7.0

1 year ago

1.6.1

1 year ago

1.6.0

1 year ago

1.5.3

1 year ago