rejoiner 2.15.0 → 2.17.0

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.
@@ -1,13 +1,47 @@
1
+ const { parsePhoneNumberFromString } = require('libphonenumber-js')
1
2
  const { withClient } = require('../helpers')
2
3
 
3
4
  const preferenceTagsPath = 'customers/preference_tags/by_email/'
4
5
  const preferenceTagsRemovePath = 'customers/preference_tags/remove/by_email/'
5
6
 
7
+ const getPhoneNumber = (value) => {
8
+ const phoneNumber = parsePhoneNumberFromString(value)
9
+ if (!phoneNumber) {
10
+ throw new Error(`Invalid phone number: ${value}`)
11
+ }
12
+ return phoneNumber.number
13
+ }
14
+
6
15
  const customerEndpoint = (client) => {
7
16
  const endpoint = 'customer'
8
17
 
9
18
  const { dispatchReturnData, postEmail, putEmail } = withClient(client)
10
19
 
20
+ const get = (email, identifier = 'by_email') => {
21
+ switch (client.apiVersion) {
22
+ case 1:
23
+ if (identifier !== 'by_email') {
24
+ throw new Error('Identifier must be by_email for API v1')
25
+ }
26
+ return dispatchReturnData('get')(`customers/${email}/`)
27
+ case 2:
28
+ switch (identifier) {
29
+ case 'by_email':
30
+ return dispatchReturnData('get')('customers/by_email/', {
31
+ params: { email: email.toLowerCase() },
32
+ })
33
+ case 'by_phone':
34
+ return dispatchReturnData('get')('customers/by_phone/', {
35
+ params: { phone: getPhoneNumber(email) },
36
+ })
37
+ default:
38
+ throw new Error(`Invalid identifier: ${identifier}`)
39
+ }
40
+ default:
41
+ throw new Error(`Invalid API version: ${client.apiVersion}`)
42
+ }
43
+ }
44
+
11
45
  return {
12
46
  path: endpoint,
13
47
  convert: (data, always) => {
@@ -17,21 +51,15 @@ const customerEndpoint = (client) => {
17
51
  cancel: (email) => postEmail(`${endpoint}/cancel/`, email),
18
52
  unsubscribe: (email) => postEmail(`${endpoint}/unsubscribe/`, email),
19
53
  optIn: (email) => postEmail(`${endpoint}/opt_in/`, email),
20
- get: (email) => {
21
- switch (client.apiVersion) {
22
- case 1:
23
- return dispatchReturnData('get')(`customers/${email}/`)
24
- case 2:
25
- return dispatchReturnData('get')('customers/by_email/', {
26
- params: { email },
27
- })
28
- default:
29
- throw new Error(`Invalid API version: ${client.apiVersion}`)
30
- }
31
- },
54
+ get,
55
+ getByEmail: (email) => get(email, 'by_email'),
56
+ getByPhone: (phone) => get(phone, 'by_phone'),
32
57
  update: (data) => {
33
58
  switch (client.apiVersion) {
34
59
  case 1:
60
+ if (!data.email) {
61
+ throw new Error('Email is required for API v1')
62
+ }
35
63
  return putEmail(`customers/${data.email}/`, data)
36
64
  case 2:
37
65
  return postEmail('customers/', data)
package/lib/helpers.js CHANGED
@@ -17,6 +17,14 @@ const withClient = (client) => {
17
17
  })
18
18
  }
19
19
 
20
+ if (typeof email === 'object' && typeof email.phone === 'string') {
21
+ return dispatchReturnData(method)(path, {
22
+
23
+ ...email,
24
+ phone: email.phone,
25
+ })
26
+ }
27
+
20
28
  return Promise.reject(new Error('Request is missing required email parameter.'))
21
29
  }
22
30
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rejoiner",
3
3
  "description": "Rejoiner REST API client wrapper for Node.js",
4
- "version": "2.15.0",
4
+ "version": "2.17.0",
5
5
  "main": "lib/rejoiner.js",
6
6
  "author": "Sascha Bratton <sascha@brattonbratton.com>",
7
7
  "license": "MIT",
@@ -26,6 +26,7 @@
26
26
  "dependencies": {
27
27
  "axios": ">=0.18.1",
28
28
  "graceful-fs": "^4.1.11",
29
+ "libphonenumber-js": "^1.12.29",
29
30
  "lodash.merge": "^4.6.2"
30
31
  },
31
32
  "devDependencies": {