x-twitter-scraper 0.2.1 → 0.3.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 (201) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +51 -3
  3. package/client.d.mts +14 -27
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +14 -27
  6. package/client.d.ts.map +1 -1
  7. package/client.js +12 -27
  8. package/client.js.map +1 -1
  9. package/client.mjs +12 -27
  10. package/client.mjs.map +1 -1
  11. package/internal/request-options.d.mts +0 -4
  12. package/internal/request-options.d.mts.map +1 -1
  13. package/internal/request-options.d.ts +0 -4
  14. package/internal/request-options.d.ts.map +1 -1
  15. package/internal/request-options.js.map +1 -1
  16. package/internal/request-options.mjs.map +1 -1
  17. package/internal/utils/env.js +2 -2
  18. package/internal/utils/env.js.map +1 -1
  19. package/internal/utils/env.mjs +2 -2
  20. package/internal/utils/env.mjs.map +1 -1
  21. package/package.json +31 -10
  22. package/resources/account.d.mts +7 -6
  23. package/resources/account.d.mts.map +1 -1
  24. package/resources/account.d.ts +7 -6
  25. package/resources/account.d.ts.map +1 -1
  26. package/resources/account.js +3 -3
  27. package/resources/account.js.map +1 -1
  28. package/resources/account.mjs +3 -3
  29. package/resources/account.mjs.map +1 -1
  30. package/resources/api-keys.js +3 -3
  31. package/resources/api-keys.js.map +1 -1
  32. package/resources/api-keys.mjs +3 -3
  33. package/resources/api-keys.mjs.map +1 -1
  34. package/resources/compose.d.mts +1 -1
  35. package/resources/compose.d.ts +1 -1
  36. package/resources/compose.js +1 -1
  37. package/resources/compose.mjs +1 -1
  38. package/resources/credits.d.mts +1 -1
  39. package/resources/credits.d.ts +1 -1
  40. package/resources/credits.js +1 -1
  41. package/resources/credits.mjs +1 -1
  42. package/resources/drafts.d.mts +1 -1
  43. package/resources/drafts.d.ts +1 -1
  44. package/resources/drafts.js +1 -1
  45. package/resources/drafts.mjs +1 -1
  46. package/resources/events.js +1 -1
  47. package/resources/events.js.map +1 -1
  48. package/resources/events.mjs +1 -1
  49. package/resources/events.mjs.map +1 -1
  50. package/resources/extractions.d.mts +3 -2
  51. package/resources/extractions.d.mts.map +1 -1
  52. package/resources/extractions.d.ts +3 -2
  53. package/resources/extractions.d.ts.map +1 -1
  54. package/resources/index.d.mts +1 -3
  55. package/resources/index.d.mts.map +1 -1
  56. package/resources/index.d.ts +1 -3
  57. package/resources/index.d.ts.map +1 -1
  58. package/resources/index.js +1 -5
  59. package/resources/index.js.map +1 -1
  60. package/resources/index.mjs +0 -2
  61. package/resources/index.mjs.map +1 -1
  62. package/resources/monitors.d.mts +1 -1
  63. package/resources/monitors.d.ts +1 -1
  64. package/resources/monitors.js +1 -1
  65. package/resources/monitors.mjs +1 -1
  66. package/resources/radar.d.mts +45 -10
  67. package/resources/radar.d.mts.map +1 -1
  68. package/resources/radar.d.ts +45 -10
  69. package/resources/radar.d.ts.map +1 -1
  70. package/resources/radar.js +1 -1
  71. package/resources/radar.mjs +1 -1
  72. package/resources/shared.d.mts +47 -6
  73. package/resources/shared.d.mts.map +1 -1
  74. package/resources/shared.d.ts +47 -6
  75. package/resources/shared.d.ts.map +1 -1
  76. package/resources/styles.d.mts +1 -1
  77. package/resources/styles.d.ts +1 -1
  78. package/resources/styles.js +1 -1
  79. package/resources/styles.mjs +1 -1
  80. package/resources/subscribe.d.mts +1 -1
  81. package/resources/subscribe.d.ts +1 -1
  82. package/resources/subscribe.js +1 -1
  83. package/resources/subscribe.mjs +1 -1
  84. package/resources/trends.d.mts +2 -2
  85. package/resources/trends.d.ts +2 -2
  86. package/resources/trends.js +2 -2
  87. package/resources/trends.mjs +2 -2
  88. package/resources/webhooks.d.mts +2 -2
  89. package/resources/webhooks.d.ts +2 -2
  90. package/resources/webhooks.js +2 -2
  91. package/resources/webhooks.mjs +2 -2
  92. package/resources/x/accounts.d.mts +48 -0
  93. package/resources/x/accounts.d.mts.map +1 -1
  94. package/resources/x/accounts.d.ts +48 -0
  95. package/resources/x/accounts.d.ts.map +1 -1
  96. package/resources/x/accounts.js +6 -10
  97. package/resources/x/accounts.js.map +1 -1
  98. package/resources/x/accounts.mjs +6 -10
  99. package/resources/x/accounts.mjs.map +1 -1
  100. package/resources/x/bookmarks.d.mts +1 -1
  101. package/resources/x/bookmarks.d.ts +1 -1
  102. package/resources/x/bookmarks.js +1 -1
  103. package/resources/x/bookmarks.mjs +1 -1
  104. package/resources/x/communities/communities.d.mts +4 -4
  105. package/resources/x/communities/communities.d.ts +4 -4
  106. package/resources/x/communities/communities.js +4 -4
  107. package/resources/x/communities/communities.mjs +4 -4
  108. package/resources/x/communities/tweets.d.mts +3 -3
  109. package/resources/x/communities/tweets.d.ts +3 -3
  110. package/resources/x/communities/tweets.js +3 -3
  111. package/resources/x/communities/tweets.mjs +3 -3
  112. package/resources/x/followers.d.mts +2 -2
  113. package/resources/x/followers.d.ts +2 -2
  114. package/resources/x/followers.js +2 -2
  115. package/resources/x/followers.mjs +2 -2
  116. package/resources/x/index.d.mts +3 -3
  117. package/resources/x/index.d.mts.map +1 -1
  118. package/resources/x/index.d.ts +3 -3
  119. package/resources/x/index.d.ts.map +1 -1
  120. package/resources/x/index.js.map +1 -1
  121. package/resources/x/index.mjs.map +1 -1
  122. package/resources/x/lists.d.mts +4 -4
  123. package/resources/x/lists.d.ts +4 -4
  124. package/resources/x/lists.js +4 -4
  125. package/resources/x/lists.mjs +4 -4
  126. package/resources/x/media.d.mts +2 -2
  127. package/resources/x/media.d.ts +2 -2
  128. package/resources/x/media.js +2 -2
  129. package/resources/x/media.mjs +2 -2
  130. package/resources/x/tweets/index.d.mts +1 -1
  131. package/resources/x/tweets/index.d.mts.map +1 -1
  132. package/resources/x/tweets/index.d.ts +1 -1
  133. package/resources/x/tweets/index.d.ts.map +1 -1
  134. package/resources/x/tweets/index.js.map +1 -1
  135. package/resources/x/tweets/index.mjs.map +1 -1
  136. package/resources/x/tweets/tweets.d.mts +19 -36
  137. package/resources/x/tweets/tweets.d.mts.map +1 -1
  138. package/resources/x/tweets/tweets.d.ts +19 -36
  139. package/resources/x/tweets/tweets.d.ts.map +1 -1
  140. package/resources/x/tweets/tweets.js +7 -7
  141. package/resources/x/tweets/tweets.js.map +1 -1
  142. package/resources/x/tweets/tweets.mjs +7 -7
  143. package/resources/x/tweets/tweets.mjs.map +1 -1
  144. package/resources/x/users/index.d.mts +1 -1
  145. package/resources/x/users/index.d.mts.map +1 -1
  146. package/resources/x/users/index.d.ts +1 -1
  147. package/resources/x/users/index.d.ts.map +1 -1
  148. package/resources/x/users/index.js.map +1 -1
  149. package/resources/x/users/index.mjs.map +1 -1
  150. package/resources/x/users/users.d.mts +13 -29
  151. package/resources/x/users/users.d.mts.map +1 -1
  152. package/resources/x/users/users.d.ts +13 -29
  153. package/resources/x/users/users.d.ts.map +1 -1
  154. package/resources/x/users/users.js +11 -11
  155. package/resources/x/users/users.js.map +1 -1
  156. package/resources/x/users/users.mjs +11 -11
  157. package/resources/x/users/users.mjs.map +1 -1
  158. package/resources/x/x.d.mts +17 -10
  159. package/resources/x/x.d.mts.map +1 -1
  160. package/resources/x/x.d.ts +17 -10
  161. package/resources/x/x.d.ts.map +1 -1
  162. package/resources/x/x.js +3 -6
  163. package/resources/x/x.js.map +1 -1
  164. package/resources/x/x.mjs +3 -6
  165. package/resources/x/x.mjs.map +1 -1
  166. package/src/client.ts +16 -56
  167. package/src/internal/request-options.ts +0 -2
  168. package/src/internal/utils/env.ts +2 -2
  169. package/src/resources/account.ts +10 -8
  170. package/src/resources/api-keys.ts +3 -3
  171. package/src/resources/compose.ts +1 -1
  172. package/src/resources/credits.ts +1 -1
  173. package/src/resources/drafts.ts +1 -1
  174. package/src/resources/events.ts +1 -1
  175. package/src/resources/extractions.ts +5 -3
  176. package/src/resources/index.ts +1 -13
  177. package/src/resources/monitors.ts +1 -1
  178. package/src/resources/radar.ts +50 -10
  179. package/src/resources/shared.ts +74 -14
  180. package/src/resources/styles.ts +1 -1
  181. package/src/resources/subscribe.ts +1 -1
  182. package/src/resources/trends.ts +2 -2
  183. package/src/resources/webhooks.ts +2 -2
  184. package/src/resources/x/accounts.ts +65 -10
  185. package/src/resources/x/bookmarks.ts +1 -1
  186. package/src/resources/x/communities/communities.ts +4 -4
  187. package/src/resources/x/communities/tweets.ts +3 -3
  188. package/src/resources/x/followers.ts +2 -2
  189. package/src/resources/x/index.ts +1 -2
  190. package/src/resources/x/lists.ts +4 -4
  191. package/src/resources/x/media.ts +2 -2
  192. package/src/resources/x/tweets/index.ts +0 -1
  193. package/src/resources/x/tweets/tweets.ts +20 -52
  194. package/src/resources/x/users/index.ts +0 -1
  195. package/src/resources/x/users/users.ts +12 -40
  196. package/src/resources/x/x.ts +19 -10
  197. package/src/version.ts +1 -1
  198. package/version.d.mts +1 -1
  199. package/version.d.ts +1 -1
  200. package/version.js +1 -1
  201. package/version.mjs +1 -1
