@rnsk/toolkits 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +9 -1
  2. package/dist/index.d.ts +9 -1
  3. package/dist/index.js +17 -1
  4. package/dist/toolkits/bitbucket/icon.d.ts +5 -0
  5. package/dist/toolkits/bitbucket/icon.js +6 -0
  6. package/dist/toolkits/bitbucket/manifest.d.ts +3 -0
  7. package/dist/toolkits/bitbucket/manifest.js +56 -0
  8. package/dist/toolkits/bitbucket/tools/client.d.ts +38 -0
  9. package/dist/toolkits/bitbucket/tools/client.js +87 -0
  10. package/dist/toolkits/bitbucket/tools/commits.d.ts +149 -0
  11. package/dist/toolkits/bitbucket/tools/commits.js +444 -0
  12. package/dist/toolkits/bitbucket/tools/index.d.ts +1093 -0
  13. package/dist/toolkits/bitbucket/tools/index.js +770 -0
  14. package/dist/toolkits/bitbucket/tools/issues.d.ts +73 -0
  15. package/dist/toolkits/bitbucket/tools/issues.js +234 -0
  16. package/dist/toolkits/bitbucket/tools/pipelines.d.ts +124 -0
  17. package/dist/toolkits/bitbucket/tools/pipelines.js +446 -0
  18. package/dist/toolkits/bitbucket/tools/pull-requests.d.ts +174 -0
  19. package/dist/toolkits/bitbucket/tools/pull-requests.js +541 -0
  20. package/dist/toolkits/bitbucket/tools/reports.d.ts +84 -0
  21. package/dist/toolkits/bitbucket/tools/reports.js +213 -0
  22. package/dist/toolkits/bitbucket/tools/repositories.d.ts +156 -0
  23. package/dist/toolkits/bitbucket/tools/repositories.js +531 -0
  24. package/dist/toolkits/bitbucket/tools/search.d.ts +17 -0
  25. package/dist/toolkits/bitbucket/tools/search.js +67 -0
  26. package/dist/toolkits/bitbucket/tools/snippets.d.ts +34 -0
  27. package/dist/toolkits/bitbucket/tools/snippets.js +122 -0
  28. package/dist/toolkits/bitbucket/tools/users-workspaces.d.ts +65 -0
  29. package/dist/toolkits/bitbucket/tools/users-workspaces.js +294 -0
  30. package/dist/toolkits/discord/icon.d.ts +5 -0
  31. package/dist/toolkits/discord/icon.js +12 -0
  32. package/dist/toolkits/discord/manifest.d.ts +3 -0
  33. package/dist/toolkits/discord/manifest.js +52 -0
  34. package/dist/toolkits/discord/tools/applications.d.ts +79 -0
  35. package/dist/toolkits/discord/tools/applications.js +216 -0
  36. package/dist/toolkits/discord/tools/client.d.ts +22 -0
  37. package/dist/toolkits/discord/tools/client.js +69 -0
  38. package/dist/toolkits/discord/tools/guilds.d.ts +39 -0
  39. package/dist/toolkits/discord/tools/guilds.js +123 -0
  40. package/dist/toolkits/discord/tools/index.d.ts +222 -0
  41. package/dist/toolkits/discord/tools/index.js +170 -0
  42. package/dist/toolkits/discord/tools/misc.d.ts +7 -0
  43. package/dist/toolkits/discord/tools/misc.js +40 -0
  44. package/dist/toolkits/discord/tools/users.d.ts +28 -0
  45. package/dist/toolkits/discord/tools/users.js +128 -0
  46. package/dist/toolkits/figma/tools/index.d.ts +1 -1
  47. package/dist/toolkits/figma/tools/render-images-of-file-nodes.d.ts +1 -1
  48. package/dist/toolkits/gitlab/icon.d.ts +5 -0
  49. package/dist/toolkits/gitlab/icon.js +6 -0
  50. package/dist/toolkits/gitlab/manifest.d.ts +3 -0
  51. package/dist/toolkits/gitlab/manifest.js +36 -0
  52. package/dist/toolkits/gitlab/tools/client.d.ts +7 -0
  53. package/dist/toolkits/gitlab/tools/client.js +45 -0
  54. package/dist/toolkits/gitlab/tools/index.d.ts +306 -0
  55. package/dist/toolkits/gitlab/tools/index.js +36 -0
  56. package/dist/toolkits/gitlab/tools/issues.d.ts +45 -0
  57. package/dist/toolkits/gitlab/tools/issues.js +103 -0
  58. package/dist/toolkits/gitlab/tools/merge-requests.d.ts +35 -0
  59. package/dist/toolkits/gitlab/tools/merge-requests.js +91 -0
  60. package/dist/toolkits/gitlab/tools/pipelines.d.ts +30 -0
  61. package/dist/toolkits/gitlab/tools/pipelines.js +66 -0
  62. package/dist/toolkits/gitlab/tools/projects.d.ts +36 -0
  63. package/dist/toolkits/gitlab/tools/projects.js +94 -0
  64. package/dist/toolkits/gitlab/tools/repository.d.ts +21 -0
  65. package/dist/toolkits/gitlab/tools/repository.js +53 -0
  66. package/dist/toolkits/gitlab/tools/users-groups.d.ts +11 -0
  67. package/dist/toolkits/gitlab/tools/users-groups.js +30 -0
  68. package/dist/toolkits/google-ads/tools/get-rmf-report.d.ts +2 -2
  69. package/dist/toolkits/google-ads/tools/index.d.ts +2 -2
  70. package/dist/toolkits/google-analytics/icon.d.ts +5 -0
  71. package/dist/toolkits/google-analytics/icon.js +11 -0
  72. package/dist/toolkits/google-analytics/manifest.d.ts +3 -0
  73. package/dist/toolkits/google-analytics/manifest.js +48 -0
  74. package/dist/toolkits/google-analytics/tools/admin.d.ts +73 -0
  75. package/dist/toolkits/google-analytics/tools/admin.js +238 -0
  76. package/dist/toolkits/google-analytics/tools/audiences.d.ts +81 -0
  77. package/dist/toolkits/google-analytics/tools/audiences.js +190 -0
  78. package/dist/toolkits/google-analytics/tools/client.d.ts +47 -0
  79. package/dist/toolkits/google-analytics/tools/client.js +74 -0
  80. package/dist/toolkits/google-analytics/tools/custom-definitions.d.ts +62 -0
  81. package/dist/toolkits/google-analytics/tools/custom-definitions.js +106 -0
  82. package/dist/toolkits/google-analytics/tools/index.d.ts +16 -0
  83. package/dist/toolkits/google-analytics/tools/index.js +88 -0
  84. package/dist/toolkits/google-analytics/tools/links.d.ts +22 -0
  85. package/dist/toolkits/google-analytics/tools/links.js +56 -0
  86. package/dist/toolkits/google-analytics/tools/measurement.d.ts +3 -0
  87. package/dist/toolkits/google-analytics/tools/measurement.js +55 -0
  88. package/dist/toolkits/google-analytics/tools/reports.d.ts +136 -0
  89. package/dist/toolkits/google-analytics/tools/reports.js +200 -0
  90. package/dist/toolkits/google-contacts/icon.d.ts +5 -0
  91. package/dist/toolkits/google-contacts/icon.js +6 -0
  92. package/dist/toolkits/google-contacts/manifest.d.ts +3 -0
  93. package/dist/toolkits/google-contacts/manifest.js +48 -0
  94. package/dist/toolkits/google-contacts/tools/client.d.ts +19 -0
  95. package/dist/toolkits/google-contacts/tools/client.js +44 -0
  96. package/dist/toolkits/google-contacts/tools/contacts.d.ts +94 -0
  97. package/dist/toolkits/google-contacts/tools/contacts.js +273 -0
  98. package/dist/toolkits/google-contacts/tools/directory.d.ts +36 -0
  99. package/dist/toolkits/google-contacts/tools/directory.js +99 -0
  100. package/dist/toolkits/google-contacts/tools/groups.d.ts +68 -0
  101. package/dist/toolkits/google-contacts/tools/groups.js +169 -0
  102. package/dist/toolkits/google-contacts/tools/index.d.ts +347 -0
  103. package/dist/toolkits/google-contacts/tools/index.js +34 -0
  104. package/dist/toolkits/google-contacts/tools/photos.d.ts +26 -0
  105. package/dist/toolkits/google-contacts/tools/photos.js +52 -0
  106. package/dist/toolkits/google-maps/icon.d.ts +5 -0
  107. package/dist/toolkits/google-maps/icon.js +39 -0
  108. package/dist/toolkits/google-maps/manifest.d.ts +3 -0
  109. package/dist/toolkits/google-maps/manifest.js +55 -0
  110. package/dist/toolkits/google-maps/tools/client.d.ts +27 -0
  111. package/dist/toolkits/google-maps/tools/client.js +72 -0
  112. package/dist/toolkits/google-maps/tools/geocode.d.ts +49 -0
  113. package/dist/toolkits/google-maps/tools/geocode.js +168 -0
  114. package/dist/toolkits/google-maps/tools/index.d.ts +432 -0
  115. package/dist/toolkits/google-maps/tools/index.js +31 -0
  116. package/dist/toolkits/google-maps/tools/misc.d.ts +70 -0
  117. package/dist/toolkits/google-maps/tools/misc.js +158 -0
  118. package/dist/toolkits/google-maps/tools/places.d.ts +112 -0
  119. package/dist/toolkits/google-maps/tools/places.js +185 -0
  120. package/dist/toolkits/google-maps/tools/routes.d.ts +48 -0
  121. package/dist/toolkits/google-maps/tools/routes.js +97 -0
  122. package/dist/toolkits/google-maps/tools/tiles.d.ts +51 -0
  123. package/dist/toolkits/google-maps/tools/tiles.js +84 -0
  124. package/dist/toolkits/google-photos/icon.d.ts +5 -0
  125. package/dist/toolkits/google-photos/icon.js +6 -0
  126. package/dist/toolkits/google-photos/manifest.d.ts +3 -0
  127. package/dist/toolkits/google-photos/manifest.js +47 -0
  128. package/dist/toolkits/google-photos/tools/albums.d.ts +83 -0
  129. package/dist/toolkits/google-photos/tools/albums.js +180 -0
  130. package/dist/toolkits/google-photos/tools/client.d.ts +24 -0
  131. package/dist/toolkits/google-photos/tools/client.js +77 -0
  132. package/dist/toolkits/google-photos/tools/index.d.ts +261 -0
  133. package/dist/toolkits/google-photos/tools/index.js +22 -0
  134. package/dist/toolkits/google-photos/tools/media.d.ts +52 -0
  135. package/dist/toolkits/google-photos/tools/media.js +142 -0
  136. package/dist/toolkits/google-photos/tools/uploads.d.ts +58 -0
  137. package/dist/toolkits/google-photos/tools/uploads.js +107 -0
  138. package/dist/toolkits/google-tasks/tools/index.d.ts +1 -1
  139. package/dist/toolkits/google-tasks/tools/update-task-full.d.ts +1 -1
  140. package/dist/toolkits/groww/tools/index.d.ts +1 -1
  141. package/dist/toolkits/groww/tools/instruments.d.ts +1 -1
  142. package/dist/toolkits/reddit/tools/index.d.ts +1 -1
  143. package/dist/toolkits/reddit/tools/search-across-subreddits.d.ts +1 -1
  144. package/dist/toolkits/slack/icon.d.ts +5 -0
  145. package/dist/toolkits/slack/icon.js +20 -0
  146. package/dist/toolkits/slack/manifest.d.ts +3 -0
  147. package/dist/toolkits/slack/manifest.js +93 -0
  148. package/dist/toolkits/slack/tools/admin-apps.d.ts +32 -0
  149. package/dist/toolkits/slack/tools/admin-apps.js +116 -0
  150. package/dist/toolkits/slack/tools/admin-conversations.d.ts +62 -0
  151. package/dist/toolkits/slack/tools/admin-conversations.js +246 -0
  152. package/dist/toolkits/slack/tools/admin-invites.d.ts +19 -0
  153. package/dist/toolkits/slack/tools/admin-invites.js +75 -0
  154. package/dist/toolkits/slack/tools/admin-users.d.ts +52 -0
  155. package/dist/toolkits/slack/tools/admin-users.js +182 -0
  156. package/dist/toolkits/slack/tools/audit.d.ts +20 -0
  157. package/dist/toolkits/slack/tools/audit.js +81 -0
  158. package/dist/toolkits/slack/tools/calls.d.ts +38 -0
  159. package/dist/toolkits/slack/tools/calls.js +141 -0
  160. package/dist/toolkits/slack/tools/canvas.d.ts +24 -0
  161. package/dist/toolkits/slack/tools/canvas.js +102 -0
  162. package/dist/toolkits/slack/tools/client.d.ts +22 -0
  163. package/dist/toolkits/slack/tools/client.js +73 -0
  164. package/dist/toolkits/slack/tools/conversations.d.ts +131 -0
  165. package/dist/toolkits/slack/tools/conversations.js +463 -0
  166. package/dist/toolkits/slack/tools/emoji.d.ts +29 -0
  167. package/dist/toolkits/slack/tools/emoji.js +118 -0
  168. package/dist/toolkits/slack/tools/files.d.ts +113 -0
  169. package/dist/toolkits/slack/tools/files.js +368 -0
  170. package/dist/toolkits/slack/tools/index.d.ts +28 -0
  171. package/dist/toolkits/slack/tools/index.js +187 -0
  172. package/dist/toolkits/slack/tools/messages.d.ts +106 -0
  173. package/dist/toolkits/slack/tools/messages.js +340 -0
  174. package/dist/toolkits/slack/tools/misc.d.ts +42 -0
  175. package/dist/toolkits/slack/tools/misc.js +127 -0
  176. package/dist/toolkits/slack/tools/reactions-stars-pins.d.ts +69 -0
  177. package/dist/toolkits/slack/tools/reactions-stars-pins.js +236 -0
  178. package/dist/toolkits/slack/tools/reminders.d.ts +22 -0
  179. package/dist/toolkits/slack/tools/reminders.js +83 -0
  180. package/dist/toolkits/slack/tools/search.d.ts +49 -0
  181. package/dist/toolkits/slack/tools/search.js +155 -0
  182. package/dist/toolkits/slack/tools/slack-lists.d.ts +65 -0
  183. package/dist/toolkits/slack/tools/slack-lists.js +282 -0
  184. package/dist/toolkits/slack/tools/teams.d.ts +75 -0
  185. package/dist/toolkits/slack/tools/teams.js +285 -0
  186. package/dist/toolkits/slack/tools/usergroups.d.ts +56 -0
  187. package/dist/toolkits/slack/tools/usergroups.js +194 -0
  188. package/dist/toolkits/slack/tools/users.d.ts +87 -0
  189. package/dist/toolkits/slack/tools/users.js +396 -0
  190. package/dist/toolkits/youtube/tools/add-video-to-playlist.d.ts +1 -1
  191. package/dist/toolkits/youtube/tools/delete-video.d.ts +1 -1
  192. package/dist/toolkits/youtube/tools/index.d.ts +10 -10
  193. package/dist/toolkits/youtube/tools/list-caption-track.d.ts +1 -1
  194. package/dist/toolkits/youtube/tools/list-playlist-items.d.ts +1 -1
  195. package/dist/toolkits/youtube/tools/list-video-categories.d.ts +1 -1
  196. package/dist/toolkits/youtube/tools/post-comment.d.ts +1 -1
  197. package/dist/toolkits/youtube/tools/report-video-abuse.d.ts +1 -1
  198. package/dist/toolkits/youtube/tools/search-youtube.d.ts +1 -1
  199. package/dist/toolkits/youtube/tools/update-thumbnail.d.ts +1 -1
  200. package/dist/toolkits/youtube/tools/update-video.d.ts +1 -1
  201. package/package.json +1 -1
