@tier0/sdk-v2 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.md +7 -0
- package/README.md +201 -2
- package/dist/cjs/app-identity-contract.generated.d.ts +22 -0
- package/dist/cjs/app-identity-contract.generated.js +51 -0
- package/dist/cjs/app-identity-contract.generated.js.map +1 -0
- package/dist/cjs/capabilities.d.ts +54 -0
- package/dist/cjs/capabilities.js +134 -0
- package/dist/cjs/capabilities.js.map +1 -0
- package/dist/cjs/client.d.ts +604 -0
- package/dist/cjs/client.js +35 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/cloud-server.d.ts +31 -0
- package/dist/cjs/cloud-server.js +114 -0
- package/dist/cjs/cloud-server.js.map +1 -0
- package/dist/cjs/cloud-transport.d.ts +46 -0
- package/dist/cjs/cloud-transport.js +192 -0
- package/dist/cjs/cloud-transport.js.map +1 -0
- package/dist/cjs/controls.d.ts +93 -0
- package/dist/cjs/controls.js +169 -0
- package/dist/cjs/controls.js.map +1 -0
- package/dist/cjs/data/bootstrap.d.ts +66 -0
- package/dist/cjs/data/bootstrap.js +282 -0
- package/dist/cjs/data/bootstrap.js.map +1 -0
- package/dist/cjs/data/call.d.ts +16 -0
- package/dist/cjs/data/call.js +51 -0
- package/dist/cjs/data/call.js.map +1 -0
- package/dist/cjs/data/client.d.ts +92 -0
- package/dist/cjs/data/client.js +102 -0
- package/dist/cjs/data/client.js.map +1 -0
- package/dist/cjs/data/collection.d.ts +238 -0
- package/dist/cjs/data/collection.js +441 -0
- package/dist/cjs/data/collection.js.map +1 -0
- package/dist/cjs/data/context.d.ts +10 -0
- package/dist/cjs/data/context.js +39 -0
- package/dist/cjs/data/context.js.map +1 -0
- package/dist/cjs/data/declarations.d.ts +11 -0
- package/dist/cjs/data/declarations.js +18 -0
- package/dist/cjs/data/declarations.js.map +1 -0
- package/dist/cjs/data/define.d.ts +69 -0
- package/dist/cjs/data/define.js +31 -0
- package/dist/cjs/data/define.js.map +1 -0
- package/dist/cjs/data/error.d.ts +60 -0
- package/dist/cjs/data/error.js +184 -0
- package/dist/cjs/data/error.js.map +1 -0
- package/dist/cjs/data/index.d.ts +21 -0
- package/dist/cjs/data/index.js +43 -0
- package/dist/cjs/data/index.js.map +1 -0
- package/dist/cjs/data/schema.d.ts +82 -0
- package/dist/cjs/data/schema.js +607 -0
- package/dist/cjs/data/schema.js.map +1 -0
- package/dist/cjs/data/sort.d.ts +8 -0
- package/dist/cjs/data/sort.js +21 -0
- package/dist/cjs/data/sort.js.map +1 -0
- package/dist/cjs/files.d.ts +67 -0
- package/dist/cjs/files.js +119 -0
- package/dist/cjs/files.js.map +1 -0
- package/dist/cjs/framework-scope.d.ts +1 -0
- package/dist/cjs/framework-scope.js +14 -0
- package/dist/cjs/framework-scope.js.map +1 -0
- package/dist/cjs/index.d.ts +14 -0
- package/dist/cjs/index.js +33 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/mq/broker.d.ts +65 -0
- package/dist/cjs/mq/broker.js +115 -0
- package/dist/cjs/mq/broker.js.map +1 -0
- package/dist/cjs/mq/client.d.ts +37 -0
- package/dist/cjs/mq/client.js +321 -0
- package/dist/cjs/mq/client.js.map +1 -0
- package/dist/cjs/mq/index.d.ts +5 -0
- package/dist/cjs/mq/index.js +11 -0
- package/dist/cjs/mq/index.js.map +1 -0
- package/dist/cjs/mq/types.d.ts +48 -0
- package/dist/cjs/mq/types.js +3 -0
- package/dist/cjs/mq/types.js.map +1 -0
- package/dist/cjs/openapi/api.generated.d.ts +820 -0
- package/dist/cjs/openapi/api.generated.js +607 -0
- package/dist/cjs/openapi/api.generated.js.map +1 -0
- package/dist/cjs/openapi/client.d.ts +56 -0
- package/dist/cjs/openapi/client.js +219 -0
- package/dist/cjs/openapi/client.js.map +1 -0
- package/dist/cjs/openapi/codecs.generated.d.ts +2234 -0
- package/dist/cjs/openapi/codecs.generated.js +6 -0
- package/dist/cjs/openapi/codecs.generated.js.map +1 -0
- package/dist/cjs/openapi/index.d.ts +5 -0
- package/dist/cjs/openapi/index.js +12 -0
- package/dist/cjs/openapi/index.js.map +1 -0
- package/dist/cjs/openapi/types.generated.d.ts +3227 -0
- package/dist/cjs/openapi/types.generated.js +3 -0
- package/dist/cjs/openapi/types.generated.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/react.d.ts +9 -0
- package/dist/cjs/react.js +16 -0
- package/dist/cjs/react.js.map +1 -0
- package/dist/cjs/runtime-context.d.ts +9 -0
- package/dist/cjs/runtime-context.js +25 -0
- package/dist/cjs/runtime-context.js.map +1 -0
- package/dist/cjs/runtime-env.d.ts +1 -0
- package/dist/cjs/runtime-env.js +18 -0
- package/dist/cjs/runtime-env.js.map +1 -0
- package/dist/cjs/source.d.ts +39 -0
- package/dist/cjs/source.js +29 -0
- package/dist/cjs/source.js.map +1 -0
- package/dist/cjs/stream.d.ts +40 -0
- package/dist/cjs/stream.js +33 -0
- package/dist/cjs/stream.js.map +1 -0
- package/dist/cjs/uns-v2/client.d.ts +54 -0
- package/dist/cjs/uns-v2/client.js +177 -0
- package/dist/cjs/uns-v2/client.js.map +1 -0
- package/dist/cjs/uns-v2/codec.d.ts +11 -0
- package/dist/cjs/uns-v2/codec.js +290 -0
- package/dist/cjs/uns-v2/codec.js.map +1 -0
- package/dist/cjs/uns-v2/data-client.d.ts +10 -0
- package/dist/cjs/uns-v2/data-client.js +18 -0
- package/dist/cjs/uns-v2/data-client.js.map +1 -0
- package/dist/cjs/uns-v2/generated.d.ts +15551 -0
- package/dist/cjs/uns-v2/generated.js +139 -0
- package/dist/cjs/uns-v2/generated.js.map +1 -0
- package/dist/cjs/uns-v2/index.d.ts +5 -0
- package/dist/cjs/uns-v2/index.js +24 -0
- package/dist/cjs/uns-v2/index.js.map +1 -0
- package/dist/cjs/vue.d.ts +9 -0
- package/dist/cjs/vue.js +39 -0
- package/dist/cjs/vue.js.map +1 -0
- package/dist/esm/app-identity-contract.generated.d.ts +22 -0
- package/dist/esm/app-identity-contract.generated.js +48 -0
- package/dist/esm/app-identity-contract.generated.js.map +1 -0
- package/dist/esm/capabilities.d.ts +54 -0
- package/dist/esm/capabilities.js +129 -0
- package/dist/esm/capabilities.js.map +1 -0
- package/dist/esm/client.d.ts +604 -0
- package/dist/esm/client.js +32 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/cloud-server.d.ts +31 -0
- package/dist/esm/cloud-server.js +109 -0
- package/dist/esm/cloud-server.js.map +1 -0
- package/dist/esm/cloud-transport.d.ts +46 -0
- package/dist/esm/cloud-transport.js +187 -0
- package/dist/esm/cloud-transport.js.map +1 -0
- package/dist/esm/controls.d.ts +93 -0
- package/dist/esm/controls.js +163 -0
- package/dist/esm/controls.js.map +1 -0
- package/dist/esm/data/bootstrap.d.ts +66 -0
- package/dist/esm/data/bootstrap.js +277 -0
- package/dist/esm/data/bootstrap.js.map +1 -0
- package/dist/esm/data/call.d.ts +16 -0
- package/dist/esm/data/call.js +47 -0
- package/dist/esm/data/call.js.map +1 -0
- package/dist/esm/data/client.d.ts +92 -0
- package/dist/esm/data/client.js +99 -0
- package/dist/esm/data/client.js.map +1 -0
- package/dist/esm/data/collection.d.ts +238 -0
- package/dist/esm/data/collection.js +434 -0
- package/dist/esm/data/collection.js.map +1 -0
- package/dist/esm/data/context.d.ts +10 -0
- package/dist/esm/data/context.js +34 -0
- package/dist/esm/data/context.js.map +1 -0
- package/dist/esm/data/declarations.d.ts +11 -0
- package/dist/esm/data/declarations.js +10 -0
- package/dist/esm/data/declarations.js.map +1 -0
- package/dist/esm/data/define.d.ts +69 -0
- package/dist/esm/data/define.js +27 -0
- package/dist/esm/data/define.js.map +1 -0
- package/dist/esm/data/error.d.ts +60 -0
- package/dist/esm/data/error.js +178 -0
- package/dist/esm/data/error.js.map +1 -0
- package/dist/esm/data/index.d.ts +21 -0
- package/dist/esm/data/index.js +18 -0
- package/dist/esm/data/index.js.map +1 -0
- package/dist/esm/data/schema.d.ts +82 -0
- package/dist/esm/data/schema.js +596 -0
- package/dist/esm/data/schema.js.map +1 -0
- package/dist/esm/data/sort.d.ts +8 -0
- package/dist/esm/data/sort.js +18 -0
- package/dist/esm/data/sort.js.map +1 -0
- package/dist/esm/files.d.ts +67 -0
- package/dist/esm/files.js +113 -0
- package/dist/esm/files.js.map +1 -0
- package/dist/esm/framework-scope.d.ts +1 -0
- package/dist/esm/framework-scope.js +11 -0
- package/dist/esm/framework-scope.js.map +1 -0
- package/dist/esm/index.d.ts +14 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/mq/broker.d.ts +65 -0
- package/dist/esm/mq/broker.js +109 -0
- package/dist/esm/mq/broker.js.map +1 -0
- package/dist/esm/mq/client.d.ts +37 -0
- package/dist/esm/mq/client.js +314 -0
- package/dist/esm/mq/client.js.map +1 -0
- package/dist/esm/mq/index.d.ts +5 -0
- package/dist/esm/mq/index.js +3 -0
- package/dist/esm/mq/index.js.map +1 -0
- package/dist/esm/mq/types.d.ts +48 -0
- package/dist/esm/mq/types.js +2 -0
- package/dist/esm/mq/types.js.map +1 -0
- package/dist/esm/openapi/api.generated.d.ts +820 -0
- package/dist/esm/openapi/api.generated.js +603 -0
- package/dist/esm/openapi/api.generated.js.map +1 -0
- package/dist/esm/openapi/client.d.ts +56 -0
- package/dist/esm/openapi/client.js +210 -0
- package/dist/esm/openapi/client.js.map +1 -0
- package/dist/esm/openapi/codecs.generated.d.ts +2234 -0
- package/dist/esm/openapi/codecs.generated.js +3 -0
- package/dist/esm/openapi/codecs.generated.js.map +1 -0
- package/dist/esm/openapi/index.d.ts +5 -0
- package/dist/esm/openapi/index.js +3 -0
- package/dist/esm/openapi/index.js.map +1 -0
- package/dist/esm/openapi/types.generated.d.ts +3227 -0
- package/dist/esm/openapi/types.generated.js +2 -0
- package/dist/esm/openapi/types.generated.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/react.d.ts +9 -0
- package/dist/esm/react.js +12 -0
- package/dist/esm/react.js.map +1 -0
- package/dist/esm/runtime-context.d.ts +9 -0
- package/dist/esm/runtime-context.js +22 -0
- package/dist/esm/runtime-context.js.map +1 -0
- package/dist/esm/runtime-env.d.ts +1 -0
- package/dist/esm/runtime-env.js +15 -0
- package/dist/esm/runtime-env.js.map +1 -0
- package/dist/esm/source.d.ts +39 -0
- package/dist/esm/source.js +25 -0
- package/dist/esm/source.js.map +1 -0
- package/dist/esm/stream.d.ts +40 -0
- package/dist/esm/stream.js +29 -0
- package/dist/esm/stream.js.map +1 -0
- package/dist/esm/uns-v2/client.d.ts +54 -0
- package/dist/esm/uns-v2/client.js +170 -0
- package/dist/esm/uns-v2/client.js.map +1 -0
- package/dist/esm/uns-v2/codec.d.ts +11 -0
- package/dist/esm/uns-v2/codec.js +284 -0
- package/dist/esm/uns-v2/codec.js.map +1 -0
- package/dist/esm/uns-v2/data-client.d.ts +10 -0
- package/dist/esm/uns-v2/data-client.js +14 -0
- package/dist/esm/uns-v2/data-client.js.map +1 -0
- package/dist/esm/uns-v2/generated.d.ts +15551 -0
- package/dist/esm/uns-v2/generated.js +136 -0
- package/dist/esm/uns-v2/generated.js.map +1 -0
- package/dist/esm/uns-v2/index.d.ts +5 -0
- package/dist/esm/uns-v2/index.js +5 -0
- package/dist/esm/uns-v2/index.js.map +1 -0
- package/dist/esm/vue.d.ts +9 -0
- package/dist/esm/vue.js +36 -0
- package/dist/esm/vue.js.map +1 -0
- package/docs/acceptance-2026-10-22.md +88 -0
- package/package.json +242 -4
- package/skills/tier0-sdk-v2/SKILL.md +66 -0
- package/skills/tier0-sdk-v2/references/integration.md +72 -0
- package/skills/tier0-sdk-v2-agent/SKILL.md +73 -0
- package/skills/tier0-sdk-v2-agent/references/results.md +45 -0
- package/skills/tier0-sdk-v2-controls/SKILL.md +63 -0
- package/skills/tier0-sdk-v2-data/SKILL.md +57 -0
- package/skills/tier0-sdk-v2-data/references/consistency.md +70 -0
- package/skills/tier0-sdk-v2-data/references/errors.md +69 -0
- package/skills/tier0-sdk-v2-data/references/modeling.md +77 -0
- package/skills/tier0-sdk-v2-data/references/read-write.md +72 -0
- package/skills/tier0-sdk-v2-data/references/schema-evolution.md +36 -0
- package/skills/tier0-sdk-v2-files/SKILL.md +85 -0
- package/skills/tier0-sdk-v2-files/references/delete.md +22 -0
- package/skills/tier0-sdk-v2-files/references/download.md +49 -0
- package/skills/tier0-sdk-v2-files/references/multipart.md +42 -0
- package/skills/tier0-sdk-v2-files/references/upload.md +27 -0
- package/skills/tier0-sdk-v2-files/references/url.md +22 -0
- package/skills/tier0-sdk-v2-members/SKILL.md +56 -0
- package/skills/tier0-sdk-v2-members/references/app-members.md +41 -0
- package/skills/tier0-sdk-v2-members/references/platform-members.md +56 -0
- package/skills/tier0-sdk-v2-mq/SKILL.md +78 -0
- package/skills/tier0-sdk-v2-mq/references/quickstart.md +69 -0
- package/skills/tier0-sdk-v2-notifications/SKILL.md +42 -0
- package/skills/tier0-sdk-v2-notifications/references/get.md +34 -0
- package/skills/tier0-sdk-v2-notifications/references/send.md +72 -0
- package/skills/tier0-sdk-v2-source/SKILL.md +38 -0
- package/skills/tier0-sdk-v2-source/references/changes.md +40 -0
- package/skills/tier0-sdk-v2-source/references/create.md +63 -0
- package/skills/tier0-sdk-v2-source/references/delete.md +47 -0
- package/skills/tier0-sdk-v2-source/references/protocols.md +36 -0
- package/skills/tier0-sdk-v2-source/references/read.md +34 -0
- package/skills/tier0-sdk-v2-source/references/state.md +37 -0
- package/skills/tier0-sdk-v2-source/references/update.md +61 -0
- package/skills/tier0-sdk-v2-stream/SKILL.md +43 -0
- package/skills/tier0-sdk-v2-stream/references/create.md +55 -0
- package/skills/tier0-sdk-v2-stream/references/delete.md +35 -0
- package/skills/tier0-sdk-v2-stream/references/deploy.md +63 -0
- package/skills/tier0-sdk-v2-stream/references/lifecycle.md +25 -0
- package/skills/tier0-sdk-v2-stream/references/read.md +35 -0
- package/skills/tier0-sdk-v2-stream/references/update.md +35 -0
- package/skills/tier0-sdk-v2-system/SKILL.md +64 -0
- package/skills/tier0-sdk-v2-system/references/info.md +23 -0
- package/skills/tier0-sdk-v2-system/references/whoami.md +21 -0
- package/skills/tier0-sdk-v2-uns/SKILL.md +53 -0
- package/skills/tier0-sdk-v2-uns/references/create.md +85 -0
- package/skills/tier0-sdk-v2-uns/references/data-workflows.md +73 -0
- package/skills/tier0-sdk-v2-uns/references/delete.md +69 -0
- package/skills/tier0-sdk-v2-uns/references/namespace.md +75 -0
- package/skills/tier0-sdk-v2-uns/references/read.md +32 -0
- package/skills/tier0-sdk-v2-uns/references/restore.md +41 -0
- package/skills/tier0-sdk-v2-uns/references/update.md +86 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/uns-v2/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export * from './generated.js';\r\nexport * from './client.js';\r\nexport { UnsV2RawNumber } from './codec.js';\r\nexport { createUnsDataClient } from './data-client.js';\r\nexport type { UnsDataClient, UnsDataClientConfig, UnsDataOperationName } from './data-client.js';\r\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Tier0Client } from './client.js';
|
|
2
|
+
/** Explicit execution, with latest-result wins and no automatic mutation replay. */
|
|
3
|
+
export declare function useTier0Request<T, Variables>(client: Tier0Client, request: (client: Tier0Client, variables: Variables, signal: AbortSignal) => Promise<T>): {
|
|
4
|
+
data: import("vue").ShallowRef<T | undefined, T | undefined>;
|
|
5
|
+
error: import("vue").ShallowRef<unknown, unknown>;
|
|
6
|
+
loading: import("vue").ShallowRef<boolean, boolean>;
|
|
7
|
+
execute: (variables: Variables) => Promise<T>;
|
|
8
|
+
cancel: () => void;
|
|
9
|
+
};
|
package/dist/esm/vue.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { shallowRef, onScopeDispose, getCurrentScope } from 'vue';
|
|
2
|
+
/** Explicit execution, with latest-result wins and no automatic mutation replay. */
|
|
3
|
+
export function useTier0Request(client, request) {
|
|
4
|
+
const data = shallowRef();
|
|
5
|
+
const error = shallowRef();
|
|
6
|
+
const loading = shallowRef(false);
|
|
7
|
+
let controller;
|
|
8
|
+
let generation = 0;
|
|
9
|
+
const cancel = () => { generation++; controller?.abort(); loading.value = false; };
|
|
10
|
+
if (getCurrentScope())
|
|
11
|
+
onScopeDispose(cancel);
|
|
12
|
+
async function execute(variables) {
|
|
13
|
+
controller?.abort();
|
|
14
|
+
const own = ++generation;
|
|
15
|
+
const current = controller = new AbortController();
|
|
16
|
+
loading.value = true;
|
|
17
|
+
error.value = undefined;
|
|
18
|
+
try {
|
|
19
|
+
const result = await request(client, variables, current.signal);
|
|
20
|
+
if (own === generation)
|
|
21
|
+
data.value = result;
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
catch (failure) {
|
|
25
|
+
if (own === generation)
|
|
26
|
+
error.value = failure;
|
|
27
|
+
throw failure;
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
if (own === generation)
|
|
31
|
+
loading.value = false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return { data, error, loading, execute, cancel };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.js","sourceRoot":"","sources":["../../src/vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGlE,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAe,MAAmB,EAAE,OAAuF;IACxJ,MAAM,IAAI,GAAG,UAAU,EAAK,CAAC;IAC7B,MAAM,KAAK,GAAG,UAAU,EAAW,CAAC;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,UAAuC,CAAC;IAC5C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,eAAe,EAAE;QAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9C,KAAK,UAAU,OAAO,CAAC,SAAoB;QACzC,UAAU,EAAE,KAAK,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,EAAE,UAAU,CAAC;QACzB,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,GAAG,KAAK,UAAU;gBAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YAC5C,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;YACjB,IAAI,GAAG,KAAK,UAAU;gBAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;YAC9C,MAAM,OAAO,CAAC;QAChB,CAAC;gBAAS,CAAC;YAAC,IAAI,GAAG,KAAK,UAAU;gBAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnD,CAAC","sourcesContent":["import { shallowRef, onScopeDispose, getCurrentScope } from 'vue';\nimport type { Tier0Client } from './client.js';\n\n/** Explicit execution, with latest-result wins and no automatic mutation replay. */\nexport function useTier0Request<T, Variables>(client: Tier0Client, request: (client: Tier0Client, variables: Variables, signal: AbortSignal) => Promise<T>) {\n const data = shallowRef<T>();\n const error = shallowRef<unknown>();\n const loading = shallowRef(false);\n let controller: AbortController | undefined;\n let generation = 0;\n const cancel = () => { generation++; controller?.abort(); loading.value = false; };\n if (getCurrentScope()) onScopeDispose(cancel);\n async function execute(variables: Variables): Promise<T> {\n controller?.abort();\n const own = ++generation;\n const current = controller = new AbortController();\n loading.value = true;\n error.value = undefined;\n try {\n const result = await request(client, variables, current.signal);\n if (own === generation) data.value = result;\n return result;\n } catch (failure) {\n if (own === generation) error.value = failure;\n throw failure;\n } finally { if (own === generation) loading.value = false; }\n }\n return { data, error, loading, execute, cancel };\n}\n"]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# SDK v2 安装包与开发环境验收
|
|
2
|
+
|
|
3
|
+
日期:2026-10-22。包:`@tier0/sdk-v2@0.1.0`。
|
|
4
|
+
|
|
5
|
+
验收对应 SDK 提交 `5d30d5154354bac94bbbe88402a8303d6c43526d` 的安装包。报告提交时远端已合入其他功能(至 `78f5168`);下列测试数量和业务结论不覆盖那些新增功能。
|
|
6
|
+
|
|
7
|
+
结论:安装包和本地自动化通过;多组真实业务操作通过,但不能宣称“所有功能已可用”。追加验收已完成真实站内通知发送、Stream 发布、当前 release 的真实执行、停用及归档。Source 创建预检、Control 权限、Stream 能力查询、Agent 真实用户身份及文件大分片传输仍有阻断或限制。
|
|
8
|
+
|
|
9
|
+
## 测试对象与方法
|
|
10
|
+
|
|
11
|
+
- 测试 Workspace:`374897752781296`。网页 `https://dev.tier0.cn`,SDK API Host **`https://api-dev.tier0.cn`**。
|
|
12
|
+
- 使用用户提供的 service Key,先以 `system.whoami()` 验证 Workspace。凭据仅进入测试进程环境,没有写入文件、安装包或 Git。
|
|
13
|
+
- 后端契约固定版本:`1e93620522caa47869d67e9aea1491a8cda71fa5`。未修改后端或部署配置。
|
|
14
|
+
- `npm pack` 后在独立 consumer 中安装 `.tgz`。真实环境脚本从这个 consumer 加载 SDK;Skill 工作流提取的是安装包中的 Markdown 代码。
|
|
15
|
+
- 写入仅针对本次生成的 SDK 验收资源。Source 只做创建预检;追加测试发布了无 Source 绑定、无外部写入的独立 timer Stream,随后停用并归档。经用户指定,向成员 `tier0` 发送了一条“SDK 验收”站内通知。
|
|
16
|
+
|
|
17
|
+
## 安装包检查
|
|
18
|
+
|
|
19
|
+
| 检查 | 结果 |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| 源码行为测试 | 580 / 580,15 个文件 |
|
|
22
|
+
| 安装后行为测试 | 580 / 580,同套断言,导入目标为包内 dist |
|
|
23
|
+
| 全部生成操作路由 | 50 个 v1 + 98 个 v2,每个实际请求本地 HTTP fixture |
|
|
24
|
+
| Skills | 11 个;62 个 TypeScript 示例对源码及包内声明类型检查通过 |
|
|
25
|
+
| 使用形式 | ESM、CommonJS、声明导出、独立包安装、浏览器 bundle 通过 |
|
|
26
|
+
| 调试映射 | JS map 内嵌源码;不再提供指向包外源码的声明 map |
|
|
27
|
+
|
|
28
|
+
路由 smoke 检查证明方法、路径和基本传输可用,不证明每个业务字段或每种服务端状态已验收。已有测试另外覆盖无损整数、超时/取消、写入结果未知、不自动重试、凭据隔离、对象存储无平台凭据以及 Skill 的主要生命周期。
|
|
29
|
+
|
|
30
|
+
## 真实环境结果
|
|
31
|
+
|
|
32
|
+
| 功能 | 结果与范围 |
|
|
33
|
+
| --- | --- |
|
|
34
|
+
| 系统、成员、能力发现 | whoami、info、Workspace 成员列表、capabilities.discover 通过 |
|
|
35
|
+
| Source 查询 | 协议列表、配置列表、原生文档列表通过;读到 7 个现有 Source |
|
|
36
|
+
| Source 创建 | 原生文档 dryRun 返回 HTTP 503 / TEMPORARILY_UNAVAILABLE,消息 `cloud lifecycle service unavailable`;未继续提交创建,因此修改/删除/连接采集未验收 |
|
|
37
|
+
| Stream | 读取原有 9 个 Stream;独立 timer 草稿 CRUD 通过。追加的发布、当前 release 执行完成、停用、归档通过,证据见下文 |
|
|
38
|
+
| Stream runtime capabilities | HTTP 403 / FORBIDDEN,`API key operation not allowed`;不代表所有 Stream 接口都不可用 |
|
|
39
|
+
| UNS 集合与记录 | 创建、读取、修改、删除/归档、恢复和最终清理通过;执行包内 Skill 示例 |
|
|
40
|
+
| UNS 目录与 Topic | 创建、读回、修改、归档、恢复、再次归档通过 |
|
|
41
|
+
| UNS 采样与查询 | 采样追加、历史、最新值、聚合、范围删除及空结果核对;记录 count/distinct 通过 |
|
|
42
|
+
| UNS 并发和事务 | 记录加锁、续租、解锁;事务 dryRun、提交和读回;changes poll 通过 |
|
|
43
|
+
| 文件普通上传 | 上传测试文本、签名 URL、下载内容逐字比对、删除通过 |
|
|
44
|
+
| 文件分片 | 6 MiB、两片测试未完成。初始化和签名 API 返回 200,第一片向 OSS S3 endpoint 的 PUT 在 30 秒和诊断用 60 秒期限内均未完成;错误为 AbortError,尚不能区分网络与服务配置根因。两次未完成会话均已 abort 成功 |
|
|
45
|
+
| MQTT | 使用同一 service Key 连接 `wss://mqtt-dev.tier0.cn:8084/mqtt` 成功,已断开 |
|
|
46
|
+
| Control | discover 返回 HTTP 403 / CONTROL_FORBIDDEN;未调用实际控制设备 |
|
|
47
|
+
| Agent | library/results/canvases 列表通过;当前画布列表为空,未构造虚假 canvasId 测卡片。jobs.list 返回业务码 100012:任务管理需要真实用户身份,内部服务虚拟负责人不能代替 |
|
|
48
|
+
| 通知 | 向用户指定的 `tier0` 成员发送一条 live inbox 通知,channels=[],无邮件/短信;发送返回 accepted,随后状态查询为 sent。未验证收件人已读 |
|
|
49
|
+
|
|
50
|
+
Source 的 503 是后端返回的统一生命周期错误。对固定版本代码的检查表明它可包装多种内部失败,因此本报告不把它进一步断言为某个具体服务宕机或数据库故障。SDK 正确抛出了服务端错误。
|
|
51
|
+
|
|
52
|
+
## 追加验收与修复判断
|
|
53
|
+
|
|
54
|
+
追加测试仍从已安装的 `.tgz` 加载 SDK,Workspace 不变。只读检查 ACK `tier0-dev-ack`;当时 unssvr、syssvr、gwsvr 镜像 tag 为 `feature-cloud-new-architecture-migration-ab88c067-20261022-204`,对应提交 `ab88c0674f8362780bd685743fe064aa22143e64`。这是部署版本,不能与 SDK 固定契约版本混同。
|
|
55
|
+
|
|
56
|
+
- 通知:messageId `375221818446704`,收件人 `tier0`,标题“SDK 验收”,查询状态 `sent`,errorCode 为空。只发送一次;sent 是服务端状态,不等同于用户已读。
|
|
57
|
+
- Stream:测试 ID `375222335204848`,activeVersion `375222336562672`,activeRelease `1`。本次 release 的执行 `delivery:375222339446256` 和 `delivery:375222337334768` 均为 `completed`。随后确认 activeRelease=0,再删除归档。首次补测脚本误读 `runs.list`,已修正为契约规定的 `runs.items`,并重新创建隔离流验证;两次测试流均已清理。
|
|
58
|
+
- 保存后的通用脚本再次实跑通过:Stream `375222824547824`,activeVersion `375222826821104`,release `1` 的 `delivery:375222827312624` 为 `completed`,最后停用并归档。脚本语法检查和 `git diff --check` 通过;本次未修改 SDK 运行时代码。
|
|
59
|
+
- 此前通知因未指定收件人而未发送;Stream 发布运行属于上一轮测试覆盖遗漏。能力查询 403 不构成停止测试发布运行接口的理由。
|
|
60
|
+
|
|
61
|
+
| 阻断 | 已确认事实 | 修复方向与边界 |
|
|
62
|
+
| --- | --- | --- |
|
|
63
|
+
| Source 创建 503 | 当前镜像仍复现;requestId `8b0197c1-3479-4277-ba70-89e131512437`。错误映射将多种内部错误合并为 `cloud lifecycle service unavailable`,现有日志未能将根因关联到此请求 | 服务端在 Source 管理身份刷新、租户解析、凭据绑定预检、事务写入边界增加不含凭据的阶段码和 requestId 关联,再针对确切失败修复。暂不能声称重启、加权限或迁库能解决。未修改部署或数据库 |
|
|
64
|
+
| 大文件分片 PUT 超时 | 追加对照中 1 KiB 的 PUT=200、complete=200;5 MiB 首片仍超过 20 秒。原测试 30/60 秒同样超时;额外把 Blob 转为 Uint8Array 发送,60 秒仍超时。小文件完成后的下载 URL 查询另遇连接错误,文件已删除,大分片会话已 abort | 签名对小分片有效,替换 Blob 发送体未解决。仍需上传路径/OSS 服务端证据定位;仅增大 timeout 不能算修复,须以两片上传、合并及下载 hash 比对为验收 |
|
|
65
|
+
| Control 与 runtime capabilities 403 | 当前 Key 只有 UNS/Source/Stream scope;部署代码 `apiKeyUnsV2ControlScopes` 将能力查询也放在 Control 权限分支,且要求非空控制码 grants | 为测试对象配置最小 `control.read`/`control.execute` scope 和具体控制码授权;Stream manage 或 owner 身份不能替代。若产品要求普通 Stream 用户查询能力,需要后端单独调整该查询的授权规则;不得绕过真实 Control 调用授权 |
|
|
66
|
+
| Agent jobs 身份限制 | 当前是 service Key;任务管理明确要求真实用户 | 使用有任务权限的真实成员 personal Key 或该功能支持的会话身份。扩大 service Key scope 不能把它变成真实用户 |
|
|
67
|
+
|
|
68
|
+
ACK 日志另有 `UNS control metadata requires explicit migration before startup`,但尚未证实属于本 Workspace 或此次 Source 请求,不能把该日志当成本次 503 的根因。部署、重启、授权变更和数据库迁移均未执行。
|
|
69
|
+
|
|
70
|
+
## 未验收范围
|
|
71
|
+
|
|
72
|
+
不能从上述通过项推断 Source 探测/启用/真实采集、Source 绑定 Stream 的端到端数据链、Stream 回滚、MQTT 发布订阅消息闭环及凭证创建撤销、通知已读、邮件/短信通道、Control 执行、Agent 任务/卡片/即时分析写入已经可用。React/Vue 完成类型和打包检查,未在实际应用页面中进行组件交互验收。
|
|
73
|
+
|
|
74
|
+
全量业务验收需要先解决 Source 和分片阻断,并提供相应功能允许的身份、权限和测试对象。权限失败不能通过 SDK 绕过;当前 service Key 不应被当作真实用户身份。
|
|
75
|
+
|
|
76
|
+
## 清理与复现
|
|
77
|
+
|
|
78
|
+
最终以 SDK 按测试前缀检索,活跃 Source、Stream、集合、目录、Topic 均为 0。创建过的业务资源使用平台归档语义清理,归档历史保留;测试文本对象已删除,未完成分片会话已终止。
|
|
79
|
+
|
|
80
|
+
复现入口:
|
|
81
|
+
|
|
82
|
+
- `npm run check`:自动打包、安装并执行包内行为测试,不触及线上。
|
|
83
|
+
- `scripts/check-live-readonly.mjs`:仅查询,检查 Workspace 绑定,报告不保存原始业务响应。
|
|
84
|
+
- `scripts/check-live-workflows.mjs`:需显式 `--write-test-fixtures`,可用 `TIER0_TEST_DOMAINS=uns,extended` 选择扩展 UNS 验收。
|
|
85
|
+
- `scripts/check-live-transports.mjs`:普通 API 鉴权、分片传输和 MQTT 连接诊断;只记录状态、耗时与存储 origin,不记录签名查询字符串。
|
|
86
|
+
- `scripts/check-live-stream-runtime.mjs <consumer> <workspace> <report> --write-test-fixtures`:从安装包创建独立 timer 流,发布后按当前 release 检查 completed 记录,最后停用并归档;需进程环境中的 API Host 和 Key。
|
|
87
|
+
|
|
88
|
+
本次安装包用于本地分发与验收,未发布到 npm。
|
package/package.json
CHANGED
|
@@ -1,6 +1,244 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tier0/sdk-v2",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Tier0 Cloud new-architecture SDK for TypeScript and JavaScript",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"main": "./dist/cjs/index.js",
|
|
9
|
+
"module": "./dist/esm/index.js",
|
|
10
|
+
"types": "./dist/esm/index.d.ts",
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=20.19.0"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/FREEZONEX/Tier0-sdk-v2.git"
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"skills",
|
|
24
|
+
"README.md",
|
|
25
|
+
"docs/acceptance-2026-10-22.md",
|
|
26
|
+
"LICENSE",
|
|
27
|
+
"NOTICE.md"
|
|
28
|
+
],
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"import": {
|
|
32
|
+
"types": "./dist/esm/index.d.ts",
|
|
33
|
+
"default": "./dist/esm/index.js"
|
|
34
|
+
},
|
|
35
|
+
"require": {
|
|
36
|
+
"types": "./dist/cjs/index.d.ts",
|
|
37
|
+
"default": "./dist/cjs/index.js"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"./openapi": {
|
|
41
|
+
"import": {
|
|
42
|
+
"types": "./dist/esm/openapi/index.d.ts",
|
|
43
|
+
"default": "./dist/esm/openapi/index.js"
|
|
44
|
+
},
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/cjs/openapi/index.d.ts",
|
|
47
|
+
"default": "./dist/cjs/openapi/index.js"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"./uns": {
|
|
51
|
+
"import": {
|
|
52
|
+
"types": "./dist/esm/uns-v2/index.d.ts",
|
|
53
|
+
"default": "./dist/esm/uns-v2/index.js"
|
|
54
|
+
},
|
|
55
|
+
"require": {
|
|
56
|
+
"types": "./dist/cjs/uns-v2/index.d.ts",
|
|
57
|
+
"default": "./dist/cjs/uns-v2/index.js"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"./source": {
|
|
61
|
+
"import": { "types": "./dist/esm/source.d.ts", "default": "./dist/esm/source.js" },
|
|
62
|
+
"require": { "types": "./dist/cjs/source.d.ts", "default": "./dist/cjs/source.js" }
|
|
63
|
+
},
|
|
64
|
+
"./stream": {
|
|
65
|
+
"import": { "types": "./dist/esm/stream.d.ts", "default": "./dist/esm/stream.js" },
|
|
66
|
+
"require": { "types": "./dist/cjs/stream.d.ts", "default": "./dist/cjs/stream.js" }
|
|
67
|
+
},
|
|
68
|
+
"./files": {
|
|
69
|
+
"import": {
|
|
70
|
+
"types": "./dist/esm/files.d.ts",
|
|
71
|
+
"default": "./dist/esm/files.js"
|
|
72
|
+
},
|
|
73
|
+
"require": {
|
|
74
|
+
"types": "./dist/cjs/files.d.ts",
|
|
75
|
+
"default": "./dist/cjs/files.js"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"./mq": {
|
|
79
|
+
"import": {
|
|
80
|
+
"types": "./dist/esm/mq/index.d.ts",
|
|
81
|
+
"default": "./dist/esm/mq/index.js"
|
|
82
|
+
},
|
|
83
|
+
"require": {
|
|
84
|
+
"types": "./dist/cjs/mq/index.d.ts",
|
|
85
|
+
"default": "./dist/cjs/mq/index.js"
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"./server": {
|
|
89
|
+
"import": {
|
|
90
|
+
"types": "./dist/esm/cloud-server.d.ts",
|
|
91
|
+
"default": "./dist/esm/cloud-server.js"
|
|
92
|
+
},
|
|
93
|
+
"require": {
|
|
94
|
+
"types": "./dist/cjs/cloud-server.d.ts",
|
|
95
|
+
"default": "./dist/cjs/cloud-server.js"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"./data": {
|
|
99
|
+
"import": {
|
|
100
|
+
"types": "./dist/esm/data/index.d.ts",
|
|
101
|
+
"default": "./dist/esm/data/index.js"
|
|
102
|
+
},
|
|
103
|
+
"require": {
|
|
104
|
+
"types": "./dist/cjs/data/index.d.ts",
|
|
105
|
+
"default": "./dist/cjs/data/index.js"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"./data/define": {
|
|
109
|
+
"browser": {
|
|
110
|
+
"types": "./dist/esm/data/declarations.d.ts",
|
|
111
|
+
"default": "./dist/esm/data/declarations.js"
|
|
112
|
+
},
|
|
113
|
+
"import": {
|
|
114
|
+
"types": "./dist/esm/data/declarations.d.ts",
|
|
115
|
+
"default": "./dist/esm/data/declarations.js"
|
|
116
|
+
},
|
|
117
|
+
"require": {
|
|
118
|
+
"types": "./dist/cjs/data/declarations.d.ts",
|
|
119
|
+
"default": "./dist/cjs/data/declarations.js"
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"./react": {
|
|
123
|
+
"import": {
|
|
124
|
+
"types": "./dist/esm/react.d.ts",
|
|
125
|
+
"default": "./dist/esm/react.js"
|
|
126
|
+
},
|
|
127
|
+
"require": {
|
|
128
|
+
"types": "./dist/cjs/react.d.ts",
|
|
129
|
+
"default": "./dist/cjs/react.js"
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"./vue": {
|
|
133
|
+
"import": {
|
|
134
|
+
"types": "./dist/esm/vue.d.ts",
|
|
135
|
+
"default": "./dist/esm/vue.js"
|
|
136
|
+
},
|
|
137
|
+
"require": {
|
|
138
|
+
"types": "./dist/cjs/vue.d.ts",
|
|
139
|
+
"default": "./dist/cjs/vue.js"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"./package.json": "./package.json"
|
|
143
|
+
},
|
|
144
|
+
"scripts": {
|
|
145
|
+
"sync:contracts": "node scripts/sync-contracts.mjs",
|
|
146
|
+
"generate": "node scripts/generate-openapi.mjs && node scripts/generate-uns-v2.mjs",
|
|
147
|
+
"check:contracts": "node scripts/check-contracts.mjs && node scripts/generate-openapi.mjs --check && node scripts/generate-uns-v2.mjs --check",
|
|
148
|
+
"check:skills": "node scripts/check-skills.mjs && node scripts/check-skill-examples.mjs",
|
|
149
|
+
"typecheck": "tsc --noEmit && tsc -p tsconfig.tests.json",
|
|
150
|
+
"build": "node scripts/build.mjs",
|
|
151
|
+
"test": "vitest run",
|
|
152
|
+
"check": "npm run check:contracts && npm run check:skills && npm run typecheck && npm test && npm run build && node scripts/check-package.mjs",
|
|
153
|
+
"prepack": "npm run check:contracts && npm run check:skills && npm run build",
|
|
154
|
+
"prepublishOnly": "npm run check"
|
|
155
|
+
},
|
|
156
|
+
"dependencies": {
|
|
157
|
+
"mqtt": "^5.3.0"
|
|
158
|
+
},
|
|
159
|
+
"peerDependencies": {
|
|
160
|
+
"@tanstack/react-query": "^5.0.0",
|
|
161
|
+
"react": ">=18.0.0",
|
|
162
|
+
"vue": "^3.4.0",
|
|
163
|
+
"zod": "^4.0.0"
|
|
164
|
+
},
|
|
165
|
+
"peerDependenciesMeta": {
|
|
166
|
+
"@tanstack/react-query": {
|
|
167
|
+
"optional": true
|
|
168
|
+
},
|
|
169
|
+
"react": {
|
|
170
|
+
"optional": true
|
|
171
|
+
},
|
|
172
|
+
"vue": {
|
|
173
|
+
"optional": true
|
|
174
|
+
},
|
|
175
|
+
"zod": {
|
|
176
|
+
"optional": true
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
"devDependencies": {
|
|
180
|
+
"@types/node": "^22.0.0",
|
|
181
|
+
"@types/react": "^19.0.0",
|
|
182
|
+
"@tanstack/react-query": "^5.0.0",
|
|
183
|
+
"react": "^19.0.0",
|
|
184
|
+
"vue": "^3.4.0",
|
|
185
|
+
"typescript": "~5.9.3",
|
|
186
|
+
"openapi-typescript": "^7.0.0",
|
|
187
|
+
"vitest": "^4.1.7",
|
|
188
|
+
"esbuild": "^0.25.0",
|
|
189
|
+
"yaml": "^2.8.0",
|
|
190
|
+
"zod": "^4.0.0"
|
|
191
|
+
},
|
|
192
|
+
"agents": {
|
|
193
|
+
"skills": [
|
|
194
|
+
{
|
|
195
|
+
"name": "tier0-sdk-v2-source",
|
|
196
|
+
"path": "./skills/tier0-sdk-v2-source"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"name": "tier0-sdk-v2-stream",
|
|
200
|
+
"path": "./skills/tier0-sdk-v2-stream"
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"name": "tier0-sdk-v2",
|
|
204
|
+
"path": "./skills/tier0-sdk-v2"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"name": "tier0-sdk-v2-uns",
|
|
208
|
+
"path": "./skills/tier0-sdk-v2-uns"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "tier0-sdk-v2-files",
|
|
212
|
+
"path": "./skills/tier0-sdk-v2-files"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "tier0-sdk-v2-notifications",
|
|
216
|
+
"path": "./skills/tier0-sdk-v2-notifications"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"name": "tier0-sdk-v2-mq",
|
|
220
|
+
"path": "./skills/tier0-sdk-v2-mq"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"name": "tier0-sdk-v2-members",
|
|
224
|
+
"path": "./skills/tier0-sdk-v2-members"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"name": "tier0-sdk-v2-system",
|
|
228
|
+
"path": "./skills/tier0-sdk-v2-system"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"name": "tier0-sdk-v2-controls",
|
|
232
|
+
"path": "./skills/tier0-sdk-v2-controls"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "tier0-sdk-v2-agent",
|
|
236
|
+
"path": "./skills/tier0-sdk-v2-agent"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"name": "tier0-sdk-v2-data",
|
|
240
|
+
"path": "./skills/tier0-sdk-v2-data"
|
|
241
|
+
}
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tier0-sdk-v2
|
|
3
|
+
description: 使用 @tier0/sdk-v2 开发或迁移 Tier0 云端 TypeScript/JavaScript 应用,按 Source、Stream、UNS、通知与系统能力选择入口,处理配置、身份和框架集成。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tier0 SDK v2 应用集成
|
|
7
|
+
|
|
8
|
+
面向应用代码编写;运行时为 Node.js 20.19+。独立包 `@tier0/sdk-v2` 的当前源码版本为 0.1.0,是否可从 npm 安装须检查实际发布状态;未发布时安装仓库构建的 tarball。不要改回旧包或旧 Flow API。
|
|
9
|
+
|
|
10
|
+
## 选择业务入口
|
|
11
|
+
|
|
12
|
+
| 用户要做什么 | SDK 入口 | 深入说明 |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| 连接外部系统、维护采集源、检查连接和影响范围 | `client.source` | [Source](../tier0-sdk-v2-source/SKILL.md) |
|
|
15
|
+
| 编写处理程序、配置源绑定、校验和发布、查运行记录 | `client.stream` | [Stream](../tier0-sdk-v2-stream/SKILL.md) |
|
|
16
|
+
| 集合、目录、Topic、业务记录、历史采样与事务 | `client.uns` | [UNS](../tier0-sdk-v2-uns/SKILL.md) |
|
|
17
|
+
| App 自有业务数据:声明集合、Mongo 风格读写与事务 | `@tier0/sdk-v2/data` | [App 数据](../tier0-sdk-v2-data/SKILL.md) |
|
|
18
|
+
| 站内信、Web/Desktop 提醒、手机推送 | `client.notifications` | [通知](../tier0-sdk-v2-notifications/SKILL.md) |
|
|
19
|
+
| 当前凭证、平台信息、功能是否就绪 | `client.system`、`client.capabilities` | [系统](../tier0-sdk-v2-system/SKILL.md) |
|
|
20
|
+
| 附件、头像、导入导出、生成报告 | `client.files` | [文件](../tier0-sdk-v2-files/SKILL.md) |
|
|
21
|
+
| 实时主题订阅/发布 | `@tier0/sdk-v2/mq`、`client.mqttAuth` | [MQTT](../tier0-sdk-v2-mq/SKILL.md) |
|
|
22
|
+
| Workspace 收件人/成员检索、App 可用成员 | `client.members` | [成员](../tier0-sdk-v2-members/SKILL.md) |
|
|
23
|
+
| 调用已发布的 Control | `client.controls` | [Controls](../tier0-sdk-v2-controls/SKILL.md) |
|
|
24
|
+
| Agent 作业、运行、分析结果和卡片 | `client.agent` | [Agent](../tier0-sdk-v2-agent/SKILL.md) |
|
|
25
|
+
|
|
26
|
+
每个领域 Skill 可单独使用,无需先加载本文件。Source → Stream → UNS 是接入、处理与数据存储三个领域;不是要求每个数据读取场景都创建一套流水线。通知和系统能力独立于这条链路。
|
|
27
|
+
|
|
28
|
+
## 初始化与身份
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
import { createClient } from '@tier0/sdk-v2';
|
|
32
|
+
|
|
33
|
+
// 服务端注入 TIER0_API_HOST / TIER0_API_KEY。
|
|
34
|
+
export const client = createClient({ transportTimeoutMs: 30_000 });
|
|
35
|
+
export async function inspectConnection() {
|
|
36
|
+
return client.system.info();
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
也可传 `apiHost`、`apiKey` 或 `getApiHost` / `getApiKey` 回调。API Key 留在服务端;不要生成 `VITE_*KEY` 或让页面携带 App Key。浏览器通过自己的服务端接口访问平台。
|
|
41
|
+
|
|
42
|
+
不同身份使用独立实例。含员工数据委托时,每个入站请求新建实例,使用受信 App Gateway 提供的 `unsV2AppDataSubject`;它不是用户 ID,也不是 App 请求验签断言。不要从请求 JSON 拼造委托。身份验签流程见 [身份与框架集成](references/integration.md)。
|
|
43
|
+
|
|
44
|
+
## 返回值与错误
|
|
45
|
+
|
|
46
|
+
| 入口 | 成功值 | 失败类型 |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| Source、Stream、UNS | 完整 `{ code, msg, requestId, data }` | `UnsV2Error` / `UnsV2OutcomeUnknownError` |
|
|
49
|
+
| 普通 v1,如 system、members、agent、mqttAuth | 解包后的 `data` | `ApiError` / `TransportError` |
|
|
50
|
+
| notifications | 直接对象,如 `messageId`、`status` | `ApiError` |
|
|
51
|
+
| controls、capabilities | 专属响应对象 | `ControlError` / `CapabilityError` |
|
|
52
|
+
|
|
53
|
+
方法存在不等于目标环境已部署或当前 Key 有权限。整数可能为 `bigint`;UNS 任意 JSON 中还可能含 `UnsV2RawNumber`。不要将标识符强制转为 Number;给浏览器返回数据时显式定义精确数字的序列化格式。
|
|
54
|
+
|
|
55
|
+
HTTP 不自动重试。带 `outcomeUnknown` 的失败应先对账,保留原意图键;取消请求不代表服务端撤销。Source/Stream 仍使用底层 UNS v2 契约,所以错误类名保留 UNS,不代表它们仍属于数据入口。
|
|
56
|
+
|
|
57
|
+
## 从首版入口迁移
|
|
58
|
+
|
|
59
|
+
- `client.uns.sourceList(body)` → `client.source.list(body)`。
|
|
60
|
+
- `client.uns.sourceDocumentGet(body)` → `client.source.documents.get(body)`。
|
|
61
|
+
- `client.uns.streamProgramDeploy(body)` → `client.stream.programs.deploy(body)`。
|
|
62
|
+
- `client.uns.streamDocumentValidate(body)` → `client.stream.documents.validate(body)`。
|
|
63
|
+
- `client.uns.recordFind(body)` 保持不变;Control 使用 `client.controls.use({ code })`。
|
|
64
|
+
- 低层 `createUnsV2Client` 保留完整生成契约,供契约工具使用;业务主入口不再把 Source/Stream/Control 混入 `client.uns`。
|
|
65
|
+
|
|
66
|
+
React/Vue 示例与验签见 [集成参考](references/integration.md)。完成接入时验证目标入口、真实身份、响应解包和错误分支;SDK 本地测试通过不代表环境联调完成。
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# 身份与框架集成
|
|
2
|
+
|
|
3
|
+
仅在接入服务端身份或 React/Vue 时阅读本文件。基本分域调用见入口 Skill。
|
|
4
|
+
|
|
5
|
+
## 网关身份验签
|
|
6
|
+
|
|
7
|
+
使用服务端入口,公钥与期望 appID/workspaceID 来自固定服务端配置,不能从请求的 JWK/URL 取钥。保留原始请求字节与路径+query;JSON 解析、重编码或路径归一化后再验签会破坏绑定。
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import {
|
|
11
|
+
createCloudAppRequestVerifier,
|
|
12
|
+
type CloudAppIdentityAuthority,
|
|
13
|
+
type CloudAppIdentityRequest,
|
|
14
|
+
} from '@tier0/sdk-v2/server';
|
|
15
|
+
|
|
16
|
+
export function authenticateRequest(authority: CloudAppIdentityAuthority, request: CloudAppIdentityRequest) {
|
|
17
|
+
const verify = createCloudAppRequestVerifier(authority);
|
|
18
|
+
return verify(request);
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
输入 assertion 对应平台约定的 APP_REQUEST_IDENTITY_HEADER;method、requestURI、body 必须是网关签名对应的值。成功只证明该请求来源与员工身份,业务授权仍单独检查。失败拒绝当前请求,不从未验证 claims 兜底建立身份。
|
|
23
|
+
|
|
24
|
+
App 请求断言与 UNS 员工数据委托是不同的 audience。只有受信接入层获得真实 App-Data-Subject 后,才能为本次请求创建客户端:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { createClient } from '@tier0/sdk-v2';
|
|
28
|
+
|
|
29
|
+
export function clientForTrustedGatewayRequest(apiHost: string, apiKey: string, trustedDataSubject: string) {
|
|
30
|
+
return createClient({ apiHost, apiKey, unsV2AppDataSubject: trustedDataSubject });
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
SDK 仅检查委托的紧凑格式,不自行信任/验证其 claims。不要直接转发公开入口任意同名 header,部署边界必须保证它来自可信网关。不要跨员工复用这个实例或令牌。
|
|
35
|
+
|
|
36
|
+
## React
|
|
37
|
+
|
|
38
|
+
需要 React 与 TanStack Query、外层 QueryClientProvider。稳定持有 client;内部缓存按 client 实例隔离。含服务端 App Key 的代码不能为了使用 hook 被搬到浏览器。
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import type { Tier0Client } from '@tier0/sdk-v2';
|
|
42
|
+
import { useTier0Query, useTier0Mutation } from '@tier0/sdk-v2/react';
|
|
43
|
+
|
|
44
|
+
export function useRecords(client: Tier0Client, collectionId: string) {
|
|
45
|
+
return useTier0Query(client, ['records', collectionId], (sdk, signal) =>
|
|
46
|
+
sdk.uns.recordFind({ collectionId, limit: 20 }, { signal }));
|
|
47
|
+
}
|
|
48
|
+
export function useNotification(client: Tier0Client) {
|
|
49
|
+
type Message = Parameters<Tier0Client['notifications']['send']>[0];
|
|
50
|
+
return useTier0Mutation(client, (sdk, body: Message) => sdk.notifications.send(body));
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
查询 key 包含影响结果的参数。读操作用 query,写操作用 mutation;默认不重试。实际浏览器应用若没有可安全直连平台的用户鉴权,使用自己的服务端 API 与普通框架请求库,不强行把平台 client 放入页面。
|
|
55
|
+
|
|
56
|
+
## Vue
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import type { Tier0Client } from '@tier0/sdk-v2';
|
|
60
|
+
import { useTier0Request } from '@tier0/sdk-v2/vue';
|
|
61
|
+
|
|
62
|
+
export function useRecords(client: Tier0Client) {
|
|
63
|
+
return useTier0Request(client, (sdk, collectionId: string, signal) =>
|
|
64
|
+
sdk.uns.recordFind({ collectionId, limit: 20 }, { signal }));
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
在组件 setup 中调用,随后 execute(collectionId) 显式发起;data/error/loading 为 ref,cancel 可取消当前等待。后发请求的结果优先,scope 销毁时会取消。写操作的取消不意味着撤回服务端副作用。
|
|
69
|
+
|
|
70
|
+
## 联调证据
|
|
71
|
+
|
|
72
|
+
本 SDK 验签契约沿用已记录的上游 App 网关契约,须与目标环境实际注入的 header/公钥/受众对照。契约生成、类型与本地测试证明包内部一致,不替代环境联调。确认身份、权限与字段返回后再切换真实业务流量。
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tier0-sdk-v2-agent
|
|
3
|
+
description: 使用 @tier0/sdk-v2 的 client.agent 查询和管理 Agent 作业、运行记录、分析、结果、卡片、资料库与关系,处理调度副作用和并发编辑。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent 作业与结果
|
|
7
|
+
|
|
8
|
+
Agent 是平台应用能力,区别于 Stream 数据处理程序。使用服务端 client.agent;本领域普通 v1 响应已解包,直接读取 list/job/run/result 等字段。
|
|
9
|
+
|
|
10
|
+
## 入口选择
|
|
11
|
+
|
|
12
|
+
| 入口 | 方法与用途 |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| jobs | list/get/create/update/pause/resume/trigger/delete,管理任务与调度 |
|
|
15
|
+
| jobRuns | list/get,查看具体执行 |
|
|
16
|
+
| analyses | dispatch/get,分发分析和读取结果 |
|
|
17
|
+
| results | create/get/list/pin,保存分析产物并固定到画布 |
|
|
18
|
+
| cards | list/get/update/delete,操作画布卡片 |
|
|
19
|
+
| canvases | list,查找画布 |
|
|
20
|
+
| library | list/get/create/update/delete,复用卡片定义 |
|
|
21
|
+
| nodes | searchSemantic/indexSync,语义搜索与索引同步 |
|
|
22
|
+
| relations | list/teach,读取和写入数据关系 |
|
|
23
|
+
|
|
24
|
+
dispatch、trigger、indexSync、teach 都有副作用,不能在普通查询流程中悄悄执行。
|
|
25
|
+
|
|
26
|
+
## 查询作业与运行
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { createClient } from '@tier0/sdk-v2';
|
|
30
|
+
|
|
31
|
+
export async function listJobs(page = 1) {
|
|
32
|
+
return createClient().agent.jobs.list({ page, size: 20 });
|
|
33
|
+
}
|
|
34
|
+
export async function inspectJob(jobId: string) {
|
|
35
|
+
const client = createClient();
|
|
36
|
+
const job = await client.agent.jobs.get({ jobId });
|
|
37
|
+
const runs = await client.agent.jobRuns.list({ jobId, page: 1, size: 20 });
|
|
38
|
+
return { job: job.job, runs: runs.list, total: runs.total };
|
|
39
|
+
}
|
|
40
|
+
export async function inspectJobRun(jobId: string, jobRunId: string) {
|
|
41
|
+
const response = await createClient().agent.jobRuns.get({ jobId, jobRunId });
|
|
42
|
+
return response.run;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
作业 ID 与运行 ID 不同;不能拿 resultId 去查 jobRuns。分页接口一般要求 page/size,按返回 total/list 继续。status/dispatchState 按服务端值处理,收到派发回执不等于作业完成。
|
|
47
|
+
|
|
48
|
+
## 创建与调度
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
import { createClient, type Tier0Client } from '@tier0/sdk-v2';
|
|
52
|
+
|
|
53
|
+
type CreateJob = Parameters<Tier0Client['agent']['jobs']['create']>[0];
|
|
54
|
+
export async function createConfiguredJob(input: CreateJob) {
|
|
55
|
+
// input 的调度和 task 内容来自当前平台认可的业务配置。
|
|
56
|
+
return createClient().agent.jobs.create(input);
|
|
57
|
+
}
|
|
58
|
+
export async function triggerExistingJob(jobId: string) {
|
|
59
|
+
return createClient().agent.jobs.trigger({ jobId });
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
创建必填 name/scheduleKind/task/sourceType/sessionId。scheduleKind 的可用值、task 对象和时间单位须来自实际业务契约,Swagger 中的 string/unknown 不意味着可以任意填写。pause/resume/trigger 是不同意图;不要用“暂停后再恢复”来替代查询。
|
|
64
|
+
|
|
65
|
+
jobs.update 的 notifyEnabled:省略保留原通知,1 要求提供 notify,2 关闭通知且不带 notify。没有通用作业幂等键字段时,不得额外塞 idempotencyKey;不确定的 trigger 先查运行列表对账。
|
|
66
|
+
|
|
67
|
+
## 保存结果与并发编辑
|
|
68
|
+
|
|
69
|
+
result.create 的 operationId 由调用方持有;保存超时后可用 `results.get({ operationId })` 查回,不能再创建新 operationId 重复保存。get 按 resultId 或 operationId 二选一。
|
|
70
|
+
|
|
71
|
+
cards.update 要带读取时的完整 expectedCardSpec;library.update 要带完整 expectedItem 快照。409 表示内容已变化,应重新读取并合并用户意图,不能自动覆盖。具体示例见 [结果与卡片编辑](references/results.md)。
|
|
72
|
+
|
|
73
|
+
结果附件/图片使用 [文件 Skill](../tier0-sdk-v2-files/SKILL.md) 的持久化 filePath,不保存签名 URL 作为长期资源。失败保留 ApiError.status/code/errorCode;写入 outcomeUnknown 时先查询对应资源,不自动重发。
|