googlemaps-kit 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/README.md +146 -179
  2. package/dist/advanced/auth.d.ts +10 -0
  3. package/dist/advanced/auth.d.ts.map +1 -0
  4. package/dist/advanced/auth.js +8 -0
  5. package/dist/advanced/auth.js.map +1 -0
  6. package/dist/advanced/http.d.ts +10 -0
  7. package/dist/advanced/http.d.ts.map +1 -0
  8. package/dist/advanced/http.js +9 -0
  9. package/dist/advanced/http.js.map +1 -0
  10. package/dist/advanced/parsers.d.ts +28 -0
  11. package/dist/advanced/parsers.d.ts.map +1 -0
  12. package/dist/advanced/parsers.js +25 -0
  13. package/dist/advanced/parsers.js.map +1 -0
  14. package/dist/advanced/rpc.d.ts +29 -0
  15. package/dist/advanced/rpc.d.ts.map +1 -0
  16. package/dist/advanced/rpc.js +23 -0
  17. package/dist/advanced/rpc.js.map +1 -0
  18. package/dist/advanced/services.d.ts +34 -0
  19. package/dist/advanced/services.d.ts.map +1 -0
  20. package/dist/advanced/services.js +29 -0
  21. package/dist/advanced/services.js.map +1 -0
  22. package/dist/advanced/utils.d.ts +15 -0
  23. package/dist/advanced/utils.d.ts.map +1 -0
  24. package/dist/advanced/utils.js +13 -0
  25. package/dist/advanced/utils.js.map +1 -0
  26. package/dist/advanced.d.ts +43 -0
  27. package/dist/advanced.d.ts.map +1 -0
  28. package/dist/advanced.js +26 -0
  29. package/dist/advanced.js.map +1 -0
  30. package/dist/auth/session.d.ts +6 -1
  31. package/dist/auth/session.d.ts.map +1 -1
  32. package/dist/auth/session.js +23 -8
  33. package/dist/auth/session.js.map +1 -1
  34. package/dist/cli.d.ts +11 -0
  35. package/dist/cli.d.ts.map +1 -0
  36. package/dist/cli.js +115 -0
  37. package/dist/cli.js.map +1 -0
  38. package/dist/client/gmaps-client.d.ts +91 -52
  39. package/dist/client/gmaps-client.d.ts.map +1 -1
  40. package/dist/client/gmaps-client.js +209 -109
  41. package/dist/client/gmaps-client.js.map +1 -1
  42. package/dist/client/http-client.d.ts +28 -3
  43. package/dist/client/http-client.d.ts.map +1 -1
  44. package/dist/client/http-client.js +163 -14
  45. package/dist/client/http-client.js.map +1 -1
  46. package/dist/client/intent.d.ts +75 -0
  47. package/dist/client/intent.d.ts.map +1 -0
  48. package/dist/client/intent.js +546 -0
  49. package/dist/client/intent.js.map +1 -0
  50. package/dist/client/maps-tools.d.ts +80 -0
  51. package/dist/client/maps-tools.d.ts.map +1 -0
  52. package/dist/client/maps-tools.js +187 -0
  53. package/dist/client/maps-tools.js.map +1 -0
  54. package/dist/client/namespaces.d.ts +121 -0
  55. package/dist/client/namespaces.d.ts.map +1 -0
  56. package/dist/client/namespaces.js +169 -0
  57. package/dist/client/namespaces.js.map +1 -0
  58. package/dist/client/place-enrichment.d.ts +19 -0
  59. package/dist/client/place-enrichment.d.ts.map +1 -0
  60. package/dist/client/place-enrichment.js +71 -0
  61. package/dist/client/place-enrichment.js.map +1 -0
  62. package/dist/client/product-namespaces.d.ts +30 -0
  63. package/dist/client/product-namespaces.d.ts.map +1 -0
  64. package/dist/client/product-namespaces.js +47 -0
  65. package/dist/client/product-namespaces.js.map +1 -0
  66. package/dist/index.d.ts +31 -37
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +13 -28
  69. package/dist/index.js.map +1 -1
  70. package/dist/parsers/place.d.ts.map +1 -1
  71. package/dist/parsers/place.js +2 -0
  72. package/dist/parsers/place.js.map +1 -1
  73. package/dist/parsers/reviews.d.ts +0 -2
  74. package/dist/parsers/reviews.d.ts.map +1 -1
  75. package/dist/parsers/reviews.js +0 -2
  76. package/dist/parsers/reviews.js.map +1 -1
  77. package/dist/parsers/search.d.ts +13 -1
  78. package/dist/parsers/search.d.ts.map +1 -1
  79. package/dist/parsers/search.js +130 -71
  80. package/dist/parsers/search.js.map +1 -1
  81. package/dist/rpc/batch-execute.d.ts.map +1 -1
  82. package/dist/rpc/batch-execute.js +20 -3
  83. package/dist/rpc/batch-execute.js.map +1 -1
  84. package/dist/rpc/batch-rpc.d.ts.map +1 -1
  85. package/dist/rpc/batch-rpc.js +5 -6
  86. package/dist/rpc/batch-rpc.js.map +1 -1
  87. package/dist/rpc/batch-services.d.ts +2 -0
  88. package/dist/rpc/batch-services.d.ts.map +1 -1
  89. package/dist/rpc/batch-services.js +4 -0
  90. package/dist/rpc/batch-services.js.map +1 -1
  91. package/dist/rpc/pb-builders.d.ts +0 -2
  92. package/dist/rpc/pb-builders.d.ts.map +1 -1
  93. package/dist/rpc/pb-builders.js +2 -5
  94. package/dist/rpc/pb-builders.js.map +1 -1
  95. package/dist/rpc/rpc-client.d.ts +6 -2
  96. package/dist/rpc/rpc-client.d.ts.map +1 -1
  97. package/dist/rpc/rpc-client.js +26 -10
  98. package/dist/rpc/rpc-client.js.map +1 -1
  99. package/dist/rpc/rpc-methods.d.ts +0 -7
  100. package/dist/rpc/rpc-methods.d.ts.map +1 -1
  101. package/dist/rpc/rpc-methods.js +0 -7
  102. package/dist/rpc/rpc-methods.js.map +1 -1
  103. package/dist/services/ask-maps.js +1 -1
  104. package/dist/services/ask-maps.js.map +1 -1
  105. package/dist/services/directions.d.ts +3 -8
  106. package/dist/services/directions.d.ts.map +1 -1
  107. package/dist/services/directions.js +37 -13
  108. package/dist/services/directions.js.map +1 -1
  109. package/dist/services/geocode.js +1 -1
  110. package/dist/services/photos.d.ts.map +1 -1
  111. package/dist/services/photos.js +2 -5
  112. package/dist/services/photos.js.map +1 -1
  113. package/dist/services/places.d.ts.map +1 -1
  114. package/dist/services/places.js +13 -4
  115. package/dist/services/places.js.map +1 -1
  116. package/dist/services/reviews.d.ts +7 -0
  117. package/dist/services/reviews.d.ts.map +1 -1
  118. package/dist/services/reviews.js +10 -1
  119. package/dist/services/reviews.js.map +1 -1
  120. package/dist/services/search.d.ts +7 -5
  121. package/dist/services/search.d.ts.map +1 -1
  122. package/dist/services/search.js +46 -17
  123. package/dist/services/search.js.map +1 -1
  124. package/dist/services/ugc-aggregates.d.ts.map +1 -1
  125. package/dist/services/ugc-aggregates.js +1 -17
  126. package/dist/services/ugc-aggregates.js.map +1 -1
  127. package/dist/types/common.d.ts +92 -6
  128. package/dist/types/common.d.ts.map +1 -1
  129. package/dist/types/common.js +12 -0
  130. package/dist/types/common.js.map +1 -1
  131. package/dist/types/directions.d.ts +16 -2
  132. package/dist/types/directions.d.ts.map +1 -1
  133. package/dist/types/dx.d.ts +289 -0
  134. package/dist/types/dx.d.ts.map +1 -0
  135. package/dist/types/dx.js +7 -0
  136. package/dist/types/dx.js.map +1 -0
  137. package/dist/types/hooks.d.ts +48 -0
  138. package/dist/types/hooks.d.ts.map +1 -0
  139. package/dist/types/hooks.js +5 -0
  140. package/dist/types/hooks.js.map +1 -0
  141. package/dist/utils/abort.d.ts +7 -0
  142. package/dist/utils/abort.d.ts.map +1 -0
  143. package/dist/utils/abort.js +43 -0
  144. package/dist/utils/abort.js.map +1 -0
  145. package/dist/utils/coords.d.ts +24 -0
  146. package/dist/utils/coords.d.ts.map +1 -0
  147. package/dist/utils/coords.js +37 -0
  148. package/dist/utils/coords.js.map +1 -0
  149. package/dist/utils/export-results.d.ts +24 -0
  150. package/dist/utils/export-results.d.ts.map +1 -0
  151. package/dist/utils/export-results.js +105 -0
  152. package/dist/utils/export-results.js.map +1 -0
  153. package/dist/utils/hooks.d.ts +10 -0
  154. package/dist/utils/hooks.d.ts.map +1 -0
  155. package/dist/utils/hooks.js +47 -0
  156. package/dist/utils/hooks.js.map +1 -0
  157. package/dist/utils/place-ref.d.ts +39 -0
  158. package/dist/utils/place-ref.d.ts.map +1 -0
  159. package/dist/utils/place-ref.js +109 -0
  160. package/dist/utils/place-ref.js.map +1 -0
  161. package/dist/utils/pooled.d.ts +2 -0
  162. package/dist/utils/pooled.d.ts.map +1 -1
  163. package/dist/utils/pooled.js +8 -0
  164. package/dist/utils/pooled.js.map +1 -1
  165. package/dist/utils/request-context.d.ts +9 -0
  166. package/dist/utils/request-context.d.ts.map +1 -0
  167. package/dist/utils/request-context.js +12 -0
  168. package/dist/utils/request-context.js.map +1 -0
  169. package/dist/utils/ttl-cache.d.ts +17 -0
  170. package/dist/utils/ttl-cache.d.ts.map +1 -0
  171. package/dist/utils/ttl-cache.js +43 -0
  172. package/dist/utils/ttl-cache.js.map +1 -0
  173. package/package.json +28 -13
  174. package/dist/internal.d.ts +0 -140
  175. package/dist/internal.d.ts.map +0 -1
  176. package/dist/internal.js +0 -97
  177. package/dist/internal.js.map +0 -1
  178. package/dist/server/api-server.d.ts +0 -9
  179. package/dist/server/api-server.d.ts.map +0 -1
  180. package/dist/server/api-server.js +0 -293
  181. package/dist/server/api-server.js.map +0 -1
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Developer-experience types: PlaceRef, Intent API options, client capabilities.
3
+ *
4
+ * Intent methods return these shapes so agents/devs always know where fields live.
5
+ */
6
+ import type { Coordinates, KnowledgeEntity, LocalPost, PlaceDetails, PlaceFullMeta, ReviewsResult, SearchMode, SearchResult, TravelMode } from './common.js';
7
+ import type { SearchClientFilters } from './search-filters.js';
8
+ import type { ReviewClientFilters } from './reviews.js';
9
+ import type { PhotoCategory, PlacePhoto, PhotosSource } from './photos.js';
10
+ import type { PanoramaRef } from './panorama.js';
11
+ import type { DirectionsResult } from './directions.js';
12
+ import type { ProgressCallback } from './hooks.js';
13
+ /** Shared cancellation / progress knobs for Intent methods. */
14
+ export interface IntentCallOptions {
15
+ /** Cancel in-flight HTTP when aborted. */
16
+ signal?: AbortSignal;
17
+ /** Progress for multi-page / multi-item work. */
18
+ onProgress?: ProgressCallback;
19
+ }
20
+ /** Session profile selected at client construction. */
21
+ export type SessionMode = 'anonymous' | 'authenticated';
22
+ /**
23
+ * Profile depth for Intent `profile()`.
24
+ * - `card` — place details only (~1 parallel preview+enrich round-trip)
25
+ * - `full` — details + reviews (+ optional local posts)
26
+ * - `complete` — full + knowledge fallback
27
+ */
28
+ export type ProfileDepth = 'card' | 'full' | 'complete';
29
+ /** Review transport for Intent `opinions()` / `reviews.list({ source })`. */
30
+ export type ReviewSource = 'auto' | 'boq' | 'embedded' | 'rpc';
31
+ /**
32
+ * Stable place identity. Prefer hexId; ChIJ placeId is auto-converted.
33
+ * Accepts `lat`/`lng` (preferred) or search-row `latitude`/`longitude`.
34
+ */
35
+ export type PlaceRef = string | {
36
+ hexId?: string;
37
+ name?: string;
38
+ lat?: number;
39
+ lng?: number;
40
+ /** Search-row alias for lat. */
41
+ latitude?: number;
42
+ /** Search-row alias for lng. */
43
+ longitude?: number;
44
+ placeId?: string;
45
+ ftid?: string;
46
+ /**
47
+ * When set (e.g. from a search hit), profile skips incomplete-payload retry —
48
+ * saves ~400–900 ms on truncated previews.
49
+ */
50
+ reviewCount?: number;
51
+ };
52
+ export interface NormalizedPlaceRef {
53
+ hexId: string;
54
+ name?: string;
55
+ lat?: number;
56
+ lng?: number;
57
+ placeId?: string;
58
+ ftid?: string;
59
+ reviewCount?: number;
60
+ }
61
+ /** Capability flags for `maps.capabilities()`. */
62
+ export interface ClientCapabilities {
63
+ session: SessionMode;
64
+ signedIn: boolean;
65
+ search: true;
66
+ placeDetails: true;
67
+ reviewsBoq: true;
68
+ reviewsRpc: boolean;
69
+ photos: true;
70
+ directions: true;
71
+ askMaps: boolean;
72
+ askMapsHistory: boolean;
73
+ privateLists: boolean;
74
+ legacyRpc: boolean;
75
+ }
76
+ export type AuthCapability = keyof Pick<ClientCapabilities, 'askMaps' | 'askMapsHistory' | 'reviewsRpc' | 'privateLists' | 'legacyRpc'>;
77
+ /** Input for `maps.discover()`. */
78
+ export interface DiscoverOptions extends IntentCallOptions {
79
+ /** Free-text query, e.g. "coffee" or "cafes in indiranagar". */
80
+ query: string;
81
+ /**
82
+ * Bias center (Intent spelling). Required unless `location` is set.
83
+ * Same meaning as search service `location`.
84
+ */
85
+ near?: Coordinates;
86
+ /**
87
+ * Alias for `near` — accepted so agents can copy search-service examples.
88
+ */
89
+ location?: Coordinates;
90
+ /**
91
+ * `fast` (default) — ~5 rows, name/rating/coords/thumbnail, ~400 ms warm.
92
+ * `full` — up to 20 rows with hours/phone/attributes.
93
+ */
94
+ mode?: SearchMode;
95
+ limit?: number;
96
+ radiusMeters?: number;
97
+ /** Pagination offset (pass `pagination.nextOffset` from a prior discover). */
98
+ offset?: number;
99
+ /** Session token from a prior page (`pagination` does not expose psi — use searchPage for psi). */
100
+ psi?: string;
101
+ filters?: SearchClientFilters;
102
+ }
103
+ /** Input for `maps.discoverPages()` / multi-page discover. */
104
+ export interface DiscoverPagesOptions extends DiscoverOptions {
105
+ /** Max search pages to yield (default 5). */
106
+ maxPages?: number;
107
+ }
108
+ /**
109
+ * Output of `maps.discover()`.
110
+ *
111
+ * @example
112
+ * const { places, timingMs } = await maps.discover({ query: 'coffee', near });
113
+ * const top = places[0]!; // { name, hexId, rating, lat, lng, thumbnailUrl, … }
114
+ */
115
+ export interface DiscoverResult {
116
+ places: SearchResult[];
117
+ /** Wall time for the single search request. */
118
+ timingMs: number;
119
+ /** Effective mode used for this call. */
120
+ mode: SearchMode;
121
+ pagination: {
122
+ offset: number;
123
+ pageSize: number;
124
+ hasMore: boolean;
125
+ nextOffset?: number;
126
+ psi?: string;
127
+ };
128
+ }
129
+ /** Input for `maps.resolve()`. */
130
+ export interface ResolveOptions extends IntentCallOptions {
131
+ /** Free-text query (geocode / suggest / search). */
132
+ query?: string;
133
+ /** Short or full Maps URL. */
134
+ url?: string;
135
+ /** Bias for suggest / search (strongly recommended for queries). */
136
+ near?: Coordinates;
137
+ /** Alias for `near`. */
138
+ location?: Coordinates;
139
+ }
140
+ /**
141
+ * Output of `maps.resolve()` — identity only, not a full place card.
142
+ * Call `profile(resolved)` next when you need hours/phone/photos.
143
+ *
144
+ * Always check `hexId` (or `placeId`) before profile/media — viewport-only
145
+ * URL resolves may return coords without an id.
146
+ */
147
+ export interface ResolvedPlace {
148
+ hexId?: string;
149
+ placeId?: string;
150
+ name?: string;
151
+ address?: string;
152
+ lat?: number;
153
+ lng?: number;
154
+ ftid?: string;
155
+ source: 'url' | 'geocode' | 'suggest' | 'search';
156
+ }
157
+ /** Input for `maps.profile()`. */
158
+ export interface ProfileOptions extends IntentCallOptions {
159
+ /**
160
+ * `card` (default) — place details only.
161
+ * `full` — + reviews (local posts off unless `includeLocalPosts: true`).
162
+ * `complete` — + knowledge fallback.
163
+ */
164
+ depth?: ProfileDepth;
165
+ maxReviewPages?: number;
166
+ includeLocalPosts?: boolean;
167
+ }
168
+ /** Input for `maps.profileMany()`. */
169
+ export interface ProfileManyOptions extends ProfileOptions {
170
+ /** Max parallel profiles (default client concurrency). */
171
+ concurrency?: number;
172
+ }
173
+ /**
174
+ * Output of `maps.profile()` — always the same shape.
175
+ * Place fields live under `place` at every depth (never a bare PlaceDetails union).
176
+ *
177
+ * Wrong: `profile().name` — Right: `profile().place.name`
178
+ * (Contrast: `maps.places.get()` returns bare PlaceDetails.)
179
+ *
180
+ * @example
181
+ * const { place, reviews, depth } = await maps.profile(hit, { depth: 'full' });
182
+ * console.log(place.name, place.rating, reviews?.totalReviews ?? reviews?.reviews.length);
183
+ */
184
+ export interface PlaceProfile {
185
+ /** Place card fields (name, rating, hours, photos URLs, …). */
186
+ place: PlaceDetails;
187
+ /** Present when depth is `full` or `complete`. */
188
+ reviews?: ReviewsResult;
189
+ localPosts?: LocalPost[];
190
+ /** Present when depth is `complete`. */
191
+ knowledge?: KnowledgeEntity;
192
+ depth: ProfileDepth;
193
+ meta?: PlaceFullMeta;
194
+ }
195
+ /** Input for `maps.route()`. Also accepts origin/destination aliases. */
196
+ export interface RouteOptions extends IntentCallOptions {
197
+ /** Intent spelling (preferred). */
198
+ from?: Coordinates | string | PlaceRef;
199
+ to?: Coordinates | string | PlaceRef;
200
+ /** Alias for `from` — directions service spelling. */
201
+ origin?: Coordinates | string | PlaceRef;
202
+ /** Alias for `to`. */
203
+ destination?: Coordinates | string | PlaceRef;
204
+ mode?: TravelMode;
205
+ /**
206
+ * Turn-by-turn steps (may scrape dir HTML — slower).
207
+ * Default false: duration/distance only.
208
+ */
209
+ includeSteps?: boolean;
210
+ }
211
+ /** Output of `maps.route()` — same as directions service. */
212
+ export type RouteResult = DirectionsResult;
213
+ /** Input for `maps.opinions()`. */
214
+ export interface OpinionsOptions extends IntentCallOptions {
215
+ /** Boq pages to fetch (default 1). */
216
+ pages?: number;
217
+ /** Reviews per page (default 10). */
218
+ limit?: number;
219
+ source?: ReviewSource;
220
+ /**
221
+ * Attach place-wide rating histogram (extra batchexecute).
222
+ * Default **false** for latency — set true when you need star distribution / `totalReviews`.
223
+ */
224
+ includeAggregates?: boolean;
225
+ filters?: ReviewClientFilters;
226
+ }
227
+ /** Input for `maps.opinionsPages()` — stream Boq pages. */
228
+ export interface OpinionsPagesOptions extends OpinionsOptions {
229
+ /** Max Boq pages to yield (default 10). */
230
+ maxPages?: number;
231
+ }
232
+ /**
233
+ * Output of `maps.opinions()`.
234
+ * - `reviewCount` = length of this page (`reviews.length`), NOT the place total
235
+ * - `totalReviews` = place-wide total (needs `includeAggregates: true` or embedded fallback)
236
+ */
237
+ export type OpinionsResult = ReviewsResult;
238
+ /** Input for `maps.media()`. */
239
+ export interface MediaOptions extends IntentCallOptions {
240
+ /** Include photo gallery (default true). */
241
+ photos?: boolean;
242
+ /** Include nearby Street View panos (default false — extra request). */
243
+ streetView?: boolean;
244
+ pageSize?: number;
245
+ category?: PhotoCategory;
246
+ source?: PhotosSource;
247
+ }
248
+ /** Input for `maps.mediaMany()`. */
249
+ export interface MediaManyOptions extends MediaOptions {
250
+ concurrency?: number;
251
+ }
252
+ /**
253
+ * Output of `maps.media()` — flat photo list (not nested `.photos.photos`).
254
+ * Note: `PlaceDetails.photos` / search `photos` are URL strings; media returns `PlacePhoto` objects.
255
+ *
256
+ * @example
257
+ * const { photos, nextPageToken } = await maps.media(hit);
258
+ * console.log(photos[0]?.normalizedUrl);
259
+ */
260
+ export interface MediaResult {
261
+ photos: PlacePhoto[];
262
+ /** Photos in this page (not necessarily gallery total). */
263
+ photoCount: number;
264
+ nextPageToken?: string;
265
+ photoSource?: PhotosSource;
266
+ panoramas?: PanoramaRef[];
267
+ }
268
+ /** One step of `maps.pipeline()` — discover → profile → optional opinions. */
269
+ export interface PipelineOptions extends IntentCallOptions {
270
+ discover: DiscoverOptions;
271
+ /** Cap places after discover (default all). */
272
+ maxPlaces?: number;
273
+ /** Profile depth options (default `{ depth: 'card' }`). Pass `false` to skip. */
274
+ profile?: ProfileOptions | false;
275
+ /** Opinions options. Default off — pass `{}` or options to enable. */
276
+ opinions?: OpinionsOptions | false;
277
+ concurrency?: number;
278
+ }
279
+ export interface PipelinePlaceRow {
280
+ hit: SearchResult;
281
+ profile?: PlaceProfile;
282
+ opinions?: OpinionsResult;
283
+ }
284
+ export interface PipelineResult {
285
+ places: PipelinePlaceRow[];
286
+ discover: DiscoverResult;
287
+ timingMs: number;
288
+ }
289
+ //# sourceMappingURL=dx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dx.d.ts","sourceRoot":"","sources":["../../src/types/dx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Developer-experience types: PlaceRef, Intent API options, client capabilities.
3
+ *
4
+ * Intent methods return these shapes so agents/devs always know where fields live.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=dx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dx.js","sourceRoot":"","sources":["../../src/types/dx.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Lifecycle hooks + progress events for Intent / HTTP.
3
+ */
4
+ export type HookActionType = 'discover' | 'discoverPages' | 'resolve' | 'profile' | 'profileMany' | 'route' | 'opinions' | 'opinionsPages' | 'media' | 'mediaMany' | 'pipeline' | 'http.get' | 'http.getBytes' | 'batchexecute';
5
+ export interface HookActionEvent {
6
+ type: HookActionType | string;
7
+ status: 'ok' | 'error';
8
+ durationMs: number;
9
+ error?: unknown;
10
+ }
11
+ export interface HookRetryEvent {
12
+ type: HookActionType | string;
13
+ attempt: number;
14
+ delayMs?: number;
15
+ error?: unknown;
16
+ }
17
+ export interface HookErrorEvent {
18
+ type: HookActionType | string;
19
+ error: unknown;
20
+ }
21
+ /** Wire once on `sdk({ hooks })` — fire-and-forget, never blocks the call. */
22
+ export interface GMapsHooks {
23
+ onAction?: (event: HookActionEvent) => void;
24
+ onRetry?: (event: HookRetryEvent) => void;
25
+ onError?: (event: HookErrorEvent) => void;
26
+ }
27
+ export interface ProgressEvent {
28
+ /** Logical operation, e.g. `discover`, `opinions`, `profileMany`. */
29
+ type: string;
30
+ /** 1-based page / item index when known. */
31
+ index?: number;
32
+ /** Total pages / items when known. */
33
+ total?: number;
34
+ /** Items accumulated so far. */
35
+ loaded?: number;
36
+ /** Opaque key (place hexId, page offset, …). */
37
+ key?: string;
38
+ done?: boolean;
39
+ }
40
+ export type ProgressCallback = (event: ProgressEvent) => void;
41
+ /** Optional in-memory TTL cache for Intent reads. */
42
+ export interface GMapsCacheOptions {
43
+ /** Entry lifetime in ms (default 60_000). */
44
+ ttlMs?: number;
45
+ /** Max entries before LRU eviction (default 256). */
46
+ maxEntries?: number;
47
+ }
48
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,eAAe,GACf,SAAS,GACT,SAAS,GACT,aAAa,GACb,OAAO,GACP,UAAU,GACV,eAAe,GACf,OAAO,GACP,WAAW,GACX,UAAU,GACV,UAAU,GACV,eAAe,GACf,cAAc,CAAC;AAEnB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;IAC9B,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE9D,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Lifecycle hooks + progress events for Intent / HTTP.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Abort helpers shared by HTTP, Intent, and CLI.
3
+ */
4
+ export declare function throwIfAborted(signal?: AbortSignal): void;
5
+ /** Sleep that rejects when the signal aborts. */
6
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
7
+ //# sourceMappingURL=abort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../src/utils/abort.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAOzD;AAED,iDAAiD;AACjD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBrE"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Abort helpers shared by HTTP, Intent, and CLI.
3
+ */
4
+ import { GMapsError } from '../types/common.js';
5
+ export function throwIfAborted(signal) {
6
+ if (!signal)
7
+ return;
8
+ if (signal.aborted) {
9
+ const reason = signal.reason;
10
+ if (reason instanceof Error)
11
+ throw reason;
12
+ throw new GMapsError(typeof reason === 'string' ? reason : 'Aborted', undefined, reason);
13
+ }
14
+ }
15
+ /** Sleep that rejects when the signal aborts. */
16
+ export function sleep(ms, signal) {
17
+ if (ms <= 0) {
18
+ throwIfAborted(signal);
19
+ return Promise.resolve();
20
+ }
21
+ return new Promise((resolve, reject) => {
22
+ if (signal?.aborted) {
23
+ reject(abortError(signal));
24
+ return;
25
+ }
26
+ const timer = setTimeout(() => {
27
+ signal?.removeEventListener('abort', onAbort);
28
+ resolve();
29
+ }, ms);
30
+ const onAbort = () => {
31
+ clearTimeout(timer);
32
+ reject(abortError(signal));
33
+ };
34
+ signal?.addEventListener('abort', onAbort, { once: true });
35
+ });
36
+ }
37
+ function abortError(signal) {
38
+ const reason = signal?.reason;
39
+ if (reason instanceof Error)
40
+ return reason;
41
+ return new GMapsError(typeof reason === 'string' ? reason : 'Aborted', undefined, reason);
42
+ }
43
+ //# sourceMappingURL=abort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.js","sourceRoot":"","sources":["../../src/utils/abort.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,MAAM,YAAY,KAAK;YAAE,MAAM,MAAM,CAAC;QAC1C,MAAM,IAAI,UAAU,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACZ,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,MAAoB;IACtC,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;IAC9B,IAAI,MAAM,YAAY,KAAK;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,IAAI,UAAU,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Shared coordinate helpers — aliases between lat/lng and latitude/longitude.
3
+ */
4
+ export interface CoordFields {
5
+ latitude?: number;
6
+ longitude?: number;
7
+ lat?: number;
8
+ lng?: number;
9
+ }
10
+ export interface CoordinatesLike {
11
+ lat: number;
12
+ lng: number;
13
+ }
14
+ /** Copy latitude↔lat and longitude↔lng so both spellings are populated. */
15
+ export declare function applyCoordAliases<T extends CoordFields>(obj: T): T;
16
+ /**
17
+ * Normalize any coords-shaped object to `{ lat, lng }`.
18
+ * Accepts `lat`/`lng` or `latitude`/`longitude`.
19
+ */
20
+ export declare function toCoordinates(value: CoordFields | {
21
+ lat: number;
22
+ lng: number;
23
+ } | null | undefined): CoordinatesLike | undefined;
24
+ //# sourceMappingURL=coords.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coords.d.ts","sourceRoot":"","sources":["../../src/utils/coords.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAYlE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACnE,eAAe,GAAG,SAAS,CAa7B"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared coordinate helpers — aliases between lat/lng and latitude/longitude.
3
+ */
4
+ /** Copy latitude↔lat and longitude↔lng so both spellings are populated. */
5
+ export function applyCoordAliases(obj) {
6
+ const lat = obj.lat ?? obj.latitude;
7
+ const lng = obj.lng ?? obj.longitude;
8
+ if (lat != null) {
9
+ obj.lat = lat;
10
+ obj.latitude = lat;
11
+ }
12
+ if (lng != null) {
13
+ obj.lng = lng;
14
+ obj.longitude = lng;
15
+ }
16
+ return obj;
17
+ }
18
+ /**
19
+ * Normalize any coords-shaped object to `{ lat, lng }`.
20
+ * Accepts `lat`/`lng` or `latitude`/`longitude`.
21
+ */
22
+ export function toCoordinates(value) {
23
+ if (!value || typeof value !== 'object')
24
+ return undefined;
25
+ const lat = 'lat' in value && typeof value.lat === 'number'
26
+ ? value.lat
27
+ : value.latitude;
28
+ const lng = 'lng' in value && typeof value.lng === 'number'
29
+ ? value.lng
30
+ : value.longitude;
31
+ if (typeof lat !== 'number' || typeof lng !== 'number')
32
+ return undefined;
33
+ if (!Number.isFinite(lat) || !Number.isFinite(lng))
34
+ return undefined;
35
+ return { lat, lng };
36
+ }
37
+ //# sourceMappingURL=coords.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coords.js","sourceRoot":"","sources":["../../src/utils/coords.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAwB,GAAM;IAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;IACpC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;IACrC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACd,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACd,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAoE;IAEpE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,GAAG,GACP,KAAK,IAAI,KAAK,IAAI,OAAQ,KAA2B,CAAC,GAAG,KAAK,QAAQ;QACpE,CAAC,CAAE,KAAyB,CAAC,GAAG;QAChC,CAAC,CAAE,KAAqB,CAAC,QAAQ,CAAC;IACtC,MAAM,GAAG,GACP,KAAK,IAAI,KAAK,IAAI,OAAQ,KAA2B,CAAC,GAAG,KAAK,QAAQ;QACpE,CAAC,CAAE,KAAyB,CAAC,GAAG;QAChC,CAAC,CAAE,KAAqB,CAAC,SAAS,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Export helpers for discover / place results (CSV + GeoJSON).
3
+ */
4
+ import type { PlaceDetails, SearchResult } from '../types/common.js';
5
+ import type { PlaceProfile } from '../types/dx.js';
6
+ export type ExportablePlace = SearchResult | PlaceDetails | PlaceProfile;
7
+ /** Flat CSV for spreadsheets / agents. */
8
+ export declare function toCsv(rows: ExportablePlace[]): string;
9
+ export interface GeoJsonFeatureCollection {
10
+ type: 'FeatureCollection';
11
+ features: Array<{
12
+ type: 'Feature';
13
+ geometry: {
14
+ type: 'Point';
15
+ coordinates: [number, number];
16
+ } | null;
17
+ properties: Record<string, unknown>;
18
+ }>;
19
+ }
20
+ /** GeoJSON FeatureCollection (skips rows without coords unless includeMissing). */
21
+ export declare function toGeoJSON(rows: ExportablePlace[], options?: {
22
+ includeMissing?: boolean;
23
+ }): GeoJsonFeatureCollection;
24
+ //# sourceMappingURL=export-results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-results.d.ts","sourceRoot":"","sources":["../../src/utils/export-results.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAoDzE,0CAA0C;AAC1C,wBAAgB,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,CAoCrD;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,SAAS,CAAC;QAChB,QAAQ,EAAE;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,GAAG,IAAI,CAAC;QAClE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC,CAAC;CACJ;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CACvB,IAAI,EAAE,eAAe,EAAE,EACvB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACzC,wBAAwB,CAyB1B"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Export helpers for discover / place results (CSV + GeoJSON).
3
+ */
4
+ function asPlaceFields(row) {
5
+ if ('place' in row && row.place) {
6
+ const p = row.place;
7
+ return {
8
+ name: p.name,
9
+ hexId: p.hexId,
10
+ placeId: p.placeId,
11
+ address: p.address,
12
+ lat: p.lat ?? p.latitude,
13
+ lng: p.lng ?? p.longitude,
14
+ rating: p.rating,
15
+ reviewCount: p.reviewCount,
16
+ phone: p.phone,
17
+ website: p.website,
18
+ category: p.categories?.[0],
19
+ };
20
+ }
21
+ const r = row;
22
+ return {
23
+ name: r.name,
24
+ hexId: r.hexId,
25
+ placeId: r.placeId,
26
+ address: r.address,
27
+ lat: r.lat ?? r.latitude,
28
+ lng: r.lng ?? r.longitude,
29
+ rating: r.rating,
30
+ reviewCount: r.reviewCount,
31
+ phone: r.phone,
32
+ website: r.website,
33
+ category: 'category' in r ? r.category : r.categories?.[0],
34
+ };
35
+ }
36
+ function csvEscape(value) {
37
+ if (/[",\n\r]/.test(value))
38
+ return `"${value.replace(/"/g, '""')}"`;
39
+ return value;
40
+ }
41
+ /** Flat CSV for spreadsheets / agents. */
42
+ export function toCsv(rows) {
43
+ const header = [
44
+ 'name',
45
+ 'hexId',
46
+ 'placeId',
47
+ 'address',
48
+ 'lat',
49
+ 'lng',
50
+ 'rating',
51
+ 'reviewCount',
52
+ 'phone',
53
+ 'website',
54
+ 'category',
55
+ ];
56
+ const lines = [header.join(',')];
57
+ for (const row of rows) {
58
+ const f = asPlaceFields(row);
59
+ lines.push([
60
+ f.name ?? '',
61
+ f.hexId ?? '',
62
+ f.placeId ?? '',
63
+ f.address ?? '',
64
+ f.lat ?? '',
65
+ f.lng ?? '',
66
+ f.rating ?? '',
67
+ f.reviewCount ?? '',
68
+ f.phone ?? '',
69
+ f.website ?? '',
70
+ f.category ?? '',
71
+ ]
72
+ .map((v) => csvEscape(String(v)))
73
+ .join(','));
74
+ }
75
+ return lines.join('\n');
76
+ }
77
+ /** GeoJSON FeatureCollection (skips rows without coords unless includeMissing). */
78
+ export function toGeoJSON(rows, options = {}) {
79
+ const features = [];
80
+ for (const row of rows) {
81
+ const f = asPlaceFields(row);
82
+ const hasCoords = f.lat != null && f.lng != null;
83
+ if (!hasCoords && !options.includeMissing)
84
+ continue;
85
+ features.push({
86
+ type: 'Feature',
87
+ geometry: hasCoords
88
+ ? { type: 'Point', coordinates: [f.lng, f.lat] }
89
+ : null,
90
+ properties: {
91
+ name: f.name,
92
+ hexId: f.hexId,
93
+ placeId: f.placeId,
94
+ address: f.address,
95
+ rating: f.rating,
96
+ reviewCount: f.reviewCount,
97
+ phone: f.phone,
98
+ website: f.website,
99
+ category: f.category,
100
+ },
101
+ });
102
+ }
103
+ return { type: 'FeatureCollection', features };
104
+ }
105
+ //# sourceMappingURL=export-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-results.js","sourceRoot":"","sources":["../../src/utils/export-results.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Fire lifecycle hooks without letting user callbacks break the call path.
3
+ */
4
+ import type { GMapsHooks, HookActionEvent, HookErrorEvent, HookRetryEvent } from '../types/hooks.js';
5
+ export declare function fireAction(hooks: GMapsHooks | undefined, event: HookActionEvent): void;
6
+ export declare function fireRetry(hooks: GMapsHooks | undefined, event: HookRetryEvent): void;
7
+ export declare function fireError(hooks: GMapsHooks | undefined, event: HookErrorEvent): void;
8
+ /** Wrap an Intent call with onAction / onError timing. */
9
+ export declare function withActionHook<T>(hooks: GMapsHooks | undefined, type: string, fn: () => Promise<T>): Promise<T>;
10
+ //# sourceMappingURL=hooks.d.ts.map