@@ -36,7 +36,7 @@ export class Tweets extends APIResource {
36
36
  }
37
37
 
38
38
  /**
39
- * Look up tweet
39
+ * Get tweet with full text, author, metrics and media
40
40
  *
41
41
  * @example
42
42
  * ```ts
@@ -76,7 +76,7 @@ export class Tweets extends APIResource {
76
76
  }
77
77
 
78
78
  /**
79
- * Get users who liked a tweet
79
+ * List users who liked a tweet
80
80
  *
81
81
  * @example
82
82
  * ```ts
@@ -94,7 +94,7 @@ export class Tweets extends APIResource {
94
94
  }
95
95
 
96
96
  /**
97
- * Get quote tweets of a tweet
97
+ * List quote tweets of a tweet
98
98
  *
99
99
  * @example
100
100
  * ```ts
@@ -112,7 +112,7 @@ export class Tweets extends APIResource {
112
112
  }
113
113
 
114
114
  /**
115
- * Get replies to a tweet
115
+ * List replies to a tweet
116
116
  *
117
117
  * @example
118
118
  * ```ts
@@ -130,7 +130,7 @@ export class Tweets extends APIResource {
130
130
  }
131
131
 
132
132
  /**
133
- * Get users who retweeted a tweet
133
+ * List users who retweeted a tweet
134
134
  *
135
135
  * @example
136
136
  * ```ts
@@ -148,7 +148,7 @@ export class Tweets extends APIResource {
148
148
  }
149
149
 
150
150
  /**
151
- * Get thread context for a tweet
151
+ * Get full conversation thread for a tweet
152
152
  *
153
153
  * @example
154
154
  * ```ts
@@ -166,7 +166,7 @@ export class Tweets extends APIResource {
166
166
  }
167
167
 
168
168
  /**
169
- * Search tweets
169
+ * Search tweets with X query operators and pagination
170
170
  *
171
171
  * @example
172
172
  * ```ts
@@ -180,48 +180,6 @@ export class Tweets extends APIResource {
180
180
  }
181
181
  }
182
182
 
183
- /**
184
- * Tweet returned from search results with inline author info.
185
- */
186
- export interface SearchTweet {
187
- id: string;
188
-
189
- text: string;
190
-
191
- author?: SearchTweet.Author;
192
-
193
- bookmarkCount?: number;
194
-
195
- createdAt?: string;
196
-
197
- /**
198
- * True for Note Tweets (long-form content, up to 25,000 characters)
199
- */
200
- isNoteTweet?: boolean;
201
-
202
- likeCount?: number;
203
-
204
- quoteCount?: number;
205
-
206
- replyCount?: number;
207
-
208
- retweetCount?: number;
209
-
210
- viewCount?: number;
211
- }
212
-
213
- export namespace SearchTweet {
214
- export interface Author {
215
- id: string;
216
-
217
- name: string;
218
-
219
- username: string;
220
-
221
- verified?: boolean;
222
- }
223
- }
224
-
225
183
  /**
226
184
  * Author of a tweet with follower count and verification status.
227
185
  */
