CabLate commited on
Commit
5bd9932
·
0 Parent(s):

first version

Browse files
.gitignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ dist/
2
+ node_modules/
3
+ credentials.json
4
+ .env
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2025 CabLate
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
README.md ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MCP Google Map Server
2
+
3
+ A powerful Model Context Protocol (MCP) server providing comprehensive Google Maps API integration with LLM processing capabilities.
4
+
5
+ ## Features
6
+
7
+ ### Google Maps Features
8
+
9
+ - Location search and information retrieval
10
+ - Geocoding and reverse geocoding
11
+ - Detailed place information
12
+
13
+ ## Installation
14
+
15
+ ### Via NPM
16
+
17
+ ```bash
18
+ npm install -g @cablate/mcp-google-map
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ### Command Line
24
+
25
+ ```bash
26
+ mcp-google-map
27
+ ```
28
+
29
+ ### Integration with [Dive Desktop](https://github.com/OpenAgentPlatform/Dive)
30
+
31
+ 1. Click "+ Add MCP Server" in Dive Desktop
32
+ 2. Copy and paste the following configuration:
33
+
34
+ ```json
35
+ {
36
+ "mcpServers": {
37
+ "google-map": {
38
+ "command": "npx",
39
+ "args": ["-y", "@cablate/mcp-google-map"],
40
+ "env": {
41
+ "GOOGLE_MAPS_API_KEY": "your_api_key"
42
+ },
43
+ "enabled": true
44
+ }
45
+ }
46
+ }
47
+ ```
48
+
49
+ 3. Click "Save" to complete the installation
50
+
51
+ ## Google Maps API Setup
52
+
53
+ To use this service, you need to:
54
+
55
+ 1. Create a project in [Google Cloud Console](https://console.cloud.google.com/)
56
+ 2. Enable Google Maps API services
57
+ 3. Obtain an API key
58
+ 4. Set the `GOOGLE_MAPS_API_KEY` environment variable
59
+
60
+ ## Tech Stack
61
+
62
+ - TypeScript
63
+ - Node.js
64
+ - Google Maps Services JS
65
+ - Model Context Protocol SDK
66
+
67
+ ## License
68
+
69
+ MIT
70
+
71
+ ## Contributing
72
+
73
+ Community participation and contributions are welcome! Here's how you can contribute:
74
+
75
+ - ⭐️ Star the project if you find it helpful
76
+ - 🐛 Submit Issues: Report bugs or provide suggestions
77
+ - 🔧 Create Pull Requests: Submit code improvements
78
+
79
+ ## Contact
80
+
81
+ If you have any questions or suggestions, feel free to reach out:
82
+
83
+ - 📧 Email: [[email protected]](mailto:[email protected])
84
+ - 📧 GitHub: [CabLate](https://github.com/cablate/)
85
+ - 🤝 Collaboration: Welcome to discuss project cooperation
86
+ - 📚 Technical Guidance: Sincere welcome for suggestions and guidance
package-lock.json ADDED
@@ -0,0 +1,2232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "mcp-maps-server",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 2,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "mcp-maps-server",
9
+ "version": "1.0.0",
10
+ "dependencies": {
11
+ "@googlemaps/google-maps-services-js": "^3.3.42",
12
+ "@modelcontextprotocol/sdk": "^1.5.0",
13
+ "dotenv": "^16.4.1",
14
+ "esbuild": "^0.25.0",
15
+ "shx": "^0.3.4"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^20.11.16",
19
+ "tsc-watch": "^6.0.4",
20
+ "typescript": "^5.3.3"
21
+ }
22
+ },
23
+ "node_modules/@esbuild/aix-ppc64": {
24
+ "version": "0.25.0",
25
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
26
+ "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==",
27
+ "cpu": [
28
+ "ppc64"
29
+ ],
30
+ "optional": true,
31
+ "os": [
32
+ "aix"
33
+ ],
34
+ "engines": {
35
+ "node": ">=18"
36
+ }
37
+ },
38
+ "node_modules/@esbuild/android-arm": {
39
+ "version": "0.25.0",
40
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz",
41
+ "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==",
42
+ "cpu": [
43
+ "arm"
44
+ ],
45
+ "optional": true,
46
+ "os": [
47
+ "android"
48
+ ],
49
+ "engines": {
50
+ "node": ">=18"
51
+ }
52
+ },
53
+ "node_modules/@esbuild/android-arm64": {
54
+ "version": "0.25.0",
55
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz",
56
+ "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==",
57
+ "cpu": [
58
+ "arm64"
59
+ ],
60
+ "optional": true,
61
+ "os": [
62
+ "android"
63
+ ],
64
+ "engines": {
65
+ "node": ">=18"
66
+ }
67
+ },
68
+ "node_modules/@esbuild/android-x64": {
69
+ "version": "0.25.0",
70
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz",
71
+ "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==",
72
+ "cpu": [
73
+ "x64"
74
+ ],
75
+ "optional": true,
76
+ "os": [
77
+ "android"
78
+ ],
79
+ "engines": {
80
+ "node": ">=18"
81
+ }
82
+ },
83
+ "node_modules/@esbuild/darwin-arm64": {
84
+ "version": "0.25.0",
85
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz",
86
+ "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==",
87
+ "cpu": [
88
+ "arm64"
89
+ ],
90
+ "optional": true,
91
+ "os": [
92
+ "darwin"
93
+ ],
94
+ "engines": {
95
+ "node": ">=18"
96
+ }
97
+ },
98
+ "node_modules/@esbuild/darwin-x64": {
99
+ "version": "0.25.0",
100
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz",
101
+ "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==",
102
+ "cpu": [
103
+ "x64"
104
+ ],
105
+ "optional": true,
106
+ "os": [
107
+ "darwin"
108
+ ],
109
+ "engines": {
110
+ "node": ">=18"
111
+ }
112
+ },
113
+ "node_modules/@esbuild/freebsd-arm64": {
114
+ "version": "0.25.0",
115
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz",
116
+ "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==",
117
+ "cpu": [
118
+ "arm64"
119
+ ],
120
+ "optional": true,
121
+ "os": [
122
+ "freebsd"
123
+ ],
124
+ "engines": {
125
+ "node": ">=18"
126
+ }
127
+ },
128
+ "node_modules/@esbuild/freebsd-x64": {
129
+ "version": "0.25.0",
130
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz",
131
+ "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==",
132
+ "cpu": [
133
+ "x64"
134
+ ],
135
+ "optional": true,
136
+ "os": [
137
+ "freebsd"
138
+ ],
139
+ "engines": {
140
+ "node": ">=18"
141
+ }
142
+ },
143
+ "node_modules/@esbuild/linux-arm": {
144
+ "version": "0.25.0",
145
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz",
146
+ "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==",
147
+ "cpu": [
148
+ "arm"
149
+ ],
150
+ "optional": true,
151
+ "os": [
152
+ "linux"
153
+ ],
154
+ "engines": {
155
+ "node": ">=18"
156
+ }
157
+ },
158
+ "node_modules/@esbuild/linux-arm64": {
159
+ "version": "0.25.0",
160
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz",
161
+ "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==",
162
+ "cpu": [
163
+ "arm64"
164
+ ],
165
+ "optional": true,
166
+ "os": [
167
+ "linux"
168
+ ],
169
+ "engines": {
170
+ "node": ">=18"
171
+ }
172
+ },
173
+ "node_modules/@esbuild/linux-ia32": {
174
+ "version": "0.25.0",
175
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz",
176
+ "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==",
177
+ "cpu": [
178
+ "ia32"
179
+ ],
180
+ "optional": true,
181
+ "os": [
182
+ "linux"
183
+ ],
184
+ "engines": {
185
+ "node": ">=18"
186
+ }
187
+ },
188
+ "node_modules/@esbuild/linux-loong64": {
189
+ "version": "0.25.0",
190
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz",
191
+ "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==",
192
+ "cpu": [
193
+ "loong64"
194
+ ],
195
+ "optional": true,
196
+ "os": [
197
+ "linux"
198
+ ],
199
+ "engines": {
200
+ "node": ">=18"
201
+ }
202
+ },
203
+ "node_modules/@esbuild/linux-mips64el": {
204
+ "version": "0.25.0",
205
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz",
206
+ "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==",
207
+ "cpu": [
208
+ "mips64el"
209
+ ],
210
+ "optional": true,
211
+ "os": [
212
+ "linux"
213
+ ],
214
+ "engines": {
215
+ "node": ">=18"
216
+ }
217
+ },
218
+ "node_modules/@esbuild/linux-ppc64": {
219
+ "version": "0.25.0",
220
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz",
221
+ "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==",
222
+ "cpu": [
223
+ "ppc64"
224
+ ],
225
+ "optional": true,
226
+ "os": [
227
+ "linux"
228
+ ],
229
+ "engines": {
230
+ "node": ">=18"
231
+ }
232
+ },
233
+ "node_modules/@esbuild/linux-riscv64": {
234
+ "version": "0.25.0",
235
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz",
236
+ "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==",
237
+ "cpu": [
238
+ "riscv64"
239
+ ],
240
+ "optional": true,
241
+ "os": [
242
+ "linux"
243
+ ],
244
+ "engines": {
245
+ "node": ">=18"
246
+ }
247
+ },
248
+ "node_modules/@esbuild/linux-s390x": {
249
+ "version": "0.25.0",
250
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz",
251
+ "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==",
252
+ "cpu": [
253
+ "s390x"
254
+ ],
255
+ "optional": true,
256
+ "os": [
257
+ "linux"
258
+ ],
259
+ "engines": {
260
+ "node": ">=18"
261
+ }
262
+ },
263
+ "node_modules/@esbuild/linux-x64": {
264
+ "version": "0.25.0",
265
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz",
266
+ "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==",
267
+ "cpu": [
268
+ "x64"
269
+ ],
270
+ "optional": true,
271
+ "os": [
272
+ "linux"
273
+ ],
274
+ "engines": {
275
+ "node": ">=18"
276
+ }
277
+ },
278
+ "node_modules/@esbuild/netbsd-arm64": {
279
+ "version": "0.25.0",
280
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz",
281
+ "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==",
282
+ "cpu": [
283
+ "arm64"
284
+ ],
285
+ "optional": true,
286
+ "os": [
287
+ "netbsd"
288
+ ],
289
+ "engines": {
290
+ "node": ">=18"
291
+ }
292
+ },
293
+ "node_modules/@esbuild/netbsd-x64": {
294
+ "version": "0.25.0",
295
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz",
296
+ "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==",
297
+ "cpu": [
298
+ "x64"
299
+ ],
300
+ "optional": true,
301
+ "os": [
302
+ "netbsd"
303
+ ],
304
+ "engines": {
305
+ "node": ">=18"
306
+ }
307
+ },
308
+ "node_modules/@esbuild/openbsd-arm64": {
309
+ "version": "0.25.0",
310
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz",
311
+ "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==",
312
+ "cpu": [
313
+ "arm64"
314
+ ],
315
+ "optional": true,
316
+ "os": [
317
+ "openbsd"
318
+ ],
319
+ "engines": {
320
+ "node": ">=18"
321
+ }
322
+ },
323
+ "node_modules/@esbuild/openbsd-x64": {
324
+ "version": "0.25.0",
325
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz",
326
+ "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==",
327
+ "cpu": [
328
+ "x64"
329
+ ],
330
+ "optional": true,
331
+ "os": [
332
+ "openbsd"
333
+ ],
334
+ "engines": {
335
+ "node": ">=18"
336
+ }
337
+ },
338
+ "node_modules/@esbuild/sunos-x64": {
339
+ "version": "0.25.0",
340
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz",
341
+ "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==",
342
+ "cpu": [
343
+ "x64"
344
+ ],
345
+ "optional": true,
346
+ "os": [
347
+ "sunos"
348
+ ],
349
+ "engines": {
350
+ "node": ">=18"
351
+ }
352
+ },
353
+ "node_modules/@esbuild/win32-arm64": {
354
+ "version": "0.25.0",
355
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz",
356
+ "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==",
357
+ "cpu": [
358
+ "arm64"
359
+ ],
360
+ "optional": true,
361
+ "os": [
362
+ "win32"
363
+ ],
364
+ "engines": {
365
+ "node": ">=18"
366
+ }
367
+ },
368
+ "node_modules/@esbuild/win32-ia32": {
369
+ "version": "0.25.0",
370
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz",
371
+ "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==",
372
+ "cpu": [
373
+ "ia32"
374
+ ],
375
+ "optional": true,
376
+ "os": [
377
+ "win32"
378
+ ],
379
+ "engines": {
380
+ "node": ">=18"
381
+ }
382
+ },
383
+ "node_modules/@esbuild/win32-x64": {
384
+ "version": "0.25.0",
385
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz",
386
+ "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==",
387
+ "cpu": [
388
+ "x64"
389
+ ],
390
+ "optional": true,
391
+ "os": [
392
+ "win32"
393
+ ],
394
+ "engines": {
395
+ "node": ">=18"
396
+ }
397
+ },
398
+ "node_modules/@googlemaps/google-maps-services-js": {
399
+ "version": "3.4.0",
400
+ "resolved": "https://registry.npmjs.org/@googlemaps/google-maps-services-js/-/google-maps-services-js-3.4.0.tgz",
401
+ "integrity": "sha512-M1G+Jl4ri9YIODxC+RwvW4UkonTQ+ZFE5gjdIrKP/4/vYG2q2dDN1IgTp03I2MI0eGQs2FmQlxGJ0lBaZ5Ysyw==",
402
+ "dependencies": {
403
+ "@googlemaps/url-signature": "^1.0.4",
404
+ "agentkeepalive": "^4.1.0",
405
+ "axios": "^1.5.1",
406
+ "query-string": "<8.x",
407
+ "retry-axios": "<3.x"
408
+ }
409
+ },
410
+ "node_modules/@googlemaps/url-signature": {
411
+ "version": "1.0.40",
412
+ "resolved": "https://registry.npmjs.org/@googlemaps/url-signature/-/url-signature-1.0.40.tgz",
413
+ "integrity": "sha512-Gme3JxGZWQ4NVpATajSpS2/inQzhUxRvr/FK6IFpcC7AHOAmx8blI0y1/Qi2jqil+WoQ3TkEqq/MaKVtuV68RQ==",
414
+ "dependencies": {
415
+ "crypto-js": "^4.2.0"
416
+ }
417
+ },
418
+ "node_modules/@modelcontextprotocol/sdk": {
419
+ "version": "1.5.0",
420
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.5.0.tgz",
421
+ "integrity": "sha512-IJ+5iVVs8FCumIHxWqpwgkwOzyhtHVKy45s6Ug7Dv0MfRpaYisH8QQ87rIWeWdOzlk8sfhitZ7HCyQZk7d6b8w==",
422
+ "dependencies": {
423
+ "content-type": "^1.0.5",
424
+ "eventsource": "^3.0.2",
425
+ "raw-body": "^3.0.0",
426
+ "zod": "^3.23.8",
427
+ "zod-to-json-schema": "^3.24.1"
428
+ },
429
+ "engines": {
430
+ "node": ">=18"
431
+ }
432
+ },
433
+ "node_modules/@types/node": {
434
+ "version": "20.17.19",
435
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz",
436
+ "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==",
437
+ "dev": true,
438
+ "dependencies": {
439
+ "undici-types": "~6.19.2"
440
+ }
441
+ },
442
+ "node_modules/agentkeepalive": {
443
+ "version": "4.6.0",
444
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz",
445
+ "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==",
446
+ "dependencies": {
447
+ "humanize-ms": "^1.2.1"
448
+ },
449
+ "engines": {
450
+ "node": ">= 8.0.0"
451
+ }
452
+ },
453
+ "node_modules/asynckit": {
454
+ "version": "0.4.0",
455
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
456
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
457
+ },
458
+ "node_modules/axios": {
459
+ "version": "1.7.9",
460
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
461
+ "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
462
+ "dependencies": {
463
+ "follow-redirects": "^1.15.6",
464
+ "form-data": "^4.0.0",
465
+ "proxy-from-env": "^1.1.0"
466
+ }
467
+ },
468
+ "node_modules/balanced-match": {
469
+ "version": "1.0.2",
470
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
471
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
472
+ },
473
+ "node_modules/brace-expansion": {
474
+ "version": "1.1.11",
475
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
476
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
477
+ "dependencies": {
478
+ "balanced-match": "^1.0.0",
479
+ "concat-map": "0.0.1"
480
+ }
481
+ },
482
+ "node_modules/bytes": {
483
+ "version": "3.1.2",
484
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
485
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
486
+ "engines": {
487
+ "node": ">= 0.8"
488
+ }
489
+ },
490
+ "node_modules/call-bind-apply-helpers": {
491
+ "version": "1.0.2",
492
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
493
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
494
+ "dependencies": {
495
+ "es-errors": "^1.3.0",
496
+ "function-bind": "^1.1.2"
497
+ },
498
+ "engines": {
499
+ "node": ">= 0.4"
500
+ }
501
+ },
502
+ "node_modules/combined-stream": {
503
+ "version": "1.0.8",
504
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
505
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
506
+ "dependencies": {
507
+ "delayed-stream": "~1.0.0"
508
+ },
509
+ "engines": {
510
+ "node": ">= 0.8"
511
+ }
512
+ },
513
+ "node_modules/concat-map": {
514
+ "version": "0.0.1",
515
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
516
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
517
+ },
518
+ "node_modules/content-type": {
519
+ "version": "1.0.5",
520
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
521
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
522
+ "engines": {
523
+ "node": ">= 0.6"
524
+ }
525
+ },
526
+ "node_modules/cross-spawn": {
527
+ "version": "7.0.6",
528
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
529
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
530
+ "dev": true,
531
+ "dependencies": {
532
+ "path-key": "^3.1.0",
533
+ "shebang-command": "^2.0.0",
534
+ "which": "^2.0.1"
535
+ },
536
+ "engines": {
537
+ "node": ">= 8"
538
+ }
539
+ },
540
+ "node_modules/crypto-js": {
541
+ "version": "4.2.0",
542
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
543
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
544
+ },
545
+ "node_modules/decode-uri-component": {
546
+ "version": "0.2.2",
547
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
548
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
549
+ "engines": {
550
+ "node": ">=0.10"
551
+ }
552
+ },
553
+ "node_modules/delayed-stream": {
554
+ "version": "1.0.0",
555
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
556
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
557
+ "engines": {
558
+ "node": ">=0.4.0"
559
+ }
560
+ },
561
+ "node_modules/depd": {
562
+ "version": "2.0.0",
563
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
564
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
565
+ "engines": {
566
+ "node": ">= 0.8"
567
+ }
568
+ },
569
+ "node_modules/dotenv": {
570
+ "version": "16.4.7",
571
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
572
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
573
+ "engines": {
574
+ "node": ">=12"
575
+ },
576
+ "funding": {
577
+ "url": "https://dotenvx.com"
578
+ }
579
+ },
580
+ "node_modules/dunder-proto": {
581
+ "version": "1.0.1",
582
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
583
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
584
+ "dependencies": {
585
+ "call-bind-apply-helpers": "^1.0.1",
586
+ "es-errors": "^1.3.0",
587
+ "gopd": "^1.2.0"
588
+ },
589
+ "engines": {
590
+ "node": ">= 0.4"
591
+ }
592
+ },
593
+ "node_modules/duplexer": {
594
+ "version": "0.1.2",
595
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
596
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
597
+ "dev": true
598
+ },
599
+ "node_modules/es-define-property": {
600
+ "version": "1.0.1",
601
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
602
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
603
+ "engines": {
604
+ "node": ">= 0.4"
605
+ }
606
+ },
607
+ "node_modules/es-errors": {
608
+ "version": "1.3.0",
609
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
610
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
611
+ "engines": {
612
+ "node": ">= 0.4"
613
+ }
614
+ },
615
+ "node_modules/es-object-atoms": {
616
+ "version": "1.1.1",
617
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
618
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
619
+ "dependencies": {
620
+ "es-errors": "^1.3.0"
621
+ },
622
+ "engines": {
623
+ "node": ">= 0.4"
624
+ }
625
+ },
626
+ "node_modules/es-set-tostringtag": {
627
+ "version": "2.1.0",
628
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
629
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
630
+ "dependencies": {
631
+ "es-errors": "^1.3.0",
632
+ "get-intrinsic": "^1.2.6",
633
+ "has-tostringtag": "^1.0.2",
634
+ "hasown": "^2.0.2"
635
+ },
636
+ "engines": {
637
+ "node": ">= 0.4"
638
+ }
639
+ },
640
+ "node_modules/esbuild": {
641
+ "version": "0.25.0",
642
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
643
+ "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==",
644
+ "hasInstallScript": true,
645
+ "bin": {
646
+ "esbuild": "bin/esbuild"
647
+ },
648
+ "engines": {
649
+ "node": ">=18"
650
+ },
651
+ "optionalDependencies": {
652
+ "@esbuild/aix-ppc64": "0.25.0",
653
+ "@esbuild/android-arm": "0.25.0",
654
+ "@esbuild/android-arm64": "0.25.0",
655
+ "@esbuild/android-x64": "0.25.0",
656
+ "@esbuild/darwin-arm64": "0.25.0",
657
+ "@esbuild/darwin-x64": "0.25.0",
658
+ "@esbuild/freebsd-arm64": "0.25.0",
659
+ "@esbuild/freebsd-x64": "0.25.0",
660
+ "@esbuild/linux-arm": "0.25.0",
661
+ "@esbuild/linux-arm64": "0.25.0",
662
+ "@esbuild/linux-ia32": "0.25.0",
663
+ "@esbuild/linux-loong64": "0.25.0",
664
+ "@esbuild/linux-mips64el": "0.25.0",
665
+ "@esbuild/linux-ppc64": "0.25.0",
666
+ "@esbuild/linux-riscv64": "0.25.0",
667
+ "@esbuild/linux-s390x": "0.25.0",
668
+ "@esbuild/linux-x64": "0.25.0",
669
+ "@esbuild/netbsd-arm64": "0.25.0",
670
+ "@esbuild/netbsd-x64": "0.25.0",
671
+ "@esbuild/openbsd-arm64": "0.25.0",
672
+ "@esbuild/openbsd-x64": "0.25.0",
673
+ "@esbuild/sunos-x64": "0.25.0",
674
+ "@esbuild/win32-arm64": "0.25.0",
675
+ "@esbuild/win32-ia32": "0.25.0",
676
+ "@esbuild/win32-x64": "0.25.0"
677
+ }
678
+ },
679
+ "node_modules/event-stream": {
680
+ "version": "3.3.4",
681
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
682
+ "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==",
683
+ "dev": true,
684
+ "dependencies": {
685
+ "duplexer": "~0.1.1",
686
+ "from": "~0",
687
+ "map-stream": "~0.1.0",
688
+ "pause-stream": "0.0.11",
689
+ "split": "0.3",
690
+ "stream-combiner": "~0.0.4",
691
+ "through": "~2.3.1"
692
+ }
693
+ },
694
+ "node_modules/eventsource": {
695
+ "version": "3.0.5",
696
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz",
697
+ "integrity": "sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==",
698
+ "dependencies": {
699
+ "eventsource-parser": "^3.0.0"
700
+ },
701
+ "engines": {
702
+ "node": ">=18.0.0"
703
+ }
704
+ },
705
+ "node_modules/eventsource-parser": {
706
+ "version": "3.0.0",
707
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.0.tgz",
708
+ "integrity": "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==",
709
+ "engines": {
710
+ "node": ">=18.0.0"
711
+ }
712
+ },
713
+ "node_modules/filter-obj": {
714
+ "version": "1.1.0",
715
+ "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz",
716
+ "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==",
717
+ "engines": {
718
+ "node": ">=0.10.0"
719
+ }
720
+ },
721
+ "node_modules/follow-redirects": {
722
+ "version": "1.15.9",
723
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
724
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
725
+ "funding": [
726
+ {
727
+ "type": "individual",
728
+ "url": "https://github.com/sponsors/RubenVerborgh"
729
+ }
730
+ ],
731
+ "engines": {
732
+ "node": ">=4.0"
733
+ },
734
+ "peerDependenciesMeta": {
735
+ "debug": {
736
+ "optional": true
737
+ }
738
+ }
739
+ },
740
+ "node_modules/form-data": {
741
+ "version": "4.0.2",
742
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
743
+ "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
744
+ "dependencies": {
745
+ "asynckit": "^0.4.0",
746
+ "combined-stream": "^1.0.8",
747
+ "es-set-tostringtag": "^2.1.0",
748
+ "mime-types": "^2.1.12"
749
+ },
750
+ "engines": {
751
+ "node": ">= 6"
752
+ }
753
+ },
754
+ "node_modules/from": {
755
+ "version": "0.1.7",
756
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
757
+ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==",
758
+ "dev": true
759
+ },
760
+ "node_modules/fs.realpath": {
761
+ "version": "1.0.0",
762
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
763
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
764
+ },
765
+ "node_modules/function-bind": {
766
+ "version": "1.1.2",
767
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
768
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
769
+ "funding": {
770
+ "url": "https://github.com/sponsors/ljharb"
771
+ }
772
+ },
773
+ "node_modules/get-intrinsic": {
774
+ "version": "1.2.7",
775
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
776
+ "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
777
+ "dependencies": {
778
+ "call-bind-apply-helpers": "^1.0.1",
779
+ "es-define-property": "^1.0.1",
780
+ "es-errors": "^1.3.0",
781
+ "es-object-atoms": "^1.0.0",
782
+ "function-bind": "^1.1.2",
783
+ "get-proto": "^1.0.0",
784
+ "gopd": "^1.2.0",
785
+ "has-symbols": "^1.1.0",
786
+ "hasown": "^2.0.2",
787
+ "math-intrinsics": "^1.1.0"
788
+ },
789
+ "engines": {
790
+ "node": ">= 0.4"
791
+ },
792
+ "funding": {
793
+ "url": "https://github.com/sponsors/ljharb"
794
+ }
795
+ },
796
+ "node_modules/get-proto": {
797
+ "version": "1.0.1",
798
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
799
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
800
+ "dependencies": {
801
+ "dunder-proto": "^1.0.1",
802
+ "es-object-atoms": "^1.0.0"
803
+ },
804
+ "engines": {
805
+ "node": ">= 0.4"
806
+ }
807
+ },
808
+ "node_modules/glob": {
809
+ "version": "7.2.3",
810
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
811
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
812
+ "deprecated": "Glob versions prior to v9 are no longer supported",
813
+ "dependencies": {
814
+ "fs.realpath": "^1.0.0",
815
+ "inflight": "^1.0.4",
816
+ "inherits": "2",
817
+ "minimatch": "^3.1.1",
818
+ "once": "^1.3.0",
819
+ "path-is-absolute": "^1.0.0"
820
+ },
821
+ "engines": {
822
+ "node": "*"
823
+ },
824
+ "funding": {
825
+ "url": "https://github.com/sponsors/isaacs"
826
+ }
827
+ },
828
+ "node_modules/gopd": {
829
+ "version": "1.2.0",
830
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
831
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
832
+ "engines": {
833
+ "node": ">= 0.4"
834
+ },
835
+ "funding": {
836
+ "url": "https://github.com/sponsors/ljharb"
837
+ }
838
+ },
839
+ "node_modules/has-symbols": {
840
+ "version": "1.1.0",
841
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
842
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
843
+ "engines": {
844
+ "node": ">= 0.4"
845
+ },
846
+ "funding": {
847
+ "url": "https://github.com/sponsors/ljharb"
848
+ }
849
+ },
850
+ "node_modules/has-tostringtag": {
851
+ "version": "1.0.2",
852
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
853
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
854
+ "dependencies": {
855
+ "has-symbols": "^1.0.3"
856
+ },
857
+ "engines": {
858
+ "node": ">= 0.4"
859
+ },
860
+ "funding": {
861
+ "url": "https://github.com/sponsors/ljharb"
862
+ }
863
+ },
864
+ "node_modules/hasown": {
865
+ "version": "2.0.2",
866
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
867
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
868
+ "dependencies": {
869
+ "function-bind": "^1.1.2"
870
+ },
871
+ "engines": {
872
+ "node": ">= 0.4"
873
+ }
874
+ },
875
+ "node_modules/http-errors": {
876
+ "version": "2.0.0",
877
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
878
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
879
+ "dependencies": {
880
+ "depd": "2.0.0",
881
+ "inherits": "2.0.4",
882
+ "setprototypeof": "1.2.0",
883
+ "statuses": "2.0.1",
884
+ "toidentifier": "1.0.1"
885
+ },
886
+ "engines": {
887
+ "node": ">= 0.8"
888
+ }
889
+ },
890
+ "node_modules/humanize-ms": {
891
+ "version": "1.2.1",
892
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
893
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
894
+ "dependencies": {
895
+ "ms": "^2.0.0"
896
+ }
897
+ },
898
+ "node_modules/iconv-lite": {
899
+ "version": "0.6.3",
900
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
901
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
902
+ "dependencies": {
903
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
904
+ },
905
+ "engines": {
906
+ "node": ">=0.10.0"
907
+ }
908
+ },
909
+ "node_modules/inflight": {
910
+ "version": "1.0.6",
911
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
912
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
913
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
914
+ "dependencies": {
915
+ "once": "^1.3.0",
916
+ "wrappy": "1"
917
+ }
918
+ },
919
+ "node_modules/inherits": {
920
+ "version": "2.0.4",
921
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
922
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
923
+ },
924
+ "node_modules/interpret": {
925
+ "version": "1.4.0",
926
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
927
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
928
+ "engines": {
929
+ "node": ">= 0.10"
930
+ }
931
+ },
932
+ "node_modules/is-core-module": {
933
+ "version": "2.16.1",
934
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
935
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
936
+ "dependencies": {
937
+ "hasown": "^2.0.2"
938
+ },
939
+ "engines": {
940
+ "node": ">= 0.4"
941
+ },
942
+ "funding": {
943
+ "url": "https://github.com/sponsors/ljharb"
944
+ }
945
+ },
946
+ "node_modules/isexe": {
947
+ "version": "2.0.0",
948
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
949
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
950
+ "dev": true
951
+ },
952
+ "node_modules/map-stream": {
953
+ "version": "0.1.0",
954
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
955
+ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==",
956
+ "dev": true
957
+ },
958
+ "node_modules/math-intrinsics": {
959
+ "version": "1.1.0",
960
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
961
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
962
+ "engines": {
963
+ "node": ">= 0.4"
964
+ }
965
+ },
966
+ "node_modules/mime-db": {
967
+ "version": "1.52.0",
968
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
969
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
970
+ "engines": {
971
+ "node": ">= 0.6"
972
+ }
973
+ },
974
+ "node_modules/mime-types": {
975
+ "version": "2.1.35",
976
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
977
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
978
+ "dependencies": {
979
+ "mime-db": "1.52.0"
980
+ },
981
+ "engines": {
982
+ "node": ">= 0.6"
983
+ }
984
+ },
985
+ "node_modules/minimatch": {
986
+ "version": "3.1.2",
987
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
988
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
989
+ "dependencies": {
990
+ "brace-expansion": "^1.1.7"
991
+ },
992
+ "engines": {
993
+ "node": "*"
994
+ }
995
+ },
996
+ "node_modules/minimist": {
997
+ "version": "1.2.8",
998
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
999
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1000
+ "funding": {
1001
+ "url": "https://github.com/sponsors/ljharb"
1002
+ }
1003
+ },
1004
+ "node_modules/ms": {
1005
+ "version": "2.1.3",
1006
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1007
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1008
+ },
1009
+ "node_modules/node-cleanup": {
1010
+ "version": "2.1.2",
1011
+ "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
1012
+ "integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==",
1013
+ "dev": true
1014
+ },
1015
+ "node_modules/once": {
1016
+ "version": "1.4.0",
1017
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1018
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1019
+ "dependencies": {
1020
+ "wrappy": "1"
1021
+ }
1022
+ },
1023
+ "node_modules/path-is-absolute": {
1024
+ "version": "1.0.1",
1025
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1026
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1027
+ "engines": {
1028
+ "node": ">=0.10.0"
1029
+ }
1030
+ },
1031
+ "node_modules/path-key": {
1032
+ "version": "3.1.1",
1033
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1034
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1035
+ "dev": true,
1036
+ "engines": {
1037
+ "node": ">=8"
1038
+ }
1039
+ },
1040
+ "node_modules/path-parse": {
1041
+ "version": "1.0.7",
1042
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1043
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
1044
+ },
1045
+ "node_modules/pause-stream": {
1046
+ "version": "0.0.11",
1047
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
1048
+ "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
1049
+ "dev": true,
1050
+ "dependencies": {
1051
+ "through": "~2.3"
1052
+ }
1053
+ },
1054
+ "node_modules/proxy-from-env": {
1055
+ "version": "1.1.0",
1056
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1057
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
1058
+ },
1059
+ "node_modules/ps-tree": {
1060
+ "version": "1.2.0",
1061
+ "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
1062
+ "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
1063
+ "dev": true,
1064
+ "dependencies": {
1065
+ "event-stream": "=3.3.4"
1066
+ },
1067
+ "bin": {
1068
+ "ps-tree": "bin/ps-tree.js"
1069
+ },
1070
+ "engines": {
1071
+ "node": ">= 0.10"
1072
+ }
1073
+ },
1074
+ "node_modules/query-string": {
1075
+ "version": "7.1.3",
1076
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz",
1077
+ "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==",
1078
+ "dependencies": {
1079
+ "decode-uri-component": "^0.2.2",
1080
+ "filter-obj": "^1.1.0",
1081
+ "split-on-first": "^1.0.0",
1082
+ "strict-uri-encode": "^2.0.0"
1083
+ },
1084
+ "engines": {
1085
+ "node": ">=6"
1086
+ },
1087
+ "funding": {
1088
+ "url": "https://github.com/sponsors/sindresorhus"
1089
+ }
1090
+ },
1091
+ "node_modules/raw-body": {
1092
+ "version": "3.0.0",
1093
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
1094
+ "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
1095
+ "dependencies": {
1096
+ "bytes": "3.1.2",
1097
+ "http-errors": "2.0.0",
1098
+ "iconv-lite": "0.6.3",
1099
+ "unpipe": "1.0.0"
1100
+ },
1101
+ "engines": {
1102
+ "node": ">= 0.8"
1103
+ }
1104
+ },
1105
+ "node_modules/rechoir": {
1106
+ "version": "0.6.2",
1107
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
1108
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
1109
+ "dependencies": {
1110
+ "resolve": "^1.1.6"
1111
+ },
1112
+ "engines": {
1113
+ "node": ">= 0.10"
1114
+ }
1115
+ },
1116
+ "node_modules/resolve": {
1117
+ "version": "1.22.10",
1118
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
1119
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
1120
+ "dependencies": {
1121
+ "is-core-module": "^2.16.0",
1122
+ "path-parse": "^1.0.7",
1123
+ "supports-preserve-symlinks-flag": "^1.0.0"
1124
+ },
1125
+ "bin": {
1126
+ "resolve": "bin/resolve"
1127
+ },
1128
+ "engines": {
1129
+ "node": ">= 0.4"
1130
+ },
1131
+ "funding": {
1132
+ "url": "https://github.com/sponsors/ljharb"
1133
+ }
1134
+ },
1135
+ "node_modules/retry-axios": {
1136
+ "version": "2.6.0",
1137
+ "resolved": "https://registry.npmjs.org/retry-axios/-/retry-axios-2.6.0.tgz",
1138
+ "integrity": "sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ==",
1139
+ "engines": {
1140
+ "node": ">=10.7.0"
1141
+ },
1142
+ "peerDependencies": {
1143
+ "axios": "*"
1144
+ }
1145
+ },
1146
+ "node_modules/safer-buffer": {
1147
+ "version": "2.1.2",
1148
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1149
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1150
+ },
1151
+ "node_modules/setprototypeof": {
1152
+ "version": "1.2.0",
1153
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1154
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1155
+ },
1156
+ "node_modules/shebang-command": {
1157
+ "version": "2.0.0",
1158
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1159
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1160
+ "dev": true,
1161
+ "dependencies": {
1162
+ "shebang-regex": "^3.0.0"
1163
+ },
1164
+ "engines": {
1165
+ "node": ">=8"
1166
+ }
1167
+ },
1168
+ "node_modules/shebang-regex": {
1169
+ "version": "3.0.0",
1170
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1171
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1172
+ "dev": true,
1173
+ "engines": {
1174
+ "node": ">=8"
1175
+ }
1176
+ },
1177
+ "node_modules/shelljs": {
1178
+ "version": "0.8.5",
1179
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
1180
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
1181
+ "dependencies": {
1182
+ "glob": "^7.0.0",
1183
+ "interpret": "^1.0.0",
1184
+ "rechoir": "^0.6.2"
1185
+ },
1186
+ "bin": {
1187
+ "shjs": "bin/shjs"
1188
+ },
1189
+ "engines": {
1190
+ "node": ">=4"
1191
+ }
1192
+ },
1193
+ "node_modules/shx": {
1194
+ "version": "0.3.4",
1195
+ "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz",
1196
+ "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==",
1197
+ "dependencies": {
1198
+ "minimist": "^1.2.3",
1199
+ "shelljs": "^0.8.5"
1200
+ },
1201
+ "bin": {
1202
+ "shx": "lib/cli.js"
1203
+ },
1204
+ "engines": {
1205
+ "node": ">=6"
1206
+ }
1207
+ },
1208
+ "node_modules/split": {
1209
+ "version": "0.3.3",
1210
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
1211
+ "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==",
1212
+ "dev": true,
1213
+ "dependencies": {
1214
+ "through": "2"
1215
+ },
1216
+ "engines": {
1217
+ "node": "*"
1218
+ }
1219
+ },
1220
+ "node_modules/split-on-first": {
1221
+ "version": "1.1.0",
1222
+ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
1223
+ "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==",
1224
+ "engines": {
1225
+ "node": ">=6"
1226
+ }
1227
+ },
1228
+ "node_modules/statuses": {
1229
+ "version": "2.0.1",
1230
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1231
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1232
+ "engines": {
1233
+ "node": ">= 0.8"
1234
+ }
1235
+ },
1236
+ "node_modules/stream-combiner": {
1237
+ "version": "0.0.4",
1238
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
1239
+ "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==",
1240
+ "dev": true,
1241
+ "dependencies": {
1242
+ "duplexer": "~0.1.1"
1243
+ }
1244
+ },
1245
+ "node_modules/strict-uri-encode": {
1246
+ "version": "2.0.0",
1247
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
1248
+ "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==",
1249
+ "engines": {
1250
+ "node": ">=4"
1251
+ }
1252
+ },
1253
+ "node_modules/string-argv": {
1254
+ "version": "0.3.2",
1255
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
1256
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
1257
+ "dev": true,
1258
+ "engines": {
1259
+ "node": ">=0.6.19"
1260
+ }
1261
+ },
1262
+ "node_modules/supports-preserve-symlinks-flag": {
1263
+ "version": "1.0.0",
1264
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1265
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1266
+ "engines": {
1267
+ "node": ">= 0.4"
1268
+ },
1269
+ "funding": {
1270
+ "url": "https://github.com/sponsors/ljharb"
1271
+ }
1272
+ },
1273
+ "node_modules/through": {
1274
+ "version": "2.3.8",
1275
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1276
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
1277
+ "dev": true
1278
+ },
1279
+ "node_modules/toidentifier": {
1280
+ "version": "1.0.1",
1281
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1282
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1283
+ "engines": {
1284
+ "node": ">=0.6"
1285
+ }
1286
+ },
1287
+ "node_modules/tsc-watch": {
1288
+ "version": "6.2.1",
1289
+ "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-6.2.1.tgz",
1290
+ "integrity": "sha512-GLwdz5Dy9K3sVm3RzgkLcyDpl5cvU9HEcE1A3gf5rqEwlUe7gDLxNCgcuNEw3zoKOiegMo3LnbF1t6HLqxhrSA==",
1291
+ "dev": true,
1292
+ "dependencies": {
1293
+ "cross-spawn": "^7.0.3",
1294
+ "node-cleanup": "^2.1.2",
1295
+ "ps-tree": "^1.2.0",
1296
+ "string-argv": "^0.3.1"
1297
+ },
1298
+ "bin": {
1299
+ "tsc-watch": "dist/lib/tsc-watch.js"
1300
+ },
1301
+ "engines": {
1302
+ "node": ">=12.12.0"
1303
+ },
1304
+ "peerDependencies": {
1305
+ "typescript": "*"
1306
+ }
1307
+ },
1308
+ "node_modules/typescript": {
1309
+ "version": "5.7.3",
1310
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
1311
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
1312
+ "dev": true,
1313
+ "bin": {
1314
+ "tsc": "bin/tsc",
1315
+ "tsserver": "bin/tsserver"
1316
+ },
1317
+ "engines": {
1318
+ "node": ">=14.17"
1319
+ }
1320
+ },
1321
+ "node_modules/undici-types": {
1322
+ "version": "6.19.8",
1323
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
1324
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
1325
+ "dev": true
1326
+ },
1327
+ "node_modules/unpipe": {
1328
+ "version": "1.0.0",
1329
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1330
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1331
+ "engines": {
1332
+ "node": ">= 0.8"
1333
+ }
1334
+ },
1335
+ "node_modules/which": {
1336
+ "version": "2.0.2",
1337
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1338
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1339
+ "dev": true,
1340
+ "dependencies": {
1341
+ "isexe": "^2.0.0"
1342
+ },
1343
+ "bin": {
1344
+ "node-which": "bin/node-which"
1345
+ },
1346
+ "engines": {
1347
+ "node": ">= 8"
1348
+ }
1349
+ },
1350
+ "node_modules/wrappy": {
1351
+ "version": "1.0.2",
1352
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1353
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
1354
+ },
1355
+ "node_modules/zod": {
1356
+ "version": "3.24.2",
1357
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
1358
+ "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
1359
+ "funding": {
1360
+ "url": "https://github.com/sponsors/colinhacks"
1361
+ }
1362
+ },
1363
+ "node_modules/zod-to-json-schema": {
1364
+ "version": "3.24.2",
1365
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.2.tgz",
1366
+ "integrity": "sha512-pNUqrcSxuuB3/+jBbU8qKUbTbDqYUaG1vf5cXFjbhGgoUuA1amO/y4Q8lzfOhHU8HNPK6VFJ18lBDKj3OHyDsg==",
1367
+ "peerDependencies": {
1368
+ "zod": "^3.24.1"
1369
+ }
1370
+ }
1371
+ },
1372
+ "dependencies": {
1373
+ "@esbuild/aix-ppc64": {
1374
+ "version": "0.25.0",
1375
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
1376
+ "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==",
1377
+ "optional": true
1378
+ },
1379
+ "@esbuild/android-arm": {
1380
+ "version": "0.25.0",
1381
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz",
1382
+ "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==",
1383
+ "optional": true
1384
+ },
1385
+ "@esbuild/android-arm64": {
1386
+ "version": "0.25.0",
1387
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz",
1388
+ "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==",
1389
+ "optional": true
1390
+ },
1391
+ "@esbuild/android-x64": {
1392
+ "version": "0.25.0",
1393
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz",
1394
+ "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==",
1395
+ "optional": true
1396
+ },
1397
+ "@esbuild/darwin-arm64": {
1398
+ "version": "0.25.0",
1399
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz",
1400
+ "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==",
1401
+ "optional": true
1402
+ },
1403
+ "@esbuild/darwin-x64": {
1404
+ "version": "0.25.0",
1405
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz",
1406
+ "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==",
1407
+ "optional": true
1408
+ },
1409
+ "@esbuild/freebsd-arm64": {
1410
+ "version": "0.25.0",
1411
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz",
1412
+ "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==",
1413
+ "optional": true
1414
+ },
1415
+ "@esbuild/freebsd-x64": {
1416
+ "version": "0.25.0",
1417
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz",
1418
+ "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==",
1419
+ "optional": true
1420
+ },
1421
+ "@esbuild/linux-arm": {
1422
+ "version": "0.25.0",
1423
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz",
1424
+ "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==",
1425
+ "optional": true
1426
+ },
1427
+ "@esbuild/linux-arm64": {
1428
+ "version": "0.25.0",
1429
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz",
1430
+ "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==",
1431
+ "optional": true
1432
+ },
1433
+ "@esbuild/linux-ia32": {
1434
+ "version": "0.25.0",
1435
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz",
1436
+ "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==",
1437
+ "optional": true
1438
+ },
1439
+ "@esbuild/linux-loong64": {
1440
+ "version": "0.25.0",
1441
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz",
1442
+ "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==",
1443
+ "optional": true
1444
+ },
1445
+ "@esbuild/linux-mips64el": {
1446
+ "version": "0.25.0",
1447
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz",
1448
+ "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==",
1449
+ "optional": true
1450
+ },
1451
+ "@esbuild/linux-ppc64": {
1452
+ "version": "0.25.0",
1453
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz",
1454
+ "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==",
1455
+ "optional": true
1456
+ },
1457
+ "@esbuild/linux-riscv64": {
1458
+ "version": "0.25.0",
1459
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz",
1460
+ "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==",
1461
+ "optional": true
1462
+ },
1463
+ "@esbuild/linux-s390x": {
1464
+ "version": "0.25.0",
1465
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz",
1466
+ "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==",
1467
+ "optional": true
1468
+ },
1469
+ "@esbuild/linux-x64": {
1470
+ "version": "0.25.0",
1471
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz",
1472
+ "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==",
1473
+ "optional": true
1474
+ },
1475
+ "@esbuild/netbsd-arm64": {
1476
+ "version": "0.25.0",
1477
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz",
1478
+ "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==",
1479
+ "optional": true
1480
+ },
1481
+ "@esbuild/netbsd-x64": {
1482
+ "version": "0.25.0",
1483
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz",
1484
+ "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==",
1485
+ "optional": true
1486
+ },
1487
+ "@esbuild/openbsd-arm64": {
1488
+ "version": "0.25.0",
1489
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz",
1490
+ "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==",
1491
+ "optional": true
1492
+ },
1493
+ "@esbuild/openbsd-x64": {
1494
+ "version": "0.25.0",
1495
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz",
1496
+ "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==",
1497
+ "optional": true
1498
+ },
1499
+ "@esbuild/sunos-x64": {
1500
+ "version": "0.25.0",
1501
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz",
1502
+ "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==",
1503
+ "optional": true
1504
+ },
1505
+ "@esbuild/win32-arm64": {
1506
+ "version": "0.25.0",
1507
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz",
1508
+ "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==",
1509
+ "optional": true
1510
+ },
1511
+ "@esbuild/win32-ia32": {
1512
+ "version": "0.25.0",
1513
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz",
1514
+ "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==",
1515
+ "optional": true
1516
+ },
1517
+ "@esbuild/win32-x64": {
1518
+ "version": "0.25.0",
1519
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz",
1520
+ "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==",
1521
+ "optional": true
1522
+ },
1523
+ "@googlemaps/google-maps-services-js": {
1524
+ "version": "3.4.0",
1525
+ "resolved": "https://registry.npmjs.org/@googlemaps/google-maps-services-js/-/google-maps-services-js-3.4.0.tgz",
1526
+ "integrity": "sha512-M1G+Jl4ri9YIODxC+RwvW4UkonTQ+ZFE5gjdIrKP/4/vYG2q2dDN1IgTp03I2MI0eGQs2FmQlxGJ0lBaZ5Ysyw==",
1527
+ "requires": {
1528
+ "@googlemaps/url-signature": "^1.0.4",
1529
+ "agentkeepalive": "^4.1.0",
1530
+ "axios": "^1.5.1",
1531
+ "query-string": "<8.x",
1532
+ "retry-axios": "<3.x"
1533
+ }
1534
+ },
1535
+ "@googlemaps/url-signature": {
1536
+ "version": "1.0.40",
1537
+ "resolved": "https://registry.npmjs.org/@googlemaps/url-signature/-/url-signature-1.0.40.tgz",
1538
+ "integrity": "sha512-Gme3JxGZWQ4NVpATajSpS2/inQzhUxRvr/FK6IFpcC7AHOAmx8blI0y1/Qi2jqil+WoQ3TkEqq/MaKVtuV68RQ==",
1539
+ "requires": {
1540
+ "crypto-js": "^4.2.0"
1541
+ }
1542
+ },
1543
+ "@modelcontextprotocol/sdk": {
1544
+ "version": "1.5.0",
1545
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.5.0.tgz",
1546
+ "integrity": "sha512-IJ+5iVVs8FCumIHxWqpwgkwOzyhtHVKy45s6Ug7Dv0MfRpaYisH8QQ87rIWeWdOzlk8sfhitZ7HCyQZk7d6b8w==",
1547
+ "requires": {
1548
+ "content-type": "^1.0.5",
1549
+ "eventsource": "^3.0.2",
1550
+ "raw-body": "^3.0.0",
1551
+ "zod": "^3.23.8",
1552
+ "zod-to-json-schema": "^3.24.1"
1553
+ }
1554
+ },
1555
+ "@types/node": {
1556
+ "version": "20.17.19",
1557
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz",
1558
+ "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==",
1559
+ "dev": true,
1560
+ "requires": {
1561
+ "undici-types": "~6.19.2"
1562
+ }
1563
+ },
1564
+ "agentkeepalive": {
1565
+ "version": "4.6.0",
1566
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz",
1567
+ "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==",
1568
+ "requires": {
1569
+ "humanize-ms": "^1.2.1"
1570
+ }
1571
+ },
1572
+ "asynckit": {
1573
+ "version": "0.4.0",
1574
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1575
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
1576
+ },
1577
+ "axios": {
1578
+ "version": "1.7.9",
1579
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
1580
+ "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
1581
+ "requires": {
1582
+ "follow-redirects": "^1.15.6",
1583
+ "form-data": "^4.0.0",
1584
+ "proxy-from-env": "^1.1.0"
1585
+ }
1586
+ },
1587
+ "balanced-match": {
1588
+ "version": "1.0.2",
1589
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1590
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
1591
+ },
1592
+ "brace-expansion": {
1593
+ "version": "1.1.11",
1594
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1595
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1596
+ "requires": {
1597
+ "balanced-match": "^1.0.0",
1598
+ "concat-map": "0.0.1"
1599
+ }
1600
+ },
1601
+ "bytes": {
1602
+ "version": "3.1.2",
1603
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
1604
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
1605
+ },
1606
+ "call-bind-apply-helpers": {
1607
+ "version": "1.0.2",
1608
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
1609
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
1610
+ "requires": {
1611
+ "es-errors": "^1.3.0",
1612
+ "function-bind": "^1.1.2"
1613
+ }
1614
+ },
1615
+ "combined-stream": {
1616
+ "version": "1.0.8",
1617
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
1618
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
1619
+ "requires": {
1620
+ "delayed-stream": "~1.0.0"
1621
+ }
1622
+ },
1623
+ "concat-map": {
1624
+ "version": "0.0.1",
1625
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1626
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
1627
+ },
1628
+ "content-type": {
1629
+ "version": "1.0.5",
1630
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
1631
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
1632
+ },
1633
+ "cross-spawn": {
1634
+ "version": "7.0.6",
1635
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1636
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1637
+ "dev": true,
1638
+ "requires": {
1639
+ "path-key": "^3.1.0",
1640
+ "shebang-command": "^2.0.0",
1641
+ "which": "^2.0.1"
1642
+ }
1643
+ },
1644
+ "crypto-js": {
1645
+ "version": "4.2.0",
1646
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
1647
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
1648
+ },
1649
+ "decode-uri-component": {
1650
+ "version": "0.2.2",
1651
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
1652
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="
1653
+ },
1654
+ "delayed-stream": {
1655
+ "version": "1.0.0",
1656
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1657
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
1658
+ },
1659
+ "depd": {
1660
+ "version": "2.0.0",
1661
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
1662
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
1663
+ },
1664
+ "dotenv": {
1665
+ "version": "16.4.7",
1666
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
1667
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="
1668
+ },
1669
+ "dunder-proto": {
1670
+ "version": "1.0.1",
1671
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
1672
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
1673
+ "requires": {
1674
+ "call-bind-apply-helpers": "^1.0.1",
1675
+ "es-errors": "^1.3.0",
1676
+ "gopd": "^1.2.0"
1677
+ }
1678
+ },
1679
+ "duplexer": {
1680
+ "version": "0.1.2",
1681
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
1682
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
1683
+ "dev": true
1684
+ },
1685
+ "es-define-property": {
1686
+ "version": "1.0.1",
1687
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
1688
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
1689
+ },
1690
+ "es-errors": {
1691
+ "version": "1.3.0",
1692
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1693
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
1694
+ },
1695
+ "es-object-atoms": {
1696
+ "version": "1.1.1",
1697
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
1698
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
1699
+ "requires": {
1700
+ "es-errors": "^1.3.0"
1701
+ }
1702
+ },
1703
+ "es-set-tostringtag": {
1704
+ "version": "2.1.0",
1705
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
1706
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
1707
+ "requires": {
1708
+ "es-errors": "^1.3.0",
1709
+ "get-intrinsic": "^1.2.6",
1710
+ "has-tostringtag": "^1.0.2",
1711
+ "hasown": "^2.0.2"
1712
+ }
1713
+ },
1714
+ "esbuild": {
1715
+ "version": "0.25.0",
1716
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
1717
+ "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==",
1718
+ "requires": {
1719
+ "@esbuild/aix-ppc64": "0.25.0",
1720
+ "@esbuild/android-arm": "0.25.0",
1721
+ "@esbuild/android-arm64": "0.25.0",
1722
+ "@esbuild/android-x64": "0.25.0",
1723
+ "@esbuild/darwin-arm64": "0.25.0",
1724
+ "@esbuild/darwin-x64": "0.25.0",
1725
+ "@esbuild/freebsd-arm64": "0.25.0",
1726
+ "@esbuild/freebsd-x64": "0.25.0",
1727
+ "@esbuild/linux-arm": "0.25.0",
1728
+ "@esbuild/linux-arm64": "0.25.0",
1729
+ "@esbuild/linux-ia32": "0.25.0",
1730
+ "@esbuild/linux-loong64": "0.25.0",
1731
+ "@esbuild/linux-mips64el": "0.25.0",
1732
+ "@esbuild/linux-ppc64": "0.25.0",
1733
+ "@esbuild/linux-riscv64": "0.25.0",
1734
+ "@esbuild/linux-s390x": "0.25.0",
1735
+ "@esbuild/linux-x64": "0.25.0",
1736
+ "@esbuild/netbsd-arm64": "0.25.0",
1737
+ "@esbuild/netbsd-x64": "0.25.0",
1738
+ "@esbuild/openbsd-arm64": "0.25.0",
1739
+ "@esbuild/openbsd-x64": "0.25.0",
1740
+ "@esbuild/sunos-x64": "0.25.0",
1741
+ "@esbuild/win32-arm64": "0.25.0",
1742
+ "@esbuild/win32-ia32": "0.25.0",
1743
+ "@esbuild/win32-x64": "0.25.0"
1744
+ }
1745
+ },
1746
+ "event-stream": {
1747
+ "version": "3.3.4",
1748
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
1749
+ "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==",
1750
+ "dev": true,
1751
+ "requires": {
1752
+ "duplexer": "~0.1.1",
1753
+ "from": "~0",
1754
+ "map-stream": "~0.1.0",
1755
+ "pause-stream": "0.0.11",
1756
+ "split": "0.3",
1757
+ "stream-combiner": "~0.0.4",
1758
+ "through": "~2.3.1"
1759
+ }
1760
+ },
1761
+ "eventsource": {
1762
+ "version": "3.0.5",
1763
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz",
1764
+ "integrity": "sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==",
1765
+ "requires": {
1766
+ "eventsource-parser": "^3.0.0"
1767
+ }
1768
+ },
1769
+ "eventsource-parser": {
1770
+ "version": "3.0.0",
1771
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.0.tgz",
1772
+ "integrity": "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA=="
1773
+ },
1774
+ "filter-obj": {
1775
+ "version": "1.1.0",
1776
+ "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz",
1777
+ "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="
1778
+ },
1779
+ "follow-redirects": {
1780
+ "version": "1.15.9",
1781
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
1782
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="
1783
+ },
1784
+ "form-data": {
1785
+ "version": "4.0.2",
1786
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
1787
+ "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
1788
+ "requires": {
1789
+ "asynckit": "^0.4.0",
1790
+ "combined-stream": "^1.0.8",
1791
+ "es-set-tostringtag": "^2.1.0",
1792
+ "mime-types": "^2.1.12"
1793
+ }
1794
+ },
1795
+ "from": {
1796
+ "version": "0.1.7",
1797
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
1798
+ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==",
1799
+ "dev": true
1800
+ },
1801
+ "fs.realpath": {
1802
+ "version": "1.0.0",
1803
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1804
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
1805
+ },
1806
+ "function-bind": {
1807
+ "version": "1.1.2",
1808
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1809
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
1810
+ },
1811
+ "get-intrinsic": {
1812
+ "version": "1.2.7",
1813
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
1814
+ "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
1815
+ "requires": {
1816
+ "call-bind-apply-helpers": "^1.0.1",
1817
+ "es-define-property": "^1.0.1",
1818
+ "es-errors": "^1.3.0",
1819
+ "es-object-atoms": "^1.0.0",
1820
+ "function-bind": "^1.1.2",
1821
+ "get-proto": "^1.0.0",
1822
+ "gopd": "^1.2.0",
1823
+ "has-symbols": "^1.1.0",
1824
+ "hasown": "^2.0.2",
1825
+ "math-intrinsics": "^1.1.0"
1826
+ }
1827
+ },
1828
+ "get-proto": {
1829
+ "version": "1.0.1",
1830
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
1831
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
1832
+ "requires": {
1833
+ "dunder-proto": "^1.0.1",
1834
+ "es-object-atoms": "^1.0.0"
1835
+ }
1836
+ },
1837
+ "glob": {
1838
+ "version": "7.2.3",
1839
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1840
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1841
+ "requires": {
1842
+ "fs.realpath": "^1.0.0",
1843
+ "inflight": "^1.0.4",
1844
+ "inherits": "2",
1845
+ "minimatch": "^3.1.1",
1846
+ "once": "^1.3.0",
1847
+ "path-is-absolute": "^1.0.0"
1848
+ }
1849
+ },
1850
+ "gopd": {
1851
+ "version": "1.2.0",
1852
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
1853
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
1854
+ },
1855
+ "has-symbols": {
1856
+ "version": "1.1.0",
1857
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
1858
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
1859
+ },
1860
+ "has-tostringtag": {
1861
+ "version": "1.0.2",
1862
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
1863
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
1864
+ "requires": {
1865
+ "has-symbols": "^1.0.3"
1866
+ }
1867
+ },
1868
+ "hasown": {
1869
+ "version": "2.0.2",
1870
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1871
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1872
+ "requires": {
1873
+ "function-bind": "^1.1.2"
1874
+ }
1875
+ },
1876
+ "http-errors": {
1877
+ "version": "2.0.0",
1878
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1879
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1880
+ "requires": {
1881
+ "depd": "2.0.0",
1882
+ "inherits": "2.0.4",
1883
+ "setprototypeof": "1.2.0",
1884
+ "statuses": "2.0.1",
1885
+ "toidentifier": "1.0.1"
1886
+ }
1887
+ },
1888
+ "humanize-ms": {
1889
+ "version": "1.2.1",
1890
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
1891
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
1892
+ "requires": {
1893
+ "ms": "^2.0.0"
1894
+ }
1895
+ },
1896
+ "iconv-lite": {
1897
+ "version": "0.6.3",
1898
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
1899
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
1900
+ "requires": {
1901
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
1902
+ }
1903
+ },
1904
+ "inflight": {
1905
+ "version": "1.0.6",
1906
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1907
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1908
+ "requires": {
1909
+ "once": "^1.3.0",
1910
+ "wrappy": "1"
1911
+ }
1912
+ },
1913
+ "inherits": {
1914
+ "version": "2.0.4",
1915
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1916
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1917
+ },
1918
+ "interpret": {
1919
+ "version": "1.4.0",
1920
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
1921
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
1922
+ },
1923
+ "is-core-module": {
1924
+ "version": "2.16.1",
1925
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
1926
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
1927
+ "requires": {
1928
+ "hasown": "^2.0.2"
1929
+ }
1930
+ },
1931
+ "isexe": {
1932
+ "version": "2.0.0",
1933
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1934
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1935
+ "dev": true
1936
+ },
1937
+ "map-stream": {
1938
+ "version": "0.1.0",
1939
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
1940
+ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==",
1941
+ "dev": true
1942
+ },
1943
+ "math-intrinsics": {
1944
+ "version": "1.1.0",
1945
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
1946
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
1947
+ },
1948
+ "mime-db": {
1949
+ "version": "1.52.0",
1950
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1951
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1952
+ },
1953
+ "mime-types": {
1954
+ "version": "2.1.35",
1955
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1956
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1957
+ "requires": {
1958
+ "mime-db": "1.52.0"
1959
+ }
1960
+ },
1961
+ "minimatch": {
1962
+ "version": "3.1.2",
1963
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1964
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1965
+ "requires": {
1966
+ "brace-expansion": "^1.1.7"
1967
+ }
1968
+ },
1969
+ "minimist": {
1970
+ "version": "1.2.8",
1971
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1972
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
1973
+ },
1974
+ "ms": {
1975
+ "version": "2.1.3",
1976
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1977
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1978
+ },
1979
+ "node-cleanup": {
1980
+ "version": "2.1.2",
1981
+ "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
1982
+ "integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==",
1983
+ "dev": true
1984
+ },
1985
+ "once": {
1986
+ "version": "1.4.0",
1987
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1988
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1989
+ "requires": {
1990
+ "wrappy": "1"
1991
+ }
1992
+ },
1993
+ "path-is-absolute": {
1994
+ "version": "1.0.1",
1995
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1996
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
1997
+ },
1998
+ "path-key": {
1999
+ "version": "3.1.1",
2000
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2001
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2002
+ "dev": true
2003
+ },
2004
+ "path-parse": {
2005
+ "version": "1.0.7",
2006
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2007
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
2008
+ },
2009
+ "pause-stream": {
2010
+ "version": "0.0.11",
2011
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
2012
+ "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
2013
+ "dev": true,
2014
+ "requires": {
2015
+ "through": "~2.3"
2016
+ }
2017
+ },
2018
+ "proxy-from-env": {
2019
+ "version": "1.1.0",
2020
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
2021
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
2022
+ },
2023
+ "ps-tree": {
2024
+ "version": "1.2.0",
2025
+ "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
2026
+ "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
2027
+ "dev": true,
2028
+ "requires": {
2029
+ "event-stream": "=3.3.4"
2030
+ }
2031
+ },
2032
+ "query-string": {
2033
+ "version": "7.1.3",
2034
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz",
2035
+ "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==",
2036
+ "requires": {
2037
+ "decode-uri-component": "^0.2.2",
2038
+ "filter-obj": "^1.1.0",
2039
+ "split-on-first": "^1.0.0",
2040
+ "strict-uri-encode": "^2.0.0"
2041
+ }
2042
+ },
2043
+ "raw-body": {
2044
+ "version": "3.0.0",
2045
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
2046
+ "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
2047
+ "requires": {
2048
+ "bytes": "3.1.2",
2049
+ "http-errors": "2.0.0",
2050
+ "iconv-lite": "0.6.3",
2051
+ "unpipe": "1.0.0"
2052
+ }
2053
+ },
2054
+ "rechoir": {
2055
+ "version": "0.6.2",
2056
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
2057
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
2058
+ "requires": {
2059
+ "resolve": "^1.1.6"
2060
+ }
2061
+ },
2062
+ "resolve": {
2063
+ "version": "1.22.10",
2064
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
2065
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
2066
+ "requires": {
2067
+ "is-core-module": "^2.16.0",
2068
+ "path-parse": "^1.0.7",
2069
+ "supports-preserve-symlinks-flag": "^1.0.0"
2070
+ }
2071
+ },
2072
+ "retry-axios": {
2073
+ "version": "2.6.0",
2074
+ "resolved": "https://registry.npmjs.org/retry-axios/-/retry-axios-2.6.0.tgz",
2075
+ "integrity": "sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ==",
2076
+ "requires": {}
2077
+ },
2078
+ "safer-buffer": {
2079
+ "version": "2.1.2",
2080
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2081
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2082
+ },
2083
+ "setprototypeof": {
2084
+ "version": "1.2.0",
2085
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
2086
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
2087
+ },
2088
+ "shebang-command": {
2089
+ "version": "2.0.0",
2090
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2091
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2092
+ "dev": true,
2093
+ "requires": {
2094
+ "shebang-regex": "^3.0.0"
2095
+ }
2096
+ },
2097
+ "shebang-regex": {
2098
+ "version": "3.0.0",
2099
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2100
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2101
+ "dev": true
2102
+ },
2103
+ "shelljs": {
2104
+ "version": "0.8.5",
2105
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
2106
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
2107
+ "requires": {
2108
+ "glob": "^7.0.0",
2109
+ "interpret": "^1.0.0",
2110
+ "rechoir": "^0.6.2"
2111
+ }
2112
+ },
2113
+ "shx": {
2114
+ "version": "0.3.4",
2115
+ "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz",
2116
+ "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==",
2117
+ "requires": {
2118
+ "minimist": "^1.2.3",
2119
+ "shelljs": "^0.8.5"
2120
+ }
2121
+ },
2122
+ "split": {
2123
+ "version": "0.3.3",
2124
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
2125
+ "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==",
2126
+ "dev": true,
2127
+ "requires": {
2128
+ "through": "2"
2129
+ }
2130
+ },
2131
+ "split-on-first": {
2132
+ "version": "1.1.0",
2133
+ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
2134
+ "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="
2135
+ },
2136
+ "statuses": {
2137
+ "version": "2.0.1",
2138
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
2139
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
2140
+ },
2141
+ "stream-combiner": {
2142
+ "version": "0.0.4",
2143
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
2144
+ "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==",
2145
+ "dev": true,
2146
+ "requires": {
2147
+ "duplexer": "~0.1.1"
2148
+ }
2149
+ },
2150
+ "strict-uri-encode": {
2151
+ "version": "2.0.0",
2152
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
2153
+ "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="
2154
+ },
2155
+ "string-argv": {
2156
+ "version": "0.3.2",
2157
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
2158
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
2159
+ "dev": true
2160
+ },
2161
+ "supports-preserve-symlinks-flag": {
2162
+ "version": "1.0.0",
2163
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2164
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
2165
+ },
2166
+ "through": {
2167
+ "version": "2.3.8",
2168
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2169
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
2170
+ "dev": true
2171
+ },
2172
+ "toidentifier": {
2173
+ "version": "1.0.1",
2174
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
2175
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
2176
+ },
2177
+ "tsc-watch": {
2178
+ "version": "6.2.1",
2179
+ "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-6.2.1.tgz",
2180
+ "integrity": "sha512-GLwdz5Dy9K3sVm3RzgkLcyDpl5cvU9HEcE1A3gf5rqEwlUe7gDLxNCgcuNEw3zoKOiegMo3LnbF1t6HLqxhrSA==",
2181
+ "dev": true,
2182
+ "requires": {
2183
+ "cross-spawn": "^7.0.3",
2184
+ "node-cleanup": "^2.1.2",
2185
+ "ps-tree": "^1.2.0",
2186
+ "string-argv": "^0.3.1"
2187
+ }
2188
+ },
2189
+ "typescript": {
2190
+ "version": "5.7.3",
2191
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
2192
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
2193
+ "dev": true
2194
+ },
2195
+ "undici-types": {
2196
+ "version": "6.19.8",
2197
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
2198
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
2199
+ "dev": true
2200
+ },
2201
+ "unpipe": {
2202
+ "version": "1.0.0",
2203
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2204
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
2205
+ },
2206
+ "which": {
2207
+ "version": "2.0.2",
2208
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2209
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2210
+ "dev": true,
2211
+ "requires": {
2212
+ "isexe": "^2.0.0"
2213
+ }
2214
+ },
2215
+ "wrappy": {
2216
+ "version": "1.0.2",
2217
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2218
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
2219
+ },
2220
+ "zod": {
2221
+ "version": "3.24.2",
2222
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
2223
+ "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="
2224
+ },
2225
+ "zod-to-json-schema": {
2226
+ "version": "3.24.2",
2227
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.2.tgz",
2228
+ "integrity": "sha512-pNUqrcSxuuB3/+jBbU8qKUbTbDqYUaG1vf5cXFjbhGgoUuA1amO/y4Q8lzfOhHU8HNPK6VFJ18lBDKj3OHyDsg==",
2229
+ "requires": {}
2230
+ }
2231
+ }
2232
+ }
package.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "@cablate/mcp-google-map",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "scripts": {
6
+ "build": "esbuild src/index.ts --bundle --platform=node --outfile=dist/index.cjs --external:pdfreader --external:jsdom --external:mammoth --external:csv-parse --external:libreoffice-convert && shx chmod +x dist/index.cjs",
7
+ "start": "node dist/index.js",
8
+ "dev": "tsc-watch --onSuccess \"node dist/index.js\""
9
+ },
10
+ "dependencies": {
11
+ "@googlemaps/google-maps-services-js": "^3.3.42",
12
+ "@modelcontextprotocol/sdk": "^1.5.0",
13
+ "dotenv": "^16.4.1",
14
+ "esbuild": "^0.25.0",
15
+ "shx": "^0.3.4"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^20.11.16",
19
+ "tsc-watch": "^6.0.4",
20
+ "typescript": "^5.3.3"
21
+ },
22
+ "author": "CabLate",
23
+ "files": [
24
+ "dist",
25
+ "dist/**/*.map",
26
+ "README.md"
27
+ ],
28
+ "bin": {
29
+ "mcp-google-map": "./dist/index.cjs"
30
+ },
31
+ "keywords": [
32
+ "google",
33
+ "map",
34
+ "api",
35
+ "llm",
36
+ "typescript",
37
+ "mcp"
38
+ ],
39
+ "homepage": "https://github.com/cablate/mcp-google-map#readme",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/cablate/mcp-google-map.git"
43
+ },
44
+ "bugs": {
45
+ "url": "https://github.com/cablate/mcp-google-map/issues"
46
+ }
47
+ }
src/index.ts ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env node
2
+
3
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
6
+ import { GET_PLACE_DETAILS_TOOL, SEARCH_NEARBY_TOOL } from "./maps-tools/mapsTools.js";
7
+ import { PlacesSearcher } from "./maps-tools/searchPlaces.js";
8
+
9
+ const tools = [SEARCH_NEARBY_TOOL, GET_PLACE_DETAILS_TOOL];
10
+ const placesSearcher = new PlacesSearcher();
11
+
12
+ const server = new Server(
13
+ {
14
+ name: "mcp-server/maps_executor",
15
+ version: "0.0.1",
16
+ },
17
+ {
18
+ capabilities: {
19
+ description: "An MCP server providing Google Maps integration!",
20
+ tools: {},
21
+ },
22
+ }
23
+ );
24
+
25
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
26
+ tools,
27
+ }));
28
+
29
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
30
+ try {
31
+ const { name, arguments: args } = request.params;
32
+
33
+ if (!args) {
34
+ throw new Error("No parameters provided");
35
+ }
36
+
37
+ if (name === "search_nearby") {
38
+ const { center, keyword, radius, openNow, minRating } = args as {
39
+ center: { value: string; isCoordinates: boolean };
40
+ keyword?: string;
41
+ radius?: number;
42
+ openNow?: boolean;
43
+ minRating?: number;
44
+ };
45
+
46
+ const result = await placesSearcher.searchNearby({
47
+ center,
48
+ keyword,
49
+ radius,
50
+ openNow,
51
+ minRating,
52
+ });
53
+
54
+ if (!result.success) {
55
+ return {
56
+ content: [{ type: "text", text: result.error || "搜尋失敗" }],
57
+ isError: true,
58
+ };
59
+ }
60
+
61
+ return {
62
+ content: [
63
+ {
64
+ type: "text",
65
+ text: `location: ${JSON.stringify(result.location, null, 2)}\n` + JSON.stringify(result.data, null, 2),
66
+ },
67
+ ],
68
+ isError: false,
69
+ };
70
+ }
71
+
72
+ if (name === "get_place_details") {
73
+ const { placeId } = args as {
74
+ placeId: string;
75
+ };
76
+
77
+ const result = await placesSearcher.getPlaceDetails(placeId);
78
+
79
+ if (!result.success) {
80
+ return {
81
+ content: [{ type: "text", text: result.error || "獲取詳細資訊失敗" }],
82
+ isError: true,
83
+ };
84
+ }
85
+
86
+ return {
87
+ content: [
88
+ {
89
+ type: "text",
90
+ text: JSON.stringify(result.data, null, 2),
91
+ },
92
+ ],
93
+ isError: false,
94
+ };
95
+ }
96
+
97
+ return {
98
+ content: [{ type: "text", text: `錯誤:未知的工具 ${name}` }],
99
+ isError: true,
100
+ };
101
+ } catch (error) {
102
+ return {
103
+ content: [
104
+ {
105
+ type: "text",
106
+ text: `錯誤:${error instanceof Error ? error.message : String(error)}`,
107
+ },
108
+ ],
109
+ isError: true,
110
+ };
111
+ }
112
+ });
113
+
114
+ async function runServer() {
115
+ try {
116
+ const transport = new StdioServerTransport();
117
+ await server.connect(transport);
118
+ console.log("MCP Maps Server started");
119
+ } catch (error) {
120
+ console.error("Server startup failed:", error);
121
+ process.exit(1);
122
+ }
123
+ }
124
+
125
+ runServer().catch((error) => {
126
+ console.error("Server encountered a critical error:", error);
127
+ process.exit(1);
128
+ });
src/maps-tools/mapsTools.ts ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export const SEARCH_NEARBY_TOOL = {
2
+ name: "search_nearby",
3
+ description: "搜尋附近的地點",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ center: {
8
+ type: "object",
9
+ properties: {
10
+ value: { type: "string", description: "地址、地標名稱或經緯度座標(經緯度座標格式: lat,lng)" },
11
+ isCoordinates: { type: "boolean", description: "是否為經緯度座標", default: false }
12
+ },
13
+ required: ["value"],
14
+ description: "搜尋中心點",
15
+ },
16
+ keyword: {
17
+ type: "string",
18
+ description: "搜尋關鍵字(例如:餐廳、咖啡廳)",
19
+ },
20
+ radius: {
21
+ type: "number",
22
+ description: "搜尋半徑(公尺)",
23
+ default: 1000,
24
+ },
25
+ openNow: {
26
+ type: "boolean",
27
+ description: "是否只顯示營業中的地點",
28
+ default: false,
29
+ },
30
+ minRating: {
31
+ type: "number",
32
+ description: "最低評分要求(0-5)",
33
+ minimum: 0,
34
+ maximum: 5,
35
+ },
36
+ },
37
+ required: ["center"],
38
+ },
39
+ };
40
+
41
+ export const GET_PLACE_DETAILS_TOOL = {
42
+ name: "get_place_details",
43
+ description: "獲取特定地點的詳細資訊",
44
+ inputSchema: {
45
+ type: "object",
46
+ properties: {
47
+ placeId: {
48
+ type: "string",
49
+ description: "Google Maps 地點 ID",
50
+ },
51
+ },
52
+ required: ["placeId"],
53
+ },
54
+ };
src/maps-tools/searchPlaces.ts ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { GoogleMapsTools } from "./toolclass.js";
2
+
3
+ interface SearchNearbyResponse {
4
+ success: boolean;
5
+ error?: string;
6
+ data?: any[];
7
+ location?: any;
8
+ }
9
+
10
+ interface PlaceDetailsResponse {
11
+ success: boolean;
12
+ error?: string;
13
+ data?: any;
14
+ }
15
+
16
+ export class PlacesSearcher {
17
+ private mapsTools: GoogleMapsTools;
18
+
19
+ constructor() {
20
+ this.mapsTools = new GoogleMapsTools();
21
+ }
22
+
23
+ async searchNearby(params: { center: { value: string; isCoordinates: boolean }; keyword?: string; radius?: number; openNow?: boolean; minRating?: number }): Promise<SearchNearbyResponse> {
24
+ try {
25
+ const location = await this.mapsTools.getLocation(params.center);
26
+ console.error(location);
27
+ const places = await this.mapsTools.searchNearbyPlaces({
28
+ location,
29
+ keyword: params.keyword,
30
+ radius: params.radius,
31
+ openNow: params.openNow,
32
+ minRating: params.minRating,
33
+ });
34
+
35
+ return {
36
+ location: location,
37
+ success: true,
38
+ data: places.map((place) => ({
39
+ name: place.name,
40
+ place_id: place.place_id,
41
+ address: place.formatted_address,
42
+ location: place.geometry.location,
43
+ rating: place.rating,
44
+ total_ratings: place.user_ratings_total,
45
+ open_now: place.opening_hours?.open_now,
46
+ })),
47
+ };
48
+ } catch (error) {
49
+ return {
50
+ success: false,
51
+ error: error instanceof Error ? error.message : "搜尋時發生錯誤",
52
+ };
53
+ }
54
+ }
55
+
56
+ async getPlaceDetails(placeId: string): Promise<PlaceDetailsResponse> {
57
+ try {
58
+ const details = await this.mapsTools.getPlaceDetails(placeId);
59
+
60
+ return {
61
+ success: true,
62
+ data: {
63
+ name: details.name,
64
+ address: details.formatted_address,
65
+ location: details.geometry?.location,
66
+ rating: details.rating,
67
+ total_ratings: details.user_ratings_total,
68
+ open_now: details.opening_hours?.open_now,
69
+ phone: details.formatted_phone_number,
70
+ website: details.website,
71
+ price_level: details.price_level,
72
+ reviews: details.reviews?.map((review) => ({
73
+ rating: review.rating,
74
+ text: review.text,
75
+ time: review.time,
76
+ author_name: review.author_name,
77
+ })),
78
+ },
79
+ };
80
+ } catch (error) {
81
+ return {
82
+ success: false,
83
+ error: error instanceof Error ? error.message : "獲取詳細資訊時發生錯誤",
84
+ };
85
+ }
86
+ }
87
+ }
src/maps-tools/toolclass.ts ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Client, Language } from "@googlemaps/google-maps-services-js";
2
+ import dotenv from "dotenv";
3
+
4
+ // 確保環境變數被載入
5
+ dotenv.config();
6
+
7
+ interface SearchParams {
8
+ location: { lat: number; lng: number };
9
+ radius?: number;
10
+ keyword?: string;
11
+ openNow?: boolean;
12
+ minRating?: number;
13
+ }
14
+
15
+ interface PlaceResult {
16
+ name: string;
17
+ place_id: string;
18
+ formatted_address?: string;
19
+ geometry: {
20
+ location: {
21
+ lat: number;
22
+ lng: number;
23
+ };
24
+ };
25
+ rating?: number;
26
+ user_ratings_total?: number;
27
+ opening_hours?: {
28
+ open_now?: boolean;
29
+ };
30
+ }
31
+
32
+ interface GeocodeResult {
33
+ lat: number;
34
+ lng: number;
35
+ }
36
+
37
+ export class GoogleMapsTools {
38
+ private client: Client;
39
+ private readonly defaultLanguage: Language = Language.zh_TW;
40
+
41
+ constructor() {
42
+ this.client = new Client({});
43
+ if (!process.env.GOOGLE_MAPS_API_KEY) {
44
+ throw new Error("Google Maps API Key is required");
45
+ }
46
+ }
47
+
48
+ async searchNearbyPlaces(params: SearchParams): Promise<PlaceResult[]> {
49
+ const searchParams = {
50
+ location: params.location,
51
+ radius: params.radius || 1000,
52
+ keyword: params.keyword,
53
+ opennow: params.openNow,
54
+ language: this.defaultLanguage,
55
+ key: process.env.GOOGLE_MAPS_API_KEY || "",
56
+ };
57
+
58
+ try {
59
+ const response = await this.client.placesNearby({
60
+ params: searchParams,
61
+ });
62
+
63
+ let results = response.data.results;
64
+
65
+ // 如果有最低評分要求,進行過濾
66
+ if (params.minRating) {
67
+ results = results.filter((place) => (place.rating || 0) >= (params.minRating || 0));
68
+ }
69
+
70
+ return results as PlaceResult[];
71
+ } catch (error) {
72
+ console.error("Error in searchNearbyPlaces:", error);
73
+ throw new Error("搜尋附近地點時發生錯誤");
74
+ }
75
+ }
76
+
77
+ async getPlaceDetails(placeId: string) {
78
+ try {
79
+ const response = await this.client.placeDetails({
80
+ params: {
81
+ place_id: placeId,
82
+ fields: ["name", "rating", "formatted_address", "opening_hours", "reviews", "geometry", "formatted_phone_number", "website", "price_level", "photos"],
83
+ language: this.defaultLanguage,
84
+ key: process.env.GOOGLE_MAPS_API_KEY || "",
85
+ },
86
+ });
87
+ return response.data.result;
88
+ } catch (error) {
89
+ console.error("Error in getPlaceDetails:", error);
90
+ throw new Error("獲取地點詳細資訊時發生錯誤");
91
+ }
92
+ }
93
+
94
+ private async geocodeAddress(address: string): Promise<GeocodeResult> {
95
+ try {
96
+ const response = await this.client.geocode({
97
+ params: {
98
+ address: address,
99
+ key: process.env.GOOGLE_MAPS_API_KEY || "",
100
+ language: this.defaultLanguage
101
+ }
102
+ });
103
+
104
+ if (response.data.results.length === 0) {
105
+ throw new Error("找不到該地址的位置");
106
+ }
107
+
108
+ const location = response.data.results[0].geometry.location;
109
+ return {
110
+ lat: location.lat,
111
+ lng: location.lng
112
+ };
113
+ } catch (error) {
114
+ console.error("Error in geocodeAddress:", error);
115
+ throw new Error("地址轉換座標時發生錯誤");
116
+ }
117
+ }
118
+
119
+ private parseCoordinates(coordString: string): GeocodeResult {
120
+ const coords = coordString.split(',').map(c => parseFloat(c.trim()));
121
+ if (coords.length !== 2 || isNaN(coords[0]) || isNaN(coords[1])) {
122
+ throw new Error("無效的座標格式,請使用「緯度,經度」格式");
123
+ }
124
+ return { lat: coords[0], lng: coords[1] };
125
+ }
126
+
127
+ async getLocation(center: { value: string; isCoordinates: boolean }): Promise<GeocodeResult> {
128
+ if (center.isCoordinates) {
129
+ return this.parseCoordinates(center.value);
130
+ }
131
+ return this.geocodeAddress(center.value);
132
+ }
133
+ }
tsconfig.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "outDir": "./dist",
7
+ "rootDir": "./src",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "forceConsistentCasingInFileNames": true
12
+ },
13
+ "include": ["src/**/*"],
14
+ "exclude": ["node_modules"]
15
+ }