qcobjects-cli 2.4.66 → 2.5.104-beta

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.
Files changed (205) hide show
  1. package/.github/workflows/npmpublish-beta.yml +4 -4
  2. package/.github/workflows/npmpublish-lts.yml +4 -4
  3. package/.github/workflows/npmpublish-main.yml +4 -4
  4. package/VERSION +1 -1
  5. package/build-esbuild.js +70 -0
  6. package/eslint.config.mjs +88 -0
  7. package/package.json +118 -56
  8. package/public/browser/backend/com.qcobjects.backend.microservice.static.js +318 -0
  9. package/public/browser/backend/com.qcobjects.backend.microservice.static.js.map +7 -0
  10. package/public/browser/backend/org.qcobjects.backend.php.js +290 -0
  11. package/public/browser/backend/org.qcobjects.backend.php.js.map +7 -0
  12. package/public/browser/com.qcobjects.cli.commands.jira.client_services.js +83 -0
  13. package/public/browser/com.qcobjects.cli.commands.jira.client_services.js.map +7 -0
  14. package/public/browser/com.qcobjects.cli.commands.jira.js +162 -0
  15. package/public/browser/com.qcobjects.cli.commands.jira.js.map +7 -0
  16. package/public/browser/com.qcobjects.cli.commands.js +387 -0
  17. package/public/browser/com.qcobjects.cli.commands.js.map +7 -0
  18. package/public/browser/com.qcobjects.cli.commands.version.js +247 -0
  19. package/public/browser/com.qcobjects.cli.commands.version.js.map +7 -0
  20. package/public/browser/index.js +4126 -0
  21. package/public/browser/index.js.map +7 -0
  22. package/public/browser/org.qcobjects.common.pipelog.js +56 -0
  23. package/public/browser/org.qcobjects.common.pipelog.js.map +7 -0
  24. package/public/browser/org.qcobjects.enterprise.commands.js +160 -0
  25. package/public/browser/org.qcobjects.enterprise.commands.js.map +7 -0
  26. package/public/browser/org.quickcorp.qcobjects.api.client_services.js +81 -0
  27. package/public/browser/org.quickcorp.qcobjects.api.client_services.js.map +7 -0
  28. package/public/browser/org.quickcorp.qcobjects.cli.js +4086 -0
  29. package/public/browser/org.quickcorp.qcobjects.cli.js.map +7 -0
  30. package/public/browser/org.quickcorp.qcobjects.collab.server.js +422 -0
  31. package/public/browser/org.quickcorp.qcobjects.collab.server.js.map +7 -0
  32. package/public/browser/org.quickcorp.qcobjects.defaultsettings.js +397 -0
  33. package/public/browser/org.quickcorp.qcobjects.defaultsettings.js.map +7 -0
  34. package/public/browser/org.quickcorp.qcobjects.main.file.js +248 -0
  35. package/public/browser/org.quickcorp.qcobjects.main.file.js.map +7 -0
  36. package/public/browser/org.quickcorp.qcobjects.main.http.gae.server.js +538 -0
  37. package/public/browser/org.quickcorp.qcobjects.main.http.gae.server.js.map +7 -0
  38. package/public/browser/org.quickcorp.qcobjects.main.http.server.js +600 -0
  39. package/public/browser/org.quickcorp.qcobjects.main.http.server.js.map +7 -0
  40. package/public/browser/org.quickcorp.qcobjects.main.http2.server.js +465 -0
  41. package/public/browser/org.quickcorp.qcobjects.main.http2.server.js.map +7 -0
  42. package/public/browser/qcobjects-cli.js +4118 -0
  43. package/public/browser/qcobjects-cli.js.map +7 -0
  44. package/public/browser/qcobjects-collab.js +41 -0
  45. package/public/browser/qcobjects-collab.js.map +7 -0
  46. package/public/browser/qcobjects-createcert.js +67 -0
  47. package/public/browser/qcobjects-createcert.js.map +7 -0
  48. package/public/browser/qcobjects-gae-http-server.js +41 -0
  49. package/public/browser/qcobjects-gae-http-server.js.map +7 -0
  50. package/public/browser/qcobjects-http-server.js +41 -0
  51. package/public/browser/qcobjects-http-server.js.map +7 -0
  52. package/public/browser/qcobjects-http2-server.js +44 -0
  53. package/public/browser/qcobjects-http2-server.js.map +7 -0
  54. package/public/browser/qcobjects-shell.js +50 -0
  55. package/public/browser/qcobjects-shell.js.map +7 -0
  56. package/public/browser/types/global/index.d.js +15 -0
  57. package/public/browser/types/global/index.d.js.map +7 -0
  58. package/public/cjs/backend/com.qcobjects.backend.microservice.static.cjs +305 -0
  59. package/public/cjs/backend/com.qcobjects.backend.microservice.static.cjs.map +7 -0
  60. package/public/cjs/backend/org.qcobjects.backend.php.cjs +273 -0
  61. package/public/cjs/backend/org.qcobjects.backend.php.cjs.map +7 -0
  62. package/public/cjs/com.qcobjects.cli.commands.cjs +384 -0
  63. package/public/cjs/com.qcobjects.cli.commands.cjs.map +7 -0
  64. package/public/cjs/com.qcobjects.cli.commands.jira.cjs +158 -0
  65. package/public/cjs/com.qcobjects.cli.commands.jira.cjs.map +7 -0
  66. package/public/cjs/com.qcobjects.cli.commands.jira.client_services.cjs +79 -0
  67. package/public/cjs/com.qcobjects.cli.commands.jira.client_services.cjs.map +7 -0
  68. package/public/cjs/com.qcobjects.cli.commands.version.cjs +243 -0
  69. package/public/cjs/com.qcobjects.cli.commands.version.cjs.map +7 -0
  70. package/public/cjs/index.cjs +4118 -0
  71. package/public/cjs/index.cjs.map +7 -0
  72. package/public/cjs/org.qcobjects.common.pipelog.cjs +52 -0
  73. package/public/cjs/org.qcobjects.common.pipelog.cjs.map +7 -0
  74. package/public/cjs/org.qcobjects.enterprise.commands.cjs +156 -0
  75. package/public/cjs/org.qcobjects.enterprise.commands.cjs.map +7 -0
  76. package/public/cjs/org.quickcorp.qcobjects.api.client_services.cjs +77 -0
  77. package/public/cjs/org.quickcorp.qcobjects.api.client_services.cjs.map +7 -0
  78. package/public/cjs/org.quickcorp.qcobjects.cli.cjs +4086 -0
  79. package/public/cjs/org.quickcorp.qcobjects.cli.cjs.map +7 -0
  80. package/public/cjs/org.quickcorp.qcobjects.collab.server.cjs +405 -0
  81. package/public/cjs/org.quickcorp.qcobjects.collab.server.cjs.map +7 -0
  82. package/public/cjs/org.quickcorp.qcobjects.defaultsettings.cjs +394 -0
  83. package/public/cjs/org.quickcorp.qcobjects.defaultsettings.cjs.map +7 -0
  84. package/public/cjs/org.quickcorp.qcobjects.main.file.cjs +235 -0
  85. package/public/cjs/org.quickcorp.qcobjects.main.file.cjs.map +7 -0
  86. package/public/cjs/org.quickcorp.qcobjects.main.http.gae.server.cjs +525 -0
  87. package/public/cjs/org.quickcorp.qcobjects.main.http.gae.server.cjs.map +7 -0
  88. package/public/cjs/org.quickcorp.qcobjects.main.http.server.cjs +587 -0
  89. package/public/cjs/org.quickcorp.qcobjects.main.http.server.cjs.map +7 -0
  90. package/public/cjs/org.quickcorp.qcobjects.main.http2.server.cjs +452 -0
  91. package/public/cjs/org.quickcorp.qcobjects.main.http2.server.cjs.map +7 -0
  92. package/public/cjs/qcobjects-cli.cjs +4115 -0
  93. package/public/cjs/qcobjects-cli.cjs.map +7 -0
  94. package/public/cjs/qcobjects-collab.cjs +24 -0
  95. package/public/cjs/qcobjects-collab.cjs.map +7 -0
  96. package/public/cjs/qcobjects-createcert.cjs +50 -0
  97. package/public/cjs/qcobjects-createcert.cjs.map +7 -0
  98. package/public/cjs/qcobjects-gae-http-server.cjs +24 -0
  99. package/public/cjs/qcobjects-gae-http-server.cjs.map +7 -0
  100. package/public/cjs/qcobjects-http-server.cjs +24 -0
  101. package/public/cjs/qcobjects-http-server.cjs.map +7 -0
  102. package/public/cjs/qcobjects-http2-server.cjs +27 -0
  103. package/public/cjs/qcobjects-http2-server.cjs.map +7 -0
  104. package/public/cjs/qcobjects-shell.cjs +34 -0
  105. package/public/cjs/qcobjects-shell.cjs.map +7 -0
  106. package/public/cjs/types/global/index.d.cjs +2 -0
  107. package/public/cjs/types/global/index.d.cjs.map +7 -0
  108. package/public/esm/backend/com.qcobjects.backend.microservice.static.mjs +315 -0
  109. package/public/esm/backend/com.qcobjects.backend.microservice.static.mjs.map +7 -0
  110. package/public/esm/backend/org.qcobjects.backend.php.mjs +287 -0
  111. package/public/esm/backend/org.qcobjects.backend.php.mjs.map +7 -0
  112. package/public/esm/com.qcobjects.cli.commands.jira.client_services.mjs +62 -0
  113. package/public/esm/com.qcobjects.cli.commands.jira.client_services.mjs.map +7 -0
  114. package/public/esm/com.qcobjects.cli.commands.jira.mjs +139 -0
  115. package/public/esm/com.qcobjects.cli.commands.jira.mjs.map +7 -0
  116. package/public/esm/com.qcobjects.cli.commands.mjs +368 -0
  117. package/public/esm/com.qcobjects.cli.commands.mjs.map +7 -0
  118. package/public/esm/com.qcobjects.cli.commands.version.mjs +226 -0
  119. package/public/esm/com.qcobjects.cli.commands.version.mjs.map +7 -0
  120. package/public/esm/index.mjs +4108 -0
  121. package/public/esm/index.mjs.map +7 -0
  122. package/public/esm/org.qcobjects.common.pipelog.mjs +35 -0
  123. package/public/esm/org.qcobjects.common.pipelog.mjs.map +7 -0
  124. package/public/esm/org.qcobjects.enterprise.commands.mjs +139 -0
  125. package/public/esm/org.qcobjects.enterprise.commands.mjs.map +7 -0
  126. package/public/esm/org.quickcorp.qcobjects.api.client_services.mjs +60 -0
  127. package/public/esm/org.quickcorp.qcobjects.api.client_services.mjs.map +7 -0
  128. package/public/esm/org.quickcorp.qcobjects.cli.mjs +4068 -0
  129. package/public/esm/org.quickcorp.qcobjects.cli.mjs.map +7 -0
  130. package/public/esm/org.quickcorp.qcobjects.collab.server.mjs +419 -0
  131. package/public/esm/org.quickcorp.qcobjects.collab.server.mjs.map +7 -0
  132. package/public/esm/org.quickcorp.qcobjects.defaultsettings.mjs +376 -0
  133. package/public/esm/org.quickcorp.qcobjects.defaultsettings.mjs.map +7 -0
  134. package/public/esm/org.quickcorp.qcobjects.main.file.mjs +245 -0
  135. package/public/esm/org.quickcorp.qcobjects.main.file.mjs.map +7 -0
  136. package/public/esm/org.quickcorp.qcobjects.main.http.gae.server.mjs +535 -0
  137. package/public/esm/org.quickcorp.qcobjects.main.http.gae.server.mjs.map +7 -0
  138. package/public/esm/org.quickcorp.qcobjects.main.http.server.mjs +597 -0
  139. package/public/esm/org.quickcorp.qcobjects.main.http.server.mjs.map +7 -0
  140. package/public/esm/org.quickcorp.qcobjects.main.http2.server.mjs +462 -0
  141. package/public/esm/org.quickcorp.qcobjects.main.http2.server.mjs.map +7 -0
  142. package/public/esm/qcobjects-cli.mjs +4100 -0
  143. package/public/esm/qcobjects-cli.mjs.map +7 -0
  144. package/public/esm/qcobjects-collab.mjs +38 -0
  145. package/public/esm/qcobjects-collab.mjs.map +7 -0
  146. package/public/esm/qcobjects-createcert.mjs +64 -0
  147. package/public/esm/qcobjects-createcert.mjs.map +7 -0
  148. package/public/esm/qcobjects-gae-http-server.mjs +38 -0
  149. package/public/esm/qcobjects-gae-http-server.mjs.map +7 -0
  150. package/public/esm/qcobjects-http-server.mjs +38 -0
  151. package/public/esm/qcobjects-http-server.mjs.map +7 -0
  152. package/public/esm/qcobjects-http2-server.mjs +41 -0
  153. package/public/esm/qcobjects-http2-server.mjs.map +7 -0
  154. package/public/esm/qcobjects-shell.mjs +26 -0
  155. package/public/esm/qcobjects-shell.mjs.map +7 -0
  156. package/public/esm/types/global/index.d.mjs +12 -0
  157. package/public/esm/types/global/index.d.mjs.map +7 -0
  158. package/public/index.d.ts +165 -0
  159. package/spec/support/jasmine.json +7 -4
  160. package/src/backend/{com.qcobjects.backend.microservice.static.js → com.qcobjects.backend.microservice.static.ts} +42 -28
  161. package/src/backend/org.qcobjects.backend.php.ts +348 -0
  162. package/src/{com.qcobjects.cli.commands.jira.client_services.js → com.qcobjects.cli.commands.jira.client_services.ts} +47 -33
  163. package/src/com.qcobjects.cli.commands.jira.ts +124 -0
  164. package/src/{com.qcobjects.cli.commands.js → com.qcobjects.cli.commands.ts} +3 -9
  165. package/src/com.qcobjects.cli.commands.version.ts +285 -0
  166. package/src/{index.mjs → index.cts} +1 -1
  167. package/src/index.mts +2 -0
  168. package/src/index.ts +1 -1
  169. package/src/{org.qcobjects.common.pipelog.js → org.qcobjects.common.pipelog.ts} +21 -18
  170. package/src/org.qcobjects.enterprise.commands.ts +174 -0
  171. package/src/{org.quickcorp.qcobjects.api.client_services.js → org.quickcorp.qcobjects.api.client_services.ts} +46 -32
  172. package/src/org.quickcorp.qcobjects.cli.ts +504 -0
  173. package/src/org.quickcorp.qcobjects.collab.server.ts +420 -0
  174. package/src/org.quickcorp.qcobjects.defaultsettings.ts +424 -0
  175. package/src/org.quickcorp.qcobjects.main.file.ts +180 -0
  176. package/src/org.quickcorp.qcobjects.main.http.gae.server.ts +507 -0
  177. package/src/org.quickcorp.qcobjects.main.http.server.ts +551 -0
  178. package/src/org.quickcorp.qcobjects.main.http2.server.ts +419 -0
  179. package/src/{qcobjects-cli.js → qcobjects-cli.ts} +10 -12
  180. package/src/{qcobjects-collab.js → qcobjects-collab.ts} +4 -4
  181. package/src/{qcobjects-createcert.js → qcobjects-createcert.ts} +5 -3
  182. package/src/{qcobjects-gae-http-server.js → qcobjects-gae-http-server.ts} +4 -4
  183. package/src/{qcobjects-http-server.js → qcobjects-http-server.ts} +4 -4
  184. package/src/{qcobjects-http2-server.js → qcobjects-http2-server.ts} +6 -8
  185. package/src/{qcobjects-shell.js → qcobjects-shell.ts} +11 -14
  186. package/src/types/global/index.d.ts +2 -0
  187. package/tsconfig.d.json +45 -3
  188. package/tsconfig.jasmine.json +39 -0
  189. package/tsconfig.json +50 -7
  190. package/.eslintignore +0 -5
  191. package/.eslintrc.cjs +0 -6
  192. package/src/backend/org.qcobjects.backend.php.js +0 -334
  193. package/src/com.qcobjects.cli.commands.jira.js +0 -144
  194. package/src/com.qcobjects.cli.commands.version.js +0 -285
  195. package/src/index.cjs +0 -2
  196. package/src/index.d.ts +0 -2
  197. package/src/org.qcobjects.enterprise.commands.js +0 -194
  198. package/src/org.quickcorp.qcobjects.cli.js +0 -523
  199. package/src/org.quickcorp.qcobjects.collab.server.js +0 -415
  200. package/src/org.quickcorp.qcobjects.defaultsettings.js +0 -397
  201. package/src/org.quickcorp.qcobjects.main.file.js +0 -159
  202. package/src/org.quickcorp.qcobjects.main.http.gae.server.js +0 -495
  203. package/src/org.quickcorp.qcobjects.main.http.server.js +0 -529
  204. package/src/org.quickcorp.qcobjects.main.http2.server.js +0 -392
  205. /package/spec/{testsSpec.js → testsSpec.ts} +0 -0
