@vtecx/vtecxnext 1.1.9 → 1.1.11

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.
@@ -199,6 +199,15 @@ export declare const deleteEntry: (req: IncomingMessage | undefined, res: Server
199
199
  * @return true if successful
200
200
  */
201
201
  export declare const deleteFolder: (req: IncomingMessage | undefined, res: ServerResponse | undefined, uri: string, async?: boolean, targetService?: string) => Promise<boolean>;
202
+ /**
203
+ * clear folder
204
+ * @param req request (for authentication)
205
+ * @param res response (for authentication)
206
+ * @param uri parent key
207
+ * @param async execute async
208
+ * @return true if successful
209
+ */
210
+ export declare const clearFolder: (req: IncomingMessage | undefined, res: ServerResponse | undefined, uri: string, async?: boolean, targetService?: string) => Promise<boolean>;
202
211
  /**
203
212
  * allocate numbers
204
213
  * @param req request (for authentication)
@@ -429,6 +438,36 @@ export declare const execBQ: (req: IncomingMessage, res: ServerResponse, sql: st
429
438
  * @return true
430
439
  */
431
440
  export declare const getBQCsv: (req: IncomingMessage, res: ServerResponse, sql: string, values?: any[], filename?: string, parent?: string) => Promise<boolean>;
441
+ /**
442
+ * Execute a query SQL to the database and get the result.
443
+ * @param req request (for authentication)
444
+ * @param res response (for authentication)
445
+ * @param sql query sql
446
+ * @param values values of query arguments
447
+ * @param parent parent name of result json
448
+ * @return query results in JSON format
449
+ */
450
+ export declare const queryRDB: (req: IncomingMessage, res: ServerResponse, sql: string, values?: any[], parent?: string) => Promise<any>;
451
+ /**
452
+ * Search RDB and return results in CSV format.
453
+ * @param req request (for authentication)
454
+ * @param res response
455
+ * @param sql query sql
456
+ * @param values values of query arguments
457
+ * @param filename file name of csv
458
+ * @param parent parent name of result json
459
+ * @return true
460
+ */
461
+ export declare const queryRDBCsv: (req: IncomingMessage, res: ServerResponse, sql: string, values?: any[], filename?: string, parent?: string) => Promise<boolean>;
462
+ /**
463
+ * Execute SQL to the database.
464
+ * If there are multiple SQLs, they will be wrapped in a transaction.
465
+ * @param req request (for authentication)
466
+ * @param res response (for authentication)
467
+ * @param sqls sql list
468
+ * @param values values of query arguments
469
+ */
470
+ export declare const execRDB: (req: IncomingMessage, res: ServerResponse, sqls: string[], values?: any[][]) => Promise<any>;
432
471
  /**
433
472
  * Create PDF.
434
473
  * Writes a PDF to the response.
@@ -824,6 +863,14 @@ export declare const deleteTotp: (req: IncomingMessage, res: ServerResponse, acc
824
863
  * @return message
825
864
  */
826
865
  export declare const changeTdid: (req: IncomingMessage, res: ServerResponse) => Promise<any>;
866
+ /**
867
+ * Merge an existing user with an line oauth user.
868
+ * @param req request (for authentication)
869
+ * @param res response (for authentication)
870
+ * @param rxid RXID
871
+ * @return message feed
872
+ */
873
+ export declare const mergeOAuthUserLine: (req: IncomingMessage, res: ServerResponse, rxid: string) => Promise<any>;
827
874
  /**
828
875
  * null、undefined、空文字の判定
829
876
  * @param val チェック値
package/dist/vtecxnext.js CHANGED
@@ -26,9 +26,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.getBQCsv = exports.execBQ = exports.getBQ = exports.deleteBQ = exports.postBQ = exports.getPage = exports.pagination = exports.getSessionLong = exports.getSessionString = exports.getSessionEntry = exports.getSessionFeed = exports.deleteSessionLong = exports.deleteSessionString = exports.deleteSessionEntry = exports.deleteSessionFeed = exports.incrementSession = exports.setSessionLong = exports.setSessionString = exports.setSessionEntry = exports.setSessionFeed = exports.getRangeids = exports.rangeids = exports.setids = exports.getids = exports.addids = exports.allocids = exports.deleteFolder = exports.deleteEntry = exports.put = exports.post = exports.countResponse = exports.count = exports.getFeedResponse = exports.getFeed = exports.getEntry = exports.log = exports.rxid = exports.service = exports.isLoggedin = exports.whoami = exports.account = exports.uid = exports.now = exports.logout = exports.loginWithTotp = exports.loginWithRxid = exports.login = exports.sendMessage = exports.checkXRequestedWith = exports.hello = void 0;
30
- exports.VtecxResponse = exports.isBlank = exports.changeTdid = exports.deleteTotp = exports.createTotp = exports.getTotpLink = exports.buffer = exports.oauthCallbackLine = exports.oauthLine = exports.removealias = exports.addalias = exports.removeacl = exports.addacl = exports.getcontenturl = exports.getcontent = exports.deletecontent = exports.putcontent = exports.savefiles = exports.deleteusers = exports.deleteuser = exports.canceluser = exports.activateusers = exports.activateuser = exports.revokeusers = exports.revokeuser = exports.userstatus = exports.changeaccount_verify = exports.changeaccount = exports.changepassByAdmin = exports.changepass = exports.passreset = exports.adduserByAdmin = exports.adduser = exports.isAdmin = exports.isGroupMember = exports.getGroups = exports.noGroupMember = exports.leaveGroup = exports.joinGroup = exports.getMessageQueue = exports.setMessageQueue = exports.getMessageQueueStatus = exports.setMessageQueueStatus = exports.pushNotification = exports.sendMail = exports.checkSignature = exports.deleteSignature = exports.putSignatures = exports.putSignature = exports.toPdf = void 0;
31
- exports.FetchError = exports.VtecxNextError = void 0;
29
+ exports.execBQ = exports.getBQ = exports.deleteBQ = exports.postBQ = exports.getPage = exports.pagination = exports.getSessionLong = exports.getSessionString = exports.getSessionEntry = exports.getSessionFeed = exports.deleteSessionLong = exports.deleteSessionString = exports.deleteSessionEntry = exports.deleteSessionFeed = exports.incrementSession = exports.setSessionLong = exports.setSessionString = exports.setSessionEntry = exports.setSessionFeed = exports.getRangeids = exports.rangeids = exports.setids = exports.getids = exports.addids = exports.allocids = exports.clearFolder = exports.deleteFolder = exports.deleteEntry = exports.put = exports.post = exports.countResponse = exports.count = exports.getFeedResponse = exports.getFeed = exports.getEntry = exports.log = exports.rxid = exports.service = exports.isLoggedin = exports.whoami = exports.account = exports.uid = exports.now = exports.logout = exports.loginWithTotp = exports.loginWithRxid = exports.login = exports.sendMessage = exports.checkXRequestedWith = exports.hello = void 0;
30
+ exports.createTotp = exports.getTotpLink = exports.buffer = exports.oauthCallbackLine = exports.oauthLine = exports.removealias = exports.addalias = exports.removeacl = exports.addacl = exports.getcontenturl = exports.getcontent = exports.deletecontent = exports.putcontent = exports.savefiles = exports.deleteusers = exports.deleteuser = exports.canceluser = exports.activateusers = exports.activateuser = exports.revokeusers = exports.revokeuser = exports.userstatus = exports.changeaccount_verify = exports.changeaccount = exports.changepassByAdmin = exports.changepass = exports.passreset = exports.adduserByAdmin = exports.adduser = exports.isAdmin = exports.isGroupMember = exports.getGroups = exports.noGroupMember = exports.leaveGroup = exports.joinGroup = exports.getMessageQueue = exports.setMessageQueue = exports.getMessageQueueStatus = exports.setMessageQueueStatus = exports.pushNotification = exports.sendMail = exports.checkSignature = exports.deleteSignature = exports.putSignatures = exports.putSignature = exports.toPdf = exports.execRDB = exports.queryRDBCsv = exports.queryRDB = exports.getBQCsv = void 0;
31
+ exports.FetchError = exports.VtecxNextError = exports.VtecxResponse = exports.isBlank = exports.mergeOAuthUserLine = exports.changeTdid = exports.deleteTotp = void 0;
32
32
  const sqlstring_1 = __importDefault(require("sqlstring"));
33
33
  const formidable_1 = __importDefault(require("formidable"));
34
34
  const fs_1 = __importDefault(require("fs"));
@@ -692,6 +692,38 @@ const deleteFolder = async (req, res, uri, async, targetService) => {
692
692
  return true;
693
693
  };
694
694
  exports.deleteFolder = deleteFolder;
695
+ /**
696
+ * clear folder
697
+ * @param req request (for authentication)
698
+ * @param res response (for authentication)
699
+ * @param uri parent key
700
+ * @param async execute async
701
+ * @return true if successful
702
+ */
703
+ const clearFolder = async (req, res, uri, async, targetService) => {
704
+ //console.log(`[vtecxnext clearFolder] start. uri=${uri} async=${async}`)
705
+ // キー入力値チェック
706
+ checkUri(uri);
707
+ // vte.cxへリクエスト
708
+ const method = 'DELETE';
709
+ const url = `${SERVLETPATH_PROVIDER}${uri}?_clearfolder${async ? '&_async' : ''}`;
710
+ let response;
711
+ try {
712
+ response = await requestVtecx(method, url, req, null, null, targetService);
713
+ }
714
+ catch (e) {
715
+ throw newFetchError(e, true);
716
+ }
717
+ //console.log(`[vtecxnext clearFolder] response. status=${response.status}`)
718
+ // vte.cxからのset-cookieを転記
719
+ if (res) {
720
+ setCookie(response, res);
721
+ }
722
+ // レスポンスのエラーチェック
723
+ await checkVtecxResponse(response);
724
+ return true;
725
+ };
726
+ exports.clearFolder = clearFolder;
695
727
  /**
696
728
  * allocate numbers
697
729
  * @param req request (for authentication)
@@ -1481,7 +1513,7 @@ const execBQ = async (req, res, sql, values, parent) => {
1481
1513
  // 入力チェック
1482
1514
  checkNotNull(sql, 'Query SQL');
1483
1515
  // 引数生成
1484
- const feed = editGetBqArgument(sql, values, parent);
1516
+ const feed = editSqlArgument(sql, values, parent);
1485
1517
  // vte.cxへリクエスト
1486
1518
  const method = 'PUT';
1487
1519
  const url = `${SERVLETPATH_PROVIDER}/?_querybq`;
@@ -1518,7 +1550,7 @@ const getBQCsv = async (req, res, sql, values, filename, parent) => {
1518
1550
  // 入力チェック
1519
1551
  checkNotNull(sql, 'Query SQL');
1520
1552
  // 引数生成
1521
- const feed = editGetBqArgument(sql, values, parent);
1553
+ const feed = editSqlArgument(sql, values, parent);
1522
1554
  // vte.cxへリクエスト
1523
1555
  const method = 'PUT';
1524
1556
  const url = `${SERVLETPATH_PROVIDER}/?_querybq&_csv${filename ? '=' + filename : ''}`;
@@ -1548,6 +1580,122 @@ const getBQCsv = async (req, res, sql, values, filename, parent) => {
1548
1580
  return true;
1549
1581
  };
1550
1582
  exports.getBQCsv = getBQCsv;
1583
+ /**
1584
+ * Execute a query SQL to the database and get the result.
1585
+ * @param req request (for authentication)
1586
+ * @param res response (for authentication)
1587
+ * @param sql query sql
1588
+ * @param values values of query arguments
1589
+ * @param parent parent name of result json
1590
+ * @return query results in JSON format
1591
+ */
1592
+ const queryRDB = async (req, res, sql, values, parent) => {
1593
+ //console.log(`[vtecxnext queryRDB] start. sql=${sql} values=${values}`)
1594
+ // 入力チェック
1595
+ checkNotNull(sql, 'Query SQL');
1596
+ // 引数生成
1597
+ const feed = editSqlArgument(sql, values, parent);
1598
+ // vte.cxへリクエスト
1599
+ const method = 'PUT';
1600
+ const url = `${SERVLETPATH_PROVIDER}/?_queryrdb`;
1601
+ let response;
1602
+ try {
1603
+ response = await requestVtecx(method, url, req, JSON.stringify(feed));
1604
+ }
1605
+ catch (e) {
1606
+ throw newFetchError(e, true);
1607
+ }
1608
+ //console.log(`[vtecxnext execBQ] response. status=${response.status}`)
1609
+ // vte.cxからのset-cookieを転記
1610
+ setCookie(response, res);
1611
+ //console.log(`[vtecxnext execBQ] setCookie end.`)
1612
+ // レスポンスのエラーチェック
1613
+ await checkVtecxResponse(response);
1614
+ //console.log(`[vtecxnext execBQ] checkVtecxResponse end.`)
1615
+ // 戻り値
1616
+ return await response.json();
1617
+ };
1618
+ exports.queryRDB = queryRDB;
1619
+ /**
1620
+ * Search RDB and return results in CSV format.
1621
+ * @param req request (for authentication)
1622
+ * @param res response
1623
+ * @param sql query sql
1624
+ * @param values values of query arguments
1625
+ * @param filename file name of csv
1626
+ * @param parent parent name of result json
1627
+ * @return true
1628
+ */
1629
+ const queryRDBCsv = async (req, res, sql, values, filename, parent) => {
1630
+ //console.log(`[vtecxnext queryRDBCsv] start. sql=${sql} values=${values}`)
1631
+ // 入力チェック
1632
+ checkNotNull(sql, 'Query SQL');
1633
+ // 引数生成
1634
+ const feed = editSqlArgument(sql, values, parent);
1635
+ // vte.cxへリクエスト
1636
+ const method = 'PUT';
1637
+ const url = `${SERVLETPATH_PROVIDER}/?_queryrdb&_csv${filename ? '=' + filename : ''}`;
1638
+ let response;
1639
+ try {
1640
+ response = await requestVtecx(method, url, req, JSON.stringify(feed));
1641
+ }
1642
+ catch (e) {
1643
+ throw newFetchError(e, true);
1644
+ }
1645
+ //console.log(`[vtecxnext queryRDBCsv] response. status=${response.status}`)
1646
+ // vte.cxからのset-cookieを転記
1647
+ setCookie(response, res);
1648
+ //console.log(`[vtecxnext queryRDBCsv] setCookie end.`)
1649
+ // レスポンスのエラーチェック
1650
+ await checkVtecxResponse(response);
1651
+ //console.log(`[vtecxnext queryRDBCsv] checkVtecxResponse end.`)
1652
+ // 戻り値
1653
+ const resData = await response.blob();
1654
+ //console.log(`[vtecxnext queryRDBCsv] response.blob()`)
1655
+ setResponseHeaders(response, res);
1656
+ //console.log(`[vtecxnext queryRDBCsv] setResponseHeaders`)
1657
+ const csvData = await resData.arrayBuffer();
1658
+ //console.log(`[vtecxnext queryRDBCsv] await resData.arrayBuffer()`)
1659
+ res.end(new Uint8Array(csvData));
1660
+ //console.log(`[vtecxnext queryRDBCsv] res.end(new Uint8Array(csvData))`)
1661
+ return true;
1662
+ };
1663
+ exports.queryRDBCsv = queryRDBCsv;
1664
+ /**
1665
+ * Execute SQL to the database.
1666
+ * If there are multiple SQLs, they will be wrapped in a transaction.
1667
+ * @param req request (for authentication)
1668
+ * @param res response (for authentication)
1669
+ * @param sqls sql list
1670
+ * @param values values of query arguments
1671
+ */
1672
+ const execRDB = async (req, res, sqls, values) => {
1673
+ //console.log(`[vtecxnext execRDB] start. sql=${sql} values=${values}`)
1674
+ // 入力チェック
1675
+ checkNotNull(sqls, 'exec SQL');
1676
+ // 引数生成
1677
+ const feed = editSqlsArgument(sqls, values);
1678
+ // vte.cxへリクエスト
1679
+ const method = 'PUT';
1680
+ const url = `${SERVLETPATH_PROVIDER}/?_execrdb`;
1681
+ let response;
1682
+ try {
1683
+ response = await requestVtecx(method, url, req, JSON.stringify(feed));
1684
+ }
1685
+ catch (e) {
1686
+ throw newFetchError(e, true);
1687
+ }
1688
+ //console.log(`[vtecxnext execRDB] response. status=${response.status}`)
1689
+ // vte.cxからのset-cookieを転記
1690
+ setCookie(response, res);
1691
+ //console.log(`[vtecxnext execBQ] setCookie end.`)
1692
+ // レスポンスのエラーチェック
1693
+ await checkVtecxResponse(response);
1694
+ //console.log(`[vtecxnext execRDB] checkVtecxResponse end.`)
1695
+ // 戻り値
1696
+ return await response.json();
1697
+ };
1698
+ exports.execRDB = execRDB;
1551
1699
  /**
1552
1700
  * Create PDF.
1553
1701
  * Writes a PDF to the response.
@@ -3043,6 +3191,18 @@ const changeTdid = async (req, res) => {
3043
3191
  return await getJson(response);
3044
3192
  };
3045
3193
  exports.changeTdid = changeTdid;
3194
+ /**
3195
+ * Merge an existing user with an line oauth user.
3196
+ * @param req request (for authentication)
3197
+ * @param res response (for authentication)
3198
+ * @param rxid RXID
3199
+ * @return message feed
3200
+ */
3201
+ const mergeOAuthUserLine = async (req, res, rxid) => {
3202
+ //console.log(`[vtecxnext mergeOAuthUserLine] start. feed=${feed}`)
3203
+ return mergeOAuthUser(req, res, 'line', rxid);
3204
+ };
3205
+ exports.mergeOAuthUserLine = mergeOAuthUserLine;
3046
3206
  /**
3047
3207
  * null、undefined、空文字の判定
3048
3208
  * @param val チェック値
@@ -3389,20 +3549,52 @@ const editBqTableNames = (tablenames) => {
3389
3549
  return result;
3390
3550
  };
3391
3551
  /**
3392
- * BigQuery検索の引数を生成
3552
+ * SQLインジェクション対策を行い、安全に値を設定した上で、feedにセットします.
3393
3553
  * @param sql SQL
3394
3554
  * @param values SQLに指定する値
3395
3555
  * @param parent 戻り値JSONの親項目(任意)か、CSVのヘッダ(任意)
3396
- * @returns BigQuery検索の引数
3556
+ * @returns SQLをセットしたfeed
3397
3557
  */
3398
- const editGetBqArgument = (sql, values, parent) => {
3558
+ const editSqlArgument = (sql, values, parent) => {
3399
3559
  // SQLに引数を代入(SQLインジェクション対応)
3400
3560
  const editSql = values ? formatSql(sql, values) : sql;
3401
- //console.log(`[vtecxnext editGetBqArgument] sql=${editSql}`)
3561
+ //console.log(`[vtecxnext editSqlArgument] sql=${editSql}`)
3402
3562
  // 引数
3403
- const feed = { 'feed': { 'title': editSql } };
3563
+ const entry = { 'title': editSql };
3404
3564
  if (parent) {
3405
- feed.feed['subtitle'] = parent;
3565
+ entry['subtitle'] = parent;
3566
+ }
3567
+ const feed = [entry];
3568
+ return feed;
3569
+ };
3570
+ /**
3571
+ * SQLインジェクション対策を行い、安全に値を設定した上で、feedにセットします.
3572
+ * @param sqls SQLリスト
3573
+ * @param values SQLに指定する値
3574
+ * @returns SQLをセットしたfeed
3575
+ */
3576
+ const editSqlsArgument = (sqls, values) => {
3577
+ // SQLに引数を代入(SQLインジェクション対応)
3578
+ const len = sqls.length;
3579
+ let editedSqls;
3580
+ if (values) {
3581
+ if (sqls.length !== values.length) {
3582
+ throw new VtecxNextError(400, ``);
3583
+ }
3584
+ editedSqls = new Array(len);
3585
+ for (let i = 0; i < len; i++) {
3586
+ editedSqls[i] = formatSql(sqls[i], values[i]);
3587
+ }
3588
+ }
3589
+ else {
3590
+ editedSqls = sqls;
3591
+ }
3592
+ const feed = [];
3593
+ let i = 0;
3594
+ for (const editSql of editedSqls) {
3595
+ const entry = { 'title': editSql };
3596
+ feed[i] = entry;
3597
+ i++;
3406
3598
  }
3407
3599
  return feed;
3408
3600
  };
@@ -3682,3 +3874,34 @@ const createURLSearchParams = (data) => {
3682
3874
  Object.keys(data).forEach(key => params.append(key, data[key]));
3683
3875
  return params;
3684
3876
  };
3877
+ /**
3878
+ * Merge an existing user with an oauth user.
3879
+ * @param req request (for authentication)
3880
+ * @param res response (for authentication)
3881
+ * @param provider OAuth provider name
3882
+ * @param rxid RXID
3883
+ * @return message feed
3884
+ */
3885
+ const mergeOAuthUser = async (req, res, provider, rxid) => {
3886
+ //console.log(`[vtecxnext mergeOAuthUser] start. feed=${feed}`)
3887
+ // 入力チェック
3888
+ checkNotNull(provider, 'Provider');
3889
+ checkNotNull(rxid, 'RXID');
3890
+ // vte.cxへリクエスト
3891
+ const method = 'PUT';
3892
+ const url = `${SERVLETPATH_DATA}/?_mergeoauthuser`;
3893
+ const feed = { 'feed': { 'subtitle': provider, 'rights': rxid } };
3894
+ let response;
3895
+ try {
3896
+ response = await requestVtecx(method, url, req, JSON.stringify(feed));
3897
+ }
3898
+ catch (e) {
3899
+ throw newFetchError(e, true);
3900
+ }
3901
+ //console.log(`[vtecxnext mergeOAuthUser] response. status=${response.status}`)
3902
+ // vte.cxからのset-cookieを転記
3903
+ setCookie(response, res);
3904
+ // レスポンスのエラーチェック
3905
+ await checkVtecxResponse(response);
3906
+ return await getJson(response);
3907
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtecx/vtecxnext",
3
- "version": "1.1.9",
3
+ "version": "1.1.11",
4
4
  "description": "vte.cx Next.js api",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -22,14 +22,14 @@
22
22
  },
23
23
  "homepage": "https://github.com/reflexworks/vtecxnext#readme",
24
24
  "devDependencies": {
25
- "@types/formidable": "^2.0.5",
26
- "@types/node": "^18.16.12",
25
+ "@types/formidable": "^2.0.6",
26
+ "@types/node": "^20.4.5",
27
27
  "@types/sqlstring": "^2.3.0",
28
28
  "ts-node": "^10.9.1",
29
- "typescript": "^4.9.5"
29
+ "typescript": "^5.1.6"
30
30
  },
31
31
  "dependencies": {
32
- "formidable": "^2.1.1",
32
+ "formidable": "^2.1.2",
33
33
  "sqlstring": "^2.3.3"
34
34
  }
35
35
  }