@@ -338,17 +296,28 @@ export interface TweetCreateParams {
338
296
  */
339
297
  account: string;
340
298
 
341
- text: string;
342
-
343
299
  attachment_url?: string;
344
300
 
345
301
  community_id?: string;
346
302
 
347
303
  is_note_tweet?: boolean;
348
304
 
305
+ /**
306
+ * Array of media URLs to attach (mutually exclusive with media_ids)
307
+ */
308
+ media?: Array<string>;
309
+
310
+ /**
311
+ * Array of media IDs to attach (mutually exclusive with media)
312
+ */
349
313
  media_ids?: Array<string>;
350
314
 
351
315
  reply_to_tweet_id?: string;
316
+
317
+ /**
318
+ * Tweet text (optional when media is provided)
319
+ */
320
+ text?: string;
352
321
  }
353
322
 
354
323
  export interface TweetListParams {
@@ -462,7 +431,6 @@ Tweets.Retweet = Retweet;
462
431
 
463
432
  export declare namespace Tweets {
464
433
  export {
465
- type SearchTweet as SearchTweet,
466
434
  type TweetAuthor as TweetAuthor,
467
435
  type TweetDetail as TweetDetail,
468
436
  type TweetCreateResponse as TweetCreateResponse,
@@ -9,7 +9,6 @@ export {
9
9
  } from './follow';
10
10
  export {
11
11
  Users,
12
- type UserProfile,
13
12
  type UserRetrieveBatchParams,
14
13
  type UserRetrieveFollowersParams,
15
14
  type UserRetrieveFollowersYouKnowParams,
@@ -15,25 +15,25 @@ import { RequestOptions } from '../../../internal/request-options';
15
15
  import { path } from '../../../internal/utils/path';
16
16
 
17
17
  /**
18
- * X data lookups (subscription required)
18
+ * Look up, search, and explore user profiles and relationships
19
19
  */
20
20
  export class Users extends APIResource {
21
21
  follow: FollowAPI.Follow = new FollowAPI.Follow(this._client);
22
22
 
23
23
  /**
24
- * Look up X user
24
+ * Get user profile with follower counts and verification
25
25
  *
26
26
  * @example
27
27
  * ```ts
28
28
  * const userProfile = await client.x.users.retrieve('id');
29
29
  * ```
30
30
  */
31
- retrieve(id: string, options?: RequestOptions): APIPromise<UserProfile> {
31
+ retrieve(id: string, options?: RequestOptions): APIPromise<Shared.UserProfile> {
32
32
  return this._client.get(path`/x/users/${id}`, options);
33
33
  }
34
34
 
35
35
  /**
36
- * Get multiple users by IDs
36
+ * Look up multiple users by IDs in one call
37
37
  *
38
38
  * @example
39
39
  * ```ts
@@ -47,7 +47,7 @@ export class Users extends APIResource {
47
47
  }
48
48
 
49
49
  /**
50
- * Get user followers
50
+ * List followers of a user
51
51
  *
52
52
  * @example
53
53
  * ```ts
@@ -64,7 +64,7 @@ export class Users extends APIResource {
64
64
  }
65
65
 
66
66
  /**
67
- * Get followers you know for a user
67
+ * List mutual followers between you and a user
68
68
  *
69
69
  * @example
70
70
  * ```ts
@@ -81,7 +81,7 @@ export class Users extends APIResource {
81
81
  }
82
82
 
83
83
  /**
84
- * Get users this user follows
84
+ * List accounts a user follows
85
85
  *
86
86
  * @example
87
87
  * ```ts
@@ -98,7 +98,7 @@ export class Users extends APIResource {
98
98
  }
99
99
 
100
100
  /**
101
- * Get tweets liked by a user
101
+ * List tweets liked by a user
102
102
  *
103
103
  * @example
104
104
  * ```ts
@@ -116,7 +116,7 @@ export class Users extends APIResource {
116
116
  }
117
117
 
118
118
  /**
119
- * Get media tweets by a user
119
+ * List media tweets posted by a user
120
120
  *
121
121
  * @example
122
122
  * ```ts
@@ -134,7 +134,7 @@ export class Users extends APIResource {
134
134
  }
135
135
 
136
136
  /**
137
- * Get tweets mentioning a user
137
+ * List tweets mentioning a user
138
138
  *
139
139
  * @example
140
140
  * ```ts
@@ -168,7 +168,7 @@ export class Users extends APIResource {
168
168
  }
169
169
 
170
170
  /**
171
- * Get recent tweets by a user
171
+ * List recent tweets posted by a user
172
172
  *
173
173
  * @example
174
174
  * ```ts
@@ -186,7 +186,7 @@ export class Users extends APIResource {
186
186
  }
187
187
 
188
188
  /**
189
- * Get verified followers
189
+ * List verified followers of a user
190
190
  *
191
191
  * @example
192
192
  * ```ts
@@ -203,33 +203,6 @@ export class Users extends APIResource {
203
203
  }
204
204
  }
205
205
 
206
- /**
207
- * X user profile with bio, follower counts, and verification status.
208
- */
209
- export interface UserProfile {
210
- id: string;
211
-
212
- name: string;
213
-
214
- username: string;
215
-
216
- createdAt?: string;
217
-
218
- description?: string;
219
-
220
- followers?: number;
221
-
222
- following?: number;
223
-
224
- location?: string;
225
-
226
- profilePicture?: string;
227
-
228
- statusesCount?: number;
229
-
230
- verified?: boolean;
231
- }
232
-
233
206
  export interface UserRetrieveBatchParams {
234
207
  /**
235
208
  * Comma-separated user IDs (max 100)
@@ -339,7 +312,6 @@ Users.Follow = Follow;
339
312
 
340
313
  export declare namespace Users {
341
314
  export {
342
- type UserProfile as UserProfile,
343
315
  type UserRetrieveBatchParams as UserRetrieveBatchParams,
344
316
  type UserRetrieveFollowersParams as UserRetrieveFollowersParams,
345
317
  type UserRetrieveFollowersYouKnowParams as UserRetrieveFollowersYouKnowParams,
@@ -61,7 +61,6 @@ import {
61
61
  } from './communities/communities';
62
62
  import * as TweetsAPI from './tweets/tweets';
63
63
  import {
64
- SearchTweet,
65
64
  TweetAuthor,
66
65
  TweetCreateParams,
67
66
  TweetCreateResponse,
@@ -80,7 +79,6 @@ import {
80
79
  } from './tweets/tweets';
81
80
  import * as UsersAPI from './users/users';
82
81
  import {
83
- UserProfile,
84
82
  UserRetrieveBatchParams,
85
83
  UserRetrieveFollowersParams,
86
84
  UserRetrieveFollowersYouKnowParams,
@@ -97,9 +95,6 @@ import { APIPromise } from '../../core/api-promise';
97
95
  import { RequestOptions } from '../../internal/request-options';
98
96
  import { path } from '../../internal/utils/path';
99
97
 
100
- /**
101
- * X data lookups (subscription required)
102
- */
103
98
  export class X extends APIResource {
104
99
  tweets: TweetsAPI.Tweets = new TweetsAPI.Tweets(this._client);
105
100
  users: UsersAPI.Users = new UsersAPI.Users(this._client);
@@ -155,15 +150,18 @@ export class X extends APIResource {
155
150
  }
156
151
 
157
152
  /**
158
- * Get trending topics
153
+ * Get trending hashtags and topics from X by region
159
154
  *
160
155
  * @example
161
156
  * ```ts
162
157
  * const response = await client.x.getTrends();
163
158
  * ```
164
159
  */
165
- getTrends(options?: RequestOptions): APIPromise<XGetTrendsResponse> {
166
- return this._client.get('/x/trends', options);
160
+ getTrends(
161
+ query: XGetTrendsParams | null | undefined = {},
162
+ options?: RequestOptions,
163
+ ): APIPromise<XGetTrendsResponse> {
164
+ return this._client.get('/x/trends', { query, ...options });
167
165
  }
168
166
  }
169
167
 
@@ -283,6 +281,18 @@ export interface XGetNotificationsParams {
283
281
  type?: 'All' | 'Verified' | 'Mentions';
284
282
  }
285
283
 
284
+ export interface XGetTrendsParams {
285
+ /**
286
+ * Number of trending topics to return (1-50, default 30)
287
+ */
288
+ count?: number;
289
+
290
+ /**
291
+ * Region WOEID (1=Worldwide, 23424977=US, 23424975=UK, 23424969=Turkey)
292
+ */
293
+ woeid?: number;
294
+ }
295
+
286
296
  X.Tweets = Tweets;
287
297
  X.Users = Users;
288
298
  X.Followers = Followers;
@@ -301,11 +311,11 @@ export declare namespace X {
301
311
  type XGetTrendsResponse as XGetTrendsResponse,
302
312
  type XGetHomeTimelineParams as XGetHomeTimelineParams,
303
313
  type XGetNotificationsParams as XGetNotificationsParams,
314
+ type XGetTrendsParams as XGetTrendsParams,
304
315
  };
305
316
 
306
317
  export {
307
318
  Tweets as Tweets,
308
- type SearchTweet as SearchTweet,
309
319
  type TweetAuthor as TweetAuthor,
310
320
  type TweetDetail as TweetDetail,
311
321
  type TweetCreateResponse as TweetCreateResponse,
@@ -324,7 +334,6 @@ export declare namespace X {
324
334
 
325
335
  export {
326
336
  Users as Users,
327
- type UserProfile as UserProfile,
328
337
  type UserRetrieveBatchParams as UserRetrieveBatchParams,
329
338
  type UserRetrieveFollowersParams as UserRetrieveFollowersParams,
330
339
  type UserRetrieveFollowersYouKnowParams as UserRetrieveFollowersYouKnowParams,
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = '0.2.1'; // x-release-please-version
1
+ export const VERSION = '0.3.1'; // x-release-please-version
package/version.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.2.1";
1
+ export declare const VERSION = "0.3.1";
2
2
  //# sourceMappingURL=version.d.mts.map
package/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.2.1";
1
+ export declare const VERSION = "0.3.1";
2
2
  //# sourceMappingURL=version.d.ts.map
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '0.2.1'; // x-release-please-version
4
+ exports.VERSION = '0.3.1'; // x-release-please-version
5
5
  //# sourceMappingURL=version.js.map
package/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.2.1'; // x-release-please-version
1
+ export const VERSION = '0.3.1'; // x-release-please-version
2
2
  //# sourceMappingURL=version.mjs.map