@robinpath/soap 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -92
- package/package.json +37 -7
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -6
- package/dist/index.js.map +0 -1
- package/dist/soap.d.ts +0 -126
- package/dist/soap.d.ts.map +0 -1
- package/dist/soap.js +0 -234
- package/dist/soap.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
# @robinpath/soap
|
|
2
|
-
|
|
3
|
-
> SOAP web service client, XML-RPC support, WSDL parsing, and envelope building
|
|
4
|
-
|
|
5
|
-
   
|
|
6
|
-
|
|
7
|
-
## Why use this module?
|
|
8
|
-
|
|
9
|
-
The `soap` module lets you:
|
|
10
|
-
|
|
11
|
-
- Call a SOAP web service
|
|
12
|
-
- Build SOAP XML envelope
|
|
13
|
-
- Parse SOAP XML response
|
|
14
|
-
- Call XML-RPC service
|
|
15
|
-
- Build XML-RPC request
|
|
16
|
-
|
|
17
|
-
All functions are callable directly from RobinPath scripts with a simple, consistent API.
|
|
18
|
-
|
|
19
|
-
## Installation
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
npm install @robinpath/soap
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Quick Start
|
|
26
|
-
|
|
27
|
-
No credentials needed — start using it right away:
|
|
28
|
-
|
|
29
|
-
```robinpath
|
|
30
|
-
soap.buildEnvelope "GetUser" {"id": 1}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Available Functions
|
|
34
|
-
|
|
35
|
-
| Function | Description |
|
|
36
|
-
|----------|-------------|
|
|
37
|
-
| `soap.call` | Call a SOAP web service |
|
|
38
|
-
| `soap.buildEnvelope` | Build SOAP XML envelope |
|
|
39
|
-
| `soap.parseEnvelope` | Parse SOAP XML response |
|
|
40
|
-
| `soap.xmlRpc` | Call XML-RPC service |
|
|
41
|
-
| `soap.buildXmlRpc` | Build XML-RPC request |
|
|
42
|
-
| `soap.parseXmlRpc` | Parse XML-RPC response |
|
|
43
|
-
| `soap.wsdl` | Fetch and parse WSDL |
|
|
44
|
-
| `soap.fault` | Create SOAP fault XML |
|
|
45
|
-
| `soap.getFault` | Extract fault from SOAP XML |
|
|
46
|
-
|
|
47
|
-
## Examples
|
|
48
|
-
|
|
49
|
-
### Build SOAP XML envelope
|
|
50
|
-
|
|
51
|
-
```robinpath
|
|
52
|
-
soap.buildEnvelope "GetUser" {"id": 1}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Parse SOAP XML response
|
|
56
|
-
|
|
57
|
-
```robinpath
|
|
58
|
-
soap.parseEnvelope $xml
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### Call XML-RPC service
|
|
62
|
-
|
|
63
|
-
```robinpath
|
|
64
|
-
soap.xmlRpc "http://example.com/rpc" "system.listMethods" []
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Integration with RobinPath
|
|
68
|
-
|
|
69
|
-
```typescript
|
|
70
|
-
import { RobinPath } from "@wiredwp/robinpath";
|
|
71
|
-
import Module from "@robinpath/soap";
|
|
72
|
-
|
|
73
|
-
const rp = new RobinPath();
|
|
74
|
-
rp.registerModule(Module.name, Module.functions);
|
|
75
|
-
rp.registerModuleMeta(Module.name, Module.functionMetadata);
|
|
76
|
-
|
|
77
|
-
const result = await rp.executeScript(`
|
|
78
|
-
soap.buildEnvelope "GetUser" {"id": 1}
|
|
79
|
-
`);
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Full API Reference
|
|
83
|
-
|
|
84
|
-
See [MODULE.md](./MODULE.md) for complete documentation including all parameters, return types, error handling, and advanced examples.
|
|
85
|
-
|
|
86
|
-
## Related Modules
|
|
87
|
-
|
|
88
|
-
- [`@robinpath/json`](../json) — JSON module for complementary functionality
|
|
89
|
-
|
|
90
|
-
## License
|
|
91
|
-
|
|
92
|
-
MIT
|
|
1
|
+
# @robinpath/soap
|
|
2
|
+
|
|
3
|
+
> SOAP web service client, XML-RPC support, WSDL parsing, and envelope building
|
|
4
|
+
|
|
5
|
+
   
|
|
6
|
+
|
|
7
|
+
## Why use this module?
|
|
8
|
+
|
|
9
|
+
The `soap` module lets you:
|
|
10
|
+
|
|
11
|
+
- Call a SOAP web service
|
|
12
|
+
- Build SOAP XML envelope
|
|
13
|
+
- Parse SOAP XML response
|
|
14
|
+
- Call XML-RPC service
|
|
15
|
+
- Build XML-RPC request
|
|
16
|
+
|
|
17
|
+
All functions are callable directly from RobinPath scripts with a simple, consistent API.
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @robinpath/soap
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
No credentials needed — start using it right away:
|
|
28
|
+
|
|
29
|
+
```robinpath
|
|
30
|
+
soap.buildEnvelope "GetUser" {"id": 1}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Available Functions
|
|
34
|
+
|
|
35
|
+
| Function | Description |
|
|
36
|
+
|----------|-------------|
|
|
37
|
+
| `soap.call` | Call a SOAP web service |
|
|
38
|
+
| `soap.buildEnvelope` | Build SOAP XML envelope |
|
|
39
|
+
| `soap.parseEnvelope` | Parse SOAP XML response |
|
|
40
|
+
| `soap.xmlRpc` | Call XML-RPC service |
|
|
41
|
+
| `soap.buildXmlRpc` | Build XML-RPC request |
|
|
42
|
+
| `soap.parseXmlRpc` | Parse XML-RPC response |
|
|
43
|
+
| `soap.wsdl` | Fetch and parse WSDL |
|
|
44
|
+
| `soap.fault` | Create SOAP fault XML |
|
|
45
|
+
| `soap.getFault` | Extract fault from SOAP XML |
|
|
46
|
+
|
|
47
|
+
## Examples
|
|
48
|
+
|
|
49
|
+
### Build SOAP XML envelope
|
|
50
|
+
|
|
51
|
+
```robinpath
|
|
52
|
+
soap.buildEnvelope "GetUser" {"id": 1}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Parse SOAP XML response
|
|
56
|
+
|
|
57
|
+
```robinpath
|
|
58
|
+
soap.parseEnvelope $xml
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Call XML-RPC service
|
|
62
|
+
|
|
63
|
+
```robinpath
|
|
64
|
+
soap.xmlRpc "http://example.com/rpc" "system.listMethods" []
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Integration with RobinPath
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
import { RobinPath } from "@wiredwp/robinpath";
|
|
71
|
+
import Module from "@robinpath/soap";
|
|
72
|
+
|
|
73
|
+
const rp = new RobinPath();
|
|
74
|
+
rp.registerModule(Module.name, Module.functions);
|
|
75
|
+
rp.registerModuleMeta(Module.name, Module.functionMetadata);
|
|
76
|
+
|
|
77
|
+
const result = await rp.executeScript(`
|
|
78
|
+
soap.buildEnvelope "GetUser" {"id": 1}
|
|
79
|
+
`);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Full API Reference
|
|
83
|
+
|
|
84
|
+
See [MODULE.md](./MODULE.md) for complete documentation including all parameters, return types, error handling, and advanced examples.
|
|
85
|
+
|
|
86
|
+
## Related Modules
|
|
87
|
+
|
|
88
|
+
- [`@robinpath/json`](../json) — JSON module for complementary functionality
|
|
89
|
+
|
|
90
|
+
## License
|
|
91
|
+
|
|
92
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,13 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robinpath/soap",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"publishConfig": {
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
5
7
|
"type": "module",
|
|
6
8
|
"main": "dist/index.js",
|
|
7
9
|
"types": "dist/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"test": "node --import tsx --test tests/*.test.ts"
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"@robinpath/core": ">=0.20.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@robinpath/core": "^0.30.1",
|
|
28
|
+
"tsx": "^4.19.0",
|
|
29
|
+
"typescript": "^5.6.0"
|
|
30
|
+
},
|
|
31
|
+
"description": "SOAP web service client, XML-RPC support, WSDL parsing, and envelope building",
|
|
32
|
+
"keywords": [
|
|
33
|
+
"soap",
|
|
34
|
+
"web"
|
|
35
|
+
],
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"robinpath": {
|
|
38
|
+
"category": "web",
|
|
39
|
+
"type": "utility",
|
|
40
|
+
"auth": "none",
|
|
41
|
+
"functionCount": 9
|
|
42
|
+
}
|
|
13
43
|
}
|
package/dist/index.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { ModuleAdapter } from "@wiredwp/robinpath";
|
|
2
|
-
declare const SoapModule: ModuleAdapter;
|
|
3
|
-
export default SoapModule;
|
|
4
|
-
export { SoapModule };
|
|
5
|
-
export { SoapFunctions, SoapFunctionMetadata, SoapModuleMetadata } from "./soap.js";
|
|
6
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,QAAA,MAAM,UAAU,EAAE,aAAmK,CAAC;AACtL,eAAe,UAAU,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { SoapFunctions, SoapFunctionMetadata, SoapModuleMetadata } from "./soap.js";
|
|
2
|
-
const SoapModule = { name: "soap", functions: SoapFunctions, functionMetadata: SoapFunctionMetadata, moduleMetadata: SoapModuleMetadata, global: false };
|
|
3
|
-
export default SoapModule;
|
|
4
|
-
export { SoapModule };
|
|
5
|
-
export { SoapFunctions, SoapFunctionMetadata, SoapModuleMetadata } from "./soap.js";
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpF,MAAM,UAAU,GAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,oBAA2B,EAAE,cAAc,EAAE,kBAAyB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACtL,eAAe,UAAU,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/soap.d.ts
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import type { BuiltinHandler } from "@wiredwp/robinpath";
|
|
2
|
-
export declare const SoapFunctions: Record<string, BuiltinHandler>;
|
|
3
|
-
export declare const SoapFunctionMetadata: {
|
|
4
|
-
call: {
|
|
5
|
-
description: string;
|
|
6
|
-
parameters: {
|
|
7
|
-
name: string;
|
|
8
|
-
dataType: string;
|
|
9
|
-
description: string;
|
|
10
|
-
formInputType: string;
|
|
11
|
-
required: boolean;
|
|
12
|
-
}[];
|
|
13
|
-
returnType: string;
|
|
14
|
-
returnDescription: string;
|
|
15
|
-
example: string;
|
|
16
|
-
};
|
|
17
|
-
buildEnvelope: {
|
|
18
|
-
description: string;
|
|
19
|
-
parameters: {
|
|
20
|
-
name: string;
|
|
21
|
-
dataType: string;
|
|
22
|
-
description: string;
|
|
23
|
-
formInputType: string;
|
|
24
|
-
required: boolean;
|
|
25
|
-
}[];
|
|
26
|
-
returnType: string;
|
|
27
|
-
returnDescription: string;
|
|
28
|
-
example: string;
|
|
29
|
-
};
|
|
30
|
-
parseEnvelope: {
|
|
31
|
-
description: string;
|
|
32
|
-
parameters: {
|
|
33
|
-
name: string;
|
|
34
|
-
dataType: string;
|
|
35
|
-
description: string;
|
|
36
|
-
formInputType: string;
|
|
37
|
-
required: boolean;
|
|
38
|
-
}[];
|
|
39
|
-
returnType: string;
|
|
40
|
-
returnDescription: string;
|
|
41
|
-
example: string;
|
|
42
|
-
};
|
|
43
|
-
xmlRpc: {
|
|
44
|
-
description: string;
|
|
45
|
-
parameters: {
|
|
46
|
-
name: string;
|
|
47
|
-
dataType: string;
|
|
48
|
-
description: string;
|
|
49
|
-
formInputType: string;
|
|
50
|
-
required: boolean;
|
|
51
|
-
}[];
|
|
52
|
-
returnType: string;
|
|
53
|
-
returnDescription: string;
|
|
54
|
-
example: string;
|
|
55
|
-
};
|
|
56
|
-
buildXmlRpc: {
|
|
57
|
-
description: string;
|
|
58
|
-
parameters: {
|
|
59
|
-
name: string;
|
|
60
|
-
dataType: string;
|
|
61
|
-
description: string;
|
|
62
|
-
formInputType: string;
|
|
63
|
-
required: boolean;
|
|
64
|
-
}[];
|
|
65
|
-
returnType: string;
|
|
66
|
-
returnDescription: string;
|
|
67
|
-
example: string;
|
|
68
|
-
};
|
|
69
|
-
parseXmlRpc: {
|
|
70
|
-
description: string;
|
|
71
|
-
parameters: {
|
|
72
|
-
name: string;
|
|
73
|
-
dataType: string;
|
|
74
|
-
description: string;
|
|
75
|
-
formInputType: string;
|
|
76
|
-
required: boolean;
|
|
77
|
-
}[];
|
|
78
|
-
returnType: string;
|
|
79
|
-
returnDescription: string;
|
|
80
|
-
example: string;
|
|
81
|
-
};
|
|
82
|
-
wsdl: {
|
|
83
|
-
description: string;
|
|
84
|
-
parameters: {
|
|
85
|
-
name: string;
|
|
86
|
-
dataType: string;
|
|
87
|
-
description: string;
|
|
88
|
-
formInputType: string;
|
|
89
|
-
required: boolean;
|
|
90
|
-
}[];
|
|
91
|
-
returnType: string;
|
|
92
|
-
returnDescription: string;
|
|
93
|
-
example: string;
|
|
94
|
-
};
|
|
95
|
-
fault: {
|
|
96
|
-
description: string;
|
|
97
|
-
parameters: {
|
|
98
|
-
name: string;
|
|
99
|
-
dataType: string;
|
|
100
|
-
description: string;
|
|
101
|
-
formInputType: string;
|
|
102
|
-
required: boolean;
|
|
103
|
-
}[];
|
|
104
|
-
returnType: string;
|
|
105
|
-
returnDescription: string;
|
|
106
|
-
example: string;
|
|
107
|
-
};
|
|
108
|
-
getFault: {
|
|
109
|
-
description: string;
|
|
110
|
-
parameters: {
|
|
111
|
-
name: string;
|
|
112
|
-
dataType: string;
|
|
113
|
-
description: string;
|
|
114
|
-
formInputType: string;
|
|
115
|
-
required: boolean;
|
|
116
|
-
}[];
|
|
117
|
-
returnType: string;
|
|
118
|
-
returnDescription: string;
|
|
119
|
-
example: string;
|
|
120
|
-
};
|
|
121
|
-
};
|
|
122
|
-
export declare const SoapModuleMetadata: {
|
|
123
|
-
description: string;
|
|
124
|
-
methods: string[];
|
|
125
|
-
};
|
|
126
|
-
//# sourceMappingURL=soap.d.ts.map
|
package/dist/soap.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"soap.d.ts","sourceRoot":"","sources":["../src/soap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAoC,MAAM,oBAAoB,CAAC;AA6L3F,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAmG,CAAC;AAE7J,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUhC,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;CAG9B,CAAC"}
|
package/dist/soap.js
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
function escapeXml(s) {
|
|
2
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
3
|
-
}
|
|
4
|
-
function jsToXml(value, tag) {
|
|
5
|
-
if (value === null || value === undefined)
|
|
6
|
-
return tag ? `<${tag} xsi:nil="true"/>` : "";
|
|
7
|
-
if (typeof value === "boolean" || typeof value === "number")
|
|
8
|
-
return tag ? `<${tag}>${value}</${tag}>` : String(value);
|
|
9
|
-
if (typeof value === "string")
|
|
10
|
-
return tag ? `<${tag}>${escapeXml(value)}</${tag}>` : escapeXml(value);
|
|
11
|
-
if (Array.isArray(value))
|
|
12
|
-
return value.map((v) => jsToXml(v, tag)).join("");
|
|
13
|
-
if (typeof value === "object") {
|
|
14
|
-
const entries = Object.entries(value);
|
|
15
|
-
const inner = entries.map(([k, v]) => jsToXml(v, k)).join("");
|
|
16
|
-
return tag ? `<${tag}>${inner}</${tag}>` : inner;
|
|
17
|
-
}
|
|
18
|
-
return tag ? `<${tag}>${String(value)}</${tag}>` : String(value);
|
|
19
|
-
}
|
|
20
|
-
function xmlToJs(xml) {
|
|
21
|
-
const trimmed = xml.trim();
|
|
22
|
-
if (!trimmed.startsWith("<"))
|
|
23
|
-
return trimmed;
|
|
24
|
-
const results = {};
|
|
25
|
-
const tagRe = /<([a-zA-Z0-9_:.-]+)([^>]*?)(?:\/>|>([\s\S]*?)<\/\1>)/g;
|
|
26
|
-
let match;
|
|
27
|
-
while ((match = tagRe.exec(trimmed)) !== null) {
|
|
28
|
-
const tag = match[1];
|
|
29
|
-
const attrs = match[2] ?? "";
|
|
30
|
-
if (attrs.includes('xsi:nil="true"')) {
|
|
31
|
-
results[tag] = null;
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
const body = match[3];
|
|
35
|
-
if (body === undefined || body === "") {
|
|
36
|
-
results[tag] = "";
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
const parsed = xmlToJs(body);
|
|
40
|
-
if (results[tag] !== undefined) {
|
|
41
|
-
if (Array.isArray(results[tag]))
|
|
42
|
-
results[tag].push(parsed);
|
|
43
|
-
else
|
|
44
|
-
results[tag] = [results[tag], parsed];
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
results[tag] = parsed;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
if (Object.keys(results).length === 0)
|
|
51
|
-
return trimmed.replace(/<[^>]+>/g, "").trim();
|
|
52
|
-
return results;
|
|
53
|
-
}
|
|
54
|
-
const buildEnvelope = (args) => {
|
|
55
|
-
const method = String(args[0] ?? "");
|
|
56
|
-
const params = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
|
|
57
|
-
const ns = args[2] ? String(args[2]) : undefined;
|
|
58
|
-
const nsAttr = ns ? ` xmlns="${escapeXml(ns)}"` : "";
|
|
59
|
-
const body = jsToXml(params);
|
|
60
|
-
return `<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Header/><soap:Body><${method}${nsAttr}>${body}</${method}></soap:Body></soap:Envelope>`;
|
|
61
|
-
};
|
|
62
|
-
const parseEnvelope = (args) => {
|
|
63
|
-
const xml = String(args[0] ?? "");
|
|
64
|
-
const bodyMatch = xml.match(/<(?:soap:|SOAP-ENV:)?Body[^>]*>([\s\S]*?)<\/(?:soap:|SOAP-ENV:)?Body>/i);
|
|
65
|
-
if (!bodyMatch)
|
|
66
|
-
return { fault: null, result: null };
|
|
67
|
-
const bodyXml = bodyMatch[1];
|
|
68
|
-
const faultMatch = bodyXml.match(/<(?:soap:|SOAP-ENV:)?Fault[^>]*>([\s\S]*?)<\/(?:soap:|SOAP-ENV:)?Fault>/i);
|
|
69
|
-
if (faultMatch) {
|
|
70
|
-
const fault = xmlToJs(faultMatch[1]);
|
|
71
|
-
return { fault, result: null };
|
|
72
|
-
}
|
|
73
|
-
return { fault: null, result: xmlToJs(bodyXml) };
|
|
74
|
-
};
|
|
75
|
-
const call = async (args) => {
|
|
76
|
-
const url = String(args[0] ?? "");
|
|
77
|
-
const method = String(args[1] ?? "");
|
|
78
|
-
const params = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
|
|
79
|
-
const opts = (typeof args[3] === "object" && args[3] !== null ? args[3] : {});
|
|
80
|
-
const ns = opts.namespace ? String(opts.namespace) : undefined;
|
|
81
|
-
const envelope = buildEnvelope([method, params, ns]);
|
|
82
|
-
const headers = { "Content-Type": "text/xml; charset=utf-8" };
|
|
83
|
-
if (opts.soapAction !== undefined)
|
|
84
|
-
headers["SOAPAction"] = String(opts.soapAction);
|
|
85
|
-
else
|
|
86
|
-
headers["SOAPAction"] = ns ? `${ns}/${method}` : method;
|
|
87
|
-
if (opts.headers && typeof opts.headers === "object")
|
|
88
|
-
Object.assign(headers, opts.headers);
|
|
89
|
-
const res = await fetch(url, { method: "POST", headers, body: envelope, signal: opts.timeout ? AbortSignal.timeout(Number(opts.timeout)) : undefined });
|
|
90
|
-
const text = await res.text();
|
|
91
|
-
const parsed = parseEnvelope([text]);
|
|
92
|
-
return { status: res.status, ok: res.ok, ...parsed, raw: text };
|
|
93
|
-
};
|
|
94
|
-
const buildXmlRpc = (args) => {
|
|
95
|
-
const method = String(args[0] ?? "");
|
|
96
|
-
const params = Array.isArray(args[1]) ? args[1] : [];
|
|
97
|
-
function valueToXml(v) {
|
|
98
|
-
if (v === null || v === undefined)
|
|
99
|
-
return "<value><nil/></value>";
|
|
100
|
-
if (typeof v === "boolean")
|
|
101
|
-
return `<value><boolean>${v ? 1 : 0}</boolean></value>`;
|
|
102
|
-
if (typeof v === "number")
|
|
103
|
-
return Number.isInteger(v) ? `<value><int>${v}</int></value>` : `<value><double>${v}</double></value>`;
|
|
104
|
-
if (typeof v === "string")
|
|
105
|
-
return `<value><string>${escapeXml(v)}</string></value>`;
|
|
106
|
-
if (Array.isArray(v))
|
|
107
|
-
return `<value><array><data>${v.map(valueToXml).join("")}</data></array></value>`;
|
|
108
|
-
if (typeof v === "object") {
|
|
109
|
-
const members = Object.entries(v).map(([k, val]) => `<member><name>${escapeXml(k)}</name>${valueToXml(val)}</member>`).join("");
|
|
110
|
-
return `<value><struct>${members}</struct></value>`;
|
|
111
|
-
}
|
|
112
|
-
return `<value><string>${escapeXml(String(v))}</string></value>`;
|
|
113
|
-
}
|
|
114
|
-
const paramXml = params.map((p) => `<param>${valueToXml(p)}</param>`).join("");
|
|
115
|
-
return `<?xml version="1.0"?><methodCall><methodName>${escapeXml(method)}</methodName><params>${paramXml}</params></methodCall>`;
|
|
116
|
-
};
|
|
117
|
-
function parseXmlRpcValue(xml) {
|
|
118
|
-
const trimmed = xml.trim();
|
|
119
|
-
const intM = trimmed.match(/<(?:int|i4)>(.*?)<\/(?:int|i4)>/);
|
|
120
|
-
if (intM)
|
|
121
|
-
return parseInt(intM[1], 10);
|
|
122
|
-
const dblM = trimmed.match(/<double>(.*?)<\/double>/);
|
|
123
|
-
if (dblM)
|
|
124
|
-
return parseFloat(dblM[1]);
|
|
125
|
-
const boolM = trimmed.match(/<boolean>(.*?)<\/boolean>/);
|
|
126
|
-
if (boolM)
|
|
127
|
-
return boolM[1] === "1";
|
|
128
|
-
const strM = trimmed.match(/<string>(.*?)<\/string>/s);
|
|
129
|
-
if (strM)
|
|
130
|
-
return strM[1];
|
|
131
|
-
if (trimmed.includes("<nil"))
|
|
132
|
-
return null;
|
|
133
|
-
const arrM = trimmed.match(/<array>\s*<data>([\s\S]*?)<\/data>\s*<\/array>/);
|
|
134
|
-
if (arrM) {
|
|
135
|
-
const vals = [];
|
|
136
|
-
const valRe = /<value>([\s\S]*?)<\/value>/g;
|
|
137
|
-
let vm;
|
|
138
|
-
while ((vm = valRe.exec(arrM[1])) !== null)
|
|
139
|
-
vals.push(parseXmlRpcValue(vm[1]));
|
|
140
|
-
return vals;
|
|
141
|
-
}
|
|
142
|
-
const structM = trimmed.match(/<struct>([\s\S]*?)<\/struct>/);
|
|
143
|
-
if (structM) {
|
|
144
|
-
const obj = {};
|
|
145
|
-
const memRe = /<member>\s*<name>(.*?)<\/name>\s*<value>([\s\S]*?)<\/value>\s*<\/member>/g;
|
|
146
|
-
let mm;
|
|
147
|
-
while ((mm = memRe.exec(structM[1])) !== null)
|
|
148
|
-
obj[mm[1]] = parseXmlRpcValue(mm[2]);
|
|
149
|
-
return obj;
|
|
150
|
-
}
|
|
151
|
-
return trimmed.replace(/<[^>]+>/g, "").trim();
|
|
152
|
-
}
|
|
153
|
-
const parseXmlRpc = (args) => {
|
|
154
|
-
const xml = String(args[0] ?? "");
|
|
155
|
-
const faultM = xml.match(/<fault>\s*<value>([\s\S]*?)<\/value>\s*<\/fault>/);
|
|
156
|
-
if (faultM)
|
|
157
|
-
return { fault: parseXmlRpcValue(faultM[1]), params: null };
|
|
158
|
-
const params = [];
|
|
159
|
-
const paramRe = /<param>\s*<value>([\s\S]*?)<\/value>\s*<\/param>/g;
|
|
160
|
-
let pm;
|
|
161
|
-
while ((pm = paramRe.exec(xml)) !== null)
|
|
162
|
-
params.push(parseXmlRpcValue(pm[1]));
|
|
163
|
-
return { fault: null, params };
|
|
164
|
-
};
|
|
165
|
-
const xmlRpc = async (args) => {
|
|
166
|
-
const url = String(args[0] ?? "");
|
|
167
|
-
const method = String(args[1] ?? "");
|
|
168
|
-
const params = Array.isArray(args[2]) ? args[2] : [];
|
|
169
|
-
const opts = (typeof args[3] === "object" && args[3] !== null ? args[3] : {});
|
|
170
|
-
const body = buildXmlRpc([method, params]);
|
|
171
|
-
const headers = { "Content-Type": "text/xml; charset=utf-8" };
|
|
172
|
-
if (opts.headers && typeof opts.headers === "object")
|
|
173
|
-
Object.assign(headers, opts.headers);
|
|
174
|
-
const res = await fetch(url, { method: "POST", headers, body, signal: opts.timeout ? AbortSignal.timeout(Number(opts.timeout)) : undefined });
|
|
175
|
-
const text = await res.text();
|
|
176
|
-
const parsed = parseXmlRpc([text]);
|
|
177
|
-
return { status: res.status, ok: res.ok, ...parsed, raw: text };
|
|
178
|
-
};
|
|
179
|
-
const wsdl = async (args) => {
|
|
180
|
-
const url = String(args[0] ?? "");
|
|
181
|
-
const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
|
|
182
|
-
const res = await fetch(url, { signal: opts.timeout ? AbortSignal.timeout(Number(opts.timeout)) : undefined });
|
|
183
|
-
const text = await res.text();
|
|
184
|
-
const services = [];
|
|
185
|
-
const svcRe = /<wsdl:service[^>]*name="([^"]+)"/g;
|
|
186
|
-
let sm;
|
|
187
|
-
while ((sm = svcRe.exec(text)) !== null)
|
|
188
|
-
services.push(sm[1]);
|
|
189
|
-
const operations = [];
|
|
190
|
-
const opRe = /<wsdl:operation[^>]*name="([^"]+)"/g;
|
|
191
|
-
let om;
|
|
192
|
-
while ((om = opRe.exec(text)) !== null)
|
|
193
|
-
if (!operations.includes(om[1]))
|
|
194
|
-
operations.push(om[1]);
|
|
195
|
-
const bindings = [];
|
|
196
|
-
const bRe = /<wsdl:binding[^>]*name="([^"]+)"/g;
|
|
197
|
-
let bm;
|
|
198
|
-
while ((bm = bRe.exec(text)) !== null)
|
|
199
|
-
bindings.push(bm[1]);
|
|
200
|
-
return { services, operations, bindings, raw: text };
|
|
201
|
-
};
|
|
202
|
-
const fault = (args) => {
|
|
203
|
-
const code = String(args[0] ?? "Server");
|
|
204
|
-
const message = String(args[1] ?? "Internal Error");
|
|
205
|
-
const detail = args[2] ? String(args[2]) : undefined;
|
|
206
|
-
return `<soap:Fault><faultcode>${escapeXml(code)}</faultcode><faultstring>${escapeXml(message)}</faultstring>${detail ? `<detail>${escapeXml(detail)}</detail>` : ""}</soap:Fault>`;
|
|
207
|
-
};
|
|
208
|
-
const getFault = (args) => {
|
|
209
|
-
const xml = String(args[0] ?? "");
|
|
210
|
-
const faultM = xml.match(/<(?:soap:|SOAP-ENV:)?Fault[^>]*>([\s\S]*?)<\/(?:soap:|SOAP-ENV:)?Fault>/i);
|
|
211
|
-
if (!faultM)
|
|
212
|
-
return null;
|
|
213
|
-
const code = faultM[1].match(/<faultcode[^>]*>(.*?)<\/faultcode>/i)?.[1] ?? null;
|
|
214
|
-
const message = faultM[1].match(/<faultstring[^>]*>(.*?)<\/faultstring>/i)?.[1] ?? null;
|
|
215
|
-
const detail = faultM[1].match(/<detail[^>]*>([\s\S]*?)<\/detail>/i)?.[1] ?? null;
|
|
216
|
-
return { code, message, detail };
|
|
217
|
-
};
|
|
218
|
-
export const SoapFunctions = { call, buildEnvelope, parseEnvelope, xmlRpc, buildXmlRpc, parseXmlRpc, wsdl, fault, getFault };
|
|
219
|
-
export const SoapFunctionMetadata = {
|
|
220
|
-
call: { description: "Call a SOAP web service", parameters: [{ name: "url", dataType: "string", description: "Service URL", formInputType: "text", required: true }, { name: "method", dataType: "string", description: "Method name", formInputType: "text", required: true }, { name: "params", dataType: "object", description: "Parameters", formInputType: "text", required: false }, { name: "options", dataType: "object", description: "{namespace, soapAction, headers, timeout}", formInputType: "text", required: false }], returnType: "object", returnDescription: "{status, ok, fault, result, raw}", example: 'soap.call "http://example.com/ws" "GetUser" {"id": 1} {"namespace": "http://example.com"}' },
|
|
221
|
-
buildEnvelope: { description: "Build SOAP XML envelope", parameters: [{ name: "method", dataType: "string", description: "Method name", formInputType: "text", required: true }, { name: "params", dataType: "object", description: "Parameters", formInputType: "text", required: false }, { name: "namespace", dataType: "string", description: "XML namespace", formInputType: "text", required: false }], returnType: "string", returnDescription: "SOAP XML", example: 'soap.buildEnvelope "GetUser" {"id": 1}' },
|
|
222
|
-
parseEnvelope: { description: "Parse SOAP XML response", parameters: [{ name: "xml", dataType: "string", description: "SOAP XML", formInputType: "text", required: true }], returnType: "object", returnDescription: "{fault, result}", example: 'soap.parseEnvelope $xml' },
|
|
223
|
-
xmlRpc: { description: "Call XML-RPC service", parameters: [{ name: "url", dataType: "string", description: "Service URL", formInputType: "text", required: true }, { name: "method", dataType: "string", description: "Method name", formInputType: "text", required: true }, { name: "params", dataType: "array", description: "Parameters array", formInputType: "text", required: false }, { name: "options", dataType: "object", description: "{headers, timeout}", formInputType: "text", required: false }], returnType: "object", returnDescription: "{status, ok, fault, params, raw}", example: 'soap.xmlRpc "http://example.com/rpc" "system.listMethods" []' },
|
|
224
|
-
buildXmlRpc: { description: "Build XML-RPC request", parameters: [{ name: "method", dataType: "string", description: "Method name", formInputType: "text", required: true }, { name: "params", dataType: "array", description: "Parameters", formInputType: "text", required: false }], returnType: "string", returnDescription: "XML-RPC XML", example: 'soap.buildXmlRpc "getUser" [1, "admin"]' },
|
|
225
|
-
parseXmlRpc: { description: "Parse XML-RPC response", parameters: [{ name: "xml", dataType: "string", description: "XML-RPC XML", formInputType: "text", required: true }], returnType: "object", returnDescription: "{fault, params}", example: 'soap.parseXmlRpc $xml' },
|
|
226
|
-
wsdl: { description: "Fetch and parse WSDL", parameters: [{ name: "url", dataType: "string", description: "WSDL URL", formInputType: "text", required: true }, { name: "options", dataType: "object", description: "{timeout}", formInputType: "text", required: false }], returnType: "object", returnDescription: "{services, operations, bindings, raw}", example: 'soap.wsdl "http://example.com/ws?wsdl"' },
|
|
227
|
-
fault: { description: "Create SOAP fault XML", parameters: [{ name: "code", dataType: "string", description: "Fault code", formInputType: "text", required: true }, { name: "message", dataType: "string", description: "Fault message", formInputType: "text", required: true }, { name: "detail", dataType: "string", description: "Detail", formInputType: "text", required: false }], returnType: "string", returnDescription: "Fault XML", example: 'soap.fault "Client" "Invalid request"' },
|
|
228
|
-
getFault: { description: "Extract fault from SOAP XML", parameters: [{ name: "xml", dataType: "string", description: "SOAP XML", formInputType: "text", required: true }], returnType: "object", returnDescription: "{code, message, detail} or null", example: 'soap.getFault $xml' },
|
|
229
|
-
};
|
|
230
|
-
export const SoapModuleMetadata = {
|
|
231
|
-
description: "SOAP web service client, XML-RPC support, WSDL parsing, and envelope building",
|
|
232
|
-
methods: ["call", "buildEnvelope", "parseEnvelope", "xmlRpc", "buildXmlRpc", "parseXmlRpc", "wsdl", "fault", "getFault"],
|
|
233
|
-
};
|
|
234
|
-
//# sourceMappingURL=soap.js.map
|
package/dist/soap.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"soap.js","sourceRoot":"","sources":["../src/soap.ts"],"names":[],"mappings":"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"}
|