@tier0/sdk-v2 0.9.10 → 0.10.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 (237) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/LICENSE +21 -21
  3. package/README.md +160 -24
  4. package/dist/cjs/client.d.ts +79 -3
  5. package/dist/cjs/client.js +4 -6
  6. package/dist/cjs/client.js.map +1 -1
  7. package/dist/cjs/cloud-server.d.ts +33 -26
  8. package/dist/cjs/cloud-server.js +102 -100
  9. package/dist/cjs/cloud-server.js.map +1 -1
  10. package/dist/cjs/cloud-transport.d.ts +15 -20
  11. package/dist/cjs/cloud-transport.js +87 -68
  12. package/dist/cjs/cloud-transport.js.map +1 -1
  13. package/dist/cjs/data/bootstrap.js +3 -4
  14. package/dist/cjs/data/bootstrap.js.map +1 -1
  15. package/dist/cjs/data/call.d.ts +1 -3
  16. package/dist/cjs/data/call.js +8 -12
  17. package/dist/cjs/data/call.js.map +1 -1
  18. package/dist/cjs/data/client.d.ts +8 -7
  19. package/dist/cjs/data/client.js +24 -11
  20. package/dist/cjs/data/client.js.map +1 -1
  21. package/dist/cjs/data/collection.d.ts +3 -5
  22. package/dist/cjs/data/collection.js +3 -4
  23. package/dist/cjs/data/collection.js.map +1 -1
  24. package/dist/cjs/data/context.d.ts +5 -11
  25. package/dist/cjs/data/context.js +21 -36
  26. package/dist/cjs/data/context.js.map +1 -1
  27. package/dist/cjs/data/error.js +1 -1
  28. package/dist/cjs/data/error.js.map +1 -1
  29. package/dist/cjs/data/index.d.ts +5 -3
  30. package/dist/cjs/data/index.js +5 -5
  31. package/dist/cjs/data/index.js.map +1 -1
  32. package/dist/cjs/data/relay.d.ts +51 -0
  33. package/dist/cjs/data/relay.js +371 -0
  34. package/dist/cjs/data/relay.js.map +1 -0
  35. package/dist/cjs/data/subscribe.d.ts +22 -38
  36. package/dist/cjs/data/subscribe.js +22 -28
  37. package/dist/cjs/data/subscribe.js.map +1 -1
  38. package/dist/cjs/event-stream.d.ts +28 -0
  39. package/dist/cjs/event-stream.js +222 -0
  40. package/dist/cjs/event-stream.js.map +1 -0
  41. package/dist/cjs/mq/client.d.ts +32 -1
  42. package/dist/cjs/mq/client.js +404 -69
  43. package/dist/cjs/mq/client.js.map +1 -1
  44. package/dist/cjs/mq/index.d.ts +1 -0
  45. package/dist/cjs/mq/index.js +3 -1
  46. package/dist/cjs/mq/index.js.map +1 -1
  47. package/dist/cjs/mq/topic.d.ts +29 -0
  48. package/dist/cjs/mq/topic.js +48 -0
  49. package/dist/cjs/mq/topic.js.map +1 -0
  50. package/dist/cjs/mq/types.d.ts +21 -1
  51. package/dist/cjs/mq/types.js.map +1 -1
  52. package/dist/cjs/openapi/api.generated.d.ts +20 -0
  53. package/dist/cjs/openapi/api.generated.js +11 -0
  54. package/dist/cjs/openapi/api.generated.js.map +1 -1
  55. package/dist/cjs/openapi/client.d.ts +46 -0
  56. package/dist/cjs/openapi/client.js +158 -10
  57. package/dist/cjs/openapi/client.js.map +1 -1
  58. package/dist/cjs/openapi/codecs.generated.d.ts +74 -0
  59. package/dist/cjs/openapi/codecs.generated.js +1 -1
  60. package/dist/cjs/openapi/codecs.generated.js.map +1 -1
  61. package/dist/cjs/openapi/types.generated.d.ts +205 -1
  62. package/dist/cjs/openapi/types.generated.js.map +1 -1
  63. package/dist/cjs/page-runtime.d.ts +48 -0
  64. package/dist/cjs/page-runtime.js +74 -0
  65. package/dist/cjs/page-runtime.js.map +1 -0
  66. package/dist/cjs/platform-proxy.d.ts +17 -0
  67. package/dist/cjs/platform-proxy.js +52 -0
  68. package/dist/cjs/platform-proxy.js.map +1 -0
  69. package/dist/cjs/runtime-context.d.ts +2 -1
  70. package/dist/cjs/runtime-context.js +6 -2
  71. package/dist/cjs/runtime-context.js.map +1 -1
  72. package/dist/cjs/runtime-env.js.map +1 -1
  73. package/dist/cjs/source.d.ts +19 -1
  74. package/dist/cjs/source.js +9 -3
  75. package/dist/cjs/source.js.map +1 -1
  76. package/dist/cjs/stream.js +3 -2
  77. package/dist/cjs/stream.js.map +1 -1
  78. package/dist/cjs/streams/contract.generated.d.ts +7 -1
  79. package/dist/cjs/streams/contract.generated.js.map +1 -1
  80. package/dist/cjs/streams/messages.js +1 -10
  81. package/dist/cjs/streams/messages.js.map +1 -1
  82. package/dist/cjs/streams/requests.d.ts +3 -0
  83. package/dist/cjs/streams/requests.js +5 -2
  84. package/dist/cjs/streams/requests.js.map +1 -1
  85. package/dist/cjs/streams/transport.d.ts +1 -13
  86. package/dist/cjs/streams/transport.js +2 -18
  87. package/dist/cjs/streams/transport.js.map +1 -1
  88. package/dist/cjs/uns-v2/client.d.ts +1 -6
  89. package/dist/cjs/uns-v2/client.js +30 -6
  90. package/dist/cjs/uns-v2/client.js.map +1 -1
  91. package/dist/cjs/uns-v2/data-client.d.ts +5 -2
  92. package/dist/cjs/uns-v2/data-client.js +7 -4
  93. package/dist/cjs/uns-v2/data-client.js.map +1 -1
  94. package/dist/cjs/uns-v2/generated.d.ts +6783 -4655
  95. package/dist/cjs/uns-v2/generated.js +221 -65
  96. package/dist/cjs/uns-v2/generated.js.map +1 -1
  97. package/dist/cjs/uns-v2/sse.d.ts +7 -1
  98. package/dist/cjs/uns-v2/sse.js +12 -2
  99. package/dist/cjs/uns-v2/sse.js.map +1 -1
  100. package/dist/esm/client.d.ts +79 -3
  101. package/dist/esm/client.js +5 -7
  102. package/dist/esm/client.js.map +1 -1
  103. package/dist/esm/cloud-server.d.ts +33 -26
  104. package/dist/esm/cloud-server.js +99 -97
  105. package/dist/esm/cloud-server.js.map +1 -1
  106. package/dist/esm/cloud-transport.d.ts +15 -20
  107. package/dist/esm/cloud-transport.js +86 -67
  108. package/dist/esm/cloud-transport.js.map +1 -1
  109. package/dist/esm/data/bootstrap.js +3 -4
  110. package/dist/esm/data/bootstrap.js.map +1 -1
  111. package/dist/esm/data/call.d.ts +1 -3
  112. package/dist/esm/data/call.js +9 -13
  113. package/dist/esm/data/call.js.map +1 -1
  114. package/dist/esm/data/client.d.ts +8 -7
  115. package/dist/esm/data/client.js +22 -9
  116. package/dist/esm/data/client.js.map +1 -1
  117. package/dist/esm/data/collection.d.ts +3 -5
  118. package/dist/esm/data/collection.js +3 -4
  119. package/dist/esm/data/collection.js.map +1 -1
  120. package/dist/esm/data/context.d.ts +5 -11
  121. package/dist/esm/data/context.js +19 -33
  122. package/dist/esm/data/context.js.map +1 -1
  123. package/dist/esm/data/error.js +1 -1
  124. package/dist/esm/data/error.js.map +1 -1
  125. package/dist/esm/data/index.d.ts +5 -3
  126. package/dist/esm/data/index.js +3 -2
  127. package/dist/esm/data/index.js.map +1 -1
  128. package/dist/esm/data/relay.d.ts +51 -0
  129. package/dist/esm/data/relay.js +368 -0
  130. package/dist/esm/data/relay.js.map +1 -0
  131. package/dist/esm/data/subscribe.d.ts +22 -38
  132. package/dist/esm/data/subscribe.js +22 -27
  133. package/dist/esm/data/subscribe.js.map +1 -1
  134. package/dist/esm/event-stream.d.ts +28 -0
  135. package/dist/esm/event-stream.js +217 -0
  136. package/dist/esm/event-stream.js.map +1 -0
  137. package/dist/esm/mq/client.d.ts +32 -1
  138. package/dist/esm/mq/client.js +404 -69
  139. package/dist/esm/mq/client.js.map +1 -1
  140. package/dist/esm/mq/index.d.ts +1 -0
  141. package/dist/esm/mq/index.js +1 -0
  142. package/dist/esm/mq/index.js.map +1 -1
  143. package/dist/esm/mq/topic.d.ts +29 -0
  144. package/dist/esm/mq/topic.js +44 -0
  145. package/dist/esm/mq/topic.js.map +1 -0
  146. package/dist/esm/mq/types.d.ts +21 -1
  147. package/dist/esm/mq/types.js.map +1 -1
  148. package/dist/esm/openapi/api.generated.d.ts +20 -0
  149. package/dist/esm/openapi/api.generated.js +11 -0
  150. package/dist/esm/openapi/api.generated.js.map +1 -1
  151. package/dist/esm/openapi/client.d.ts +46 -0
  152. package/dist/esm/openapi/client.js +157 -10
  153. package/dist/esm/openapi/client.js.map +1 -1
  154. package/dist/esm/openapi/codecs.generated.d.ts +74 -0
  155. package/dist/esm/openapi/codecs.generated.js +1 -1
  156. package/dist/esm/openapi/codecs.generated.js.map +1 -1
  157. package/dist/esm/openapi/types.generated.d.ts +205 -1
  158. package/dist/esm/openapi/types.generated.js.map +1 -1
  159. package/dist/esm/page-runtime.d.ts +48 -0
  160. package/dist/esm/page-runtime.js +65 -0
  161. package/dist/esm/page-runtime.js.map +1 -0
  162. package/dist/esm/platform-proxy.d.ts +17 -0
  163. package/dist/esm/platform-proxy.js +47 -0
  164. package/dist/esm/platform-proxy.js.map +1 -0
  165. package/dist/esm/runtime-context.d.ts +2 -1
  166. package/dist/esm/runtime-context.js +6 -2
  167. package/dist/esm/runtime-context.js.map +1 -1
  168. package/dist/esm/runtime-env.js.map +1 -1
  169. package/dist/esm/source.d.ts +19 -1
  170. package/dist/esm/source.js +10 -4
  171. package/dist/esm/source.js.map +1 -1
  172. package/dist/esm/stream.js +4 -3
  173. package/dist/esm/stream.js.map +1 -1
  174. package/dist/esm/streams/contract.generated.d.ts +7 -1
  175. package/dist/esm/streams/contract.generated.js.map +1 -1
  176. package/dist/esm/streams/messages.js +1 -10
  177. package/dist/esm/streams/messages.js.map +1 -1
  178. package/dist/esm/streams/requests.d.ts +3 -0
  179. package/dist/esm/streams/requests.js +5 -2
  180. package/dist/esm/streams/requests.js.map +1 -1
  181. package/dist/esm/streams/transport.d.ts +1 -13
  182. package/dist/esm/streams/transport.js +1 -17
  183. package/dist/esm/streams/transport.js.map +1 -1
  184. package/dist/esm/uns-v2/client.d.ts +1 -6
  185. package/dist/esm/uns-v2/client.js +30 -6
  186. package/dist/esm/uns-v2/client.js.map +1 -1
  187. package/dist/esm/uns-v2/data-client.d.ts +5 -2
  188. package/dist/esm/uns-v2/data-client.js +8 -5
  189. package/dist/esm/uns-v2/data-client.js.map +1 -1
  190. package/dist/esm/uns-v2/generated.d.ts +6783 -4655
  191. package/dist/esm/uns-v2/generated.js +221 -65
  192. package/dist/esm/uns-v2/generated.js.map +1 -1
  193. package/dist/esm/uns-v2/sse.d.ts +7 -1
  194. package/dist/esm/uns-v2/sse.js +12 -2
  195. package/dist/esm/uns-v2/sse.js.map +1 -1
  196. package/package.json +25 -12
  197. package/skills/tier0-sdk-v2/SKILL.md +11 -5
  198. package/skills/tier0-sdk-v2/references/integration.md +14 -24
  199. package/skills/tier0-sdk-v2/tier0-sdk-v2-data/SKILL.md +11 -5
  200. package/skills/tier0-sdk-v2/tier0-sdk-v2-data/references/consistency.md +6 -10
  201. package/skills/tier0-sdk-v2/tier0-sdk-v2-data/references/errors.md +20 -3
  202. package/skills/tier0-sdk-v2/tier0-sdk-v2-data/references/read-write.md +46 -13
  203. package/skills/tier0-sdk-v2/tier0-sdk-v2-members/SKILL.md +2 -2
  204. package/skills/tier0-sdk-v2/tier0-sdk-v2-members/references/app-members.md +5 -1
  205. package/skills/tier0-sdk-v2/tier0-sdk-v2-mq/SKILL.md +25 -0
  206. package/skills/tier0-sdk-v2/tier0-sdk-v2-mq/references/quickstart.md +1 -1
  207. package/skills/tier0-sdk-v2/tier0-sdk-v2-notifications/SKILL.md +3 -3
  208. package/skills/tier0-sdk-v2/tier0-sdk-v2-notifications/references/send.md +6 -6
  209. package/skills/tier0-sdk-v2/tier0-sdk-v2-source/SKILL.md +4 -4
  210. package/skills/tier0-sdk-v2/tier0-sdk-v2-source/references/changes.md +2 -2
  211. package/skills/tier0-sdk-v2/tier0-sdk-v2-source/references/create.md +26 -36
  212. package/skills/tier0-sdk-v2/tier0-sdk-v2-source/references/delete.md +9 -23
  213. package/skills/tier0-sdk-v2/tier0-sdk-v2-source/references/protocols.md +12 -29
  214. package/skills/tier0-sdk-v2/tier0-sdk-v2-source/references/read.md +4 -5
  215. package/skills/tier0-sdk-v2/tier0-sdk-v2-source/references/update.md +5 -5
  216. package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/SKILL.md +3 -3
  217. package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/create.md +23 -9
  218. package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/deploy.md +14 -12
  219. package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/http-server.md +4 -4
  220. package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/read.md +4 -3
  221. package/skills/tier0-sdk-v2/tier0-sdk-v2-streams/SKILL.md +12 -12
  222. package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/SKILL.md +2 -1
  223. package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/create.md +2 -2
  224. package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/delete.md +22 -1
  225. package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/read.md +5 -6
  226. package/dist/cjs/app-identity-contract.generated.d.ts +0 -22
  227. package/dist/cjs/app-identity-contract.generated.js +0 -51
  228. package/dist/cjs/app-identity-contract.generated.js.map +0 -1
  229. package/dist/cjs/runtime.d.ts +0 -13
  230. package/dist/cjs/runtime.js +0 -51
  231. package/dist/cjs/runtime.js.map +0 -1
  232. package/dist/esm/app-identity-contract.generated.d.ts +0 -22
  233. package/dist/esm/app-identity-contract.generated.js +0 -48
  234. package/dist/esm/app-identity-contract.generated.js.map +0 -1
  235. package/dist/esm/runtime.d.ts +0 -13
  236. package/dist/esm/runtime.js +0 -46
  237. package/dist/esm/runtime.js.map +0 -1
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The platform page runtime (design 21.3), served by the front door at
3
+ * `/__tier0/runtime.js`, and the platform errors of design 21.1. Browser-safe.
4
+ *
5
+ * The runtime owns presence and the authorization prompt. It never wraps
6
+ * `fetch`, so callers report what they see: an authorization failure goes to
7
+ * `reportAuthError`, a sleeping App waits for `resumed`. Without the runtime
8
+ * (local development, outside the platform) subscriptions are no-ops and
9
+ * errors go straight to the caller.
10
+ */
11
+ export type Tier0AppState = 'unknown' | 'running' | 'starting' | 'sleeping' | 'failed' | 'auth_required';
12
+ export type Tier0Event = 'state' | 'sleeping' | 'starting' | 'resumed' | 'auth-required';
13
+ export type Tier0AuthErrorCode = 'grant_expired' | 'signed_out' | 'need_role' | 'unavailable';
14
+ export interface Tier0PageRuntimeV1 {
15
+ readonly version: string;
16
+ readonly appId: string;
17
+ readonly policy: 'visible' | 'on_demand' | 'always_on';
18
+ getState(): Tier0AppState;
19
+ getSleepAt(): number | null;
20
+ on(event: Tier0Event, listener: (detail: any) => void): () => void;
21
+ reportAuthError(code: Tier0AuthErrorCode): void;
22
+ keepAwake(): void;
23
+ }
24
+ export declare function getPageRuntime(): Tier0PageRuntimeV1 | undefined;
25
+ /** Subscribes to a runtime event; a no-op without the runtime. Returns the unsubscribe function. */
26
+ export declare function onPageRuntime(event: Tier0Event, listener: (detail: any) => void): () => void;
27
+ /** No instance is serving the App, so background work should wait for `resumed`. */
28
+ export declare function isAppSleeping(): boolean;
29
+ export declare function isAuthErrorCode(code: string | undefined): code is Tier0AuthErrorCode;
30
+ /** Tells the runtime about an authorization failure; true when `code` is one. */
31
+ export declare function reportAuthError(code: string | undefined): boolean;
32
+ /** A platform answer in the design 21.1 format. */
33
+ export interface PlatformError {
34
+ status: number;
35
+ code: string;
36
+ retryable: boolean;
37
+ retryAfterMs?: number;
38
+ /** App state, on `sbx_sleeping`, `sbx_starting` and `sbx_start_failed`. */
39
+ state?: string;
40
+ }
41
+ /** The platform error code of a response. The gateway strips this header from App responses, so an App's own 503 never has it. */
42
+ export declare function platformErrorCode(response: Response): string | undefined;
43
+ /**
44
+ * The platform error of a response, or undefined for an App's own answer.
45
+ * Reads a clone, so the caller can still read the body. An unknown code keeps
46
+ * the body's `retryable` (design 21.1: handle by status and `retryable`).
47
+ */
48
+ export declare function readPlatformError(response: Response): Promise<PlatformError | undefined>;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * The platform page runtime (design 21.3), served by the front door at
4
+ * `/__tier0/runtime.js`, and the platform errors of design 21.1. Browser-safe.
5
+ *
6
+ * The runtime owns presence and the authorization prompt. It never wraps
7
+ * `fetch`, so callers report what they see: an authorization failure goes to
8
+ * `reportAuthError`, a sleeping App waits for `resumed`. Without the runtime
9
+ * (local development, outside the platform) subscriptions are no-ops and
10
+ * errors go straight to the caller.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.getPageRuntime = getPageRuntime;
14
+ exports.onPageRuntime = onPageRuntime;
15
+ exports.isAppSleeping = isAppSleeping;
16
+ exports.isAuthErrorCode = isAuthErrorCode;
17
+ exports.reportAuthError = reportAuthError;
18
+ exports.platformErrorCode = platformErrorCode;
19
+ exports.readPlatformError = readPlatformError;
20
+ const RUNTIME_KEY = Symbol.for('tier0.page-runtime.v1');
21
+ function getPageRuntime() {
22
+ return globalThis[RUNTIME_KEY];
23
+ }
24
+ /** Subscribes to a runtime event; a no-op without the runtime. Returns the unsubscribe function. */
25
+ function onPageRuntime(event, listener) {
26
+ return getPageRuntime()?.on(event, listener) ?? (() => undefined);
27
+ }
28
+ /** No instance is serving the App, so background work should wait for `resumed`. */
29
+ function isAppSleeping() {
30
+ return getPageRuntime()?.getState() === 'sleeping';
31
+ }
32
+ const AUTH_ERROR_CODES = new Set(['grant_expired', 'signed_out', 'need_role', 'unavailable']);
33
+ function isAuthErrorCode(code) {
34
+ return code !== undefined && AUTH_ERROR_CODES.has(code);
35
+ }
36
+ /** Tells the runtime about an authorization failure; true when `code` is one. */
37
+ function reportAuthError(code) {
38
+ if (!isAuthErrorCode(code))
39
+ return false;
40
+ getPageRuntime()?.reportAuthError(code);
41
+ return true;
42
+ }
43
+ /** The platform error code of a response. The gateway strips this header from App responses, so an App's own 503 never has it. */
44
+ function platformErrorCode(response) {
45
+ return response.headers.get('x-sbx-error') ?? undefined;
46
+ }
47
+ /**
48
+ * The platform error of a response, or undefined for an App's own answer.
49
+ * Reads a clone, so the caller can still read the body. An unknown code keeps
50
+ * the body's `retryable` (design 21.1: handle by status and `retryable`).
51
+ */
52
+ async function readPlatformError(response) {
53
+ const code = platformErrorCode(response);
54
+ if (!code)
55
+ return undefined;
56
+ let body = {};
57
+ try {
58
+ const value = await response.clone().json();
59
+ if (value !== null && typeof value === 'object')
60
+ body = value;
61
+ }
62
+ catch {
63
+ // The header is enough to classify it.
64
+ }
65
+ const retryAfter = body.retry_after_ms;
66
+ return {
67
+ status: response.status,
68
+ code,
69
+ retryable: body.retryable === true,
70
+ ...(typeof retryAfter === 'number' && retryAfter >= 0 ? { retryAfterMs: retryAfter } : {}),
71
+ ...(typeof body.state === 'string' ? { state: body.state } : {}),
72
+ };
73
+ }
74
+ //# sourceMappingURL=page-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-runtime.js","sourceRoot":"","sources":["../../src/page-runtime.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAmBH,wCAEC;AAGD,sCAEC;AAGD,sCAEC;AAID,0CAEC;AAGD,0CAIC;AAaD,8CAEC;AAOD,8CAkBC;AAnED,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAExD,SAAgB,cAAc;IAC5B,OAAQ,UAAyE,CAAC,WAAW,CAAC,CAAC;AACjG,CAAC;AAED,oGAAoG;AACpG,SAAgB,aAAa,CAAC,KAAiB,EAAE,QAA+B;IAC9E,OAAO,cAAc,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACpE,CAAC;AAED,oFAAoF;AACpF,SAAgB,aAAa;IAC3B,OAAO,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,UAAU,CAAC;AACrD,CAAC;AAED,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAqB,CAAC,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AAEvI,SAAgB,eAAe,CAAC,IAAwB;IACtD,OAAO,IAAI,KAAK,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,iFAAiF;AACjF,SAAgB,eAAe,CAAC,IAAwB;IACtD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,cAAc,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAYD,kIAAkI;AAClI,SAAgB,iBAAiB,CAAC,QAAkB;IAClD,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CAAC,QAAkB;IACxD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,IAAI,GAA4B,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,IAAI,GAAG,KAAgC,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI;QAClC,GAAG,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC","sourcesContent":["/**\n * The platform page runtime (design 21.3), served by the front door at\n * `/__tier0/runtime.js`, and the platform errors of design 21.1. Browser-safe.\n *\n * The runtime owns presence and the authorization prompt. It never wraps\n * `fetch`, so callers report what they see: an authorization failure goes to\n * `reportAuthError`, a sleeping App waits for `resumed`. Without the runtime\n * (local development, outside the platform) subscriptions are no-ops and\n * errors go straight to the caller.\n */\n\nexport type Tier0AppState = 'unknown' | 'running' | 'starting' | 'sleeping' | 'failed' | 'auth_required';\nexport type Tier0Event = 'state' | 'sleeping' | 'starting' | 'resumed' | 'auth-required';\nexport type Tier0AuthErrorCode = 'grant_expired' | 'signed_out' | 'need_role' | 'unavailable';\n\nexport interface Tier0PageRuntimeV1 {\n readonly version: string;\n readonly appId: string;\n readonly policy: 'visible' | 'on_demand' | 'always_on';\n getState(): Tier0AppState;\n getSleepAt(): number | null;\n on(event: Tier0Event, listener: (detail: any) => void): () => void;\n reportAuthError(code: Tier0AuthErrorCode): void;\n keepAwake(): void;\n}\n\nconst RUNTIME_KEY = Symbol.for('tier0.page-runtime.v1');\n\nexport function getPageRuntime(): Tier0PageRuntimeV1 | undefined {\n return (globalThis as typeof globalThis & { [RUNTIME_KEY]?: Tier0PageRuntimeV1 })[RUNTIME_KEY];\n}\n\n/** Subscribes to a runtime event; a no-op without the runtime. Returns the unsubscribe function. */\nexport function onPageRuntime(event: Tier0Event, listener: (detail: any) => void): () => void {\n return getPageRuntime()?.on(event, listener) ?? (() => undefined);\n}\n\n/** No instance is serving the App, so background work should wait for `resumed`. */\nexport function isAppSleeping(): boolean {\n return getPageRuntime()?.getState() === 'sleeping';\n}\n\nconst AUTH_ERROR_CODES: ReadonlySet<string> = new Set<Tier0AuthErrorCode>(['grant_expired', 'signed_out', 'need_role', 'unavailable']);\n\nexport function isAuthErrorCode(code: string | undefined): code is Tier0AuthErrorCode {\n return code !== undefined && AUTH_ERROR_CODES.has(code);\n}\n\n/** Tells the runtime about an authorization failure; true when `code` is one. */\nexport function reportAuthError(code: string | undefined): boolean {\n if (!isAuthErrorCode(code)) return false;\n getPageRuntime()?.reportAuthError(code);\n return true;\n}\n\n/** A platform answer in the design 21.1 format. */\nexport interface PlatformError {\n status: number;\n code: string;\n retryable: boolean;\n retryAfterMs?: number;\n /** App state, on `sbx_sleeping`, `sbx_starting` and `sbx_start_failed`. */\n state?: string;\n}\n\n/** The platform error code of a response. The gateway strips this header from App responses, so an App's own 503 never has it. */\nexport function platformErrorCode(response: Response): string | undefined {\n return response.headers.get('x-sbx-error') ?? undefined;\n}\n\n/**\n * The platform error of a response, or undefined for an App's own answer.\n * Reads a clone, so the caller can still read the body. An unknown code keeps\n * the body's `retryable` (design 21.1: handle by status and `retryable`).\n */\nexport async function readPlatformError(response: Response): Promise<PlatformError | undefined> {\n const code = platformErrorCode(response);\n if (!code) return undefined;\n let body: Record<string, unknown> = {};\n try {\n const value: unknown = await response.clone().json();\n if (value !== null && typeof value === 'object') body = value as Record<string, unknown>;\n } catch {\n // The header is enough to classify it.\n }\n const retryAfter = body.retry_after_ms;\n return {\n status: response.status,\n code,\n retryable: body.retryable === true,\n ...(typeof retryAfter === 'number' && retryAfter >= 0 ? { retryAfterMs: retryAfter } : {}),\n ...(typeof body.state === 'string' ? { state: body.state } : {}),\n };\n}\n"]}
@@ -0,0 +1,17 @@
1
+ /** Header the proxy requires on every request; it refuses requests without it. */
2
+ export declare const SDK_HEADER = "X-Tier0-SDK";
3
+ /** Marks an answer the proxy produced itself: the request never reached the platform. */
4
+ export declare const PROXY_HEADER = "X-Tier0-Proxy";
5
+ export declare const PROXY_NOT_FORWARDED = "not-forwarded";
6
+ export interface PlatformIdentity {
7
+ ws: string;
8
+ app: string;
9
+ }
10
+ /**
11
+ * True inside a Tier0 Preview or deployment that has no API key of its own.
12
+ * Throws when `TIER0_RUNTIME` is set to anything but `deployed` or `preview`
13
+ * and `TIER0_API_KEY` is not set.
14
+ */
15
+ export declare function platformProxyMode(): boolean;
16
+ /** The App this VM serves, from `TIER0_WORKSPACE_ID` and `TIER0_APP_ID`; undefined when incomplete or outside platform proxy mode. */
17
+ export declare function platformIdentity(): PlatformIdentity | undefined;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROXY_NOT_FORWARDED = exports.PROXY_HEADER = exports.SDK_HEADER = void 0;
4
+ exports.platformProxyMode = platformProxyMode;
5
+ exports.platformIdentity = platformIdentity;
6
+ /**
7
+ * Platform proxy mode (design 21.28): a runtime that holds no platform
8
+ * credential, where the node's `sbx-api-proxy` knows the VM by its source
9
+ * address and injects the App's key on the way to Backend and EMQX. The SDK
10
+ * then reads no credential and sends none; it marks each request with
11
+ * `X-Tier0-SDK: 1`, which the proxy requires. Today the platform puts the
12
+ * App's key into the App's process as `TIER0_API_KEY`, so Apps never run in
13
+ * this mode; it stays for runtimes without a key.
14
+ *
15
+ * The mode is on when `TIER0_RUNTIME` is `deployed` or `preview` and
16
+ * `TIER0_API_KEY` is not set. Any other value of `TIER0_RUNTIME` without
17
+ * `TIER0_API_KEY` is a configuration error and throws: guessing either way
18
+ * would send requests the proxy refuses, or none at all. A client given its
19
+ * own `apiKey` or `getApiKey` keeps using that and never looks.
20
+ *
21
+ * The identity comes from plain environment variables the platform sets. They
22
+ * are identifiers, not secrets: a wrong value is refused, it grants nothing.
23
+ */
24
+ const runtime_env_js_1 = require("./runtime-env.js");
25
+ /** Header the proxy requires on every request; it refuses requests without it. */
26
+ exports.SDK_HEADER = 'X-Tier0-SDK';
27
+ /** Marks an answer the proxy produced itself: the request never reached the platform. */
28
+ exports.PROXY_HEADER = 'X-Tier0-Proxy';
29
+ exports.PROXY_NOT_FORWARDED = 'not-forwarded';
30
+ const env = (name) => (0, runtime_env_js_1.getEnvVar)(name)?.trim() || undefined;
31
+ /**
32
+ * True inside a Tier0 Preview or deployment that has no API key of its own.
33
+ * Throws when `TIER0_RUNTIME` is set to anything but `deployed` or `preview`
34
+ * and `TIER0_API_KEY` is not set.
35
+ */
36
+ function platformProxyMode() {
37
+ const runtime = env('TIER0_RUNTIME');
38
+ if (runtime === undefined || env('TIER0_API_KEY') !== undefined)
39
+ return false;
40
+ if (runtime === 'deployed' || runtime === 'preview')
41
+ return true;
42
+ throw new TypeError(`Tier0 SDK v2: TIER0_RUNTIME must be "deployed" or "preview", not ${JSON.stringify(runtime.slice(0, 64))}.`);
43
+ }
44
+ /** The App this VM serves, from `TIER0_WORKSPACE_ID` and `TIER0_APP_ID`; undefined when incomplete or outside platform proxy mode. */
45
+ function platformIdentity() {
46
+ if (!platformProxyMode())
47
+ return undefined;
48
+ const ws = env('TIER0_WORKSPACE_ID');
49
+ const app = env('TIER0_APP_ID');
50
+ return ws && app ? { ws, app } : undefined;
51
+ }
52
+ //# sourceMappingURL=platform-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-proxy.js","sourceRoot":"","sources":["../../src/platform-proxy.ts"],"names":[],"mappings":";;;AAsCA,8CAKC;AAGD,4CAKC;AAnDD;;;;;;;;;;;;;;;;;GAiBG;AACH,qDAA6C;AAE7C,kFAAkF;AACrE,QAAA,UAAU,GAAG,aAAa,CAAC;AACxC,yFAAyF;AAC5E,QAAA,YAAY,GAAG,eAAe,CAAC;AAC/B,QAAA,mBAAmB,GAAG,eAAe,CAAC;AAOnD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAA,0BAAS,EAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AAEnE;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,eAAe,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC9E,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,IAAI,SAAS,CAAC,oEAAoE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACnI,CAAC;AAED,sIAAsI;AACtI,SAAgB,gBAAgB;IAC9B,IAAI,CAAC,iBAAiB,EAAE;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,EAAE,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC","sourcesContent":["/**\n * Platform proxy mode (design 21.28): a runtime that holds no platform\n * credential, where the node's `sbx-api-proxy` knows the VM by its source\n * address and injects the App's key on the way to Backend and EMQX. The SDK\n * then reads no credential and sends none; it marks each request with\n * `X-Tier0-SDK: 1`, which the proxy requires. Today the platform puts the\n * App's key into the App's process as `TIER0_API_KEY`, so Apps never run in\n * this mode; it stays for runtimes without a key.\n *\n * The mode is on when `TIER0_RUNTIME` is `deployed` or `preview` and\n * `TIER0_API_KEY` is not set. Any other value of `TIER0_RUNTIME` without\n * `TIER0_API_KEY` is a configuration error and throws: guessing either way\n * would send requests the proxy refuses, or none at all. A client given its\n * own `apiKey` or `getApiKey` keeps using that and never looks.\n *\n * The identity comes from plain environment variables the platform sets. They\n * are identifiers, not secrets: a wrong value is refused, it grants nothing.\n */\nimport { getEnvVar } from './runtime-env.js';\n\n/** Header the proxy requires on every request; it refuses requests without it. */\nexport const SDK_HEADER = 'X-Tier0-SDK';\n/** Marks an answer the proxy produced itself: the request never reached the platform. */\nexport const PROXY_HEADER = 'X-Tier0-Proxy';\nexport const PROXY_NOT_FORWARDED = 'not-forwarded';\n\nexport interface PlatformIdentity {\n ws: string;\n app: string;\n}\n\nconst env = (name: string) => getEnvVar(name)?.trim() || undefined;\n\n/**\n * True inside a Tier0 Preview or deployment that has no API key of its own.\n * Throws when `TIER0_RUNTIME` is set to anything but `deployed` or `preview`\n * and `TIER0_API_KEY` is not set.\n */\nexport function platformProxyMode(): boolean {\n const runtime = env('TIER0_RUNTIME');\n if (runtime === undefined || env('TIER0_API_KEY') !== undefined) return false;\n if (runtime === 'deployed' || runtime === 'preview') return true;\n throw new TypeError(`Tier0 SDK v2: TIER0_RUNTIME must be \"deployed\" or \"preview\", not ${JSON.stringify(runtime.slice(0, 64))}.`);\n}\n\n/** The App this VM serves, from `TIER0_WORKSPACE_ID` and `TIER0_APP_ID`; undefined when incomplete or outside platform proxy mode. */\nexport function platformIdentity(): PlatformIdentity | undefined {\n if (!platformProxyMode()) return undefined;\n const ws = env('TIER0_WORKSPACE_ID');\n const app = env('TIER0_APP_ID');\n return ws && app ? { ws, app } : undefined;\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Return the agent-platform app id injected by the Tier0 application runtime.
2
+ * Return the agent-platform app id: `TIER0_APP_ID` as the platform sets it in
3
+ * Previews and deployments (design 21.7), else the older `APP_ID`.
3
4
  *
