@qingfu/core-env 0.5.14 → 0.5.16

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 (3) hide show
  1. package/lib/area.json +11453 -0
  2. package/lib/utils.js +40 -10
  3. package/package.json +18 -19
package/lib/utils.js CHANGED
@@ -5,11 +5,13 @@ const xml2js = require( 'xml2js' );
5
5
  const xlsx = require( 'xlsx' );
6
6
  const baseX = require( 'base-x' ).default;
7
7
  const pinyin = require( 'pinyin' ).default;
8
- const idcard = require( 'idcard' );
9
8
  const qrcode = require( 'qr-image' );
10
9
  const request = require( 'superagent' );
10
+ const { spawn } = require( 'child_process' );
11
+ const { pipeline } = require( 'stream/promises' );
11
12
  const { serializeError } = require( 'serialize-error' );
12
- const utils = global.utils = module.exports = {};
13
+ const { diff: areaDiff, history: areaHistory } = require( './area.json' );
14
+ const utils = global.utils = module.exports = {};
13
15
 
14
16
  utils.serializeError = serializeError;
15
17
 
@@ -247,7 +249,6 @@ utils.minaDecrypt = ({ encrypted, session, iv }) => {
247
249
  }
248
250
  };
249
251
 
250
- utils.identityDetail = idcard.info;
251
252
  utils.identityValidate = identity => {
252
253
  if ( !identity || identity.length !== 18 ) return false;
253
254
  if ( !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test( identity )) return false;
@@ -264,18 +265,47 @@ utils.identityValidate = identity => {
264
265
  else return true;
265
266
  };
266
267
 
267
- utils.fetchBig = async ({ url, dest, method = 'GET', header = {}, retry = 0 }) => {
268
+ utils.identityDetail = ( identity, returnNew = true ) => {
269
+ let getItem = code => {
270
+ code = _.padEnd( code, 6, '0' );
271
+ if ( returnNew ) code = _.last( areaDiff[ code ]) || code;
272
+ return { code, text: areaHistory[ code ]};
273
+ };
274
+ let result = {
275
+ valid: utils.identityValidate( identity ),
276
+ province: getItem( identity.slice( 0, 2 )),
277
+ city: getItem( identity.slice( 0, 4 )),
278
+ area: getItem( identity.slice( 0, 6 ))
279
+ };
280
+ if ( result.valid ) Object.assign( result, {
281
+ gender: utils.getGender( identity ),
282
+ age: utils.getAge( identity )
283
+ });
284
+ return result;
285
+ };
286
+
287
+ utils.fetchBig = async ({ url, dest, method = 'GET', header = {}, retry = 0, timeout = 300000 }) => {
288
+ let code = `
289
+ const fs = require( 'fs' );
290
+ const request = require( 'superagent' );
291
+ const { pipeline } = require( 'stream/promises' );
292
+ ( async () => {
293
+ let writeStream = fs.createWriteStream('${ dest }');
294
+ let readStream = request['${ method.toLowerCase() }']('${ url }').set(${ JSON.stringify( header )});
295
+ if (${ timeout }) readStream.timeout(${ timeout });
296
+ await pipeline( readStream, writeStream );
297
+ })();
298
+ `;
268
299
  try {
269
300
  return await new Promise(( resolve, reject ) => {
270
- let writeStream = fs.createWriteStream( dest );
271
- let readStream = request[ method.toLowerCase() ]( url ).set( header );
272
- readStream.pipe( writeStream );
273
- readStream.on( 'error', reject );
274
- writeStream.on( 'finish', resolve );
301
+ let child = spawn( 'node', [ '-e', code ], { timeout, stdio: [ 'pipe', 'inherit', 'inherit' ]});
302
+ child.on( 'close', code => code ? reject( new Error( `Process exited with code ${ code }` )) : resolve() );
303
+ child.on( 'error', reject );
275
304
  });
276
305
  } catch ( err ) {
277
306
  if ( !retry-- ) throw err;
278
- return utils.fetchBig({ url, dest, method, header, retry });
307
+ await new Promise( resolve => setTimeout( resolve, 1000 ));
308
+ return await utils.fetchBig({ url, dest, method, header, retry, timeout });
279
309
  }
280
310
  };
281
311
 
package/package.json CHANGED
@@ -1,47 +1,46 @@
1
1
  {
2
2
  "name": "@qingfu/core-env",
3
- "version": "0.5.14",
3
+ "version": "0.5.16",
4
4
  "readmeFilename": "README.md",
5
5
  "dependencies": {
6
6
  "@koa/cors": "5.0.0",
7
- "@koa/router": "13.1.0",
8
- "base-x": "5.0.0",
9
- "bullmq": "5.41.2",
7
+ "@koa/router": "13.1.1",
8
+ "base-x": "5.0.1",
9
+ "bullmq": "5.66.4",
10
10
  "busboy": "1.6.0",
11
11
  "cookie": "1.0.2",
12
12
  "dotenv-extended": "2.9.0",
13
13
  "glob": "8.1.0",
14
- "helmet": "8.0.0",
15
- "idcard": "4.2.0",
16
- "ioredis": "5.5.0",
17
- "jsonwebtoken": "9.0.2",
18
- "koa": "2.15.4",
14
+ "helmet": "8.1.0",
15
+ "ioredis": "5.8.2",
16
+ "jsonwebtoken": "9.0.3",
17
+ "koa": "2.16.3",
19
18
  "koa-bodyparser": "4.4.1",
20
19
  "koa-compress": "5.1.1",
21
20
  "koa-favicon": "2.1.0",
22
21
  "koa-helmet": "8.0.1",
23
- "koa-logger": "3.2.1",
22
+ "koa-logger": "4.0.0",
24
23
  "koa-methodoverride": "2.0.0",
25
24
  "koa-qs": "3.0.0",
26
25
  "lodash": "4.17.21",
27
26
  "moleculer": "0.14.35",
28
- "mongoose": "7.8.4",
27
+ "mongoose": "7.8.8",
29
28
  "mongoose-cast-aggregation": "0.3.1",
30
- "mongoose-geojson-schema": "2.2.5",
31
- "mongoose-lean-defaults": "2.2.1",
32
- "mongoose-lean-getters": "2.1.1",
33
- "mongoose-lean-virtuals": "1.1.0",
29
+ "mongoose-geojson-schema": "3.1.1",
30
+ "mongoose-lean-defaults": "2.3.1",
31
+ "mongoose-lean-getters": "2.2.2",
32
+ "mongoose-lean-virtuals": "1.1.1",
34
33
  "ms": "2.1.3",
35
34
  "notepack.io": "3.0.1",
36
- "pinyin": "3.1.0",
35
+ "pinyin": "4.0.0",
37
36
  "primus": "8.0.9",
38
37
  "primus-rooms": "3.4.3",
39
38
  "qr-image": "3.2.0",
40
39
  "serialize-error": "8.1.0",
41
- "superagent": "10.1.1",
40
+ "superagent": "10.2.3",
42
41
  "wechat-encrypt": "1.1.1",
43
- "winston": "3.17.0",
44
- "winston-mongodb": "6.0.0",
42
+ "winston": "3.19.0",
43
+ "winston-mongodb": "7.0.1",
45
44
  "xlsx": "0.18.5",
46
45
  "xml2js": "0.6.2"
47
46
  }