@credibledata/cred-cli 0.0.103 → 0.0.105

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 (430) hide show
  1. package/README.md +106 -1
  2. package/dist/agent-contract.spec.js +548 -0
  3. package/dist/agent-contract.spec.js.map +1 -0
  4. package/dist/browser.js +72 -0
  5. package/dist/browser.js.map +1 -0
  6. package/dist/browser.spec.js +125 -0
  7. package/dist/browser.spec.js.map +1 -0
  8. package/dist/client/api.js +4137 -1159
  9. package/dist/client/api.js.map +1 -1
  10. package/dist/client-codeassist/api.js +476 -0
  11. package/dist/client-codeassist/api.js.map +1 -0
  12. package/dist/client-codeassist/base.js +69 -0
  13. package/dist/client-codeassist/base.js.map +1 -0
  14. package/dist/client-codeassist/common.js +162 -0
  15. package/dist/client-codeassist/common.js.map +1 -0
  16. package/dist/client-codeassist/configuration.js +44 -0
  17. package/dist/client-codeassist/configuration.js.map +1 -0
  18. package/dist/client-codeassist/index.js +32 -0
  19. package/dist/client-codeassist/index.js.map +1 -0
  20. package/dist/clientconfiguration.js +17 -289
  21. package/dist/clientconfiguration.js.map +1 -1
  22. package/dist/clientconfiguration.spec.js +35 -96
  23. package/dist/clientconfiguration.spec.js.map +1 -1
  24. package/dist/commands/add.js +103 -3
  25. package/dist/commands/add.js.map +1 -1
  26. package/dist/commands/add.spec.js +113 -0
  27. package/dist/commands/add.spec.js.map +1 -0
  28. package/dist/commands/connection/createconnections.js +104 -7
  29. package/dist/commands/connection/createconnections.js.map +1 -1
  30. package/dist/commands/connection/createconnections.spec.js +35 -1
  31. package/dist/commands/connection/createconnections.spec.js.map +1 -1
  32. package/dist/commands/connection/deleteconnection.js +4 -2
  33. package/dist/commands/connection/deleteconnection.js.map +1 -1
  34. package/dist/commands/connection/deleteconnection.spec.js +6 -1
  35. package/dist/commands/connection/deleteconnection.spec.js.map +1 -1
  36. package/dist/commands/connection/listconnections.js +2 -0
  37. package/dist/commands/connection/listconnections.js.map +1 -1
  38. package/dist/commands/connection/updateconnection.js +365 -0
  39. package/dist/commands/connection/updateconnection.js.map +1 -0
  40. package/dist/commands/connection/updateconnection.spec.js +625 -0
  41. package/dist/commands/connection/updateconnection.spec.js.map +1 -0
  42. package/dist/commands/database/createdatabase.js +52 -0
  43. package/dist/commands/database/createdatabase.js.map +1 -0
  44. package/dist/commands/database/database.spec.js +267 -0
  45. package/dist/commands/database/database.spec.js.map +1 -0
  46. package/dist/commands/database/deletedatabase.js +91 -0
  47. package/dist/commands/database/deletedatabase.js.map +1 -0
  48. package/dist/commands/database/getdatabase.js +97 -0
  49. package/dist/commands/database/getdatabase.js.map +1 -0
  50. package/dist/commands/database/listdatabases.js +36 -0
  51. package/dist/commands/database/listdatabases.js.map +1 -0
  52. package/dist/commands/database/shared.js +125 -0
  53. package/dist/commands/database/shared.js.map +1 -0
  54. package/dist/commands/database/shared.spec.js +109 -0
  55. package/dist/commands/database/shared.spec.js.map +1 -0
  56. package/dist/commands/database/updatedatabase.js +39 -0
  57. package/dist/commands/database/updatedatabase.js.map +1 -0
  58. package/dist/commands/environment/createenvironment.js +59 -28
  59. package/dist/commands/environment/createenvironment.js.map +1 -1
  60. package/dist/commands/environment/createenvironment.spec.js +29 -0
  61. package/dist/commands/environment/createenvironment.spec.js.map +1 -1
  62. package/dist/commands/environment/deleteenvironment.js +3 -2
  63. package/dist/commands/environment/deleteenvironment.js.map +1 -1
  64. package/dist/commands/environment/deleteenvironment.spec.js +5 -1
  65. package/dist/commands/environment/deleteenvironment.spec.js.map +1 -1
  66. package/dist/commands/environment/getenvironment.js +1 -0
  67. package/dist/commands/environment/getenvironment.js.map +1 -1
  68. package/dist/commands/environment/listenvironments.js +40 -8
  69. package/dist/commands/environment/listenvironments.js.map +1 -1
  70. package/dist/commands/environment/listenvironments.spec.js +41 -2
  71. package/dist/commands/environment/listenvironments.spec.js.map +1 -1
  72. package/dist/commands/environment/setenvironment.js +145 -6
  73. package/dist/commands/environment/setenvironment.js.map +1 -1
  74. package/dist/commands/environment/setenvironment.spec.js +256 -8
  75. package/dist/commands/environment/setenvironment.spec.js.map +1 -1
  76. package/dist/commands/environment/updateenvironment.js +12 -8
  77. package/dist/commands/environment/updateenvironment.js.map +1 -1
  78. package/dist/commands/environment/updateenvironment.spec.js +36 -2
  79. package/dist/commands/environment/updateenvironment.spec.js.map +1 -1
  80. package/dist/commands/get.js +64 -1
  81. package/dist/commands/get.js.map +1 -1
  82. package/dist/commands/group/addmember.js +3 -1
  83. package/dist/commands/group/addmember.js.map +1 -1
  84. package/dist/commands/group/addmember.spec.js +7 -2
  85. package/dist/commands/group/addmember.spec.js.map +1 -1
  86. package/dist/commands/group/creategroup.js +2 -0
  87. package/dist/commands/group/creategroup.js.map +1 -1
  88. package/dist/commands/group/deletegroup.js +3 -1
  89. package/dist/commands/group/deletegroup.js.map +1 -1
  90. package/dist/commands/group/deletegroup.spec.js +7 -1
  91. package/dist/commands/group/deletegroup.spec.js.map +1 -1
  92. package/dist/commands/group/getgroup.js +2 -0
  93. package/dist/commands/group/getgroup.js.map +1 -1
  94. package/dist/commands/group/listgroups.js +2 -0
  95. package/dist/commands/group/listgroups.js.map +1 -1
  96. package/dist/commands/group/removemember.js +3 -1
  97. package/dist/commands/group/removemember.js.map +1 -1
  98. package/dist/commands/group/removemember.spec.js +7 -2
  99. package/dist/commands/group/removemember.spec.js.map +1 -1
  100. package/dist/commands/groupaccesstoken/deleteToken.js +2 -1
  101. package/dist/commands/groupaccesstoken/deleteToken.js.map +1 -1
  102. package/dist/commands/groupaccesstoken/groupContainer.js +2 -0
  103. package/dist/commands/groupaccesstoken/groupContainer.js.map +1 -1
  104. package/dist/commands/list.js +24 -4
  105. package/dist/commands/list.js.map +1 -1
  106. package/dist/commands/materialization/cancelrun.js +3 -1
  107. package/dist/commands/materialization/cancelrun.js.map +1 -1
  108. package/dist/commands/materialization/getindex.js +2 -0
  109. package/dist/commands/materialization/getindex.js.map +1 -1
  110. package/dist/commands/materialization/getmaterialization.js +2 -0
  111. package/dist/commands/materialization/getmaterialization.js.map +1 -1
  112. package/dist/commands/materialization/getpreaggregate.js +2 -0
  113. package/dist/commands/materialization/getpreaggregate.js.map +1 -1
  114. package/dist/commands/materialization/getrun.js +2 -0
  115. package/dist/commands/materialization/getrun.js.map +1 -1
  116. package/dist/commands/materialization/listindexes.js +2 -0
  117. package/dist/commands/materialization/listindexes.js.map +1 -1
  118. package/dist/commands/materialization/listmaterializations.js +2 -0
  119. package/dist/commands/materialization/listmaterializations.js.map +1 -1
  120. package/dist/commands/materialization/listpreaggregates.js +2 -0
  121. package/dist/commands/materialization/listpreaggregates.js.map +1 -1
  122. package/dist/commands/materialization/listruns.js +3 -1
  123. package/dist/commands/materialization/listruns.js.map +1 -1
  124. package/dist/commands/materialization/rerun.js +3 -1
  125. package/dist/commands/materialization/rerun.js.map +1 -1
  126. package/dist/commands/misc/inquirerHost.js +87 -0
  127. package/dist/commands/misc/inquirerHost.js.map +1 -0
  128. package/dist/commands/misc/inquirerHost.spec.js +91 -0
  129. package/dist/commands/misc/inquirerHost.spec.js.map +1 -0
  130. package/dist/commands/misc/login.js +348 -58
  131. package/dist/commands/misc/login.js.map +1 -1
  132. package/dist/commands/misc/login.spec.js +525 -7
  133. package/dist/commands/misc/login.spec.js.map +1 -1
  134. package/dist/commands/misc/logout.js +26 -3
  135. package/dist/commands/misc/logout.js.map +1 -1
  136. package/dist/commands/misc/logout.spec.js +52 -12
  137. package/dist/commands/misc/logout.spec.js.map +1 -1
  138. package/dist/commands/misc/resolveLoginTarget.spec.js +90 -0
  139. package/dist/commands/misc/resolveLoginTarget.spec.js.map +1 -0
  140. package/dist/commands/misc/scope.spec.js +108 -0
  141. package/dist/commands/misc/scope.spec.js.map +1 -0
  142. package/dist/commands/misc/set-access-token.js +1 -1
  143. package/dist/commands/misc/set-access-token.js.map +1 -1
  144. package/dist/commands/misc/set-access-token.spec.js +13 -2
  145. package/dist/commands/misc/set-access-token.spec.js.map +1 -1
  146. package/dist/commands/misc/setup.js +819 -0
  147. package/dist/commands/misc/setup.js.map +1 -0
  148. package/dist/commands/misc/setup.spec.js +783 -0
  149. package/dist/commands/misc/setup.spec.js.map +1 -0
  150. package/dist/commands/misc/status.js +168 -0
  151. package/dist/commands/misc/status.js.map +1 -0
  152. package/dist/commands/misc/status.spec.js +301 -0
  153. package/dist/commands/misc/status.spec.js.map +1 -0
  154. package/dist/commands/misc/token.js +57 -0
  155. package/dist/commands/misc/token.js.map +1 -0
  156. package/dist/commands/misc/token.spec.js +92 -0
  157. package/dist/commands/misc/token.spec.js.map +1 -0
  158. package/dist/commands/package/deletepackage.js +4 -2
  159. package/dist/commands/package/deletepackage.js.map +1 -1
  160. package/dist/commands/package/deletepackage.spec.js +7 -1
  161. package/dist/commands/package/deletepackage.spec.js.map +1 -1
  162. package/dist/commands/package/getpackage.js +142 -0
  163. package/dist/commands/package/getpackage.js.map +1 -0
  164. package/dist/commands/package/getpackage.spec.js +246 -0
  165. package/dist/commands/package/getpackage.spec.js.map +1 -0
  166. package/dist/commands/package/listpackages.js +2 -0
  167. package/dist/commands/package/listpackages.js.map +1 -1
  168. package/dist/commands/package/publish.archive.spec.js +570 -0
  169. package/dist/commands/package/publish.archive.spec.js.map +1 -0
  170. package/dist/commands/package/publish.js +780 -49
  171. package/dist/commands/package/publish.js.map +1 -1
  172. package/dist/commands/package/publish.spec.js +451 -8
  173. package/dist/commands/package/publish.spec.js.map +1 -1
  174. package/dist/commands/package/updatepackage.js +22 -19
  175. package/dist/commands/package/updatepackage.js.map +1 -1
  176. package/dist/commands/package/updatepackage.spec.js +36 -1
  177. package/dist/commands/package/updatepackage.spec.js.map +1 -1
  178. package/dist/commands/permission/createpermission.js +3 -1
  179. package/dist/commands/permission/createpermission.js.map +1 -1
  180. package/dist/commands/permission/deletepermission.js +6 -3
  181. package/dist/commands/permission/deletepermission.js.map +1 -1
  182. package/dist/commands/permission/getpermission.js +2 -0
  183. package/dist/commands/permission/getpermission.js.map +1 -1
  184. package/dist/commands/permission/listpermissions.js +2 -0
  185. package/dist/commands/permission/listpermissions.js.map +1 -1
  186. package/dist/commands/rm.js +21 -0
  187. package/dist/commands/rm.js.map +1 -1
  188. package/dist/commands/set.js +40 -6
  189. package/dist/commands/set.js.map +1 -1
  190. package/dist/commands/set.spec.js +123 -0
  191. package/dist/commands/set.spec.js.map +1 -0
  192. package/dist/commands/table/addtable.js +155 -0
  193. package/dist/commands/table/addtable.js.map +1 -0
  194. package/dist/commands/table/deletetable.js +45 -0
  195. package/dist/commands/table/deletetable.js.map +1 -0
  196. package/dist/commands/table/gettable.js +32 -0
  197. package/dist/commands/table/gettable.js.map +1 -0
  198. package/dist/commands/table/listtables.js +36 -0
  199. package/dist/commands/table/listtables.js.map +1 -0
  200. package/dist/commands/table/table.spec.js +304 -0
  201. package/dist/commands/table/table.spec.js.map +1 -0
  202. package/dist/commands/table/tablefile.js +195 -0
  203. package/dist/commands/table/tablefile.js.map +1 -0
  204. package/dist/commands/table/tablefile.spec.js +158 -0
  205. package/dist/commands/table/tablefile.spec.js.map +1 -0
  206. package/dist/commands/update.js +21 -0
  207. package/dist/commands/update.js.map +1 -1
  208. package/dist/commands/version/archive-unarchive-version.js +4 -2
  209. package/dist/commands/version/archive-unarchive-version.js.map +1 -1
  210. package/dist/commands/version/archive-unarchive-version.spec.js +6 -1
  211. package/dist/commands/version/archive-unarchive-version.spec.js.map +1 -1
  212. package/dist/commands/version/listversions.js +2 -0
  213. package/dist/commands/version/listversions.js.map +1 -1
  214. package/dist/common/UserGroupId.js +9 -4
  215. package/dist/common/UserGroupId.js.map +1 -1
  216. package/dist/common/UserGroupId.spec.js +5 -0
  217. package/dist/common/UserGroupId.spec.js.map +1 -1
  218. package/dist/constants.js +37 -143
  219. package/dist/constants.js.map +1 -1
  220. package/dist/index.js +487 -90
  221. package/dist/index.js.map +1 -1
  222. package/dist/logger.js +42 -9
  223. package/dist/logger.js.map +1 -1
  224. package/dist/session.js +56 -0
  225. package/dist/session.js.map +1 -0
  226. package/dist/session.spec.js +103 -0
  227. package/dist/session.spec.js.map +1 -0
  228. package/dist/setup-core/briefing.js +176 -0
  229. package/dist/setup-core/briefing.js.map +1 -0
  230. package/dist/setup-core/credstore.js +415 -0
  231. package/dist/setup-core/credstore.js.map +1 -0
  232. package/dist/setup-core/credstore.spec.js +238 -0
  233. package/dist/setup-core/credstore.spec.js.map +1 -0
  234. package/dist/setup-core/environments.js +267 -0
  235. package/dist/setup-core/environments.js.map +1 -0
  236. package/dist/setup-core/flow.e2e.js +165 -0
  237. package/dist/setup-core/flow.e2e.js.map +1 -0
  238. package/dist/setup-core/flow.js +765 -0
  239. package/dist/setup-core/flow.js.map +1 -0
  240. package/dist/setup-core/flow.spec.js +1348 -0
  241. package/dist/setup-core/flow.spec.js.map +1 -0
  242. package/dist/setup-core/folderconfig.js +283 -0
  243. package/dist/setup-core/folderconfig.js.map +1 -0
  244. package/dist/setup-core/git.js +97 -0
  245. package/dist/setup-core/git.js.map +1 -0
  246. package/dist/setup-core/host.js +77 -0
  247. package/dist/setup-core/host.js.map +1 -0
  248. package/dist/setup-core/importconnections.js +470 -0
  249. package/dist/setup-core/importconnections.js.map +1 -0
  250. package/dist/setup-core/importconnections.spec.js +594 -0
  251. package/dist/setup-core/importconnections.spec.js.map +1 -0
  252. package/dist/setup-core/liveness.js +94 -0
  253. package/dist/setup-core/liveness.js.map +1 -0
  254. package/dist/setup-core/liveness.spec.js +59 -0
  255. package/dist/setup-core/liveness.spec.js.map +1 -0
  256. package/dist/setup-core/localpublisherconfig.js +26 -0
  257. package/dist/setup-core/localpublisherconfig.js.map +1 -0
  258. package/dist/setup-core/localpublisherconfig.spec.js +29 -0
  259. package/dist/setup-core/localpublisherconfig.spec.js.map +1 -0
  260. package/dist/setup-core/mcpconfig.js +198 -0
  261. package/dist/setup-core/mcpconfig.js.map +1 -0
  262. package/dist/setup-core/mcpconfig.spec.js +205 -0
  263. package/dist/setup-core/mcpconfig.spec.js.map +1 -0
  264. package/dist/setup-core/packagemanifest.js +55 -0
  265. package/dist/setup-core/packagemanifest.js.map +1 -0
  266. package/dist/setup-core/ports.js +182 -0
  267. package/dist/setup-core/ports.js.map +1 -0
  268. package/dist/setup-core/ports.spec.js +173 -0
  269. package/dist/setup-core/ports.spec.js.map +1 -0
  270. package/dist/setup-core/publisherconfig.js +268 -0
  271. package/dist/setup-core/publisherconfig.js.map +1 -0
  272. package/dist/setup-core/publisherconfig.oracle.js +166 -0
  273. package/dist/setup-core/publisherconfig.oracle.js.map +1 -0
  274. package/dist/setup-core/publisherconfig.spec.js +277 -0
  275. package/dist/setup-core/publisherconfig.spec.js.map +1 -0
  276. package/dist/setup-core/publisherversion.js +26 -0
  277. package/dist/setup-core/publisherversion.js.map +1 -0
  278. package/dist/setup-core/readiness.spec.js +161 -0
  279. package/dist/setup-core/readiness.spec.js.map +1 -0
  280. package/dist/setup-core/readylines.js +169 -0
  281. package/dist/setup-core/readylines.js.map +1 -0
  282. package/dist/setup-core/readylines.spec.js +70 -0
  283. package/dist/setup-core/readylines.spec.js.map +1 -0
  284. package/dist/setup-core/refresh.js +348 -0
  285. package/dist/setup-core/refresh.js.map +1 -0
  286. package/dist/setup-core/refresh.spec.js +501 -0
  287. package/dist/setup-core/refresh.spec.js.map +1 -0
  288. package/dist/setup-core/skills.js +279 -0
  289. package/dist/setup-core/skills.js.map +1 -0
  290. package/dist/setup-core/skills.spec.js +334 -0
  291. package/dist/setup-core/skills.spec.js.map +1 -0
  292. package/dist/setup-core/supervisor.js +879 -0
  293. package/dist/setup-core/supervisor.js.map +1 -0
  294. package/dist/setup-core/supervisor.spec.js +833 -0
  295. package/dist/setup-core/supervisor.spec.js.map +1 -0
  296. package/dist/setup-core/writefile.js +61 -0
  297. package/dist/setup-core/writefile.js.map +1 -0
  298. package/dist/setup-core/writefile.spec.js +68 -0
  299. package/dist/setup-core/writefile.spec.js.map +1 -0
  300. package/dist/utils.js +409 -3
  301. package/dist/utils.js.map +1 -1
  302. package/dist/utils.spec.js +373 -2
  303. package/dist/utils.spec.js.map +1 -1
  304. package/dist/versioncheck-refresh.js +18 -0
  305. package/dist/versioncheck-refresh.js.map +1 -0
  306. package/dist/versioncheck.js +324 -0
  307. package/dist/versioncheck.js.map +1 -0
  308. package/dist/versioncheck.spec.js +587 -0
  309. package/dist/versioncheck.spec.js.map +1 -0
  310. package/node_modules/@credibledata/cli-auth/dist/index.d.ts +86 -0
  311. package/node_modules/@credibledata/cli-auth/dist/index.js +102 -0
  312. package/node_modules/@credibledata/cli-auth/package.json +19 -0
  313. package/package.json +18 -6
  314. package/.github/workflows/build.yml +0 -23
  315. package/.mocharc.json +0 -10
  316. package/.prettierignore +0 -2
  317. package/.prettierrc +0 -4
  318. package/README-DEV.md +0 -40
  319. package/coverage/coverage-summary.json +0 -40
  320. package/coverage/tmp/coverage-2152-1789496974457-0.json +0 -1
  321. package/coverage/tmp/coverage-2153-1789496954404-0.json +0 -1
  322. package/docker/Dockerfile.ci +0 -18
  323. package/docker-compose.yml +0 -18
  324. package/eslint.config.mjs +0 -45
  325. package/generate-client.sh +0 -27
  326. package/mocha.setup.ts +0 -4
  327. package/openapitools.json +0 -10
  328. package/src/client/.openapi-generator/FILES +0 -9
  329. package/src/client/.openapi-generator/VERSION +0 -1
  330. package/src/client/.openapi-generator-ignore +0 -23
  331. package/src/client/api.ts +0 -15999
  332. package/src/client/base.ts +0 -86
  333. package/src/client/common.ts +0 -150
  334. package/src/client/configuration.ts +0 -110
  335. package/src/client/git_push.sh +0 -57
  336. package/src/client/index.ts +0 -18
  337. package/src/clientconfiguration.spec.ts +0 -615
  338. package/src/clientconfiguration.ts +0 -364
  339. package/src/commands/add.ts +0 -191
  340. package/src/commands/connection/createconnections.spec.ts +0 -413
  341. package/src/commands/connection/createconnections.ts +0 -109
  342. package/src/commands/connection/deleteconnection.spec.ts +0 -189
  343. package/src/commands/connection/deleteconnection.ts +0 -57
  344. package/src/commands/connection/listconnections.spec.ts +0 -132
  345. package/src/commands/connection/listconnections.ts +0 -58
  346. package/src/commands/environment/createenvironment.spec.ts +0 -249
  347. package/src/commands/environment/createenvironment.ts +0 -73
  348. package/src/commands/environment/deleteenvironment.spec.ts +0 -152
  349. package/src/commands/environment/deleteenvironment.ts +0 -48
  350. package/src/commands/environment/getenvironment.spec.ts +0 -110
  351. package/src/commands/environment/getenvironment.ts +0 -43
  352. package/src/commands/environment/listenvironments.spec.ts +0 -123
  353. package/src/commands/environment/listenvironments.ts +0 -67
  354. package/src/commands/environment/setenvironment.spec.ts +0 -63
  355. package/src/commands/environment/setenvironment.ts +0 -14
  356. package/src/commands/environment/updateenvironment.spec.ts +0 -386
  357. package/src/commands/environment/updateenvironment.ts +0 -168
  358. package/src/commands/get.ts +0 -153
  359. package/src/commands/group/addmember.spec.ts +0 -257
  360. package/src/commands/group/addmember.ts +0 -85
  361. package/src/commands/group/creategroup.spec.ts +0 -146
  362. package/src/commands/group/creategroup.ts +0 -54
  363. package/src/commands/group/deletegroup.spec.ts +0 -120
  364. package/src/commands/group/deletegroup.ts +0 -45
  365. package/src/commands/group/getgroup.spec.ts +0 -129
  366. package/src/commands/group/getgroup.ts +0 -47
  367. package/src/commands/group/listgroups.spec.ts +0 -137
  368. package/src/commands/group/listgroups.ts +0 -45
  369. package/src/commands/group/removemember.spec.ts +0 -224
  370. package/src/commands/group/removemember.ts +0 -75
  371. package/src/commands/groupaccesstoken/createToken.spec.ts +0 -211
  372. package/src/commands/groupaccesstoken/createToken.ts +0 -72
  373. package/src/commands/groupaccesstoken/deleteToken.spec.ts +0 -147
  374. package/src/commands/groupaccesstoken/deleteToken.ts +0 -29
  375. package/src/commands/groupaccesstoken/groupContainer.ts +0 -83
  376. package/src/commands/groupaccesstoken/listTokens.spec.ts +0 -147
  377. package/src/commands/groupaccesstoken/listTokens.ts +0 -29
  378. package/src/commands/legacy.ts +0 -5
  379. package/src/commands/list.ts +0 -326
  380. package/src/commands/materialization/cancelrun.ts +0 -70
  381. package/src/commands/materialization/getindex.ts +0 -55
  382. package/src/commands/materialization/getmaterialization.ts +0 -57
  383. package/src/commands/materialization/getpreaggregate.ts +0 -58
  384. package/src/commands/materialization/getrun.ts +0 -55
  385. package/src/commands/materialization/listindexes.ts +0 -69
  386. package/src/commands/materialization/listmaterializations.ts +0 -53
  387. package/src/commands/materialization/listpreaggregates.ts +0 -74
  388. package/src/commands/materialization/listruns.ts +0 -77
  389. package/src/commands/materialization/rerun.ts +0 -123
  390. package/src/commands/misc/login.spec.ts +0 -371
  391. package/src/commands/misc/login.ts +0 -343
  392. package/src/commands/misc/logout.spec.ts +0 -32
  393. package/src/commands/misc/logout.ts +0 -9
  394. package/src/commands/misc/loopbackOAuth.ts +0 -127
  395. package/src/commands/misc/set-access-token.spec.ts +0 -95
  396. package/src/commands/misc/set-access-token.ts +0 -32
  397. package/src/commands/package/deletepackage.spec.ts +0 -164
  398. package/src/commands/package/deletepackage.ts +0 -58
  399. package/src/commands/package/listpackages.spec.ts +0 -163
  400. package/src/commands/package/listpackages.ts +0 -74
  401. package/src/commands/package/publish.spec.ts +0 -642
  402. package/src/commands/package/publish.ts +0 -236
  403. package/src/commands/package/updatepackage.spec.ts +0 -319
  404. package/src/commands/package/updatepackage.ts +0 -95
  405. package/src/commands/permission/createpermission.spec.ts +0 -507
  406. package/src/commands/permission/createpermission.ts +0 -181
  407. package/src/commands/permission/deletepermission.ts +0 -117
  408. package/src/commands/permission/getpermission.ts +0 -115
  409. package/src/commands/permission/listpermissions.ts +0 -101
  410. package/src/commands/permission/scope.ts +0 -180
  411. package/src/commands/rm.ts +0 -146
  412. package/src/commands/set.ts +0 -25
  413. package/src/commands/update.ts +0 -107
  414. package/src/commands/version/archive-unarchive-version.spec.ts +0 -456
  415. package/src/commands/version/archive-unarchive-version.ts +0 -108
  416. package/src/commands/version/listversions.spec.ts +0 -138
  417. package/src/commands/version/listversions.ts +0 -45
  418. package/src/common/UserGroupId.spec.ts +0 -115
  419. package/src/common/UserGroupId.ts +0 -137
  420. package/src/constants.spec.ts +0 -111
  421. package/src/constants.ts +0 -228
  422. package/src/index.ts +0 -378
  423. package/src/logger.spec.ts +0 -158
  424. package/src/logger.ts +0 -90
  425. package/src/polyfills/file.polyfill.ts +0 -6
  426. package/src/utils.spec.ts +0 -135
  427. package/src/utils.ts +0 -115
  428. package/src/validator.spec.ts +0 -51
  429. package/src/validator.ts +0 -44
  430. package/tsconfig.json +0 -17
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ /**
3
+ * Reading the Publisher server's boot signals.
4
+ *
5
+ * ## Use the machine-readable line, not the log lines
6
+ *
7
+ * The server prints human log lines per listener:
8
+ *
9
+ * info: Publisher server listening at http://127.0.0.1:4000
10
+ * info: MCP server listening at http://127.0.0.1:4040
11
+ *
12
+ * and, once initialization finishes, one line meant for exactly this purpose:
13
+ *
14
+ * PUBLISHER_READY url=http://127.0.0.1:4000 mcp=http://127.0.0.1:4040 environments=1 packages=1 load_errors=0
15
+ * PUBLISHER_INIT_FAILED error="..." (on stderr)
16
+ *
17
+ * The counts are the point. Both listeners bind and both log lines print even
18
+ * when every configured environment failed to load — a server that is running
19
+ * and serving nothing. Waiting on the log lines alone would have setup announce
20
+ * success over an empty server, which is the single most misleading thing it
21
+ * could do. `load_errors` and `packages` are what distinguish the two, and
22
+ * upstream added them for that reason.
23
+ *
24
+ * One caveat on the readiness line's URLs: they are built from the *requested*
25
+ * port, not the bound one. That is safe for us only because we never ask for an
26
+ * ephemeral port (see `ports.ts`); the log lines carry the truly-bound ports and
27
+ * remain the source for those.
28
+ *
29
+ * Treating another project's stdout as an API is a real coupling, so it lives in
30
+ * this one file with fixture tests taken from a real run. If upstream changes
31
+ * the wording, one file breaks and its test says which line moved.
32
+ */
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.stripAnsi = stripAnsi;
35
+ exports.parseReadyLine = parseReadyLine;
36
+ exports.parseReadinessLine = parseReadinessLine;
37
+ exports.parseInitFailedLine = parseInitFailedLine;
38
+ exports.readinessVerdict = readinessVerdict;
39
+ exports.dialableHost = dialableHost;
40
+ /**
41
+ * Strip ANSI SGR sequences — the server colourises its log level.
42
+ *
43
+ * The escape introducer is not optional in this pattern. Matching only `[32m`
44
+ * leaves the escape byte behind: parsing still works, but the "cleaned" line
45
+ * carries a control character into anything that echoes it.
46
+ */
47
+ function stripAnsi(line) {
48
+ // eslint-disable-next-line no-control-regex
49
+ return line.replace(/\[[0-9;]*m/g, "");
50
+ }
51
+ const READY_PATTERNS = [
52
+ // Bracketed IPv6 literals are possible, so the host group is permissive and
53
+ // the brackets are trimmed afterwards.
54
+ { which: "ui", re: /Publisher server listening at https?:\/\/(\S+):(\d+)/ },
55
+ { which: "mcp", re: /MCP server listening at https?:\/\/(\S+):(\d+)/ },
56
+ ];
57
+ /**
58
+ * Extract a bound listener address from one output line.
59
+ *
60
+ * Use this for the ports actually bound. Use {@link parseReadinessLine} to
61
+ * decide whether the server is usable.
62
+ */
63
+ function parseReadyLine(line) {
64
+ const clean = stripAnsi(line);
65
+ for (const { which, re } of READY_PATTERNS) {
66
+ const match = clean.match(re);
67
+ if (match) {
68
+ return {
69
+ which,
70
+ host: match[1].replace(/^\[|\]$/g, ""),
71
+ port: Number(match[2]),
72
+ };
73
+ }
74
+ }
75
+ return undefined;
76
+ }
77
+ /** Parse the `PUBLISHER_READY` line, or `undefined` for any other line. */
78
+ function parseReadinessLine(line) {
79
+ const clean = stripAnsi(line);
80
+ if (!clean.includes("PUBLISHER_READY")) {
81
+ return undefined;
82
+ }
83
+ // Anchored to a field boundary, so `url=` never matches inside a later
84
+ // `mcp_url=`.
85
+ const field = (name) => { var _a; return (_a = clean.match(new RegExp(`(?:^|\\s)${name}=(\\S+)`))) === null || _a === void 0 ? void 0 : _a[1]; };
86
+ // A count has to parse as a non-negative integer to be one. Anything else is
87
+ // not a count we can reason about, and the failure has to land here rather
88
+ // than downstream: `readinessVerdict` compares with `===` and `>`, every one
89
+ // of which is false for NaN, so a `packages=n/a` from a changed upstream
90
+ // format would fall through all of its guards to `serving` — the exact
91
+ // fail-open this file exists to prevent. Returning undefined instead keeps
92
+ // the verdict unreachable, which the supervisor reports as a boot failure.
93
+ const count = (name) => {
94
+ const raw = field(name);
95
+ if (!raw)
96
+ return undefined;
97
+ const value = Number(raw);
98
+ return Number.isInteger(value) && value >= 0 ? value : undefined;
99
+ };
100
+ const url = field("url");
101
+ const mcpUrl = field("mcp");
102
+ const environments = count("environments");
103
+ const packages = count("packages");
104
+ const loadErrors = count("load_errors");
105
+ if (!url ||
106
+ !mcpUrl ||
107
+ environments === undefined ||
108
+ packages === undefined ||
109
+ loadErrors === undefined) {
110
+ return undefined;
111
+ }
112
+ return { url, mcpUrl, environments, packages, loadErrors };
113
+ }
114
+ /**
115
+ * Parse the `PUBLISHER_INIT_FAILED` line, returning the error it reports.
116
+ *
117
+ * Upstream emits this so a script waiting on `PUBLISHER_READY` fails fast rather
118
+ * than hanging on a broken config — which is exactly what a supervisor watching
119
+ * only for success would do.
120
+ */
121
+ function parseInitFailedLine(line) {
122
+ var _a, _b;
123
+ const clean = stripAnsi(line);
124
+ if (!clean.includes("PUBLISHER_INIT_FAILED")) {
125
+ return undefined;
126
+ }
127
+ const raw = (_b = (_a = clean.match(/error=(.*)$/)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.trim();
128
+ if (!raw)
129
+ return "the server did not say why";
130
+ try {
131
+ // The value is JSON-encoded, so it survives quotes and newlines.
132
+ return String(JSON.parse(raw));
133
+ }
134
+ catch (_c) {
135
+ return raw;
136
+ }
137
+ }
138
+ function readinessVerdict(readiness) {
139
+ if (readiness.environments === 0) {
140
+ return {
141
+ kind: "fatal",
142
+ reason: `the server started but no environment loaded${readiness.loadErrors > 0 ? ` (${readiness.loadErrors} failed)` : ""}, so it has no connections and nothing to query`,
143
+ };
144
+ }
145
+ if (readiness.loadErrors > 0 || readiness.packages === 0) {
146
+ return {
147
+ kind: "degraded",
148
+ reason: readiness.loadErrors > 0
149
+ ? `the environment loaded, but ${readiness.loadErrors} package${readiness.loadErrors === 1 ? "" : "s"} failed to compile — the errors are above`
150
+ : "the environment loaded, but no package is being served yet",
151
+ };
152
+ }
153
+ return { kind: "serving" };
154
+ }
155
+ /**
156
+ * The address to dial, given what the server bound.
157
+ *
158
+ * A wildcard bind (`0.0.0.0` / `::`) is not dialable, and the server prints the
159
+ * bind address deliberately — it is how a mistyped `--hostt`, which silently
160
+ * falls back to `0.0.0.0`, gets noticed. So we map the wildcard to loopback for
161
+ * the dialable form while leaving the printed line alone.
162
+ */
163
+ function dialableHost(boundHost) {
164
+ if (boundHost === "0.0.0.0" || boundHost === "::" || boundHost === "") {
165
+ return "127.0.0.1";
166
+ }
167
+ return boundHost;
168
+ }
169
+ //# sourceMappingURL=readylines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readylines.js","sourceRoot":"","sources":["../../src/setup-core/readylines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const readylines_1 = require("./readylines");
5
+ /**
6
+ * Fixtures captured from a real run of `@malloy-publisher/server@0.0.248` (the
7
+ * version pinned when they were captured; the pin in
8
+ * infrastructure/malloy-versions.json has moved on since), launched with
9
+ * `--host 127.0.0.1 --port 0 --mcp_port 0`. Copied verbatim, colour codes
10
+ * included, because the colour codes are exactly what a naive parser trips on.
11
+ */
12
+ const REAL_UI_LINE = "\u001b[32minfo\u001b[39m: Publisher server listening at http://127.0.0.1:55571";
13
+ const REAL_MCP_LINE = "\u001b[32minfo\u001b[39m: MCP server listening at http://127.0.0.1:55572";
14
+ /** Also from that run: the server refusing to save an ephemeral port. */
15
+ const REAL_SKIP_LINE = "\u001b[32minfo\u001b[39m: Did not write .mcp.json: this server asked for MCP port 0 and got 55572, so the port changes from run to run and a saved config would be wrong next boot.";
16
+ describe("readylines", () => {
17
+ describe("parseReadyLine", () => {
18
+ it("reads the UI port out of a real, colourised ready line", () => {
19
+ (0, chai_1.expect)((0, readylines_1.parseReadyLine)(REAL_UI_LINE)).to.eql({
20
+ which: "ui",
21
+ host: "127.0.0.1",
22
+ port: 55571,
23
+ });
24
+ });
25
+ it("reads the MCP port out of a real, colourised ready line", () => {
26
+ (0, chai_1.expect)((0, readylines_1.parseReadyLine)(REAL_MCP_LINE)).to.eql({
27
+ which: "mcp",
28
+ host: "127.0.0.1",
29
+ port: 55572,
30
+ });
31
+ });
32
+ it("does not mistake the mcp.json skip notice for a ready line", () => {
33
+ // That line mentions an MCP port too. Matching it would have the
34
+ // supervisor announce readiness against a port nothing is serving.
35
+ (0, chai_1.expect)((0, readylines_1.parseReadyLine)(REAL_SKIP_LINE)).to.equal(undefined);
36
+ });
37
+ it("ignores unrelated output", () => {
38
+ (0, chai_1.expect)((0, readylines_1.parseReadyLine)("info: loading package storefront")).to.equal(undefined);
39
+ (0, chai_1.expect)((0, readylines_1.parseReadyLine)("")).to.equal(undefined);
40
+ });
41
+ it("handles a bracketed IPv6 bind address", () => {
42
+ (0, chai_1.expect)((0, readylines_1.parseReadyLine)("info: MCP server listening at http://[::1]:4040")).to.eql({ which: "mcp", host: "::1", port: 4040 });
43
+ });
44
+ it("reads the default ports when no --port was passed", () => {
45
+ (0, chai_1.expect)((0, readylines_1.parseReadyLine)("info: Publisher server listening at http://0.0.0.0:4000")).to.eql({ which: "ui", host: "0.0.0.0", port: 4000 });
46
+ });
47
+ });
48
+ describe("stripAnsi", () => {
49
+ it("leaves a plain line untouched", () => {
50
+ (0, chai_1.expect)((0, readylines_1.stripAnsi)("info: hello")).to.equal("info: hello");
51
+ });
52
+ it("removes the level colouring", () => {
53
+ (0, chai_1.expect)((0, readylines_1.stripAnsi)(REAL_UI_LINE)).to.equal("info: Publisher server listening at http://127.0.0.1:55571");
54
+ });
55
+ });
56
+ describe("dialableHost", () => {
57
+ it("maps a wildcard bind to loopback", () => {
58
+ // The server prints the bind address on purpose, so a mistyped
59
+ // `--hostt` that silently binds 0.0.0.0 is visible. We must not repeat
60
+ // the wildcard in a URL we hand to a browser or an agent.
61
+ (0, chai_1.expect)((0, readylines_1.dialableHost)("0.0.0.0")).to.equal("127.0.0.1");
62
+ (0, chai_1.expect)((0, readylines_1.dialableHost)("::")).to.equal("127.0.0.1");
63
+ });
64
+ it("leaves a real address alone", () => {
65
+ (0, chai_1.expect)((0, readylines_1.dialableHost)("127.0.0.1")).to.equal("127.0.0.1");
66
+ (0, chai_1.expect)((0, readylines_1.dialableHost)("::1")).to.equal("::1");
67
+ });
68
+ });
69
+ });
70
+ //# sourceMappingURL=readylines.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readylines.spec.js","sourceRoot":"","sources":["../../src/setup-core/readylines.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.REFRESH_LOCK_STALE_MS = exports.REFRESH_SKEW_SECONDS = void 0;
16
+ exports.ensureFreshTokens = ensureFreshTokens;
17
+ const crypto_1 = __importDefault(require("crypto"));
18
+ const fs_1 = __importDefault(require("fs"));
19
+ const path_1 = __importDefault(require("path"));
20
+ const environments_1 = require("./environments");
21
+ /**
22
+ * Refresh the stored Auth0 tokens before they expire.
23
+ *
24
+ * Ported from the VS Code extension's `user.ts::refreshAccessTokensIfExpired`,
25
+ * which until now was the only implementation — the CLI persisted a refresh
26
+ * token and never exchanged it, so `getRefreshToken()` had no non-test callers
27
+ * and every session died at the access token's `exp`.
28
+ *
29
+ * One deliberate behavioural change from the extension: refresh happens BEFORE
30
+ * expiry, not after. The extension only acts once a token has already expired,
31
+ * which turns the first request after the deadline into a failure the user sees.
32
+ * A local publisher session holds a token for hours, so proactive refresh is
33
+ * required rather than nicer — and once it exists there is no reason for
34
+ * anything else to wait for a 401.
35
+ */
36
+ /**
37
+ * How long before `exp` to refresh. Two minutes covers a slow request that
38
+ * started while the token was still valid, plus modest clock skew between this
39
+ * machine and Auth0.
40
+ */
41
+ exports.REFRESH_SKEW_SECONDS = 120;
42
+ /**
43
+ * How long to wait for the token endpoint before giving up and continuing on the
44
+ * token we already hold. Comfortably longer than a healthy round trip, short
45
+ * enough that a command still prints something promptly on a wedged network.
46
+ */
47
+ const REFRESH_TIMEOUT_MS = 10000;
48
+ /**
49
+ * A refresh lock older than this belongs to a process that died holding it.
50
+ * A live holder keeps it for one token request, which gives up after
51
+ * {@link REFRESH_TIMEOUT_MS}, so twice that leaves room for the file read and
52
+ * write on either side.
53
+ */
54
+ exports.REFRESH_LOCK_STALE_MS = 2 * REFRESH_TIMEOUT_MS;
55
+ /**
56
+ * How long to wait for another process's refresh before giving up. Longer than
57
+ * {@link REFRESH_LOCK_STALE_MS}, so a lock left by a crashed process is always
58
+ * broken before the wait runs out.
59
+ */
60
+ const REFRESH_LOCK_WAIT_MS = exports.REFRESH_LOCK_STALE_MS + 5000;
61
+ const REFRESH_LOCK_POLL_MS = 50;
62
+ function isOfflineError(error) {
63
+ var _a, _b;
64
+ const code = (_a = error === null || error === void 0 ? void 0 : error.code) !== null && _a !== void 0 ? _a : (_b = error === null || error === void 0 ? void 0 : error.cause) === null || _b === void 0 ? void 0 : _b.code;
65
+ return (code === "ENOTFOUND" ||
66
+ code === "EAI_AGAIN" ||
67
+ code === "ECONNREFUSED" ||
68
+ code === "ETIMEDOUT");
69
+ }
70
+ /**
71
+ * Take the refresh lock: a file beside `~/.cred`, created only if it does not
72
+ * exist, so exactly one process at a time gets past this.
73
+ *
74
+ * Returns a release function, or `undefined` if another process kept the lock
75
+ * for longer than {@link REFRESH_LOCK_WAIT_MS}. A lock older than
76
+ * {@link REFRESH_LOCK_STALE_MS} is removed and retaken, so a process that
77
+ * crashed mid-refresh cannot block every later one.
78
+ *
79
+ * An error other than "already exists" (a read-only home directory, say), on
80
+ * the create or on breaking a stale lock, skips the lock rather than failing
81
+ * the refresh. The lock narrows the race below; it
82
+ * is not a precondition for renewing a token.
83
+ */
84
+ function acquireRefreshLock(lockPath) {
85
+ return __awaiter(this, void 0, void 0, function* () {
86
+ const owner = crypto_1.default.randomBytes(16).toString("hex");
87
+ const release = () => {
88
+ // Remove the lock only while it is still ours. If it was broken as stale
89
+ // and retaken, the file now belongs to another process.
90
+ try {
91
+ if (fs_1.default.readFileSync(lockPath, "utf-8") === owner) {
92
+ fs_1.default.unlinkSync(lockPath);
93
+ }
94
+ }
95
+ catch (_a) {
96
+ // Already gone.
97
+ }
98
+ };
99
+ const deadline = Date.now() + REFRESH_LOCK_WAIT_MS;
100
+ for (;;) {
101
+ try {
102
+ fs_1.default.writeFileSync(lockPath, owner, { flag: "wx", mode: 0o600 });
103
+ return release;
104
+ }
105
+ catch (error) {
106
+ if ((error === null || error === void 0 ? void 0 : error.code) !== "EEXIST") {
107
+ return () => { };
108
+ }
109
+ }
110
+ try {
111
+ const age = Date.now() - fs_1.default.statSync(lockPath).mtimeMs;
112
+ if (age > exports.REFRESH_LOCK_STALE_MS) {
113
+ // Break it by renaming, not unlinking: when two waiters see the
114
+ // same stale lock, only one rename succeeds. The other gets ENOENT
115
+ // and retries, so it cannot delete the lock the winner just took.
116
+ const broken = `${lockPath}.stale-${owner}`;
117
+ fs_1.default.renameSync(lockPath, broken);
118
+ fs_1.default.unlinkSync(broken);
119
+ continue;
120
+ }
121
+ }
122
+ catch (error) {
123
+ // ENOENT: the lock was released, or another waiter broke it, between
124
+ // our create and here. Try again at once. Anything else (a read-only
125
+ // or sticky home, a Windows scanner holding the file) will not clear
126
+ // on retry, and retrying at once would spin without ever yielding.
127
+ // Skip the lock instead, as for a failed create above.
128
+ if ((error === null || error === void 0 ? void 0 : error.code) === "ENOENT") {
129
+ continue;
130
+ }
131
+ return () => { };
132
+ }
133
+ if (Date.now() >= deadline) {
134
+ return undefined;
135
+ }
136
+ yield new Promise((resolve) => setTimeout(resolve, REFRESH_LOCK_POLL_MS));
137
+ }
138
+ });
139
+ }
140
+ /**
141
+ * Ensure the stored API access token is valid for at least
142
+ * {@link REFRESH_SKEW_SECONDS} more seconds, exchanging the refresh token if not.
143
+ *
144
+ * Never throws: every failure mode is a returned outcome, because the callers
145
+ * are command entry points that need to decide between "stop and tell the user
146
+ * to log in" and "warn and continue".
147
+ */
148
+ function ensureFreshTokens(store) {
149
+ return __awaiter(this, void 0, void 0, function* () {
150
+ // One deployment for the whole exchange. The POST below can take up to
151
+ // REFRESH_TIMEOUT_MS, and an unpinned store resolves `activeEnvironment`
152
+ // again on every read and write — so an `ms2ad set-env` in another terminal
153
+ // during the request would write this deployment's new tokens into (or
154
+ // clear) another deployment's slot.
155
+ const config = store.pinnedToCurrentEnvironment();
156
+ if (config.isServiceAccountToken()) {
157
+ return { status: "service-account" };
158
+ }
159
+ if (hasTimeLeft(config)) {
160
+ return { status: "fresh" };
161
+ }
162
+ // Several `cred` processes share one `~/.cred` entry per deployment, and
163
+ // with refresh-token rotation a refresh token can be redeemed once. Without
164
+ // the lock, two processes whose tokens near expiry together both POST the
165
+ // same refresh token. The loser gets `invalid_grant`, possibly before the
166
+ // winner has written its new pair, and would then clear the tokens over a
167
+ // renewal that succeeded.
168
+ // So the read, the POST and the write happen under one lock.
169
+ const release = yield acquireRefreshLock(`${config.getConfigPath()}.lock`);
170
+ if (!release) {
171
+ return {
172
+ status: "offline",
173
+ reason: `Another cred process has been renewing your session for over ${Math.round(REFRESH_LOCK_WAIT_MS / 1000)}s.`,
174
+ retry: "Run the command again in a moment.",
175
+ };
176
+ }
177
+ try {
178
+ return yield refreshHoldingLock(config);
179
+ }
180
+ finally {
181
+ release();
182
+ }
183
+ });
184
+ }
185
+ function hasTimeLeft(config) {
186
+ const remaining = config.secondsUntilExpiry();
187
+ return remaining !== undefined && remaining > exports.REFRESH_SKEW_SECONDS;
188
+ }
189
+ function refreshHoldingLock(config) {
190
+ return __awaiter(this, void 0, void 0, function* () {
191
+ // Read again now that the lock is ours: whoever held it may have just
192
+ // renewed the token, and then there is nothing to send. Every read goes to
193
+ // the file, so this sees their write.
194
+ if (hasTimeLeft(config)) {
195
+ return { status: "fresh" };
196
+ }
197
+ const remaining = config.secondsUntilExpiry();
198
+ const refreshToken = config.getRefreshToken();
199
+ if (!refreshToken) {
200
+ // No refresh token means nothing to renew with, and no answer from Auth0
201
+ // about whether the session is dead — so nothing here is proof enough to
202
+ // clear the store. Destroying it would also take the organization and
203
+ // environment with it, which the `cred login` that fixes this reuses.
204
+ if (config.getApiAccessToken() === undefined) {
205
+ return {
206
+ status: "logged-out",
207
+ reason: "You are not logged in. Run `cred login`.",
208
+ };
209
+ }
210
+ if (remaining !== undefined && remaining > 0) {
211
+ return {
212
+ status: "not-renewable",
213
+ reason: `Your session expires in ${remaining}s and has no refresh token to renew it. Run \`cred login\` to start a new one.`,
214
+ };
215
+ }
216
+ return {
217
+ status: "logged-out",
218
+ reason: "Your session expired and there is no refresh token. Run `cred login`.",
219
+ };
220
+ }
221
+ const environment = config.getEnvironment();
222
+ const { domain, clientId } = environments_1.auth0ConfigsByEnv[environment];
223
+ // `fetch`, not the `axios` every other HTTP call in `cli/src` uses — and
224
+ // deliberately, so the choice is not read as a slip. `setup-core` is a
225
+ // library to be lifted into the VS Code extension by `git mv`, and its only
226
+ // dependencies should be ones both hosts already have. `fetch` is in the
227
+ // Node and VS Code runtimes; axios would make the extension inherit a
228
+ // dependency for two requests. The cost is that `printOutError` /
229
+ // `isAxiosError` do not apply here, which is why `isOfflineError` above
230
+ // classifies by `code` instead.
231
+ let response;
232
+ try {
233
+ response = yield fetch(`${domain}/oauth/token`, {
234
+ method: "POST",
235
+ headers: { "Content-Type": "application/json" },
236
+ body: JSON.stringify({
237
+ grant_type: "refresh_token",
238
+ client_id: clientId,
239
+ refresh_token: refreshToken,
240
+ }),
241
+ // A refresh with no deadline can hang for as long as the OS lets the
242
+ // socket live. Every caller is a command entry point that has to decide
243
+ // something, and "continue on the token we have" is a good answer after
244
+ // 10s — whereas a silent multi-minute stall before any output is not.
245
+ signal: AbortSignal.timeout(REFRESH_TIMEOUT_MS),
246
+ });
247
+ }
248
+ catch (error) {
249
+ if (isOfflineError(error)) {
250
+ return {
251
+ status: "offline",
252
+ reason: `Could not reach ${domain} to refresh your session.`,
253
+ };
254
+ }
255
+ return {
256
+ status: "offline",
257
+ reason: `Refreshing your session failed: ${error instanceof Error ? error.message : String(error)}.`,
258
+ };
259
+ }
260
+ let payload;
261
+ try {
262
+ payload = yield response.json();
263
+ }
264
+ catch (_a) {
265
+ return {
266
+ status: "offline",
267
+ reason: `${domain} returned an unreadable refresh response (HTTP ${response.status}).`,
268
+ };
269
+ }
270
+ // `invalid_grant` means the token WE sent is dead — revoked, rotated, or
271
+ // expired. That is usually terminal, so clear the tokens rather than leave
272
+ // credentials that will fail every subsequent call. But "rotated" has a
273
+ // second cause: another process redeemed the same refresh token first and
274
+ // wrote its replacement.
275
+ //
276
+ // The lock above keeps other `cred` processes out, but not the VS Code
277
+ // extension, which shares `~/.cred` and refreshes without it. So check the
278
+ // file before clearing it: a refresh token there that is no longer the one
279
+ // we sent means someone else rotated it, and the store already holds a fresh
280
+ // pair.
281
+ //
282
+ // An EMPTY on-disk token is not a rotation: the VS Code extension's
283
+ // `clearState()` writes `''` on sign-out and on most refresh errors. Counting
284
+ // that as a rotation would report `fresh` and send the stale access token.
285
+ if (payload.error === "invalid_grant" || payload.error === "invalid_token") {
286
+ const onDisk = config.getRefreshToken();
287
+ if (onDisk && onDisk !== refreshToken) {
288
+ return { status: "fresh" };
289
+ }
290
+ try {
291
+ // Only the tokens: the organization and environment stay, so the
292
+ // `cred login` this asks for signs back in to the same place.
293
+ config.clearTokens();
294
+ }
295
+ catch (_b) {
296
+ // An unwritable `~/.cred` keeps the dead tokens on disk. The session
297
+ // is over either way, and this function must not throw.
298
+ }
299
+ return {
300
+ status: "logged-out",
301
+ reason: `Your session is no longer valid (${payload.error}). Run \`cred login\`.`,
302
+ };
303
+ }
304
+ if (payload.error) {
305
+ return {
306
+ status: "offline",
307
+ reason: `Auth0 refused the refresh (${payload.error}${payload.error_description ? `: ${payload.error_description}` : ""}).`,
308
+ };
309
+ }
310
+ // A response carrying neither an error code nor a token tells us nothing
311
+ // about the refresh token: an HTTP error page from a proxy in front of Auth0
312
+ // parses as JSON and lands exactly here. Destroying credentials needs proof
313
+ // they are dead, and the only proof is the explicit `invalid_grant` /
314
+ // `invalid_token` above. So keep the token and report the HTTP status —
315
+ // whoever debugs this needs to know a 502 is not a logout.
316
+ if (!payload.access_token) {
317
+ return {
318
+ status: "offline",
319
+ reason: `${domain} returned no access token and no error on refresh (HTTP ${response.status}).`,
320
+ };
321
+ }
322
+ try {
323
+ config.setTokenPair({
324
+ accessToken: payload.access_token,
325
+ idToken: payload.id_token,
326
+ // Auth0 rotates refresh tokens when rotation is enabled; keep the new
327
+ // one when offered, otherwise the stored one stays valid.
328
+ refreshToken: payload.refresh_token,
329
+ });
330
+ }
331
+ catch (error) {
332
+ // A read-only home directory (or `~/.cred` itself): Auth0 renewed the
333
+ // session, but nothing can be saved. Thrown, this escaped a function
334
+ // whose callers rely on it returning, and printed a bare EACCES. As an
335
+ // `offline` outcome the command carries on while the old token is valid,
336
+ // then stops with a message that names the fix.
337
+ const configPath = config.getConfigPath();
338
+ const code = error === null || error === void 0 ? void 0 : error.code;
339
+ return {
340
+ status: "offline",
341
+ reason: `Renewed your session, but could not save it to ${configPath}${code ? ` (${code})` : ""}.`,
342
+ retry: `Make ${path_1.default.dirname(configPath)} writable, then run the command again.`,
343
+ };
344
+ }
345
+ return { status: "fresh" };
346
+ });
347
+ }
348
+ //# sourceMappingURL=refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/setup-core/refresh.ts"],"names":[],"mappings":"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"}