@sassoftware/viya-serverjs 0.1.2 → 0.2.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.
Files changed (405) hide show
  1. package/.babelrc +6 -0
  2. package/.dockerignore +2 -0
  3. package/.env +29 -0
  4. package/.env.proxy +31 -0
  5. package/.env.server +29 -0
  6. package/.eslintignore +4 -0
  7. package/.eslintrc.json +42 -0
  8. package/Dockerfile +44 -0
  9. package/README.md +6 -4
  10. package/cli.js +9 -0
  11. package/images/viya-apiserverjs.png +0 -0
  12. package/lib/{core/config.js → config.js} +5 -24
  13. package/lib/handlers/appCallback.js +62 -0
  14. package/lib/handlers/codeAuth.js +61 -0
  15. package/lib/{core/handlers → handlers}/decodeJwt.js +2 -2
  16. package/lib/handlers/favicon.js +45 -0
  17. package/lib/handlers/getApp.js +77 -0
  18. package/lib/handlers/getApp2.js +48 -0
  19. package/lib/handlers/getUser.js +49 -0
  20. package/lib/{core/handlers → handlers}/index.js +2 -2
  21. package/lib/handlers/keepAlive.js +99 -0
  22. package/lib/handlers/keepAlive2.js +33 -0
  23. package/lib/handlers/logon.js +44 -0
  24. package/lib/handlers/logout.js +88 -0
  25. package/lib/handlers/proxyMapUri.js +78 -0
  26. package/lib/handlers/proxyOnResponse.js +26 -0
  27. package/lib/handlers/reactDev.js +52 -0
  28. package/lib/handlers/setCookies.js +110 -0
  29. package/lib/{core/iService.js → iService.js} +45 -30
  30. package/lib/index.js +177 -10
  31. package/lib/{core/parseDocker.js → parseDocker.js} +1 -1
  32. package/lib/plugins/SASauth.js +101 -0
  33. package/lib/plugins/appCookie.js +99 -0
  34. package/lib/plugins/setContext.js +56 -0
  35. package/lib/{core/plugins → plugins}/setDefaultRoutes.js +67 -58
  36. package/lib/plugins/setupAuth.js +87 -0
  37. package/lib/{core/plugins → plugins}/setupUserRoutes.js +21 -12
  38. package/lib/plugins/token.js +31 -0
  39. package/lib/schemes/SASTokenScheme.js +71 -0
  40. package/package.json +56 -14
  41. package/packages/core/config.js +86 -0
  42. package/packages/core/handlers/appCallback.js +40 -0
  43. package/packages/core/handlers/codeAuth.js +31 -0
  44. package/packages/core/handlers/decodeJwt.js +11 -0
  45. package/packages/core/handlers/favicon.js +24 -0
  46. package/packages/core/handlers/getApp.js +41 -0
  47. package/packages/core/handlers/getApp2.js +26 -0
  48. package/packages/core/handlers/getUser.js +20 -0
  49. package/packages/core/handlers/index.js +36 -0
  50. package/packages/core/handlers/keepAlive.js +54 -0
  51. package/packages/core/handlers/keepAlive2.js +13 -0
  52. package/packages/core/handlers/logon.js +24 -0
  53. package/packages/core/handlers/logout.js +43 -0
  54. package/{lib → packages}/core/handlers/proxyMapUri.js +25 -36
  55. package/packages/core/handlers/proxyOnResponse.js +12 -0
  56. package/packages/core/handlers/reactDev.js +30 -0
  57. package/packages/core/handlers/setCookies.js +78 -0
  58. package/packages/core/iService.js +369 -0
  59. package/packages/core/index.js +249 -0
  60. package/packages/core/parseDocker.js +33 -0
  61. package/packages/core/plugins/SASauth.js +79 -0
  62. package/packages/core/plugins/appCookie.js +49 -0
  63. package/packages/core/plugins/setContext.js +34 -0
  64. package/packages/core/plugins/setDefaultRoutes.js +262 -0
  65. package/packages/core/plugins/setupAuth.js +48 -0
  66. package/packages/core/plugins/setupUserRoutes.js +48 -0
  67. package/packages/core/plugins/token.js +10 -0
  68. package/packages/core/schemes/SASTokenScheme.js +43 -0
  69. package/packages/core/visionIndex.html +24 -0
  70. package/packages/examples/apitest/.env +11 -0
  71. package/packages/examples/apitest/.eslintrc.json +42 -0
  72. package/packages/examples/apitest/Dockerfile +41 -0
  73. package/packages/examples/apitest/api.js +88 -0
  74. package/packages/examples/apitest/appenv.js +6 -0
  75. package/packages/examples/apitest/docker-compose.yml +10 -0
  76. package/packages/examples/apitest/package.json +19 -0
  77. package/packages/examples/apitest/public/data/Cluster_SDOH1.sas +182 -0
  78. package/packages/examples/apitest/public/data/Cluster_SDOH6.sas +180 -0
  79. package/packages/examples/apitest/public/data/LeNet_snzrle.astore +0 -0
  80. package/packages/examples/apitest/public/data/NeuralNetwork_High_med.sas +2409 -0
  81. package/packages/examples/apitest/public/data/NeuralNetwork_high_med1.sas +2409 -0
  82. package/packages/examples/apitest/public/data/ast/GBlocalcopy.sasast +0 -0
  83. package/packages/examples/apitest/public/data/ast/LeNet_snzrle.astore +0 -0
  84. package/packages/examples/apitest/public/data/ast/gb_IrisGB.sasast +0 -0
  85. package/packages/examples/apitest/public/data/ast/paysimsvdd.sasast +0 -0
  86. package/packages/examples/apitest/public/data/ast/svmlocalcopy.sasast +0 -0
  87. package/packages/examples/apitest/public/data/cars.csv +429 -0
  88. package/packages/examples/apitest/public/data/cluster_test2.sas7bdat +0 -0
  89. package/packages/examples/apitest/public/data/cmdList.txt +15 -0
  90. package/packages/examples/apitest/public/data/gradBoost.sashdat +0 -0
  91. package/packages/examples/apitest/public/data/iris.csv +151 -0
  92. package/packages/examples/apitest/public/data/model1.sas7bdat +0 -0
  93. package/packages/examples/apitest/public/favicon.ico +0 -0
  94. package/packages/examples/apitest/public/index.html +316 -0
  95. package/packages/examples/apitest/public/index2.html +102 -0
  96. package/packages/examples/apitest/public/logon.html +42 -0
  97. package/packages/examples/apitest/public/myapp/secondary.html +1 -0
  98. package/packages/examples/apitest/public/myapp/test.js +2 -0
  99. package/packages/examples/apitest/public/onlogoff.html +53 -0
  100. package/packages/examples/apitest/start.sh +15 -0
  101. package/packages/examples/app/.env +32 -0
  102. package/packages/examples/app/.envProxy +19 -0
  103. package/packages/examples/app/.envimpl +12 -0
  104. package/packages/examples/app/.eslintrc.json +42 -0
  105. package/packages/examples/app/Dockerfile +42 -0
  106. package/packages/examples/app/appenv.js +6 -0
  107. package/packages/examples/app/certs/ca.crt +19 -0
  108. package/packages/examples/app/certs/tls.crt +25 -0
  109. package/packages/examples/app/certs/tls.key +28 -0
  110. package/packages/examples/app/certs/tls.sh +5 -0
  111. package/packages/examples/app/docker-compose.yml +12 -0
  112. package/packages/examples/app/index.js +15 -0
  113. package/packages/examples/app/package.json +20 -0
  114. package/packages/examples/app/public/casread.html +324 -0
  115. package/packages/examples/app/public/data/Cluster_SDOH1.sas +182 -0
  116. package/packages/examples/app/public/data/Cluster_SDOH6.sas +180 -0
  117. package/packages/examples/app/public/data/LeNet_snzrle.astore +0 -0
  118. package/packages/examples/app/public/data/NeuralNetwork_High_med.sas +2409 -0
  119. package/packages/examples/app/public/data/NeuralNetwork_high_med1.sas +2409 -0
  120. package/packages/examples/app/public/data/ast/GBlocalcopy.sasast +0 -0
  121. package/packages/examples/app/public/data/ast/LeNet_snzrle.astore +0 -0
  122. package/packages/examples/app/public/data/ast/gb_IrisGB.sasast +0 -0
  123. package/packages/examples/app/public/data/ast/paysimsvdd.sasast +0 -0
  124. package/packages/examples/app/public/data/ast/svmlocalcopy.sasast +0 -0
  125. package/packages/examples/app/public/data/cars.csv +429 -0
  126. package/packages/examples/app/public/data/cluster_test2.sas7bdat +0 -0
  127. package/packages/examples/app/public/data/cmdList.txt +15 -0
  128. package/packages/examples/app/public/data/gradBoost.sashdat +0 -0
  129. package/packages/examples/app/public/data/iris.csv +151 -0
  130. package/packages/examples/app/public/data/model1.sas7bdat +0 -0
  131. package/packages/examples/app/public/favicon.ico +0 -0
  132. package/packages/examples/app/public/index.html +332 -0
  133. package/packages/examples/app/public/indexProxy.html +346 -0
  134. package/packages/examples/app/public/indextest.html +316 -0
  135. package/packages/examples/app/public/logon.html +44 -0
  136. package/packages/examples/app/public/micburger.html +345 -0
  137. package/packages/examples/app/public/micburger.txt.html +311 -0
  138. package/packages/examples/app/public/myapp/secondary.html +1 -0
  139. package/packages/examples/app/public/myapp/test.js +2 -0
  140. package/packages/examples/app/public/sara.txt +345 -0
  141. package/packages/examples/app/public/testva2.html +311 -0
  142. package/packages/examples/app/startup.sh +15 -0
  143. package/packages/examples/appdocker/.env +21 -0
  144. package/packages/examples/appdocker/.envProxy +22 -0
  145. package/packages/examples/appdocker/.envimpl +12 -0
  146. package/packages/examples/appdocker/.eslintrc.json +42 -0
  147. package/packages/examples/appdocker/Dockerfile +43 -0
  148. package/packages/examples/appdocker/appenv.js +6 -0
  149. package/packages/examples/appdocker/certs/ca.crt +19 -0
  150. package/packages/examples/appdocker/certs/tls.crt +25 -0
  151. package/packages/examples/appdocker/certs/tls.key +28 -0
  152. package/packages/examples/appdocker/certs/tls.sh +5 -0
  153. package/packages/examples/appdocker/docker-compose.yml +12 -0
  154. package/packages/examples/appdocker/index.js +15 -0
  155. package/packages/examples/appdocker/package.json +20 -0
  156. package/packages/examples/appdocker/public/data/Cluster_SDOH1.sas +182 -0
  157. package/packages/examples/appdocker/public/data/Cluster_SDOH6.sas +180 -0
  158. package/packages/examples/appdocker/public/data/LeNet_snzrle.astore +0 -0
  159. package/packages/examples/appdocker/public/data/NeuralNetwork_High_med.sas +2409 -0
  160. package/packages/examples/appdocker/public/data/NeuralNetwork_high_med1.sas +2409 -0
  161. package/packages/examples/appdocker/public/data/ast/GBlocalcopy.sasast +0 -0
  162. package/packages/examples/appdocker/public/data/ast/LeNet_snzrle.astore +0 -0
  163. package/packages/examples/appdocker/public/data/ast/gb_IrisGB.sasast +0 -0
  164. package/packages/examples/appdocker/public/data/ast/paysimsvdd.sasast +0 -0
  165. package/packages/examples/appdocker/public/data/ast/svmlocalcopy.sasast +0 -0
  166. package/packages/examples/appdocker/public/data/cars.csv +429 -0
  167. package/packages/examples/appdocker/public/data/cluster_test2.sas7bdat +0 -0
  168. package/packages/examples/appdocker/public/data/cmdList.txt +15 -0
  169. package/packages/examples/appdocker/public/data/gradBoost.sashdat +0 -0
  170. package/packages/examples/appdocker/public/data/iris.csv +151 -0
  171. package/packages/examples/appdocker/public/data/model1.sas7bdat +0 -0
  172. package/packages/examples/appdocker/public/favicon.ico +0 -0
  173. package/packages/examples/appdocker/public/index.html +346 -0
  174. package/packages/examples/appdocker/public/indexProxy.html +346 -0
  175. package/packages/examples/appdocker/public/indextest.html +316 -0
  176. package/packages/examples/appdocker/public/logon.html +44 -0
  177. package/packages/examples/appdocker/public/myapp/secondary.html +1 -0
  178. package/packages/examples/appdocker/public/myapp/test.js +2 -0
  179. package/packages/examples/appdocker/startup.sh +15 -0
  180. package/packages/examples/apptest/.env +28 -0
  181. package/packages/examples/apptest/.envProxy +22 -0
  182. package/packages/examples/apptest/.envimpl +12 -0
  183. package/packages/examples/apptest/.eslintrc.json +42 -0
  184. package/packages/examples/apptest/Dockerfile +44 -0
  185. package/packages/examples/apptest/appDir/app1/design.html +350 -0
  186. package/packages/examples/apptest/appDir/app1/index.html +353 -0
  187. package/packages/examples/apptest/appDir/index.html +350 -0
  188. package/packages/examples/apptest/appenv.js +6 -0
  189. package/packages/examples/apptest/docker-compose.yml +12 -0
  190. package/packages/examples/apptest/index.js +444 -0
  191. package/packages/examples/apptest/package.json +24 -0
  192. package/packages/examples/apptest/public/casread2.html +321 -0
  193. package/packages/examples/apptest/public/data/Cluster_SDOH1.sas +182 -0
  194. package/packages/examples/apptest/public/data/Cluster_SDOH6.sas +180 -0
  195. package/packages/examples/apptest/public/data/LeNet_snzrle.astore +0 -0
  196. package/packages/examples/apptest/public/data/NeuralNetwork_High_med.sas +2409 -0
  197. package/packages/examples/apptest/public/data/NeuralNetwork_high_med1.sas +2409 -0
  198. package/packages/examples/apptest/public/data/ast/GBlocalcopy.sasast +0 -0
  199. package/packages/examples/apptest/public/data/ast/LeNet_snzrle.astore +0 -0
  200. package/packages/examples/apptest/public/data/ast/gb_IrisGB.sasast +0 -0
  201. package/packages/examples/apptest/public/data/ast/paysimsvdd.sasast +0 -0
  202. package/packages/examples/apptest/public/data/ast/svmlocalcopy.sasast +0 -0
  203. package/packages/examples/apptest/public/data/cars.csv +429 -0
  204. package/packages/examples/apptest/public/data/cluster_test2.sas7bdat +0 -0
  205. package/packages/examples/apptest/public/data/cmdList.txt +15 -0
  206. package/packages/examples/apptest/public/data/gradBoost.sashdat +0 -0
  207. package/packages/examples/apptest/public/data/iris.csv +151 -0
  208. package/packages/examples/apptest/public/data/model1.sas7bdat +0 -0
  209. package/packages/examples/apptest/public/design.html +349 -0
  210. package/packages/examples/apptest/public/favicon.ico +0 -0
  211. package/packages/examples/apptest/public/help.html +1 -0
  212. package/packages/examples/apptest/public/index.html +353 -0
  213. package/packages/examples/apptest/public/index2.html +353 -0
  214. package/packages/examples/apptest/public/indexProxy.html +346 -0
  215. package/packages/examples/apptest/public/indextest.html +316 -0
  216. package/packages/examples/apptest/public/logon.html +44 -0
  217. package/packages/examples/apptest/public/myapp/q.html +349 -0
  218. package/packages/examples/apptest/public/myapp/secondary.html +1 -0
  219. package/packages/examples/apptest/public/myapp/test.js +2 -0
  220. package/packages/examples/apptest/public/push1.html +187 -0
  221. package/packages/examples/apptest/startup.sh +15 -0
  222. package/packages/examples/apptesti/.env +13 -0
  223. package/packages/examples/apptesti/.eslintrc.json +42 -0
  224. package/packages/examples/apptesti/Dockerfile +42 -0
  225. package/packages/examples/apptesti/appenv.js +6 -0
  226. package/packages/examples/apptesti/certs/ca.crt +19 -0
  227. package/packages/examples/apptesti/certs/tls.crt +25 -0
  228. package/packages/examples/apptesti/certs/tls.key +28 -0
  229. package/packages/examples/apptesti/certs/tls.sh +5 -0
  230. package/packages/examples/apptesti/docker-compose.yml +12 -0
  231. package/{lib/cli.js → packages/examples/apptesti/index.js} +4 -6
  232. package/packages/examples/apptesti/package.json +20 -0
  233. package/packages/examples/apptesti/public/data/Cluster_SDOH1.sas +182 -0
  234. package/packages/examples/apptesti/public/data/Cluster_SDOH6.sas +180 -0
  235. package/packages/examples/apptesti/public/data/LeNet_snzrle.astore +0 -0
  236. package/packages/examples/apptesti/public/data/NeuralNetwork_High_med.sas +2409 -0
  237. package/packages/examples/apptesti/public/data/NeuralNetwork_high_med1.sas +2409 -0
  238. package/packages/examples/apptesti/public/data/ast/GBlocalcopy.sasast +0 -0
  239. package/packages/examples/apptesti/public/data/ast/LeNet_snzrle.astore +0 -0
  240. package/packages/examples/apptesti/public/data/ast/gb_IrisGB.sasast +0 -0
  241. package/packages/examples/apptesti/public/data/ast/paysimsvdd.sasast +0 -0
  242. package/packages/examples/apptesti/public/data/ast/svmlocalcopy.sasast +0 -0
  243. package/packages/examples/apptesti/public/data/cars.csv +429 -0
  244. package/packages/examples/apptesti/public/data/cluster_test2.sas7bdat +0 -0
  245. package/packages/examples/apptesti/public/data/cmdList.txt +15 -0
  246. package/packages/examples/apptesti/public/data/gradBoost.sashdat +0 -0
  247. package/packages/examples/apptesti/public/data/iris.csv +151 -0
  248. package/packages/examples/apptesti/public/data/model1.sas7bdat +0 -0
  249. package/packages/examples/apptesti/public/favicon.ico +0 -0
  250. package/packages/examples/apptesti/public/index.html +346 -0
  251. package/packages/examples/apptesti/public/indexProxy.html +346 -0
  252. package/packages/examples/apptesti/public/indextest.html +316 -0
  253. package/packages/examples/apptesti/public/logon.html +44 -0
  254. package/packages/examples/apptesti/public/main.html +346 -0
  255. package/packages/examples/apptesti/public/myapp/secondary.html +1 -0
  256. package/packages/examples/apptesti/public/myapp/test.js +2 -0
  257. package/packages/examples/apptesti/startup.sh +15 -0
  258. package/packages/examples/basic/.env +10 -0
  259. package/packages/examples/basic/.eslintrc.json +42 -0
  260. package/packages/examples/basic/Dockerfile +41 -0
  261. package/packages/examples/basic/api.js +88 -0
  262. package/packages/examples/basic/appenv.js +6 -0
  263. package/packages/examples/basic/docker-compose.yml +10 -0
  264. package/packages/examples/basic/package.json +19 -0
  265. package/packages/examples/basic/public/data/Cluster_SDOH1.sas +182 -0
  266. package/packages/examples/basic/public/data/Cluster_SDOH6.sas +180 -0
  267. package/packages/examples/basic/public/data/LeNet_snzrle.astore +0 -0
  268. package/packages/examples/basic/public/data/NeuralNetwork_High_med.sas +2409 -0
  269. package/packages/examples/basic/public/data/NeuralNetwork_high_med1.sas +2409 -0
  270. package/packages/examples/basic/public/data/ast/GBlocalcopy.sasast +0 -0
  271. package/packages/examples/basic/public/data/ast/LeNet_snzrle.astore +0 -0
  272. package/packages/examples/basic/public/data/ast/gb_IrisGB.sasast +0 -0
  273. package/packages/examples/basic/public/data/ast/paysimsvdd.sasast +0 -0
  274. package/packages/examples/basic/public/data/ast/svmlocalcopy.sasast +0 -0
  275. package/packages/examples/basic/public/data/cars.csv +429 -0
  276. package/packages/examples/basic/public/data/cluster_test2.sas7bdat +0 -0
  277. package/packages/examples/basic/public/data/cmdList.txt +15 -0
  278. package/packages/examples/basic/public/data/gradBoost.sashdat +0 -0
  279. package/packages/examples/basic/public/data/iris.csv +151 -0
  280. package/packages/examples/basic/public/data/model1.sas7bdat +0 -0
  281. package/packages/examples/basic/public/favicon.ico +0 -0
  282. package/packages/examples/basic/public/index.html +29 -0
  283. package/packages/examples/basic/public/index2.html +102 -0
  284. package/packages/examples/basic/public/logon.html +42 -0
  285. package/packages/examples/basic/public/myapp/secondary.html +1 -0
  286. package/packages/examples/basic/public/myapp/test.js +2 -0
  287. package/packages/examples/basic/public/onlogoff.html +53 -0
  288. package/packages/examples/basic/start.sh +15 -0
  289. package/packages/examples/proxytest/.env +23 -0
  290. package/packages/examples/proxytest/.envimpl +11 -0
  291. package/packages/examples/proxytest/.eslintrc.json +42 -0
  292. package/packages/examples/proxytest/Dockerfile +42 -0
  293. package/packages/examples/proxytest/appenv.js +6 -0
  294. package/packages/examples/proxytest/docker-compose.yml +12 -0
  295. package/packages/examples/proxytest/index.js +57 -0
  296. package/packages/examples/proxytest/package.json +18 -0
  297. package/packages/examples/proxytest/public/data/Cluster_SDOH1.sas +182 -0
  298. package/packages/examples/proxytest/public/data/Cluster_SDOH6.sas +180 -0
  299. package/packages/examples/proxytest/public/data/LeNet_snzrle.astore +0 -0
  300. package/packages/examples/proxytest/public/data/NeuralNetwork_High_med.sas +2409 -0
  301. package/packages/examples/proxytest/public/data/NeuralNetwork_high_med1.sas +2409 -0
  302. package/packages/examples/proxytest/public/data/ast/GBlocalcopy.sasast +0 -0
  303. package/packages/examples/proxytest/public/data/ast/LeNet_snzrle.astore +0 -0
  304. package/packages/examples/proxytest/public/data/ast/gb_IrisGB.sasast +0 -0
  305. package/packages/examples/proxytest/public/data/ast/paysimsvdd.sasast +0 -0
  306. package/packages/examples/proxytest/public/data/ast/svmlocalcopy.sasast +0 -0
  307. package/packages/examples/proxytest/public/data/cars.csv +429 -0
  308. package/packages/examples/proxytest/public/data/cluster_test2.sas7bdat +0 -0
  309. package/packages/examples/proxytest/public/data/cmdList.txt +15 -0
  310. package/packages/examples/proxytest/public/data/gradBoost.sashdat +0 -0
  311. package/packages/examples/proxytest/public/data/iris.csv +151 -0
  312. package/packages/examples/proxytest/public/data/model1.sas7bdat +0 -0
  313. package/packages/examples/proxytest/public/favicon.ico +0 -0
  314. package/packages/examples/proxytest/public/index.html +357 -0
  315. package/packages/examples/proxytest/public/index.js +57 -0
  316. package/packages/examples/proxytest/public/indextest.html +316 -0
  317. package/packages/examples/proxytest/public/logon.html +44 -0
  318. package/packages/examples/proxytest/public/main.html +357 -0
  319. package/packages/examples/proxytest/public/myapp/secondary.html +1 -0
  320. package/packages/examples/proxytest/public/myapp/test.js +2 -0
  321. package/packages/examples/proxytest/public/restaf.js +2461 -0
  322. package/packages/examples/proxytest/public/restaf.min.js +11 -0
  323. package/packages/examples/proxytest/public/sas/iris.txt +10 -0
  324. package/packages/examples/proxytest/startup.sh +15 -0
  325. package/public/casread2.html +321 -0
  326. package/public/data/Cluster_SDOH1.sas +182 -0
  327. package/public/data/Cluster_SDOH6.sas +180 -0
  328. package/public/data/LeNet_snzrle.astore +0 -0
  329. package/public/data/NeuralNetwork_High_med.sas +2409 -0
  330. package/public/data/NeuralNetwork_high_med1.sas +2409 -0
  331. package/public/data/ast/GBlocalcopy.sasast +0 -0
  332. package/public/data/ast/LeNet_snzrle.astore +0 -0
  333. package/public/data/ast/gb_IrisGB.sasast +0 -0
  334. package/public/data/ast/paysimsvdd.sasast +0 -0
  335. package/public/data/ast/svmlocalcopy.sasast +0 -0
  336. package/public/data/cars.csv +429 -0
  337. package/public/data/cluster_test2.sas7bdat +0 -0
  338. package/public/data/cmdList.txt +15 -0
  339. package/public/data/gradBoost.sashdat +0 -0
  340. package/public/data/iris.csv +151 -0
  341. package/public/data/model1.sas7bdat +0 -0
  342. package/public/design.html +350 -0
  343. package/public/display.html +354 -0
  344. package/public/favicon.ico +0 -0
  345. package/public/help.html +1 -0
  346. package/public/index.html +354 -0
  347. package/public/index2.html +353 -0
  348. package/public/indexProxy.html +350 -0
  349. package/public/indextest.html +316 -0
  350. package/public/logon.html +44 -0
  351. package/public/myapp/q.html +349 -0
  352. package/public/myapp/secondary.html +1 -0
  353. package/public/myapp/test.js +2 -0
  354. package/public/push1.html +187 -0
  355. package/server.js +444 -0
  356. package/src/config.js +90 -0
  357. package/src/handlers/appCallback.js +40 -0
  358. package/src/handlers/codeAuth.js +31 -0
  359. package/src/handlers/decodeJwt.js +11 -0
  360. package/src/handlers/favicon.js +24 -0
  361. package/src/handlers/getApp.js +52 -0
  362. package/src/handlers/getApp2.js +26 -0
  363. package/src/handlers/getUser.js +20 -0
  364. package/src/handlers/index.js +36 -0
  365. package/src/handlers/keepAlive.js +54 -0
  366. package/src/handlers/keepAlive2.js +13 -0
  367. package/src/handlers/logon.js +24 -0
  368. package/src/handlers/logout.js +43 -0
  369. package/src/handlers/proxyMapUri.js +56 -0
  370. package/src/handlers/proxyOnResponse.js +12 -0
  371. package/src/handlers/reactDev.js +30 -0
  372. package/src/handlers/setCookies.js +76 -0
  373. package/src/iService.js +369 -0
  374. package/src/index.js +243 -0
  375. package/src/parseDocker.js +32 -0
  376. package/src/plugins/SASauth.js +79 -0
  377. package/src/plugins/appCookie.js +49 -0
  378. package/src/plugins/setContext.js +34 -0
  379. package/src/plugins/setDefaultRoutes.js +262 -0
  380. package/src/plugins/setupAuth.js +48 -0
  381. package/src/plugins/setupUserRoutes.js +48 -0
  382. package/src/plugins/token.js +10 -0
  383. package/src/schemes/SASTokenScheme.js +43 -0
  384. package/src/visionIndex.html +24 -0
  385. package/start.sh +15 -0
  386. package/lib/core/handlers/appCallback.js +0 -51
  387. package/lib/core/handlers/codeAuth.js +0 -61
  388. package/lib/core/handlers/favicon.js +0 -45
  389. package/lib/core/handlers/getApp.js +0 -67
  390. package/lib/core/handlers/getApp2.js +0 -48
  391. package/lib/core/handlers/getUser.js +0 -49
  392. package/lib/core/handlers/keepAlive.js +0 -96
  393. package/lib/core/handlers/keepAlive2.js +0 -33
  394. package/lib/core/handlers/logon.js +0 -44
  395. package/lib/core/handlers/logout.js +0 -88
  396. package/lib/core/handlers/proxyOnResponse.js +0 -26
  397. package/lib/core/handlers/reactDev.js +0 -52
  398. package/lib/core/handlers/setCookies.js +0 -116
  399. package/lib/core/index.js +0 -195
  400. package/lib/core/plugins/SASauth.js +0 -100
  401. package/lib/core/plugins/appCookie.js +0 -98
  402. package/lib/core/plugins/setContext.js +0 -55
  403. package/lib/core/plugins/setupAuth.js +0 -86
  404. package/lib/core/plugins/token.js +0 -31
  405. package/lib/core/schemes/SASTokenScheme.js +0 -71
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDIjCCAgqgAwIBAgIIXK9uCGkAZEcwDQYJKoZIhvcNAQELBQAwLzEtMCsGA1UE
3
+ AxMkU0FTIFZpeWEgb3BlbnNzbCBSb290IENBIENlcnRpZmljYXRlMB4XDTIzMDkw
4
+ NTEyMTE1M1oXDTI4MDkwNDEyMjY1M1owLzEtMCsGA1UEAxMkU0FTIFZpeWEgb3Bl
5
+ bnNzbCBSb290IENBIENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
6
+ MIIBCgKCAQEAosmo1/yW04reIhucI7PXSjnRdYioQUWI62f2ohaW6hARgUhT1HUx
7
+ 93LCpSq8zpgRuHAfAtNgeCKIKhM+GIDSqiNxsHAVljblrIKiS0lPfPmV0NFE2FMF
8
+ eUtQldqEjGOeYH4Wf6AR/hDr1X1ar0nbzJU/GoNA5yvV8Quk4aZsM6slnkm9jmwu
9
+ 7AyCyT+Ms6CMFBuWR17+tf/H4Sacyp0GX9kpNKtWZ6eSUn/vzsFG6gyqbxWUwcAk
10
+ bTXX6EyP1STtHiQ4xEKO2DkYDFKt8rFkKouCybH/iFwszMfs40AGzsOldj8CqECe
11
+ R3eem5Lyz7bK9HO9AwrAK4dg6qiQNBThCQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
12
+ AqQwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUlRRx1PVwUxylneMHIE69ttRL
13
+ OFgwDQYJKoZIhvcNAQELBQADggEBACb6bxKMjfnj3rN2teZVl3mV4kVWV9bewIiU
14
+ mFHrXIqvEhO2BsZoMNz27xQ2WmiwVgZiCb7QEYclx0ypTuEMiJAyaJZG5ogMy292
15
+ KhPvEqj+suTEKBIdsNc6IliuC+/Wfd0u45w/2sIGQi9ySo1oNyB6QeBaja0PHb5w
16
+ 1JiXTk0wnYOhaPu+0J4mGvSwOmMcFkJpur40NjBWAjenPxnMGrBCjA/KTCaqEQ+O
17
+ lMiQHt7J7rJrPhAs3uA4hxhDR+CbaWIxPUNrHkbZzakMiUpw8RVdY3U5bYrjc6fV
18
+ +x1hJWiqRW4CDMCwmaD0byL95og9vBL7si78NUsP8MnecGdqWAE=
19
+ -----END CERTIFICATE-----
@@ -0,0 +1,25 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEJzCCAw+gAwIBAgIIa5XRpEFkiJowDQYJKoZIhvcNAQELBQAwLzEtMCsGA1UE
3
+ AxMkU0FTIFZpeWEgb3BlbnNzbCBSb290IENBIENlcnRpZmljYXRlMB4XDTIzMTAx
4
+ NDEwNTE1OVoXDTI1MTAxMzExMDY1OVowHjEcMBoGA1UEAxMTc2FzLWNvbnN1bC1z
5
+ ZXJ2ZXItMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBcqa39TogJ
6
+ n57iGMYQ2dPvKt0ueLNaW70w1qBBb4CWeFclwcAhJQ7EHgvrdSfR7WGfoCe2E9nI
7
+ g2lTabLT1CJnTeTEg9JqKywfzRooF8sSTeW1Sjjz/TXtAxJW/UfoKqUSRRQcjeNC
8
+ LCshWx0YQCew+T7gWwCu6+L39l5EwP20WGV0vtZlNPm8wGJf14MuLd9Pltzps0Sx
9
+ WGk/OWr3yrwBC21+9wdI77aPh9zAgD31tbUAeGMrCTpY3oWuI8vKlo9kDOoiXAjv
10
+ bIVLhzU4HqL/cgwl9dRSTmq00N8qd/jReBjloJl4Vta/7hWxkJmwH4XPYYhFQe+b
11
+ hW9RMMTKNucCAwEAAaOCAVYwggFSMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU
12
+ BggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFCb35V252QMYv87u/lrBgCSJ
13
+ QTKeMB8GA1UdIwQYMBaAFJUUcdT1cFMcpZ3jByBOvbbUSzhYMIHgBgNVHREEgdgw
14
+ gdWCIGFrcy1zdGF0ZWZ1bC0yMTkzODE2NS12bXNzMDAwMDBzgglsb2NhbGhvc3SC
15
+ EXNhcy1jb25zdWwtc2VydmVyghNzYXMtY29uc3VsLXNlcnZlci0wgkVzYXMtY29u
16
+ c3VsLXNlcnZlci0wLnNhcy1jb25zdWwtc2VydmVyLWludGVybmFsLnZpeWEuc3Zj
17
+ LmNsdXN0ZXIubG9jYWyCH3hhYXMtODQ3ODQ4ODQ1MTEuZW5nYWdlLnNhcy5jb22H
18
+ BAoAAlKHBAr0BTOHBH8AAAGHBMCoAAgwDQYJKoZIhvcNAQELBQADggEBAHK0ua95
19
+ 58zfmBIqt50REsUHZ8prLd/UKKwfJpUYC8blK8sHV/t3w5CvjUEHLdA4SFvYRpXB
20
+ Nfhb4Hepe9zg9jANon4coWxNpbKBSLx8CTombylfqEjCtnVsl6dNWC4s6e+sHrZe
21
+ o8Uc687G7g1IkN/Aw7BO/aPoZA5U5rl4uZdmVg/wIbkdaAKjMR3Z86ykamNsCIp2
22
+ aCXsCO8wSurG+upczsnBqYCBtX3F5EhE5BUsEgq8c5op7Gx5CAJ2KN/pL76i2JL2
23
+ h7mHfNqQZoFSypp2d4U3GLLb92gxoQosbQrnX8vCI9m9OlKOJzooMI4uP838nwxf
24
+ GyfP+QhQCMDGc+A=
25
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDQXKmt/U6ICZ+e
3
+ 4hjGENnT7yrdLnizWlu9MNagQW+AlnhXJcHAISUOxB4L63Un0e1hn6AnthPZyINp
4
+ U2my09QiZ03kxIPSaissH80aKBfLEk3ltUo48/017QMSVv1H6CqlEkUUHI3jQiwr
5
+ IVsdGEAnsPk+4FsAruvi9/ZeRMD9tFhldL7WZTT5vMBiX9eDLi3fT5bc6bNEsVhp
6
+ Pzlq98q8AQttfvcHSO+2j4fcwIA99bW1AHhjKwk6WN6FriPLypaPZAzqIlwI72yF
7
+ S4c1OB6i/3IMJfXUUk5qtNDfKnf40XgY5aCZeFbWv+4VsZCZsB+Fz2GIRUHvm4Vv
8
+ UTDEyjbnAgMBAAECggEAANgmI9/tC684lac9Lr8lTkFESHxPlJ3oHrDb1KYhhNNy
9
+ stH+NJKtz58UHTv3K21sxvl/DDfcz01CR6Mgdzznp03AJg4sF7ieIZjtrbMHCRV8
10
+ VVL2meQyE8SUP5t9xvk/KLTw9dznMAD/EkCHWdlCmCaUubKlC8Kps3jA54pRNnX4
11
+ U3n17CGpaawAw6IWpynoqWeZfO6hV35FyAzrJ/+oT2/r1ySf7k+V7n+XHfjz+K42
12
+ Zp0mUGtvZe0nFYvzMnFpUkxvcSXarIzD/+/FMtkJnFh5GDzKRAf0kQSWSqLL31rZ
13
+ 6dope8cYUhMnfAH+y+qYFohMSAMkFvfmHIfJCX5OyQKBgQDt/UtwFSV4A1la3X7F
14
+ lVek1r6xbkmWto4G+w6gGB3IiyhAQ7JT4AjGjQ6+8HUQwq9ntslJl85+3hHNTHV9
15
+ QV/6FBr4V91wW88FB9ruD6jw//Qyv4I74LRp34eAFQTWn7klnE3ZrGQVqPNgC+Aa
16
+ cQ2VChUBjMeZsJWe6zLeQ92bWwKBgQDgIWDVNQysqqk1Hvqu8vFIAh4DWmfwGBSY
17
+ CfOrlLfVnqcWtAX9jVhwaf+SZhldG0CUh4fzB+thzRSn5BWk7Cdcc4hmol77Qs4T
18
+ XJyI2iSQJGi9cagPpBVmA+/f7d3OpWBcRkNQR4v3V1em8fIC+12LdolBP/Ah4APl
19
+ RqmMn5OEZQKBgQDnq7wk5qDr3C6+soF267M+xsEpTdga+6j0iK6rD+7mSviq3nuZ
20
+ BKzmQ2hIXSFIaIyBpMD7f+jHPXwM4tI4VUyNz8aVXEs21liHaCcpuVrXCAJ66Exp
21
+ 54sYyT1JZKyqFSARyb9LF3LyVt5b8BN/CfCT1hWuxZGEPg7YfdKt5VizowKBgQCk
22
+ YZaliKztDpXfcgMlwOSZjYP5rZrBise/4rymQQK7WArwKcSi+8G7YOKiuuMrWEt7
23
+ JBPfeRV3u3PE1xHQzarosYt+yuOioJKHvMrJzEQ4u5teJje+kPdoxMZvlAO0BbKw
24
+ uo+wF2leVN7igFyhNz6ahKuSAZTbI3N3+uVrT7ZfyQKBgE/9OiCsqmcPUvy4dT6o
25
+ sCXHFTPii54vZLvL3/GhfJUPW21+XHuLrwhsi8MbRU5Wk51409noY3W8h41TPPFV
26
+ r2HirPAxW4Om3AhsWo1522pVt/nXxm0OT59ICAENIvYE56EX4UjwVlFxkSEcL8Jz
27
+ FSnXxmP5vCQXGx09r3Rd025y
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,5 @@
1
+ kubectl cp $(kubectl get pod | grep "sas-consul-server-0" | awk -F" " '{print $1}'):security/ca.crt ./ca.crt
2
+
3
+ kubectl cp $(kubectl get pod | grep "sas-consul-server-0" | awk -F" " '{print $1}'):security/tls.crt ./tls.crt
4
+
5
+ kubectl cp $(kubectl get pod | grep "sas-consul-server-0" | awk -F" " '{print $1}'):security/tls.key ./tls.key
@@ -0,0 +1,12 @@
1
+ version: "3.8"
2
+ services:
3
+ viyaapp:
4
+ build: .
5
+ restart: always
6
+ ports:
7
+ - 8080:8080
8
+ environment:
9
+ - VIYA_SERVER=$V1
10
+ - APPNAME=viyaapp
11
+ - DEBUG=
12
+
@@ -0,0 +1,15 @@
1
+ /*
2
+ * Copyright © 2019, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ const rafServer = require('@sassoftware/viya-appserverjs');
6
+ debugger;
7
+ rafServer.icli(null, true, customize);
8
+ function customize (key, _options){
9
+ debugger;
10
+ let info = {
11
+ SWAGGEROPTIONS: {},
12
+ APPENV : null
13
+ };
14
+ return info[key];
15
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "apptest",
3
+ "version": "2.0.1",
4
+ "description": "",
5
+ "main": "app.js",
6
+ "scripts": {
7
+ "start": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js --env=./.env --docker=./Dockerfile",
8
+ "starti": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js --env=./.envimpl --docker=./Dockerfile",
9
+ "proxy": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js --env=./.envproxy --docker=./Dockerfile",
10
+
11
+ "debug": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 node --inspect-brk index.js --env=./.env --docker=./Dockerfile",
12
+ "indocker": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js"
13
+ },
14
+ "keywords": [],
15
+ "author": "",
16
+ "license": "ISC",
17
+ "dependencies": {
18
+ "cross-env": ">=7.0.0"
19
+ }
20
+ }
@@ -0,0 +1,324 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ ~ /* ------------------------------------------------------------------------------------
4
+ ~ * Copyright (c) SAS Institute Inc.
5
+ ~ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ ~ * you may not use this file except in compliance with the License.
7
+ ~ * You may obtain a copy of the License at
8
+ ~ *
9
+ ~ * http://www.apache.org/licenses/LICENSE-2.0
10
+ ~ *
11
+ ~ * Unless required by applicable law or agreed to in writing, software
12
+ ~ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ ~ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ ~ * See the License for the specific language governing permissions and
15
+ ~ * limitations under the License.
16
+ ~ ----------------------------------------------------------------------------------------*/
17
+ ~
18
+ -->
19
+
20
+ <html lang="en">
21
+ <head>
22
+ <meta charset="UTF-8" />
23
+
24
+ <script
25
+ crossorigin
26
+ src="https://unpkg.com/react@16/umd/react.production.min.js"
27
+ ></script>
28
+ <script
29
+ crossorigin
30
+ src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"
31
+ ></script>
32
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"></script>
33
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.min.js"></script>
34
+ <script src="https://unpkg.com/@sassoftware/restaf@5.2.4"></script>
35
+ <script src="https://unpkg.com/@sassoftware/restaflib@5.2.4"></script>
36
+
37
+
38
+ <style>
39
+ .container {
40
+ display: flex;
41
+ flex-direction: column;
42
+ flex-wrap: nowrap;
43
+ min-height: 800px;
44
+ }
45
+ .elabel {
46
+ display: inline-block;
47
+
48
+ clear: left;
49
+ width: 250px;
50
+ text-align: right;
51
+ }
52
+ .einput {
53
+ display: inline-block;
54
+ }
55
+ .div1 {
56
+ border: 1px solid black;
57
+ background: lightskyblue;
58
+ }
59
+ .div2 {
60
+ border: 1px solid black;
61
+ background: lightskyblue;
62
+ height: 200px;
63
+ }
64
+ </style>
65
+
66
+ <script>
67
+ debugger;
68
+ let LOGONPAYLOAD = {
69
+ host: "https://viya.kumar-zv1-azure-nginx-84560a6e.unx.sas.com",
70
+ authType: 'server',
71
+ }
72
+
73
+ let store = restaf.initStore({casProxy: true});
74
+ console.log(store.config);
75
+
76
+ let session = null;
77
+ let servers = null;
78
+ let services = null;
79
+ let files = null;
80
+ let reports = null;
81
+ let compute = null;
82
+
83
+ function setup() {
84
+ debugger;
85
+ document.getElementById('output').innerHTML = '...initializing';
86
+
87
+ initSession()
88
+ .then(r => {
89
+ document.getElementById('output').innerHTML = 'ready';
90
+ //keepAlive();
91
+ })
92
+ .catch(e => {
93
+
94
+ console.log(e);
95
+ });
96
+ }
97
+
98
+ async function initSession() {
99
+ debugger;
100
+ let msg = await store.logon(LOGONPAYLOAD);
101
+ debugger;
102
+ console.log(msg)
103
+ console.log(store.connection());
104
+ console.log(LOGONPAYLOAD);
105
+
106
+ return 'done';
107
+ }
108
+ function runit(type) {
109
+
110
+
111
+ document.getElementById('output').innerHTML = '...running';
112
+ let testcase;
113
+ switch (type) {
114
+ case 'files': {
115
+ testcase = SASfileService;
116
+ break;
117
+ }
118
+ case 'compute': {
119
+ testcase = dsCompute;
120
+ break;
121
+ }
122
+ case 'cas': {
123
+ testcase = runCas;
124
+ break;
125
+ }
126
+ case 'timedout': {
127
+ testcase = timedout;
128
+ break;
129
+ }
130
+ case 'redir': {
131
+ testcase= noaction;
132
+
133
+ break;
134
+ }
135
+ case 'spre': {
136
+ testcase= spre;
137
+
138
+ break;
139
+ }
140
+ default: {
141
+ testcase = SASfileService;
142
+ break;
143
+ }
144
+ }
145
+
146
+ testcase(store)
147
+ .then(r => {
148
+ document.getElementById(
149
+ 'output'
150
+ ).innerHTML = JSON.stringify(r, null, 4);
151
+ })
152
+ .catch(err => {
153
+
154
+ document.getElementById(
155
+ 'output'
156
+ ).innerHTML = JSON.stringify(err, null, 4);
157
+ });
158
+ }
159
+ async function noaction() {
160
+ r = {msg: 'redirects completed'};
161
+ return r;
162
+ }
163
+ async function spre(store) {
164
+ let p = {
165
+ method: 'GET',
166
+ url : 'http://localhost:3000/api/test',
167
+ withCredentials: true
168
+ }
169
+ let r = await store.request(p);
170
+ return r.data;
171
+ }
172
+ async function timedout(store) {
173
+ console.log('timed out at', Date() );
174
+ let params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=0,height=0,left=-1000,top=-1000`;
175
+ window.open(`${LOGONPAYLOAD.host}/SASLogon/timedout`,'Timed Out', params);
176
+ return true;
177
+ }
178
+ async function runCas(store) {
179
+
180
+ let {casManagement} = await store.addServices('casManagement');
181
+ let servers = await store.apiCall(
182
+ casManagement.links('servers')
183
+ );
184
+ let serverName = servers.itemsList(0);
185
+ let session = await store.apiCall(
186
+ servers.itemsCmd(serverName, 'createSession')
187
+ );
188
+ let payload = {
189
+ action: 'builtins.echo',
190
+ data: { code: { x: 1 } }
191
+ };
192
+ console.log(JSON.stringify(session.links("execute"), null, 4));
193
+ let r = await store.runAction(session, payload);
194
+ console.log('echo completed');
195
+ debugger;
196
+ payload = {
197
+ from : 1,
198
+ count : 20,
199
+ format: true,
200
+ table : {caslib: 'Samples', name: 'COSTCHANGE'}
201
+ }
202
+ debugger;
203
+ let result = await restaflib.casFetchData(store, session, payload);
204
+ debugger;
205
+ console.log(result);
206
+
207
+ await store.apiCall(session.links('delete'));
208
+ return r.items();
209
+
210
+ }
211
+
212
+ async function SASfileService(store) {
213
+ debugger;
214
+ try {
215
+ debugger;
216
+ let {files} = await store.addServices('files');
217
+ debugger;
218
+ console.log(JSON.stringify(files.links(), null, 4));
219
+ console.log('items - should be an array of files(empty array is ok)')
220
+ console.log(files.items().toJS());
221
+ let payload = {
222
+ data: { x: 1, y: 'This was saved earlier in the step' },
223
+ headers: { 'content-type': 'application/json' }
224
+ };
225
+ let createCmd = files.links('create');
226
+ let newFile = await store.apiCall(createCmd, payload);
227
+
228
+ let content = await store.apiCall(newFile.links('content'));
229
+ } catch(err) {
230
+ console.log(err);
231
+ debugger;
232
+ }
233
+
234
+ return content.items();
235
+ }
236
+ async function dsCompute(store) {
237
+ let log = null;
238
+ debugger;
239
+ let {compute} = await store.addServices('compute');
240
+ let servers = await store.apiCall(compute.links('servers'));
241
+
242
+ let contexts = await store.apiCall(compute.links('contexts'));
243
+
244
+ // lookup the name of the first context and then use it to get the associated createSession restafLink
245
+ let createSession = contexts.itemsCmd(
246
+ contexts.itemsList(0),
247
+ 'createSession'
248
+ );
249
+ let session = await store.apiCall(createSession);
250
+
251
+ // Now run a simple data step in that session
252
+ let payload = {
253
+ data: {
254
+ code: [`data _null_; do i = 1 to 100; x=1; end; run; `]
255
+ }
256
+ };
257
+
258
+ // Now execute the data step and wait for completion
259
+ let job = await store.apiCall(
260
+ session.links('execute'),
261
+ payload
262
+ );
263
+ let status = await store.jobState(job, null, 5, 2);
264
+
265
+ if (status.data === 'running') {
266
+ throw `ERROR: Job did not complete in allotted time`;
267
+ } else {
268
+ switch (status.data) {
269
+ case 'warning':
270
+ console.log(`Warning: check your log for warnings`);
271
+ break;
272
+ case 'error':
273
+ throw `Please correct errors and rerun program`;
274
+ default:
275
+ log = await store.apiCall(status.job.links('log'));
276
+ break;
277
+ }
278
+ }
279
+ return log === null ? status : log.items();
280
+ }
281
+ </script>
282
+ </head>
283
+ <body onload="setup()">
284
+ <h1 id="head">Hi</h1>
285
+ <div>
286
+ <button onclick="runit('redir')">
287
+ Press to do some redirs
288
+ </button>
289
+ <button onclick="runit('files')">
290
+ Press to make a call to file service
291
+ </button>
292
+ <br />
293
+ <br />
294
+ <button onclick="runit('compute')">
295
+ Press to make a call compute service
296
+ </button>
297
+ <br />
298
+ <br />
299
+ <button onclick="runit('cas')">
300
+ Press to make a call to cas echo
301
+ </button>
302
+ <br />
303
+ <br />
304
+ <button onclick="runit('spre')">
305
+ REST call
306
+ </button>
307
+ <br />
308
+ <br />
309
+ <input id='filename'> </input>
310
+ <button onclick="runit('timedout')">
311
+ Press to test timedout
312
+ </button>
313
+ <br />
314
+ <br />
315
+ <button onclick="logoff()">
316
+ logoff
317
+ </button>
318
+ <br />
319
+ </div>
320
+ <div>
321
+ <pre id="output"></pre>
322
+ </div>
323
+ </body>
324
+ </html>
@@ -0,0 +1,182 @@
1
+ /*--------------------------------------------------
2
+ The options statement below should be placed
3
+ before the data step when submitting this code.
4
+ --------------------------------------------------*/
5
+ /*options VALIDMEMNAME=EXTEND VALIDVARNAME=ANY;*/
6
+ /*------------------------------------------
7
+ Generated SAS Scoring Code
8
+ Date : 02Jul2019:21:19:56
9
+ Locale : en_US
10
+ Model Type : Cluster
11
+ Interval variable: SDOH_PMU(SDOH1 Physically Mentally Unhealthy)
12
+ Interval variable: SDOH_Per_Adults_Bachelors(SDOH2 Education)
13
+ Interval variable: SDOH_Unemployment_Rate(SDOH4 Unemployment Rate)
14
+ Interval variable: SDOH_Median_Household_Income(SDOH3 Median Household Income)
15
+ ------------------------------------------*/
16
+
17
+
18
+ length _WARN_ $4;
19
+ label _WARN_ = 'Warnings';
20
+ label _CLUSTER_ID_ = 'Cluster ID';
21
+ label _DISTANCE_ = 'Distance to Centroid';
22
+
23
+ _i_ = 0;
24
+ _j_ = 0;
25
+ _k_ = 0;
26
+ _l_ = 0;
27
+ _dist_ = 0;
28
+ _minDist_ = 0;
29
+ _found_ = 0;
30
+ _unknown_ = 0;
31
+ _unknownflag_ = 0;
32
+ _intMindist2cntr_ = 0;
33
+ _missingflag4Int_ = 0;
34
+ _numberOfIntVars_ = 4;
35
+ _minDistInt_ = 0;
36
+ label _STANDARDIZED_DISTANCE_ = 'Standardized Distance to Centroid';
37
+
38
+ drop _i_;
39
+ drop _j_;
40
+ drop _k_;
41
+ drop _l_;
42
+ drop _dist_;
43
+ drop _minDist_;
44
+ drop _minDistInt_;
45
+ drop _unknown_;
46
+ drop _unknownflag_;
47
+ drop _found_;
48
+ drop _intMindist2cntr_;
49
+ drop _missingflag4Int_;
50
+ drop _numberOfIntVars_;
51
+ drop _minDistInt_;
52
+
53
+ array _intVals_67{4} _temporary_;
54
+ array _intStdVals_67{4} _temporary_;
55
+ array _intVars_67[4] _temporary_;
56
+ _intVars_67[1] =
57
+ SDOH_PMU;
58
+ _intVars_67[2] =
59
+ SDOH_Per_Adults_Bachelors;
60
+ _intVars_67[3] =
61
+ SDOH_Unemployment_Rate;
62
+ _intVars_67[4] =
63
+ SDOH_Median_Household_Income;
64
+ array _cntrcoordsInt_67{4,4} _temporary_ (
65
+ 5.6752109618776
66
+ 34.574068577069
67
+ 5.5249572649573
68
+ 65162.262238794
69
+ 6.1728412355737
70
+ 28.076500921419
71
+ 8.4815044247788
72
+ 50250.811599193
73
+ 5.5563377592335
74
+ 27.69585347275
75
+ 3.586724137931
76
+ 55456.199169472
77
+ 7.1425816544567
78
+ 23.193113163492
79
+ 5.9483653846154
80
+ 45013.481439879
81
+ );
82
+ array _stdcntrcoordsInt_67 {4,4} _temporary_ (
83
+ -0.545947986801
84
+ 1.2465170251288
85
+ -0.140043320021
86
+ 1.2424484776721
87
+ 0.080847377302
88
+ -0.09555849286
89
+ 1.0754374093924
90
+ -0.456774851619
91
+ -0.695675960102
92
+ -0.17418139437
93
+ -0.936879929639
94
+ 0.1364012391051
95
+ 1.3022939633885
96
+ -1.104224427884
97
+ 0.0340260867236
98
+ -1.053590936451
99
+ );
100
+ array _stdscaleInt_67 {4} _temporary_ (
101
+ 0.7939278147152
102
+ 4.8414322208822
103
+ 2.4324097357342
104
+ 8775.4507500947
105
+ );
106
+ array _stdcenterInt_67 {4} _temporary_ (
107
+ 6.1086542539869
108
+ 28.539140887732
109
+ 5.8656
110
+ 54259.216813453
111
+ );
112
+
113
+ *************** check missing interval value ******************;
114
+ _missingflag4Int_ = 0;
115
+ do _i_ = 1 to _numberOfIntVars_ until(_missingflag4Int_);
116
+ if missing( _intVars_67[_i_] ) then
117
+ _missingflag4Int_ = 1;
118
+ end;
119
+
120
+ if (_missingflag4Int_ = 1) then
121
+ substr(_WARN_, 1, 1) = 'M';
122
+ ********** prepare interval variable values *********;
123
+ do _i_ = 1 to _numberOfIntVars_;
124
+ if missing (_intVars_67[_i_] ) then do;
125
+ _intVals_67[_i_] = .;
126
+ _intStdVals_67[_i_] = .;
127
+ end; else do;
128
+ if missing (_stdscaleInt_67[_i_] ) then do;
129
+ _intStdVals_67[_i_] = ( _intVars_67[_i_] - _stdcenterInt_67[_i_]);
130
+ end; else do;
131
+ _intStdVals_67[_i_] = ( _intVars_67[_i_] - _stdcenterInt_67[_i_])
132
+ / _stdscaleInt_67[_i_];
133
+ end;
134
+ _intVals_67[_i_] = _intVars_67[_i_];
135
+ end;
136
+ end;
137
+ ****************** find the closest cluster ******************;
138
+ if _missingflag4Int_ > 0 then
139
+ do;
140
+ _CLUSTER_ID_ = .;
141
+ _DISTANCE_ = .;
142
+ _minDistInt_ = .;
143
+ _STANDARDIZED_DISTANCE_ = .;
144
+ end;
145
+ else
146
+ do;
147
+ _CLUSTER_ID_ = .;
148
+ _minDist_ = 8.988465674E307;
149
+ do _i_=1 to 4;
150
+ _intMindist2cntr_ = 0;
151
+ do _j_=1 to 4;
152
+ _dist_ = _intStdVals_67{_j_} - _stdcntrcoordsInt_67{_i_,_j_};
153
+ _dist_ = _dist_ ** 2;
154
+ _intMindist2cntr_ = _intMindist2cntr_ + _dist_;
155
+ end;
156
+ _intMindist2cntr_ = _intMindist2cntr_ ** 0.5;
157
+ if( _minDist_ > _intMindist2cntr_) then do;
158
+ _CLUSTER_ID_ = _i_;
159
+ _minDist_ = _intMindist2cntr_;
160
+ end;
161
+ _STANDARDIZED_DISTANCE_ = _minDist_;
162
+ end;
163
+ _DISTANCE_ = 8.988465674E307;
164
+ _i_ = _CLUSTER_ID_;
165
+ _intMindist2cntr_ = 0;
166
+ do _j_=1 to 4;
167
+ _dist_ = _intVals_67{_j_} - _cntrcoordsInt_67{_i_,_j_};
168
+ _dist_ = _dist_ ** 2;
169
+ _intMindist2cntr_ = _intMindist2cntr_ + _dist_;
170
+ end;
171
+ _intMindist2cntr_ = _intMindist2cntr_ ** 0.5;
172
+ _DISTANCE_ = _intMindist2cntr_;
173
+ end;
174
+
175
+ if (MISSING('_CLUSTER_ID_'n))then _CLUSTER_ID_ = -1; /*------------------------------------------*/
176
+ drop '_CLUSTER_ID_'n '_DISTANCE_'n '_WARN_'n '_STANDARDIZED_DISTANCE_'n;
177
+ '_CLUSTER_ID__67'n='_CLUSTER_ID_'n;
178
+ '_DISTANCE__67'n='_DISTANCE_'n;
179
+ '_WARN__67'n='_WARN_'n;
180
+ '_STANDARDIZED_DISTANCE__67'n='_STANDARDIZED_DISTANCE_'n;
181
+ /*------------------------------------------*/
182
+ run;