Skip to content

Commit f46be56

Browse files
committed
feat: ready for release
1 parent 937ba7a commit f46be56

File tree

10 files changed

+91
-140
lines changed

10 files changed

+91
-140
lines changed

.envrc renamed to .envrc-copy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use asdf
22

33
export PATH=$(npm bin):${PATH}
4-
export MOCK_PINNING_SERVER_PORT=3000
54
export MOCK_PINNING_SERVER_SECRET=secret
65
export DEBUG=0

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ test/tsconfig.tsbuildinfo
1111
package-lock.json
1212
*.bak
1313
.swc
14+
.envrc

npm-scripts/fix/gen.sh

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ main() {
55
# local FILES
66
# FILES=()
77
local SED_BACKUPS=()
8+
local SED_ERROR=0
89

910
# remove openapi-generator's package and tsconfig json files
1011
for PKG_JSON in generated/*/package.json; do
@@ -24,14 +25,22 @@ main() {
2425
if test -e $FILE_PATH; then
2526
# Replace all occurrances of "&lt;" with "<"
2627
# Replace all occurrances of "&gt;" with ">"
27-
sed -i .bak -e 's/&lt\;/\</g' -e 's/&gt\;/\>/g' $FILE_PATH
28+
sed -i .bak -e 's/&lt\;/\</g' -e 's/&gt\;/\>/g' $FILE_PATH || SED_ERROR=1
2829
SED_BACKUPS+=( $FILE_PATH.bak )
2930
fi
3031
done
3132
done
3233

34+
echo -e "\$SED_ERROR: $SED_ERROR \n"
35+
if ((SED_ERROR)); then
36+
echo "Error when replacing text, not deleting the backup files, please investigate: ${SED_BACKUPS[@]}"
37+
return 1
38+
else
39+
rm ${SED_BACKUPS[@]}
40+
fi
3341

34-
echo "SED_BACKUPS = ${SED_BACKUPS[@]}"
42+
43+
# echo "SED_BACKUPS = ${SED_BACKUPS[@]}"
3544
# test build.. if build succeeds, remove backup file.
3645

3746
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@
183183
"portscanner": "^2.2.0",
184184
"regenerator-runtime": "^0.13.9",
185185
"ts-node": "^10.5.0",
186-
"tsc-silent": "^1.2.1"
186+
"tsc-silent": "^1.2.1",
187+
"winston": "^3.6.0"
187188
},
188189
"exports": {
189190
".": {

test/MockServer.ts

Lines changed: 42 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,16 @@ import type { Application } from 'express'
33
import type { Server } from 'http'
44
import portscanner from 'portscanner'
55
import cors from 'cors'
6+
import { logger } from './logger'
67

78
import('dotenvrc')
89

910
export class MockServer {
1011
private _server: Server | undefined = undefined
1112

12-
private port = Number(process.env.MOCK_PINNING_SERVER_PORT ?? 3000)
13+
private port: string = '3001'
1314
private _service: Application | undefined = undefined
1415

15-
/**
16-
* This set helps us support parallel tests by not attempting to start up multiple MockServer's on the same port
17-
*/
18-
1916
public basePath: string = ''
2017

2118
constructor (private readonly config: Parameters<typeof import('mock-ipfs-pinning-service')['setup']>[0] = { token: process.env.MOCK_PINNING_SERVER_SECRET }) {
@@ -27,7 +24,7 @@ export class MockServer {
2724
try {
2825
server = await this.server(port)
2926
} catch (err) {
30-
MockServer.error('start error', err)
27+
logger.error('start error', err)
3128
}
3229

3330
if (server == null) {
@@ -53,26 +50,39 @@ export class MockServer {
5350
await this.cleanup()
5451
}
5552

56-
private setBasePath (): void {
57-
this.basePath = `http://127.0.0.1:${this.port}`
53+
private async server (port = this.port): Promise<Server> {
54+
if (this._server !== undefined) {
55+
return this._server
56+
}
57+
if (port != null && port !== this.port) {
58+
this.port = port
59+
this.setBasePath()
60+
} else {
61+
port = await this.getAvailablePort()
62+
}
63+
const service = await this.service()
64+
65+
service.on('error', (err) => {
66+
logger.error('service error', err)
67+
})
68+
this._server = service.listen(port, () => {
69+
logger.debug(`${Date.now()}: MockServer running on port ${port}`)
70+
})
71+
72+
return this._server
5873
}
5974

6075
/**
6176
* Ensure the port set for this instance is not already in use by another MockServer
6277
*/
63-
private async getAvailablePort (): Promise<number> {
64-
// this.port = 3000
65-
66-
// this.setBasePath()
67-
68-
// return this.port
78+
private async getAvailablePort (): Promise<string> {
6979
return await new Promise((resolve, reject) => portscanner.findAPortNotInUse(3000, 3099, '127.0.0.1', (error, port) => {
7080
if (error != null) {
7181
return reject(error)
7282
}
73-
this.port = port
83+
this.port = port.toString()
7484
this.setBasePath()
75-
resolve(port)
85+
resolve(this.port)
7686
}))
7787
}
7888

@@ -81,38 +91,22 @@ export class MockServer {
8191
return this._service
8292
}
8393
this._service = await setup(this.config)
84-
// this._service = await setup({
85-
// token: process.env.MOCK_PINNING_SERVER_SECRET,
86-
// loglevel: 'debug'
87-
// })
94+
8895
this._service.use(cors())
8996

90-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
91-
return this._service as Application
97+
return this._service
9298
}
9399

94-
private async server (port = this.port): Promise<Server> {
95-
if (this._server !== undefined) {
96-
return this._server
97-
}
98-
if (port !== this.port) {
99-
this.port = port
100+
private setBasePath (): void {
101+
if (this.port == null) {
102+
throw new Error('Attempted to set basePath before setting this.port.')
100103
}
101-
const service = await this.service()
102-
103-
service.on('error', (err) => {
104-
MockServer.error('service error', err)
105-
})
106-
this._server = service.listen(await this.getAvailablePort(), () => {
107-
MockServer.debug(`${Date.now()}: MockServer running on port ${this.port}`)
108-
})
109-
110-
return this._server
104+
this.basePath = `http://127.0.0.1:${this.port}`
111105
}
112106

113107
private cleanupSync (): void {
114108
void this.cleanup().then(() => {
115-
MockServer.debug('cleaned up')
109+
logger.debug('cleaned up')
116110
})
117111
}
118112

@@ -123,43 +117,24 @@ export class MockServer {
123117
server.close((err) => {
124118
if ((err == null) || (err as Error & { code: string })?.code === 'ERR_SERVER_NOT_RUNNING') {
125119
// MockServer.portsInUse.remove(this.port)
126-
MockServer.debug(`${Date.now()}: MockServer stopped listening on port ${port}`)
120+
logger.debug(`${Date.now()}: MockServer stopped listening on port ${port}`)
127121
delete this._server
128122
} else if (err != null) {
129-
MockServer.error(err.name)
130-
MockServer.error(err.message)
131-
MockServer.error(err.stack)
123+
throw err
132124
}
133125
})
134126
}
135127

136128
private static onEADDRINUSE (err: Error & { code: string }) {
137129
if (err.code === 'EADDRINUSE') {
138-
this.error('Unexpected conflict with port usage')
130+
logger.error('Unexpected conflict with port usage')
139131
} else {
140-
this.error('CAUGHT UNKNOWN ERROR')
141-
this.error(err.name)
142-
this.error(err.code)
143-
this.error(err.message)
144-
this.error(err.stack)
145-
}
146-
process.exit(233)
147-
}
148-
149-
private static debug (...logObjects: unknown[]) {
150-
if (process.env.DEBUG != null && Number(process.env.DEBUG) !== 0) {
151-
MockServer.log('debug', ...logObjects)
132+
logger.error('CAUGHT UNKNOWN ERROR')
133+
logger.error(err.name)
134+
logger.error(err.code)
135+
logger.error(err.message)
136+
logger.error(err.stack)
152137
}
153-
}
154-
155-
private static error (...logObjects: unknown[]) {
156-
if (process.env.DEBUG != null) {
157-
MockServer.log('error', ...logObjects)
158-
}
159-
}
160-
161-
private static log (type: keyof typeof console & 'log' | 'debug' | 'error' | 'warn' | 'info' | 'trace', ...logObjects: unknown[]) {
162-
// eslint-disable-next-line no-console
163-
console[type](...logObjects)
138+
process.exit(1)
164139
}
165140
}

test/MockServerController.ts

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
#!/usr/bin/env ts-node
2-
3-
/* eslint-disable no-console */
41
import express from 'express'
52
import { MockServer } from './MockServer'
63
import Router from 'express-promise-router'
74
import cors from 'cors'
5+
import { logger } from './logger'
86

7+
/**
8+
* MockServerController stands up a server on port 3000
9+
*/
910
class MockServerController {
1011
private readonly mockServers: MockServer[] = []
1112
private readonly app = express()
@@ -53,7 +54,7 @@ class MockServerController {
5354
next(error)
5455
}
5556
} else {
56-
console.log('Could not get mockserver')
57+
logger.error('Could not get mockserver')
5758
throw new Error(`MockServer at port ${port} could not be found`)
5859
}
5960
})
@@ -62,7 +63,7 @@ class MockServerController {
6263
this.app.use(this.router)
6364

6465
this.server = this.app.listen(this.port, () => {
65-
console.log(`MockServerController listening on port ${this.port}`)
66+
logger.debug(`MockServerController listening on port ${this.port}`)
6667
})
6768

6869
// And you'll want to make sure you close the server when your process exits
@@ -71,29 +72,30 @@ class MockServerController {
7172
process.on('SIGINT', this.shutdownSync)
7273
process.on('SIGHUP', this.shutdownSync)
7374

74-
// To prevent duplicated cleanup, remove the process listeners on server close.
7575
this.server.on('close', () => {
76+
logger.debug(`MockServerController stopped listening on ${this.port}`)
7677
})
7778
}
7879

7980
private shutdownSync () {
8081
this.shutdown().catch((err) => {
81-
console.error(err)
82+
logger.error(err)
8283
})
8384
}
8485

8586
async shutdown () {
87+
// To prevent duplicated cleanup, remove the process listeners on server close.
8688
process.off('beforeExit', this.shutdownSync)
8789
process.off('SIGTERM', this.shutdownSync)
8890
process.off('SIGINT', this.shutdownSync)
8991
process.off('SIGHUP', this.shutdownSync)
9092
await new Promise<void>((resolve, reject) => {
9193
this.server.close((err) => {
9294
if (err != null) {
93-
console.error('Unexpected error when shutting down the MockServerController')
94-
console.error(err)
95+
logger.error('Unexpected error when shutting down the MockServerController')
96+
logger.error(err)
9597
} else {
96-
console.log(`MockServerController stopped listening on port ${this.port}`)
98+
logger.debug(`MockServerController stopped listening on port ${this.port}`)
9799
}
98100
resolve()
99101
})
@@ -102,22 +104,17 @@ class MockServerController {
102104
try {
103105
await mockS.stop()
104106
} catch (err) {
105-
console.error(`Unexpected error when attempting to shutdown mock server at ${mockS.basePath}`)
106-
console.error(err)
107+
logger.error(`Unexpected error when attempting to shutdown mock server at ${mockS.basePath}`)
108+
logger.error(err)
107109
}
108110
}
109111
}
110112

111-
// async startMockServer (req: {params: { port: number}}, res: {basePath: string, accessToken: string}, next: unknown) {
112-
113-
// }
114-
115113
private async startIpfsPinningServer (port?: string) {
116114
const mockServer = new MockServer({
117115
token: process.env.MOCK_PINNING_SERVER_SECRET
118-
// loglevel: 'info'
119116
})
120-
await mockServer.start(Number(port))
117+
await mockServer.start(port)
121118

122119
return mockServer
123120
}

test/browser.ts

Lines changed: 0 additions & 17 deletions
This file was deleted.

test/client.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ import { Configuration, PinsApi, Status } from '../src'
55
import type { Pin } from '../src'
66
import fetchPonyfill from 'fetch-ponyfill'
77

8-
// export default async (setup: () => Promise<{fetch: GlobalFetch['fetch']}>) => {
98
const { fetch } = fetchPonyfill()
109

1110
let Config = new Configuration({
12-
basePath: `http://127.0.0.1:${process.env.MOCK_PINNING_SERVER_PORT ?? '3000'}`,
11+
basePath: 'http://127.0.0.1:3000',
1312
// fetchApi: fetch,
1413
accessToken: process.env.MOCK_PINNING_SERVER_SECRET
1514
})

test/logger.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import winston from 'winston'
2+
3+
const logLevel = process.env.LOG_LEVEL ?? 'error'
4+
5+
const transports = {
6+
console: new winston.transports.Console({ level: logLevel })
7+
}
8+
9+
const logger = winston.createLogger({
10+
transports: [
11+
transports.console
12+
]
13+
})
14+
15+
if (process.env.LOG_LEVEL == null) {
16+
logger.silent = true
17+
}
18+
19+
export { logger }

0 commit comments

Comments
 (0)