@tier0/sdk-v2 0.0.0-stage → 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 (298) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +7 -0
  3. package/README.md +201 -2
  4. package/dist/cjs/app-identity-contract.generated.d.ts +22 -0
  5. package/dist/cjs/app-identity-contract.generated.js +51 -0
  6. package/dist/cjs/app-identity-contract.generated.js.map +1 -0
  7. package/dist/cjs/capabilities.d.ts +54 -0
  8. package/dist/cjs/capabilities.js +134 -0
  9. package/dist/cjs/capabilities.js.map +1 -0
  10. package/dist/cjs/client.d.ts +604 -0
  11. package/dist/cjs/client.js +35 -0
  12. package/dist/cjs/client.js.map +1 -0
  13. package/dist/cjs/cloud-server.d.ts +31 -0
  14. package/dist/cjs/cloud-server.js +114 -0
  15. package/dist/cjs/cloud-server.js.map +1 -0
  16. package/dist/cjs/cloud-transport.d.ts +46 -0
  17. package/dist/cjs/cloud-transport.js +192 -0
  18. package/dist/cjs/cloud-transport.js.map +1 -0
  19. package/dist/cjs/controls.d.ts +93 -0
  20. package/dist/cjs/controls.js +169 -0
  21. package/dist/cjs/controls.js.map +1 -0
  22. package/dist/cjs/data/bootstrap.d.ts +66 -0
  23. package/dist/cjs/data/bootstrap.js +282 -0
  24. package/dist/cjs/data/bootstrap.js.map +1 -0
  25. package/dist/cjs/data/call.d.ts +16 -0
  26. package/dist/cjs/data/call.js +51 -0
  27. package/dist/cjs/data/call.js.map +1 -0
  28. package/dist/cjs/data/client.d.ts +92 -0
  29. package/dist/cjs/data/client.js +102 -0
  30. package/dist/cjs/data/client.js.map +1 -0
  31. package/dist/cjs/data/collection.d.ts +238 -0
  32. package/dist/cjs/data/collection.js +441 -0
  33. package/dist/cjs/data/collection.js.map +1 -0
  34. package/dist/cjs/data/context.d.ts +10 -0
  35. package/dist/cjs/data/context.js +39 -0
  36. package/dist/cjs/data/context.js.map +1 -0
  37. package/dist/cjs/data/declarations.d.ts +11 -0
  38. package/dist/cjs/data/declarations.js +18 -0
  39. package/dist/cjs/data/declarations.js.map +1 -0
  40. package/dist/cjs/data/define.d.ts +69 -0
  41. package/dist/cjs/data/define.js +31 -0
  42. package/dist/cjs/data/define.js.map +1 -0
  43. package/dist/cjs/data/error.d.ts +60 -0
  44. package/dist/cjs/data/error.js +184 -0
  45. package/dist/cjs/data/error.js.map +1 -0
  46. package/dist/cjs/data/index.d.ts +21 -0
  47. package/dist/cjs/data/index.js +43 -0
  48. package/dist/cjs/data/index.js.map +1 -0
  49. package/dist/cjs/data/schema.d.ts +82 -0
  50. package/dist/cjs/data/schema.js +607 -0
  51. package/dist/cjs/data/schema.js.map +1 -0
  52. package/dist/cjs/data/sort.d.ts +8 -0
  53. package/dist/cjs/data/sort.js +21 -0
  54. package/dist/cjs/data/sort.js.map +1 -0
  55. package/dist/cjs/files.d.ts +67 -0
  56. package/dist/cjs/files.js +119 -0
  57. package/dist/cjs/files.js.map +1 -0
  58. package/dist/cjs/framework-scope.d.ts +1 -0
  59. package/dist/cjs/framework-scope.js +14 -0
  60. package/dist/cjs/framework-scope.js.map +1 -0
  61. package/dist/cjs/index.d.ts +14 -0
  62. package/dist/cjs/index.js +33 -0
  63. package/dist/cjs/index.js.map +1 -0
  64. package/dist/cjs/mq/broker.d.ts +65 -0
  65. package/dist/cjs/mq/broker.js +115 -0
  66. package/dist/cjs/mq/broker.js.map +1 -0
  67. package/dist/cjs/mq/client.d.ts +37 -0
  68. package/dist/cjs/mq/client.js +321 -0
  69. package/dist/cjs/mq/client.js.map +1 -0
  70. package/dist/cjs/mq/index.d.ts +5 -0
  71. package/dist/cjs/mq/index.js +11 -0
  72. package/dist/cjs/mq/index.js.map +1 -0
  73. package/dist/cjs/mq/types.d.ts +48 -0
  74. package/dist/cjs/mq/types.js +3 -0
  75. package/dist/cjs/mq/types.js.map +1 -0
  76. package/dist/cjs/openapi/api.generated.d.ts +820 -0
  77. package/dist/cjs/openapi/api.generated.js +607 -0
  78. package/dist/cjs/openapi/api.generated.js.map +1 -0
  79. package/dist/cjs/openapi/client.d.ts +56 -0
  80. package/dist/cjs/openapi/client.js +219 -0
  81. package/dist/cjs/openapi/client.js.map +1 -0
  82. package/dist/cjs/openapi/codecs.generated.d.ts +2234 -0
  83. package/dist/cjs/openapi/codecs.generated.js +6 -0
  84. package/dist/cjs/openapi/codecs.generated.js.map +1 -0
  85. package/dist/cjs/openapi/index.d.ts +5 -0
  86. package/dist/cjs/openapi/index.js +12 -0
  87. package/dist/cjs/openapi/index.js.map +1 -0
  88. package/dist/cjs/openapi/types.generated.d.ts +3227 -0
  89. package/dist/cjs/openapi/types.generated.js +3 -0
  90. package/dist/cjs/openapi/types.generated.js.map +1 -0
  91. package/dist/cjs/package.json +1 -0
  92. package/dist/cjs/react.d.ts +9 -0
  93. package/dist/cjs/react.js +16 -0
  94. package/dist/cjs/react.js.map +1 -0
  95. package/dist/cjs/runtime-context.d.ts +9 -0
  96. package/dist/cjs/runtime-context.js +25 -0
  97. package/dist/cjs/runtime-context.js.map +1 -0
  98. package/dist/cjs/runtime-env.d.ts +1 -0
  99. package/dist/cjs/runtime-env.js +18 -0
  100. package/dist/cjs/runtime-env.js.map +1 -0
  101. package/dist/cjs/source.d.ts +39 -0
  102. package/dist/cjs/source.js +29 -0
  103. package/dist/cjs/source.js.map +1 -0
  104. package/dist/cjs/stream.d.ts +40 -0
  105. package/dist/cjs/stream.js +33 -0
  106. package/dist/cjs/stream.js.map +1 -0
  107. package/dist/cjs/uns-v2/client.d.ts +54 -0
  108. package/dist/cjs/uns-v2/client.js +177 -0
  109. package/dist/cjs/uns-v2/client.js.map +1 -0
  110. package/dist/cjs/uns-v2/codec.d.ts +11 -0
  111. package/dist/cjs/uns-v2/codec.js +290 -0
  112. package/dist/cjs/uns-v2/codec.js.map +1 -0
  113. package/dist/cjs/uns-v2/data-client.d.ts +10 -0
  114. package/dist/cjs/uns-v2/data-client.js +18 -0
  115. package/dist/cjs/uns-v2/data-client.js.map +1 -0
  116. package/dist/cjs/uns-v2/generated.d.ts +15551 -0
  117. package/dist/cjs/uns-v2/generated.js +139 -0
  118. package/dist/cjs/uns-v2/generated.js.map +1 -0
  119. package/dist/cjs/uns-v2/index.d.ts +5 -0
  120. package/dist/cjs/uns-v2/index.js +24 -0
  121. package/dist/cjs/uns-v2/index.js.map +1 -0
  122. package/dist/cjs/vue.d.ts +9 -0
  123. package/dist/cjs/vue.js +39 -0
  124. package/dist/cjs/vue.js.map +1 -0
  125. package/dist/esm/app-identity-contract.generated.d.ts +22 -0
  126. package/dist/esm/app-identity-contract.generated.js +48 -0
  127. package/dist/esm/app-identity-contract.generated.js.map +1 -0
  128. package/dist/esm/capabilities.d.ts +54 -0
  129. package/dist/esm/capabilities.js +129 -0
  130. package/dist/esm/capabilities.js.map +1 -0
  131. package/dist/esm/client.d.ts +604 -0
  132. package/dist/esm/client.js +32 -0
  133. package/dist/esm/client.js.map +1 -0
  134. package/dist/esm/cloud-server.d.ts +31 -0
  135. package/dist/esm/cloud-server.js +109 -0
  136. package/dist/esm/cloud-server.js.map +1 -0
  137. package/dist/esm/cloud-transport.d.ts +46 -0
  138. package/dist/esm/cloud-transport.js +187 -0
  139. package/dist/esm/cloud-transport.js.map +1 -0
  140. package/dist/esm/controls.d.ts +93 -0
  141. package/dist/esm/controls.js +163 -0
  142. package/dist/esm/controls.js.map +1 -0
  143. package/dist/esm/data/bootstrap.d.ts +66 -0
  144. package/dist/esm/data/bootstrap.js +277 -0
  145. package/dist/esm/data/bootstrap.js.map +1 -0
  146. package/dist/esm/data/call.d.ts +16 -0
  147. package/dist/esm/data/call.js +47 -0
  148. package/dist/esm/data/call.js.map +1 -0
  149. package/dist/esm/data/client.d.ts +92 -0
  150. package/dist/esm/data/client.js +99 -0
  151. package/dist/esm/data/client.js.map +1 -0
  152. package/dist/esm/data/collection.d.ts +238 -0
  153. package/dist/esm/data/collection.js +434 -0
  154. package/dist/esm/data/collection.js.map +1 -0
  155. package/dist/esm/data/context.d.ts +10 -0
  156. package/dist/esm/data/context.js +34 -0
  157. package/dist/esm/data/context.js.map +1 -0
  158. package/dist/esm/data/declarations.d.ts +11 -0
  159. package/dist/esm/data/declarations.js +10 -0
  160. package/dist/esm/data/declarations.js.map +1 -0
  161. package/dist/esm/data/define.d.ts +69 -0
  162. package/dist/esm/data/define.js +27 -0
  163. package/dist/esm/data/define.js.map +1 -0
  164. package/dist/esm/data/error.d.ts +60 -0
  165. package/dist/esm/data/error.js +178 -0
  166. package/dist/esm/data/error.js.map +1 -0
  167. package/dist/esm/data/index.d.ts +21 -0
  168. package/dist/esm/data/index.js +18 -0
  169. package/dist/esm/data/index.js.map +1 -0
  170. package/dist/esm/data/schema.d.ts +82 -0
  171. package/dist/esm/data/schema.js +596 -0
  172. package/dist/esm/data/schema.js.map +1 -0
  173. package/dist/esm/data/sort.d.ts +8 -0
  174. package/dist/esm/data/sort.js +18 -0
  175. package/dist/esm/data/sort.js.map +1 -0
  176. package/dist/esm/files.d.ts +67 -0
  177. package/dist/esm/files.js +113 -0
  178. package/dist/esm/files.js.map +1 -0
  179. package/dist/esm/framework-scope.d.ts +1 -0
  180. package/dist/esm/framework-scope.js +11 -0
  181. package/dist/esm/framework-scope.js.map +1 -0
  182. package/dist/esm/index.d.ts +14 -0
  183. package/dist/esm/index.js +10 -0
  184. package/dist/esm/index.js.map +1 -0
  185. package/dist/esm/mq/broker.d.ts +65 -0
  186. package/dist/esm/mq/broker.js +109 -0
  187. package/dist/esm/mq/broker.js.map +1 -0
  188. package/dist/esm/mq/client.d.ts +37 -0
  189. package/dist/esm/mq/client.js +314 -0
  190. package/dist/esm/mq/client.js.map +1 -0
  191. package/dist/esm/mq/index.d.ts +5 -0
  192. package/dist/esm/mq/index.js +3 -0
  193. package/dist/esm/mq/index.js.map +1 -0
  194. package/dist/esm/mq/types.d.ts +48 -0
  195. package/dist/esm/mq/types.js +2 -0
  196. package/dist/esm/mq/types.js.map +1 -0
  197. package/dist/esm/openapi/api.generated.d.ts +820 -0
  198. package/dist/esm/openapi/api.generated.js +603 -0
  199. package/dist/esm/openapi/api.generated.js.map +1 -0
  200. package/dist/esm/openapi/client.d.ts +56 -0
  201. package/dist/esm/openapi/client.js +210 -0
  202. package/dist/esm/openapi/client.js.map +1 -0
  203. package/dist/esm/openapi/codecs.generated.d.ts +2234 -0
  204. package/dist/esm/openapi/codecs.generated.js +3 -0
  205. package/dist/esm/openapi/codecs.generated.js.map +1 -0
  206. package/dist/esm/openapi/index.d.ts +5 -0
  207. package/dist/esm/openapi/index.js +3 -0
  208. package/dist/esm/openapi/index.js.map +1 -0
  209. package/dist/esm/openapi/types.generated.d.ts +3227 -0
  210. package/dist/esm/openapi/types.generated.js +2 -0
  211. package/dist/esm/openapi/types.generated.js.map +1 -0
  212. package/dist/esm/package.json +1 -0
  213. package/dist/esm/react.d.ts +9 -0
  214. package/dist/esm/react.js +12 -0
  215. package/dist/esm/react.js.map +1 -0
  216. package/dist/esm/runtime-context.d.ts +9 -0
  217. package/dist/esm/runtime-context.js +22 -0
  218. package/dist/esm/runtime-context.js.map +1 -0
  219. package/dist/esm/runtime-env.d.ts +1 -0
  220. package/dist/esm/runtime-env.js +15 -0
  221. package/dist/esm/runtime-env.js.map +1 -0
  222. package/dist/esm/source.d.ts +39 -0
  223. package/dist/esm/source.js +25 -0
  224. package/dist/esm/source.js.map +1 -0
  225. package/dist/esm/stream.d.ts +40 -0
  226. package/dist/esm/stream.js +29 -0
  227. package/dist/esm/stream.js.map +1 -0
  228. package/dist/esm/uns-v2/client.d.ts +54 -0
  229. package/dist/esm/uns-v2/client.js +170 -0
  230. package/dist/esm/uns-v2/client.js.map +1 -0
  231. package/dist/esm/uns-v2/codec.d.ts +11 -0
  232. package/dist/esm/uns-v2/codec.js +284 -0
  233. package/dist/esm/uns-v2/codec.js.map +1 -0
  234. package/dist/esm/uns-v2/data-client.d.ts +10 -0
  235. package/dist/esm/uns-v2/data-client.js +14 -0
  236. package/dist/esm/uns-v2/data-client.js.map +1 -0
  237. package/dist/esm/uns-v2/generated.d.ts +15551 -0
  238. package/dist/esm/uns-v2/generated.js +136 -0
  239. package/dist/esm/uns-v2/generated.js.map +1 -0
  240. package/dist/esm/uns-v2/index.d.ts +5 -0
  241. package/dist/esm/uns-v2/index.js +5 -0
  242. package/dist/esm/uns-v2/index.js.map +1 -0
  243. package/dist/esm/vue.d.ts +9 -0
  244. package/dist/esm/vue.js +36 -0
  245. package/dist/esm/vue.js.map +1 -0
  246. package/docs/acceptance-2026-10-22.md +88 -0
  247. package/package.json +242 -4
  248. package/skills/tier0-sdk-v2/SKILL.md +66 -0
  249. package/skills/tier0-sdk-v2/references/integration.md +72 -0
  250. package/skills/tier0-sdk-v2-agent/SKILL.md +73 -0
  251. package/skills/tier0-sdk-v2-agent/references/results.md +45 -0
  252. package/skills/tier0-sdk-v2-controls/SKILL.md +63 -0
  253. package/skills/tier0-sdk-v2-data/SKILL.md +57 -0
  254. package/skills/tier0-sdk-v2-data/references/consistency.md +70 -0
  255. package/skills/tier0-sdk-v2-data/references/errors.md +69 -0
  256. package/skills/tier0-sdk-v2-data/references/modeling.md +77 -0
  257. package/skills/tier0-sdk-v2-data/references/read-write.md +72 -0
  258. package/skills/tier0-sdk-v2-data/references/schema-evolution.md +36 -0
  259. package/skills/tier0-sdk-v2-files/SKILL.md +85 -0
  260. package/skills/tier0-sdk-v2-files/references/delete.md +22 -0
  261. package/skills/tier0-sdk-v2-files/references/download.md +49 -0
  262. package/skills/tier0-sdk-v2-files/references/multipart.md +42 -0
  263. package/skills/tier0-sdk-v2-files/references/upload.md +27 -0
  264. package/skills/tier0-sdk-v2-files/references/url.md +22 -0
  265. package/skills/tier0-sdk-v2-members/SKILL.md +56 -0
  266. package/skills/tier0-sdk-v2-members/references/app-members.md +41 -0
  267. package/skills/tier0-sdk-v2-members/references/platform-members.md +56 -0
  268. package/skills/tier0-sdk-v2-mq/SKILL.md +78 -0
  269. package/skills/tier0-sdk-v2-mq/references/quickstart.md +69 -0
  270. package/skills/tier0-sdk-v2-notifications/SKILL.md +42 -0
  271. package/skills/tier0-sdk-v2-notifications/references/get.md +34 -0
  272. package/skills/tier0-sdk-v2-notifications/references/send.md +72 -0
  273. package/skills/tier0-sdk-v2-source/SKILL.md +38 -0
  274. package/skills/tier0-sdk-v2-source/references/changes.md +40 -0
  275. package/skills/tier0-sdk-v2-source/references/create.md +63 -0
  276. package/skills/tier0-sdk-v2-source/references/delete.md +47 -0
  277. package/skills/tier0-sdk-v2-source/references/protocols.md +36 -0
  278. package/skills/tier0-sdk-v2-source/references/read.md +34 -0
  279. package/skills/tier0-sdk-v2-source/references/state.md +37 -0
  280. package/skills/tier0-sdk-v2-source/references/update.md +61 -0
  281. package/skills/tier0-sdk-v2-stream/SKILL.md +43 -0
  282. package/skills/tier0-sdk-v2-stream/references/create.md +55 -0
  283. package/skills/tier0-sdk-v2-stream/references/delete.md +35 -0
  284. package/skills/tier0-sdk-v2-stream/references/deploy.md +63 -0
  285. package/skills/tier0-sdk-v2-stream/references/lifecycle.md +25 -0
  286. package/skills/tier0-sdk-v2-stream/references/read.md +35 -0
  287. package/skills/tier0-sdk-v2-stream/references/update.md +35 -0
  288. package/skills/tier0-sdk-v2-system/SKILL.md +64 -0
  289. package/skills/tier0-sdk-v2-system/references/info.md +23 -0
  290. package/skills/tier0-sdk-v2-system/references/whoami.md +21 -0
  291. package/skills/tier0-sdk-v2-uns/SKILL.md +53 -0
  292. package/skills/tier0-sdk-v2-uns/references/create.md +85 -0
  293. package/skills/tier0-sdk-v2-uns/references/data-workflows.md +73 -0
  294. package/skills/tier0-sdk-v2-uns/references/delete.md +69 -0
  295. package/skills/tier0-sdk-v2-uns/references/namespace.md +75 -0
  296. package/skills/tier0-sdk-v2-uns/references/read.md +32 -0
  297. package/skills/tier0-sdk-v2-uns/references/restore.md +41 -0
  298. package/skills/tier0-sdk-v2-uns/references/update.md +86 -0
