@mirad-work/sms-core
Version:
A framework-agnostic TypeScript SMS service core with provider abstraction for Iranian SMS providers
95 lines • 3.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MockDriver = void 0;
const base_driver_1 = require("./base-driver");
/**
* Mock SMS driver for testing purposes
* Simulates SMS operations without making actual API calls
*/
class MockDriver extends base_driver_1.BaseSmsDriver {
constructor(config, httpClient) {
// Mock driver doesn't need a real URL, so we provide a dummy one
const mockBaseConfig = {
url: "https://mock-sms-provider.com",
};
super(mockBaseConfig, httpClient);
this.sentMessages = new Map();
this.messageIdCounter = 1;
this.mockConfig = config;
}
/**
* Mock verify SMS implementation
*/
async verify(message) {
this.validateMessage(message);
if (!message.template) {
return this.createErrorResponse("Template is required for verify operation", "MISSING_TEMPLATE");
}
if (!message.tokens) {
return this.createErrorResponse("Tokens are required for verify operation", "MISSING_TOKENS");
}
// Simulate network delay
if (this.mockConfig.delay) {
await this.delay(this.mockConfig.delay);
}
// Simulate failure if configured
if (this.mockConfig.shouldFail) {
return this.createErrorResponse("Mock driver configured to fail", "MOCK_FAILURE");
}
const messageId = this.generateMessageId();
const status = "sent";
// Generate mock content based on template and tokens
const mockContent = this.processTemplate(message);
// Store message for later retrieval
this.sentMessages.set(messageId, {
message: {
...message,
content: mockContent,
},
messageId,
status,
sentAt: new Date(),
});
this.log("info", "Mock verification SMS sent successfully", {
messageId,
to: message.to,
template: message.template,
});
return this.createSuccessResponse({
provider: "mock",
timestamp: new Date().toISOString(),
recipient: message.to,
template: message.template,
processedContent: mockContent,
}, messageId);
}
/**
* Generate a mock message ID
*/
generateMessageId() {
return `mock-${Date.now()}-${this.messageIdCounter++}`;
}
/**
* Process template with tokens to create mock content
*/
processTemplate(message) {
let content = `[Template: ${message.template}]`;
if (message.tokens) {
if (Array.isArray(message.tokens)) {
content += ` Tokens: [${message.tokens.join(", ")}]`;
}
else {
content += ` Tokens: ${JSON.stringify(message.tokens)}`;
}
}
return content;
}
/**
* Simple delay utility for simulating network latency
*/
delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
}
exports.MockDriver = MockDriver;
//# sourceMappingURL=mock-driver.js.map