@mhbdev/sms 0.2.3 → 0.2.4

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## 0.2.4
6
+
7
+ ### Patch Changes
8
+
9
+ - [#16](https://github.com/mhbdev/sms/pull/16) [`d248189`](https://github.com/mhbdev/sms/commit/d24818936f4b5be4362f7dce72d59e4c586e5625) Thanks [@dependabot](https://github.com/apps/dependabot)! - Update the runtime Zod dependency to 4.6.7 to include upstream security fixes.
10
+
5
11
  ## 0.2.3
6
12
 
7
13
  ### Patch Changes
package/README.md CHANGED
@@ -21,19 +21,19 @@ npm install @mhbdev/sms
21
21
  import { KavenegarSmsProvider } from "@mhbdev/sms/kavenegar";
22
22
 
23
23
  const sms = new KavenegarSmsProvider({
24
- apiKey: process.env.KAVENEGAR_API_KEY!,
25
- sender: "90005738",
24
+ apiKey: process.env.KAVENEGAR_API_KEY!,
25
+ sender: "90005738",
26
26
  });
27
27
 
28
28
  await sms.sendMessage({
29
- recipient: "+989121234567",
30
- message: "Your order is ready.",
29
+ recipient: "+989121234567",
30
+ message: "Your order is ready.",
31
31
  });
32
32
 
33
33
  await sms.sendTemplate({
34
- recipient: "+989121234567",
35
- template: "my-otp-pattern",
36
- parameters: ["123456"],
34
+ recipient: "+989121234567",
35
+ template: "my-otp-pattern",
36
+ parameters: ["123456"],
37
37
  });
38
38
  ```
39
39
 
@@ -42,9 +42,9 @@ options is the default sender number. A message-level `sender` overrides it:
42
42
 
43
43
  ```ts
44
44
  await sms.sendMessage({
45
- recipient: "+989121234567",
46
- message: "Sent from a specific line.",
47
- sender: "10004346",
45
+ recipient: "+989121234567",
46
+ message: "Sent from a specific line.",
47
+ sender: "10004346",
48
48
  });
49
49
  ```
50
50
 
@@ -58,19 +58,19 @@ returned by Kavenegar is preserved in the normalized result when provided.
58
58
  import { SmsIrProvider } from "@mhbdev/sms/sms-ir";
59
59
 
60
60
  const sms = new SmsIrProvider({
61
- apiKey: process.env.SMS_IR_API_KEY!,
62
- lineNumber: "300000000000",
61
+ apiKey: process.env.SMS_IR_API_KEY!,
62
+ lineNumber: "300000000000",
63
63
  });
64
64
 
65
65
  await sms.sendMessage({
66
- recipient: "09121234567",
67
- message: "Your order is ready.",
66
+ recipient: "09121234567",
67
+ message: "Your order is ready.",
68
68
  });
69
69
 
70
70
  await sms.sendTemplate({
71
- recipient: "09121234567",
72
- templateId: 123456,
73
- parameters: [{ name: "CODE", value: "123456" }],
71
+ recipient: "09121234567",
72
+ templateId: 123456,
73
+ parameters: [{ name: "CODE", value: "123456" }],
74
74
  });
75
75
  ```
76
76
 
@@ -106,13 +106,13 @@ because retrying after an unknown provider response can duplicate a paid SMS.
106
106
 
107
107
  ```ts
108
108
  const sms = new SmsIrProvider({
109
- apiKey: process.env.SMS_IR_API_KEY!,
110
- lineNumber: "300000000000",
111
- retry: {
112
- maxAttempts: 3,
113
- initialDelayMs: 250,
114
- maxDelayMs: 2_000,
115
- },
109
+ apiKey: process.env.SMS_IR_API_KEY!,
110
+ lineNumber: "300000000000",
111
+ retry: {
112
+ maxAttempts: 3,
113
+ initialDelayMs: 250,
114
+ maxDelayMs: 2_000,
115
+ },
116
116
  });
117
117
  ```
118
118
 
@@ -135,46 +135,47 @@ operation is skipped.
135
135
 
136
136
  ```ts
137
137
  import {
138
- PriorityRoutingStrategy,
139
- SmsProviderPool,
140
- WeightedRoundRobinStrategy,
138
+ PriorityRoutingStrategy,
139
+ SmsProviderPool,
140
+ WeightedRoundRobinStrategy,
141
141
  } from "@mhbdev/sms";
142
142
  import { KavenegarSmsProvider } from "@mhbdev/sms/kavenegar";
143
143
  import { SmsIrProvider } from "@mhbdev/sms/sms-ir";
144
144
 
145
145
  const kavenegar = new KavenegarSmsProvider({
146
- apiKey: process.env.KAVENEGAR_API_KEY!,
147
- sender: "90005738",
146
+ apiKey: process.env.KAVENEGAR_API_KEY!,
147
+ sender: "90005738",
148
148
  });
149
149
  const smsIr = new SmsIrProvider({
150
- apiKey: process.env.SMS_IR_API_KEY!,
151
- lineNumber: "300000000000",
150
+ apiKey: process.env.SMS_IR_API_KEY!,
151
+ lineNumber: "300000000000",
152
152
  });
153
153
 
154
154
  const pool = new SmsProviderPool({
155
- strategy: new PriorityRoutingStrategy(), // Or new WeightedRoundRobinStrategy()
156
- providers: [
157
- {
158
- name: "kavenegar",
159
- priority: 1,
160
- sendMessage: (message) => kavenegar.sendMessage(message),
161
- sendTemplate: (message) => kavenegar.sendTemplate(message),
162
- sendBulk: (message) => kavenegar.sendBulk(message),
163
- },
164
- {
165
- name: "sms.ir",
166
- priority: 2,
167
- weight: 2,
168
- sendMessage: (message) => smsIr.sendMessage({
169
- recipient: message.recipient,
170
- message: message.message,
171
- sendAt: message.sendAt,
172
- signal: message.signal,
173
- }),
174
- // Map portable template fields to SMS.ir's templateId and named parameters here.
175
- },
176
- ],
177
- circuitBreaker: { failureThreshold: 3, cooldownMs: 30_000 },
155
+ strategy: new PriorityRoutingStrategy(), // Or new WeightedRoundRobinStrategy()
156
+ providers: [
157
+ {
158
+ name: "kavenegar",
159
+ priority: 1,
160
+ sendMessage: (message) => kavenegar.sendMessage(message),
161
+ sendTemplate: (message) => kavenegar.sendTemplate(message),
162
+ sendBulk: (message) => kavenegar.sendBulk(message),
163
+ },
164
+ {
165
+ name: "sms.ir",
166
+ priority: 2,
167
+ weight: 2,
168
+ sendMessage: (message) =>
169
+ smsIr.sendMessage({
170
+ recipient: message.recipient,
171
+ message: message.message,
172
+ sendAt: message.sendAt,
173
+ signal: message.signal,
174
+ }),
175
+ // Map portable template fields to SMS.ir's templateId and named parameters here.
176
+ },
177
+ ],
178
+ circuitBreaker: { failureThreshold: 3, cooldownMs: 30_000 },
178
179
  });
179
180
 
180
181
  await pool.sendMessage({ recipient: "09121234567", message: "Your order is ready." });
@@ -3,17 +3,17 @@
3
3
  The package keeps the portable contracts small and exposes provider-specific
4
4
  operations on the concrete clients where the upstream APIs differ.
5
5
 
6
- | Capability | Kavenegar | SMS.ir |
7
- | --- | --- | --- |
8
- | Raw message | `sendMessage` | `sendMessage` |
9
- | Template/verify | `sendTemplate` with ordered tokens | `sendTemplate` with numeric template ID and named parameters |
10
- | Bulk delivery | `sendBulk` | `sendBulk` |
11
- | Per-recipient delivery | `sendArray` | `sendLikeToLike` |
12
- | Scheduling | `sendAt` on raw/bulk messages | `sendAt` on bulk/like-to-like messages |
13
- | Scheduled cancellation | `SmsMessageScheduler.cancelScheduled` by message IDs | `SmsPackScheduler.cancelScheduledPack` by pack ID; `cancelScheduled` remains as a compatibility alias |
14
- | Delivery status | `getDeliveryStatus`, `getStatusByLocalId` | `getMessageStatus`, `getDeliveryStatus` |
15
- | Outbound reporting | `getSentMessages`, `listSentMessages`, `getLatestSentMessages`, `countSentMessages` | `listPacks`, `getPack` |
16
- | Inbound SMS | `getReceivedMessages`, `countReceivedMessages` | Not provided by the documented REST surface |
6
+ | Capability | Kavenegar | SMS.ir |
7
+ | ---------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
8
+ | Raw message | `sendMessage` | `sendMessage` |
9
+ | Template/verify | `sendTemplate` with ordered tokens | `sendTemplate` with numeric template ID and named parameters |
10
+ | Bulk delivery | `sendBulk` | `sendBulk` |
11
+ | Per-recipient delivery | `sendArray` | `sendLikeToLike` |
12
+ | Scheduling | `sendAt` on raw/bulk messages | `sendAt` on bulk/like-to-like messages |
13
+ | Scheduled cancellation | `SmsMessageScheduler.cancelScheduled` by message IDs | `SmsPackScheduler.cancelScheduledPack` by pack ID; `cancelScheduled` remains as a compatibility alias |
14
+ | Delivery status | `getDeliveryStatus`, `getStatusByLocalId` | `getMessageStatus`, `getDeliveryStatus` |
15
+ | Outbound reporting | `getSentMessages`, `listSentMessages`, `getLatestSentMessages`, `countSentMessages` | `listPacks`, `getPack` |
16
+ | Inbound SMS | `getReceivedMessages`, `countReceivedMessages` | Not provided by the documented REST surface |
17
17
 
18
18
  All provider clients accept an injected `fetcher`, timeout, custom base URL,
19
19
  additional headers, and an optional retry policy. Retry is disabled unless
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhbdev/sms",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Provider-neutral SMS delivery clients for Kavenegar and SMS.ir.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -75,12 +75,12 @@
75
75
  "@biomejs/biome": "^2.5.6",
76
76
  "@changesets/changelog-github": "^1.0.1",
77
77
  "@changesets/cli": "^3.0.3",
78
- "@types/node": "26.6.4",
78
+ "@types/node": "26.6.6",
79
79
  "publint": "^0.3.25",
80
80
  "typescript": "7.0.2",
81
81
  "vitest": "^4.1.11"
82
82
  },
83
83
  "dependencies": {
84
- "zod": "4.6.5"
84
+ "zod": "4.6.7"
85
85
  }
86
86
  }