hostinger-api-mcp 0.2.1 → 0.2.2
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/.env.example +1 -1
- package/README.md +9 -8
- package/package.json +1 -1
- package/src/core/oauth.js +15 -1
- package/src/core/oauth.ts +13 -1
- package/src/core/runtime.js +18 -17
- package/src/core/runtime.ts +18 -17
- package/src/core/tools/all.js +8 -0
- package/src/core/tools/all.ts +8 -0
- package/src/core/tools/reach.js +8 -0
- package/src/core/tools/reach.ts +8 -0
- package/src/servers/all.js +1 -1
- package/src/servers/all.ts +1 -1
- package/src/servers/billing.js +1 -1
- package/src/servers/billing.ts +1 -1
- package/src/servers/dns.js +1 -1
- package/src/servers/dns.ts +1 -1
- package/src/servers/domains.js +1 -1
- package/src/servers/domains.ts +1 -1
- package/src/servers/hosting.js +1 -1
- package/src/servers/hosting.ts +1 -1
- package/src/servers/reach.js +1 -1
- package/src/servers/reach.ts +1 -1
- package/src/servers/vps.js +1 -1
- package/src/servers/vps.ts +1 -1
- package/types.d.ts +8 -0
package/.env.example
CHANGED
|
@@ -4,7 +4,7 @@ TRANSPORT=stdio # Fixed to stdio
|
|
|
4
4
|
# Debug
|
|
5
5
|
DEBUG=false
|
|
6
6
|
|
|
7
|
-
# OAuth Configuration (used when
|
|
7
|
+
# OAuth Configuration (used when HOSTINGER_API_TOKEN is not set — stdio mode only)
|
|
8
8
|
# Uncomment to override the default OAuth issuer:
|
|
9
9
|
# OAUTH_ISSUER=https://auth.hostinger.com
|
|
10
10
|
|
package/README.md
CHANGED
|
@@ -63,8 +63,9 @@ Pick the binary that matches your agent's scope. `hostinger-api-mcp` remains the
|
|
|
63
63
|
|
|
64
64
|
The following environment variables can be configured when running the server:
|
|
65
65
|
- `DEBUG`: Enable debug logging (true/false) (default: false)
|
|
66
|
-
- `
|
|
67
|
-
- `
|
|
66
|
+
- `HOSTINGER_API_TOKEN`: Your API token, which will be sent in the `Authorization` header. When set, OAuth is bypassed entirely.
|
|
67
|
+
- `API_TOKEN`: Deprecated alias for `HOSTINGER_API_TOKEN`. Will be removed in a future version — prefer `HOSTINGER_API_TOKEN`.
|
|
68
|
+
- `OAUTH_ISSUER`: OAuth server base URL (default: `https://auth.hostinger.com`). Only used when `HOSTINGER_API_TOKEN` is not set.
|
|
68
69
|
|
|
69
70
|
## Authentication
|
|
70
71
|
|
|
@@ -72,11 +73,11 @@ The server supports two authentication methods:
|
|
|
72
73
|
|
|
73
74
|
### API Token (recommended for CI/scripts)
|
|
74
75
|
|
|
75
|
-
Set `
|
|
76
|
+
Set `HOSTINGER_API_TOKEN` in the environment or `.env` file. When present it always takes precedence — no OAuth code runs.
|
|
76
77
|
|
|
77
78
|
### OAuth 2.0 with PKCE (interactive sign-in)
|
|
78
79
|
|
|
79
|
-
When `
|
|
80
|
+
When `HOSTINGER_API_TOKEN` is not set and the server runs in stdio mode, OAuth 2.0 with PKCE is used automatically on the first authenticated tool call:
|
|
80
81
|
|
|
81
82
|
1. A dynamic OAuth client is registered with the issuer (RFC 7591) — once per machine.
|
|
82
83
|
2. A browser window opens to the authorization page.
|
|
@@ -99,7 +100,7 @@ hostinger-api-mcp --login
|
|
|
99
100
|
hostinger-api-mcp --logout
|
|
100
101
|
```
|
|
101
102
|
|
|
102
|
-
**HTTP transport note:** OAuth sign-in is not supported in `--http` mode. Set `
|
|
103
|
+
**HTTP transport note:** OAuth sign-in is not supported in `--http` mode. Set `HOSTINGER_API_TOKEN` before using `--http`.
|
|
103
104
|
|
|
104
105
|
## Usage
|
|
105
106
|
|
|
@@ -112,7 +113,7 @@ hostinger-api-mcp --logout
|
|
|
112
113
|
"command": "hostinger-api-mcp",
|
|
113
114
|
"env": {
|
|
114
115
|
"DEBUG": "false",
|
|
115
|
-
"
|
|
116
|
+
"HOSTINGER_API_TOKEN": "YOUR API TOKEN"
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
}
|
|
@@ -143,7 +144,7 @@ hostinger-api-mcp --http --host 0.0.0.0 --port 8150
|
|
|
143
144
|
|
|
144
145
|
```
|
|
145
146
|
Options:
|
|
146
|
-
--http Use HTTP streaming transport (requires
|
|
147
|
+
--http Use HTTP streaming transport (requires HOSTINGER_API_TOKEN env var)
|
|
147
148
|
--stdio Use Server-Sent Events transport (default)
|
|
148
149
|
--host {host} Hostname or IP address to listen on (default: 127.0.0.1)
|
|
149
150
|
--port {port} Port to bind to (default: 8100)
|
|
@@ -166,7 +167,7 @@ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/
|
|
|
166
167
|
const transport = new StreamableHTTPClientTransport({
|
|
167
168
|
url: "http://localhost:8100/",
|
|
168
169
|
headers: {
|
|
169
|
-
"Authorization": `Bearer ${process.env.
|
|
170
|
+
"Authorization": `Bearer ${process.env.HOSTINGER_API_TOKEN}`
|
|
170
171
|
}
|
|
171
172
|
});
|
|
172
173
|
|
package/package.json
CHANGED
package/src/core/oauth.js
CHANGED
|
@@ -41,6 +41,20 @@ export class OAuthRefreshError extends Error {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Resolve the bearer token from the environment. HOSTINGER_API_TOKEN is the
|
|
46
|
+
* preferred name; API_TOKEN and APITOKEN are kept as backwards-compatible
|
|
47
|
+
* aliases (API_TOKEN is deprecated and will be removed in a future version).
|
|
48
|
+
* Empty values fall through, matching the previous `||` behavior.
|
|
49
|
+
*/
|
|
50
|
+
export function getEnvToken() {
|
|
51
|
+
return (
|
|
52
|
+
process.env["HOSTINGER_API_TOKEN"] ||
|
|
53
|
+
process.env["API_TOKEN"] ||
|
|
54
|
+
process.env["APITOKEN"]
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
44
58
|
export class OAuthProvider {
|
|
45
59
|
constructor(issuerBaseUrl) {
|
|
46
60
|
this.issuer = (
|
|
@@ -52,7 +66,7 @@ export class OAuthProvider {
|
|
|
52
66
|
}
|
|
53
67
|
|
|
54
68
|
async getAccessToken() {
|
|
55
|
-
const envToken =
|
|
69
|
+
const envToken = getEnvToken();
|
|
56
70
|
if (envToken) {
|
|
57
71
|
return envToken;
|
|
58
72
|
}
|
package/src/core/oauth.ts
CHANGED
|
@@ -56,6 +56,18 @@ export class OAuthRefreshError extends Error {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Resolve the bearer token from the environment. HOSTINGER_API_TOKEN is the
|
|
61
|
+
* preferred name; API_TOKEN and APITOKEN are kept as backwards-compatible
|
|
62
|
+
* aliases (API_TOKEN is deprecated and will be removed in a future version).
|
|
63
|
+
* Empty values fall through, matching the previous `||` behavior.
|
|
64
|
+
*/
|
|
65
|
+
export function getEnvToken(): string | undefined {
|
|
66
|
+
return process.env['HOSTINGER_API_TOKEN']
|
|
67
|
+
|| process.env['API_TOKEN']
|
|
68
|
+
|| process.env['APITOKEN'];
|
|
69
|
+
}
|
|
70
|
+
|
|
59
71
|
export class OAuthProvider {
|
|
60
72
|
private readonly issuer: string;
|
|
61
73
|
private _loginInProgress: Promise<string> | null = null;
|
|
@@ -65,7 +77,7 @@ export class OAuthProvider {
|
|
|
65
77
|
}
|
|
66
78
|
|
|
67
79
|
async getAccessToken(): Promise<string> {
|
|
68
|
-
const envToken =
|
|
80
|
+
const envToken = getEnvToken();
|
|
69
81
|
if (envToken) {
|
|
70
82
|
return envToken;
|
|
71
83
|
}
|
package/src/core/runtime.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
ListToolsRequestSchema,
|
|
12
12
|
CallToolRequestSchema,
|
|
13
13
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
14
|
-
import { OAuthProvider } from "./oauth.js";
|
|
14
|
+
import { OAuthProvider, getEnvToken } from "./oauth.js";
|
|
15
15
|
import * as tus from "tus-js-client";
|
|
16
16
|
import fs from "fs";
|
|
17
17
|
import path from "path";
|
|
@@ -29,7 +29,7 @@ const SECURITY_SCHEMES = {
|
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* MCP Server for Hostinger API
|
|
32
|
-
* Generated from OpenAPI spec version 0.
|
|
32
|
+
* Generated from OpenAPI spec version 0.12.0
|
|
33
33
|
*/
|
|
34
34
|
class MCPServer {
|
|
35
35
|
constructor({ name, version, tools }) {
|
|
@@ -86,8 +86,8 @@ class MCPServer {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
|
-
* Resolve a bearer token. API_TOKEN env
|
|
90
|
-
* OAuth provider handles login/refresh transparently.
|
|
89
|
+
* Resolve a bearer token. HOSTINGER_API_TOKEN / API_TOKEN env vars take
|
|
90
|
+
* precedence; otherwise the OAuth provider handles login/refresh transparently.
|
|
91
91
|
*/
|
|
92
92
|
async getAuthToken() {
|
|
93
93
|
return await this.oauth.getAccessToken();
|
|
@@ -1893,7 +1893,7 @@ class MCPServer {
|
|
|
1893
1893
|
}
|
|
1894
1894
|
};
|
|
1895
1895
|
|
|
1896
|
-
const envToken =
|
|
1896
|
+
const envToken = getEnvToken();
|
|
1897
1897
|
let bearerToken = await this.getAuthToken();
|
|
1898
1898
|
config.headers['Authorization'] = `Bearer ${bearerToken}`;
|
|
1899
1899
|
|
|
@@ -2075,17 +2075,18 @@ export async function startServer({ name, version, tools }) {
|
|
|
2075
2075
|
${name}
|
|
2076
2076
|
Usage: ${name} [options]
|
|
2077
2077
|
Options:
|
|
2078
|
-
--http
|
|
2079
|
-
--stdio
|
|
2080
|
-
--host <host>
|
|
2081
|
-
--port <port>
|
|
2082
|
-
--login
|
|
2083
|
-
--logout
|
|
2084
|
-
--help
|
|
2078
|
+
--http Use HTTP streaming transport (requires HOSTINGER_API_TOKEN env var)
|
|
2079
|
+
--stdio Use standard input/output transport (default)
|
|
2080
|
+
--host <host> Host to bind to (default: 127.0.0.1)
|
|
2081
|
+
--port <port> Port to bind to (default: 8100)
|
|
2082
|
+
--login Run OAuth sign-in flow and exit
|
|
2083
|
+
--logout Revoke stored OAuth credentials and exit
|
|
2084
|
+
--help Show this help message
|
|
2085
2085
|
Environment Variables:
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2086
|
+
HOSTINGER_API_TOKEN Hostinger API token (overrides OAuth when set)
|
|
2087
|
+
API_TOKEN Deprecated alias for HOSTINGER_API_TOKEN (will be removed in a future version)
|
|
2088
|
+
OAUTH_ISSUER OAuth server base URL (default: https://auth.hostinger.com)
|
|
2089
|
+
DEBUG Enable debug logging (true/false)
|
|
2089
2090
|
`);
|
|
2090
2091
|
process.exit(0);
|
|
2091
2092
|
}
|
|
@@ -2106,9 +2107,9 @@ export async function startServer({ name, version, tools }) {
|
|
|
2106
2107
|
}
|
|
2107
2108
|
|
|
2108
2109
|
if (argv.http) {
|
|
2109
|
-
const envToken =
|
|
2110
|
+
const envToken = getEnvToken();
|
|
2110
2111
|
if (!envToken) {
|
|
2111
|
-
console.error('[Error] HTTP transport requires the
|
|
2112
|
+
console.error('[Error] HTTP transport requires the HOSTINGER_API_TOKEN environment variable. OAuth sign-in is only supported in stdio mode.');
|
|
2112
2113
|
process.exit(1);
|
|
2113
2114
|
}
|
|
2114
2115
|
}
|
package/src/core/runtime.ts
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
CallToolRequestSchema,
|
|
13
13
|
Tool,
|
|
14
14
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
15
|
-
import { OAuthProvider } from "./oauth.js";
|
|
15
|
+
import { OAuthProvider, getEnvToken } from "./oauth.js";
|
|
16
16
|
import axios,{ AxiosRequestConfig, AxiosError, AxiosResponse } from "axios";
|
|
17
17
|
import * as tus from "tus-js-client";
|
|
18
18
|
import fs from "fs";
|
|
@@ -47,7 +47,7 @@ const SECURITY_SCHEMES: Record<string, SecurityScheme> = {
|
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* MCP Server for Hostinger API
|
|
50
|
-
* Generated from OpenAPI spec version 0.
|
|
50
|
+
* Generated from OpenAPI spec version 0.12.0
|
|
51
51
|
*/
|
|
52
52
|
class MCPServer {
|
|
53
53
|
private readonly name: string;
|
|
@@ -112,8 +112,8 @@ class MCPServer {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
/**
|
|
115
|
-
* Resolve a bearer token. API_TOKEN env
|
|
116
|
-
* OAuth provider handles login/refresh transparently.
|
|
115
|
+
* Resolve a bearer token. HOSTINGER_API_TOKEN / API_TOKEN env vars take
|
|
116
|
+
* precedence; otherwise the OAuth provider handles login/refresh transparently.
|
|
117
117
|
*/
|
|
118
118
|
private async getAuthToken(): Promise<string> {
|
|
119
119
|
return await this.oauth.getAccessToken();
|
|
@@ -1924,7 +1924,7 @@ class MCPServer {
|
|
|
1924
1924
|
}
|
|
1925
1925
|
};
|
|
1926
1926
|
|
|
1927
|
-
const envToken =
|
|
1927
|
+
const envToken = getEnvToken();
|
|
1928
1928
|
let bearerToken = await this.getAuthToken();
|
|
1929
1929
|
if (config.headers) {
|
|
1930
1930
|
config.headers['Authorization'] = `Bearer ${bearerToken}`;
|
|
@@ -2112,17 +2112,18 @@ export async function startServer({ name, version, tools }: { name: string; vers
|
|
|
2112
2112
|
${name}
|
|
2113
2113
|
Usage: ${name} [options]
|
|
2114
2114
|
Options:
|
|
2115
|
-
--http
|
|
2116
|
-
--stdio
|
|
2117
|
-
--host <host>
|
|
2118
|
-
--port <port>
|
|
2119
|
-
--login
|
|
2120
|
-
--logout
|
|
2121
|
-
--help
|
|
2115
|
+
--http Use HTTP streaming transport (requires HOSTINGER_API_TOKEN env var)
|
|
2116
|
+
--stdio Use standard input/output transport (default)
|
|
2117
|
+
--host <host> Host to bind to (default: 127.0.0.1)
|
|
2118
|
+
--port <port> Port to bind to (default: 8100)
|
|
2119
|
+
--login Run OAuth sign-in flow and exit
|
|
2120
|
+
--logout Revoke stored OAuth credentials and exit
|
|
2121
|
+
--help Show this help message
|
|
2122
2122
|
Environment Variables:
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2123
|
+
HOSTINGER_API_TOKEN Hostinger API token (overrides OAuth when set)
|
|
2124
|
+
API_TOKEN Deprecated alias for HOSTINGER_API_TOKEN (will be removed in a future version)
|
|
2125
|
+
OAUTH_ISSUER OAuth server base URL (default: https://auth.hostinger.com)
|
|
2126
|
+
DEBUG Enable debug logging (true/false)
|
|
2126
2127
|
`);
|
|
2127
2128
|
process.exit(0);
|
|
2128
2129
|
}
|
|
@@ -2143,9 +2144,9 @@ export async function startServer({ name, version, tools }: { name: string; vers
|
|
|
2143
2144
|
}
|
|
2144
2145
|
|
|
2145
2146
|
if (argv.http) {
|
|
2146
|
-
const envToken =
|
|
2147
|
+
const envToken = getEnvToken();
|
|
2147
2148
|
if (!envToken) {
|
|
2148
|
-
console.error('[Error] HTTP transport requires the
|
|
2149
|
+
console.error('[Error] HTTP transport requires the HOSTINGER_API_TOKEN environment variable. OAuth sign-in is only supported in stdio mode.');
|
|
2149
2150
|
process.exit(1);
|
|
2150
2151
|
}
|
|
2151
2152
|
}
|
package/src/core/tools/all.js
CHANGED
|
@@ -1570,6 +1570,10 @@ export default [
|
|
|
1570
1570
|
"type": "string",
|
|
1571
1571
|
"description": "surname parameter"
|
|
1572
1572
|
},
|
|
1573
|
+
"phone": {
|
|
1574
|
+
"type": "string",
|
|
1575
|
+
"description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)"
|
|
1576
|
+
},
|
|
1573
1577
|
"note": {
|
|
1574
1578
|
"type": "string",
|
|
1575
1579
|
"description": "note parameter"
|
|
@@ -1787,6 +1791,10 @@ export default [
|
|
|
1787
1791
|
"type": "string",
|
|
1788
1792
|
"description": "surname parameter"
|
|
1789
1793
|
},
|
|
1794
|
+
"phone": {
|
|
1795
|
+
"type": "string",
|
|
1796
|
+
"description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)"
|
|
1797
|
+
},
|
|
1790
1798
|
"note": {
|
|
1791
1799
|
"type": "string",
|
|
1792
1800
|
"description": "note parameter"
|
package/src/core/tools/all.ts
CHANGED
|
@@ -1580,6 +1580,10 @@ const tools: OpenApiTool[] = [
|
|
|
1580
1580
|
"type": "string",
|
|
1581
1581
|
"description": "surname parameter"
|
|
1582
1582
|
},
|
|
1583
|
+
"phone": {
|
|
1584
|
+
"type": "string",
|
|
1585
|
+
"description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)"
|
|
1586
|
+
},
|
|
1583
1587
|
"note": {
|
|
1584
1588
|
"type": "string",
|
|
1585
1589
|
"description": "note parameter"
|
|
@@ -1797,6 +1801,10 @@ const tools: OpenApiTool[] = [
|
|
|
1797
1801
|
"type": "string",
|
|
1798
1802
|
"description": "surname parameter"
|
|
1799
1803
|
},
|
|
1804
|
+
"phone": {
|
|
1805
|
+
"type": "string",
|
|
1806
|
+
"description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)"
|
|
1807
|
+
},
|
|
1800
1808
|
"note": {
|
|
1801
1809
|
"type": "string",
|
|
1802
1810
|
"description": "note parameter"
|
package/src/core/tools/reach.js
CHANGED
|
@@ -95,6 +95,10 @@ export default [
|
|
|
95
95
|
"type": "string",
|
|
96
96
|
"description": "surname parameter"
|
|
97
97
|
},
|
|
98
|
+
"phone": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)"
|
|
101
|
+
},
|
|
98
102
|
"note": {
|
|
99
103
|
"type": "string",
|
|
100
104
|
"description": "note parameter"
|
|
@@ -312,6 +316,10 @@ export default [
|
|
|
312
316
|
"type": "string",
|
|
313
317
|
"description": "surname parameter"
|
|
314
318
|
},
|
|
319
|
+
"phone": {
|
|
320
|
+
"type": "string",
|
|
321
|
+
"description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)"
|
|
322
|
+
},
|
|
315
323
|
"note": {
|
|
316
324
|
"type": "string",
|
|
317
325
|
"description": "note parameter"
|
package/src/core/tools/reach.ts
CHANGED
|
@@ -105,6 +105,10 @@ const tools: OpenApiTool[] = [
|
|
|
105
105
|
"type": "string",
|
|
106
106
|
"description": "surname parameter"
|
|
107
107
|
},
|
|
108
|
+
"phone": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)"
|
|
111
|
+
},
|
|
108
112
|
"note": {
|
|
109
113
|
"type": "string",
|
|
110
114
|
"description": "note parameter"
|
|
@@ -322,6 +326,10 @@ const tools: OpenApiTool[] = [
|
|
|
322
326
|
"type": "string",
|
|
323
327
|
"description": "surname parameter"
|
|
324
328
|
},
|
|
329
|
+
"phone": {
|
|
330
|
+
"type": "string",
|
|
331
|
+
"description": "Phone number in E.164 format (leading \"+\" then 7-15 digits)"
|
|
332
|
+
},
|
|
325
333
|
"note": {
|
|
326
334
|
"type": "string",
|
|
327
335
|
"description": "note parameter"
|
package/src/servers/all.js
CHANGED
package/src/servers/all.ts
CHANGED
package/src/servers/billing.js
CHANGED
package/src/servers/billing.ts
CHANGED
package/src/servers/dns.js
CHANGED
package/src/servers/dns.ts
CHANGED
package/src/servers/domains.js
CHANGED
package/src/servers/domains.ts
CHANGED
package/src/servers/hosting.js
CHANGED
package/src/servers/hosting.ts
CHANGED
package/src/servers/reach.js
CHANGED
package/src/servers/reach.ts
CHANGED
package/src/servers/vps.js
CHANGED
package/src/servers/vps.ts
CHANGED
package/types.d.ts
CHANGED
|
@@ -1019,6 +1019,10 @@ the contact will be created with a pending status and a confirmation email will
|
|
|
1019
1019
|
* surname parameter
|
|
1020
1020
|
*/
|
|
1021
1021
|
surname?: string;
|
|
1022
|
+
/**
|
|
1023
|
+
* Phone number in E.164 format (leading "+" then 7-15 digits)
|
|
1024
|
+
*/
|
|
1025
|
+
phone?: string;
|
|
1022
1026
|
/**
|
|
1023
1027
|
* note parameter
|
|
1024
1028
|
*/
|
|
@@ -1129,6 +1133,10 @@ and a confirmation email will be sent.
|
|
|
1129
1133
|
* surname parameter
|
|
1130
1134
|
*/
|
|
1131
1135
|
surname?: string;
|
|
1136
|
+
/**
|
|
1137
|
+
* Phone number in E.164 format (leading "+" then 7-15 digits)
|
|
1138
|
+
*/
|
|
1139
|
+
phone?: string;
|
|
1132
1140
|
/**
|
|
1133
1141
|
* note parameter
|
|
1134
1142
|
*/
|