Skip to content

Commit df39e13

Browse files
authored
Merge pull request #8 from surmon-china/v0.3.0
feat: v0.3.0
2 parents 26dbcc2 + 67a383f commit df39e13

File tree

9 files changed

+2594
-2120
lines changed

9 files changed

+2594
-2120
lines changed

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,24 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
### v0.3.0 (2022-11-24)
6+
7+
**Breaking Change**
8+
9+
- Upgrade axios to `1.x` ([Cannot find name 'ProgressEvent'](https://github.com/axios/axios/issues/5297))
10+
- Upgrade mongodb to `4.12.x`
11+
- Upgrade [url endpoint to v1](https://www.mongodb.com/docs/atlas/api/data-api-resources/#base-url)
12+
- Add `cloud` provider config
13+
- Remove built-in `regions`
14+
15+
**Fix**
16+
17+
- [#6 `error.toJSON` is not a function](https://github.com/surmon-china/mongodb-data-api/issues/6)
18+
19+
**Chore**
20+
21+
- Upgrade deps
22+
523
### v0.2.1 (2022-11-19)
624

725
**Fix**

README.md

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
 
1313
[![GitHub license](https://img.shields.io/github/license/surmon-china/mongodb-data-api.svg?style=for-the-badge)](/LICENSE)
1414

15-
MongoDB Atlas [Data API](https://docs.atlas.mongodb.com/api/data-api/) SDK for Node.js.
15+
MongoDB Atlas [Data API](https://www.mongodb.com/docs/atlas/api/data-api/) SDK for Node.js.
1616

1717
---
1818

@@ -33,12 +33,12 @@ yarn add mongodb-data-api
3333
#### Init
3434

3535
```ts
36-
import { createMongoDBDataAPI, Region } from 'mongodb-data-api'
36+
import { createMongoDBDataAPI } from 'mongodb-data-api'
3737

3838
// init by URL Endpoint
3939
const api = createMongoDBDataAPI({
4040
apiKey: '<your_mongodb_api_key>',
41-
urlEndpoint: 'https://data.mongodb-api.com/app/<your_mongodb_app_id>/endpoint/data/beta'
41+
urlEndpoint: 'https://data.mongodb-api.com/app/<your_mongodb_app_id>/endpoint/data/v1'
4242
})
4343

4444
// or init by app ID
@@ -47,28 +47,29 @@ const api = createMongoDBDataAPI({
4747
appId: '<your_mongodb_app_id>'
4848
})
4949

50-
// specific region of app
50+
// specific region and cloud of app
5151
const api = createMongoDBDataAPI({
5252
apiKey: '<your_mongodb_api_key>',
5353
appId: '<your_mongodb_app_id>',
54-
region: Region.Virginia
54+
region: '<your_mongodb_app_region>', // e.g. us-east-1
55+
cloud: '<your_mongodb_app_cloud>' // e.g. aws
5556
})
5657
```
5758

5859
#### Actions
5960

60-
See [MongoDB Data API Resources](https://docs.atlas.mongodb.com/api/data-api-resources/).
61+
See [MongoDB Data API Resources](https://www.mongodb.com/docs/atlas/api/data-api-resources/).
6162

62-
- [`api.findOne`](https://docs.atlas.mongodb.com/api/data-api-resources/#find-a-single-document)
63-
- [`api.find`](https://docs.atlas.mongodb.com/api/data-api-resources/#find-multiple-documents)
64-
- [`api.insertOne`](https://docs.atlas.mongodb.com/api/data-api-resources/#insert-a-single-document)
65-
- [`api.insertMany`](https://docs.atlas.mongodb.com/api/data-api-resources/#insert-multiple-documents)
66-
- [`api.updateOne`](https://docs.atlas.mongodb.com/api/data-api-resources/#update-a-single-document)
67-
- [`api.updateMany`](https://docs.atlas.mongodb.com/api/data-api-resources/#update-multiple-documents)
68-
- [`api.replaceOne`](https://docs.atlas.mongodb.com/api/data-api-resources/#replace-a-single-document)
69-
- [`api.deleteOne`](https://docs.atlas.mongodb.com/api/data-api-resources/#delete-a-single-document)
70-
- [`api.deleteMany`](https://docs.atlas.mongodb.com/api/data-api-resources/#delete-multiple-documents)
71-
- [`api.aggregate`](https://docs.atlas.mongodb.com/api/data-api-resources/#run-an-aggregation-pipeline)
63+
- [`API.findOne`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#find-a-single-document)
64+
- [`API.find`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#find-multiple-documents)
65+
- [`API.insertOne`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#insert-a-single-document)
66+
- [`API.insertMany`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#insert-multiple-documents)
67+
- [`API.updateOne`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#update-a-single-document)
68+
- [`API.updateMany`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#update-multiple-documents)
69+
- [`API.replaceOne`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#replace-a-single-document)
70+
- [`API.deleteOne`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#delete-a-single-document)
71+
- [`API.deleteMany`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#delete-multiple-documents)
72+
- [`API.aggregate`](https://www.mongodb.com/docs/atlas/api/data-api-resources/#run-an-aggregation-pipeline)
7273

7374
#### Action examples
7475

@@ -159,7 +160,7 @@ api.findOne<C>({
159160

160161
#### Specific Action
161162

162-
You can specific the action request to prevent this package from lagging relative to the official one.
163+
You can specify the action request to prevent this package from lagging relative to the official one.
163164

164165
```ts
165166
api.$$action('findOne', {

package.json

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mongodb-data-api",
3-
"version": "0.2.1",
3+
"version": "0.3.0",
44
"description": "MongoDB atlas data API SDK for Node.js",
55
"author": "Surmon",
66
"license": "MIT",
@@ -32,20 +32,21 @@
3232
"release": ". ./scripts/release.sh"
3333
},
3434
"dependencies": {
35-
"axios": "^0.25.0",
36-
"mongodb": "^4.0.0"
35+
"axios": "^1.1.0",
36+
"mongodb": "^4.12.0"
3737
},
3838
"devDependencies": {
39-
"@surmon-china/libundler": "^2.2.0",
40-
"@types/jest": "^27.4.0",
41-
"@typescript-eslint/eslint-plugin": "^5.9.1",
42-
"@typescript-eslint/parser": "^5.9.1",
43-
"eslint": "^8.7.0",
44-
"eslint-config-prettier": "^8.3.0",
45-
"eslint-plugin-prettier": "^4.0.0",
46-
"jest": "^27.4.7",
39+
"@surmon-china/libundler": "^2.3.0",
40+
"@types/jest": "^29.2.0",
41+
"@types/node": "^18.11.9",
42+
"@typescript-eslint/eslint-plugin": "^5.44.0",
43+
"@typescript-eslint/parser": "^5.44.0",
44+
"eslint": "^8.28.0",
45+
"eslint-config-prettier": "^8.5.0",
46+
"eslint-plugin-prettier": "^4.2.0",
47+
"jest": "^29.3.0",
4748
"prettier": "^2.5.1",
48-
"ts-jest": "^27.1.3",
49-
"typescript": "^4.5.4"
49+
"ts-jest": "^29.0.0",
50+
"typescript": "^4.9.0"
5051
}
5152
}

src/index.ts

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,6 @@ type AnyKeys<T> = { [P in keyof T]?: T[P] | any }
1111
type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never }
1212
type XOR<T, U> = T | U extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U
1313

14-
/**
15-
* Specific region of endpoint.
16-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#regional-requests
17-
*/
18-
export enum Region {
19-
Virginia = 'us-east-1',
20-
Oregon = 'us-west-2',
21-
Ireland = 'eu-west-1',
22-
Sydney = 'ap-southeast-2'
23-
}
24-
25-
// https://docs.atlas.mongodb.com/api/data-api-resources/#base-url
26-
const getUrlEndpoint = (appId: string, region?: Region) => {
27-
return region
28-
? `https://${region}.aws.data.mongodb-api.com/app/${appId}/endpoint/data/beta`
29-
: `https://data.mongodb-api.com/app/${appId}/endpoint/data/beta`
30-
}
31-
const getActionUrl = (endpoint: string, action: string) => {
32-
return `${endpoint}/action/${action}`
33-
}
34-
3514
type ExtendBaseParams<T> = BaseParams & T
3615
interface BaseParams {
3716
dataSource?: string
@@ -43,24 +22,35 @@ interface BaseParams {
4322
interface BaseConfig {
4423
/**
4524
* Specific Data API key.
46-
* @link https://docs.atlas.mongodb.com/api/data-api/#2.-create-a-data-api-key
25+
* @link https://www.mongodb.com/docs/atlas/api/data-api/#2.-create-a-data-api-key
4726
*/
4827
apiKey: string
4928
}
29+
5030
interface UrlEndpointConfig extends BaseConfig {
5131
/**
5232
* Specific URL Endpoint.
53-
* @link https://docs.atlas.mongodb.com/api/data-api/#3.-send-a-data-api-request
33+
* @link https://www.mongodb.com/docs/atlas/api/data-api/#3.-send-a-data-api-request
5434
*/
5535
urlEndpoint: string
5636
}
37+
5738
interface PackEndpointConfig extends BaseConfig {
5839
/**
5940
* Specific Data App ID.
60-
* @link https://docs.atlas.mongodb.com/api/data-api/#3.-send-a-data-api-request
41+
* @link https://www.mongodb.com/docs/atlas/api/data-api/#3.-send-a-data-api-request
6142
*/
6243
appId: string
63-
region?: Region
44+
/**
45+
* Specific region name of endpoint.
46+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#regional-requests
47+
*/
48+
region?: string
49+
/**
50+
* Specific cloud provider of endpoint.
51+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#regional-requests
52+
*/
53+
cloud?: string
6454
}
6555

6656
export type Config = XOR<UrlEndpointConfig, PackEndpointConfig>
@@ -116,10 +106,10 @@ export class MongoDBDataAPI<InnerDoc = Document> {
116106

117107
/**
118108
* Execute a API action.
119-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/
109+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/
120110
*/
121111
public $$action<Result = unknown>(
122-
name: string,
112+
type: string,
123113
params: BaseParams = {},
124114
axiosConfig?: AxiosRequestConfig
125115
): Promise<Result> {
@@ -132,14 +122,29 @@ export class MongoDBDataAPI<InnerDoc = Document> {
132122
return Promise.reject('Invalid params: dataSource, database, collection')
133123
}
134124

125+
// https://www.mongodb.com/docs/atlas/api/data-api-resources/#base-url
126+
// https://www.mongodb.com/docs/atlas/api/data-api-resources/#regional-requests
127+
const getUrlEndpoint = (appId: string, region?: string, cloud?: string) => {
128+
return region && cloud
129+
? `https://${region}.${cloud}.data.mongodb-api.com/app/${appId}/endpoint/data/v1`
130+
: `https://data.mongodb-api.com/app/${appId}/endpoint/data/v1`
131+
}
132+
133+
const getActionUrl = (endpoint: string, action: string) => {
134+
return `${endpoint}/action/${action}`
135+
}
136+
135137
const API_KEY_FIELD = 'api-key'
136138

137139
return this.#axios({
138140
method: 'post',
139141
data: JSON.stringify(mergedParams),
140142
url: this.#config.urlEndpoint
141-
? getActionUrl(this.#config.urlEndpoint, name)
142-
: getActionUrl(getUrlEndpoint(this.#config.appId!, this.#config.region), name),
143+
? getActionUrl(this.#config.urlEndpoint, type)
144+
: getActionUrl(
145+
getUrlEndpoint(this.#config.appId!, this.#config.region, this.#config.cloud),
146+
type
147+
),
143148
headers: {
144149
'Content-Type': 'application/json',
145150
'Access-Control-Request-Headers': '*',
@@ -151,16 +156,20 @@ export class MongoDBDataAPI<InnerDoc = Document> {
151156
return response.data
152157
})
153158
.catch((error) => {
154-
// https://docs.atlas.mongodb.com/api/data-api-resources/#error-codes
155-
const errorJSON = error.toJSON()
156-
errorJSON.config.headers[API_KEY_FIELD] = '*****'
157-
return Promise.reject(error.toJSON())
159+
// https://www.mongodb.com/docs/atlas/api/data-api-resources/#error-codes
160+
if (_axios.isAxiosError(error)) {
161+
const errorJSON: any = error.toJSON()
162+
errorJSON.config.headers[API_KEY_FIELD] = '*****'
163+
return Promise.reject(errorJSON)
164+
} else {
165+
return Promise.reject(error)
166+
}
158167
})
159168
}
160169

161170
/**
162171
* Find a Single Document.
163-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#find-a-single-document
172+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#find-a-single-document
164173
*/
165174
public findOne<D = InnerDoc, T = NoInfer<D>>(
166175
params?: ExtendBaseParams<{
@@ -173,7 +182,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
173182

174183
/**
175184
* Find Multiple Documents.
176-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#find-multiple-documents
185+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#find-multiple-documents
177186
*/
178187
public find<D = InnerDoc, T = NoInfer<D>>(
179188
params?: ExtendBaseParams<{
@@ -189,7 +198,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
189198

190199
/**
191200
* Insert a Single Document.
192-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#insert-a-single-document
201+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#insert-a-single-document
193202
*/
194203
public insertOne<D = InnerDoc, T = NoInfer<D>>(
195204
params: ExtendBaseParams<{ document: AnyKeys<T> | Document }>
@@ -199,7 +208,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
199208

200209
/**
201210
* Insert Multiple Documents.
202-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#insert-multiple-documents
211+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#insert-multiple-documents
203212
*/
204213
public insertMany<D = InnerDoc, T = NoInfer<D>>(
205214
params: ExtendBaseParams<{ documents: Array<AnyKeys<T> | Document> }>
@@ -209,7 +218,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
209218

210219
/**
211220
* Update a Single Document.
212-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#update-a-single-document
221+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#update-a-single-document
213222
*/
214223
public updateOne<D = InnerDoc, T = NoInfer<D>>(
215224
params: ExtendBaseParams<{
@@ -227,7 +236,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
227236

228237
/**
229238
* Update Multiple Documents.
230-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#update-multiple-documents
239+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#update-multiple-documents
231240
*/
232241
public updateMany<D = InnerDoc, T = NoInfer<D>>(
233242
params: ExtendBaseParams<{
@@ -245,7 +254,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
245254

246255
/**
247256
* Replace a Single Document.
248-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#replace-a-single-document
257+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#replace-a-single-document
249258
*/
250259
public replaceOne<D = InnerDoc, T = NoInfer<D>>(
251260
params: ExtendBaseParams<{
@@ -263,7 +272,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
263272

264273
/**
265274
* Delete a Single Document.
266-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#delete-a-single-document
275+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#delete-a-single-document
267276
*/
268277
public deleteOne<D = InnerDoc, T = NoInfer<D>>(
269278
params: ExtendBaseParams<{ filter: Filter<T> }>
@@ -273,7 +282,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
273282

274283
/**
275284
* Delete Multiple Documents.
276-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#delete-multiple-documents
285+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#delete-multiple-documents
277286
*/
278287
public deleteMany<D = InnerDoc, T = NoInfer<D>>(
279288
params: ExtendBaseParams<{ filter: Filter<T> }>
@@ -283,7 +292,7 @@ export class MongoDBDataAPI<InnerDoc = Document> {
283292

284293
/**
285294
* Run an Aggregation Pipeline.
286-
* @link https://docs.atlas.mongodb.com/api/data-api-resources/#run-an-aggregation-pipeline
295+
* @link https://www.mongodb.com/docs/atlas/api/data-api-resources/#run-an-aggregation-pipeline
287296
*/
288297
public aggregate<T extends Array<any>>(
289298
params: ExtendBaseParams<{ pipeline: Array<Document> }>

tests-dts/index.test-d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Document } from 'mongodb'
2-
import { createMongoDBDataAPI, MongoDBDataAPI, Region } from '../src'
2+
import { createMongoDBDataAPI, MongoDBDataAPI } from '../src'
33
import {
44
describe,
55
expectError,
@@ -23,7 +23,7 @@ describe('Class creator', () => {
2323
// @ts-expect-error
2424
expectError(new MongoDBDataAPI({ apiKey: '', appId: '', urlEndpoint: '' }))
2525
// @ts-expect-error
26-
expectError(new MongoDBDataAPI({ apiKey: '', appId: '', region: '' }))
26+
expectError(new MongoDBDataAPI({ apiKey: '', region: '', cloud: '' }))
2727

2828
// @ts-expect-error
2929
expectError(createMongoDBDataAPI())
@@ -33,7 +33,7 @@ describe('Class creator', () => {
3333
expectType<MongoDBDataAPI>(api)
3434
expectAssignable<MongoDBDataAPI>(api)
3535

36-
const api2 = new MongoDBDataAPI({ apiKey: '', appId: '', region: Region.Virginia })
36+
const api2 = new MongoDBDataAPI({ apiKey: '', appId: '', region: 'us-east-1' })
3737
expectType<MongoDBDataAPI>(api2)
3838
expectAssignable<MongoDBDataAPI>(api2)
3939
})

0 commit comments

Comments
 (0)