@@ -0,0 +1,158 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ import { AERIAL_API_BASE, googleMapsTokenField, mapsRequest } from './client.js';
5
+ export const geolocateDevice = tool({
6
+ description: 'Estimates device location from cell towers and WiFi (2+ APs recommended). Falls back to IP unless considerIp=false.',
7
+ inputSchema: z.object({
8
+ googleMapsToken: googleMapsTokenField,
9
+ key: z.string().optional().describe('API key (Geolocation prefers key auth)'),
10
+ homeMobileCountryCode: z.number().min(0).max(999).optional(),
11
+ homeMobileNetworkCode: z.number().min(0).max(32767).optional(),
12
+ radioType: z.enum(['gsm', 'cdma', 'wcdma', 'lte', 'nr']).optional().describe("Radio type (default 'gsm')"),
13
+ carrier: z.string().optional(),
14
+ considerIp: z.boolean().optional().describe('IP fallback (default true)'),
15
+ cellTowers: z.array(z.record(z.any())).optional().describe('Cell towers with cellId/MCC/MNC/LAC'),
16
+ wifiAccessPoints: z.array(z.object({
17
+ macAddress: z.string().describe('Colon-separated MAC'),
18
+ signalStrength: z.number().min(-128).max(-10).optional().describe('dBm (-128 to -10)'),
19
+ age: z.number().min(0).optional(),
20
+ channel: z.number().min(1).optional(),
21
+ signalToNoiseRatio: z.number().optional(),
22
+ })).optional(),
23
+ }),
24
+ execute: async ({ googleMapsToken, key, ...body }) => {
25
+ try {
26
+ const result = await mapsRequest(googleMapsToken, 'https://www.googleapis.com', '/geolocation/v1/geolocate', {
27
+ method: 'POST',
28
+ query: { key },
29
+ body,
30
+ });
31
+ if (!result.ok)
32
+ return { error: 'Failed to geolocate device', details: result.error };
33
+ return result.data;
34
+ }
35
+ catch (error) {
36
+ return { error: 'Error geolocating device', message: error instanceof Error ? error.message : 'Unknown error' };
37
+ }
38
+ },
39
+ });
40
+ export const getTimeZone = tool({
41
+ description: 'Gets time zone ID, UTC/DST offsets, and localized name for coordinates at a Unix timestamp (DST-aware).',
42
+ inputSchema: z.object({
43
+ googleMapsToken: googleMapsTokenField,
44
+ location: z.string().describe("Coordinates 'lat,lng', e.g. '39.6034810,-119.6822510'"),
45
+ timestamp: z.number().describe('Unix epoch seconds for DST evaluation'),
46
+ language: z.string().optional().describe("Language for the zone name, e.g. 'en'"),
47
+ key: z.string().optional().describe('API key alternative to Bearer auth'),
48
+ }),
49
+ execute: async ({ googleMapsToken, location, timestamp, language, key }) => {
50
+ try {
51
+ const result = await mapsRequest(googleMapsToken, 'https://maps.googleapis.com', '/maps/api/timezone/json', {
52
+ query: { location, timestamp, language, key },
53
+ });
54
+ if (!result.ok)
55
+ return { error: 'Failed to get time zone', details: result.error };
56
+ return result.data;
57
+ }
58
+ catch (error) {
59
+ return { error: 'Error getting time zone', message: error instanceof Error ? error.message : 'Unknown error' };
60
+ }
61
+ },
62
+ });
63
+ const embedParams = z.record(z.any()).optional().describe('Mode params: zoom, center, region, maptype, language plus mode-specific fields');
64
+ export const embedGoogleMap = tool({
65
+ description: 'Builds a public Maps Embed URL + iframe for place/view/directions/streetview/search. API-key only (no OAuth) — pass apiKey. No API call is made.',
66
+ inputSchema: z.object({
67
+ mode: z.enum(['place', 'view', 'directions', 'streetview', 'search']).describe('Embed mode'),
68
+ apiKey: z.string().describe('Maps API key (Embed requires key auth)'),
69
+ placeParams: z.object({ q: z.string().describe('Place name, address, plus code, or place_id:...') }).catchall(z.unknown()).optional().describe("Place mode (q required)"),
70
+ viewParams: z.object({ center: z.string().describe("Center 'lat,lng' (required)") }).catchall(z.unknown()).optional().describe('View mode'),
71
+ directionsParams: z.object({ origin: z.string(), destination: z.string() }).catchall(z.unknown()).optional().describe('Directions mode (origin + destination required)'),
72
+ streetviewParams: z.object({}).catchall(z.unknown()).optional().describe("Streetview mode (location or pano required)"),
73
+ searchParams: z.object({ q: z.string().describe('Search term (required)') }).catchall(z.unknown()).optional().describe('Search mode'),
74
+ }),
75
+ execute: async ({ mode, apiKey, placeParams, viewParams, directionsParams, streetviewParams, searchParams }) => {
76
+ try {
77
+ const modeParams = { place: placeParams, view: viewParams, directions: directionsParams, streetview: streetviewParams, search: searchParams }[mode];
78
+ if (!modeParams)
79
+ return { error: `Parameters for mode '${mode}' are required` };
80
+ const required = {
81
+ place: ['q'],
82
+ view: ['center'],
83
+ directions: ['origin', 'destination'],
84
+ streetview: [],
85
+ search: ['q'],
86
+ };
87
+ for (const field of required[mode]) {
88
+ if (modeParams[field] === undefined) {
89
+ return { error: `Mode '${mode}' requires '${field}'` };
90
+ }
91
+ }
92
+ if (mode === 'streetview' && modeParams.location === undefined && modeParams.pano === undefined) {
93
+ return { error: "Streetview mode requires 'location' or 'pano'" };
94
+ }
95
+ const search = new URLSearchParams({ key: apiKey });
96
+ for (const [k, v] of Object.entries(modeParams)) {
97
+ if (v !== undefined)
98
+ search.set(k, String(v));
99
+ }
100
+ const iframeUrl = `https://www.google.com/maps/embed/v1/${mode}?${search.toString()}`;
101
+ return {
102
+ iframeUrl,
103
+ htmlEmbedCode: `<iframe width="600" height="450" style="border:0" loading="lazy" allowfullscreen referrerpolicy="no-referrer-when-downgrade" src="${iframeUrl}"></iframe>`,
104
+ };
105
+ }
106
+ catch (error) {
107
+ return { error: 'Error building embed URL', message: error instanceof Error ? error.message : 'Unknown error' };
108
+ }
109
+ },
110
+ });
111
+ export const lookupAerialVideo = tool({
112
+ description: 'Looks up an aerial video by US address or video ID. Receiving a video is billable; poll state until ACTIVE for URIs.',
113
+ inputSchema: z.object({
114
+ googleMapsToken: googleMapsTokenField,
115
+ address: z.string().optional().describe('US postal address (exclusive with videoId)'),
116
+ videoId: z.string().optional().describe('ID from renderVideo (exclusive with address)'),
117
+ key: z.string().optional().describe('API key alternative to Bearer auth'),
118
+ }),
119
+ execute: async ({ googleMapsToken, address, videoId, key }) => {
120
+ try {
121
+ if (!!address === !!videoId)
122
+ return { error: 'Provide exactly one of address or videoId' };
123
+ const result = await mapsRequest(googleMapsToken, AERIAL_API_BASE, '/videos:lookupVideo', {
124
+ query: { address, videoId, key },
125
+ });
126
+ if (!result.ok)
127
+ return { error: 'Failed to look up aerial video', details: result.error };
128
+ return result.data;
129
+ }
130
+ catch (error) {
131
+ return { error: 'Error looking up aerial video', message: error instanceof Error ? error.message : 'Unknown error' };
132
+ }
133
+ },
134
+ });
135
+ export const renderAerialVideo = tool({
136
+ description: 'Starts an aerial video render for a US address. Returns a videoId — poll lookupVideo until ACTIVE (takes up to hours).',
137
+ inputSchema: z.object({
138
+ googleMapsToken: googleMapsTokenField,
139
+ address: z.string().describe('US postal address with street, city, state, postal code'),
140
+ key: z.string().optional().describe('API key alternative to Bearer auth'),
141
+ }),
142
+ execute: async ({ googleMapsToken, address, key }) => {
143
+ try {
144
+ const result = await mapsRequest(googleMapsToken, AERIAL_API_BASE, '/videos:renderVideo', {
145
+ method: 'POST',
146
+ query: { key },
147
+ body: { address },
148
+ });
149
+ if (!result.ok)
150
+ return { error: 'Failed to render aerial video', details: result.error };
151
+ return result.data;
152
+ }
153
+ catch (error) {
154
+ return { error: 'Error rendering aerial video', message: error instanceof Error ? error.message : 'Unknown error' };
155
+ }
156
+ },
157
+ });
158
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1,112 @@
1
+ export declare const autocompletePlaces: import("ai").Tool<{
2
+ input: string;
3
+ googleMapsToken: string;
4
+ origin?: {
5
+ latitude: number;
6
+ longitude: number;
7
+ } | undefined;
8
+ languageCode?: string | undefined;
9
+ regionCode?: string | undefined;
10
+ sessionToken?: string | undefined;
11
+ inputOffset?: number | undefined;
12
+ locationBias?: {
13
+ circle?: {
14
+ center: {
15
+ latitude: number;
16
+ longitude: number;
17
+ };
18
+ radius: number;
19
+ } | undefined;
20
+ rectangle?: {
21
+ low: {
22
+ latitude: number;
23
+ longitude: number;
24
+ };
25
+ high: {
26
+ latitude: number;
27
+ longitude: number;
28
+ };
29
+ } | undefined;
30
+ } | undefined;
31
+ locationRestriction?: {
32
+ circle?: {
33
+ center: {
34
+ latitude: number;
35
+ longitude: number;
36
+ };
37
+ radius: number;
38
+ } | undefined;
39
+ rectangle?: {
40
+ low: {
41
+ latitude: number;
42
+ longitude: number;
43
+ };
44
+ high: {
45
+ latitude: number;
46
+ longitude: number;
47
+ };
48
+ } | undefined;
49
+ } | undefined;
50
+ includedRegionCodes?: string[] | undefined;
51
+ includedPrimaryTypes?: string[] | undefined;
52
+ includeQueryPredictions?: boolean | undefined;
53
+ includePureServiceAreaBusinesses?: boolean | undefined;
54
+ }, any>;
55
+ export declare const getPlaceDetails: import("ai").Tool<{
56
+ name: string;
57
+ googleMapsToken: string;
58
+ languageCode?: string | undefined;
59
+ regionCode?: string | undefined;
60
+ sessionToken?: string | undefined;
61
+ fieldMask?: string | undefined;
62
+ }, any>;
63
+ export declare const textSearchPlaces: import("ai").Tool<{
64
+ googleMapsToken: string;
65
+ textQuery: string;
66
+ fieldMask?: string | undefined;
67
+ maxResultCount?: number | undefined;
68
+ }, any>;
69
+ export declare const nearbySearchPlaces: import("ai").Tool<{
70
+ googleMapsToken: string;
71
+ latitude: number;
72
+ longitude: number;
73
+ radius: number;
74
+ fieldMask?: string | undefined;
75
+ maxResultCount?: number | undefined;
76
+ includedTypes?: string[] | undefined;
77
+ excludedTypes?: string[] | undefined;
78
+ }, any>;
79
+ export declare const getPlacePhoto: import("ai").Tool<{
80
+ googleMapsToken: string;
81
+ photoReference: string;
82
+ apiKey?: string | undefined;
83
+ maxWidthPx?: number | undefined;
84
+ maxHeightPx?: number | undefined;
85
+ skipHttpRedirect?: boolean | undefined;
86
+ }, {
87
+ error: string;
88
+ details?: undefined;
89
+ photo?: undefined;
90
+ message?: undefined;
91
+ } | {
92
+ error: string;
93
+ details: any;
94
+ photo?: undefined;
95
+ message?: undefined;
96
+ } | {
97
+ photo: {
98
+ name: string;
99
+ mimetype: string;
100
+ contentBase64: string | undefined;
101
+ byteSize: number | undefined;
102
+ };
103
+ error?: undefined;
104
+ details?: undefined;
105
+ message?: undefined;
106
+ } | {
107
+ error: string;
108
+ message: string;
109
+ details?: undefined;
110
+ photo?: undefined;
111
+ }>;
112
+ //# sourceMappingURL=places.d.ts.map
@@ -0,0 +1,185 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ import { PLACES_API_BASE, googleMapsTokenField, mapsRequest, normalizePlaceName, toFieldMask, } from './client.js';
5
+ const latlng = z.object({
6
+ latitude: z.number().min(-90).max(90),
7
+ longitude: z.number().min(-180).max(180),
8
+ });
9
+ const circleArea = z.object({
10
+ center: latlng.describe('Center point'),
11
+ radius: z.number().min(0).max(50000).describe('Radius in meters (0-50000)'),
12
+ });
13
+ const rectangleArea = z.object({
14
+ low: latlng.describe('Southwest corner'),
15
+ high: latlng.describe('Northeast corner'),
16
+ });
17
+ const areaSchema = z.object({ circle: circleArea.optional(), rectangle: rectangleArea.optional() });
18
+ export const autocompletePlaces = tool({
19
+ description: 'Returns up to 5 place/query predictions for as-you-type input, ordered by relevance. Use a sessionToken to group calls for billing.',
20
+ inputSchema: z.object({
21
+ googleMapsToken: googleMapsTokenField,
22
+ input: z.string().min(1).describe('Text to predict: names, addresses, plus codes'),
23
+ languageCode: z.string().optional().describe("BCP-47 language, e.g. 'en-US'"),
24
+ regionCode: z.string().optional().describe("ccTLD region for formatting, e.g. 'us'"),
25
+ sessionToken: z.string().optional().describe('Session string for billing grouping'),
26
+ origin: latlng.optional().describe('Point for distance calculations'),
27
+ inputOffset: z.number().min(0).optional().describe('Cursor offset in input'),
28
+ locationBias: areaSchema.optional().describe('Area to prefer'),
29
+ locationRestriction: areaSchema.optional().describe('Area to restrict to'),
30
+ includedRegionCodes: z.array(z.string()).max(15).optional().describe('ISO country codes to restrict to (disables query predictions)'),
31
+ includedPrimaryTypes: z.array(z.string()).max(5).optional().describe("Place types, e.g. ['restaurant']"),
32
+ includeQueryPredictions: z.boolean().optional(),
33
+ includePureServiceAreaBusinesses: z.boolean().optional(),
34
+ }),
35
+ execute: async ({ googleMapsToken, ...body }) => {
36
+ try {
37
+ const result = await mapsRequest(googleMapsToken, PLACES_API_BASE, '/places:autocomplete', {
38
+ method: 'POST',
39
+ body,
40
+ });
41
+ if (!result.ok)
42
+ return { error: 'Failed to autocomplete places', details: result.error };
43
+ return result.data;
44
+ }
45
+ catch (error) {
46
+ return { error: 'Error autocompleting places', message: error instanceof Error ? error.message : 'Unknown error' };
47
+ }
48
+ },
49
+ });
50
+ export const getPlaceDetails = tool({
51
+ description: 'Gets full details for a place ID (find IDs via text/nearby search first — never pass names or addresses). Select fields via fieldMask for cost/performance.',
52
+ inputSchema: z.object({
53
+ googleMapsToken: googleMapsTokenField,
54
+ name: z.string().describe("Place ID as 'places/{id}' or bare ID"),
55
+ fieldMask: z.string().optional().describe("Fields, e.g. 'id,displayName,formattedAddress' (default those three)"),
56
+ languageCode: z.string().optional().describe("BCP-47 language, e.g. 'en'"),
57
+ regionCode: z.string().optional().describe("CLDR region, e.g. 'US'"),
58
+ sessionToken: z.string().optional().describe('Autocomplete session token for billing'),
59
+ }),
60
+ execute: async ({ googleMapsToken, name, fieldMask, languageCode, regionCode, sessionToken }) => {
61
+ try {
62
+ const result = await mapsRequest(googleMapsToken, PLACES_API_BASE, `/${normalizePlaceName(name)}`, {
63
+ query: { languageCode, regionCode, sessionToken },
64
+ headers: { 'X-Goog-FieldMask': toFieldMask(fieldMask, '', 'id,displayName,formattedAddress') },
65
+ });
66
+ if (!result.ok)
67
+ return { error: 'Failed to get place details', details: result.error };
68
+ return result.data;
69
+ }
70
+ catch (error) {
71
+ return { error: 'Error getting place details', message: error instanceof Error ? error.message : 'Unknown error' };
72
+ }
73
+ },
74
+ });
75
+ export const textSearchPlaces = tool({
76
+ description: 'Searches places by text query ("restaurants in London"). Include city/region/type for precision; filter CLOSED places by businessStatus; dedupe by id; throttle ~1 req/s.',
77
+ inputSchema: z.object({
78
+ googleMapsToken: googleMapsTokenField,
79
+ textQuery: z.string().min(1).describe('Query matched against name, address, category'),
80
+ fieldMask: z.string().optional().describe("Fields (default 'places.displayName,places.formattedAddress,places.priceLevel')"),
81
+ maxResultCount: z.number().min(1).max(20).optional().describe('Results to return (1-20, default 10)'),
82
+ }),
83
+ execute: async ({ googleMapsToken, textQuery, fieldMask, maxResultCount }) => {
84
+ try {
85
+ const result = await mapsRequest(googleMapsToken, PLACES_API_BASE, '/places:searchText', {
86
+ method: 'POST',
87
+ headers: { 'X-Goog-FieldMask': toFieldMask(fieldMask, 'places', 'places.displayName,places.formattedAddress,places.priceLevel') },
88
+ body: { textQuery, maxResultCount },
89
+ });
90
+ if (!result.ok)
91
+ return { error: 'Failed to text search places', details: result.error };
92
+ return result.data;
93
+ }
94
+ catch (error) {
95
+ return { error: 'Error text searching places', message: error instanceof Error ? error.message : 'Unknown error' };
96
+ }
97
+ },
98
+ });
99
+ export const nearbySearchPlaces = tool({
100
+ description: 'Finds places in a circle (radius ≤50000m, max 20 results). Use Table-A types (restaurant, not food); locality/city/town/sublocality/landmark are invalid filters.',
101
+ inputSchema: z.object({
102
+ googleMapsToken: googleMapsTokenField,
103
+ latitude: z.number().min(-90).max(90).describe('Search center latitude'),
104
+ longitude: z.number().min(-180).max(180).describe('Search center longitude'),
105
+ radius: z.number().min(0).max(50000).describe('Radius in meters'),
106
+ includedTypes: z.array(z.string()).max(50).optional().describe("Table-A types to include, e.g. ['restaurant']"),
107
+ excludedTypes: z.array(z.string()).max(50).optional().describe('Table-A types to exclude'),
108
+ maxResultCount: z.number().min(1).max(20).optional().describe('Results (1-20, default 10)'),
109
+ fieldMask: z.string().optional().describe("Fields (default 'places.displayName')"),
110
+ }),
111
+ execute: async ({ googleMapsToken, latitude, longitude, radius, includedTypes, excludedTypes, maxResultCount, fieldMask }) => {
112
+ try {
113
+ const body = {
114
+ locationRestriction: { circle: { center: { latitude, longitude }, radius } },
115
+ };
116
+ if (includedTypes)
117
+ body.includedTypes = includedTypes;
118
+ if (excludedTypes)
119
+ body.excludedTypes = excludedTypes;
120
+ if (maxResultCount !== undefined)
121
+ body.maxResultCount = maxResultCount;
122
+ const result = await mapsRequest(googleMapsToken, PLACES_API_BASE, '/places:searchNearby', {
123
+ method: 'POST',
124
+ headers: { 'X-Goog-FieldMask': toFieldMask(fieldMask, 'places', 'places.displayName') },
125
+ body,
126
+ });
127
+ if (!result.ok)
128
+ return { error: 'Failed to nearby search places', details: result.error };
129
+ return result.data;
130
+ }
131
+ catch (error) {
132
+ return { error: 'Error nearby searching places', message: error instanceof Error ? error.message : 'Unknown error' };
133
+ }
134
+ },
135
+ });
136
+ export const getPlacePhoto = tool({
137
+ description: 'Downloads a place photo by resource name (places/{id}/photos/{ref}) as base64 bytes. Needs maxWidthPx and/or maxHeightPx (1-4800). Show attribution from the search/details response.',
138
+ inputSchema: z.object({
139
+ googleMapsToken: googleMapsTokenField,
140
+ photoReference: z.string().describe("Photo name 'places/{id}/photos/{ref}' (legacy bare refs need apiKey)"),
141
+ maxWidthPx: z.number().min(1).max(4800).optional().describe('Max width (1-4800)'),
142
+ maxHeightPx: z.number().min(1).max(4800).optional().describe('Max height (1-4800)'),
143
+ apiKey: z.string().optional().describe('API key for legacy bare photo references'),
144
+ skipHttpRedirect: z.boolean().optional(),
145
+ }),
146
+ execute: async ({ googleMapsToken, photoReference, maxWidthPx, maxHeightPx, apiKey, skipHttpRedirect }) => {
147
+ try {
148
+ if (photoReference.startsWith('places/')) {
149
+ if (maxWidthPx === undefined && maxHeightPx === undefined) {
150
+ return { error: 'Provide maxWidthPx and/or maxHeightPx' };
151
+ }
152
+ const result = await mapsRequest(googleMapsToken, PLACES_API_BASE, `/${photoReference}/media`, {
153
+ query: { maxWidthPx, maxHeightPx, skipHttpRedirect },
154
+ responseType: 'bytes',
155
+ });
156
+ if (!result.ok)
157
+ return { error: 'Failed to get place photo', details: result.error };
158
+ const data = result.data;
159
+ return { photo: { name: `photo-${Date.now()}.jpg`, mimetype: data.mimetype ?? 'image/jpeg', contentBase64: data.contentBase64, byteSize: data.byteSize } };
160
+ }
161
+ if (!apiKey)
162
+ return { error: 'Legacy photo references require apiKey' };
163
+ const url = `https://maps.googleapis.com/maps/api/place/photo?photoreference=${encodeURIComponent(photoReference)}` +
164
+ `&key=${encodeURIComponent(apiKey)}` +
165
+ (maxWidthPx !== undefined ? `&maxwidth=${maxWidthPx}` : '') +
166
+ (maxHeightPx !== undefined ? `&maxheight=${maxHeightPx}` : '');
167
+ const response = await fetch(url);
168
+ if (!response.ok)
169
+ return { error: `Photo download failed (HTTP ${response.status})` };
170
+ const bytes = Buffer.from(await response.arrayBuffer());
171
+ return {
172
+ photo: {
173
+ name: `photo-${Date.now()}.jpg`,
174
+ mimetype: response.headers.get('content-type') ?? 'image/jpeg',
175
+ contentBase64: bytes.toString('base64'),
176
+ byteSize: bytes.length,
177
+ },
178
+ };
179
+ }
180
+ catch (error) {
181
+ return { error: 'Error getting place photo', message: error instanceof Error ? error.message : 'Unknown error' };
182
+ }
183
+ },
184
+ });
185
+ //# sourceMappingURL=places.js.map
@@ -0,0 +1,48 @@
1
+ export declare const computeRouteMatrix: import("ai").Tool<{
2
+ googleMapsToken: string;
3
+ origins: {
4
+ latitude?: number | undefined;
5
+ longitude?: number | undefined;
6
+ address?: string | undefined;
7
+ }[];
8
+ destinations: {
9
+ latitude?: number | undefined;
10
+ longitude?: number | undefined;
11
+ address?: string | undefined;
12
+ }[];
13
+ languageCode?: string | undefined;
14
+ fieldMask?: string | undefined;
15
+ travelMode?: "DRIVE" | "WALK" | "BICYCLE" | "TWO_WHEELER" | "TRANSIT" | undefined;
16
+ routingPreference?: "ROUTING_PREFERENCE_UNSPECIFIED" | "TRAFFIC_UNAWARE" | "TRAFFIC_AWARE" | "TRAFFIC_AWARE_OPTIMAL" | undefined;
17
+ units?: "METRIC" | "IMPERIAL" | undefined;
18
+ }, any>;
19
+ export declare const getRoute: import("ai").Tool<{
20
+ googleMapsToken: string;
21
+ originAddress: string;
22
+ destinationAddress: string;
23
+ languageCode?: string | undefined;
24
+ fieldMask?: string | undefined;
25
+ travelMode?: "DRIVE" | "WALK" | "BICYCLE" | "TWO_WHEELER" | "TRANSIT" | undefined;
26
+ routingPreference?: "ROUTING_PREFERENCE_UNSPECIFIED" | "TRAFFIC_UNAWARE" | "TRAFFIC_AWARE" | "TRAFFIC_AWARE_OPTIMAL" | undefined;
27
+ units?: "METRIC" | "IMPERIAL" | undefined;
28
+ avoidTolls?: boolean | undefined;
29
+ avoidHighways?: boolean | undefined;
30
+ avoidFerries?: boolean | undefined;
31
+ computeAlternativeRoutes?: boolean | undefined;
32
+ }, {
33
+ error: string;
34
+ details: any;
35
+ responseData?: undefined;
36
+ message?: undefined;
37
+ } | {
38
+ responseData: any;
39
+ error?: undefined;
40
+ details?: undefined;
41
+ message?: undefined;
42
+ } | {
43
+ error: string;
44
+ message: string;
45
+ details?: undefined;
46
+ responseData?: undefined;
47
+ }>;
48
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1,97 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ import { ROUTES_API_BASE, googleMapsTokenField, mapsRequest } from './client.js';
5
+ const waypoint = z.object({
6
+ address: z.string().optional().describe('Address string'),
7
+ latitude: z.number().optional(),
8
+ longitude: z.number().optional(),
9
+ });
10
+ function toRouteWaypoint(w) {
11
+ if (w.address)
12
+ return { address: w.address };
13
+ return { location: { latLng: { latitude: w.latitude, longitude: w.longitude } } };
14
+ }
15
+ export const computeRouteMatrix = tool({
16
+ description: 'Computes distance/duration for every origin×destination pair (cap 625 elements — chunk larger sets). Map results via originIndex/destinationIndex; only trust condition ROUTE_EXISTS.',
17
+ inputSchema: z.object({
18
+ googleMapsToken: googleMapsTokenField,
19
+ origins: z.array(waypoint).min(1).describe('Origins as addresses or lat/lng'),
20
+ destinations: z.array(waypoint).min(1).describe('Destinations as addresses or lat/lng'),
21
+ travelMode: z.enum(['DRIVE', 'BICYCLE', 'WALK', 'TWO_WHEELER', 'TRANSIT']).optional().describe('Default DRIVE'),
22
+ routingPreference: z.enum(['ROUTING_PREFERENCE_UNSPECIFIED', 'TRAFFIC_UNAWARE', 'TRAFFIC_AWARE', 'TRAFFIC_AWARE_OPTIMAL']).optional().describe('Default TRAFFIC_AWARE'),
23
+ languageCode: z.string().optional().describe("BCP-47 language (default 'en-US')"),
24
+ units: z.enum(['METRIC', 'IMPERIAL']).optional().describe('Display units only; distanceMeters stays metric (default IMPERIAL)'),
25
+ fieldMask: z.string().optional().describe("Response fields (default 'originIndex,destinationIndex,duration,distanceMeters,status,condition')"),
26
+ }),
27
+ execute: async ({ googleMapsToken, origins, destinations, travelMode, routingPreference, languageCode, units, fieldMask }) => {
28
+ try {
29
+ if (origins.length * destinations.length > 625) {
30
+ return { error: `Matrix of ${origins.length * destinations.length} exceeds the 625-element cap — chunk into smaller sets` };
31
+ }
32
+ const body = {
33
+ origins: origins.map(toRouteWaypoint),
34
+ destinations: destinations.map(toRouteWaypoint),
35
+ };
36
+ if (travelMode)
37
+ body.travelMode = travelMode;
38
+ if (routingPreference)
39
+ body.routingPreference = routingPreference;
40
+ if (languageCode)
41
+ body.languageCode = languageCode;
42
+ if (units)
43
+ body.units = units;
44
+ const result = await mapsRequest(googleMapsToken, ROUTES_API_BASE, '/distanceMatrix/v2:computeRouteMatrix', {
45
+ method: 'POST',
46
+ headers: { 'X-Goog-FieldMask': fieldMask ?? 'originIndex,destinationIndex,duration,distanceMeters,status,condition' },
47
+ body,
48
+ });
49
+ if (!result.ok)
50
+ return { error: 'Failed to compute route matrix', details: result.error };
51
+ return result.data;
52
+ }
53
+ catch (error) {
54
+ return { error: 'Error computing route matrix', message: error instanceof Error ? error.message : 'Unknown error' };
55
+ }
56
+ },
57
+ });
58
+ export const getRoute = tool({
59
+ description: 'Computes routes between two addresses/coordinates with waypoints and travel preferences. Duration strings end in "s" (e.g. "4557s") — parse before display.',
60
+ inputSchema: z.object({
61
+ googleMapsToken: googleMapsTokenField,
62
+ originAddress: z.string().describe("Origin address or 'lat,lng'"),
63
+ destinationAddress: z.string().describe("Destination address or 'lat,lng'"),
64
+ travelMode: z.enum(['DRIVE', 'BICYCLE', 'WALK', 'TWO_WHEELER', 'TRANSIT']).optional().describe('Default DRIVE'),
65
+ routingPreference: z.enum(['ROUTING_PREFERENCE_UNSPECIFIED', 'TRAFFIC_UNAWARE', 'TRAFFIC_AWARE', 'TRAFFIC_AWARE_OPTIMAL']).optional(),
66
+ languageCode: z.string().optional().describe("BCP-47 language (default 'en-US')"),
67
+ units: z.enum(['METRIC', 'IMPERIAL']).optional().describe('Display units only (default IMPERIAL)'),
68
+ avoidTolls: z.boolean().optional(),
69
+ avoidHighways: z.boolean().optional(),
70
+ avoidFerries: z.boolean().optional(),
71
+ computeAlternativeRoutes: z.boolean().optional(),
72
+ fieldMask: z.string().optional().describe("Response fields (default 'routes.distanceMeters,routes.duration')"),
73
+ }),
74
+ execute: async ({ googleMapsToken, originAddress, destinationAddress, fieldMask, ...opts }) => {
75
+ try {
76
+ const body = {
77
+ origin: { address: originAddress },
78
+ destination: { address: destinationAddress },
79
+ };
80
+ for (const [k, v] of Object.entries(opts))
81
+ if (v !== undefined)
82
+ body[k] = v;
83
+ const result = await mapsRequest(googleMapsToken, ROUTES_API_BASE, '/directions/v2:computeRoutes', {
84
+ method: 'POST',
85
+ headers: { 'X-Goog-FieldMask': fieldMask ?? 'routes.distanceMeters,routes.duration' },
86
+ body,
87
+ });
88
+ if (!result.ok)
89
+ return { error: 'Failed to get route', details: result.error };
90
+ return { responseData: result.data };
91
+ }
92
+ catch (error) {
93
+ return { error: 'Error getting route', message: error instanceof Error ? error.message : 'Unknown error' };
94
+ }
95
+ },
96
+ });
97
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1,51 @@
1
+ export declare const createTilesSession: import("ai").Tool<{
2
+ language: string;
3
+ googleMapsToken: string;
4
+ region: string;
5
+ mapType: "roadmap" | "satellite" | "terrain" | "streetview";
6
+ scale?: "scaleFactor1x" | "scaleFactor2x" | "scaleFactor4x" | undefined;
7
+ highDpi?: boolean | undefined;
8
+ overlay?: boolean | undefined;
9
+ layerTypes?: ("layerRoadmap" | "layerStreetview" | "layerTraffic")[] | undefined;
10
+ styles?: Record<string, any>[] | undefined;
11
+ imageFormat?: "png" | "jpeg" | undefined;
12
+ }, any>;
13
+ export declare const get2dTile: import("ai").Tool<{
14
+ z: number;
15
+ googleMapsToken: string;
16
+ x: number;
17
+ y: number;
18
+ session: string;
19
+ key?: string | undefined;
20
+ orientation?: number | undefined;
21
+ }, {
22
+ error: string;
23
+ details?: undefined;
24
+ tile?: undefined;
25
+ message?: undefined;
26
+ } | {
27
+ error: string;
28
+ details: any;
29
+ tile?: undefined;
30
+ message?: undefined;
31
+ } | {
32
+ tile: {
33
+ name: string;
34
+ mimetype: string;
35
+ contentBase64: string | undefined;
36
+ byteSize: number | undefined;
37
+ };
38
+ error?: undefined;
39
+ details?: undefined;
40
+ message?: undefined;
41
+ } | {
42
+ error: string;
43
+ message: string;
44
+ details?: undefined;
45
+ tile?: undefined;
46
+ }>;
47
+ export declare const get3dTilesRoot: import("ai").Tool<{
48
+ googleMapsToken: string;
49
+ key?: string | undefined;
50
+ }, any>;
51
+ //# sourceMappingURL=tiles.d.ts.map