-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
125 lines (113 loc) · 3.29 KB
/
main.js
File metadata and controls
125 lines (113 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
'use strict'
// E-Com Plus server IPs for client validation
const ecomServerIps = [
// webhooks
'139.59.95.252',
'2400:6180:100:d0::7ac:e001',
// primary
'192.241.138.93',
'2604:a880:400:d0::58:3001',
// secondary
'198.199.81.173',
'2604:a880:400:d0::13:5001',
// modules
'159.203.20.142',
'2604:a880:cad:d0::928:a001',
// mods.x
'137.184.76.254',
'2604:a880:400:d0::1dc5:6001',
'159.223.106.62',
'2604:a880:400:d0::181b:6001',
'157.245.94.30',
'2604:a880:400:d0::18e0:6001',
'134.122.29.140',
'2604:a880:400:d0::1b1c:8001'
]
// axios HTTP client
// https://github.com/axios/axios
// create an instance using the config defaults provided by the library
const axios = require('axios').create({
// Store API host and base URI
baseURL: 'https://api.e-com.plus/v1/',
timeout: 60000
})
// always JSON for request with body data
;['post', 'patch', 'put'].forEach(method => {
axios.defaults.headers[method]['Content-Type'] = 'application/json'
})
// keep returned client and promise
// optional setup constructor function
let client, setup
// handle new promise
const promise = new Promise((resolve, reject) => {
// setup database and table
// eslint-disable-next-line no-unused-vars
setup = (dbFilename, disableUpdates, firestoreDb) => {
const table = 'ecomplus_app_auth'
// setup instance client object
const debug = !process.env.ECOM_AUTH_DEBUG
? null
: msg => {
console.log(`[ECOM_AUTH] ${msg}`)
}
client = {
table,
axios,
debug
}
if (debug) {
debug('Starting E-Com Plus App SDK with Firestore')
}
// collectionReference as db
client.db = client.collRef = firestoreDb.collection(table)
const updateTokens = () => {
require('./lib/services/update-tokens')(client)
}
if (disableUpdates !== true && process.env.ECOM_AUTH_UPDATE !== 'disabled') {
// update access tokens periodically
updateTokens()
} else if (debug) {
debug('Update tokens disabled')
}
resolve({
getAuth: require('./lib/methods/get-auth')(client),
handleCallback: require('./lib/methods/handle-callback')(client),
apiRequest: require('./lib/methods/api-request')(client),
apiApp: require('./lib/methods/api-app')(client),
appPublicBody: require('./lib/methods/app-public-body')(client),
refreshToken: require('./lib/methods/refresh-token')(client),
configureSetup: require('./lib/methods/configure-setup')(client),
saveProcedures: require('./lib/methods/save-procedures')(client),
deleteAuth: require('./lib/methods/delete-auth')(client),
updateTokens
})
if (debug) {
debug('✓ `ecomAuth` is ready')
}
return promise
}
const {
ECOM_AUTH_SETUP_TIMEOUT,
GCP_PROJECT,
GCLOUD_PROJECT,
FIREBASE_CONFIG
} = process.env
if (
ECOM_AUTH_SETUP_TIMEOUT !== 'disabled' &&
// ignore setup timeout for Google (Firebase) Cloud Functions by default
((!GCP_PROJECT && !GCLOUD_PROJECT && !FIREBASE_CONFIG) || ECOM_AUTH_SETUP_TIMEOUT === 'enabled')
) {
// timeout to handle setup
setTimeout(() => {
if (!client) {
reject(new Error('You must setup E-Com Plus auth before use SDK'))
}
}, 4000)
}
})
module.exports = {
setup,
promise,
ecomAuth: promise,
ecomServerIps
}