@@ -0,0 +1,5 @@
1
+ export * from './generated.js';
2
+ export * from './client.js';
3
+ export { UnsV2RawNumber } from './codec.js';
4
+ export { createUnsDataClient } from './data-client.js';
5
+ export type { UnsDataClient, UnsDataClientConfig, UnsDataOperationName } from './data-client.js';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.createUnsDataClient = exports.UnsV2RawNumber = void 0;
18
+ __exportStar(require("./generated.js"), exports);
19
+ __exportStar(require("./client.js"), exports);
20
+ var codec_js_1 = require("./codec.js");
21
+ Object.defineProperty(exports, "UnsV2RawNumber", { enumerable: true, get: function () { return codec_js_1.UnsV2RawNumber; } });
22
+ var data_client_js_1 = require("./data-client.js");
23
+ Object.defineProperty(exports, "createUnsDataClient", { enumerable: true, get: function () { return data_client_js_1.createUnsDataClient; } });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/uns-v2/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,8CAA4B;AAC5B,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,mDAAuD;AAA9C,qHAAA,mBAAmB,OAAA","sourcesContent":["export * from './generated.js';\r\nexport * from './client.js';\r\nexport { UnsV2RawNumber } from './codec.js';\r\nexport { createUnsDataClient } from './data-client.js';\r\nexport type { UnsDataClient, UnsDataClientConfig, UnsDataOperationName } from './data-client.js';\r\n"]}
@@ -0,0 +1,9 @@
1
+ import type { Tier0Client } from './client.js';
2
+ /** Explicit execution, with latest-result wins and no automatic mutation replay. */
3
+ export declare function useTier0Request<T, Variables>(client: Tier0Client, request: (client: Tier0Client, variables: Variables, signal: AbortSignal) => Promise<T>): {
4
+ data: import("vue").ShallowRef<T | undefined, T | undefined>;
5
+ error: import("vue").ShallowRef<unknown, unknown>;
6
+ loading: import("vue").ShallowRef<boolean, boolean>;
7
+ execute: (variables: Variables) => Promise<T>;
8
+ cancel: () => void;
9
+ };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTier0Request = useTier0Request;
4
+ const vue_1 = require("vue");
5
+ /** Explicit execution, with latest-result wins and no automatic mutation replay. */
6
+ function useTier0Request(client, request) {
7
+ const data = (0, vue_1.shallowRef)();
8
+ const error = (0, vue_1.shallowRef)();
9
+ const loading = (0, vue_1.shallowRef)(false);
10
+ let controller;
11
+ let generation = 0;
12
+ const cancel = () => { generation++; controller?.abort(); loading.value = false; };
13
+ if ((0, vue_1.getCurrentScope)())
14
+ (0, vue_1.onScopeDispose)(cancel);
15
+ async function execute(variables) {
16
+ controller?.abort();
17
+ const own = ++generation;
18
+ const current = controller = new AbortController();
19
+ loading.value = true;
20
+ error.value = undefined;
21
+ try {
22
+ const result = await request(client, variables, current.signal);
23
+ if (own === generation)
24
+ data.value = result;
25
+ return result;
26
+ }
27
+ catch (failure) {
28
+ if (own === generation)
29
+ error.value = failure;
30
+ throw failure;
31
+ }
32
+ finally {
33
+ if (own === generation)
34
+ loading.value = false;
35
+ }
36
+ }
37
+ return { data, error, loading, execute, cancel };
38
+ }
39
+ //# sourceMappingURL=vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.js","sourceRoot":"","sources":["../../src/vue.ts"],"names":[],"mappings":";;AAIA,0CAwBC;AA5BD,6BAAkE;AAGlE,oFAAoF;AACpF,SAAgB,eAAe,CAAe,MAAmB,EAAE,OAAuF;IACxJ,MAAM,IAAI,GAAG,IAAA,gBAAU,GAAK,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAA,gBAAU,GAAW,CAAC;IACpC,MAAM,OAAO,GAAG,IAAA,gBAAU,EAAC,KAAK,CAAC,CAAC;IAClC,IAAI,UAAuC,CAAC;IAC5C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,IAAA,qBAAe,GAAE;QAAE,IAAA,oBAAc,EAAC,MAAM,CAAC,CAAC;IAC9C,KAAK,UAAU,OAAO,CAAC,SAAoB;QACzC,UAAU,EAAE,KAAK,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,EAAE,UAAU,CAAC;QACzB,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,GAAG,KAAK,UAAU;gBAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YAC5C,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;YACjB,IAAI,GAAG,KAAK,UAAU;gBAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;YAC9C,MAAM,OAAO,CAAC;QAChB,CAAC;gBAAS,CAAC;YAAC,IAAI,GAAG,KAAK,UAAU;gBAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnD,CAAC","sourcesContent":["import { shallowRef, onScopeDispose, getCurrentScope } from 'vue';\nimport type { Tier0Client } from './client.js';\n\n/** Explicit execution, with latest-result wins and no automatic mutation replay. */\nexport function useTier0Request<T, Variables>(client: Tier0Client, request: (client: Tier0Client, variables: Variables, signal: AbortSignal) => Promise<T>) {\n const data = shallowRef<T>();\n const error = shallowRef<unknown>();\n const loading = shallowRef(false);\n let controller: AbortController | undefined;\n let generation = 0;\n const cancel = () => { generation++; controller?.abort(); loading.value = false; };\n if (getCurrentScope()) onScopeDispose(cancel);\n async function execute(variables: Variables): Promise<T> {\n controller?.abort();\n const own = ++generation;\n const current = controller = new AbortController();\n loading.value = true;\n error.value = undefined;\n try {\n const result = await request(client, variables, current.signal);\n if (own === generation) data.value = result;\n return result;\n } catch (failure) {\n if (own === generation) error.value = failure;\n throw failure;\n } finally { if (own === generation) loading.value = false; }\n }\n return { data, error, loading, execute, cancel };\n}\n"]}
@@ -0,0 +1,22 @@
1
+ export declare const APP_REQUEST_IDENTITY_CONTRACT: {
2
+ readonly version: "tier0.app-request-identity/v1";
3
+ readonly header: "X-Tier0-App-Identity";
4
+ readonly type: "tier0-app-request+jwt";
5
+ readonly algorithm: "EdDSA";
6
+ readonly issuer: "tier0-app-gateway";
7
+ readonly audience: "tier0-app-runtime";
8
+ readonly maxTokenBytes: 8192;
9
+ readonly maxBodyBytes: 65536;
10
+ readonly maxURIBytes: 8192;
11
+ readonly maxTTLSeconds: 30;
12
+ readonly clockSkewSeconds: 5;
13
+ readonly maxRoles: 32;
14
+ readonly maxRoleBytes: 128;
15
+ readonly maxKeys: 8;
16
+ readonly keyIDPattern: "^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$";
17
+ readonly appIDPattern: "^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$";
18
+ readonly requiredClaims: readonly ["ver", "iss", "aud", "sub", "workspaceID", "appID", "method", "requestURI", "bodySHA256", "iat", "exp", "jti", "roles"];
19
+ readonly methodPattern: "^[A-Z]{1,16}$";
20
+ readonly requiredHeaderFields: readonly ["alg", "typ", "kid"];
21
+ readonly publicKeyFields: readonly ["kty", "crv", "x", "kid"];
22
+ };
@@ -0,0 +1,48 @@
1
+ // Generated from SWE gatewayheader/app-request-identity.v1.json; do not edit.
2
+ // Source SHA-256: ac5ec2efb882395e63a46c9ec479de16c09943b88fc0bd906dd77c7f9f4bfaa3
3
+ export const APP_REQUEST_IDENTITY_CONTRACT = {
4
+ "version": "tier0.app-request-identity/v1",
5
+ "header": "X-Tier0-App-Identity",
6
+ "type": "tier0-app-request+jwt",
7
+ "algorithm": "EdDSA",
8
+ "issuer": "tier0-app-gateway",
9
+ "audience": "tier0-app-runtime",
10
+ "maxTokenBytes": 8192,
11
+ "maxBodyBytes": 65536,
12
+ "maxURIBytes": 8192,
13
+ "maxTTLSeconds": 30,
14
+ "clockSkewSeconds": 5,
15
+ "maxRoles": 32,
16
+ "maxRoleBytes": 128,
17
+ "maxKeys": 8,
18
+ "keyIDPattern": "^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$",
19
+ "appIDPattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
20
+ "requiredClaims": [
21
+ "ver",
22
+ "iss",
23
+ "aud",
24
+ "sub",
25
+ "workspaceID",
26
+ "appID",
27
+ "method",
28
+ "requestURI",
29
+ "bodySHA256",
30
+ "iat",
31
+ "exp",
32
+ "jti",
33
+ "roles"
34
+ ],
35
+ "methodPattern": "^[A-Z]{1,16}$",
36
+ "requiredHeaderFields": [
37
+ "alg",
38
+ "typ",
39
+ "kid"
40
+ ],
41
+ "publicKeyFields": [
42
+ "kty",
43
+ "crv",
44
+ "x",
45
+ "kid"
46
+ ]
47
+ };
48
+ //# sourceMappingURL=app-identity-contract.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-identity-contract.generated.js","sourceRoot":"","sources":["../../src/app-identity-contract.generated.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mFAAmF;AACnF,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,SAAS,EAAE,+BAA+B;IAC1C,QAAQ,EAAE,sBAAsB;IAChC,MAAM,EAAE,uBAAuB;IAC/B,WAAW,EAAE,OAAO;IACpB,QAAQ,EAAE,mBAAmB;IAC7B,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,EAAE;IACnB,kBAAkB,EAAE,CAAC;IACrB,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,GAAG;IACnB,SAAS,EAAE,CAAC;IACZ,cAAc,EAAE,mCAAmC;IACnD,cAAc,EAAE,2EAA2E;IAC3F,gBAAgB,EAAE;QAChB,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,aAAa;QACb,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,YAAY;QACZ,KAAK;QACL,KAAK;QACL,KAAK;QACL,OAAO;KACR;IACD,eAAe,EAAE,eAAe;IAChC,sBAAsB,EAAE;QACtB,KAAK;QACL,KAAK;QACL,KAAK;KACN;IACD,iBAAiB,EAAE;QACjB,KAAK;QACL,KAAK;QACL,GAAG;QACH,KAAK;KACN;CACO,CAAC","sourcesContent":["// Generated from SWE gatewayheader/app-request-identity.v1.json; do not edit.\r\n// Source SHA-256: ac5ec2efb882395e63a46c9ec479de16c09943b88fc0bd906dd77c7f9f4bfaa3\r\nexport const APP_REQUEST_IDENTITY_CONTRACT = {\r\n \"version\": \"tier0.app-request-identity/v1\",\r\n \"header\": \"X-Tier0-App-Identity\",\r\n \"type\": \"tier0-app-request+jwt\",\r\n \"algorithm\": \"EdDSA\",\r\n \"issuer\": \"tier0-app-gateway\",\r\n \"audience\": \"tier0-app-runtime\",\r\n \"maxTokenBytes\": 8192,\r\n \"maxBodyBytes\": 65536,\r\n \"maxURIBytes\": 8192,\r\n \"maxTTLSeconds\": 30,\r\n \"clockSkewSeconds\": 5,\r\n \"maxRoles\": 32,\r\n \"maxRoleBytes\": 128,\r\n \"maxKeys\": 8,\r\n \"keyIDPattern\": \"^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$\",\r\n \"appIDPattern\": \"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$\",\r\n \"requiredClaims\": [\r\n \"ver\",\r\n \"iss\",\r\n \"aud\",\r\n \"sub\",\r\n \"workspaceID\",\r\n \"appID\",\r\n \"method\",\r\n \"requestURI\",\r\n \"bodySHA256\",\r\n \"iat\",\r\n \"exp\",\r\n \"jti\",\r\n \"roles\"\r\n ],\r\n \"methodPattern\": \"^[A-Z]{1,16}$\",\r\n \"requiredHeaderFields\": [\r\n \"alg\",\r\n \"typ\",\r\n \"kid\"\r\n ],\r\n \"publicKeyFields\": [\r\n \"kty\",\r\n \"crv\",\r\n \"x\",\r\n \"kid\"\r\n ]\r\n} as const;\r\n"]}
@@ -0,0 +1,54 @@
1
+ import { type CloudTransportConfig } from './cloud-transport.js';
2
+ import { type HttpClient } from './openapi/client.js';
3
+ export type CapabilityCode = 'namespace.v2' | 'source.v1' | 'stream.v2' | 'control.v1' | 'control.invoke.v1';
4
+ export type CapabilityState = 'disabled' | 'not_supported' | 'unavailable' | 'readiness_unknown' | 'ready';
5
+ export type CapabilityAvailability = 'unavailable' | 'unknown' | 'available';
6
+ export interface PublicCapability {
7
+ code: CapabilityCode;
8
+ /** Public release and workspace gates; does not establish runtime readiness. */
9
+ releaseEnabled: boolean;
10
+ /** Server-assessed implementation/readiness, never inferred from releaseEnabled. */
11
+ enabled: boolean;
12
+ /** Authorization summary, not a grant for every individual Control code. */
13
+ allowed: boolean;
14
+ state: CapabilityState;
15
+ /** Not device online status or execution/ACK confirmation. */
16
+ availability: CapabilityAvailability;
17
+ contractVersions: string[];
18
+ }
19
+ export interface CapabilityDeprecation {
20
+ contract: string;
21
+ replacement?: string;
22
+ sunsetAt?: string;
23
+ }
24
+ export interface CapabilityDiscoverResponse {
25
+ product: 'cloud';
26
+ /** Trusted server configuration only; absent when unconfigured. */
27
+ productVersion?: string;
28
+ contractVersion: '1.0';
29
+ apiContractVersions: string[];
30
+ interpreterContractVersions: string[];
31
+ /** Public SDK contract labels, not npm package versions. */
32
+ sdkContractVersions: string[];
33
+ capabilities: PublicCapability[];
34
+ deprecations: CapabilityDeprecation[];
35
+ }
36
+ export interface CapabilityErrorInfo {
37
+ status?: number;
38
+ /** Gateway string code (including unknown future codes), or an SDK-local CAPABILITY_* code. */
39
+ errorCode: string;
40
+ }
41
+ export declare class CapabilityError extends Error {
42
+ readonly status?: number;
43
+ readonly errorCode: string;
44
+ readonly retryable = false;
45
+ constructor(message: string, info: CapabilityErrorInfo);
46
+ }
47
+ export declare class CapabilitiesClient {
48
+ private readonly transport;
49
+ constructor(resolveClient?: () => HttpClient, config?: CloudTransportConfig);
50
+ /** Workspace comes exclusively from the authenticated key. One POST, no automatic retries or caching. */
51
+ discover(): Promise<CapabilityDiscoverResponse>;
52
+ }
53
+ /** Uses configureClient()/runtime environment, resolving the host and workspace key on every call. */
54
+ export declare const capabilities: CapabilitiesClient;
@@ -0,0 +1,129 @@
1
+ import { CloudTransport, CloudTransportError } from './cloud-transport.js';
2
+ import { getClient } from './openapi/client.js';
3
+ export class CapabilityError extends Error {
4
+ status;
5
+ errorCode;
6
+ retryable = false;
7
+ constructor(message, info) {
8
+ super(message);
9
+ this.name = 'CapabilityError';
10
+ this.status = info.status;
11
+ this.errorCode = info.errorCode;
12
+ }
13
+ }
14
+ const contracts = {
15
+ 'namespace.v2': ['openapi/v2'],
16
+ 'source.v1': ['openapi/v1'],
17
+ 'stream.v2': ['tier0-stream/v2'],
18
+ 'control.v1': ['openapi/v1', 'control/v1'],
19
+ 'control.invoke.v1': ['openapi/v1', 'tier0-stream/v2', 'control/v1'],
20
+ };
21
+ function record(value) {
22
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
23
+ }
24
+ function text(value) {
25
+ return typeof value === 'string' && value.length > 0;
26
+ }
27
+ function strings(value) {
28
+ return Array.isArray(value) && value.every(text) && new Set(value).size === value.length;
29
+ }
30
+ /** Validate and explicitly project the frozen contract; unknown capabilities/extension fields are ignored. */
31
+ function discovery(value, status) {
32
+ const fail = (version = false) => {
33
+ throw new CapabilityError(version ? 'Unsupported capability contract version.' : 'Invalid capability discovery response.', {
34
+ status, errorCode: version ? 'CAPABILITY_UNSUPPORTED_VERSION' : 'CAPABILITY_PROTOCOL_ERROR',
35
+ });
36
+ };
37
+ if (!record(value))
38
+ return fail();
39
+ if (!text(value.product) || !text(value.contractVersion) ||
40
+ !strings(value.apiContractVersions) || !strings(value.interpreterContractVersions) || !strings(value.sdkContractVersions) ||
41
+ !Array.isArray(value.capabilities) || !Array.isArray(value.deprecations) ||
42
+ (value.productVersion !== undefined && !text(value.productVersion)))
43
+ return fail();
44
+ if (value.product !== 'cloud' || value.contractVersion !== '1.0' ||
45
+ !value.apiContractVersions.includes('openapi/v1') ||
46
+ !value.interpreterContractVersions.includes('tier0-stream/v2') ||
47
+ !value.sdkContractVersions.includes('control/v1'))
48
+ return fail(true);
49
+ const capabilities = [];
50
+ const seen = new Set();
51
+ for (const item of value.capabilities) {
52
+ if (!record(item) || !text(item.code))
53
+ return fail();
54
+ if (!Object.prototype.hasOwnProperty.call(contracts, item.code))
55
+ continue;
56
+ const code = item.code;
57
+ if (seen.has(code))
58
+ return fail();
59
+ seen.add(code);
60
+ if (typeof item.releaseEnabled !== 'boolean' || typeof item.enabled !== 'boolean' || typeof item.allowed !== 'boolean' ||
61
+ !['disabled', 'not_supported', 'unavailable', 'readiness_unknown', 'ready'].includes(item.state) ||
62
+ !['unavailable', 'unknown', 'available'].includes(item.availability) || !strings(item.contractVersions))
63
+ return fail();
64
+ if (contracts[code].some(version => !item.contractVersions.includes(version) ||
65
+ (version.startsWith('openapi/') && !value.apiContractVersions.includes(version))))
66
+ return fail(true);
67
+ const ready = item.state === 'ready';
68
+ const expectedAvailability = ready ? 'available' : item.state === 'readiness_unknown' ? 'unknown' : 'unavailable';
69
+ if (item.enabled !== ready || item.availability !== expectedAvailability ||
70
+ (ready && (!item.releaseEnabled || !item.allowed)) ||
71
+ (item.state === 'disabled' ? item.releaseEnabled : !item.releaseEnabled))
72
+ return fail();
73
+ capabilities.push({
74
+ code, releaseEnabled: item.releaseEnabled, enabled: item.enabled, allowed: item.allowed,
75
+ state: item.state, availability: item.availability,
76
+ contractVersions: [...item.contractVersions],
77
+ });
78
+ }
79
+ const deprecations = [];
80
+ for (const item of value.deprecations) {
81
+ if (!record(item) || !text(item.contract) ||
82
+ (item.replacement !== undefined && !text(item.replacement)) ||
83
+ (item.sunsetAt !== undefined && !text(item.sunsetAt)))
84
+ return fail();
85
+ deprecations.push({ contract: item.contract,
86
+ ...(item.replacement === undefined ? {} : { replacement: item.replacement }),
87
+ ...(item.sunsetAt === undefined ? {} : { sunsetAt: item.sunsetAt }),
88
+ });
89
+ }
90
+ return {
91
+ product: 'cloud', ...(value.productVersion === undefined ? {} : { productVersion: value.productVersion }),
92
+ contractVersion: '1.0', apiContractVersions: [...value.apiContractVersions],
93
+ interpreterContractVersions: [...value.interpreterContractVersions], sdkContractVersions: [...value.sdkContractVersions],
94
+ capabilities, deprecations,
95
+ };
96
+ }
97
+ export class CapabilitiesClient {
98
+ transport;
99
+ constructor(resolveClient = getClient, config = {}) {
100
+ this.transport = new CloudTransport(resolveClient, config);
101
+ }
102
+ /** Workspace comes exclusively from the authenticated key. One POST, no automatic retries or caching. */
103
+ async discover() {
104
+ if (arguments.length !== 0)
105
+ throw new TypeError('Tier0 SDK: capability discovery accepts no arguments.');
106
+ let response;
107
+ try {
108
+ response = await this.transport.post('/openapi/v1/capabilities/discover', {});
109
+ }
110
+ catch (error) {
111
+ if (!(error instanceof CloudTransportError))
112
+ throw error;
113
+ throw new CapabilityError('Capability discovery HTTP exchange failed.', {
114
+ status: error.status, errorCode: `CAPABILITY_${error.kind}`,
115
+ });
116
+ }
117
+ const { value, status, ok } = response;
118
+ if (!ok) {
119
+ if (!record(value) || !text(value.errorCode) || typeof value.message !== 'string') {
120
+ throw new CapabilityError('Invalid capability error response.', { status, errorCode: 'CAPABILITY_PROTOCOL_ERROR' });
121
+ }
122
+ throw new CapabilityError(value.message, { status, errorCode: value.errorCode });
123
+ }
124
+ return discovery(value, status);
125
+ }
126
+ }
127
+ /** Uses configureClient()/runtime environment, resolving the host and workspace key on every call. */
128
+ export const capabilities = new CapabilitiesClient();
129
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/capabilities.ts"],"names":[],"mappings":"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","sourcesContent":["import { CloudTransport, CloudTransportError, type CloudTransportConfig } from './cloud-transport.js';\r\nimport { getClient, type HttpClient } from './openapi/client.js';\r\n\r\nexport type CapabilityCode = 'namespace.v2' | 'source.v1' | 'stream.v2' | 'control.v1' | 'control.invoke.v1';\r\nexport type CapabilityState = 'disabled' | 'not_supported' | 'unavailable' | 'readiness_unknown' | 'ready';\r\nexport type CapabilityAvailability = 'unavailable' | 'unknown' | 'available';\r\n\r\nexport interface PublicCapability {\r\n code: CapabilityCode;\r\n /** Public release and workspace gates; does not establish runtime readiness. */\r\n releaseEnabled: boolean;\r\n /** Server-assessed implementation/readiness, never inferred from releaseEnabled. */\r\n enabled: boolean;\r\n /** Authorization summary, not a grant for every individual Control code. */\r\n allowed: boolean;\r\n state: CapabilityState;\r\n /** Not device online status or execution/ACK confirmation. */\r\n availability: CapabilityAvailability;\r\n contractVersions: string[];\r\n}\r\n\r\nexport interface CapabilityDeprecation {\r\n contract: string;\r\n replacement?: string;\r\n sunsetAt?: string;\r\n}\r\n\r\nexport interface CapabilityDiscoverResponse {\r\n product: 'cloud';\r\n /** Trusted server configuration only; absent when unconfigured. */\r\n productVersion?: string;\r\n contractVersion: '1.0';\r\n apiContractVersions: string[];\r\n interpreterContractVersions: string[];\r\n /** Public SDK contract labels, not npm package versions. */\r\n sdkContractVersions: string[];\r\n capabilities: PublicCapability[];\r\n deprecations: CapabilityDeprecation[];\r\n}\r\n\r\nexport interface CapabilityErrorInfo {\r\n status?: number;\r\n /** Gateway string code (including unknown future codes), or an SDK-local CAPABILITY_* code. */\r\n errorCode: string;\r\n}\r\n\r\nexport class CapabilityError extends Error {\r\n readonly status?: number;\r\n readonly errorCode: string;\r\n readonly retryable = false;\r\n\r\n constructor(message: string, info: CapabilityErrorInfo) {\r\n super(message);\r\n this.name = 'CapabilityError';\r\n this.status = info.status;\r\n this.errorCode = info.errorCode;\r\n }\r\n}\r\n\r\nconst contracts: Record<CapabilityCode, string[]> = {\r\n 'namespace.v2': ['openapi/v2'],\r\n 'source.v1': ['openapi/v1'],\r\n 'stream.v2': ['tier0-stream/v2'],\r\n 'control.v1': ['openapi/v1', 'control/v1'],\r\n 'control.invoke.v1': ['openapi/v1', 'tier0-stream/v2', 'control/v1'],\r\n};\r\n\r\nfunction record(value: unknown): value is Record<string, unknown> {\r\n return value !== null && typeof value === 'object' && !Array.isArray(value);\r\n}\r\nfunction text(value: unknown): value is string {\r\n return typeof value === 'string' && value.length > 0;\r\n}\r\nfunction strings(value: unknown): value is string[] {\r\n return Array.isArray(value) && value.every(text) && new Set(value).size === value.length;\r\n}\r\n\r\n/** Validate and explicitly project the frozen contract; unknown capabilities/extension fields are ignored. */\r\nfunction discovery(value: unknown, status: number): CapabilityDiscoverResponse {\r\n const fail = (version = false): never => {\r\n throw new CapabilityError(version ? 'Unsupported capability contract version.' : 'Invalid capability discovery response.', {\r\n status, errorCode: version ? 'CAPABILITY_UNSUPPORTED_VERSION' : 'CAPABILITY_PROTOCOL_ERROR',\r\n });\r\n };\r\n if (!record(value)) return fail();\r\n if (!text(value.product) || !text(value.contractVersion) ||\r\n !strings(value.apiContractVersions) || !strings(value.interpreterContractVersions) || !strings(value.sdkContractVersions) ||\r\n !Array.isArray(value.capabilities) || !Array.isArray(value.deprecations) ||\r\n (value.productVersion !== undefined && !text(value.productVersion))) return fail();\r\n if (value.product !== 'cloud' || value.contractVersion !== '1.0' ||\r\n !value.apiContractVersions.includes('openapi/v1') ||\r\n !value.interpreterContractVersions.includes('tier0-stream/v2') ||\r\n !value.sdkContractVersions.includes('control/v1')) return fail(true);\r\n\r\n const capabilities: PublicCapability[] = [];\r\n const seen = new Set<string>();\r\n for (const item of value.capabilities) {\r\n if (!record(item) || !text(item.code)) return fail();\r\n if (!Object.prototype.hasOwnProperty.call(contracts, item.code)) continue;\r\n const code = item.code as CapabilityCode;\r\n if (seen.has(code)) return fail();\r\n seen.add(code);\r\n if (typeof item.releaseEnabled !== 'boolean' || typeof item.enabled !== 'boolean' || typeof item.allowed !== 'boolean' ||\r\n !['disabled', 'not_supported', 'unavailable', 'readiness_unknown', 'ready'].includes(item.state as string) ||\r\n !['unavailable', 'unknown', 'available'].includes(item.availability as string) || !strings(item.contractVersions)) return fail();\r\n if (contracts[code].some(version =>\r\n !(item.contractVersions as string[]).includes(version) ||\r\n (version.startsWith('openapi/') && !(value.apiContractVersions as string[]).includes(version)))) return fail(true);\r\n const ready = item.state === 'ready';\r\n const expectedAvailability = ready ? 'available' : item.state === 'readiness_unknown' ? 'unknown' : 'unavailable';\r\n if (item.enabled !== ready || item.availability !== expectedAvailability ||\r\n (ready && (!item.releaseEnabled || !item.allowed)) ||\r\n (item.state === 'disabled' ? item.releaseEnabled : !item.releaseEnabled)) return fail();\r\n capabilities.push({\r\n code, releaseEnabled: item.releaseEnabled, enabled: item.enabled, allowed: item.allowed,\r\n state: item.state as CapabilityState, availability: item.availability as CapabilityAvailability,\r\n contractVersions: [...item.contractVersions],\r\n });\r\n }\r\n const deprecations: CapabilityDeprecation[] = [];\r\n for (const item of value.deprecations) {\r\n if (!record(item) || !text(item.contract) ||\r\n (item.replacement !== undefined && !text(item.replacement)) ||\r\n (item.sunsetAt !== undefined && !text(item.sunsetAt))) return fail();\r\n deprecations.push({ contract: item.contract,\r\n ...(item.replacement === undefined ? {} : { replacement: item.replacement as string }),\r\n ...(item.sunsetAt === undefined ? {} : { sunsetAt: item.sunsetAt as string }),\r\n });\r\n }\r\n return {\r\n product: 'cloud', ...(value.productVersion === undefined ? {} : { productVersion: value.productVersion as string }),\r\n contractVersion: '1.0', apiContractVersions: [...value.apiContractVersions],\r\n interpreterContractVersions: [...value.interpreterContractVersions], sdkContractVersions: [...value.sdkContractVersions],\r\n capabilities, deprecations,\r\n };\r\n}\r\n\r\nexport class CapabilitiesClient {\r\n private readonly transport: CloudTransport;\r\n\r\n constructor(resolveClient: () => HttpClient = getClient, config: CloudTransportConfig = {}) {\r\n this.transport = new CloudTransport(resolveClient, config);\r\n }\r\n\r\n /** Workspace comes exclusively from the authenticated key. One POST, no automatic retries or caching. */\r\n async discover(): Promise<CapabilityDiscoverResponse> {\r\n if (arguments.length !== 0) throw new TypeError('Tier0 SDK: capability discovery accepts no arguments.');\r\n let response: Awaited<ReturnType<CloudTransport['post']>>;\r\n try {\r\n response = await this.transport.post('/openapi/v1/capabilities/discover', {});\r\n } catch (error) {\r\n if (!(error instanceof CloudTransportError)) throw error;\r\n throw new CapabilityError('Capability discovery HTTP exchange failed.', {\r\n status: error.status, errorCode: `CAPABILITY_${error.kind}`,\r\n });\r\n }\r\n const { value, status, ok } = response;\r\n if (!ok) {\r\n if (!record(value) || !text(value.errorCode) || typeof value.message !== 'string') {\r\n throw new CapabilityError('Invalid capability error response.', { status, errorCode: 'CAPABILITY_PROTOCOL_ERROR' });\r\n }\r\n throw new CapabilityError(value.message, { status, errorCode: value.errorCode });\r\n }\r\n return discovery(value, status);\r\n }\r\n}\r\n\r\n/** Uses configureClient()/runtime environment, resolving the host and workspace key on every call. */\r\nexport const capabilities = new CapabilitiesClient();\r\n"]}