@loxtep/sdk 0.1.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 (460) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +274 -0
  3. package/dist/auth/index.d.ts +6 -0
  4. package/dist/auth/index.d.ts.map +1 -0
  5. package/dist/auth/index.js +4 -0
  6. package/dist/auth/index.js.map +1 -0
  7. package/dist/auth/jwt.d.ts +10 -0
  8. package/dist/auth/jwt.d.ts.map +1 -0
  9. package/dist/auth/jwt.js +24 -0
  10. package/dist/auth/jwt.js.map +1 -0
  11. package/dist/auth/login.d.ts +49 -0
  12. package/dist/auth/login.d.ts.map +1 -0
  13. package/dist/auth/login.js +131 -0
  14. package/dist/auth/login.js.map +1 -0
  15. package/dist/auth/token-manager.d.ts +30 -0
  16. package/dist/auth/token-manager.d.ts.map +1 -0
  17. package/dist/auth/token-manager.js +61 -0
  18. package/dist/auth/token-manager.js.map +1 -0
  19. package/dist/checkpoint/index.d.ts +6 -0
  20. package/dist/checkpoint/index.d.ts.map +1 -0
  21. package/dist/checkpoint/index.js +5 -0
  22. package/dist/checkpoint/index.js.map +1 -0
  23. package/dist/checkpoint/memory-store.d.ts +6 -0
  24. package/dist/checkpoint/memory-store.d.ts.map +1 -0
  25. package/dist/checkpoint/memory-store.js +16 -0
  26. package/dist/checkpoint/memory-store.js.map +1 -0
  27. package/dist/checkpoint/types.d.ts +14 -0
  28. package/dist/checkpoint/types.d.ts.map +1 -0
  29. package/dist/checkpoint/types.js +5 -0
  30. package/dist/checkpoint/types.js.map +1 -0
  31. package/dist/cli/auth-resolve.d.ts +19 -0
  32. package/dist/cli/auth-resolve.d.ts.map +1 -0
  33. package/dist/cli/auth-resolve.js +25 -0
  34. package/dist/cli/auth-resolve.js.map +1 -0
  35. package/dist/cli/commands/bus-cmd.d.ts +6 -0
  36. package/dist/cli/commands/bus-cmd.d.ts.map +1 -0
  37. package/dist/cli/commands/bus-cmd.js +19 -0
  38. package/dist/cli/commands/bus-cmd.js.map +1 -0
  39. package/dist/cli/commands/config-cmd.d.ts +105 -0
  40. package/dist/cli/commands/config-cmd.d.ts.map +1 -0
  41. package/dist/cli/commands/config-cmd.js +334 -0
  42. package/dist/cli/commands/config-cmd.js.map +1 -0
  43. package/dist/cli/commands/connections-cmd.d.ts +19 -0
  44. package/dist/cli/commands/connections-cmd.d.ts.map +1 -0
  45. package/dist/cli/commands/connections-cmd.js +39 -0
  46. package/dist/cli/commands/connections-cmd.js.map +1 -0
  47. package/dist/cli/commands/data-assets-cmd.d.ts +12 -0
  48. package/dist/cli/commands/data-assets-cmd.d.ts.map +1 -0
  49. package/dist/cli/commands/data-assets-cmd.js +75 -0
  50. package/dist/cli/commands/data-assets-cmd.js.map +1 -0
  51. package/dist/cli/commands/data-contracts-cmd.d.ts +12 -0
  52. package/dist/cli/commands/data-contracts-cmd.d.ts.map +1 -0
  53. package/dist/cli/commands/data-contracts-cmd.js +28 -0
  54. package/dist/cli/commands/data-contracts-cmd.js.map +1 -0
  55. package/dist/cli/commands/data-products-cmd.d.ts +15 -0
  56. package/dist/cli/commands/data-products-cmd.d.ts.map +1 -0
  57. package/dist/cli/commands/data-products-cmd.js +30 -0
  58. package/dist/cli/commands/data-products-cmd.js.map +1 -0
  59. package/dist/cli/commands/domains-cmd.d.ts +12 -0
  60. package/dist/cli/commands/domains-cmd.d.ts.map +1 -0
  61. package/dist/cli/commands/domains-cmd.js +28 -0
  62. package/dist/cli/commands/domains-cmd.js.map +1 -0
  63. package/dist/cli/commands/flows-cmd.d.ts +19 -0
  64. package/dist/cli/commands/flows-cmd.d.ts.map +1 -0
  65. package/dist/cli/commands/flows-cmd.js +37 -0
  66. package/dist/cli/commands/flows-cmd.js.map +1 -0
  67. package/dist/cli/commands/login.d.ts +28 -0
  68. package/dist/cli/commands/login.d.ts.map +1 -0
  69. package/dist/cli/commands/login.js +110 -0
  70. package/dist/cli/commands/login.js.map +1 -0
  71. package/dist/cli/commands/logout.d.ts +5 -0
  72. package/dist/cli/commands/logout.d.ts.map +1 -0
  73. package/dist/cli/commands/logout.js +9 -0
  74. package/dist/cli/commands/logout.js.map +1 -0
  75. package/dist/cli/commands/metrics-cmd.d.ts +15 -0
  76. package/dist/cli/commands/metrics-cmd.d.ts.map +1 -0
  77. package/dist/cli/commands/metrics-cmd.js +21 -0
  78. package/dist/cli/commands/metrics-cmd.js.map +1 -0
  79. package/dist/cli/commands/observe-cmd.d.ts +10 -0
  80. package/dist/cli/commands/observe-cmd.d.ts.map +1 -0
  81. package/dist/cli/commands/observe-cmd.js +10 -0
  82. package/dist/cli/commands/observe-cmd.js.map +1 -0
  83. package/dist/cli/commands/pipelines-cmd.d.ts +17 -0
  84. package/dist/cli/commands/pipelines-cmd.d.ts.map +1 -0
  85. package/dist/cli/commands/pipelines-cmd.js +52 -0
  86. package/dist/cli/commands/pipelines-cmd.js.map +1 -0
  87. package/dist/cli/commands/promises-cmd.d.ts +11 -0
  88. package/dist/cli/commands/promises-cmd.d.ts.map +1 -0
  89. package/dist/cli/commands/promises-cmd.js +53 -0
  90. package/dist/cli/commands/promises-cmd.js.map +1 -0
  91. package/dist/cli/commands/queue-cmd.d.ts +13 -0
  92. package/dist/cli/commands/queue-cmd.d.ts.map +1 -0
  93. package/dist/cli/commands/queue-cmd.js +21 -0
  94. package/dist/cli/commands/queue-cmd.js.map +1 -0
  95. package/dist/cli/commands/standards-cmd.d.ts +12 -0
  96. package/dist/cli/commands/standards-cmd.d.ts.map +1 -0
  97. package/dist/cli/commands/standards-cmd.js +28 -0
  98. package/dist/cli/commands/standards-cmd.js.map +1 -0
  99. package/dist/cli/commands/whoami.d.ts +24 -0
  100. package/dist/cli/commands/whoami.d.ts.map +1 -0
  101. package/dist/cli/commands/whoami.js +46 -0
  102. package/dist/cli/commands/whoami.js.map +1 -0
  103. package/dist/cli/commands/workflows-cmd.d.ts +18 -0
  104. package/dist/cli/commands/workflows-cmd.d.ts.map +1 -0
  105. package/dist/cli/commands/workflows-cmd.js +32 -0
  106. package/dist/cli/commands/workflows-cmd.js.map +1 -0
  107. package/dist/cli/create-cli-client.d.ts +32 -0
  108. package/dist/cli/create-cli-client.d.ts.map +1 -0
  109. package/dist/cli/create-cli-client.js +143 -0
  110. package/dist/cli/create-cli-client.js.map +1 -0
  111. package/dist/cli/credentials.d.ts +25 -0
  112. package/dist/cli/credentials.d.ts.map +1 -0
  113. package/dist/cli/credentials.js +70 -0
  114. package/dist/cli/credentials.js.map +1 -0
  115. package/dist/cli/index.d.ts +8 -0
  116. package/dist/cli/index.d.ts.map +1 -0
  117. package/dist/cli/index.js +424 -0
  118. package/dist/cli/index.js.map +1 -0
  119. package/dist/client/catalog-types.d.ts +22 -0
  120. package/dist/client/catalog-types.d.ts.map +1 -0
  121. package/dist/client/catalog-types.js +5 -0
  122. package/dist/client/catalog-types.js.map +1 -0
  123. package/dist/client/catalog.d.ts +9 -0
  124. package/dist/client/catalog.d.ts.map +1 -0
  125. package/dist/client/catalog.js +29 -0
  126. package/dist/client/catalog.js.map +1 -0
  127. package/dist/client/connection-types.d.ts +98 -0
  128. package/dist/client/connection-types.d.ts.map +1 -0
  129. package/dist/client/connection-types.js +18 -0
  130. package/dist/client/connection-types.js.map +1 -0
  131. package/dist/client/connections.d.ts +18 -0
  132. package/dist/client/connections.d.ts.map +1 -0
  133. package/dist/client/connections.js +66 -0
  134. package/dist/client/connections.js.map +1 -0
  135. package/dist/client/connectors-types.d.ts +61 -0
  136. package/dist/client/connectors-types.d.ts.map +1 -0
  137. package/dist/client/connectors-types.js +6 -0
  138. package/dist/client/connectors-types.js.map +1 -0
  139. package/dist/client/connectors.d.ts +27 -0
  140. package/dist/client/connectors.d.ts.map +1 -0
  141. package/dist/client/connectors.js +71 -0
  142. package/dist/client/connectors.js.map +1 -0
  143. package/dist/client/consumptions-types.d.ts +80 -0
  144. package/dist/client/consumptions-types.d.ts.map +1 -0
  145. package/dist/client/consumptions-types.js +5 -0
  146. package/dist/client/consumptions-types.js.map +1 -0
  147. package/dist/client/consumptions.d.ts +14 -0
  148. package/dist/client/consumptions.d.ts.map +1 -0
  149. package/dist/client/consumptions.js +47 -0
  150. package/dist/client/consumptions.js.map +1 -0
  151. package/dist/client/data-assets-types.d.ts +150 -0
  152. package/dist/client/data-assets-types.d.ts.map +1 -0
  153. package/dist/client/data-assets-types.js +5 -0
  154. package/dist/client/data-assets-types.js.map +1 -0
  155. package/dist/client/data-assets.d.ts +31 -0
  156. package/dist/client/data-assets.d.ts.map +1 -0
  157. package/dist/client/data-assets.js +182 -0
  158. package/dist/client/data-assets.js.map +1 -0
  159. package/dist/client/data-product-resolver.d.ts +92 -0
  160. package/dist/client/data-product-resolver.d.ts.map +1 -0
  161. package/dist/client/data-product-resolver.js +165 -0
  162. package/dist/client/data-product-resolver.js.map +1 -0
  163. package/dist/client/data-products-types.d.ts +182 -0
  164. package/dist/client/data-products-types.d.ts.map +1 -0
  165. package/dist/client/data-products-types.js +5 -0
  166. package/dist/client/data-products-types.js.map +1 -0
  167. package/dist/client/data-products.d.ts +63 -0
  168. package/dist/client/data-products.d.ts.map +1 -0
  169. package/dist/client/data-products.js +461 -0
  170. package/dist/client/data-products.js.map +1 -0
  171. package/dist/client/discovery-types.d.ts +74 -0
  172. package/dist/client/discovery-types.d.ts.map +1 -0
  173. package/dist/client/discovery-types.js +6 -0
  174. package/dist/client/discovery-types.js.map +1 -0
  175. package/dist/client/discovery.d.ts +14 -0
  176. package/dist/client/discovery.d.ts.map +1 -0
  177. package/dist/client/discovery.js +57 -0
  178. package/dist/client/discovery.js.map +1 -0
  179. package/dist/client/domains-types.d.ts +46 -0
  180. package/dist/client/domains-types.d.ts.map +1 -0
  181. package/dist/client/domains-types.js +6 -0
  182. package/dist/client/domains-types.js.map +1 -0
  183. package/dist/client/domains.d.ts +11 -0
  184. package/dist/client/domains.d.ts.map +1 -0
  185. package/dist/client/domains.js +39 -0
  186. package/dist/client/domains.js.map +1 -0
  187. package/dist/client/flow-queue-resolve.d.ts +9 -0
  188. package/dist/client/flow-queue-resolve.d.ts.map +1 -0
  189. package/dist/client/flow-queue-resolve.js +17 -0
  190. package/dist/client/flow-queue-resolve.js.map +1 -0
  191. package/dist/client/flow-types.d.ts +112 -0
  192. package/dist/client/flow-types.d.ts.map +1 -0
  193. package/dist/client/flow-types.js +6 -0
  194. package/dist/client/flow-types.js.map +1 -0
  195. package/dist/client/flows.d.ts +33 -0
  196. package/dist/client/flows.d.ts.map +1 -0
  197. package/dist/client/flows.js +293 -0
  198. package/dist/client/flows.js.map +1 -0
  199. package/dist/client/index.d.ts +28 -0
  200. package/dist/client/index.d.ts.map +1 -0
  201. package/dist/client/index.js +3 -0
  202. package/dist/client/index.js.map +1 -0
  203. package/dist/client/instances-types.d.ts +40 -0
  204. package/dist/client/instances-types.d.ts.map +1 -0
  205. package/dist/client/instances-types.js +6 -0
  206. package/dist/client/instances-types.js.map +1 -0
  207. package/dist/client/instances.d.ts +29 -0
  208. package/dist/client/instances.d.ts.map +1 -0
  209. package/dist/client/instances.js +41 -0
  210. package/dist/client/instances.js.map +1 -0
  211. package/dist/client/loxtep-client.d.ts +111 -0
  212. package/dist/client/loxtep-client.d.ts.map +1 -0
  213. package/dist/client/loxtep-client.js +262 -0
  214. package/dist/client/loxtep-client.js.map +1 -0
  215. package/dist/client/observe-types.d.ts +17 -0
  216. package/dist/client/observe-types.d.ts.map +1 -0
  217. package/dist/client/observe-types.js +5 -0
  218. package/dist/client/observe-types.js.map +1 -0
  219. package/dist/client/observe.d.ts +15 -0
  220. package/dist/client/observe.d.ts.map +1 -0
  221. package/dist/client/observe.js +22 -0
  222. package/dist/client/observe.js.map +1 -0
  223. package/dist/client/pipelines-types.d.ts +3 -0
  224. package/dist/client/pipelines-types.d.ts.map +1 -0
  225. package/dist/client/pipelines-types.js +3 -0
  226. package/dist/client/pipelines-types.js.map +1 -0
  227. package/dist/client/pipelines.d.ts +3 -0
  228. package/dist/client/pipelines.d.ts.map +1 -0
  229. package/dist/client/pipelines.js +3 -0
  230. package/dist/client/pipelines.js.map +1 -0
  231. package/dist/client/procedures-types.d.ts +25 -0
  232. package/dist/client/procedures-types.d.ts.map +1 -0
  233. package/dist/client/procedures-types.js +6 -0
  234. package/dist/client/procedures-types.js.map +1 -0
  235. package/dist/client/procedures.d.ts +19 -0
  236. package/dist/client/procedures.d.ts.map +1 -0
  237. package/dist/client/procedures.js +33 -0
  238. package/dist/client/procedures.js.map +1 -0
  239. package/dist/client/process-intelligence-types.d.ts +45 -0
  240. package/dist/client/process-intelligence-types.d.ts.map +1 -0
  241. package/dist/client/process-intelligence-types.js +6 -0
  242. package/dist/client/process-intelligence-types.js.map +1 -0
  243. package/dist/client/process-intelligence.d.ts +17 -0
  244. package/dist/client/process-intelligence.d.ts.map +1 -0
  245. package/dist/client/process-intelligence.js +50 -0
  246. package/dist/client/process-intelligence.js.map +1 -0
  247. package/dist/client/projects-types.d.ts +79 -0
  248. package/dist/client/projects-types.d.ts.map +1 -0
  249. package/dist/client/projects-types.js +6 -0
  250. package/dist/client/projects-types.js.map +1 -0
  251. package/dist/client/projects.d.ts +19 -0
  252. package/dist/client/projects.d.ts.map +1 -0
  253. package/dist/client/projects.js +53 -0
  254. package/dist/client/projects.js.map +1 -0
  255. package/dist/client/promises-types.d.ts +56 -0
  256. package/dist/client/promises-types.d.ts.map +1 -0
  257. package/dist/client/promises-types.js +6 -0
  258. package/dist/client/promises-types.js.map +1 -0
  259. package/dist/client/promises.d.ts +11 -0
  260. package/dist/client/promises.d.ts.map +1 -0
  261. package/dist/client/promises.js +41 -0
  262. package/dist/client/promises.js.map +1 -0
  263. package/dist/client/quality-types.d.ts +62 -0
  264. package/dist/client/quality-types.d.ts.map +1 -0
  265. package/dist/client/quality-types.js +5 -0
  266. package/dist/client/quality-types.js.map +1 -0
  267. package/dist/client/quality.d.ts +12 -0
  268. package/dist/client/quality.d.ts.map +1 -0
  269. package/dist/client/quality.js +57 -0
  270. package/dist/client/quality.js.map +1 -0
  271. package/dist/client/queue-types.d.ts +84 -0
  272. package/dist/client/queue-types.d.ts.map +1 -0
  273. package/dist/client/queue-types.js +5 -0
  274. package/dist/client/queue-types.js.map +1 -0
  275. package/dist/client/queues.d.ts +61 -0
  276. package/dist/client/queues.d.ts.map +1 -0
  277. package/dist/client/queues.js +138 -0
  278. package/dist/client/queues.js.map +1 -0
  279. package/dist/client/schemas-types.d.ts +27 -0
  280. package/dist/client/schemas-types.d.ts.map +1 -0
  281. package/dist/client/schemas-types.js +5 -0
  282. package/dist/client/schemas-types.js.map +1 -0
  283. package/dist/client/schemas.d.ts +11 -0
  284. package/dist/client/schemas.d.ts.map +1 -0
  285. package/dist/client/schemas.js +22 -0
  286. package/dist/client/schemas.js.map +1 -0
  287. package/dist/client/standards-types.d.ts +45 -0
  288. package/dist/client/standards-types.d.ts.map +1 -0
  289. package/dist/client/standards-types.js +6 -0
  290. package/dist/client/standards-types.js.map +1 -0
  291. package/dist/client/standards.d.ts +11 -0
  292. package/dist/client/standards.d.ts.map +1 -0
  293. package/dist/client/standards.js +41 -0
  294. package/dist/client/standards.js.map +1 -0
  295. package/dist/client/stubs.d.ts +35 -0
  296. package/dist/client/stubs.d.ts.map +1 -0
  297. package/dist/client/stubs.js +30 -0
  298. package/dist/client/stubs.js.map +1 -0
  299. package/dist/client/templates-types.d.ts +70 -0
  300. package/dist/client/templates-types.d.ts.map +1 -0
  301. package/dist/client/templates-types.js +7 -0
  302. package/dist/client/templates-types.js.map +1 -0
  303. package/dist/client/templates.d.ts +12 -0
  304. package/dist/client/templates.d.ts.map +1 -0
  305. package/dist/client/templates.js +38 -0
  306. package/dist/client/templates.js.map +1 -0
  307. package/dist/client/thesaurus-types.d.ts +28 -0
  308. package/dist/client/thesaurus-types.d.ts.map +1 -0
  309. package/dist/client/thesaurus-types.js +5 -0
  310. package/dist/client/thesaurus-types.js.map +1 -0
  311. package/dist/client/thesaurus.d.ts +11 -0
  312. package/dist/client/thesaurus.d.ts.map +1 -0
  313. package/dist/client/thesaurus.js +35 -0
  314. package/dist/client/thesaurus.js.map +1 -0
  315. package/dist/client/types.d.ts +80 -0
  316. package/dist/client/types.d.ts.map +1 -0
  317. package/dist/client/types.js +2 -0
  318. package/dist/client/types.js.map +1 -0
  319. package/dist/client/versions-types.d.ts +47 -0
  320. package/dist/client/versions-types.d.ts.map +1 -0
  321. package/dist/client/versions-types.js +9 -0
  322. package/dist/client/versions-types.js.map +1 -0
  323. package/dist/client/versions.d.ts +14 -0
  324. package/dist/client/versions.d.ts.map +1 -0
  325. package/dist/client/versions.js +14 -0
  326. package/dist/client/versions.js.map +1 -0
  327. package/dist/client/workflows-types.d.ts +56 -0
  328. package/dist/client/workflows-types.d.ts.map +1 -0
  329. package/dist/client/workflows-types.js +6 -0
  330. package/dist/client/workflows-types.js.map +1 -0
  331. package/dist/client/workflows.d.ts +15 -0
  332. package/dist/client/workflows.d.ts.map +1 -0
  333. package/dist/client/workflows.js +50 -0
  334. package/dist/client/workflows.js.map +1 -0
  335. package/dist/config/api-path.d.ts +17 -0
  336. package/dist/config/api-path.d.ts.map +1 -0
  337. package/dist/config/api-path.js +57 -0
  338. package/dist/config/api-path.js.map +1 -0
  339. package/dist/config/index.d.ts +10 -0
  340. package/dist/config/index.d.ts.map +1 -0
  341. package/dist/config/index.js +9 -0
  342. package/dist/config/index.js.map +1 -0
  343. package/dist/config/load.d.ts +12 -0
  344. package/dist/config/load.d.ts.map +1 -0
  345. package/dist/config/load.js +152 -0
  346. package/dist/config/load.js.map +1 -0
  347. package/dist/config/paths.d.ts +5 -0
  348. package/dist/config/paths.d.ts.map +1 -0
  349. package/dist/config/paths.js +11 -0
  350. package/dist/config/paths.js.map +1 -0
  351. package/dist/config/platform-request-url.d.ts +35 -0
  352. package/dist/config/platform-request-url.d.ts.map +1 -0
  353. package/dist/config/platform-request-url.js +100 -0
  354. package/dist/config/platform-request-url.js.map +1 -0
  355. package/dist/config/resolve-sdk-urls.d.ts +39 -0
  356. package/dist/config/resolve-sdk-urls.d.ts.map +1 -0
  357. package/dist/config/resolve-sdk-urls.js +130 -0
  358. package/dist/config/resolve-sdk-urls.js.map +1 -0
  359. package/dist/config/save.d.ts +7 -0
  360. package/dist/config/save.d.ts.map +1 -0
  361. package/dist/config/save.js +26 -0
  362. package/dist/config/save.js.map +1 -0
  363. package/dist/config/streams-partial.d.ts +9 -0
  364. package/dist/config/streams-partial.d.ts.map +1 -0
  365. package/dist/config/streams-partial.js +30 -0
  366. package/dist/config/streams-partial.js.map +1 -0
  367. package/dist/config/types.d.ts +37 -0
  368. package/dist/config/types.d.ts.map +1 -0
  369. package/dist/config/types.js +11 -0
  370. package/dist/config/types.js.map +1 -0
  371. package/dist/errors/auth.d.ts +10 -0
  372. package/dist/errors/auth.d.ts.map +1 -0
  373. package/dist/errors/auth.js +26 -0
  374. package/dist/errors/auth.js.map +1 -0
  375. package/dist/errors/base.d.ts +15 -0
  376. package/dist/errors/base.d.ts.map +1 -0
  377. package/dist/errors/base.js +32 -0
  378. package/dist/errors/base.js.map +1 -0
  379. package/dist/errors/index.d.ts +15 -0
  380. package/dist/errors/index.d.ts.map +1 -0
  381. package/dist/errors/index.js +14 -0
  382. package/dist/errors/index.js.map +1 -0
  383. package/dist/errors/parse-http.d.ts +13 -0
  384. package/dist/errors/parse-http.d.ts.map +1 -0
  385. package/dist/errors/parse-http.js +68 -0
  386. package/dist/errors/parse-http.js.map +1 -0
  387. package/dist/errors/rate-limit.d.ts +17 -0
  388. package/dist/errors/rate-limit.d.ts.map +1 -0
  389. package/dist/errors/rate-limit.js +23 -0
  390. package/dist/errors/rate-limit.js.map +1 -0
  391. package/dist/errors/resource.d.ts +18 -0
  392. package/dist/errors/resource.d.ts.map +1 -0
  393. package/dist/errors/resource.js +32 -0
  394. package/dist/errors/resource.js.map +1 -0
  395. package/dist/errors/streaming.d.ts +19 -0
  396. package/dist/errors/streaming.d.ts.map +1 -0
  397. package/dist/errors/streaming.js +32 -0
  398. package/dist/errors/streaming.js.map +1 -0
  399. package/dist/errors/types.d.ts +44 -0
  400. package/dist/errors/types.d.ts.map +1 -0
  401. package/dist/errors/types.js +2 -0
  402. package/dist/errors/types.js.map +1 -0
  403. package/dist/errors/validation.d.ts +23 -0
  404. package/dist/errors/validation.d.ts.map +1 -0
  405. package/dist/errors/validation.js +37 -0
  406. package/dist/errors/validation.js.map +1 -0
  407. package/dist/http/client.d.ts +51 -0
  408. package/dist/http/client.d.ts.map +1 -0
  409. package/dist/http/client.js +164 -0
  410. package/dist/http/client.js.map +1 -0
  411. package/dist/http/index.d.ts +5 -0
  412. package/dist/http/index.d.ts.map +1 -0
  413. package/dist/http/index.js +3 -0
  414. package/dist/http/index.js.map +1 -0
  415. package/dist/http/signer.d.ts +15 -0
  416. package/dist/http/signer.d.ts.map +1 -0
  417. package/dist/http/signer.js +55 -0
  418. package/dist/http/signer.js.map +1 -0
  419. package/dist/index.d.ts +13 -0
  420. package/dist/index.d.ts.map +1 -0
  421. package/dist/index.js +13 -0
  422. package/dist/index.js.map +1 -0
  423. package/dist/rstreams/configuration.d.ts +11 -0
  424. package/dist/rstreams/configuration.d.ts.map +1 -0
  425. package/dist/rstreams/configuration.js +43 -0
  426. package/dist/rstreams/configuration.js.map +1 -0
  427. package/dist/rstreams/event-bridge.d.ts +16 -0
  428. package/dist/rstreams/event-bridge.d.ts.map +1 -0
  429. package/dist/rstreams/event-bridge.js +45 -0
  430. package/dist/rstreams/event-bridge.js.map +1 -0
  431. package/dist/rstreams/leo-runtime.d.ts +9 -0
  432. package/dist/rstreams/leo-runtime.d.ts.map +1 -0
  433. package/dist/rstreams/leo-runtime.js +14 -0
  434. package/dist/rstreams/leo-runtime.js.map +1 -0
  435. package/dist/streaming/index.d.ts +2 -0
  436. package/dist/streaming/index.d.ts.map +1 -0
  437. package/dist/streaming/index.js +2 -0
  438. package/dist/streaming/index.js.map +1 -0
  439. package/dist/streaming/transformer.d.ts +15 -0
  440. package/dist/streaming/transformer.d.ts.map +1 -0
  441. package/dist/streaming/transformer.js +25 -0
  442. package/dist/streaming/transformer.js.map +1 -0
  443. package/dist/types/generated-api.d.ts +146 -0
  444. package/dist/types/generated-api.d.ts.map +1 -0
  445. package/dist/types/generated-api.js +7 -0
  446. package/dist/types/generated-api.js.map +1 -0
  447. package/dist/types/index.d.ts +5 -0
  448. package/dist/types/index.d.ts.map +1 -0
  449. package/dist/types/index.js +5 -0
  450. package/dist/types/index.js.map +1 -0
  451. package/docs/event-replay-cookbook.md +152 -0
  452. package/docs/getting-started.md +332 -0
  453. package/docs/quick-reference.md +256 -0
  454. package/docs/sdk-bus-rbac-threat-model.md +46 -0
  455. package/docs/sdk-control-vs-data-plane.md +32 -0
  456. package/docs/sdk-ingestion-export-guide.md +480 -0
  457. package/docs/sdk-mcp-mapping.md +20 -0
  458. package/docs/sdk-pairing.md +42 -0
  459. package/docs/sdk-rest-vs-bus.md +131 -0
  460. package/package.json +85 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,30 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@loxtep/sdk` will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to
7
+ [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
+
9
+ ## [0.1.0] - Unreleased
10
+
11
+ ### Added
12
+
13
+ - Initial SDK release
14
+ - `LoxtepClient` with JWT and SigV4 authentication
15
+ - Data products API (list, get, search, query, stream, replay)
16
+ - Flows API (list, get, create, get_writer)
17
+ - Connections API (list, get, create, test)
18
+ - Queues API (metadata, checkpoints, open_reader, open_writer)
19
+ - Quality API (list, get)
20
+ - Catalog and Discovery APIs
21
+ - Schemas, Projects, Domains, Standards, Data Contracts APIs
22
+ - Process Intelligence API (entity context, decision traces)
23
+ - Observe API (status, stream_config)
24
+ - FlowWriter with transparent batching
25
+ - QueueReader with async iteration
26
+ - Stream helpers (`mapStream`, `filterStream`)
27
+ - CLI (`loxtep`) with login, config, data-products, flows, connections, queues
28
+ commands
29
+ - Typed errors (`@loxtep/sdk/errors`)
30
+ - Generated API types from Zod schemas
package/README.md ADDED
@@ -0,0 +1,274 @@
1
+ # Loxtep Node.js SDK
2
+
3
+ Client for the Loxtep API. Customer-facing surface: **data_products**,
4
+ **flows**, **connections**, **queues**, **quality**, **catalog**, **discovery**,
5
+ **schemas**, **projects**, **domains**, **standards**, **data_contracts**.
6
+
7
+ **Node.js 22+** is the supported runtime (`engines` in `package.json`). **Live**
8
+ queue/flow writes use the **Loxtep stream** data plane; configure stream bus
9
+ resources (`streams` on `LoxtepClient` and instance env from your stack) and AWS
10
+ credentials for SigV4 on both REST and the bus.
11
+
12
+ ## Quick start (< 5 min to first stream)
13
+
14
+ 1. **Install**
15
+
16
+ ```bash
17
+ npm install @loxtep/sdk
18
+ ```
19
+
20
+ 2. **Configure and log in**
21
+
22
+ ```bash
23
+ npx loxtep config set api_url https://api.loxtep.com
24
+ npx loxtep login
25
+ ```
26
+
27
+ Tokens resolve in this order: **`LOXTEP_AUTH_TOKEN`** →
28
+ **`~/.loxtep/credentials.json`** (shared with
29
+ `npx @loxtep/customer-mcp-server login`).
30
+
31
+ 3. **Create a client, write and read events**
32
+
33
+ ```ts
34
+ import { LoxtepClient } from '@loxtep/sdk';
35
+
36
+ const client = new LoxtepClient({
37
+ api_url: 'https://api.loxtep.com',
38
+ auth: { type: 'jwt', token: process.env.LOXTEP_TOKEN },
39
+ });
40
+
41
+ // Write events to a data product
42
+ const writer = await client.data_products.get_writer('shopify_gql_customer');
43
+ writer.write({
44
+ customer_id: '123',
45
+ name: 'Alice',
46
+ email: 'alice@example.com',
47
+ });
48
+ await writer.close();
49
+
50
+ // Read events from a data product
51
+ const reader = await client.data_products.get_reader('shopify_gql_customer');
52
+ for await (const event of reader) {
53
+ console.log(event);
54
+ }
55
+ ```
56
+
57
+ That's it. The SDK resolves the data product's queue, bot identity, and
58
+ stream bus configuration automatically from the deployment metadata. No
59
+ manual queue names, no stream config, no bot IDs.
60
+
61
+ 4. **Lower-level escape hatch** — if you need explicit control over bot_id,
62
+ queue name, or stream bus resources, use `flows.get_writer` directly:
63
+
64
+ ```ts
65
+ const writer = client.flows.get_writer('your-flow-id', {
66
+ bot_id: 'your-bot-id',
67
+ output_queue_name: 'your-ingest-queue',
68
+ });
69
+ writer.write({ id: 'e1', payload: { name: 'Alice' } });
70
+ await writer.close();
71
+ ```
72
+
73
+ 5. **Stream config from the platform (optional)** — after login,
74
+ `await client.observe.stream_config()` returns Leo/RStreams resource names
75
+ via **`GET /observe/stream-config`** (Observe proxy + `instances:read`).
76
+ Merge into `new LoxtepClient({ ...opts, streams: { ...partial } })` with your
77
+ JWT-backed client. Note: `data_products.get_writer` and `get_reader` resolve
78
+ stream config automatically — this is only needed for manual bus access.
79
+
80
+ ## Quick start: "Tell me everything about this order"
81
+
82
+ Process Intelligence returns unified context from all connected systems
83
+ (Shopify, Stripe, Gorgias, etc.) for a given entity:
84
+
85
+ ```ts
86
+ import { LoxtepClient } from '@loxtep/sdk';
87
+
88
+ const client = new LoxtepClient({
89
+ api_url: 'https://api.loxtep.com',
90
+ auth: { type: 'jwt', token: process.env.LOXTEP_AUTH_TOKEN! },
91
+ organization_id: process.env.LOXTEP_ORGANIZATION_ID,
92
+ credentials: {
93
+ accessKeyId: process.env.AWS_ACCESS_KEY_ID ?? 'cli',
94
+ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY ?? 'cli',
95
+ },
96
+ });
97
+
98
+ // Tell me everything about order #4821
99
+ const context = await client.process_intelligence.getEntityContext(
100
+ client.organization_id!,
101
+ { entity_type: 'order', entity_id: '4821' }
102
+ );
103
+ console.log(context); // Shopify order + Stripe payments + support tickets, etc.
104
+ ```
105
+
106
+ See
107
+ [Process Intelligence API Guide](../../docs/api/process-intelligence-guide.md)
108
+ for full API and MCP tool reference.
109
+
110
+ ## API surface
111
+
112
+ - **data_products** – get, list, search, query, list_tables, create, stream,
113
+ replay, **get_writer**, **get_reader**, invalidate_cache
114
+ - **flows** – list, get, create, get_writer
115
+ - **connections** – list, get, create, test
116
+ - **queues** – get_queue_metadata, get_reader_checkpoint, open_reader,
117
+ open_writer
118
+ - **quality** – list, get
119
+ - **catalog** – search
120
+ - **discovery** – search (access-filtered catalog search with optional
121
+ evidence/lineage), getEvidence, getLineageImpact, getGovernanceFlags,
122
+ runDiscovery (all call `POST /ai/mcp/tools/call`; results are access-filtered
123
+ when user context is present)
124
+ - **schemas** – get (data product schema)
125
+ - **observe** – `status`, **`stream_config`** (proxied bus resource names for
126
+ SDK `streams`)
127
+ - **projects**, **domains**, **standards**, **data_contracts** – list, get (full
128
+ CRUD where applicable)
129
+
130
+ ## Data product writer and reader
131
+
132
+ `await client.data_products.get_writer('name')` resolves the data product's
133
+ queue, bot identity, and stream bus config automatically, then returns a
134
+ **FlowWriter**:
135
+
136
+ ```ts
137
+ const writer = await client.data_products.get_writer('shopify_gql_customer');
138
+ writer.write({ customer_id: '123', name: 'Alice', email: 'alice@example.com' });
139
+ await writer.close();
140
+ ```
141
+
142
+ `await client.data_products.get_reader('name')` returns an async iterable over
143
+ the data product's queue:
144
+
145
+ ```ts
146
+ const reader = await client.data_products.get_reader('shopify_gql_customer');
147
+ for await (const event of reader) {
148
+ console.log(event);
149
+ }
150
+ ```
151
+
152
+ Options:
153
+
154
+ - **Writer**: `{ bot_id?, batch_size?, max_retries? }`
155
+ - **Reader**: `{ bot_id?, from?, batch_size? }`
156
+
157
+ Cache: call `client.data_products.invalidate_cache('name')` to force
158
+ re-resolution on the next call.
159
+
160
+ ## Flow writer (lower-level escape hatch)
161
+
162
+ `client.flows.get_writer(flow_id)` returns a **FlowWriter** with:
163
+
164
+ - **`write(event)`** – enqueues an event. Batching is transparent: you do not
165
+ control batch size or flush timing.
166
+ - **`close()`** – flushes any buffered events and guarantees delivery (or
167
+ attempts to). Always call `close()` when done writing.
168
+
169
+ Example:
170
+
171
+ ```ts
172
+ const writer = client.flows.get_writer(flowId, { bot_id: 'your-bot-id' });
173
+ writer.write({ id: 'e1', payload: { name: 'Alice' } });
174
+ writer.write({ id: 'e2', payload: { name: 'Bob' } });
175
+ await writer.close();
176
+ ```
177
+
178
+ Buffered events flush on `close()` via stream **`putEvents`** to the resolved
179
+ output queue (see `docs/sdk-control-vs-data-plane.md`).
180
+
181
+ ## Stream helpers
182
+
183
+ Use `mapStream` and `filterStream` with `data_products.stream()`,
184
+ `data_products.replay()`, or `queues.open_reader().read()`:
185
+
186
+ ```ts
187
+ import { mapStream, filterStream } from '@loxtep/sdk';
188
+
189
+ for await (const event of mapStream(reader.read(), e => e.payload)) {
190
+ console.log(event);
191
+ }
192
+ for await (const event of filterStream(
193
+ reader.read(),
194
+ e => e.event_id !== 'skip'
195
+ )) {
196
+ console.log(event);
197
+ }
198
+ ```
199
+
200
+ ## Generated API types
201
+
202
+ Types for API request/response shapes (data_product, workflow, connection, etc.)
203
+ are generated from Zod schemas and exported from `@loxtep/sdk`:
204
+
205
+ ```ts
206
+ import type { DataProductApi, FlowApi, ConnectionApi } from '@loxtep/sdk';
207
+ ```
208
+
209
+ Regenerate after changing `scripts/api-schemas.ts`:
210
+
211
+ ```bash
212
+ pnpm run generate:api-types
213
+ ```
214
+
215
+ ## Documentation
216
+
217
+ - **[Event replay cookbook](docs/event-replay-cookbook.md)** – Replay events
218
+ from a data product or queue (key differentiator).
219
+ - **[MCP + SDK pairing](docs/sdk-pairing.md)** – one auth story, when MCP vs
220
+ SDK.
221
+ - **[Control vs data plane](docs/sdk-control-vs-data-plane.md)** – REST vs
222
+ Loxtep streams.
223
+ - **[REST SigV4 vs bus](docs/sdk-rest-vs-bus.md)** – never mix secrets.
224
+ - **[MCP → SDK mapping](docs/sdk-mcp-mapping.md)** – agent-oriented table.
225
+ - **[Bus RBAC threat model](docs/sdk-bus-rbac-threat-model.md)** – issuance
226
+ direction.
227
+ - **Typed errors** – `import { … } from '@loxtep/sdk/errors'`.
228
+ - **API reference** – `npm run docs` (Typedoc).
229
+
230
+ ## CLI reference
231
+
232
+ | Command | Description |
233
+ | ---------------------------------------------------- | ----------------------------------------------------------- |
234
+ | `login` | Log in with email/password (prompts if not provided) |
235
+ | `logout` | Remove stored credentials |
236
+ | `whoami` | Print current user and organization |
237
+ | `init` | Setup checklist + doc pointers |
238
+ | `config list` | Show api_url, organization_id, project_id, instance_id |
239
+ | `config set <key> <value>` | Set api_url \| organization_id \| project_id \| instance_id |
240
+ | `config export --from-data-product <id>` | Print shell exports / JSON for SDK bootstrap |
241
+ | `bus login` | Explain bus vs JWT (placeholder for future session API) |
242
+ | `data-products list` | List data products |
243
+ | `data-products get <id>` | Get data product by id |
244
+ | `data-products create --name … --domain-id …` | Create data product |
245
+ | `data-products query <id> <SQL>` | Run SQL in data product context (or `--file query.sql`) |
246
+ | `data-products tables <id>` | List tables for data product |
247
+ | `flows list [--project-id <id>]` | List flows (project_id required or from config) |
248
+ | `flows get <id>` | Get flow by id (with nodes) |
249
+ | `flows create --name <n> --project-id <id>` | Create flow (optional: `--template-id`, `--description`) |
250
+ | `connections list` | List connections |
251
+ | `connections get <id>` | Get connection by id |
252
+ | `connections create --name <n> --type <t> --key <k>` | Create connection |
253
+ | `connections test <id>` | Test connection |
254
+ | `queue info <data-product-id>` | Queue info by data product id |
255
+ | `queue info --queue <name>` | Queue info by queue name |
256
+ | `queue checkpoint <id> --bot <bot-id>` | Reader checkpoint for data product and bot |
257
+ | `domains list` \| `domains get <id>` | List or get domain |
258
+ | `standards list` \| `standards get <id>` | List or get standard (policy) |
259
+ | `data-contracts list` \| `data-contracts get <id>` | List or get data contract |
260
+ | `metrics rate-limits` | Show rate limit info |
261
+ | `metrics log --id <id> --value <n>` | Log metric (optional `--tags k=v,...`) |
262
+
263
+ Examples:
264
+
265
+ ```bash
266
+ loxtep login
267
+ loxtep whoami
268
+ loxtep data-products list
269
+ loxtep flows list --project-id <project-id>
270
+ loxtep flows get <flow-id>
271
+ loxtep queue info <data-product-id>
272
+ loxtep data-products query <data-product-id> "SELECT * FROM t LIMIT 10"
273
+ loxtep metrics rate-limits
274
+ ```
@@ -0,0 +1,6 @@
1
+ export { decodeJwtPayload, DEFAULT_REFRESH_THRESHOLD_SECONDS } from './jwt.js';
2
+ export { TokenManager } from './token-manager.js';
3
+ export type { TokenState } from './token-manager.js';
4
+ export { login, refresh, LoginMfaRequiredError } from './login.js';
5
+ export type { AwsCredentialsSnake, LoginResponse, RefreshResponse } from './login.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { decodeJwtPayload, DEFAULT_REFRESH_THRESHOLD_SECONDS } from './jwt.js';
2
+ export { TokenManager } from './token-manager.js';
3
+ export { login, refresh, LoginMfaRequiredError } from './login.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Decode JWT payload to read exp (expiry) without verification.
3
+ * Used client-side only for refresh threshold; do not use for security decisions.
4
+ */
5
+ export declare function decodeJwtPayload(token: string): {
6
+ exp?: number;
7
+ };
8
+ /** Default refresh threshold: refresh when less than 5 minutes until expiry. */
9
+ export declare const DEFAULT_REFRESH_THRESHOLD_SECONDS = 300;
10
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAehE;AAED,gFAAgF;AAChF,eAAO,MAAM,iCAAiC,MAAM,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Decode JWT payload to read exp (expiry) without verification.
3
+ * Used client-side only for refresh threshold; do not use for security decisions.
4
+ */
5
+ export function decodeJwtPayload(token) {
6
+ try {
7
+ const parts = token.split('.');
8
+ if (parts.length !== 3)
9
+ return {};
10
+ const payload = parts[1];
11
+ if (!payload)
12
+ return {};
13
+ const decoded = Buffer.from(payload.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf-8');
14
+ const parsed = JSON.parse(decoded);
15
+ const exp = typeof parsed.exp === 'number' ? parsed.exp : undefined;
16
+ return { exp };
17
+ }
18
+ catch {
19
+ return {};
20
+ }
21
+ }
22
+ /** Default refresh threshold: refresh when less than 5 minutes until expiry. */
23
+ export const DEFAULT_REFRESH_THRESHOLD_SECONDS = 300;
24
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAC3F,OAAO,CACR,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC9D,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Login and refresh using platform auth endpoints.
3
+ * POST .../{app}/auth/login and POST .../{app}/auth/refresh (first segment = app microservice by default). No token on disk.
4
+ */
5
+ /** Thrown when POST /auth/login returns 403 and the user must supply TOTP (same as the web app for MFA). */
6
+ export declare class LoginMfaRequiredError extends Error {
7
+ readonly name = "LoginMfaRequiredError";
8
+ constructor();
9
+ }
10
+ /** Same snake_case shape as platform login/refresh JSON. */
11
+ export type AwsCredentialsSnake = {
12
+ access_key_id: string;
13
+ secret_access_key: string;
14
+ session_token: string;
15
+ expiration: string;
16
+ };
17
+ export interface LoginResponse {
18
+ access_token: string;
19
+ refresh_token?: string;
20
+ expires_in: number;
21
+ expires_at: string;
22
+ aws_credentials?: AwsCredentialsSnake;
23
+ }
24
+ export interface RefreshResponse {
25
+ access_token: string;
26
+ refresh_token: string;
27
+ expires_in: number;
28
+ expires_at: string;
29
+ aws_credentials?: AwsCredentialsSnake;
30
+ }
31
+ /**
32
+ * Login with email/password. POST `{apiUrl}/{auth_path}/auth/login` (default `auth_path` = `app`).
33
+ * Returns tokens; caller should set them in TokenManager (no disk).
34
+ */
35
+ export declare function login(apiUrl: string, email: string, password: string, options?: {
36
+ organization_id?: string;
37
+ mfa_code?: string;
38
+ /** Omitted: default `app`. Set to `""` to omit (if `api_url` already includes `/app`). */
39
+ auth_path_prefix?: string;
40
+ fetchFn?: typeof fetch;
41
+ }): Promise<LoginResponse>;
42
+ /**
43
+ * Refresh access token. POST `{apiUrl}/{auth_path}/auth/refresh` (default path segment: `app`).
44
+ */
45
+ export declare function refresh(apiUrl: string, refreshToken: string, options?: {
46
+ auth_path_prefix?: string;
47
+ fetchFn?: typeof fetch;
48
+ }): Promise<RefreshResponse>;
49
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,4GAA4G;AAC5G,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA2B;;CAIlD;AAED,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAiED;;;GAGG;AACH,wBAAsB,KAAK,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB,GACA,OAAO,CAAC,aAAa,CAAC,CAgDxB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAE,GAC9D,OAAO,CAAC,eAAe,CAAC,CA4C1B"}
@@ -0,0 +1,131 @@
1
+ import { buildAuthServiceUrl } from '../config/api-path.js';
2
+ /**
3
+ * Login and refresh using platform auth endpoints.
4
+ * POST .../{app}/auth/login and POST .../{app}/auth/refresh (first segment = app microservice by default). No token on disk.
5
+ */
6
+ /** Thrown when POST /auth/login returns 403 and the user must supply TOTP (same as the web app for MFA). */
7
+ export class LoginMfaRequiredError extends Error {
8
+ name = 'LoginMfaRequiredError';
9
+ constructor() {
10
+ super('MFA code required');
11
+ }
12
+ }
13
+ const DEFAULT_FETCH = typeof fetch !== 'undefined' ? fetch : undefined;
14
+ /** Undici/Node `fetch` throws `TypeError: fetch failed` with no URL; rethrow with `POST {url}` and `error.cause`. */
15
+ function rethrowNetworkError(method, url, err) {
16
+ const e = err instanceof Error ? err : new Error(String(err));
17
+ const cause = e.cause;
18
+ const causeMsg = cause instanceof Error
19
+ ? cause.message
20
+ : cause !== undefined && cause !== null
21
+ ? String(cause)
22
+ : '';
23
+ const tail = [e.message, causeMsg].filter(s => s.length > 0).join(' — ');
24
+ throw new Error(`${method} ${url} failed${tail ? `: ${tail}` : ''}`);
25
+ }
26
+ async function doFetch(method, url, init, fetchFn) {
27
+ try {
28
+ return await fetchFn(url, init);
29
+ }
30
+ catch (e) {
31
+ rethrowNetworkError(method, url, e);
32
+ }
33
+ }
34
+ function isMfaRequiredResponse(status, json) {
35
+ if (status !== 403)
36
+ return false;
37
+ if (json.mfaRequired === true)
38
+ return true;
39
+ const e = json.error;
40
+ if (e && typeof e === 'object') {
41
+ if (e.details?.mfaRequired === true)
42
+ return true;
43
+ if (e.context?.mfaRequired === true)
44
+ return true;
45
+ if (typeof e.message === 'string' && /\bmfa\b/i.test(e.message))
46
+ return true;
47
+ }
48
+ if (typeof e === 'string' && /\bmfa\b/i.test(e))
49
+ return true;
50
+ return false;
51
+ }
52
+ function getLoginErrorMessage(json, res) {
53
+ const e = json.error;
54
+ if (typeof e === 'string' && e.trim())
55
+ return e;
56
+ if (e && typeof e === 'object' && typeof e.message === 'string' && e.message.trim()) {
57
+ return e.message;
58
+ }
59
+ return res.statusText;
60
+ }
61
+ /**
62
+ * Login with email/password. POST `{apiUrl}/{auth_path}/auth/login` (default `auth_path` = `app`).
63
+ * Returns tokens; caller should set them in TokenManager (no disk).
64
+ */
65
+ export async function login(apiUrl, email, password, options) {
66
+ const base = apiUrl.replace(/\/$/, '');
67
+ const url = buildAuthServiceUrl(base, options?.auth_path_prefix, '/auth/login');
68
+ const body = {
69
+ email,
70
+ password,
71
+ ...(options?.organization_id && { organization_id: options.organization_id }),
72
+ ...(options?.mfa_code && { mfa_code: options.mfa_code }),
73
+ };
74
+ const fetchFn = options?.fetchFn ?? DEFAULT_FETCH;
75
+ if (!fetchFn)
76
+ throw new Error('fetch not available');
77
+ const res = await doFetch('POST', url, {
78
+ method: 'POST',
79
+ headers: { 'Content-Type': 'application/json' },
80
+ body: JSON.stringify(body),
81
+ }, fetchFn);
82
+ const json = (await res.json());
83
+ if (!res.ok) {
84
+ if (isMfaRequiredResponse(res.status, json)) {
85
+ throw new LoginMfaRequiredError();
86
+ }
87
+ const msg = getLoginErrorMessage(json, res);
88
+ throw new Error(String(msg));
89
+ }
90
+ const payload = json?.data;
91
+ if (!payload?.access_token)
92
+ throw new Error('Invalid login response');
93
+ return {
94
+ access_token: payload.access_token,
95
+ refresh_token: payload.refresh_token,
96
+ expires_in: payload.expires_in ?? 3600,
97
+ expires_at: payload.expires_at ?? '',
98
+ ...(payload.aws_credentials ? { aws_credentials: payload.aws_credentials } : {}),
99
+ };
100
+ }
101
+ /**
102
+ * Refresh access token. POST `{apiUrl}/{auth_path}/auth/refresh` (default path segment: `app`).
103
+ */
104
+ export async function refresh(apiUrl, refreshToken, options) {
105
+ const base = apiUrl.replace(/\/$/, '');
106
+ const url = buildAuthServiceUrl(base, options?.auth_path_prefix, '/auth/refresh');
107
+ const fetchFn = options?.fetchFn ?? DEFAULT_FETCH;
108
+ if (!fetchFn)
109
+ throw new Error('fetch not available');
110
+ const res = await doFetch('POST', url, {
111
+ method: 'POST',
112
+ headers: { 'Content-Type': 'application/json' },
113
+ body: JSON.stringify({ refresh_token: refreshToken }),
114
+ }, fetchFn);
115
+ const json = (await res.json());
116
+ if (!res.ok) {
117
+ const msg = json?.error ?? res.statusText;
118
+ throw new Error(String(msg));
119
+ }
120
+ const payload = json.success && json.data && typeof json.data === 'object' ? json.data : json;
121
+ if (!payload?.access_token)
122
+ throw new Error('Invalid refresh response');
123
+ return {
124
+ access_token: payload.access_token,
125
+ refresh_token: payload.refresh_token ?? refreshToken,
126
+ expires_in: payload.expires_in ?? 3600,
127
+ expires_at: payload.expires_at ?? '',
128
+ ...(payload.aws_credentials ? { aws_credentials: payload.aws_credentials } : {}),
129
+ };
130
+ }
131
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface TokenState {
2
+ access_token: string;
3
+ refresh_token?: string;
4
+ expires_at?: number;
5
+ }
6
+ /**
7
+ * In-memory token manager. No token persisted to disk.
8
+ * setToken, getToken, shouldRefresh, getTokenOrRefresh (with optional refresh fetcher).
9
+ */
10
+ export declare class TokenManager {
11
+ private state;
12
+ setToken(access_token: string, refresh_token?: string, expires_at?: number): void;
13
+ getToken(): string | null;
14
+ getRefreshToken(): string | null;
15
+ clear(): void;
16
+ /**
17
+ * True if access token is missing or expires within thresholdSeconds.
18
+ */
19
+ shouldRefresh(thresholdSeconds?: number): boolean;
20
+ /**
21
+ * Return access token, or refresh if shouldRefresh(thresholdSeconds) and refresh_token exists.
22
+ * refreshFn(apiUrl, refresh_token) must return { access_token, refresh_token?, expires_in }.
23
+ */
24
+ getTokenOrRefresh(apiUrl: string, thresholdSeconds: number | undefined, refreshFn: (apiUrl: string, refreshToken: string) => Promise<{
25
+ access_token: string;
26
+ refresh_token?: string;
27
+ expires_in?: number;
28
+ }>): Promise<string | null>;
29
+ }
30
+ //# sourceMappingURL=token-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA2B;IAExC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAQjF,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,aAAa,CAAC,gBAAgB,GAAE,MAA0C,GAAG,OAAO;IASpF;;;OAGG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,YAAoC,EAC5D,SAAS,EAAE,CACT,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,GACD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAgB1B"}
@@ -0,0 +1,61 @@
1
+ import { decodeJwtPayload, DEFAULT_REFRESH_THRESHOLD_SECONDS } from './jwt.js';
2
+ /**
3
+ * In-memory token manager. No token persisted to disk.
4
+ * setToken, getToken, shouldRefresh, getTokenOrRefresh (with optional refresh fetcher).
5
+ */
6
+ export class TokenManager {
7
+ state = null;
8
+ setToken(access_token, refresh_token, expires_at) {
9
+ this.state = {
10
+ access_token,
11
+ refresh_token,
12
+ expires_at,
13
+ };
14
+ }
15
+ getToken() {
16
+ return this.state?.access_token ?? null;
17
+ }
18
+ getRefreshToken() {
19
+ return this.state?.refresh_token ?? null;
20
+ }
21
+ clear() {
22
+ this.state = null;
23
+ }
24
+ /**
25
+ * True if access token is missing or expires within thresholdSeconds.
26
+ */
27
+ shouldRefresh(thresholdSeconds = DEFAULT_REFRESH_THRESHOLD_SECONDS) {
28
+ const token = this.state?.access_token;
29
+ if (!token)
30
+ return true;
31
+ const { exp } = decodeJwtPayload(token);
32
+ if (exp == null)
33
+ return false; // No exp claim → don't refresh
34
+ const now = Math.floor(Date.now() / 1000);
35
+ return exp - now < thresholdSeconds;
36
+ }
37
+ /**
38
+ * Return access token, or refresh if shouldRefresh(thresholdSeconds) and refresh_token exists.
39
+ * refreshFn(apiUrl, refresh_token) must return { access_token, refresh_token?, expires_in }.
40
+ */
41
+ async getTokenOrRefresh(apiUrl, thresholdSeconds = DEFAULT_REFRESH_THRESHOLD_SECONDS, refreshFn) {
42
+ const token = this.getToken();
43
+ if (!token)
44
+ return null;
45
+ if (!this.shouldRefresh(thresholdSeconds))
46
+ return token;
47
+ const refreshToken = this.getRefreshToken();
48
+ if (!refreshToken)
49
+ return token; // No refresh token, return current
50
+ try {
51
+ const result = await refreshFn(apiUrl.replace(/\/$/, ''), refreshToken);
52
+ const expiresAt = result.expires_in != null ? Math.floor(Date.now() / 1000) + result.expires_in : undefined;
53
+ this.setToken(result.access_token, result.refresh_token ?? refreshToken, expiresAt);
54
+ return this.state?.access_token ?? null;
55
+ }
56
+ catch {
57
+ return token; // On refresh failure, return current token
58
+ }
59
+ }
60
+ }
61
+ //# sourceMappingURL=token-manager.js.map