@@ -35,11 +35,10 @@ const path = require("path");
35
35
  const absolutePath = path.resolve(__dirname, "./");
36
36
  const mime = require("mime");
37
37
 
38
+ const {Package, BackendMicroservice, CONFIG, logger} = require("qcobjects");
39
+
38
40
  Package("com.qcobjects.backend.microservice.static", [
39
41
  class Microservice extends BackendMicroservice {
40
- constructor (){
41
- super(...arguments);
42
- }
43
42
 
44
43
  finishWithBody (){}
45
44
  done() {
@@ -49,7 +48,7 @@ Package("com.qcobjects.backend.microservice.static", [
49
48
  const stream = microservice.stream;
50
49
  const fileName = (!microservice.fileName.startsWith("/"))?(`${process.cwd()}/${microservice.fileName}`):(microservice.fileName);
51
50
 
52
- const sendFileHTTP2 = function(stream, fileName) {
51
+ const sendFileHTTP2 = function(stream: { respondWithFD: (arg0: any, arg1: { "content-length": any; "last-modified": any; "content-type": any; "cache-control": any; }) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; respond: (arg0: { ":status": number; "content-type": any; }) => void; write: (arg0: string) => void; }, fileName: string) {
53
52
  // read and send file content in the stream
54
53
 
55
54
  try {
@@ -72,7 +71,7 @@ Package("com.qcobjects.backend.microservice.static", [
72
71
  });
73
72
  stream.end();
74
73
 
75
- } catch (e) {
74
+ } catch (e:any) {
76
75
  logger.warn("[ERROR] Something went wrong when trying to send the response as file " + fileName);
77
76
  if (e.errno == -2) {
78
77
  const headers = {
@@ -90,7 +89,7 @@ Package("com.qcobjects.backend.microservice.static", [
90
89
 
91
90
  };
92
91
 
93
- const sendFileLegacyHTTP = function(stream, fileName) {
92
+ const sendFileLegacyHTTP = function(stream: { writeHead: (arg0: number, arg1: { status: number; "Content-Type": string; }) => void; write: (arg0: string) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; }, fileName: string) {
94
93
  // read and send file content in the stream
95
94
  let headers;
96
95
  try {
@@ -117,7 +116,7 @@ Package("com.qcobjects.backend.microservice.static", [
117
116
  logger.info("closing static file", fileName);
118
117
  });
119
118
 
120
- } catch (e){
119
+ } catch (e:any){
121
120
  if (e.errno==-2){
122
121
  headers = {
123
122
  "status": 404,
@@ -144,10 +143,10 @@ Package("com.qcobjects.backend.microservice.static", [
144
143
 
145
144
  }
146
145
 
147
- static(method, data) {
146
+ static(method: string, data: any) {
148
147
  const microservice = this;
149
148
  const redirect_to = microservice.route.redirect_to;
150
- return new Promise(function(resolve, reject) {
149
+ return new Promise<void>(function(resolve, reject) {
151
150
  const supported_methods = microservice.route.supported_methods;
152
151
  let _method_allowed_ = false;
153
152
  if (typeof supported_methods !== "undefined") {
@@ -169,11 +168,11 @@ Package("com.qcobjects.backend.microservice.static", [
169
168
  resolve();
170
169
  } catch (e) {
171
170
  logger.warn("\u{1F926} Something went wrong \u{1F926} when trying to deliver a static path: " + microservice.fileName);
172
- reject();
171
+ reject(e as Error);
173
172
  }
174
173
  } else {
175
174
  logger.info("There is no redirect_to setting declared in route properties. \n Skipping static delivery...");
176
- reject();
175
+ reject(new Error ("There is no redirect_to setting declared in route properties. \n Skipping static delivery..."));
177
176
  }
178
177
  } else {
179
178
  logger.debug("Method: " + method + " will be skipped");
@@ -183,15 +182,16 @@ Package("com.qcobjects.backend.microservice.static", [
183
182
  });
184
183
  }
185
184
 
186
- head(formData) {
185
+ head(formData: any) {
187
186
  const microservice = this;
188
187
  microservice.static("head", formData).then(response => {
189
188
  microservice.body = response;
190
189
  microservice.done();
191
- });
190
+ })
191
+ .catch((e:any) => {logger.warn(`An error ocurred: ${e}`);});
192
192
  }
193
193
 
194
- get(formData) {
194
+ get(formData: any) {
195
195
  const microservice = this;
196
196
  microservice.static("get", formData).then(response => {
197
197
  microservice.body = response;
@@ -201,60 +201,74 @@ Package("com.qcobjects.backend.microservice.static", [
201
201
  });
202
202
  }
203
203
 
204
- post(formData) {
204
+ post(formData: any) {
205
205
  const microservice = this;
206
206
  microservice.static("post", formData).then(response => {
207
207
  microservice.body = response;
208
208
  microservice.done();
209
- });
209
+ })
210
+ .catch((e:any) => {logger.warn(`An error ocurred: ${e}`);});
211
+
210
212
  }
211
213
 
212
- put(formData) {
214
+ put(formData: any) {
213
215
  const microservice = this;
214
216
  microservice.static("put", formData).then(response => {
215
217
  microservice.body = response;
216
218
  microservice.done();
217
- });
219
+ })
220
+ .catch((e:any) => {logger.warn(`An error ocurred: ${e}`);});
221
+
218
222
  }
219
223
 
220
- delete(formData) {
224
+ delete(formData: any) {
221
225
  const microservice = this;
222
226
  microservice.static("delete", formData).then(response => {
223
227
  microservice.body = response;
224
228
  microservice.done();
225
- });
229
+ })
230
+ .catch((e:any) => {logger.warn(`An error ocurred: ${e}`);});
231
+
226
232
  }
227
233
 
228
- connect(formData) {
234
+ connect(formData: any) {
229
235
  const microservice = this;
230
236
  microservice.static("connect", formData).then(response => {
231
237
  microservice.body = response;
232
238
  microservice.done();
233
- });
239
+ })
240
+ .catch((e:any) => {logger.warn(`An error ocurred: ${e}`);});
241
+
234
242
  }
235
243
 
236
- options(formData) {
244
+ options(formData: any) {
237
245
  const microservice = this;
238
246
  microservice.static("options", formData).then(response => {
239
247
  microservice.body = response;
240
248
  microservice.done();
241
- });
249
+ })
250
+ .catch((e:any) => {logger.warn(`An error ocurred: ${e}`);});
251
+
242
252
  }
243
253
 
244
- trace(formData) {
254
+ trace(formData: any) {
245
255
  const microservice = this;
246
256
  microservice.static("trace", formData).then(response => {
247
257
  microservice.body = response;
248
258
  microservice.done();
249
- });
259
+ })
260
+ .catch((e:any) => {logger.warn(`An error ocurred: ${e}`);});
261
+
250
262
  }
251
263
 
252
- patch(formData) {
264
+ patch(formData: any) {
253
265
  const microservice = this;
254
266
  microservice.static("patch", formData).then(response => {
255
267
  microservice.body = response;
256
268
  microservice.done();
257
- });
269
+ })
270
+ .catch((e:any) => {logger.warn(`An error ocurred: ${e}`);});
271
+
258
272
  }
259
273
 
260
274
  }
@@ -0,0 +1,348 @@
1
+ /**
2
+ * QCObjects CLI 2.3.x
3
+ * ________________
4
+ *
5
+ * Author: Jean Machuca <correojean@gmail.com>
6
+ *
7
+ * Cross Browser Javascript Framework for MVC Patterns
8
+ * QuickCorp/QCObjects is licensed under the
9
+ * GNU Lesser General Public License v3.0
10
+ * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)
11
+ *
12
+ * Permissions of this copyleft license are conditioned on making available
13
+ * complete source code of licensed works and modifications under the same
14
+ * license or the GNU GPLv3. Copyright and license notices must be preserved.
15
+ * Contributors provide an express grant of patent rights. However, a larger
16
+ * work using the licensed work through interfaces provided by the licensed
17
+ * work may be distributed under different terms and without source code for
18
+ * the larger work.
19
+ *
20
+ * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>
21
+ *
22
+ * Everyone is permitted to copy and distribute verbatim copies of this
23
+ * license document, but changing it is not allowed.
24
+ */
25
+ /* eslint no-unused-vars: "off" */
26
+ /* eslint no-redeclare: "off" */
27
+ /* eslint no-empty: "off" */
28
+ /* eslint strict: "off" */
29
+ /* eslint no-mixed-operators: "off" */
30
+ /* eslint no-undef: "off" */
31
+ "use strict";
32
+ const fs = require("node:fs");
33
+ const os = require("node:os");
34
+ const {
35
+ exec,
36
+ execSync
37
+ } = require("node:child_process");
38
+ // MY_ENV_VAR="HELLO WORLD" php -f index.php
39
+
40
+ const {Package, BackendMicroservice, logger, CONFIG, Class} = require("qcobjects");
41
+ const path = require("node:path");
42
+ const absolutePath = path.resolve(__dirname, "./");
43
+ const {PipeLog} = require(absolutePath + "/org.qcobjects.common.pipelog.js");
44
+
45
+ const fixWinCmd = function (commandline: string) {
46
+ if (!process.platform.toLowerCase().startsWith("win")) {
47
+ commandline = commandline.replace(/(")/g, String.fromCharCode(92) + "\"");
48
+ }
49
+ return commandline;
50
+ };
51
+
52
+
53
+ class PHPMicroservice extends BackendMicroservice {
54
+ constructor() {
55
+ super();
56
+ const o = this;
57
+
58
+ logger.debug("PHP Microservice executing");
59
+ const microservice = this;
60
+ const request = microservice.request;
61
+ const stream = o.stream;
62
+ microservice.stream = stream;
63
+ stream.on("data", (data: any) => {
64
+ // data from POST, GET
65
+ const requestMethod = request.method.toLowerCase();
66
+ const supportedMethods:any = {
67
+ "post": microservice.post.bind(this),
68
+ };
69
+ if (supportedMethods.hasOwnProperty.call(supportedMethods, requestMethod)) {
70
+ supportedMethods[requestMethod].call(microservice, data);
71
+ }
72
+ });
73
+
74
+ // data from POST, GET
75
+ const requestMethod = request.method.toLowerCase();
76
+ const supportedMethods:any = {
77
+ "get": microservice.get.bind(this),
78
+ "head": microservice.head.bind(this),
79
+ "put": microservice.put.bind(this),
80
+ "delete": microservice.delete.bind(this),
81
+ "connect": microservice.connect.bind(this),
82
+ "options": microservice.options.bind(this),
83
+ "trace": microservice.trace.bind(this),
84
+ "patch": microservice.patch.bind(this)
85
+ };
86
+ if (supportedMethods.hasOwnProperty.call(supportedMethods, requestMethod)) {
87
+ supportedMethods[requestMethod].call(microservice);
88
+ }
89
+
90
+ }
91
+
92
+ get_php_headers_list() {
93
+ const phpheaders:any= {
94
+ "QUERY_STRING": `${this.request.query}`,
95
+ "REDIRECT_STATUS": "200",
96
+ "REQUEST_METHOD": `${this.request.method}`,
97
+ "SCRIPT_FILENAME": `${this.scriptFilePath}`,
98
+ "SCRIPT_NAME": `${this.scriptFilePath.toString()}`,
99
+ "PATH_INFO": `${this.request.path}`,
100
+ "SERVER_NAME": `${this.domain}`,
101
+ "SERVER_PROTOCOL": "HTTP/2",
102
+ "REQUEST_URI": `${this.request.href}`,
103
+ "HTTP_HOST": `${this.domain}`
104
+ };
105
+
106
+ function fixedEncodeURIComponent(str: string | number | boolean) {
107
+ return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
108
+ }
109
+ for (const headername in this.request.headers) {
110
+ if (!headername.startsWith(":")) {
111
+ const phpheadername = headername.toUpperCase().replace(new RegExp("-", "g"), "_");
112
+ let headervalue = this.request.headers[headername];
113
+ if (typeof headervalue !== "string") {
114
+ headervalue = JSON.stringify(headervalue);
115
+ }
116
+ phpheaders["HTTP_" + phpheadername] = fixedEncodeURIComponent(headervalue);
117
+ }
118
+ }
119
+
120
+ return PipeLog.pipe(phpheaders);
121
+ }
122
+
123
+ saveTempData(data: any, done: { (): void; (): void; call?: any; }) {
124
+ const filename = os.tmpdir() + this.tempFileName;
125
+ fs.writeFile(filename, data, (err: any) => {
126
+ if (err) throw err;
127
+ logger.debug("A temp data file has been saved!");
128
+ done.call(this);
129
+ });
130
+ }
131
+
132
+ generateTempFileName() {
133
+ this.tempFileName = "temp" + Date.now().toString();
134
+ return this.tempFileName;
135
+ }
136
+
137
+ trimSlash(pathname: string) {
138
+ if (pathname.startsWith("/")) {
139
+ pathname = pathname.slice(1);
140
+ }
141
+ if (pathname.endsWith("/")) {
142
+ pathname = pathname.slice(0, -1);
143
+ }
144
+ return pathname.replace("//", "/");
145
+ }
146
+
147
+ get() {
148
+ const microservice = this;
149
+ microservice.generateTempFileName();
150
+
151
+ microservice.saveTempData(this.request.query, function () {
152
+ try {
153
+ process.chdir(CONFIG.get("documentRoot") + microservice.request.pathname.slice(1));
154
+ } catch (e) {}
155
+
156
+ const scriptFileName = (microservice.route.hasOwnProperty.call(microservice.route, "redirect_to") &&
157
+ microservice.route.redirect_to !== "") ? (microservice.route.redirect_to) : (microservice.request.scriptname);
158
+ const pathname = microservice.trimSlash(microservice.request.pathname);
159
+ let documentRoot = CONFIG.get("documentRoot", "");
160
+ if (documentRoot == "./") {
161
+ documentRoot = "";
162
+ }
163
+
164
+ let scriptFilePath;
165
+ if (documentRoot !== "") {
166
+ scriptFilePath = `${documentRoot}/${pathname}/${scriptFileName}`;
167
+ } else {
168
+ scriptFilePath = `${pathname}/${scriptFileName}`;
169
+ }
170
+
171
+ scriptFilePath = scriptFilePath.replace("//", "/");
172
+ if (scriptFilePath.startsWith("/") && !documentRoot.startsWith("/")) {
173
+ scriptFilePath = scriptFilePath.slice(1);
174
+ }
175
+
176
+ logger.debug(`Loading PHP file: ${scriptFilePath}`);
177
+ const PHPIncludePath = `.:${CONFIG.get("documentRoot")}:${CONFIG.get("projectPath")}`;
178
+
179
+ microservice.scriptFilePath = scriptFilePath;
180
+
181
+ let commandline = `echo $(cat ${os.tmpdir()}${microservice.tempFileName}) |` + microservice.get_php_headers_list() + ` php -d include_path="${PHPIncludePath}" -q <<- 'EOF'
182
+ <?php
183
+ $_payload = file_get_contents(sys_get_temp_dir().'${microservice.tempFileName}');
184
+ foreach ($_SERVER as $_k => $_v) {
185
+ if (array_key_exists($_k,$_ENV)){
186
+ $_SERVER[$_k] = $_ENV[$_k];
187
+ }
188
+ if ( substr($_k, 0, strlen('HTTP_')) == 'HTTP_' ){
189
+ $_SERVER[$_k]=urldecode($_v);
190
+ }
191
+ }
192
+ @parse_str(parse_url('?'.$_payload, PHP_URL_QUERY), $_REQUEST);
193
+ @parse_str(parse_url('?'.$_payload, PHP_URL_QUERY), $_GET);
194
+ unlink(sys_get_temp_dir().'${microservice.tempFileName}');
195
+ include('${scriptFilePath}');
196
+ ?>
197
+ EOF`;
198
+ commandline = fixWinCmd(commandline);
199
+ logger.debug(commandline);
200
+ try {
201
+ const php = exec(commandline, (err: any, stdout: any, stderr: any) => {
202
+ microservice.body = stdout;
203
+ console.log(stderr);
204
+ microservice.done();
205
+ });
206
+ } catch (ex:any) {
207
+ microservice.body = "500 - INTERNAL ERROR";
208
+ logger.debug(ex.toString());
209
+ console.log(ex);
210
+ microservice.done();
211
+ }
212
+
213
+ });
214
+
215
+ }
216
+
217
+ head(formData: any) {
218
+ this.done();
219
+ }
220
+
221
+ post(formData: any) {
222
+ logger.debug("POST DATA");
223
+ const microservice = this;
224
+ microservice.generateTempFileName();
225
+
226
+ microservice.saveTempData(formData, function () {
227
+ try {
228
+ process.chdir(CONFIG.get("documentRoot") + microservice.request.pathname.slice(1));
229
+ } catch (e) {}
230
+
231
+ const scriptFileName = (microservice.route.hasOwnProperty.call(microservice.route, "redirect_to") &&
232
+ microservice.route.redirect_to !== "") ? (microservice.route.redirect_to) : (microservice.request.scriptname);
233
+ const pathname = microservice.trimSlash(microservice.request.pathname);
234
+ let documentRoot = CONFIG.get("documentRoot", "");
235
+ if (documentRoot == "./") {
236
+ documentRoot = "";
237
+ }
238
+
239
+ let scriptFilePath;
240
+ if (documentRoot !== "") {
241
+ scriptFilePath = `${documentRoot}/${pathname}/${scriptFileName}`;
242
+ } else {
243
+ scriptFilePath = `${pathname}/${scriptFileName}`;
244
+ }
245
+
246
+ scriptFilePath = scriptFilePath.replace("//", "/");
247
+ if (scriptFilePath.startsWith("/") && !documentRoot.startsWith("/")) {
248
+ scriptFilePath = scriptFilePath.slice(1);
249
+ }
250
+
251
+ logger.debug(`Loading PHP file: ${scriptFilePath}`);
252
+ const PHPIncludePath = `.:${CONFIG.get("documentRoot")}:${CONFIG.get("projectPath")}`;
253
+
254
+ microservice.scriptFilePath = scriptFilePath;
255
+
256
+ let commandline = `echo $(cat ${os.tmpdir()}${microservice.tempFileName}) |` + microservice.get_php_headers_list() + ` php -d include_path="${PHPIncludePath}" -q <<- 'EOF'
257
+ <?php
258
+ $_payload = file_get_contents(sys_get_temp_dir().'${microservice.tempFileName}');
259
+ foreach ($_SERVER as $_k => $_v) {
260
+ if (array_key_exists($_k,$_ENV)){
261
+ $_SERVER[$_k] = $_ENV[$_k];
262
+ }
263
+ if ( substr($_k, 0, strlen('HTTP_')) == 'HTTP_' ){
264
+ $_SERVER[$_k]=urldecode($_v);
265
+ }
266
+ }
267
+ @parse_str(parse_url('?'.$_payload, PHP_URL_QUERY), $_REQUEST);
268
+ @parse_str(parse_url('?'.$_payload, PHP_URL_QUERY), $_POST);
269
+ unlink(sys_get_temp_dir().'${microservice.tempFileName}');
270
+ @include('${scriptFilePath}');
271
+ ?>
272
+ EOF`;
273
+ commandline = fixWinCmd(commandline);
274
+ // logger.debug(commandline);
275
+
276
+ try {
277
+ microservice.body = execSync(commandline).toString();
278
+ } catch (ex:any) {
279
+ microservice.body = "500 - INTERNAL ERROR";
280
+ logger.debug(ex.toString());
281
+ }
282
+ microservice.done();
283
+
284
+ });
285
+
286
+ }
287
+
288
+ put(formData: any) {
289
+ this.done();
290
+ }
291
+
292
+ delete(formData: any) {
293
+ this.done();
294
+ }
295
+
296
+ connect(formData: any) {
297
+ this.done();
298
+ }
299
+
300
+ options(formData: any) {
301
+ this.done();
302
+ }
303
+
304
+ trace(formData: any) {
305
+ this.done();
306
+ }
307
+
308
+ patch(formData: any) {
309
+ this.done();
310
+ }
311
+
312
+ done() {
313
+ const microservice = this;
314
+ const stream = microservice.stream;
315
+ try {
316
+ stream.respond(microservice.headers);
317
+ } catch (e) {
318
+ //
319
+ }
320
+ if (microservice.body != null) {
321
+ microservice.finishWithBody.call(microservice, stream);
322
+ }
323
+ }
324
+
325
+ finishWithBody(stream: { write: (arg0: any) => void; end: () => void; }) {
326
+ try {
327
+ stream.write(this.body);
328
+ stream.end();
329
+ } catch (e:any) {
330
+ logger.debug("Something wrong writing the response for microservice" + e.toString());
331
+ }
332
+ }
333
+
334
+
335
+ }
336
+
337
+ const Microservice = Class("Microservice", PHPMicroservice);
338
+
339
+ Package("org.quickcorp.backend.php", [
340
+
341
+ PHPMicroservice,
342
+ Microservice
343
+ ]);
344
+
345
+ exports = {
346
+ PHPMicroservice,
347
+ Microservice
348
+ };
@@ -29,42 +29,56 @@
29
29
  /*eslint no-mixed-operators: "off"*/
30
30
  /*eslint no-undef: "off"*/
31
31
  "use strict";
32
- Package("com.qcobjects.cli.commands.jira.client_services", [
33
- class JiraCloud extends Service {
34
- constructor ({
35
- name= "jira_cloud",
36
- external= true,
37
- useHTTP2= true,
38
- cached= false,
39
- method= "POST",
40
- headers= {
41
- "accept":"application/json",
42
- "content-type":"application/json"
43
- },
44
- basePath= "",
45
- url= "",
46
- withCredentials= false
47
- }){
48
- super(...arguments);
49
- var o = this;
50
- this.domain = `${o.domain}`;
51
- this.basePath = `https://${this.domain}/`;
52
- this.username_password = `${o.username}:${o.password}`;
53
- this.headers["authorization"] = `Basic ${Buffer.from(this.username_password).toString("base64")}`;
54
- this.url = this.basePath + o.apiMethod;
55
- this.data = o.data;
56
-
57
- }
58
32
 
59
- done(service,standardResponse) {
60
- // service loaded
61
- logger.debug(standardResponse);
62
- }
33
+ const { Package, Service, logger } = require("qcobjects");
34
+
35
+ export class JiraCloud extends Service {
36
+ constructor({
37
+ name = "jira_cloud",
38
+ external = true,
39
+ useHTTP2 = true,
40
+ cached = false,
41
+ method = "POST",
42
+ headers = {
43
+ "accept": "application/json",
44
+ "content-type": "application/json"
45
+ },
46
+ basePath = "",
47
+ url = "",
48
+ withCredentials = false
49
+ }) {
50
+ super({
51
+ name,
52
+ external,
53
+ useHTTP2,
54
+ cached,
55
+ method,
56
+ headers,
57
+ basePath,
58
+ url,
59
+ withCredentials
60
+ });
61
+ var o = this;
62
+ this.domain = `${o.domain}`;
63
+ this.basePath = `https://${this.domain}/`;
64
+ this.username_password = `${o.username}:${o.password}`;
65
+ this.headers["authorization"] = `Basic ${Buffer.from(this.username_password).toString("base64")}`;
66
+ this.url = this.basePath + o.apiMethod;
67
+ this.data = o.data;
63
68
 
64
- fail (e){
65
- logger.debug(e);
66
- }
69
+ }
67
70
 
71
+ done(service: any, standardResponse: any) {
72
+ // service loaded
73
+ logger.debug(standardResponse);
68
74
  }
69
75
 
76
+ fail(e: any) {
77
+ logger.debug(e);
78
+ }
79
+
80
+ }
81
+
82
+ Package("com.qcobjects.cli.commands.jira.client_services", [
83
+ JiraCloud
70
84
  ]);