suanpan_node_sdk 3.1.2 → 3.2.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/dist/core/message/index.d.ts +1 -0
- package/dist/core/message/index.js +1 -0
- package/dist/core/message/index.js.map +1 -1
- package/dist/core/message/node.d.ts +45 -0
- package/dist/core/message/node.js +107 -0
- package/dist/core/message/node.js.map +1 -0
- package/dist/core/utils/suanpan.d.ts +22 -0
- package/dist/core/utils/suanpan.js +14 -0
- package/dist/core/utils/suanpan.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/message/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA2B;AAC3B,2CAAyB;AACzB,mDAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/message/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA2B;AAC3B,2CAAyB;AACzB,mDAAiC;AACjC,yCAAuB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { SPNodeInfo } from '../utils/suanpan';
|
|
2
|
+
export declare class NodeInfo {
|
|
3
|
+
/**
|
|
4
|
+
* Get current node information from Suanpan platform
|
|
5
|
+
* @returns Node information including nodeId, state, inputs, outputs, and receiveMsgType
|
|
6
|
+
*/
|
|
7
|
+
static getNodeInfo(): Promise<SPNodeInfo | undefined>;
|
|
8
|
+
/**
|
|
9
|
+
* Get node ID
|
|
10
|
+
* @returns Node ID or undefined
|
|
11
|
+
*/
|
|
12
|
+
static getNodeId(): Promise<string | undefined>;
|
|
13
|
+
/**
|
|
14
|
+
* Get node state
|
|
15
|
+
* @returns Node state number or undefined
|
|
16
|
+
*/
|
|
17
|
+
static getNodeState(): Promise<number | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Get node inputs configuration
|
|
20
|
+
* @returns Array of input configurations
|
|
21
|
+
*/
|
|
22
|
+
static getInputs(): Promise<SPNodeInfo['inputs'] | undefined>;
|
|
23
|
+
/**
|
|
24
|
+
* Get node outputs configuration
|
|
25
|
+
* @returns Array of output configurations
|
|
26
|
+
*/
|
|
27
|
+
static getOutputs(): Promise<SPNodeInfo['outputs'] | undefined>;
|
|
28
|
+
/**
|
|
29
|
+
* Get receive message type
|
|
30
|
+
* @returns Message type string or undefined
|
|
31
|
+
*/
|
|
32
|
+
static getReceiveMsgType(): Promise<string | undefined>;
|
|
33
|
+
/**
|
|
34
|
+
* Find input by name
|
|
35
|
+
* @param inputName - Name of the input to find
|
|
36
|
+
* @returns Input configuration or undefined
|
|
37
|
+
*/
|
|
38
|
+
static findInputByName(inputName: string): Promise<SPNodeInfo['inputs'][0] | undefined>;
|
|
39
|
+
/**
|
|
40
|
+
* Find output by name
|
|
41
|
+
* @param outputName - Name of the output to find
|
|
42
|
+
* @returns Output configuration or undefined
|
|
43
|
+
*/
|
|
44
|
+
static findOutputByName(outputName: string): Promise<SPNodeInfo['outputs'][0] | undefined>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NodeInfo = void 0;
|
|
13
|
+
const suanpan_1 = require("../utils/suanpan");
|
|
14
|
+
class NodeInfo {
|
|
15
|
+
/**
|
|
16
|
+
* Get current node information from Suanpan platform
|
|
17
|
+
* @returns Node information including nodeId, state, inputs, outputs, and receiveMsgType
|
|
18
|
+
*/
|
|
19
|
+
static getNodeInfo() {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
try {
|
|
22
|
+
const nodeInfo = yield suanpan_1.SuanpanWebApi.getNodeInfo();
|
|
23
|
+
if (nodeInfo.success) {
|
|
24
|
+
return nodeInfo.data;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error('Failed to get node info:', error);
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get node ID
|
|
35
|
+
* @returns Node ID or undefined
|
|
36
|
+
*/
|
|
37
|
+
static getNodeId() {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
const info = yield this.getNodeInfo();
|
|
40
|
+
return info === null || info === void 0 ? void 0 : info.nodeId;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get node state
|
|
45
|
+
* @returns Node state number or undefined
|
|
46
|
+
*/
|
|
47
|
+
static getNodeState() {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
const info = yield this.getNodeInfo();
|
|
50
|
+
return info === null || info === void 0 ? void 0 : info.state;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get node inputs configuration
|
|
55
|
+
* @returns Array of input configurations
|
|
56
|
+
*/
|
|
57
|
+
static getInputs() {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
const info = yield this.getNodeInfo();
|
|
60
|
+
return info === null || info === void 0 ? void 0 : info.inputs;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get node outputs configuration
|
|
65
|
+
* @returns Array of output configurations
|
|
66
|
+
*/
|
|
67
|
+
static getOutputs() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const info = yield this.getNodeInfo();
|
|
70
|
+
return info === null || info === void 0 ? void 0 : info.outputs;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get receive message type
|
|
75
|
+
* @returns Message type string or undefined
|
|
76
|
+
*/
|
|
77
|
+
static getReceiveMsgType() {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
const info = yield this.getNodeInfo();
|
|
80
|
+
return info === null || info === void 0 ? void 0 : info.receiveMsgType;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Find input by name
|
|
85
|
+
* @param inputName - Name of the input to find
|
|
86
|
+
* @returns Input configuration or undefined
|
|
87
|
+
*/
|
|
88
|
+
static findInputByName(inputName) {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
const inputs = yield this.getInputs();
|
|
91
|
+
return inputs === null || inputs === void 0 ? void 0 : inputs.find(input => input.inputName === inputName);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Find output by name
|
|
96
|
+
* @param outputName - Name of the output to find
|
|
97
|
+
* @returns Output configuration or undefined
|
|
98
|
+
*/
|
|
99
|
+
static findOutputByName(outputName) {
|
|
100
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
101
|
+
const outputs = yield this.getOutputs();
|
|
102
|
+
return outputs === null || outputs === void 0 ? void 0 : outputs.find(output => output.outputName === outputName);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.NodeInfo = NodeInfo;
|
|
107
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/core/message/node.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8CAAiD;AAEjD,MAAa,QAAQ;IAEnB;;;OAGG;IACH,MAAM,CAAO,WAAW;;YACtB,IAAI;gBACF,MAAM,QAAQ,GAAqB,MAAM,uBAAa,CAAC,WAAW,EAAE,CAAC;gBACrE,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,OAAO,QAAQ,CAAC,IAAI,CAAC;iBACtB;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;aAClD;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;IAED;;;OAGG;IACH,MAAM,CAAO,SAAS;;YACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC;QACtB,CAAC;KAAA;IAED;;;OAGG;IACH,MAAM,CAAO,YAAY;;YACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC;QACrB,CAAC;KAAA;IAED;;;OAGG;IACH,MAAM,CAAO,SAAS;;YACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC;QACtB,CAAC;KAAA;IAED;;;OAGG;IACH,MAAM,CAAO,UAAU;;YACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC;QACvB,CAAC;KAAA;IAED;;;OAGG;IACH,MAAM,CAAO,iBAAiB;;YAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,CAAC;QAC9B,CAAC;KAAA;IAED;;;;OAIG;IACH,MAAM,CAAO,eAAe,CAAC,SAAiB;;YAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAC9D,CAAC;KAAA;IAED;;;;OAIG;IACH,MAAM,CAAO,gBAAgB,CAAC,UAAkB;;YAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,OAAO,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;QACnE,CAAC;KAAA;CACF;AAlFD,4BAkFC"}
|
|
@@ -7,6 +7,27 @@ declare type RegisterPortResponse = {
|
|
|
7
7
|
success: boolean;
|
|
8
8
|
msg: string;
|
|
9
9
|
};
|
|
10
|
+
export declare type SPNodeInfo = {
|
|
11
|
+
nodeId: string;
|
|
12
|
+
state: number;
|
|
13
|
+
inputs: Array<{
|
|
14
|
+
inputId: string;
|
|
15
|
+
inputName: string;
|
|
16
|
+
dataType: string;
|
|
17
|
+
display: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
outputs: Array<{
|
|
20
|
+
outputId: string;
|
|
21
|
+
outputName: string;
|
|
22
|
+
dataType: string;
|
|
23
|
+
display: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
receiveMsgType: string;
|
|
26
|
+
};
|
|
27
|
+
export declare type NodeInfoResponse = {
|
|
28
|
+
success: boolean;
|
|
29
|
+
data: SPNodeInfo;
|
|
30
|
+
};
|
|
10
31
|
export declare const suanpanAddress: string;
|
|
11
32
|
export declare const suanpanHeaders: {
|
|
12
33
|
[key: string]: string;
|
|
@@ -16,5 +37,6 @@ export declare class SuanpanWebApi {
|
|
|
16
37
|
static presignedGetObject(objectName: string): Promise<PresignedResponse>;
|
|
17
38
|
static presignedPutObject(objectName: string): Promise<PresignedResponse>;
|
|
18
39
|
static registerPort(logicalPort: number, realPort: number): Promise<RegisterPortResponse>;
|
|
40
|
+
static getNodeInfo(): Promise<NodeInfoResponse>;
|
|
19
41
|
}
|
|
20
42
|
export {};
|
|
@@ -88,6 +88,20 @@ class SuanpanWebApi {
|
|
|
88
88
|
return yield http_1.httpRequest(requestConfig);
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
|
+
static getNodeInfo() {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
const { appId, nodeId } = environment_1.Environment.stream;
|
|
94
|
+
const requestConfig = {
|
|
95
|
+
url: `${exports.suanpanAddress}/internal/app/graph/node/info`,
|
|
96
|
+
method: 'POST',
|
|
97
|
+
data: {
|
|
98
|
+
appId, nodeId
|
|
99
|
+
},
|
|
100
|
+
headers: { "Content-Type": "application/json" }
|
|
101
|
+
};
|
|
102
|
+
return yield http_1.httpRequest(requestConfig);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
91
105
|
}
|
|
92
106
|
exports.SuanpanWebApi = SuanpanWebApi;
|
|
93
107
|
//# sourceMappingURL=suanpan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suanpan.js","sourceRoot":"","sources":["../../../src/core/utils/suanpan.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAAuB;AAEvB,wBAAgC;AAChC,0DAAuD;AACvD,iCAAoD;AAIpD,SAAS,sBAAsB;IAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;QACvB,CAAC,yBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,yBAAW,CAAC,MAAM,CAAC,MAAgB;QAC7E,CAAC,yBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,cAAW,CAAC,yBAAW,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAC,CAAC,QAAQ,CAAC,yBAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/H,CAAC,yBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,IAAI;KACxD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,yBAAW,CAAC,OAAO,CAAC;IAEtF,IAAI,QAAQ,EAAE;QAAE,OAAO,QAAQ,CAAC;KAAE;IAElC,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAExC,IAAI,yBAAW,CAAC,SAAS,EAAE;QACzB,wBAAwB;QACxB,OAAO,GAAG,QAAQ,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;KACvC;IAED,sCAAsC;IACtC,OAAO,GAAG,QAAQ,MAAM,IAAI,EAAE,CAAC;AACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"suanpan.js","sourceRoot":"","sources":["../../../src/core/utils/suanpan.ts"],"names":[],"mappings":"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"}
|