@the-open-engine/zeroshot 6.28.0 → 6.29.1

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 (283) hide show
  1. package/README.md +3 -3
  2. package/cli/index.js +20 -224
  3. package/docker/zeroshot-cluster/Dockerfile +2 -3
  4. package/lib/cluster/client.cjs +30 -7
  5. package/lib/cluster/client.d.cts +52 -0
  6. package/lib/cluster/client.d.mts +52 -0
  7. package/lib/cluster/client.d.ts +4 -6
  8. package/lib/cluster/client.mjs +32 -9
  9. package/lib/cluster/connection-state.cjs +25 -0
  10. package/lib/cluster/connection-state.d.cts +13 -0
  11. package/lib/cluster/connection-state.d.mts +13 -0
  12. package/lib/cluster/connection-state.d.ts +13 -0
  13. package/lib/cluster/connection-state.mjs +21 -0
  14. package/lib/cluster/connection-types.cjs +2 -0
  15. package/lib/cluster/connection-types.d.cts +33 -0
  16. package/lib/cluster/connection-types.d.mts +33 -0
  17. package/lib/cluster/connection-types.d.ts +33 -0
  18. package/lib/cluster/connection-types.mjs +1 -0
  19. package/lib/cluster/connection.cjs +18 -46
  20. package/lib/cluster/connection.d.cts +26 -0
  21. package/lib/cluster/connection.d.mts +26 -0
  22. package/lib/cluster/connection.d.ts +7 -25
  23. package/lib/cluster/connection.mjs +12 -42
  24. package/lib/cluster/errors.cjs +9 -1
  25. package/lib/cluster/errors.d.cts +29 -0
  26. package/lib/cluster/errors.d.mts +29 -0
  27. package/lib/cluster/errors.d.ts +4 -0
  28. package/lib/cluster/errors.mjs +7 -0
  29. package/lib/cluster/frames.d.cts +12 -0
  30. package/lib/cluster/frames.d.mts +12 -0
  31. package/lib/cluster/generated/protocol-schema.d.cts +1 -0
  32. package/lib/cluster/generated/protocol-schema.d.mts +1 -0
  33. package/lib/cluster/generated/protocol.d.cts +781 -0
  34. package/lib/cluster/generated/protocol.d.mts +781 -0
  35. package/lib/cluster/index.cjs +2 -2
  36. package/lib/cluster/index.d.cts +13 -0
  37. package/lib/cluster/index.d.mts +13 -0
  38. package/lib/cluster/index.d.ts +3 -3
  39. package/lib/cluster/index.mjs +2 -2
  40. package/lib/cluster/json-source.cjs +1 -0
  41. package/lib/cluster/json-source.d.cts +5 -0
  42. package/lib/cluster/json-source.d.mts +5 -0
  43. package/lib/cluster/json-source.d.ts +1 -0
  44. package/lib/cluster/json-source.mjs +1 -0
  45. package/lib/cluster/payload-value.cjs +1 -0
  46. package/lib/cluster/payload-value.d.cts +8 -0
  47. package/lib/cluster/payload-value.d.mts +8 -0
  48. package/lib/cluster/payload-value.d.ts +1 -0
  49. package/lib/cluster/payload-value.mjs +1 -0
  50. package/lib/cluster/queue.d.cts +15 -0
  51. package/lib/cluster/queue.d.mts +15 -0
  52. package/lib/cluster/socket.cjs +8 -0
  53. package/lib/cluster/socket.d.cts +13 -0
  54. package/lib/cluster/socket.d.mts +13 -0
  55. package/lib/cluster/socket.d.ts +2 -0
  56. package/lib/cluster/socket.mjs +7 -0
  57. package/lib/cluster/subscriptions.d.cts +73 -0
  58. package/lib/cluster/subscriptions.d.mts +73 -0
  59. package/lib/cluster/subscriptions.d.ts +5 -1
  60. package/lib/cluster/validators.cjs +1 -0
  61. package/lib/cluster/validators.d.cts +7 -0
  62. package/lib/cluster/validators.d.mts +7 -0
  63. package/lib/cluster/validators.d.ts +1 -0
  64. package/lib/cluster/validators.mjs +1 -0
  65. package/lib/cluster-worker/engine-adapter.js +1 -11
  66. package/lib/cluster-worker/engine-input.js +14 -0
  67. package/lib/hosted-session/authority.cjs +61 -0
  68. package/lib/hosted-session/authority.d.cts +3 -0
  69. package/lib/hosted-session/authority.d.mts +3 -0
  70. package/lib/hosted-session/authority.d.ts +3 -0
  71. package/lib/hosted-session/authority.mjs +57 -0
  72. package/lib/hosted-session/coordinator.cjs +78 -51
  73. package/lib/hosted-session/coordinator.d.cts +11 -0
  74. package/lib/hosted-session/coordinator.d.mts +11 -0
  75. package/lib/hosted-session/coordinator.d.ts +4 -2
  76. package/lib/hosted-session/coordinator.mjs +75 -51
  77. package/lib/hosted-session/errors.cjs +25 -0
  78. package/lib/hosted-session/errors.d.cts +10 -0
  79. package/lib/hosted-session/errors.d.mts +10 -0
  80. package/lib/hosted-session/errors.d.ts +10 -0
  81. package/lib/hosted-session/errors.mjs +19 -0
  82. package/lib/hosted-session/index.cjs +4 -1
  83. package/lib/hosted-session/index.d.cts +2 -0
  84. package/lib/hosted-session/index.d.mts +2 -0
  85. package/lib/hosted-session/index.d.ts +2 -2
  86. package/lib/hosted-session/index.mjs +1 -1
  87. package/lib/hosted-session/reconnecting-watch.cjs +131 -0
  88. package/lib/hosted-session/reconnecting-watch.d.cts +13 -0
  89. package/lib/hosted-session/reconnecting-watch.d.mts +13 -0
  90. package/lib/hosted-session/reconnecting-watch.d.ts +13 -0
  91. package/lib/hosted-session/reconnecting-watch.mjs +127 -0
  92. package/lib/hosted-session/types.d.cts +32 -0
  93. package/lib/hosted-session/types.d.mts +32 -0
  94. package/lib/hosted-session/types.d.ts +19 -7
  95. package/lib/hosted-target/access-url.cjs +44 -0
  96. package/lib/hosted-target/access-url.d.cts +2 -0
  97. package/lib/hosted-target/access-url.d.mts +2 -0
  98. package/lib/hosted-target/access-url.d.ts +2 -0
  99. package/lib/hosted-target/access-url.mjs +41 -0
  100. package/lib/hosted-target/adapter-request.cjs +12 -0
  101. package/lib/hosted-target/adapter-request.d.cts +17 -0
  102. package/lib/hosted-target/adapter-request.d.mts +17 -0
  103. package/lib/hosted-target/adapter-request.d.ts +17 -0
  104. package/lib/hosted-target/adapter-request.mjs +9 -0
  105. package/lib/hosted-target/adapter-types.cjs +2 -0
  106. package/lib/hosted-target/adapter-types.d.cts +27 -0
  107. package/lib/hosted-target/adapter-types.d.mts +27 -0
  108. package/lib/hosted-target/adapter-types.d.ts +27 -0
  109. package/lib/hosted-target/adapter-types.mjs +1 -0
  110. package/lib/hosted-target/bounds.cjs +10 -0
  111. package/lib/hosted-target/bounds.d.cts +7 -0
  112. package/lib/hosted-target/bounds.d.mts +7 -0
  113. package/lib/hosted-target/bounds.d.ts +7 -0
  114. package/lib/hosted-target/bounds.mjs +7 -0
  115. package/lib/hosted-target/capsule-error-response.cjs +76 -0
  116. package/lib/hosted-target/capsule-error-response.d.cts +2 -0
  117. package/lib/hosted-target/capsule-error-response.d.mts +2 -0
  118. package/lib/hosted-target/capsule-error-response.d.ts +2 -0
  119. package/lib/hosted-target/capsule-error-response.mjs +73 -0
  120. package/lib/hosted-target/errors.cjs +88 -0
  121. package/lib/hosted-target/errors.d.cts +36 -0
  122. package/lib/hosted-target/errors.d.mts +36 -0
  123. package/lib/hosted-target/errors.d.ts +36 -0
  124. package/lib/hosted-target/errors.mjs +75 -0
  125. package/lib/hosted-target/index.cjs +16 -0
  126. package/lib/hosted-target/index.d.cts +3 -0
  127. package/lib/hosted-target/index.d.mts +3 -0
  128. package/lib/hosted-target/index.d.ts +3 -0
  129. package/lib/hosted-target/index.mjs +2 -0
  130. package/lib/hosted-target/response-validation.cjs +169 -0
  131. package/lib/hosted-target/response-validation.d.cts +5 -0
  132. package/lib/hosted-target/response-validation.d.mts +5 -0
  133. package/lib/hosted-target/response-validation.d.ts +5 -0
  134. package/lib/hosted-target/response-validation.mjs +163 -0
  135. package/lib/hosted-target/retry-executor.cjs +51 -0
  136. package/lib/hosted-target/retry-executor.d.cts +8 -0
  137. package/lib/hosted-target/retry-executor.d.mts +8 -0
  138. package/lib/hosted-target/retry-executor.d.ts +8 -0
  139. package/lib/hosted-target/retry-executor.mjs +48 -0
  140. package/lib/hosted-target/retry.cjs +78 -0
  141. package/lib/hosted-target/retry.d.cts +9 -0
  142. package/lib/hosted-target/retry.d.mts +9 -0
  143. package/lib/hosted-target/retry.d.ts +9 -0
  144. package/lib/hosted-target/retry.mjs +73 -0
  145. package/lib/hosted-target/target-adapter.cjs +10 -0
  146. package/lib/hosted-target/target-adapter.d.cts +3 -0
  147. package/lib/hosted-target/target-adapter.d.mts +3 -0
  148. package/lib/hosted-target/target-adapter.d.ts +3 -0
  149. package/lib/hosted-target/target-adapter.mjs +7 -0
  150. package/lib/hosted-target/types.cjs +4 -0
  151. package/lib/hosted-target/types.d.cts +50 -0
  152. package/lib/hosted-target/types.d.mts +50 -0
  153. package/lib/hosted-target/types.d.ts +50 -0
  154. package/lib/hosted-target/types.mjs +1 -0
  155. package/lib/hosted-target/zero-cloud-v1-adapter.cjs +185 -0
  156. package/lib/hosted-target/zero-cloud-v1-adapter.d.cts +13 -0
  157. package/lib/hosted-target/zero-cloud-v1-adapter.d.mts +13 -0
  158. package/lib/hosted-target/zero-cloud-v1-adapter.d.ts +13 -0
  159. package/lib/hosted-target/zero-cloud-v1-adapter.mjs +181 -0
  160. package/lib/target/bounded-response.cjs +51 -0
  161. package/lib/target/bounded-response.d.cts +1 -0
  162. package/lib/target/bounded-response.d.mts +1 -0
  163. package/lib/target/bounded-response.d.ts +1 -0
  164. package/lib/target/bounded-response.js +51 -0
  165. package/lib/target/bounded-response.mjs +48 -0
  166. package/lib/target/credential-lock.js +1 -3
  167. package/lib/target/credential-store.js +9 -4
  168. package/lib/target/device-flow.cjs +213 -0
  169. package/lib/target/device-flow.d.cts +54 -0
  170. package/lib/target/device-flow.d.mts +54 -0
  171. package/lib/target/device-flow.d.ts +26 -10
  172. package/lib/target/device-flow.js +162 -53
  173. package/lib/target/device-flow.mjs +203 -0
  174. package/lib/target/discovery-errors.cjs +10 -0
  175. package/lib/target/discovery-errors.d.cts +3 -0
  176. package/lib/target/discovery-errors.d.mts +3 -0
  177. package/lib/target/discovery-errors.d.ts +3 -0
  178. package/lib/target/discovery-errors.js +10 -0
  179. package/lib/target/discovery-errors.mjs +6 -0
  180. package/lib/target/discovery-sections.cjs +191 -0
  181. package/lib/target/discovery-sections.d.cts +52 -0
  182. package/lib/target/discovery-sections.d.mts +52 -0
  183. package/lib/target/discovery-sections.d.ts +52 -0
  184. package/lib/target/discovery-sections.js +191 -0
  185. package/lib/target/discovery-sections.mjs +179 -0
  186. package/lib/target/discovery-validation.cjs +109 -0
  187. package/lib/target/discovery-validation.d.cts +28 -0
  188. package/lib/target/discovery-validation.d.mts +28 -0
  189. package/lib/target/discovery-validation.d.ts +28 -0
  190. package/lib/target/discovery-validation.js +109 -0
  191. package/lib/target/discovery-validation.mjs +99 -0
  192. package/lib/target/discovery.cjs +112 -0
  193. package/lib/target/discovery.d.cts +74 -0
  194. package/lib/target/discovery.d.mts +74 -0
  195. package/lib/target/discovery.d.ts +68 -5
  196. package/lib/target/discovery.js +93 -101
  197. package/lib/target/discovery.mjs +105 -0
  198. package/lib/target/index.d.ts +6 -6
  199. package/lib/target/index.js +36 -36
  200. package/lib/target/oauth-http.d.ts +2 -0
  201. package/lib/target/oauth-http.js +25 -0
  202. package/lib/target/refresh-exchange.d.ts +11 -0
  203. package/lib/target/refresh-exchange.js +24 -0
  204. package/lib/target/refresh-revocation.d.ts +8 -0
  205. package/lib/target/refresh-revocation.js +19 -0
  206. package/lib/target/route-template.cjs +85 -0
  207. package/lib/target/route-template.d.cts +7 -0
  208. package/lib/target/route-template.d.mts +7 -0
  209. package/lib/target/route-template.d.ts +7 -0
  210. package/lib/target/route-template.js +85 -0
  211. package/lib/target/route-template.mjs +81 -0
  212. package/lib/target/session-errors.d.ts +4 -0
  213. package/lib/target/session-errors.js +12 -0
  214. package/lib/target/session-verification.d.ts +10 -0
  215. package/lib/target/session-verification.js +42 -0
  216. package/lib/target/target-registry.d.ts +7 -3
  217. package/lib/target/target-registry.js +41 -10
  218. package/lib/target/target-session-manager.d.ts +48 -0
  219. package/lib/target/target-session-manager.js +226 -0
  220. package/lib/target/target-session.d.ts +39 -31
  221. package/lib/target/target-session.js +63 -150
  222. package/lib/target/token-response.cjs +51 -0
  223. package/lib/target/token-response.d.cts +7 -0
  224. package/lib/target/token-response.d.mts +7 -0
  225. package/lib/target/token-response.d.ts +7 -0
  226. package/lib/target/token-response.js +51 -0
  227. package/lib/target/token-response.mjs +48 -0
  228. package/package.json +16 -6
  229. package/scripts/audit-production-dependencies.js +150 -0
  230. package/scripts/build-cluster.js +23 -3
  231. package/scripts/opcore-agent-gate.js +159 -0
  232. package/scripts/opcore-agent-tool-overlays.js +154 -0
  233. package/scripts/opcore-introduced-check.js +288 -0
  234. package/src/cluster/client.ts +42 -15
  235. package/src/cluster/connection-state.ts +33 -0
  236. package/src/cluster/connection-types.ts +28 -0
  237. package/src/cluster/connection.ts +37 -68
  238. package/src/cluster/errors.ts +5 -0
  239. package/src/cluster/index.ts +3 -1
  240. package/src/cluster/json-source.ts +1 -0
  241. package/src/cluster/payload-value.ts +1 -0
  242. package/src/cluster/socket.ts +13 -0
  243. package/src/cluster/subscriptions.ts +7 -2
  244. package/src/cluster/validators.ts +1 -0
  245. package/src/cluster/ws.d.ts +1 -1
  246. package/src/hosted-session/authority.ts +77 -0
  247. package/src/hosted-session/coordinator.ts +113 -56
  248. package/src/hosted-session/errors.ts +21 -0
  249. package/src/hosted-session/index.ts +14 -2
  250. package/src/hosted-session/reconnecting-watch.ts +148 -0
  251. package/src/hosted-session/types.ts +22 -8
  252. package/src/hosted-target/access-url.ts +46 -0
  253. package/src/hosted-target/adapter-request.ts +28 -0
  254. package/src/hosted-target/adapter-types.ts +39 -0
  255. package/src/hosted-target/bounds.ts +1 -0
  256. package/src/hosted-target/capsule-error-response.ts +107 -0
  257. package/src/hosted-target/errors.ts +36 -35
  258. package/src/hosted-target/index.ts +10 -23
  259. package/src/hosted-target/response-validation.ts +170 -62
  260. package/src/hosted-target/retry-executor.ts +62 -0
  261. package/src/hosted-target/retry.ts +47 -11
  262. package/src/hosted-target/target-adapter.ts +12 -8
  263. package/src/hosted-target/types.ts +19 -18
  264. package/src/hosted-target/zero-cloud-v1-adapter.ts +229 -316
  265. package/src/target/bounded-response.ts +68 -0
  266. package/src/target/credential-lock.ts +1 -3
  267. package/src/target/credential-store.ts +14 -10
  268. package/src/target/device-flow.ts +206 -71
  269. package/src/target/discovery-errors.ts +6 -0
  270. package/src/target/discovery-sections.ts +251 -0
  271. package/src/target/discovery-validation.ts +144 -0
  272. package/src/target/discovery.ts +163 -115
  273. package/src/target/index.ts +15 -11
  274. package/src/target/oauth-http.ts +27 -0
  275. package/src/target/refresh-exchange.ts +36 -0
  276. package/src/target/refresh-revocation.ts +29 -0
  277. package/src/target/route-template.ts +105 -0
  278. package/src/target/session-errors.ts +9 -0
  279. package/src/target/session-verification.ts +51 -0
  280. package/src/target/target-registry.ts +60 -27
  281. package/src/target/target-session-manager.ts +285 -0
  282. package/src/target/target-session.ts +105 -222
  283. package/src/target/token-response.ts +62 -0