4
5
  * Throws rather than passing a suspect value through: a wrong app id has no
5
6
  * symptom at call time — the notification is still accepted — it only makes the
@@ -4,7 +4,8 @@ exports.getCurrentAppId = getCurrentAppId;
4
4
  const runtime_env_js_1 = require("./runtime-env.js");
5
5
  const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6
6
  /**
7
- * Return the agent-platform app id injected by the Tier0 application runtime.
7
+ * Return the agent-platform app id: `TIER0_APP_ID` as the platform sets it in
8
+ * Previews and deployments (design 21.7), else the older `APP_ID`.
8
9
  *
9
10
  * Throws rather than passing a suspect value through: a wrong app id has no
10
11
  * symptom at call time — the notification is still accepted — it only makes the
@@ -12,9 +13,12 @@ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
12
13
  * no icon and no Open button.
13
14
  */
14
15
  function getCurrentAppId() {
16
+ const platformAppId = (0, runtime_env_js_1.getEnvVar)('TIER0_APP_ID')?.trim();
17
+ if (platformAppId)
18
+ return platformAppId;
15
19
  const appId = (0, runtime_env_js_1.getEnvVar)('APP_ID')?.trim();
16
20
  if (!appId) {
17
- throw new Error('Tier0 SDK: current app ID is required. Run inside a Tier0 application runtime or set APP_ID.');
21
+ throw new Error('Tier0 SDK: current app ID is required. Run inside a Tier0 application runtime or set TIER0_APP_ID.');
18
22
  }
19
23
  if (!UUID_RE.test(appId)) {
20
24
  throw new Error(`Tier0 SDK: APP_ID="${appId}" is not an agent-platform app id (expected a UUID). ` +
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-context.js","sourceRoot":"","sources":["../../src/runtime-context.ts"],"names":[],"mappings":";;AAYA,0CAcC;AA1BD,qDAA6C;AAE7C,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAElF;;;;;;;GAOG;AACH,SAAgB,eAAe;IAC7B,MAAM,KAAK,GAAG,IAAA,0BAAS,EAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,sBAAsB,KAAK,uDAAuD;YAChF,0GAA0G,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { getEnvVar } from './runtime-env.js';\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Return the agent-platform app id injected by the Tier0 application runtime.\n *\n * Throws rather than passing a suspect value through: a wrong app id has no\n * symptom at call time — the notification is still accepted — it only makes the\n * server-side app lookup miss forever, leaving the message with no App name,\n * no icon and no Open button.\n */\nexport function getCurrentAppId(): string {\n const appId = getEnvVar('APP_ID')?.trim();\n if (!appId) {\n throw new Error(\n 'Tier0 SDK: current app ID is required. Run inside a Tier0 application runtime or set APP_ID.'\n );\n }\n if (!UUID_RE.test(appId)) {\n throw new Error(\n `Tier0 SDK: APP_ID=\"${appId}\" is not an agent-platform app id (expected a UUID). ` +\n 'The MonoApp scaffold sets APP_ID to the deployment session id; the platform must inject the real app id.'\n );\n }\n return appId;\n}\n"]}
1
+ {"version":3,"file":"runtime-context.js","sourceRoot":"","sources":["../../src/runtime-context.ts"],"names":[],"mappings":";;AAaA,0CAgBC;AA7BD,qDAA6C;AAE7C,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAElF;;;;;;;;GAQG;AACH,SAAgB,eAAe;IAC7B,MAAM,aAAa,GAAG,IAAA,0BAAS,EAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,MAAM,KAAK,GAAG,IAAA,0BAAS,EAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,sBAAsB,KAAK,uDAAuD;YAChF,0GAA0G,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { getEnvVar } from './runtime-env.js';\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Return the agent-platform app id: `TIER0_APP_ID` as the platform sets it in\n * Previews and deployments (design 21.7), else the older `APP_ID`.\n *\n * Throws rather than passing a suspect value through: a wrong app id has no\n * symptom at call time — the notification is still accepted — it only makes the\n * server-side app lookup miss forever, leaving the message with no App name,\n * no icon and no Open button.\n */\nexport function getCurrentAppId(): string {\n const platformAppId = getEnvVar('TIER0_APP_ID')?.trim();\n if (platformAppId) return platformAppId;\n const appId = getEnvVar('APP_ID')?.trim();\n if (!appId) {\n throw new Error(\n 'Tier0 SDK: current app ID is required. Run inside a Tier0 application runtime or set TIER0_APP_ID.'\n );\n }\n if (!UUID_RE.test(appId)) {\n throw new Error(\n `Tier0 SDK: APP_ID=\"${appId}\" is not an agent-platform app id (expected a UUID). ` +\n 'The MonoApp scaffold sets APP_ID to the deployment session id; the platform must inject the real app id.'\n );\n }\n return appId;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-env.js","sourceRoot":"","sources":["../../src/runtime-env.ts"],"names":[],"mappings":";;AAWA,8BAEC;AAbD,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAClD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["function getProcessEnvVar(key: string): string | undefined {\n try {\n if (typeof process !== 'undefined' && process.env) {\n return process.env[key];\n }\n } catch {\n // ignore\n }\n return undefined;\n}\n\nexport function getEnvVar(key: string): string | undefined {\n return getProcessEnvVar(key);\n}\n"]}
1
+ {"version":3,"file":"runtime-env.js","sourceRoot":"","sources":["../../src/runtime-env.ts"],"names":[],"mappings":";;AAWA,8BAEC;AAbD,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAClD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["function getProcessEnvVar(key: string): string | undefined {\r\n try {\r\n if (typeof process !== 'undefined' && process.env) {\r\n return process.env[key];\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n return undefined;\r\n}\r\n\r\nexport function getEnvVar(key: string): string | undefined {\r\n return getProcessEnvVar(key);\r\n}\r\n"]}
@@ -3,7 +3,6 @@ import { type UnsV2Client } from './uns-v2/client.js';
3
3
  import type { CloudTransportConfig } from './cloud-transport.js';
4
4
  /** Source configuration and observations. Wire contracts and envelopes remain unchanged. */
5
5
  export declare function bindSourceClient(raw: UnsV2Client): Readonly<{
6
- delete: (request: import("./index.js").CloudSourceDeleteReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceDeleteResponse>;
7
6
  validate: (request: import("./index.js").UnsV2SourceValidateReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").UnsV2SourceValidateResponse>;
8
7
  probe: (request: import("./index.js").UnsV2SourceProbeReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").UnsV2SourceProbeResponse>;
9
8
  discover: (request: import("./index.js").CloudSourceDiscoverReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceDiscoverResponse>;
@@ -18,11 +17,30 @@ export declare function bindSourceClient(raw: UnsV2Client): Readonly<{
18
17
  observations: Readonly<{
19
18
  get: (request: import("./index.js").CloudSourceObservationsGetReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceObservationsGetResponse>;
20
19
  }>;
20
+ resources: Readonly<{
21
+ catalog: (request: import("./index.js").CloudSourceResourceCatalogReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceResourceCatalogResponse>;
22
+ preview: (request: import("./index.js").CloudSourceResourceReadReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceResourceReadResponse>;
23
+ scan: (request: import("./index.js").CloudSourceResourceScanReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceResourceScanResponse>;
24
+ }>;
25
+ devices: Readonly<{
26
+ list: (request: import("./index.js").CloudSourceDevicesListReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceDevicesListResponse>;
27
+ }>;
21
28
  documents: Readonly<{
22
29
  list: (request: import("./index.js").CloudSourceDocumentListReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceDocumentListResponse>;
23
30
  get: (request: import("./index.js").CloudSourceDocumentGetReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceDocumentGetResponse>;
24
31
  create: (request: import("./index.js").CloudSourceDocumentCreateReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceDocumentCreateResponse>;
25
32
  update: (request: import("./index.js").CloudSourceDocumentUpdateReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudSourceDocumentUpdateResponse>;
33
+ delete: (request: import("./index.js").UnsV2SourceDocumentDeleteReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").UnsV2SourceDocumentDeleteResponse>;
34
+ credentials: Readonly<{
35
+ update: (request: import("./index.js").UnsV2SourceNativeCredentialsUpdateReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").UnsV2SourceNativeCredentialsUpdateResponse>;
36
+ }>;
37
+ state: Readonly<{
38
+ update: (request: import("./index.js").CloudEdgeSourceStateUpdateReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").CloudEdgeSourceStateUpdateResponse>;
39
+ }>;
40
+ oauth: Readonly<{
41
+ start: (request: import("./index.js").UnsV2SourceNativeOAuthStartReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").UnsV2SourceNativeOAuthStartResponse>;
42
+ complete: (request: import("./index.js").UnsV2SourceNativeOAuthCompleteReq, options?: import("./openapi/client.js").RequestOptions) => Promise<import("./index.js").UnsV2SourceNativeOAuthCompleteResponse>;
43
+ }>;
26
44
  }>;
27
45
  }>;
28
46
  export type SourceClient = ReturnType<typeof bindSourceClient>;
@@ -7,21 +7,27 @@ const client_js_2 = require("./uns-v2/client.js");
7
7
  /** Source configuration and observations. Wire contracts and envelopes remain unchanged. */
8
8
  function bindSourceClient(raw) {
9
9
  return Object.freeze({
10
- delete: raw.sourceDelete,
11
10
  validate: raw.sourceValidate, probe: raw.sourceProbe,
12
11
  discover: raw.sourceDiscover,
13
12
  impact: raw.sourceImpact, history: raw.sourceHistory,
14
13
  protocols: Object.freeze({ list: raw.sourceProtocolsList }),
15
14
  runtime: Object.freeze({ get: raw.sourceRuntimeGet }),
16
15
  observations: Object.freeze({ get: raw.sourceObservationsGet }),
16
+ resources: Object.freeze({ catalog: raw.sourceResourceCatalog, preview: raw.sourceResourceRead, scan: raw.sourceResourceScan }),
17
+ devices: Object.freeze({ list: raw.sourceDevicesList }),
17
18
  documents: Object.freeze({
18
19
  list: raw.sourceDocumentList, get: raw.sourceDocumentGet,
19
20
  create: raw.sourceDocumentCreate, update: raw.sourceDocumentUpdate,
21
+ delete: raw.sourceDocumentDelete,
22
+ credentials: Object.freeze({ update: raw.sourceNativeCredentialsUpdate }),
23
+ state: Object.freeze({ update: raw.sourceDocumentStateUpdate }),
24
+ oauth: Object.freeze({ start: raw.sourceNativeOAuthStart, complete: raw.sourceNativeOAuthComplete }),
20
25
  }),
21
26
  });
22
27
  }
23
28
  function createSourceClient(config = {}) {
24
- const http = new client_js_1.HttpClient(config);
25
- return bindSourceClient((0, client_js_2.createUnsV2Client)(() => http, config));
29
+ const snapshot = (0, client_js_1.snapshotClientConfig)(config, ['transportTimeoutMs', 'unsV2MaxResponseBytes']);
30
+ const http = new client_js_1.HttpClient(snapshot);
31
+ return bindSourceClient((0, client_js_2.createUnsV2Client)(() => http, snapshot));
26
32
  }
27
33
  //# sourceMappingURL=source.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/source.ts"],"names":[],"mappings":";;AAKA,4CAcC;AAGD,gDAGC;AAzBD,mDAAoE;AACpE,kDAAyE;AAGzE,4FAA4F;AAC5F,SAAgB,gBAAgB,CAAC,GAAgB;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,YAAY;QACxB,QAAQ,EAAE,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW;QACpD,QAAQ,EAAE,GAAG,CAAC,cAAc;QAC5B,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa;QACpD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACrD,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC/D,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,CAAC,iBAAiB;YACxD,MAAM,EAAE,GAAG,CAAC,oBAAoB,EAAE,MAAM,EAAE,GAAG,CAAC,oBAAoB;SACnE,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAGD,SAAgB,kBAAkB,CAAC,SAA6B,EAAE;IAChE,MAAM,IAAI,GAAG,IAAI,sBAAU,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,gBAAgB,CAAC,IAAA,6BAAiB,EAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC","sourcesContent":["import { HttpClient, type ClientConfig } from './openapi/client.js';\nimport { createUnsV2Client, type UnsV2Client } from './uns-v2/client.js';\nimport type { CloudTransportConfig } from './cloud-transport.js';\n\n/** Source configuration and observations. Wire contracts and envelopes remain unchanged. */\nexport function bindSourceClient(raw: UnsV2Client) {\n return Object.freeze({\n delete: raw.sourceDelete,\n validate: raw.sourceValidate, probe: raw.sourceProbe,\n discover: raw.sourceDiscover,\n impact: raw.sourceImpact, history: raw.sourceHistory,\n protocols: Object.freeze({ list: raw.sourceProtocolsList }),\n runtime: Object.freeze({ get: raw.sourceRuntimeGet }),\n observations: Object.freeze({ get: raw.sourceObservationsGet }),\n documents: Object.freeze({\n list: raw.sourceDocumentList, get: raw.sourceDocumentGet,\n create: raw.sourceDocumentCreate, update: raw.sourceDocumentUpdate,\n }),\n });\n}\nexport type SourceClient = ReturnType<typeof bindSourceClient>;\nexport type SourceClientConfig = ClientConfig & CloudTransportConfig;\nexport function createSourceClient(config: SourceClientConfig = {}): SourceClient {\n const http = new HttpClient(config);\n return bindSourceClient(createUnsV2Client(() => http, config));\n}\n"]}
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/source.ts"],"names":[],"mappings":";;AAKA,4CAmBC;AAGD,gDAIC;AA/BD,mDAA0F;AAC1F,kDAAyE;AAGzE,4FAA4F;AAC5F,SAAgB,gBAAgB,CAAC,GAAgB;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW;QACpD,QAAQ,EAAE,GAAG,CAAC,cAAc;QAC5B,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa;QACpD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACrD,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC/D,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,qBAAqB,EAAE,OAAO,EAAE,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC/H,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACvD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,CAAC,iBAAiB;YACxD,MAAM,EAAE,GAAG,CAAC,oBAAoB,EAAE,MAAM,EAAE,GAAG,CAAC,oBAAoB;YAClE,MAAM,EAAE,GAAG,CAAC,oBAAoB;YAChC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,6BAA6B,EAAE,CAAC;YACzE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,yBAAyB,EAAE,CAAC;YAC/D,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,sBAAsB,EAAE,QAAQ,EAAE,GAAG,CAAC,yBAAyB,EAAE,CAAC;SACrG,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAGD,SAAgB,kBAAkB,CAAC,SAA6B,EAAE;IAChE,MAAM,QAAQ,GAAG,IAAA,gCAAoB,EAAC,MAAM,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,IAAI,sBAAU,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,gBAAgB,CAAC,IAAA,6BAAiB,EAAC,GAAG,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnE,CAAC","sourcesContent":["import { HttpClient, snapshotClientConfig, type ClientConfig } from './openapi/client.js';\nimport { createUnsV2Client, type UnsV2Client } from './uns-v2/client.js';\nimport type { CloudTransportConfig } from './cloud-transport.js';\n\n/** Source configuration and observations. Wire contracts and envelopes remain unchanged. */\nexport function bindSourceClient(raw: UnsV2Client) {\n return Object.freeze({\n validate: raw.sourceValidate, probe: raw.sourceProbe,\n discover: raw.sourceDiscover,\n impact: raw.sourceImpact, history: raw.sourceHistory,\n protocols: Object.freeze({ list: raw.sourceProtocolsList }),\n runtime: Object.freeze({ get: raw.sourceRuntimeGet }),\n observations: Object.freeze({ get: raw.sourceObservationsGet }),\n resources: Object.freeze({ catalog: raw.sourceResourceCatalog, preview: raw.sourceResourceRead, scan: raw.sourceResourceScan }),\n devices: Object.freeze({ list: raw.sourceDevicesList }),\n documents: Object.freeze({\n list: raw.sourceDocumentList, get: raw.sourceDocumentGet,\n create: raw.sourceDocumentCreate, update: raw.sourceDocumentUpdate,\n delete: raw.sourceDocumentDelete,\n credentials: Object.freeze({ update: raw.sourceNativeCredentialsUpdate }),\n state: Object.freeze({ update: raw.sourceDocumentStateUpdate }),\n oauth: Object.freeze({ start: raw.sourceNativeOAuthStart, complete: raw.sourceNativeOAuthComplete }),\n }),\n });\n}\nexport type SourceClient = ReturnType<typeof bindSourceClient>;\nexport type SourceClientConfig = ClientConfig & CloudTransportConfig;\nexport function createSourceClient(config: SourceClientConfig = {}): SourceClient {\n const snapshot = snapshotClientConfig(config, ['transportTimeoutMs', 'unsV2MaxResponseBytes']);\n const http = new HttpClient(snapshot);\n return bindSourceClient(createUnsV2Client(() => http, snapshot));\n}\n"]}
@@ -25,7 +25,8 @@ function bindStreamClient(raw) {
25
25
  });
26
26
  }
27
27
  function createStreamClient(config = {}) {
28
- const http = new client_js_1.HttpClient(config);
29
- return bindStreamClient((0, client_js_2.createUnsV2Client)(() => http, config));
28
+ const snapshot = (0, client_js_1.snapshotClientConfig)(config, ['transportTimeoutMs', 'unsV2MaxResponseBytes']);
29
+ const http = new client_js_1.HttpClient(snapshot);
30
+ return bindStreamClient((0, client_js_2.createUnsV2Client)(() => http, snapshot));
30
31
  }
31
32
  //# sourceMappingURL=stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":";;AAKA,4CAkBC;AAGD,gDAGC;AA7BD,mDAAoE;AACpE,kDAAyE;AAGzE,4EAA4E;AAC5E,SAAgB,gBAAgB,CAAC,GAAgB;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,IAAI,EAAE,GAAG,CAAC,iBAAiB;YAC3B,MAAM,EAAE,GAAG,CAAC,mBAAmB;YAC/B,MAAM,EAAE,GAAG,CAAC,mBAAmB;YAC/B,QAAQ,EAAE,GAAG,CAAC,qBAAqB;YACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,yBAAyB,EAAE,CAAC;SACjE,CAAC;QACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACvB,GAAG,EAAE,GAAG,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,CAAC,oBAAoB;YAC5D,MAAM,EAAE,GAAG,CAAC,oBAAoB,EAAE,QAAQ,EAAE,GAAG,CAAC,sBAAsB;YACtE,OAAO,EAAE,GAAG,CAAC,qBAAqB;SACnC,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC9D,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;QACjD,UAAU,EAAE,GAAG,CAAC,gBAAgB;KACjC,CAAC,CAAC;AACL,CAAC;AAGD,SAAgB,kBAAkB,CAAC,SAA6B,EAAE;IAChE,MAAM,IAAI,GAAG,IAAI,sBAAU,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,gBAAgB,CAAC,IAAA,6BAAiB,EAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC","sourcesContent":["import { HttpClient, type ClientConfig } from './openapi/client.js';\nimport { createUnsV2Client, type UnsV2Client } from './uns-v2/client.js';\nimport type { CloudTransportConfig } from './cloud-transport.js';\n\n/** Runtime programs and native editor documents have distinct contracts. */\nexport function bindStreamClient(raw: UnsV2Client) {\n return Object.freeze({\n programs: Object.freeze({\n list: raw.streamProgramList,\n delete: raw.streamProgramDelete,\n deploy: raw.streamProgramDeploy,\n rollback: raw.streamProgramRollback,\n versions: Object.freeze({ list: raw.streamProgramVersionsList }),\n }),\n documents: Object.freeze({\n get: raw.streamDocumentGet, create: raw.streamDocumentCreate,\n update: raw.streamDocumentUpdate, validate: raw.streamDocumentValidate,\n disable: raw.streamDocumentDisable,\n }),\n observations: Object.freeze({ get: raw.streamObservationGet }),\n runs: Object.freeze({ list: raw.streamRunsList }),\n sampleTest: raw.streamSampleTest,\n });\n}\nexport type StreamClient = ReturnType<typeof bindStreamClient>;\nexport type StreamClientConfig = ClientConfig & CloudTransportConfig;\nexport function createStreamClient(config: StreamClientConfig = {}): StreamClient {\n const http = new HttpClient(config);\n return bindStreamClient(createUnsV2Client(() => http, config));\n}\n"]}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":";;AAKA,4CAkBC;AAGD,gDAIC;AA9BD,mDAA0F;AAC1F,kDAAyE;AAGzE,4EAA4E;AAC5E,SAAgB,gBAAgB,CAAC,GAAgB;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,IAAI,EAAE,GAAG,CAAC,iBAAiB;YAC3B,MAAM,EAAE,GAAG,CAAC,mBAAmB;YAC/B,MAAM,EAAE,GAAG,CAAC,mBAAmB;YAC/B,QAAQ,EAAE,GAAG,CAAC,qBAAqB;YACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,yBAAyB,EAAE,CAAC;SACjE,CAAC;QACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACvB,GAAG,EAAE,GAAG,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,CAAC,oBAAoB;YAC5D,MAAM,EAAE,GAAG,CAAC,oBAAoB,EAAE,QAAQ,EAAE,GAAG,CAAC,sBAAsB;YACtE,OAAO,EAAE,GAAG,CAAC,qBAAqB;SACnC,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC9D,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;QACjD,UAAU,EAAE,GAAG,CAAC,gBAAgB;KACjC,CAAC,CAAC;AACL,CAAC;AAGD,SAAgB,kBAAkB,CAAC,SAA6B,EAAE;IAChE,MAAM,QAAQ,GAAG,IAAA,gCAAoB,EAAC,MAAM,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,IAAI,sBAAU,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,gBAAgB,CAAC,IAAA,6BAAiB,EAAC,GAAG,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnE,CAAC","sourcesContent":["import { HttpClient, snapshotClientConfig, type ClientConfig } from './openapi/client.js';\nimport { createUnsV2Client, type UnsV2Client } from './uns-v2/client.js';\nimport type { CloudTransportConfig } from './cloud-transport.js';\n\n/** Runtime programs and native editor documents have distinct contracts. */\nexport function bindStreamClient(raw: UnsV2Client) {\n return Object.freeze({\n programs: Object.freeze({\n list: raw.streamProgramList,\n delete: raw.streamProgramDelete,\n deploy: raw.streamProgramDeploy,\n rollback: raw.streamProgramRollback,\n versions: Object.freeze({ list: raw.streamProgramVersionsList }),\n }),\n documents: Object.freeze({\n get: raw.streamDocumentGet, create: raw.streamDocumentCreate,\n update: raw.streamDocumentUpdate, validate: raw.streamDocumentValidate,\n disable: raw.streamDocumentDisable,\n }),\n observations: Object.freeze({ get: raw.streamObservationGet }),\n runs: Object.freeze({ list: raw.streamRunsList }),\n sampleTest: raw.streamSampleTest,\n });\n}\nexport type StreamClient = ReturnType<typeof bindStreamClient>;\nexport type StreamClientConfig = ClientConfig & CloudTransportConfig;\nexport function createStreamClient(config: StreamClientConfig = {}): StreamClient {\n const snapshot = snapshotClientConfig(config, ['transportTimeoutMs', 'unsV2MaxResponseBytes']);\n const http = new HttpClient(snapshot);\n return bindStreamClient(createUnsV2Client(() => http, snapshot));\n}\n"]}
@@ -194,7 +194,13 @@ export interface components {
194
194
  replacement?: string;
195
195
  sunsetAt?: string;
196
196
  }[];
197
- };
197
+ } & (unknown | {
198
+ capabilities?: (unknown | {
199
+ operations?: {
200
+ operation?: unknown;
201
+ }[];
202
+ })[];
203
+ });
198
204
  /** @description Unknown capability codes are ignored; only recognized codes use the frozen assessment contract. */
199
205
  CapabilityDiscoverycapability: {
200
206
  code: string;
@@ -1 +1 @@
1
- {"version":3,"file":"contract.generated.js","sourceRoot":"","sources":["../../../src/streams/contract.generated.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\nexport interface paths {\n \"/openapi/v2/stream-requests/discover\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Discover Stream requests\n * @description 发现可见Stream 请求合同,只公开Stream 请求合同,不返回内部运行绑定\n */\n post: operations[\"PlatformV2StreamRequestDiscover\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/openapi/v2/stream-requests/{requestCode}/describe\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Describe Stream request\n * @description 读取公开Stream 请求合同,只公开Stream 请求合同,不返回内部运行绑定\n */\n post: operations[\"PlatformV2StreamRequestDescribe\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/openapi/v2/stream-requests/{requestCode}/invoke\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Invoke Stream request\n * @description 按公开合同调用Stream 请求;原始 body 为有效 UTF-8,最多 1MiB 字节;可选 idempotencyKey 解码后最多 128 UTF-8 字节,是否必填由冻结合同决定。返回 code、contractVersion、result、runID、status、replayed(boolean),不返回内部运行绑定。结果未知返回 HTTP 504,errorCode=STREAM_REQUEST_RESULT_UNKNOWN;未知内部错误返回 HTTP 500,errorCode=STREAM_REQUEST_INTERNAL_ERROR,message 不泄漏内部异常\n */\n post: operations[\"PlatformV2StreamRequestInvoke\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/openapi/v2/stream-messages/connect\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /** Connect Stream messages */\n post: operations[\"PlatformV2StreamMessagesConnect\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/openapi/v2/capabilities/discover\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * 发现当前 Workspace 的公开能力与版本合同\n * @description 需要有效 Workspace API Key,Body 仅接受空 JSON 对象,最大 4KiB UTF-8 字节,不接受查询参数或 Workspace 覆盖。成功响应直接为 CapabilityDiscoverV2Resp,不包裹 code/msg/data。能力由默认关闭的公开发布开关、Workspace FeatureGate、Key 显式授权共同裁决;Namespace 与 Stream request 能力仅报告当前发布与授权,运行可用性保持 readiness_unknown,不触发运行时探针。Source/Stream 保留独立操作前提的证据。state=ready 不替代具体资源授权或实际运行回执。合同版本 2.0 使用 state、reasonCode、operations,不再返回重复布尔状态。实际操作由后端执行安全检查,失败返回真实错误。响应允许客户端忽略未知扩展字段;版本标签不表示设备 ACK 或 npm 包版本。错误直接返回 CapabilityErrorResp 和真实 HTTP 状态,不泄漏内部异常。\n */\n post: operations[\"PlatformV2CapabilityDiscoverV2\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n}\nexport type webhooks = Record<string, never>;\nexport interface components {\n schemas: {\n StreamRequestDiscoverReq: {\n /** @description 缺省为 1 */\n page?: number;\n search?: string;\n /** @description 缺省为 20 */\n size?: number;\n };\n StreamRequestDiscoverResp: {\n list: components[\"schemas\"][\"PublicStreamRequest\"][];\n total: number;\n };\n PublicStreamRequest: {\n code: string;\n contractVersion: string;\n description: string;\n idempotency: string;\n inputSchema: {\n [key: string]: unknown;\n };\n name: string;\n outputSchema: {\n [key: string]: unknown;\n };\n sideEffect: string;\n status: string;\n timeoutMs: number;\n };\n NotificationError: {\n errorCode: string;\n message: string;\n };\n StreamRequestInvokeReq: {\n /** @description 解码后的 UTF-8 字节数最多 128;是否必填由冻结合同决定 */\n idempotencyKey?: string;\n input: unknown;\n };\n StreamRequestInvokeResp: {\n code: string;\n /** @description 实际执行使用的冻结合同版本 */\n contractVersion: string;\n /** @description true=幂等重放,false=首次执行 */\n replayed: boolean;\n /** @description 合同定义的 JSON 结果,允许 null */\n result: unknown;\n /** @description 服务端返回的执行标识,不透明字符串 */\n runID: string;\n /** @description 服务端返回的终态,非 accepted/queued/pending/running */\n status: string;\n };\n StreamMessagesConnectReq: {\n appId: string;\n clientPublicKey: string;\n topics: components[\"schemas\"][\"StreamMessageTopicPermission\"][];\n };\n StreamMessageTopicPermission: {\n publish: boolean;\n subscribe: boolean;\n topic: string;\n };\n StreamMessagesConnectResp: {\n contractVersion: string;\n expiresAt: string;\n maxPayloadBytes: number;\n permissions: components[\"schemas\"][\"StreamMessageGrantedTopic\"][];\n url: string;\n userJwt: string;\n };\n StreamMessageGrantedTopic: {\n publishSubject: string;\n subscribeSubject: string;\n topic: string;\n };\n /**\n * Tier0 capability discovery 2.0\n * @description OpenAPI 3.0 wire schema. Array contains/cardinality annotations and cross-field proof ordering require the shared JSON Schema plus SDK semantic checks; this projection alone is not full contract acceptance.\n */\n CapabilityDiscoverV2Resp: {\n /** @enum {unknown} */\n product: \"cloud\" | \"enterprise\";\n productVersion?: string;\n /** @enum {unknown} */\n contractVersion: \"2.0\";\n apiContractVersions: string[];\n sdkContractVersions: string[];\n capabilities: components[\"schemas\"][\"CapabilityDiscoverycapability\"][] & (unknown & unknown & unknown & unknown & unknown);\n deprecations: {\n contract: string;\n replacement?: string;\n sunsetAt?: string;\n }[];\n };\n /** @description Unknown capability codes are ignored; only recognized codes use the frozen assessment contract. */\n CapabilityDiscoverycapability: {\n code: string;\n } & (unknown | components[\"schemas\"][\"CapabilityDiscoveryknownCapability\"]);\n /** @description State reports publication and assessed prerequisites only; ready never grants resource access or confirms an actual execution. */\n CapabilityDiscoveryknownCapability: {\n /** @enum {unknown} */\n state: \"disabled\" | \"not_supported\" | \"unavailable\" | \"readiness_unknown\" | \"ready\";\n reasonCode: string;\n /** Format: date-time */\n checkedAt?: string;\n /**\n * Format: date-time\n * @description Proof expiry must follow checkedAt. Cross-field chronological ordering is a semantic constraint checked by consumers in addition to this structural JSON Schema.\n */\n validUntil?: string;\n retryAfterMs?: number;\n code: string;\n contractVersions: string[];\n operations?: components[\"schemas\"][\"CapabilityDiscoveryoperation\"][];\n } & ((unknown | {\n /** @enum {unknown} */\n state?: \"ready\";\n checkedAt: unknown;\n }) & (unknown | ({\n operations?: ((unknown | components[\"schemas\"][\"CapabilityDiscoveryknownOperation\"]) & (unknown | {\n /** @enum {unknown} */\n requiresResourceCheck?: true;\n }))[] & (unknown & unknown & unknown & unknown & unknown & unknown);\n } & (unknown | {\n operations?: (unknown | {\n /** @enum {unknown} */\n state?: \"disabled\";\n })[];\n }))) & (unknown | ({\n operations?: ((unknown | components[\"schemas\"][\"CapabilityDiscoveryknownOperation\"]) & (unknown | {\n /** @enum {unknown} */\n requiresResourceCheck?: true;\n }))[] & (unknown & unknown & unknown & unknown & unknown & unknown);\n } & (unknown | {\n operations?: (unknown | {\n /** @enum {unknown} */\n state?: \"disabled\";\n })[];\n }))) & (unknown | {\n contractVersions?: unknown[];\n }) & (unknown | {\n contractVersions?: unknown[] & (unknown & unknown);\n }));\n /** @description Unknown operation names are ignored within their parent capability; known names are validated by that capability. */\n CapabilityDiscoveryoperation: {\n operation: string;\n };\n /** @description State reports publication and assessed prerequisites only; ready never grants resource access or confirms an actual execution. */\n CapabilityDiscoveryknownOperation: {\n /** @enum {unknown} */\n state: \"disabled\" | \"not_supported\" | \"unavailable\" | \"readiness_unknown\" | \"ready\";\n reasonCode: string;\n /** Format: date-time */\n checkedAt?: string;\n /**\n * Format: date-time\n * @description Proof expiry must follow checkedAt. Cross-field chronological ordering is a semantic constraint checked by consumers in addition to this structural JSON Schema.\n */\n validUntil?: string;\n retryAfterMs?: number;\n operation: string;\n requiresResourceCheck: boolean;\n } & (unknown | {\n /** @enum {unknown} */\n state?: \"ready\";\n checkedAt: unknown;\n });\n CapabilityErrorResp: {\n /** @description INVALID_CREDENTIAL / CAPABILITY_INVALID_REQUEST / CAPABILITY_FORBIDDEN / CAPABILITY_UNAVAILABLE / CAPABILITY_INTERNAL_ERROR */\n errorCode: string;\n /** @description 固定公开消息,不透传内部异常 */\n message: string;\n };\n };\n responses: never;\n parameters: never;\n requestBodies: never;\n headers: never;\n pathItems: never;\n}\nexport type $defs = Record<string, never>;\nexport interface operations {\n PlatformV2StreamRequestDiscover: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"StreamRequestDiscoverReq\"];\n };\n };\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"StreamRequestDiscoverResp\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n };\n };\n PlatformV2StreamRequestDescribe: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n requestCode: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"PublicStreamRequest\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n };\n };\n PlatformV2StreamRequestInvoke: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n requestCode: string;\n };\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"StreamRequestInvokeReq\"];\n };\n };\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"StreamRequestInvokeResp\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n };\n };\n PlatformV2StreamMessagesConnect: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"StreamMessagesConnectReq\"];\n };\n };\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"StreamMessagesConnectResp\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n };\n };\n PlatformV2CapabilityDiscoverV2: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityDiscoverV2Resp\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n };\n };\n}\n"]}
1
+ {"version":3,"file":"contract.generated.js","sourceRoot":"","sources":["../../../src/streams/contract.generated.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\nexport interface paths {\n \"/openapi/v2/stream-requests/discover\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Discover Stream requests\n * @description 发现可见Stream 请求合同,只公开Stream 请求合同,不返回内部运行绑定\n */\n post: operations[\"PlatformV2StreamRequestDiscover\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/openapi/v2/stream-requests/{requestCode}/describe\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Describe Stream request\n * @description 读取公开Stream 请求合同,只公开Stream 请求合同,不返回内部运行绑定\n */\n post: operations[\"PlatformV2StreamRequestDescribe\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/openapi/v2/stream-requests/{requestCode}/invoke\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Invoke Stream request\n * @description 按公开合同调用Stream 请求;原始 body 为有效 UTF-8,最多 1MiB 字节;可选 idempotencyKey 解码后最多 128 UTF-8 字节,是否必填由冻结合同决定。返回 code、contractVersion、result、runID、status、replayed(boolean),不返回内部运行绑定。结果未知返回 HTTP 504,errorCode=STREAM_REQUEST_RESULT_UNKNOWN;未知内部错误返回 HTTP 500,errorCode=STREAM_REQUEST_INTERNAL_ERROR,message 不泄漏内部异常\n */\n post: operations[\"PlatformV2StreamRequestInvoke\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/openapi/v2/stream-messages/connect\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /** Connect Stream messages */\n post: operations[\"PlatformV2StreamMessagesConnect\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/openapi/v2/capabilities/discover\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * 发现当前 Workspace 的公开能力与版本合同\n * @description 需要有效 Workspace API Key,Body 仅接受空 JSON 对象,最大 4KiB UTF-8 字节,不接受查询参数或 Workspace 覆盖。成功响应直接为 CapabilityDiscoverV2Resp,不包裹 code/msg/data。能力由默认关闭的公开发布开关、Workspace FeatureGate、Key 显式授权共同裁决;Namespace 与 Stream request 能力仅报告当前发布与授权,运行可用性保持 readiness_unknown,不触发运行时探针。Source/Stream 保留独立操作前提的证据。state=ready 不替代具体资源授权或实际运行回执。合同版本 2.0 使用 state、reasonCode、operations,不再返回重复布尔状态。实际操作由后端执行安全检查,失败返回真实错误。响应允许客户端忽略未知扩展字段;版本标签不表示设备 ACK 或 npm 包版本。错误直接返回 CapabilityErrorResp 和真实 HTTP 状态,不泄漏内部异常。\n */\n post: operations[\"PlatformV2CapabilityDiscoverV2\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n}\nexport type webhooks = Record<string, never>;\nexport interface components {\n schemas: {\n StreamRequestDiscoverReq: {\n /** @description 缺省为 1 */\n page?: number;\n search?: string;\n /** @description 缺省为 20 */\n size?: number;\n };\n StreamRequestDiscoverResp: {\n list: components[\"schemas\"][\"PublicStreamRequest\"][];\n total: number;\n };\n PublicStreamRequest: {\n code: string;\n contractVersion: string;\n description: string;\n idempotency: string;\n inputSchema: {\n [key: string]: unknown;\n };\n name: string;\n outputSchema: {\n [key: string]: unknown;\n };\n sideEffect: string;\n status: string;\n timeoutMs: number;\n };\n NotificationError: {\n errorCode: string;\n message: string;\n };\n StreamRequestInvokeReq: {\n /** @description 解码后的 UTF-8 字节数最多 128;是否必填由冻结合同决定 */\n idempotencyKey?: string;\n input: unknown;\n };\n StreamRequestInvokeResp: {\n code: string;\n /** @description 实际执行使用的冻结合同版本 */\n contractVersion: string;\n /** @description true=幂等重放,false=首次执行 */\n replayed: boolean;\n /** @description 合同定义的 JSON 结果,允许 null */\n result: unknown;\n /** @description 服务端返回的执行标识,不透明字符串 */\n runID: string;\n /** @description 服务端返回的终态,非 accepted/queued/pending/running */\n status: string;\n };\n StreamMessagesConnectReq: {\n appId: string;\n clientPublicKey: string;\n topics: components[\"schemas\"][\"StreamMessageTopicPermission\"][];\n };\n StreamMessageTopicPermission: {\n publish: boolean;\n subscribe: boolean;\n topic: string;\n };\n StreamMessagesConnectResp: {\n contractVersion: string;\n expiresAt: string;\n maxPayloadBytes: number;\n permissions: components[\"schemas\"][\"StreamMessageGrantedTopic\"][];\n url: string;\n userJwt: string;\n };\n StreamMessageGrantedTopic: {\n publishSubject: string;\n subscribeSubject: string;\n topic: string;\n };\n /**\n * Tier0 capability discovery 2.0\n * @description OpenAPI 3.0 wire schema. Array contains/cardinality annotations and cross-field proof ordering require the shared JSON Schema plus SDK semantic checks; this projection alone is not full contract acceptance.\n */\n CapabilityDiscoverV2Resp: {\n /** @enum {unknown} */\n product: \"cloud\" | \"enterprise\";\n productVersion?: string;\n /** @enum {unknown} */\n contractVersion: \"2.0\";\n apiContractVersions: string[];\n sdkContractVersions: string[];\n capabilities: components[\"schemas\"][\"CapabilityDiscoverycapability\"][] & (unknown & unknown & unknown & unknown & unknown);\n deprecations: {\n contract: string;\n replacement?: string;\n sunsetAt?: string;\n }[];\n } & (unknown | {\n capabilities?: (unknown | {\n operations?: {\n operation?: unknown;\n }[];\n })[];\n });\n /** @description Unknown capability codes are ignored; only recognized codes use the frozen assessment contract. */\n CapabilityDiscoverycapability: {\n code: string;\n } & (unknown | components[\"schemas\"][\"CapabilityDiscoveryknownCapability\"]);\n /** @description State reports publication and assessed prerequisites only; ready never grants resource access or confirms an actual execution. */\n CapabilityDiscoveryknownCapability: {\n /** @enum {unknown} */\n state: \"disabled\" | \"not_supported\" | \"unavailable\" | \"readiness_unknown\" | \"ready\";\n reasonCode: string;\n /** Format: date-time */\n checkedAt?: string;\n /**\n * Format: date-time\n * @description Proof expiry must follow checkedAt. Cross-field chronological ordering is a semantic constraint checked by consumers in addition to this structural JSON Schema.\n */\n validUntil?: string;\n retryAfterMs?: number;\n code: string;\n contractVersions: string[];\n operations?: components[\"schemas\"][\"CapabilityDiscoveryoperation\"][];\n } & ((unknown | {\n /** @enum {unknown} */\n state?: \"ready\";\n checkedAt: unknown;\n }) & (unknown | ({\n operations?: ((unknown | components[\"schemas\"][\"CapabilityDiscoveryknownOperation\"]) & (unknown | {\n /** @enum {unknown} */\n requiresResourceCheck?: true;\n }))[] & (unknown & unknown & unknown & unknown & unknown & unknown);\n } & (unknown | {\n operations?: (unknown | {\n /** @enum {unknown} */\n state?: \"disabled\";\n })[];\n }))) & (unknown | ({\n operations?: ((unknown | components[\"schemas\"][\"CapabilityDiscoveryknownOperation\"]) & (unknown | {\n /** @enum {unknown} */\n requiresResourceCheck?: true;\n }))[] & (unknown & unknown & unknown & unknown & unknown & unknown);\n } & (unknown | {\n operations?: (unknown | {\n /** @enum {unknown} */\n state?: \"disabled\";\n })[];\n }))) & (unknown | {\n contractVersions?: unknown[];\n }) & (unknown | {\n contractVersions?: unknown[] & (unknown & unknown);\n }));\n /** @description Unknown operation names are ignored within their parent capability; known names are validated by that capability. */\n CapabilityDiscoveryoperation: {\n operation: string;\n };\n /** @description State reports publication and assessed prerequisites only; ready never grants resource access or confirms an actual execution. */\n CapabilityDiscoveryknownOperation: {\n /** @enum {unknown} */\n state: \"disabled\" | \"not_supported\" | \"unavailable\" | \"readiness_unknown\" | \"ready\";\n reasonCode: string;\n /** Format: date-time */\n checkedAt?: string;\n /**\n * Format: date-time\n * @description Proof expiry must follow checkedAt. Cross-field chronological ordering is a semantic constraint checked by consumers in addition to this structural JSON Schema.\n */\n validUntil?: string;\n retryAfterMs?: number;\n operation: string;\n requiresResourceCheck: boolean;\n } & (unknown | {\n /** @enum {unknown} */\n state?: \"ready\";\n checkedAt: unknown;\n });\n CapabilityErrorResp: {\n /** @description INVALID_CREDENTIAL / CAPABILITY_INVALID_REQUEST / CAPABILITY_FORBIDDEN / CAPABILITY_UNAVAILABLE / CAPABILITY_INTERNAL_ERROR */\n errorCode: string;\n /** @description 固定公开消息,不透传内部异常 */\n message: string;\n };\n };\n responses: never;\n parameters: never;\n requestBodies: never;\n headers: never;\n pathItems: never;\n}\nexport type $defs = Record<string, never>;\nexport interface operations {\n PlatformV2StreamRequestDiscover: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"StreamRequestDiscoverReq\"];\n };\n };\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"StreamRequestDiscoverResp\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n };\n };\n PlatformV2StreamRequestDescribe: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n requestCode: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"PublicStreamRequest\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n };\n };\n PlatformV2StreamRequestInvoke: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n requestCode: string;\n };\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"StreamRequestInvokeReq\"];\n };\n };\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"StreamRequestInvokeResp\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n };\n };\n PlatformV2StreamMessagesConnect: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"StreamMessagesConnectReq\"];\n };\n };\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"StreamMessagesConnectResp\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n /** @description Platform operation failed. */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"NotificationError\"];\n };\n };\n };\n };\n PlatformV2CapabilityDiscoverV2: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityDiscoverV2Resp\"];\n };\n };\n /** @description Platform operation failed. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n /** @description Platform operation failed. */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n /** @description Platform operation failed. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n /** @description Platform operation failed. */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n /** @description Platform operation failed. */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CapabilityErrorResp\"];\n };\n };\n };\n };\n}\n"]}