@tileflow/search 0.1.0-alpha.2 → 0.1.0-alpha.4

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.
@@ -16,7 +16,10 @@ var geocodingLimits = Object.freeze({
16
16
  maximumResponseBytes: 64 * 1024,
17
17
  maximumSafeErrorBytes: 8 * 1024,
18
18
  maximumSourceCharacters: 128,
19
- maximumSuggestionTokenCharacters: 2048
19
+ maximumSuggestionTokenCharacters: 2048,
20
+ maximumDetailEntries: 100,
21
+ maximumOpeningHoursEntries: 20,
22
+ maximumOpeningHoursLines: 50
20
23
  });
21
24
  var boundedText = (maximum) => z.string().trim().min(1).max(maximum).refine((value) => !controlCharacterPattern.test(value), {
22
25
  message: "Control characters are not allowed"
@@ -24,12 +27,18 @@ var boundedText = (maximum) => z.string().trim().min(1).max(maximum).refine((val
24
27
  var longitude = z.number().finite().min(-180).max(180);
25
28
  var latitude = z.number().finite().min(-90).max(90);
26
29
  var geocodingPositionSchema = z.tuple([longitude, latitude]);
27
- var geocodingRetentionModes = ["temporary", "persistent"];
28
- var geocodingBoundsSchema = z.tuple([longitude, latitude, longitude, latitude]).refine(([west, south, east]) => west < east, { message: "West must be less than east" }).refine(([, south, , north]) => south < north, {
30
+ var geocodingRetentionModes = ["temporary"];
31
+ var geocodingBoundsSchema = z.tuple([longitude, latitude, longitude, latitude]).refine(([west, , east]) => west < east, { message: "West must be less than east" }).refine(([, south, , north]) => south < north, {
29
32
  message: "South must be less than north"
30
33
  });
34
+ var searchPlaceDetails = ["contacts", "openingHours", "timeZone", "accessPoints"];
35
+ var searchPlaceDetailSchema = z.enum(searchPlaceDetails);
36
+ var searchPlaceDetailsSchema = z.array(searchPlaceDetailSchema).min(1).max(searchPlaceDetails.length).refine((values) => new Set(values).size === values.length, {
37
+ message: "Place details must be unique"
38
+ });
31
39
  var geocodingForwardRequestSchema = z.object({
32
40
  bounds: geocodingBoundsSchema.optional(),
41
+ include: searchPlaceDetailsSchema.optional(),
33
42
  language: z.string().max(geocodingLimits.maximumLanguageCharacters).regex(languagePattern).optional(),
34
43
  limit: z.number().int().min(1).max(geocodingLimits.maximumLimit).optional(),
35
44
  proximity: geocodingPositionSchema.optional(),
@@ -39,8 +48,10 @@ var geocodingForwardRequestSchema = z.object({
39
48
  message: "Bounds and proximity are mutually exclusive",
40
49
  path: ["proximity"]
41
50
  });
51
+ var autocompleteIncludeSchema = z.tuple([z.literal("place")]);
42
52
  var autocompleteRequestSchema = z.object({
43
53
  bounds: geocodingBoundsSchema.optional(),
54
+ include: autocompleteIncludeSchema.optional(),
44
55
  language: z.string().max(geocodingLimits.maximumLanguageCharacters).regex(languagePattern).optional(),
45
56
  limit: z.number().int().min(1).max(geocodingLimits.maximumLimit).default(geocodingLimits.defaultLimit),
46
57
  proximity: geocodingPositionSchema.optional(),
@@ -51,6 +62,7 @@ var autocompleteRequestSchema = z.object({
51
62
  });
52
63
  var reverseGeocodingKindSchema = z.enum(["address", "street", "locality", "place"]);
53
64
  var geocodingReverseRequestSchema = z.object({
65
+ include: searchPlaceDetailsSchema.optional(),
54
66
  kinds: z.array(reverseGeocodingKindSchema).min(1).max(4).optional(),
55
67
  language: z.string().max(geocodingLimits.maximumLanguageCharacters).regex(languagePattern).optional(),
56
68
  limit: z.number().int().min(1).max(geocodingLimits.maximumLimit).default(geocodingLimits.defaultReverseLimit),
@@ -82,7 +94,51 @@ var geocodingAddressSchema = z.object({
82
94
  region: addressPart.optional(),
83
95
  street: addressPart.optional()
84
96
  }).strict();
97
+ var searchLiteralText = (maximum) => z.string().min(1).max(maximum).refine((value) => !/[\p{Cc}\p{Cs}]/u.test(value));
98
+ var searchCategoryIdSchema = searchLiteralText(100);
99
+ var searchCategorySchema = z.object({
100
+ id: searchCategoryIdSchema,
101
+ name: searchLiteralText(100),
102
+ localizedName: searchLiteralText(100).optional(),
103
+ primary: z.boolean().optional()
104
+ }).strict();
105
+ var searchPlaceMetadata = {
106
+ name: searchLiteralText(200).optional(),
107
+ categories: z.array(searchCategorySchema).min(1).max(100).optional(),
108
+ foodTypes: z.array(searchCategorySchema).min(1).max(100).optional(),
109
+ businessChains: z.array(z.object({ id: searchLiteralText(100), name: searchLiteralText(100) }).strict()).min(1).max(100).optional()
110
+ };
111
+ var contactListSchema = z.array(
112
+ z.object({
113
+ value: searchLiteralText(2048),
114
+ label: searchLiteralText(256).optional()
115
+ }).strict()
116
+ ).min(1).max(geocodingLimits.maximumDetailEntries);
117
+ var searchContactsSchema = z.object({
118
+ phones: contactListSchema.optional(),
119
+ websites: contactListSchema.optional(),
120
+ emails: contactListSchema.optional()
121
+ }).strict();
122
+ var searchOpeningHoursSchema = z.array(
123
+ z.object({
124
+ display: z.array(searchLiteralText(256)).min(1).max(geocodingLimits.maximumOpeningHoursLines).optional(),
125
+ openNow: z.boolean().optional()
126
+ }).strict()
127
+ ).min(1).max(geocodingLimits.maximumOpeningHoursEntries);
128
+ var searchTimeZoneSchema = z.object({
129
+ name: searchLiteralText(64),
130
+ utcOffsetSeconds: z.number().int().min(-86400).max(86400).optional()
131
+ }).strict();
132
+ var searchPlaceDetailFields = {
133
+ distanceMeters: z.number().finite().nonnegative().optional(),
134
+ contacts: searchContactsSchema.optional(),
135
+ openingHours: searchOpeningHoursSchema.optional(),
136
+ timeZone: searchTimeZoneSchema.optional(),
137
+ accessPoints: z.array(z.object({ position: geocodingPositionSchema }).strict()).min(1).max(geocodingLimits.maximumDetailEntries).optional()
138
+ };
85
139
  var geocodingResultSchema = z.object({
140
+ ...searchPlaceMetadata,
141
+ ...searchPlaceDetailFields,
86
142
  address: geocodingAddressSchema,
87
143
  bounds: geocodingBoundsSchema.optional(),
88
144
  kind: z.enum(geocodingResultKinds),
@@ -102,27 +158,32 @@ var geocodingAttributionSchema = z.object({
102
158
  message: "Expected an HTTPS URL without credentials"
103
159
  }).optional()
104
160
  }).strict();
161
+ var placeOperationUnitsSchema = z.union([z.literal(25), z.literal(75)]);
105
162
  var geocodingForwardResponseSchema = z.object({
106
163
  attribution: z.array(geocodingAttributionSchema).min(1).max(geocodingLimits.maximumAttributionEntries),
107
164
  queryId: z.string().regex(queryIdPattern),
108
165
  results: z.array(geocodingResultSchema).max(geocodingLimits.maximumLimit),
109
166
  schemaVersion: z.literal(1),
110
167
  source: geocodingSourceSchema,
111
- usage: z.object({ units: z.literal(1) }).strict()
168
+ usage: z.object({ units: placeOperationUnitsSchema }).strict()
112
169
  }).strict();
113
170
  var geocodingReverseResponseSchema = geocodingForwardResponseSchema;
114
171
  var geocodingSuggestionSchema = z.object({
115
172
  kind: z.enum(geocodingResultKinds),
116
173
  label: boundedText(512),
174
+ addressLabel: boundedText(512).optional(),
175
+ place: geocodingResultSchema.optional(),
117
176
  token: z.string().min(1).max(geocodingLimits.maximumSuggestionTokenCharacters).regex(/^[\x21-\x7e]+$/u)
118
177
  }).strict();
119
178
  var autocompleteResponseSchema = z.object({
120
179
  attribution: z.array(geocodingAttributionSchema).min(1).max(geocodingLimits.maximumAttributionEntries),
121
180
  schemaVersion: z.literal(1),
122
181
  source: geocodingSourceSchema,
123
- suggestions: z.array(geocodingSuggestionSchema).max(geocodingLimits.maximumLimit)
182
+ suggestions: z.array(geocodingSuggestionSchema).max(geocodingLimits.maximumLimit),
183
+ usage: z.object({ units: z.union([z.literal(10), z.literal(25)]) }).strict()
124
184
  }).strict();
125
185
  var resolveSuggestionRequestSchema = z.object({
186
+ include: searchPlaceDetailsSchema.optional(),
126
187
  retention: z.enum(geocodingRetentionModes).default("temporary"),
127
188
  token: z.string().min(1).max(geocodingLimits.maximumSuggestionTokenCharacters).regex(/^[\x21-\x7e]+$/u)
128
189
  }).strict();
@@ -131,7 +192,7 @@ var resolveSuggestionResponseSchema = z.object({
131
192
  result: geocodingResultSchema,
132
193
  schemaVersion: z.literal(1),
133
194
  source: geocodingSourceSchema,
134
- usage: z.object({ units: z.literal(1) }).strict()
195
+ usage: z.object({ units: placeOperationUnitsSchema }).strict()
135
196
  }).strict();
136
197
  function isCredentialFreeHttpsUrl(value) {
137
198
  try {
@@ -141,18 +202,87 @@ function isCredentialFreeHttpsUrl(value) {
141
202
  return false;
142
203
  }
143
204
  }
205
+ var nearbyLimits = Object.freeze({
206
+ defaultLimit: 20,
207
+ maximumLimit: 100,
208
+ maximumRadiusMeters: 21e6,
209
+ maximumCategoryCharacters: 100,
210
+ maximumFilterCategories: 10,
211
+ maximumCountries: 100,
212
+ maximumCursorCharacters: 8192,
213
+ maximumRequestBytes: 32 * 1024,
214
+ maximumResponseBytes: 512 * 1024
215
+ });
216
+ var nearbyCursorSchema = z.string().min(1).max(nearbyLimits.maximumCursorCharacters).regex(/^[\x21-\x7e]+$/u);
217
+ var categoryFilter = z.array(searchCategoryIdSchema).min(1).max(nearbyLimits.maximumFilterCategories);
218
+ var nearbyRequestSchema = z.object({
219
+ position: geocodingPositionSchema,
220
+ radiusMeters: z.number().int().min(1).max(nearbyLimits.maximumRadiusMeters).optional(),
221
+ bounds: geocodingBoundsSchema.optional(),
222
+ includeCategories: categoryFilter.optional(),
223
+ excludeCategories: categoryFilter.optional(),
224
+ countries: z.array(z.string().regex(/^(?:[A-Z]{2}|[A-Z]{3})$/u)).min(1).max(nearbyLimits.maximumCountries).optional(),
225
+ language: geocodingForwardRequestSchema.shape.language,
226
+ include: searchPlaceDetailsSchema.optional(),
227
+ limit: z.number().int().min(1).max(nearbyLimits.maximumLimit).default(nearbyLimits.defaultLimit),
228
+ cursor: nearbyCursorSchema.optional()
229
+ }).strict();
230
+ var nearbyPlaceSchema = geocodingResultSchema.omit({ sourceRef: true }).extend({
231
+ kind: z.literal("place"),
232
+ token: geocodingSuggestionSchema.shape.token.optional()
233
+ }).strict();
234
+ var nearbyResponseSchema = z.object({
235
+ schemaVersion: z.literal(1),
236
+ provider: z.literal("aws"),
237
+ results: z.array(nearbyPlaceSchema).max(nearbyLimits.maximumLimit),
238
+ nextCursor: nearbyCursorSchema.optional(),
239
+ source: geocodingSourceSchema,
240
+ attribution: geocodingForwardResponseSchema.shape.attribution,
241
+ usage: z.object({ units: placeOperationUnitsSchema }).strict()
242
+ }).strict().refine(
243
+ (value) => new TextEncoder().encode(JSON.stringify(value)).byteLength <= nearbyLimits.maximumResponseBytes,
244
+ { message: "Nearby response exceeds the encoded byte limit" }
245
+ );
246
+ var searchCategoriesResponseSchema = z.object({
247
+ schemaVersion: z.literal(1),
248
+ provider: z.literal("aws"),
249
+ categories: z.array(searchCategorySchema).min(1).max(2e3),
250
+ source: geocodingSourceSchema,
251
+ attribution: geocodingForwardResponseSchema.shape.attribution,
252
+ usage: z.object({ units: z.literal(0) }).strict()
253
+ }).strict();
254
+ var resolvePlaceRequestSchema = resolveSuggestionRequestSchema;
255
+ var resolvePlaceResponseSchema = resolveSuggestionResponseSchema;
256
+ var searchContactDetails = ["contacts", "openingHours"];
257
+ function searchOperationUnits(operation, include) {
258
+ if (operation === "categories") return 0;
259
+ if (operation === "autocomplete") return include?.length ? 25 : 10;
260
+ return include?.length ? 75 : 25;
261
+ }
144
262
 
145
263
  export {
146
264
  geocodingLimits,
147
265
  geocodingPositionSchema,
148
266
  geocodingRetentionModes,
149
267
  geocodingBoundsSchema,
268
+ searchPlaceDetails,
269
+ searchPlaceDetailSchema,
270
+ searchPlaceDetailsSchema,
150
271
  geocodingForwardRequestSchema,
272
+ autocompleteIncludeSchema,
151
273
  autocompleteRequestSchema,
152
274
  reverseGeocodingKindSchema,
153
275
  geocodingReverseRequestSchema,
154
276
  geocodingResultKinds,
155
277
  geocodingAddressSchema,
278
+ searchLiteralText,
279
+ searchCategoryIdSchema,
280
+ searchCategorySchema,
281
+ searchPlaceMetadata,
282
+ searchContactsSchema,
283
+ searchOpeningHoursSchema,
284
+ searchTimeZoneSchema,
285
+ searchPlaceDetailFields,
156
286
  geocodingResultSchema,
157
287
  geocodingSourceSchema,
158
288
  geocodingAttributionSchema,
@@ -161,5 +291,15 @@ export {
161
291
  geocodingSuggestionSchema,
162
292
  autocompleteResponseSchema,
163
293
  resolveSuggestionRequestSchema,
164
- resolveSuggestionResponseSchema
294
+ resolveSuggestionResponseSchema,
295
+ nearbyLimits,
296
+ nearbyCursorSchema,
297
+ nearbyRequestSchema,
298
+ nearbyPlaceSchema,
299
+ nearbyResponseSchema,
300
+ searchCategoriesResponseSchema,
301
+ resolvePlaceRequestSchema,
302
+ resolvePlaceResponseSchema,
303
+ searchContactDetails,
304
+ searchOperationUnits
165
305
  };
package/dist/client.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { AutocompleteRequest, AutocompleteResponse, GeocodingForwardRequest, GeocodingForwardResponse, GeocodingReverseRequest, GeocodingReverseResponse, ResolveSuggestionRequest, ResolveSuggestionResponse } from './contract.js';
1
+ import { AutocompleteRequest, AutocompleteResponse, GeocodingForwardRequest, GeocodingForwardResponse, GeocodingReverseRequest, GeocodingReverseResponse, SearchCategoriesResponse, ResolveSuggestionRequest, ResolveSuggestionResponse, NearbyRequest, NearbyResponse } from './contract.js';
2
2
  import 'zod';
3
3
 
4
- declare const GEOCODING_ERROR_CODES: readonly ["GEOCODING_ABORTED", "GEOCODING_DISABLED", "GEOCODING_INVALID_REQUEST", "GEOCODING_INVALID_SUGGESTION", "GEOCODING_PICK_LIMIT_EXCEEDED", "GEOCODING_QUOTA_EXCEEDED", "GEOCODING_REQUEST_TOO_LARGE", "GEOCODING_SUGGESTION_EXPIRED", "GEOCODING_TERRITORY_UNSUPPORTED", "GEOCODING_UNAVAILABLE", "GEOCODING_UPSTREAM_INVALID", "GEOCODING_UPSTREAM_THROTTLED", "GEOCODING_UPSTREAM_TIMEOUT", "GEOCODING_UPSTREAM_UNAVAILABLE", "GEOCODING_USAGE_UNCONFIRMED"];
4
+ declare const GEOCODING_ERROR_CODES: readonly ["GEOCODING_FILTER_UNSUPPORTED", "GEOCODING_PLAN_UNAVAILABLE", "GEOCODING_EVALUATION_REQUIRED", "GEOCODING_EVALUATION_EXPIRED", "GEOCODING_EVALUATION_EXHAUSTED", "GEOCODING_INVALID_CURSOR", "GEOCODING_CURSOR_EXPIRED", "GEOCODING_ABORTED", "GEOCODING_DISABLED", "GEOCODING_INVALID_REQUEST", "GEOCODING_INVALID_SUGGESTION", "GEOCODING_PICK_LIMIT_EXCEEDED", "GEOCODING_QUOTA_EXCEEDED", "GEOCODING_REQUEST_TOO_LARGE", "GEOCODING_SUGGESTION_EXPIRED", "GEOCODING_UNAVAILABLE", "GEOCODING_UPSTREAM_INVALID", "GEOCODING_UPSTREAM_THROTTLED", "GEOCODING_UPSTREAM_TIMEOUT", "GEOCODING_UPSTREAM_UNAVAILABLE", "GEOCODING_USAGE_UNCONFIRMED"];
5
5
  type GeocodingErrorCode = (typeof GEOCODING_ERROR_CODES)[number];
6
6
  type GeocodeOptions = Readonly<{
7
7
  apiKey: string;
@@ -13,15 +13,20 @@ declare class GeocodingError extends Error {
13
13
  readonly code: GeocodingErrorCode | null;
14
14
  readonly requestId: string | null;
15
15
  readonly status: number;
16
+ readonly retryAfterSeconds: number | null;
16
17
  constructor(message: string, input: {
17
18
  code?: GeocodingErrorCode;
18
19
  requestId?: string;
19
20
  status: number;
21
+ retryAfterSeconds?: number | null;
20
22
  });
21
23
  }
22
24
  declare function geocode(request: GeocodingForwardRequest, options: GeocodeOptions): Promise<GeocodingForwardResponse>;
23
25
  declare function geocodeReverse(request: GeocodingReverseRequest, options: GeocodeOptions): Promise<GeocodingReverseResponse>;
24
26
  declare function autocomplete(request: AutocompleteRequest, options: GeocodeOptions): Promise<AutocompleteResponse>;
25
27
  declare function resolveSuggestion(request: ResolveSuggestionRequest, options: GeocodeOptions): Promise<ResolveSuggestionResponse>;
28
+ declare const resolvePlace: typeof resolveSuggestion;
29
+ declare function searchNearby(request: NearbyRequest, options: GeocodeOptions): Promise<NearbyResponse>;
30
+ declare function listCategories(options: GeocodeOptions): Promise<SearchCategoriesResponse>;
26
31
 
27
- export { GEOCODING_ERROR_CODES, type GeocodeOptions, GeocodingError, type GeocodingErrorCode, autocomplete, geocode, geocodeReverse, resolveSuggestion };
32
+ export { GEOCODING_ERROR_CODES, type GeocodeOptions, GeocodingError, type GeocodingErrorCode, autocomplete, geocode, geocodeReverse, listCategories, resolvePlace, resolveSuggestion, searchNearby };
package/dist/client.js CHANGED
@@ -4,14 +4,20 @@ import {
4
4
  autocomplete,
5
5
  geocode,
6
6
  geocodeReverse,
7
- resolveSuggestion
8
- } from "./chunk-YMLUPVQH.js";
9
- import "./chunk-EDYCZVXI.js";
7
+ listCategories,
8
+ resolvePlace,
9
+ resolveSuggestion,
10
+ searchNearby
11
+ } from "./chunk-QDEMNVJD.js";
12
+ import "./chunk-W66J2DAS.js";
10
13
  export {
11
14
  GEOCODING_ERROR_CODES,
12
15
  GeocodingError,
13
16
  autocomplete,
14
17
  geocode,
15
18
  geocodeReverse,
16
- resolveSuggestion
19
+ listCategories,
20
+ resolvePlace,
21
+ resolveSuggestion,
22
+ searchNearby
17
23
  };