@@ -1,6 +1,6 @@
1
- export { CredentialStoreUnavailableError, KeyringCredentialStore, FakeCredentialStore, targetServiceKey, TARGET_ACCOUNT, type TargetCredentialStore, } from './credential-store.ts';
2
- export { acquireTargetLock } from './credential-lock.ts';
3
- export { requestDeviceCode, pollForToken, DeviceFlowDeniedError, DeviceFlowExpiredError, UnboundSessionError, type DeviceCodeResponse, type TokenResponse, type HttpTransport, type Clock, } from './device-flow.ts';
4
- export { addTarget, removeTarget, getTarget, listTargets, updateTargetOrganization, validateTargetName, normalizeAndValidateUrl, TargetNameInvalidError, TargetNameExistsError, TargetNotFoundError, TargetUrlInvalidError, type TargetRecord, type SettingsPort, } from './target-registry.ts';
5
- export { targetLogin, refreshAccessToken, getAccessTokenProvider, revokeAndCleanup, LoginRequiredError, type BrowserOpener, type TargetSessionDeps, type TargetAccessTokenProvider, } from './target-session.ts';
6
- export { discoverTargetSessionEndpoints, TargetDiscoveryError, type TargetSessionEndpoints, } from './discovery.ts';
1
+ export { CredentialStoreUnavailableError, KeyringCredentialStore, FakeCredentialStore, targetServiceKey, TARGET_ACCOUNT, type TargetCredentialStore, } from './credential-store.js';
2
+ export { acquireTargetLock } from './credential-lock.js';
3
+ export { requestDeviceCode, pollForToken, parseTokenResponse, DeviceFlowDeniedError, DeviceFlowExpiredError, UnboundSessionError, type DeviceCodeResponse, type DeviceExchangeContext, type TokenResponse, type HttpTransport, type Clock, } from './device-flow.js';
4
+ export { addTarget, removeTarget, getTarget, listTargets, updateTargetOrganization, validateTargetName, normalizeAndValidateUrl, TargetNameInvalidError, TargetNameExistsError, TargetNotFoundError, TargetUrlInvalidError, type TargetRecord, type SettingsPort, } from './target-registry.js';
5
+ export { TargetSessionManager, LoginRequiredError, type BrowserOpener, type TargetSessionDeps, type TargetSessionManagerInit, } from './target-session.js';
6
+ export { discoverTarget, discoverTargetSessionEndpoints, expandRoute, TargetDiscoveryError, type CredentialInstallDescriptor, type RouteTemplate, type TargetDiscoveryDescriptor, type TargetSessionEndpoints, } from './discovery.js';
@@ -1,38 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TargetDiscoveryError = exports.discoverTargetSessionEndpoints = exports.LoginRequiredError = exports.revokeAndCleanup = exports.getAccessTokenProvider = exports.refreshAccessToken = exports.targetLogin = exports.TargetUrlInvalidError = exports.TargetNotFoundError = exports.TargetNameExistsError = exports.TargetNameInvalidError = exports.normalizeAndValidateUrl = exports.validateTargetName = exports.updateTargetOrganization = exports.listTargets = exports.getTarget = exports.removeTarget = exports.addTarget = exports.UnboundSessionError = exports.DeviceFlowExpiredError = exports.DeviceFlowDeniedError = exports.pollForToken = exports.requestDeviceCode = exports.acquireTargetLock = exports.TARGET_ACCOUNT = exports.targetServiceKey = exports.FakeCredentialStore = exports.KeyringCredentialStore = exports.CredentialStoreUnavailableError = void 0;
4
- var credential_store_ts_1 = require("./credential-store.js");
5
- Object.defineProperty(exports, "CredentialStoreUnavailableError", { enumerable: true, get: function () { return credential_store_ts_1.CredentialStoreUnavailableError; } });
6
- Object.defineProperty(exports, "KeyringCredentialStore", { enumerable: true, get: function () { return credential_store_ts_1.KeyringCredentialStore; } });
7
- Object.defineProperty(exports, "FakeCredentialStore", { enumerable: true, get: function () { return credential_store_ts_1.FakeCredentialStore; } });
8
- Object.defineProperty(exports, "targetServiceKey", { enumerable: true, get: function () { return credential_store_ts_1.targetServiceKey; } });
9
- Object.defineProperty(exports, "TARGET_ACCOUNT", { enumerable: true, get: function () { return credential_store_ts_1.TARGET_ACCOUNT; } });
10
- var credential_lock_ts_1 = require("./credential-lock.js");
11
- Object.defineProperty(exports, "acquireTargetLock", { enumerable: true, get: function () { return credential_lock_ts_1.acquireTargetLock; } });
12
- var device_flow_ts_1 = require("./device-flow.js");
13
- Object.defineProperty(exports, "requestDeviceCode", { enumerable: true, get: function () { return device_flow_ts_1.requestDeviceCode; } });
14
- Object.defineProperty(exports, "pollForToken", { enumerable: true, get: function () { return device_flow_ts_1.pollForToken; } });
15
- Object.defineProperty(exports, "DeviceFlowDeniedError", { enumerable: true, get: function () { return device_flow_ts_1.DeviceFlowDeniedError; } });
16
- Object.defineProperty(exports, "DeviceFlowExpiredError", { enumerable: true, get: function () { return device_flow_ts_1.DeviceFlowExpiredError; } });
17
- Object.defineProperty(exports, "UnboundSessionError", { enumerable: true, get: function () { return device_flow_ts_1.UnboundSessionError; } });
18
- var target_registry_ts_1 = require("./target-registry.js");
19
- Object.defineProperty(exports, "addTarget", { enumerable: true, get: function () { return target_registry_ts_1.addTarget; } });
20
- Object.defineProperty(exports, "removeTarget", { enumerable: true, get: function () { return target_registry_ts_1.removeTarget; } });
21
- Object.defineProperty(exports, "getTarget", { enumerable: true, get: function () { return target_registry_ts_1.getTarget; } });
22
- Object.defineProperty(exports, "listTargets", { enumerable: true, get: function () { return target_registry_ts_1.listTargets; } });
23
- Object.defineProperty(exports, "updateTargetOrganization", { enumerable: true, get: function () { return target_registry_ts_1.updateTargetOrganization; } });
24
- Object.defineProperty(exports, "validateTargetName", { enumerable: true, get: function () { return target_registry_ts_1.validateTargetName; } });
25
- Object.defineProperty(exports, "normalizeAndValidateUrl", { enumerable: true, get: function () { return target_registry_ts_1.normalizeAndValidateUrl; } });
26
- Object.defineProperty(exports, "TargetNameInvalidError", { enumerable: true, get: function () { return target_registry_ts_1.TargetNameInvalidError; } });
27
- Object.defineProperty(exports, "TargetNameExistsError", { enumerable: true, get: function () { return target_registry_ts_1.TargetNameExistsError; } });
28
- Object.defineProperty(exports, "TargetNotFoundError", { enumerable: true, get: function () { return target_registry_ts_1.TargetNotFoundError; } });
29
- Object.defineProperty(exports, "TargetUrlInvalidError", { enumerable: true, get: function () { return target_registry_ts_1.TargetUrlInvalidError; } });
30
- var target_session_ts_1 = require("./target-session.js");
31
- Object.defineProperty(exports, "targetLogin", { enumerable: true, get: function () { return target_session_ts_1.targetLogin; } });
32
- Object.defineProperty(exports, "refreshAccessToken", { enumerable: true, get: function () { return target_session_ts_1.refreshAccessToken; } });
33
- Object.defineProperty(exports, "getAccessTokenProvider", { enumerable: true, get: function () { return target_session_ts_1.getAccessTokenProvider; } });
34
- Object.defineProperty(exports, "revokeAndCleanup", { enumerable: true, get: function () { return target_session_ts_1.revokeAndCleanup; } });
35
- Object.defineProperty(exports, "LoginRequiredError", { enumerable: true, get: function () { return target_session_ts_1.LoginRequiredError; } });
36
- var discovery_ts_1 = require("./discovery.js");
37
- Object.defineProperty(exports, "discoverTargetSessionEndpoints", { enumerable: true, get: function () { return discovery_ts_1.discoverTargetSessionEndpoints; } });
38
- Object.defineProperty(exports, "TargetDiscoveryError", { enumerable: true, get: function () { return discovery_ts_1.TargetDiscoveryError; } });
3
+ exports.TargetDiscoveryError = exports.expandRoute = exports.discoverTargetSessionEndpoints = exports.discoverTarget = exports.LoginRequiredError = exports.TargetSessionManager = exports.TargetUrlInvalidError = exports.TargetNotFoundError = exports.TargetNameExistsError = exports.TargetNameInvalidError = exports.normalizeAndValidateUrl = exports.validateTargetName = exports.updateTargetOrganization = exports.listTargets = exports.getTarget = exports.removeTarget = exports.addTarget = exports.UnboundSessionError = exports.DeviceFlowExpiredError = exports.DeviceFlowDeniedError = exports.parseTokenResponse = exports.pollForToken = exports.requestDeviceCode = exports.acquireTargetLock = exports.TARGET_ACCOUNT = exports.targetServiceKey = exports.FakeCredentialStore = exports.KeyringCredentialStore = exports.CredentialStoreUnavailableError = void 0;
4
+ var credential_store_js_1 = require("./credential-store.js");
5
+ Object.defineProperty(exports, "CredentialStoreUnavailableError", { enumerable: true, get: function () { return credential_store_js_1.CredentialStoreUnavailableError; } });
6
+ Object.defineProperty(exports, "KeyringCredentialStore", { enumerable: true, get: function () { return credential_store_js_1.KeyringCredentialStore; } });
7
+ Object.defineProperty(exports, "FakeCredentialStore", { enumerable: true, get: function () { return credential_store_js_1.FakeCredentialStore; } });
8
+ Object.defineProperty(exports, "targetServiceKey", { enumerable: true, get: function () { return credential_store_js_1.targetServiceKey; } });
9
+ Object.defineProperty(exports, "TARGET_ACCOUNT", { enumerable: true, get: function () { return credential_store_js_1.TARGET_ACCOUNT; } });
10
+ var credential_lock_js_1 = require("./credential-lock.js");
11
+ Object.defineProperty(exports, "acquireTargetLock", { enumerable: true, get: function () { return credential_lock_js_1.acquireTargetLock; } });
12
+ var device_flow_js_1 = require("./device-flow.js");
13
+ Object.defineProperty(exports, "requestDeviceCode", { enumerable: true, get: function () { return device_flow_js_1.requestDeviceCode; } });
14
+ Object.defineProperty(exports, "pollForToken", { enumerable: true, get: function () { return device_flow_js_1.pollForToken; } });
15
+ Object.defineProperty(exports, "parseTokenResponse", { enumerable: true, get: function () { return device_flow_js_1.parseTokenResponse; } });
16
+ Object.defineProperty(exports, "DeviceFlowDeniedError", { enumerable: true, get: function () { return device_flow_js_1.DeviceFlowDeniedError; } });
17
+ Object.defineProperty(exports, "DeviceFlowExpiredError", { enumerable: true, get: function () { return device_flow_js_1.DeviceFlowExpiredError; } });
18
+ Object.defineProperty(exports, "UnboundSessionError", { enumerable: true, get: function () { return device_flow_js_1.UnboundSessionError; } });
19
+ var target_registry_js_1 = require("./target-registry.js");
20
+ Object.defineProperty(exports, "addTarget", { enumerable: true, get: function () { return target_registry_js_1.addTarget; } });
21
+ Object.defineProperty(exports, "removeTarget", { enumerable: true, get: function () { return target_registry_js_1.removeTarget; } });
22
+ Object.defineProperty(exports, "getTarget", { enumerable: true, get: function () { return target_registry_js_1.getTarget; } });
23
+ Object.defineProperty(exports, "listTargets", { enumerable: true, get: function () { return target_registry_js_1.listTargets; } });
24
+ Object.defineProperty(exports, "updateTargetOrganization", { enumerable: true, get: function () { return target_registry_js_1.updateTargetOrganization; } });
25
+ Object.defineProperty(exports, "validateTargetName", { enumerable: true, get: function () { return target_registry_js_1.validateTargetName; } });
26
+ Object.defineProperty(exports, "normalizeAndValidateUrl", { enumerable: true, get: function () { return target_registry_js_1.normalizeAndValidateUrl; } });
27
+ Object.defineProperty(exports, "TargetNameInvalidError", { enumerable: true, get: function () { return target_registry_js_1.TargetNameInvalidError; } });
28
+ Object.defineProperty(exports, "TargetNameExistsError", { enumerable: true, get: function () { return target_registry_js_1.TargetNameExistsError; } });
29
+ Object.defineProperty(exports, "TargetNotFoundError", { enumerable: true, get: function () { return target_registry_js_1.TargetNotFoundError; } });
30
+ Object.defineProperty(exports, "TargetUrlInvalidError", { enumerable: true, get: function () { return target_registry_js_1.TargetUrlInvalidError; } });
31
+ var target_session_js_1 = require("./target-session.js");
32
+ Object.defineProperty(exports, "TargetSessionManager", { enumerable: true, get: function () { return target_session_js_1.TargetSessionManager; } });
33
+ Object.defineProperty(exports, "LoginRequiredError", { enumerable: true, get: function () { return target_session_js_1.LoginRequiredError; } });
34
+ var discovery_js_1 = require("./discovery.js");
35
+ Object.defineProperty(exports, "discoverTarget", { enumerable: true, get: function () { return discovery_js_1.discoverTarget; } });
36
+ Object.defineProperty(exports, "discoverTargetSessionEndpoints", { enumerable: true, get: function () { return discovery_js_1.discoverTargetSessionEndpoints; } });
37
+ Object.defineProperty(exports, "expandRoute", { enumerable: true, get: function () { return discovery_js_1.expandRoute; } });
38
+ Object.defineProperty(exports, "TargetDiscoveryError", { enumerable: true, get: function () { return discovery_js_1.TargetDiscoveryError; } });
@@ -0,0 +1,2 @@
1
+ export declare function readTargetSessionJson(response: Response): Promise<unknown>;
2
+ export declare function readOAuthError(response: Response): Promise<string | null>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readTargetSessionJson = readTargetSessionJson;
4
+ exports.readOAuthError = readOAuthError;
5
+ const bounded_response_js_1 = require("./bounded-response.js");
6
+ const MAX_SESSION_RESPONSE_BYTES = 64 * 1024;
7
+ async function readTargetSessionJson(response) {
8
+ return (0, bounded_response_js_1.readBoundedResponseJson)(response, MAX_SESSION_RESPONSE_BYTES, (kind) => new Error(kind === 'size'
9
+ ? 'Target session response exceeds the size limit'
10
+ : 'Target session response is malformed'));
11
+ }
12
+ async function readOAuthError(response) {
13
+ try {
14
+ const value = await readTargetSessionJson(response);
15
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
16
+ return null;
17
+ const record = value;
18
+ return Object.keys(record).length === 1 && typeof record.error === 'string'
19
+ ? record.error
20
+ : null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
@@ -0,0 +1,11 @@
1
+ import { type HttpTransport } from './device-flow.js';
2
+ import { type TokenResponse } from './token-response.js';
3
+ export interface RefreshExchangeRequest {
4
+ readonly tokenEndpoint: string;
5
+ readonly clientId: string;
6
+ readonly refreshToken: string;
7
+ readonly audience: string;
8
+ readonly http: HttpTransport;
9
+ readonly signal?: AbortSignal;
10
+ }
11
+ export declare function exchangeRefreshToken(request: RefreshExchangeRequest): Promise<TokenResponse>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exchangeRefreshToken = exchangeRefreshToken;
4
+ const device_flow_js_1 = require("./device-flow.js");
5
+ const oauth_http_js_1 = require("./oauth-http.js");
6
+ const token_response_js_1 = require("./token-response.js");
7
+ async function exchangeRefreshToken(request) {
8
+ const body = new URLSearchParams({
9
+ grant_type: 'refresh_token',
10
+ client_id: request.clientId,
11
+ refresh_token: request.refreshToken,
12
+ audience: request.audience,
13
+ });
14
+ const response = await request.http.fetch(request.tokenEndpoint, (0, device_flow_js_1.oauthFormRequest)(body, request.signal));
15
+ if (response.url && new URL(response.url).href !== request.tokenEndpoint) {
16
+ await response.body?.cancel().catch(() => undefined);
17
+ throw new Error('Target token response changed route or authority');
18
+ }
19
+ if (!response.ok) {
20
+ await (0, oauth_http_js_1.readOAuthError)(response);
21
+ throw new Error('Target token exchange failed');
22
+ }
23
+ return (0, token_response_js_1.parseTokenResponse)(await (0, oauth_http_js_1.readTargetSessionJson)(response));
24
+ }
@@ -0,0 +1,8 @@
1
+ import { type HttpTransport } from './device-flow.js';
2
+ import type { TargetSessionEndpoints } from './discovery.js';
3
+ interface RevocationDeps {
4
+ readonly http: HttpTransport;
5
+ readonly discoveryEndpoints: TargetSessionEndpoints;
6
+ }
7
+ export declare function revokeRefreshToken(token: string, deps: RevocationDeps): Promise<Response>;
8
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.revokeRefreshToken = revokeRefreshToken;
4
+ const device_flow_js_1 = require("./device-flow.js");
5
+ async function revokeRefreshToken(token, deps) {
6
+ const body = new URLSearchParams({
7
+ token,
8
+ client_id: deps.discoveryEndpoints.clientId,
9
+ token_type_hint: 'refresh_token',
10
+ });
11
+ const response = await deps.http.fetch(deps.discoveryEndpoints.revocationEndpoint, (0, device_flow_js_1.oauthFormRequest)(body));
12
+ if (response.url &&
13
+ new URL(response.url).href !== deps.discoveryEndpoints.revocationEndpoint) {
14
+ await response.body?.cancel().catch(() => undefined);
15
+ throw new Error('Target revocation response changed route or authority');
16
+ }
17
+ await response.body?.cancel().catch(() => undefined);
18
+ return response;
19
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.routeTemplate = routeTemplate;
4
+ exports.expandRoute = expandRoute;
5
+ const discovery_errors_js_1 = require("./discovery-errors.cjs");
6
+ function expandCompiled(template, variables, values) {
7
+ const supplied = Object.keys(values).filter((key) => values[key] !== undefined);
8
+ if (supplied.some((key) => !variables.includes(key))) {
9
+ throw new discovery_errors_js_1.TargetDiscoveryError('route expansion supplied an undeclared variable');
10
+ }
11
+ let expanded = template.replace(/\{\?([^}]+)\}/g, (_match, names) => {
12
+ const params = names.split(',').flatMap((name) => {
13
+ const value = values[name];
14
+ return value === undefined
15
+ ? []
16
+ : [`${encodeURIComponent(name)}=${encodeURIComponent(String(value))}`];
17
+ });
18
+ return params.length === 0 ? '' : `?${params.join('&')}`;
19
+ });
20
+ expanded = expanded.replace(/\{([^}?][^}]*)\}/g, (_match, name) => {
21
+ const value = values[name];
22
+ if (value === undefined)
23
+ throw new discovery_errors_js_1.TargetDiscoveryError(`route expansion is missing ${name}`);
24
+ const opaque = String(value);
25
+ if (opaque === '.' || opaque === '..') {
26
+ throw new discovery_errors_js_1.TargetDiscoveryError('route expansion contains a structural dot segment');
27
+ }
28
+ return encodeURIComponent(opaque);
29
+ });
30
+ if (/[{}]/.test(expanded)) {
31
+ throw new discovery_errors_js_1.TargetDiscoveryError('route expansion left an unexpanded variable');
32
+ }
33
+ const canonical = new URL(expanded, 'https://route-validation.invalid');
34
+ if (canonical.origin !== 'https://route-validation.invalid' ||
35
+ `${canonical.pathname}${canonical.search}` !== expanded) {
36
+ throw new discovery_errors_js_1.TargetDiscoveryError('route expansion changed during URL canonicalization');
37
+ }
38
+ return expanded;
39
+ }
40
+ function isUnsafeTemplate(value) {
41
+ return typeof value !== 'string' || !value.startsWith('/') || value.startsWith('//') ||
42
+ value.includes('\\') || value.includes('#') || /[\u0000-\u0020\u007f]/.test(value) ||
43
+ value.replace(/\{\?[^}]+\}/g, '').includes('?');
44
+ }
45
+ function expressionNames(expressions, field) {
46
+ const found = [];
47
+ for (const expression of expressions) {
48
+ const body = expression[1];
49
+ if (body === undefined)
50
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} contains an invalid expression`);
51
+ const query = body.startsWith('?');
52
+ const names = body.replace(/^\?/, '').split(',');
53
+ if (query && field !== 'capsule_protocol.route_templates.list') {
54
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} contains an unsupported query expansion`);
55
+ }
56
+ found.push(...names);
57
+ }
58
+ return found;
59
+ }
60
+ function routeTemplate(value, field, variables) {
61
+ if (isUnsafeTemplate(value)) {
62
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} must be a safe relative route template`);
63
+ }
64
+ const template = value;
65
+ const expressions = [...template.matchAll(/\{([^{}]+)\}/g)];
66
+ const stripped = template.replace(/\{[^{}]+\}/g, '');
67
+ if (stripped.includes('{') || stripped.includes('}') ||
68
+ /(^|\/)(?:\.|%2e){1,2}(?:\/|$)/i.test(stripped)) {
69
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} contains an unsafe template expression`);
70
+ }
71
+ const found = expressionNames(expressions, field);
72
+ if (found.length !== variables.length || new Set(found).size !== found.length ||
73
+ variables.some((name) => !found.includes(name))) {
74
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} declares unsupported variables`);
75
+ }
76
+ const compiledVariables = Object.freeze([...variables]);
77
+ return Object.freeze({
78
+ template,
79
+ variables: compiledVariables,
80
+ expand: (values) => expandCompiled(template, compiledVariables, values),
81
+ });
82
+ }
83
+ function expandRoute(template, values) {
84
+ return template.expand(values);
85
+ }
@@ -0,0 +1,7 @@
1
+ export interface RouteTemplate {
2
+ readonly template: string;
3
+ readonly variables: readonly string[];
4
+ expand(values: Readonly<Record<string, string | number | undefined>>): string;
5
+ }
6
+ export declare function routeTemplate(value: unknown, field: string, variables: readonly string[]): RouteTemplate;
7
+ export declare function expandRoute(template: RouteTemplate, values: Readonly<Record<string, string | number | undefined>>): string;
@@ -0,0 +1,7 @@
1
+ export interface RouteTemplate {
2
+ readonly template: string;
3
+ readonly variables: readonly string[];
4
+ expand(values: Readonly<Record<string, string | number | undefined>>): string;
5
+ }
6
+ export declare function routeTemplate(value: unknown, field: string, variables: readonly string[]): RouteTemplate;
7
+ export declare function expandRoute(template: RouteTemplate, values: Readonly<Record<string, string | number | undefined>>): string;
@@ -0,0 +1,7 @@
1
+ export interface RouteTemplate {
2
+ readonly template: string;
3
+ readonly variables: readonly string[];
4
+ expand(values: Readonly<Record<string, string | number | undefined>>): string;
5
+ }
6
+ export declare function routeTemplate(value: unknown, field: string, variables: readonly string[]): RouteTemplate;
7
+ export declare function expandRoute(template: RouteTemplate, values: Readonly<Record<string, string | number | undefined>>): string;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.routeTemplate = routeTemplate;
4
+ exports.expandRoute = expandRoute;
5
+ const discovery_errors_js_1 = require("./discovery-errors.js");
6
+ function expandCompiled(template, variables, values) {
7
+ const supplied = Object.keys(values).filter((key) => values[key] !== undefined);
8
+ if (supplied.some((key) => !variables.includes(key))) {
9
+ throw new discovery_errors_js_1.TargetDiscoveryError('route expansion supplied an undeclared variable');
10
+ }
11
+ let expanded = template.replace(/\{\?([^}]+)\}/g, (_match, names) => {
12
+ const params = names.split(',').flatMap((name) => {
13
+ const value = values[name];
14
+ return value === undefined
15
+ ? []
16
+ : [`${encodeURIComponent(name)}=${encodeURIComponent(String(value))}`];
17
+ });
18
+ return params.length === 0 ? '' : `?${params.join('&')}`;
19
+ });
20
+ expanded = expanded.replace(/\{([^}?][^}]*)\}/g, (_match, name) => {
21
+ const value = values[name];
22
+ if (value === undefined)
23
+ throw new discovery_errors_js_1.TargetDiscoveryError(`route expansion is missing ${name}`);
24
+ const opaque = String(value);
25
+ if (opaque === '.' || opaque === '..') {
26
+ throw new discovery_errors_js_1.TargetDiscoveryError('route expansion contains a structural dot segment');
27
+ }
28
+ return encodeURIComponent(opaque);
29
+ });
30
+ if (/[{}]/.test(expanded)) {
31
+ throw new discovery_errors_js_1.TargetDiscoveryError('route expansion left an unexpanded variable');
32
+ }
33
+ const canonical = new URL(expanded, 'https://route-validation.invalid');
34
+ if (canonical.origin !== 'https://route-validation.invalid' ||
35
+ `${canonical.pathname}${canonical.search}` !== expanded) {
36
+ throw new discovery_errors_js_1.TargetDiscoveryError('route expansion changed during URL canonicalization');
37
+ }
38
+ return expanded;
39
+ }
40
+ function isUnsafeTemplate(value) {
41
+ return typeof value !== 'string' || !value.startsWith('/') || value.startsWith('//') ||
42
+ value.includes('\\') || value.includes('#') || /[\u0000-\u0020\u007f]/.test(value) ||
43
+ value.replace(/\{\?[^}]+\}/g, '').includes('?');
44
+ }
45
+ function expressionNames(expressions, field) {
46
+ const found = [];
47
+ for (const expression of expressions) {
48
+ const body = expression[1];
49
+ if (body === undefined)
50
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} contains an invalid expression`);
51
+ const query = body.startsWith('?');
52
+ const names = body.replace(/^\?/, '').split(',');
53
+ if (query && field !== 'capsule_protocol.route_templates.list') {
54
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} contains an unsupported query expansion`);
55
+ }
56
+ found.push(...names);
57
+ }
58
+ return found;
59
+ }
60
+ function routeTemplate(value, field, variables) {
61
+ if (isUnsafeTemplate(value)) {
62
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} must be a safe relative route template`);
63
+ }
64
+ const template = value;
65
+ const expressions = [...template.matchAll(/\{([^{}]+)\}/g)];
66
+ const stripped = template.replace(/\{[^{}]+\}/g, '');
67
+ if (stripped.includes('{') || stripped.includes('}') ||
68
+ /(^|\/)(?:\.|%2e){1,2}(?:\/|$)/i.test(stripped)) {
69
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} contains an unsafe template expression`);
70
+ }
71
+ const found = expressionNames(expressions, field);
72
+ if (found.length !== variables.length || new Set(found).size !== found.length ||
73
+ variables.some((name) => !found.includes(name))) {
74
+ throw new discovery_errors_js_1.TargetDiscoveryError(`${field} declares unsupported variables`);
75
+ }
76
+ const compiledVariables = Object.freeze([...variables]);
77
+ return Object.freeze({
78
+ template,
79
+ variables: compiledVariables,
80
+ expand: (values) => expandCompiled(template, compiledVariables, values),
81
+ });
82
+ }
83
+ function expandRoute(template, values) {
84
+ return template.expand(values);
85
+ }
@@ -0,0 +1,81 @@
1
+ import { TargetDiscoveryError } from './discovery-errors.mjs';
2
+ function expandCompiled(template, variables, values) {
3
+ const supplied = Object.keys(values).filter((key) => values[key] !== undefined);
4
+ if (supplied.some((key) => !variables.includes(key))) {
5
+ throw new TargetDiscoveryError('route expansion supplied an undeclared variable');
6
+ }
7
+ let expanded = template.replace(/\{\?([^}]+)\}/g, (_match, names) => {
8
+ const params = names.split(',').flatMap((name) => {
9
+ const value = values[name];
10
+ return value === undefined
11
+ ? []
12
+ : [`${encodeURIComponent(name)}=${encodeURIComponent(String(value))}`];
13
+ });
14
+ return params.length === 0 ? '' : `?${params.join('&')}`;
15
+ });
16
+ expanded = expanded.replace(/\{([^}?][^}]*)\}/g, (_match, name) => {
17
+ const value = values[name];
18
+ if (value === undefined)
19
+ throw new TargetDiscoveryError(`route expansion is missing ${name}`);
20
+ const opaque = String(value);
21
+ if (opaque === '.' || opaque === '..') {
22
+ throw new TargetDiscoveryError('route expansion contains a structural dot segment');
23
+ }
24
+ return encodeURIComponent(opaque);
25
+ });
26
+ if (/[{}]/.test(expanded)) {
27
+ throw new TargetDiscoveryError('route expansion left an unexpanded variable');
28
+ }
29
+ const canonical = new URL(expanded, 'https://route-validation.invalid');
30
+ if (canonical.origin !== 'https://route-validation.invalid' ||
31
+ `${canonical.pathname}${canonical.search}` !== expanded) {
32
+ throw new TargetDiscoveryError('route expansion changed during URL canonicalization');
33
+ }
34
+ return expanded;
35
+ }
36
+ function isUnsafeTemplate(value) {
37
+ return typeof value !== 'string' || !value.startsWith('/') || value.startsWith('//') ||
38
+ value.includes('\\') || value.includes('#') || /[\u0000-\u0020\u007f]/.test(value) ||
39
+ value.replace(/\{\?[^}]+\}/g, '').includes('?');
40
+ }
41
+ function expressionNames(expressions, field) {
42
+ const found = [];
43
+ for (const expression of expressions) {
44
+ const body = expression[1];
45
+ if (body === undefined)
46
+ throw new TargetDiscoveryError(`${field} contains an invalid expression`);
47
+ const query = body.startsWith('?');
48
+ const names = body.replace(/^\?/, '').split(',');
49
+ if (query && field !== 'capsule_protocol.route_templates.list') {
50
+ throw new TargetDiscoveryError(`${field} contains an unsupported query expansion`);
51
+ }
52
+ found.push(...names);
53
+ }
54
+ return found;
55
+ }
56
+ export function routeTemplate(value, field, variables) {
57
+ if (isUnsafeTemplate(value)) {
58
+ throw new TargetDiscoveryError(`${field} must be a safe relative route template`);
59
+ }
60
+ const template = value;
61
+ const expressions = [...template.matchAll(/\{([^{}]+)\}/g)];
62
+ const stripped = template.replace(/\{[^{}]+\}/g, '');
63
+ if (stripped.includes('{') || stripped.includes('}') ||
64
+ /(^|\/)(?:\.|%2e){1,2}(?:\/|$)/i.test(stripped)) {
65
+ throw new TargetDiscoveryError(`${field} contains an unsafe template expression`);
66
+ }
67
+ const found = expressionNames(expressions, field);
68
+ if (found.length !== variables.length || new Set(found).size !== found.length ||
69
+ variables.some((name) => !found.includes(name))) {
70
+ throw new TargetDiscoveryError(`${field} declares unsupported variables`);
71
+ }
72
+ const compiledVariables = Object.freeze([...variables]);
73
+ return Object.freeze({
74
+ template,
75
+ variables: compiledVariables,
76
+ expand: (values) => expandCompiled(template, compiledVariables, values),
77
+ });
78
+ }
79
+ export function expandRoute(template, values) {
80
+ return template.expand(values);
81
+ }
@@ -0,0 +1,4 @@
1
+ export declare class LoginRequiredError extends Error {
2
+ readonly targetName: string;
3
+ constructor(targetName: string);
4
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoginRequiredError = void 0;
4
+ class LoginRequiredError extends Error {
5
+ targetName;
6
+ constructor(targetName) {
7
+ super(`Login required. Run: zeroshot target login ${targetName}`);
8
+ this.name = 'LoginRequiredError';
9
+ this.targetName = targetName;
10
+ }
11
+ }
12
+ exports.LoginRequiredError = LoginRequiredError;
@@ -0,0 +1,10 @@
1
+ import type { HttpTransport } from './device-flow.js';
2
+ import type { TargetSessionEndpoints } from './discovery.js';
3
+ interface SessionVerificationDeps {
4
+ readonly http: HttpTransport;
5
+ readonly discoveryEndpoints: TargetSessionEndpoints;
6
+ }
7
+ export declare function readVerifiedOrganization(accessToken: string, signal: AbortSignal | undefined, deps: SessionVerificationDeps): Promise<{
8
+ readonly id: string;
9
+ }>;
10
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readVerifiedOrganization = readVerifiedOrganization;
4
+ const oauth_http_js_1 = require("./oauth-http.js");
5
+ function parseOrganization(value) {
6
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
7
+ throw new Error('Target session response is malformed');
8
+ }
9
+ const body = value;
10
+ const fields = Object.keys(body);
11
+ if (fields.length !== 2 || !fields.includes('kind') ||
12
+ !fields.includes('organization_id') ||
13
+ body.kind !== 'openengine.target-session/v1' ||
14
+ typeof body.organization_id !== 'string' ||
15
+ body.organization_id.length === 0 || body.organization_id.length > 256) {
16
+ throw new Error('Target session response is malformed');
17
+ }
18
+ return Object.freeze({ id: body.organization_id });
19
+ }
20
+ async function readVerifiedOrganization(accessToken, signal, deps) {
21
+ const init = {
22
+ method: deps.discoveryEndpoints.descriptor.session.method,
23
+ headers: {
24
+ Accept: 'application/json',
25
+ Authorization: `Bearer ${accessToken}`,
26
+ 'Cache-Control': 'no-store',
27
+ },
28
+ redirect: 'error',
29
+ };
30
+ if (signal !== undefined)
31
+ init.signal = signal;
32
+ const response = await deps.http.fetch(deps.discoveryEndpoints.sessionEndpoint, init);
33
+ if (response.url && new URL(response.url).href !== deps.discoveryEndpoints.sessionEndpoint) {
34
+ await response.body?.cancel().catch(() => undefined);
35
+ throw new Error('Target session response changed route or authority');
36
+ }
37
+ if (!response.ok) {
38
+ await response.body?.cancel().catch(() => undefined);
39
+ throw new Error('Target session verification failed');
40
+ }
41
+ return parseOrganization(await (0, oauth_http_js_1.readTargetSessionJson)(response));
42
+ }
@@ -1,3 +1,4 @@
1
+ import type { TargetDiscoveryDescriptor } from './discovery.js';
1
2
  export interface TargetRecord {
2
3
  readonly id: string;
3
4
  readonly url: string;
@@ -5,8 +6,9 @@ export interface TargetRecord {
5
6
  readonly deviceToken: string;
6
7
  readonly organization?: {
7
8
  readonly id: string;
8
- readonly name: string;
9
+ readonly name?: string;
9
10
  };
11
+ readonly refreshInvalidated?: true;
10
12
  readonly createdAt: string;
11
13
  }
12
14
  export declare class TargetNameInvalidError extends Error {
@@ -31,7 +33,7 @@ export interface SettingsPort {
31
33
  load(): SettingsWithTargets;
32
34
  mutate(mutator: (settings: SettingsWithTargets) => void): void;
33
35
  }
34
- export declare function addTarget(name: string, rawUrl: string, settings: SettingsPort): TargetRecord;
36
+ export declare function addTarget(name: string, rawUrl: string, settings: SettingsPort, descriptor: TargetDiscoveryDescriptor): TargetRecord;
35
37
  export declare function removeTarget(name: string, settings: SettingsPort): TargetRecord;
36
38
  export declare function getTarget(name: string, settings: SettingsPort): TargetRecord | null;
37
39
  export declare function listTargets(settings: SettingsPort): Array<{
@@ -40,6 +42,8 @@ export declare function listTargets(settings: SettingsPort): Array<{
40
42
  }>;
41
43
  export declare function updateTargetOrganization(name: string, organization: {
42
44
  id: string;
43
- name: string;
45
+ name?: string;
44
46
  }, settings: SettingsPort): void;
47
+ export declare function targetRefreshIsInvalidated(name: string, settings: SettingsPort): boolean;
48
+ export declare function setTargetRefreshInvalidated(name: string, invalidated: boolean, settings: SettingsPort): void;
45
49
  export {};