powr-sdk-api 4.3.13 → 4.4.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,167 +0,0 @@
1
- "use strict";
2
-
3
- const express = require('express');
4
- const router = express.Router();
5
- const {
6
- getDb
7
- } = require("../services/mongo");
8
- const {
9
- ObjectId
10
- } = require("mongodb");
11
- router.get('/', async (req, res) => {
12
- const {
13
- projectId
14
- } = req.query;
15
- try {
16
- const query = {
17
- projectId
18
- };
19
- if (!projectId) {
20
- return res.status(400).json({
21
- success: false,
22
- message: 'projectId is required.'
23
- });
24
- }
25
- const db = await getDb();
26
- const invoiceData = await db.collection("invoices").find(query).toArray();
27
- return res.status(200).json({
28
- success: true,
29
- invoices: invoiceData
30
- });
31
- } catch (error) {
32
- console.error("Error retrieving invoices :", error);
33
- return res.status(500).json({
34
- success: false,
35
- message: "Failed to retrieve invoices ."
36
- });
37
- }
38
- });
39
- router.get('/:invoiceId', async (req, res) => {
40
- const {
41
- invoiceId
42
- } = req.params;
43
- const {
44
- projectId
45
- } = req.query;
46
- try {
47
- if (!projectId) {
48
- return res.status(400).json({
49
- success: false,
50
- message: 'projectId is required.'
51
- });
52
- }
53
- const _id = new ObjectId(invoiceId);
54
- const db = await getDb();
55
- const invoiceData = await db.collection("invoices").findOne({
56
- _id,
57
- projectId
58
- });
59
- return res.status(200).json({
60
- success: true,
61
- invoice: invoiceData
62
- });
63
- } catch (error) {
64
- console.error("Error retrieving invoice :", error);
65
- return res.status(500).json({
66
- success: false,
67
- message: "Failed to retrieve invoice."
68
- });
69
- }
70
- });
71
- router.post('/', async (req, res) => {
72
- const {
73
- projectId
74
- } = req.query;
75
- const {
76
- invoiceNumber,
77
- dateOfIssue,
78
- paymentStatus,
79
- customerInfo,
80
- serviceSection,
81
- paymentSection
82
- } = req.body;
83
- if (!projectId) {
84
- return res.status(400).json({
85
- success: false,
86
- message: "projectId is required."
87
- });
88
- }
89
- const invoice = {
90
- invoiceNumber,
91
- dateOfIssue,
92
- paymentStatus,
93
- customerInfo,
94
- serviceSection,
95
- paymentSection,
96
- createdAt: new Date()
97
- };
98
- invoice.projectId = projectId;
99
- try {
100
- const db = await getDb();
101
- const result = await db.collection("invoices").insertOne(invoice);
102
- if (result && result.insertedId) {
103
- return res.status(201).json({
104
- success: true,
105
- message: "Invoice created successfully.",
106
- invoiceId: result.insertedId,
107
- invoice
108
- });
109
- } else {
110
- return res.status(500).json({
111
- success: false,
112
- message: "Invoice could not be added."
113
- });
114
- }
115
- } catch (error) {
116
- console.error("Error adding invoice:", error);
117
- return res.status(500).json({
118
- success: false,
119
- message: "Failed to add invoice due to a server error."
120
- });
121
- }
122
- });
123
- router.put('/:invoiceId', async (req, res) => {
124
- const {
125
- invoiceId
126
- } = req.params;
127
- const {
128
- projectId
129
- } = req.query;
130
- if (!projectId) {
131
- return res.status(400).json({
132
- success: false,
133
- message: "projectId is required."
134
- });
135
- }
136
- let filter;
137
- try {
138
- filter = {
139
- _id: new ObjectId(invoiceId),
140
- projectId: projectId
141
- };
142
- } catch (e) {
143
- return res.status(400).json({
144
- success: false,
145
- message: "Invalid invoiceId format."
146
- });
147
- }
148
- const updateData = req.body;
149
- try {
150
- const db = await getDb();
151
- const result = await db.collection("invoices").updateOne(filter, {
152
- $set: updateData
153
- });
154
- return res.status(200).json({
155
- success: true,
156
- message: "Invoice updated successfully.",
157
- result: result
158
- });
159
- } catch (error) {
160
- console.error("Error updating invoice:", error);
161
- return res.status(500).json({
162
- success: false,
163
- message: "Failed to update invoice due to a server error."
164
- });
165
- }
166
- });
167
- module.exports = router;
@@ -1,269 +0,0 @@
1
- "use strict";
2
-
3
- const express = require("express");
4
- const router = express.Router();
5
- const plexxManager = require("../services/plexx");
6
- const {
7
- getDb
8
- } = require("../services/mongo");
9
-
10
- // Get Plexx status
11
- router.get("/status", async (req, res) => {
12
- try {
13
- const stats = plexxManager.getStats();
14
- return res.status(200).json({
15
- success: true,
16
- data: {
17
- ...stats,
18
- message: stats.isEnabled ? "Plexx is running" : "Plexx is disabled"
19
- }
20
- });
21
- } catch (err) {
22
- console.error("Error getting Plexx status:", err);
23
- return res.status(500).json({
24
- success: false,
25
- message: "Error getting Plexx status"
26
- });
27
- }
28
- });
29
-
30
- // Enable Plexx
31
- router.post("/enable", async (req, res) => {
32
- try {
33
- plexxManager.enable();
34
- return res.status(200).json({
35
- success: true,
36
- message: "Plexx enabled successfully",
37
- data: plexxManager.getStats()
38
- });
39
- } catch (err) {
40
- console.error("Error enabling Plexx:", err);
41
- return res.status(500).json({
42
- success: false,
43
- message: "Error enabling Plexx"
44
- });
45
- }
46
- });
47
-
48
- // Disable Plexx
49
- router.post("/disable", async (req, res) => {
50
- try {
51
- plexxManager.disable();
52
- return res.status(200).json({
53
- success: true,
54
- message: "Plexx disabled successfully",
55
- data: plexxManager.getStats()
56
- });
57
- } catch (err) {
58
- console.error("Error disabling Plexx:", err);
59
- return res.status(500).json({
60
- success: false,
61
- message: "Error disabling Plexx"
62
- });
63
- }
64
- });
65
-
66
- // Toggle Plexx
67
- router.post("/toggle", async (req, res) => {
68
- try {
69
- const isEnabled = plexxManager.toggle();
70
- return res.status(200).json({
71
- success: true,
72
- message: isEnabled ? "Plexx enabled" : "Plexx disabled",
73
- data: plexxManager.getStats()
74
- });
75
- } catch (err) {
76
- console.error("Error toggling Plexx:", err);
77
- return res.status(500).json({
78
- success: false,
79
- message: "Error toggling Plexx"
80
- });
81
- }
82
- });
83
-
84
- // CRUD Operations for Routes
85
-
86
- // Get all routes entries
87
- router.get('/routes', async (req, res) => {
88
- const {
89
- projectId
90
- } = req.query;
91
- try {
92
- const query = {
93
- projectId
94
- };
95
- if (!projectId) {
96
- return res.status(400).json({
97
- success: false,
98
- message: 'projectId is required.'
99
- });
100
- }
101
- const db = await getDb();
102
- const routesData = await db.collection("routes").find(query).toArray();
103
- return res.status(200).json({
104
- success: true,
105
- allroutes: routesData
106
- });
107
- } catch (error) {
108
- console.error("Error retrieving routes entries:", error);
109
- return res.status(500).json({
110
- success: false,
111
- message: "Failed to retrieve routes entries."
112
- });
113
- }
114
- });
115
-
116
- // Create a new route
117
- router.post('/routes', async (req, res) => {
118
- try {
119
- const {
120
- projectId
121
- } = req.query;
122
- if (!projectId) {
123
- return res.status(400).json({
124
- success: false,
125
- message: 'projectId is required.'
126
- });
127
- }
128
- const newRoute = req.body;
129
- newRoute.projectId = projectId;
130
- if (!newRoute || Object.keys(newRoute).length === 0) {
131
- return res.status(400).json({
132
- success: false,
133
- message: 'Request body is empty or invalid.'
134
- });
135
- }
136
- const db = await getDb();
137
- const result = await db.collection('routes').insertOne(newRoute);
138
-
139
- // Recompile the new route using Plexx manager (only if enabled)
140
- if (plexxManager.getStats().isEnabled) {
141
- await plexxManager.updateRoute(projectId, newRoute.route, newRoute.code);
142
- }
143
- return res.status(201).json({
144
- success: true,
145
- entry: result.ops ? result.ops[0] : newRoute
146
- });
147
- } catch (error) {
148
- console.error('Error inserting route entry:', error);
149
- return res.status(500).json({
150
- success: false,
151
- message: 'Failed to insert route entry.'
152
- });
153
- }
154
- });
155
-
156
- // Update route code
157
- router.put('/routes/:route', async (req, res) => {
158
- try {
159
- const {
160
- route
161
- } = req.params;
162
- const {
163
- code
164
- } = req.body;
165
- const {
166
- projectId
167
- } = req.query;
168
- if (!projectId) {
169
- return res.status(400).json({
170
- success: false,
171
- message: 'projectId is required.'
172
- });
173
- }
174
- if (!code) {
175
- return res.status(400).json({
176
- success: false,
177
- message: 'Code field is required.'
178
- });
179
- }
180
- const query = {
181
- route,
182
- projectId
183
- };
184
- const db = await getDb();
185
- const existingRoute = await db.collection('routes').findOne(query);
186
- if (!existingRoute) {
187
- return res.status(404).json({
188
- success: false,
189
- message: 'Route not found.'
190
- });
191
- }
192
-
193
- // Update database
194
- const result = await db.collection('routes').updateOne(query, {
195
- $set: {
196
- code
197
- }
198
- });
199
- if (result.matchedCount === 0) {
200
- return res.status(404).json({
201
- success: false,
202
- message: 'Route not found.'
203
- });
204
- }
205
-
206
- // Recompile the updated route using Plexx manager (only if enabled)
207
- if (plexxManager.getStats().isEnabled) {
208
- await plexxManager.updateRoute(projectId, route, code);
209
- }
210
- const updatedRoute = await db.collection('routes').findOne(query);
211
- return res.status(200).json({
212
- success: true,
213
- entry: updatedRoute
214
- });
215
- } catch (error) {
216
- console.error('Error updating route code:', error);
217
- return res.status(500).json({
218
- success: false,
219
- message: 'Failed to update route code.',
220
- error: error.message
221
- });
222
- }
223
- });
224
-
225
- // Execute dynamic route
226
- router.post("/:route", async (req, res) => {
227
- const {
228
- route
229
- } = req.params;
230
- const {
231
- projectId
232
- } = req.query;
233
- if (!projectId) {
234
- return res.status(400).json({
235
- success: false,
236
- message: 'projectId is required.'
237
- });
238
- }
239
- try {
240
- // Use pre-compiled function (NO COMPILATION HERE)
241
- const params = {
242
- ...req.query,
243
- ...req.body
244
- };
245
- const result = await plexxManager.execute(projectId, route, params);
246
-
247
- // Handle the standardized response format
248
- if (result.success) {
249
- return res.status(200).json({
250
- success: true,
251
- data: result.data,
252
- message: result.message
253
- });
254
- } else {
255
- return res.status(404).json({
256
- success: false,
257
- message: result.message,
258
- data: result.data
259
- });
260
- }
261
- } catch (err) {
262
- console.error("Error executing logic:", err);
263
- return res.status(500).json({
264
- success: false,
265
- message: "Error executing logic"
266
- });
267
- }
268
- });
269
- module.exports = router;
@@ -1,143 +0,0 @@
1
- "use strict";
2
-
3
- const express = require("express");
4
- const router = express.Router();
5
- const {
6
- getDb
7
- } = require("../services/mongo");
8
-
9
- // Get all routes entries
10
- router.get('/', async (req, res) => {
11
- const {
12
- projectId
13
- } = req.query;
14
- try {
15
- const query = {
16
- projectId
17
- };
18
- if (!projectId) {
19
- return res.status(400).json({
20
- success: false,
21
- message: 'projectId is required.'
22
- });
23
- }
24
- const db = await getDb();
25
- const routesData = await db.collection("routes").find(query).toArray();
26
- return res.status(200).json({
27
- success: true,
28
- allroutes: routesData
29
- });
30
- } catch (error) {
31
- console.error("Error retrieving routes entries:", error);
32
- return res.status(500).json({
33
- success: false,
34
- message: "Failed to retrieve routes entries."
35
- });
36
- }
37
- });
38
-
39
- // Create a new route
40
- router.post('/', async (req, res) => {
41
- try {
42
- const {
43
- projectId
44
- } = req.query;
45
- if (!projectId) {
46
- return res.status(400).json({
47
- success: false,
48
- message: 'projectId is required.'
49
- });
50
- }
51
- const newRoute = req.body;
52
- newRoute.projectId = projectId;
53
- if (!newRoute || Object.keys(newRoute).length === 0) {
54
- return res.status(400).json({
55
- success: false,
56
- message: 'Request body is empty or invalid.'
57
- });
58
- }
59
- const db = await getDb();
60
- const result = await db.collection('routes').insertOne(newRoute);
61
- return res.status(201).json({
62
- success: true,
63
- entry: result.ops ? result.ops[0] : newRoute
64
- });
65
- } catch (error) {
66
- console.error('Error inserting route entry:', error);
67
- return res.status(500).json({
68
- success: false,
69
- message: 'Failed to insert route entry.'
70
- });
71
- }
72
- });
73
-
74
- // Update route code
75
- router.put('/:route', async (req, res) => {
76
- try {
77
- const {
78
- route
79
- } = req.params;
80
- const {
81
- code
82
- } = req.body;
83
- const {
84
- projectId
85
- } = req.query;
86
- if (!projectId) {
87
- return res.status(400).json({
88
- success: false,
89
- message: 'projectId is required.'
90
- });
91
- }
92
- if (!code) {
93
- return res.status(400).json({
94
- success: false,
95
- message: 'Code field is required.'
96
- });
97
- }
98
- const query = {
99
- route,
100
- projectId
101
- };
102
- const db = await getDb();
103
- const existingRoute = await db.collection('routes').findOne(query);
104
- if (!existingRoute) {
105
- return res.status(404).json({
106
- success: false,
107
- message: 'Route not found.'
108
- });
109
- }
110
-
111
- // Update database
112
- const result = await db.collection('routes').updateOne(query, {
113
- $set: {
114
- code
115
- }
116
- });
117
- if (result.matchedCount === 0) {
118
- return res.status(404).json({
119
- success: false,
120
- message: 'Route not found.'
121
- });
122
- }
123
-
124
- // Recompile the updated route using Plexx manager (only if enabled)
125
- const plexxManager = require('../services/plexx');
126
- if (plexxManager.getStats().isEnabled) {
127
- await plexxManager.updateRoute(projectId, route, code);
128
- }
129
- const updatedRoute = await db.collection('routes').findOne(query);
130
- return res.status(200).json({
131
- success: true,
132
- entry: updatedRoute
133
- });
134
- } catch (error) {
135
- console.error('Error updating route code:', error);
136
- return res.status(500).json({
137
- success: false,
138
- message: 'Failed to update route code.',
139
- error: error.message
140
- });
141
- }
142
- });
143
- module.exports = router;
@@ -1,42 +0,0 @@
1
- "use strict";
2
-
3
- const {
4
- MongoClient
5
- } = require('mongodb');
6
- const {
7
- config
8
- } = require('../config');
9
- const mongoClient = new MongoClient(config.mongoUri, {
10
- maxPoolSize: 10,
11
- serverSelectionTimeoutMS: 5000,
12
- socketTimeoutMS: 45000
13
- });
14
- let db;
15
- async function connect() {
16
- try {
17
- await mongoClient.connect();
18
- db = mongoClient.db();
19
- console.log("Connected to MongoDB via SDK");
20
- } catch (error) {
21
- console.error("Failed to connect to MongoDB:", error);
22
- process.exit(1);
23
- }
24
- }
25
- function getDb() {
26
- if (!db) {
27
- throw new Error("Database not initialized. Call connectToMongo() first.");
28
- }
29
- return db;
30
- }
31
- const closeConnection = async () => {
32
- if (mongoClient) {
33
- await mongoClient.close();
34
- db = null;
35
- console.log('✅ MongoDB connection closed');
36
- }
37
- };
38
- module.exports = {
39
- connect,
40
- getDb,
41
- closeConnection
42
- };