gs2 1.4.126 → 1.4.128
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.
- package/core/AbstractGs2RestClient.d.ts +2 -0
- package/core/AbstractGs2RestClient.js +56 -18
- package/core/AbstractGs2RestClient.js.map +1 -1
- package/core/index.d.ts +2 -2
- package/core/index.js +4 -1
- package/core/index.js.map +1 -1
- package/core/model.d.ts +112 -2
- package/core/model.js +469 -56
- package/core/model.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,8 @@ export default class {
|
|
|
7
7
|
};
|
|
8
8
|
private prepareRequestConfig;
|
|
9
9
|
private compressBody;
|
|
10
|
+
/** 既存の要求と同じ写像: 応答があれば message(JSON 文字列)を展開、無ければ [] */
|
|
11
|
+
private mapError;
|
|
10
12
|
protected request<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, headers: {
|
|
11
13
|
[key: string]: any;
|
|
12
14
|
}, params?: {
|
|
@@ -16,6 +16,7 @@ permissions and limitations under the License.
|
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
var tslib_1 = require("tslib");
|
|
19
|
+
var model_1 = require("./model");
|
|
19
20
|
var axios_1 = tslib_1.__importDefault(require("axios"));
|
|
20
21
|
var pako_1 = tslib_1.__importDefault(require("pako"));
|
|
21
22
|
var default_1 = /** @class */ (function () {
|
|
@@ -47,31 +48,68 @@ var default_1 = /** @class */ (function () {
|
|
|
47
48
|
}
|
|
48
49
|
return body;
|
|
49
50
|
};
|
|
51
|
+
/** 既存の要求と同じ写像: 応答があれば message(JSON 文字列)を展開、無ければ [] */
|
|
52
|
+
default_1.prototype.mapError = function (error) {
|
|
53
|
+
// ★応答が無い失敗(接続段階の失敗・切断)では error.response が無い
|
|
54
|
+
// ―― 従来 GET / DELETE はここで TypeError になっていた。
|
|
55
|
+
if (error != null && error.response) {
|
|
56
|
+
return JSON.parse(error.response.data.message);
|
|
57
|
+
}
|
|
58
|
+
return [];
|
|
59
|
+
};
|
|
50
60
|
default_1.prototype.request = function (method, url, headers, params, body) {
|
|
61
|
+
var _this = this;
|
|
51
62
|
var config = this.prepareRequestConfig(headers);
|
|
63
|
+
// Steady: 生成クライアントが共有クラウドの template から組んだ URL を `<steady>/<service>...` へ。
|
|
64
|
+
// steadyEndpoint が未設定なら target は url と byte 単位で同じ。
|
|
65
|
+
var target = (0, model_1.steadyRestUrl)(this.session.steadyEndpoint, this.session.region, url);
|
|
66
|
+
var viaSteady = (0, model_1.isSteadyUrl)(this.session.steadyEndpoint, target);
|
|
67
|
+
var data = undefined;
|
|
52
68
|
if (method === 'GET' || method === 'DELETE') {
|
|
53
69
|
config.params = params;
|
|
54
|
-
var axiosMethod = method === 'GET' ? axios_1.default.get : axios_1.default.delete;
|
|
55
|
-
return axiosMethod(url, config)
|
|
56
|
-
.then(function (response) { return response.data; })
|
|
57
|
-
.catch(function (error) {
|
|
58
|
-
throw JSON.parse(error.response.data.message);
|
|
59
|
-
});
|
|
60
70
|
}
|
|
61
71
|
else {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return axiosMethod(url, data, config)
|
|
65
|
-
.then(function (response) { return response.data; })
|
|
66
|
-
.catch(function (error) {
|
|
67
|
-
if (error.response) {
|
|
68
|
-
throw JSON.parse(error.response.data.message);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
throw [];
|
|
72
|
-
}
|
|
73
|
-
});
|
|
72
|
+
// ★本文は先に作って持つ(接続失敗の再送で同じ要求をもう一度組むため)。
|
|
73
|
+
data = body ? this.compressBody(body, headers) : undefined;
|
|
74
74
|
}
|
|
75
|
+
var requestConfig = config;
|
|
76
|
+
if (viaSteady) {
|
|
77
|
+
var agents = (0, model_1.steadyAgents)(this.session.steadyConnectTimeoutMs);
|
|
78
|
+
if (agents != null) {
|
|
79
|
+
requestConfig = Object.assign({}, config, {
|
|
80
|
+
httpAgent: agents.http,
|
|
81
|
+
httpsAgent: agents.https,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
var send = function () {
|
|
86
|
+
if (method === 'GET') {
|
|
87
|
+
return axios_1.default.get(target, requestConfig);
|
|
88
|
+
}
|
|
89
|
+
else if (method === 'DELETE') {
|
|
90
|
+
return axios_1.default.delete(target, requestConfig);
|
|
91
|
+
}
|
|
92
|
+
else if (method === 'POST') {
|
|
93
|
+
return axios_1.default.post(target, data, requestConfig);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
return axios_1.default.put(target, data, requestConfig);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
return send()
|
|
100
|
+
.catch(function (error) {
|
|
101
|
+
// ★Steady の再送: 基点への**接続段階**の失敗(DNS / dial / TLS。1 バイトも送っていない)だけ、
|
|
102
|
+
// 同じ要求をもう 1 回だけ送る。フリートが手放した IP に当たったとき、名前を引き直して
|
|
103
|
+
// 別のノードへ着く機会を 1 回だけ作る。送信後の失敗(5xx・切断・読み取りタイムアウト)は
|
|
104
|
+
// 届いたかもしれないので再送しない。再送は 1 回だけ(3 回目は無い)。
|
|
105
|
+
if (viaSteady && (0, model_1.isConnectFailure)(error)) {
|
|
106
|
+
return send();
|
|
107
|
+
}
|
|
108
|
+
throw error;
|
|
109
|
+
})
|
|
110
|
+
.then(function (response) { return response.data; }, function (error) {
|
|
111
|
+
throw _this.mapError(error);
|
|
112
|
+
});
|
|
75
113
|
};
|
|
76
114
|
return default_1;
|
|
77
115
|
}());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractGs2RestClient.js","sourceRoot":"","sources":["../../src/core/AbstractGs2RestClient.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;
|
|
1
|
+
{"version":3,"file":"AbstractGs2RestClient.js","sourceRoot":"","sources":["../../src/core/AbstractGs2RestClient.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,iCAAqG;AACrG,wDAAkD;AAClD,sDAAwB;AAExB;IAIE,mBAAY,OAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAES,2CAAuB,GAAjC;QACE,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAS;YACpD,eAAe,EAAE,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;SACvD,CAAC;IACJ,CAAC;IAEO,wCAAoB,GAA5B,UAA6B,OAA6B;QACxD,IAAM,MAAM,GAAuB;YACjC,OAAO,SAAA;SACR,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACpE,OAAO,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC;SACrC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gCAAY,GAApB,UAAqB,IAA0B,EAAE,OAA6B;QAC5E,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAChC,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACxC,IAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;YACrC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;YAC7C,OAAO,UAAU,CAAC;SACnB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sDAAsD;IAC9C,4BAAQ,GAAhB,UAAiB,KAAU;QACzB,4CAA4C;QAC5C,4CAA4C;QAC5C,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE;YACnC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAChD;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,2BAAO,GAAjB,UACE,MAAyC,EACzC,GAAW,EACX,OAA6B,EAC7B,MAA6B,EAC7B,IAA2B;QAL7B,iBA8DC;QAvDC,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAElD,2EAA2E;QAC3E,mDAAmD;QACnD,IAAM,MAAM,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpF,IAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAEnE,IAAI,IAAI,GAAkD,SAAS,CAAC;QACpE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,EAAE;YAC3C,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;SACxB;aAAM;YACL,sCAAsC;YACtC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SAC5D;QAED,IAAI,aAAa,GAAG,MAAM,CAAC;QAC3B,IAAI,SAAS,EAAE;YACb,IAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACjE,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;oBACxC,SAAS,EAAE,MAAM,CAAC,IAAI;oBACtB,UAAU,EAAE,MAAM,CAAC,KAAK;iBACzB,CAAC,CAAC;aACJ;SACF;QAED,IAAM,IAAI,GAAG;YACX,IAAI,MAAM,KAAK,KAAK,EAAE;gBACpB,OAAO,eAAK,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;aACzC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC9B,OAAO,eAAK,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;aAC5C;iBAAM,IAAI,MAAM,KAAK,MAAM,EAAE;gBAC5B,OAAO,eAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;aAChD;iBAAM;gBACL,OAAO,eAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;aAC/C;QACH,CAAC,CAAC;QAEF,OAAO,IAAI,EAAE;aACV,KAAK,CAAC,UAAC,KAAU;YAChB,iEAAiE;YACjE,gDAAgD;YAChD,iDAAiD;YACjD,uCAAuC;YACvC,IAAI,SAAS,IAAI,IAAA,wBAAgB,EAAC,KAAK,CAAC,EAAE;gBACxC,OAAO,IAAI,EAAE,CAAC;aACf;YACD,MAAM,KAAK,CAAC;QACd,CAAC,CAAC;aACD,IAAI,CACH,UAAC,QAAa,IAAK,OAAA,QAAQ,CAAC,IAAS,EAAlB,CAAkB,EACrC,UAAC,KAAU;YACT,MAAM,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CACF,CAAC;IACN,CAAC;IACH,gBAAC;AAAD,CAAC,AA/GD,IA+GC"}
|
package/core/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import AbstractGs2Client from './AbstractGs2RestClient';
|
|
2
|
-
import { Gs2RestSession, Gs2WebSocketSession, BasicGs2Credential, ProjectTokenGs2Credential, Region } from './model';
|
|
2
|
+
import { Gs2RestSession, Gs2RestSessionOptions, Gs2WebSocketSession, Gs2WebSocketSessionOptions, BasicGs2Credential, ProjectTokenGs2Credential, Region, STEADY_CONNECT_TIMEOUT_MS, isConnectFailure, ConnectionBrokenError } from './model';
|
|
3
3
|
import AcquireActionResult from "./AcquireActionResult";
|
|
4
4
|
import ConsumeActionResult from "./ConsumeActionResult";
|
|
5
5
|
import VerifyActionResult from "./VerifyActionResult";
|
|
6
6
|
import TransactionResult from "./TransactionResult";
|
|
7
|
-
export { AbstractGs2Client, Gs2RestSession, Gs2WebSocketSession, BasicGs2Credential, ProjectTokenGs2Credential, Region, AcquireActionResult, ConsumeActionResult, VerifyActionResult, TransactionResult, };
|
|
7
|
+
export { AbstractGs2Client, Gs2RestSession, Gs2RestSessionOptions, Gs2WebSocketSession, Gs2WebSocketSessionOptions, BasicGs2Credential, ProjectTokenGs2Credential, Region, STEADY_CONNECT_TIMEOUT_MS, isConnectFailure, ConnectionBrokenError, AcquireActionResult, ConsumeActionResult, VerifyActionResult, TransactionResult, };
|
package/core/index.js
CHANGED
|
@@ -15,7 +15,7 @@ express or implied. See the License for the specific language governing
|
|
|
15
15
|
permissions and limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.TransactionResult = exports.VerifyActionResult = exports.ConsumeActionResult = exports.AcquireActionResult = exports.Region = exports.ProjectTokenGs2Credential = exports.BasicGs2Credential = exports.Gs2WebSocketSession = exports.Gs2RestSession = exports.AbstractGs2Client = void 0;
|
|
18
|
+
exports.TransactionResult = exports.VerifyActionResult = exports.ConsumeActionResult = exports.AcquireActionResult = exports.ConnectionBrokenError = exports.isConnectFailure = exports.STEADY_CONNECT_TIMEOUT_MS = exports.Region = exports.ProjectTokenGs2Credential = exports.BasicGs2Credential = exports.Gs2WebSocketSession = exports.Gs2RestSession = exports.AbstractGs2Client = void 0;
|
|
19
19
|
var tslib_1 = require("tslib");
|
|
20
20
|
var AbstractGs2RestClient_1 = tslib_1.__importDefault(require("./AbstractGs2RestClient"));
|
|
21
21
|
exports.AbstractGs2Client = AbstractGs2RestClient_1.default;
|
|
@@ -25,6 +25,9 @@ Object.defineProperty(exports, "Gs2WebSocketSession", { enumerable: true, get: f
|
|
|
25
25
|
Object.defineProperty(exports, "BasicGs2Credential", { enumerable: true, get: function () { return model_1.BasicGs2Credential; } });
|
|
26
26
|
Object.defineProperty(exports, "ProjectTokenGs2Credential", { enumerable: true, get: function () { return model_1.ProjectTokenGs2Credential; } });
|
|
27
27
|
Object.defineProperty(exports, "Region", { enumerable: true, get: function () { return model_1.Region; } });
|
|
28
|
+
Object.defineProperty(exports, "STEADY_CONNECT_TIMEOUT_MS", { enumerable: true, get: function () { return model_1.STEADY_CONNECT_TIMEOUT_MS; } });
|
|
29
|
+
Object.defineProperty(exports, "isConnectFailure", { enumerable: true, get: function () { return model_1.isConnectFailure; } });
|
|
30
|
+
Object.defineProperty(exports, "ConnectionBrokenError", { enumerable: true, get: function () { return model_1.ConnectionBrokenError; } });
|
|
28
31
|
var AcquireActionResult_1 = tslib_1.__importDefault(require("./AcquireActionResult"));
|
|
29
32
|
exports.AcquireActionResult = AcquireActionResult_1.default;
|
|
30
33
|
var ConsumeActionResult_1 = tslib_1.__importDefault(require("./ConsumeActionResult"));
|
package/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;AAEH,0FAAwD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;AAEH,0FAAwD;AAmBtD,4BAnBK,+BAAiB,CAmBL;AAlBnB,iCAWiB;AAQf,+FAlBA,sBAAc,OAkBA;AAEd,oGAlBA,2BAAmB,OAkBA;AAEnB,mGAlBA,0BAAkB,OAkBA;AAClB,0GAlBA,iCAAyB,OAkBA;AACzB,uFAlBA,cAAM,OAkBA;AACN,0GAlBA,iCAAyB,OAkBA;AACzB,iGAlBA,wBAAgB,OAkBA;AAChB,sGAlBA,6BAAqB,OAkBA;AAhBvB,sFAAwD;AAiBtD,8BAjBK,6BAAmB,CAiBL;AAhBrB,sFAAwD;AAiBtD,8BAjBK,6BAAmB,CAiBL;AAhBrB,oFAAsD;AAiBpD,6BAjBK,4BAAkB,CAiBL;AAhBpB,kFAAoD;AAiBlD,4BAjBK,2BAAiB,CAiBL"}
|
package/core/model.d.ts
CHANGED
|
@@ -5,11 +5,67 @@ export declare class BasicGs2Credential implements IGs2Credential {
|
|
|
5
5
|
clientSecret: string;
|
|
6
6
|
constructor(clientId: string, clientSecret: string);
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Steady の基点への接続(DNS / TCP / TLS handshake)の上限(ms)。
|
|
10
|
+
* フリートが手放した公開 IP は SYN を落とすので、OS 既定(数十秒〜数分)に任せない。
|
|
11
|
+
* ★ブラウザでは接続だけの上限を持てない(XHR / fetch の timeout は要求全体にかかり、
|
|
12
|
+
* GS2 の長い API を殺す)ので、ブラウザでは上限を置かず 1 回の再送だけが効く。
|
|
13
|
+
*/
|
|
14
|
+
export declare const STEADY_CONNECT_TIMEOUT_MS = 5000;
|
|
15
|
+
/** 接続段階の上限で落としたときに載せる code(Node だけ。再送の判定に使う) */
|
|
16
|
+
export declare const STEADY_CONNECT_TIMEOUT_CODE = "GS2_STEADY_CONNECT_TIMEOUT";
|
|
17
|
+
/** 末尾の / と空白を落とす。未設定なら '' */
|
|
18
|
+
export declare function normalizeSteadyEndpoint(value?: string | null): string;
|
|
19
|
+
/** steadyEndpoint から REST の template({service} 付き)を作る。未設定なら '' */
|
|
20
|
+
export declare function steadyRestTemplate(steadyEndpoint?: string | null): string;
|
|
21
|
+
/**
|
|
22
|
+
* steadyEndpoint から WebSocket の接続先を作る。未設定・壊れた基点なら ''。
|
|
23
|
+
* http:// の基点(ローカルの試験・開発)は ws:// に、https:// は wss:// に。
|
|
24
|
+
*/
|
|
25
|
+
export declare function steadyWebSocketUrl(steadyEndpoint?: string | null): string;
|
|
26
|
+
/** 要求 URL が Steady の基点宛か */
|
|
27
|
+
export declare function isSteadyUrl(steadyEndpoint: string | null | undefined, url: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* 生成クライアントが組んだ URL を Steady の基点配下へ書き換える。
|
|
30
|
+
*
|
|
31
|
+
* 生成クライアントは `(Gs2XxxRestClient.ENDPOINT_HOST ?? Gs2Constant.ENDPOINT_HOST) + <path>` で
|
|
32
|
+
* URL を組む。★共有クラウドの template(Gs2Constant.ENDPOINT_HOST)から組まれた URL だけを
|
|
33
|
+
* `<steady>/<service><path>` に書き換えるので、優先順は
|
|
34
|
+
* サービスごとの override > steadyEndpoint > 共有クラウドの template になる
|
|
35
|
+
* (override の URL は template に当たらないので、そのまま残る)。
|
|
36
|
+
* steadyEndpoint が未設定なら URL は従来と byte 単位で同じ。
|
|
37
|
+
*/
|
|
38
|
+
export declare function steadyRestUrl(steadyEndpoint: string | null | undefined, region: string, url: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* 接続段階の失敗か(応答が無く、code が接続系)。
|
|
41
|
+
* ★ブラウザの axios は接続失敗も送信後の切断もまとめて ERR_NETWORK(応答無し)にするので、
|
|
42
|
+
* ブラウザでは両者を見分けられない ―― 再送が効くのは Node だけ。
|
|
43
|
+
*/
|
|
44
|
+
export declare function isConnectFailure(error: any): boolean;
|
|
45
|
+
/** Steady 宛の要求に使う Agent(Node だけ)。http / https の両方を用意する */
|
|
46
|
+
export interface SteadyAgents {
|
|
47
|
+
http: any;
|
|
48
|
+
https: any;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Node のときだけ: 接続(DNS / TCP / TLS handshake)に上限を置く Agent を作る(timeout ごとに使い回す)。
|
|
52
|
+
* ★要求全体の timeout は使わない ―― GS2 には応答まで長くかかる API があるので殺せない。
|
|
53
|
+
* ブラウザ(window がある)では接続だけの上限を持てないので null を返す(再送だけが効く)。
|
|
54
|
+
*/
|
|
55
|
+
export declare function steadyAgents(timeoutMs: number): SteadyAgents | null;
|
|
8
56
|
export interface Gs2RestSessionOptions {
|
|
9
57
|
/** リクエストボディをgzip圧縮して送信するかどうか(デフォルト: true) */
|
|
10
58
|
compressRequest?: boolean;
|
|
11
59
|
/** レスポンスのgzip展開を受け入れるかどうか(デフォルト: true) */
|
|
12
60
|
acceptGzipResponse?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Steady(専用フリート)の基点 `https://<host>`(placeholder 無し。末尾の `/` と空白は落とす)。
|
|
63
|
+
* 設定すると全サービスの接続先が `<steady>/<service>` になり、接続段階に上限と 1 回の再送が付く。
|
|
64
|
+
* 未設定なら URL・挙動は従来どおり(`Gs2Constant.ENDPOINT_HOST` から組む)。
|
|
65
|
+
*/
|
|
66
|
+
steadyEndpoint?: string;
|
|
67
|
+
/** Steady の基点への接続タイムアウト(ms、デフォルト: STEADY_CONNECT_TIMEOUT_MS) */
|
|
68
|
+
steadyConnectTimeoutMs?: number;
|
|
13
69
|
}
|
|
14
70
|
export declare class Gs2RestSession {
|
|
15
71
|
credential: IGs2Credential;
|
|
@@ -18,23 +74,76 @@ export declare class Gs2RestSession {
|
|
|
18
74
|
expiresAt: number | null;
|
|
19
75
|
compressRequest: boolean;
|
|
20
76
|
acceptGzipResponse: boolean;
|
|
77
|
+
/** Steady の基点(正規化済み)。'' なら共有クラウド */
|
|
78
|
+
steadyEndpoint: string;
|
|
79
|
+
/** Steady の基点への接続タイムアウト(ms) */
|
|
80
|
+
steadyConnectTimeoutMs: number;
|
|
21
81
|
constructor(credential: IGs2Credential, region: string, options?: Gs2RestSessionOptions);
|
|
82
|
+
/**
|
|
83
|
+
* サービスの接続先。優先順: steadyEndpoint > 共有クラウドの `Gs2Constant.ENDPOINT_HOST`。
|
|
84
|
+
* steadyEndpoint が未設定なら従来の文字列と byte 単位で一致する
|
|
85
|
+
* (生成クライアントのサービスごとの override はこれより強い。`steadyRestUrl` の説明)。
|
|
86
|
+
*/
|
|
87
|
+
endpointHost(service: string): string;
|
|
22
88
|
connect(): Promise<LoginResult> | undefined;
|
|
23
89
|
disconnect(): void;
|
|
24
90
|
}
|
|
91
|
+
export declare class ConnectionBrokenError extends Error {
|
|
92
|
+
constructor(detail?: string);
|
|
93
|
+
}
|
|
94
|
+
export interface Gs2WebSocketSessionOptions {
|
|
95
|
+
/**
|
|
96
|
+
* Steady(専用フリート)の基点 `https://<host>`。接続先は `wss://<host>/`(基点が `http://` なら
|
|
97
|
+
* `ws://<host>/`)になり、handshake に上限(steadyConnectTimeoutMs)が付く。未設定なら従来の gateway-ws。
|
|
98
|
+
*/
|
|
99
|
+
steadyEndpoint?: string;
|
|
100
|
+
/** Steady の handshake タイムアウト(ms、デフォルト: STEADY_CONNECT_TIMEOUT_MS) */
|
|
101
|
+
steadyConnectTimeoutMs?: number;
|
|
102
|
+
}
|
|
25
103
|
export declare class Gs2WebSocketSession {
|
|
26
104
|
credential: IGs2Credential;
|
|
27
105
|
private client;
|
|
28
106
|
region: string;
|
|
29
107
|
projectToken: string | null;
|
|
30
108
|
expiresAt: number | null;
|
|
31
|
-
|
|
109
|
+
/** Steady の基点(正規化済み)。'' なら共有クラウド */
|
|
110
|
+
steadyEndpoint: string;
|
|
111
|
+
/** Steady の handshake タイムアウト(ms) */
|
|
112
|
+
steadyConnectTimeoutMs: number;
|
|
113
|
+
/**
|
|
114
|
+
* 応答待ちの要求(requestId → Promise の決着口)。
|
|
115
|
+
* ★応答が来たもの・接続が切れたものは必ず取り除く。以前は応答の無い要求が残り続け、
|
|
116
|
+
* 呼び手は「応答も誤りも来ない」まま待っていた(送信の成否も見ていなかった)。
|
|
117
|
+
*/
|
|
118
|
+
private pendingRequests;
|
|
32
119
|
private onOpenHandlers;
|
|
33
120
|
private onErrorHandlers;
|
|
34
121
|
private onCloseHandlers;
|
|
35
122
|
private onNotificationHandlers;
|
|
36
|
-
constructor(credential: IGs2Credential, region: string);
|
|
123
|
+
constructor(credential: IGs2Credential, region: string, options?: Gs2WebSocketSessionOptions);
|
|
124
|
+
/** 接続先。steadyEndpoint > 共有クラウドの `Gs2Constant.WS_ENDPOINT_HOST` */
|
|
125
|
+
webSocketUrl(): string;
|
|
126
|
+
/**
|
|
127
|
+
* Node の `ws` に渡す接続オプション。Steady のときだけ handshake に上限を置く。
|
|
128
|
+
* ★ブラウザの WebSocket は handshake の上限を持てない(オプションが無い)ので、
|
|
129
|
+
* ブラウザでは上限が効かない。共有クラウドは従来どおりオプション無し(undefined)。
|
|
130
|
+
*/
|
|
131
|
+
webSocketOptions(): {
|
|
132
|
+
handshakeTimeout: number;
|
|
133
|
+
} | undefined;
|
|
134
|
+
/** ログイン(identifier)の REST 接続先。steady があれば `<steady>/identifier`、無ければ従来 */
|
|
135
|
+
endpointHost(service: string): string;
|
|
37
136
|
connect(): Promise<any>;
|
|
137
|
+
/** requestId の要求を待ち行列から外して返す(無ければ null) */
|
|
138
|
+
private takePending;
|
|
139
|
+
/** 待ち中の要求すべてを ConnectionBrokenError で決着させ、待ち行列を空にする */
|
|
140
|
+
private failPending;
|
|
141
|
+
/**
|
|
142
|
+
* 切れた接続を捨て、待ち中の要求すべてを ConnectionBrokenError で決着させる。
|
|
143
|
+
* ★既に別の接続へ差し替わっていたら(disconnect → connect の後の古い接続)何もしない。
|
|
144
|
+
* ★同じ接続に二度呼ばれても 2 回目は待ち行列が空なので無害(close と error の両方から来る)。
|
|
145
|
+
*/
|
|
146
|
+
private dropConnection;
|
|
38
147
|
send(service: string, component: string, func: string, payload: any): Promise<any>;
|
|
39
148
|
onOpen(func: (ev: Event) => any): void;
|
|
40
149
|
onError(func: (ev: Event) => any): void;
|
|
@@ -44,6 +153,7 @@ export declare class Gs2WebSocketSession {
|
|
|
44
153
|
issuer: string;
|
|
45
154
|
payload: any;
|
|
46
155
|
}) => any): void;
|
|
156
|
+
/** 接続を閉じる。★待ち中の要求には ConnectionBrokenError が返る(close を待たずに決着させる) */
|
|
47
157
|
disconnect(): Promise<any>;
|
|
48
158
|
}
|
|
49
159
|
declare class LoginResult {
|
package/core/model.js
CHANGED
|
@@ -14,8 +14,9 @@ on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
|
|
14
14
|
express or implied. See the License for the specific language governing
|
|
15
15
|
permissions and limitations under the License.
|
|
16
16
|
*/
|
|
17
|
+
var _a;
|
|
17
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.Region = exports.Gs2Constant = exports.ProjectTokenGs2Credential = exports.ProjectToken = exports.Gs2WebSocketSession = exports.Gs2RestSession = exports.BasicGs2Credential = void 0;
|
|
19
|
+
exports.Region = exports.Gs2Constant = exports.ProjectTokenGs2Credential = exports.ProjectToken = exports.Gs2WebSocketSession = exports.ConnectionBrokenError = exports.Gs2RestSession = exports.steadyAgents = exports.isConnectFailure = exports.steadyRestUrl = exports.isSteadyUrl = exports.steadyWebSocketUrl = exports.steadyRestTemplate = exports.normalizeSteadyEndpoint = exports.STEADY_CONNECT_TIMEOUT_CODE = exports.STEADY_CONNECT_TIMEOUT_MS = exports.BasicGs2Credential = void 0;
|
|
19
20
|
var tslib_1 = require("tslib");
|
|
20
21
|
var axios_1 = tslib_1.__importDefault(require("axios"));
|
|
21
22
|
var async_wait_until_1 = tslib_1.__importDefault(require("async-wait-until"));
|
|
@@ -29,35 +30,281 @@ var BasicGs2Credential = /** @class */ (function () {
|
|
|
29
30
|
return BasicGs2Credential;
|
|
30
31
|
}());
|
|
31
32
|
exports.BasicGs2Credential = BasicGs2Credential;
|
|
33
|
+
// ---------------------------------------------------------------- Steady(専用フリート)の基点
|
|
34
|
+
//
|
|
35
|
+
// フリートは 1 つの名前(steadyEndpoint、例 https://bs-dev.ap-northeast-1.dev.gen2.gs2io.com)で受け、
|
|
36
|
+
// REST は <steady>/<service>/...、WebSocket は wss://<host>/ を使う。名前はフリートのノードへ直接
|
|
37
|
+
// 解決される(間に ALB は無い)ので、フリートが手放した公開 IP に当たると SYN が落ちる。
|
|
38
|
+
// そのため Steady のときだけ接続段階に上限(steadyConnectTimeoutMs)を置き、接続段階の失敗
|
|
39
|
+
// (1 バイトも送っていない)だけは同じ要求をもう 1 回だけ送る。送信後の失敗は届いたかもしれない
|
|
40
|
+
// ので再送しない(非冪等要求の二重実行を作らない)。
|
|
41
|
+
/**
|
|
42
|
+
* Steady の基点への接続(DNS / TCP / TLS handshake)の上限(ms)。
|
|
43
|
+
* フリートが手放した公開 IP は SYN を落とすので、OS 既定(数十秒〜数分)に任せない。
|
|
44
|
+
* ★ブラウザでは接続だけの上限を持てない(XHR / fetch の timeout は要求全体にかかり、
|
|
45
|
+
* GS2 の長い API を殺す)ので、ブラウザでは上限を置かず 1 回の再送だけが効く。
|
|
46
|
+
*/
|
|
47
|
+
exports.STEADY_CONNECT_TIMEOUT_MS = 5000;
|
|
48
|
+
/** 接続段階の上限で落としたときに載せる code(Node だけ。再送の判定に使う) */
|
|
49
|
+
exports.STEADY_CONNECT_TIMEOUT_CODE = 'GS2_STEADY_CONNECT_TIMEOUT';
|
|
50
|
+
/** 末尾の / と空白を落とす。未設定なら '' */
|
|
51
|
+
function normalizeSteadyEndpoint(value) {
|
|
52
|
+
if (value == null) {
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
return value.trim().replace(/\/+$/, '');
|
|
56
|
+
}
|
|
57
|
+
exports.normalizeSteadyEndpoint = normalizeSteadyEndpoint;
|
|
58
|
+
/** steadyEndpoint から REST の template({service} 付き)を作る。未設定なら '' */
|
|
59
|
+
function steadyRestTemplate(steadyEndpoint) {
|
|
60
|
+
var steady = normalizeSteadyEndpoint(steadyEndpoint);
|
|
61
|
+
if (steady === '') {
|
|
62
|
+
return '';
|
|
63
|
+
}
|
|
64
|
+
return steady + '/{service}';
|
|
65
|
+
}
|
|
66
|
+
exports.steadyRestTemplate = steadyRestTemplate;
|
|
67
|
+
/**
|
|
68
|
+
* steadyEndpoint から WebSocket の接続先を作る。未設定・壊れた基点なら ''。
|
|
69
|
+
* http:// の基点(ローカルの試験・開発)は ws:// に、https:// は wss:// に。
|
|
70
|
+
*/
|
|
71
|
+
function steadyWebSocketUrl(steadyEndpoint) {
|
|
72
|
+
var base = normalizeSteadyEndpoint(steadyEndpoint);
|
|
73
|
+
if (base === '') {
|
|
74
|
+
return '';
|
|
75
|
+
}
|
|
76
|
+
// 基点に path が付いていても host だけを見る(Go の url.Parse と同じ)。
|
|
77
|
+
var match = /^(https?):\/\/([^/]+)/i.exec(base);
|
|
78
|
+
if (match == null) {
|
|
79
|
+
return '';
|
|
80
|
+
}
|
|
81
|
+
var scheme = match[1].toLowerCase() === 'http' ? 'ws' : 'wss';
|
|
82
|
+
return scheme + '://' + match[2] + '/';
|
|
83
|
+
}
|
|
84
|
+
exports.steadyWebSocketUrl = steadyWebSocketUrl;
|
|
85
|
+
/** 要求 URL が Steady の基点宛か */
|
|
86
|
+
function isSteadyUrl(steadyEndpoint, url) {
|
|
87
|
+
var base = normalizeSteadyEndpoint(steadyEndpoint);
|
|
88
|
+
if (base === '') {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return url === base || url.indexOf(base + '/') === 0;
|
|
92
|
+
}
|
|
93
|
+
exports.isSteadyUrl = isSteadyUrl;
|
|
94
|
+
function escapeRegExp(value) {
|
|
95
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 生成クライアントが組んだ URL を Steady の基点配下へ書き換える。
|
|
99
|
+
*
|
|
100
|
+
* 生成クライアントは `(Gs2XxxRestClient.ENDPOINT_HOST ?? Gs2Constant.ENDPOINT_HOST) + <path>` で
|
|
101
|
+
* URL を組む。★共有クラウドの template(Gs2Constant.ENDPOINT_HOST)から組まれた URL だけを
|
|
102
|
+
* `<steady>/<service><path>` に書き換えるので、優先順は
|
|
103
|
+
* サービスごとの override > steadyEndpoint > 共有クラウドの template になる
|
|
104
|
+
* (override の URL は template に当たらないので、そのまま残る)。
|
|
105
|
+
* steadyEndpoint が未設定なら URL は従来と byte 単位で同じ。
|
|
106
|
+
*/
|
|
107
|
+
function steadyRestUrl(steadyEndpoint, region, url) {
|
|
108
|
+
var steady = normalizeSteadyEndpoint(steadyEndpoint);
|
|
109
|
+
if (steady === '' || isSteadyUrl(steady, url)) {
|
|
110
|
+
return url;
|
|
111
|
+
}
|
|
112
|
+
var template = exports.Gs2Constant.ENDPOINT_HOST;
|
|
113
|
+
if (template.indexOf('{service}') < 0) {
|
|
114
|
+
return url;
|
|
115
|
+
}
|
|
116
|
+
var pattern = new RegExp('^' + escapeRegExp(template)
|
|
117
|
+
.replace('\\{service\\}', '([^/]+)')
|
|
118
|
+
.replace('\\{region\\}', escapeRegExp(region)) + '(?=$|/)');
|
|
119
|
+
var match = pattern.exec(url);
|
|
120
|
+
if (match == null) {
|
|
121
|
+
// サービスごとの override(または region 違い)―― 触らない。
|
|
122
|
+
return url;
|
|
123
|
+
}
|
|
124
|
+
return steady + '/' + match[1] + url.substring(match[0].length);
|
|
125
|
+
}
|
|
126
|
+
exports.steadyRestUrl = steadyRestUrl;
|
|
127
|
+
/**
|
|
128
|
+
* 「1 バイトも送っていない」接続段階の失敗のエラーコード。これだけが再送の対象。
|
|
129
|
+
* 送信後の失敗(ECONNRESET / socket hang up / 読み取りタイムアウト / 5xx)は届いたかもしれないので
|
|
130
|
+
* 再送しない(非冪等要求の二重実行を作らない)。
|
|
131
|
+
*/
|
|
132
|
+
var CONNECT_FAILURE_CODES = (_a = {
|
|
133
|
+
'ECONNREFUSED': true,
|
|
134
|
+
'ENOTFOUND': true,
|
|
135
|
+
'EAI_AGAIN': true
|
|
136
|
+
},
|
|
137
|
+
_a[exports.STEADY_CONNECT_TIMEOUT_CODE] = true,
|
|
138
|
+
_a['CERT_HAS_EXPIRED'] = true,
|
|
139
|
+
_a['UNABLE_TO_VERIFY_LEAF_SIGNATURE'] = true,
|
|
140
|
+
_a['ERR_TLS_CERT_ALTNAME_INVALID'] = true,
|
|
141
|
+
_a['DEPTH_ZERO_SELF_SIGNED_CERT'] = true,
|
|
142
|
+
_a['SELF_SIGNED_CERT_IN_CHAIN'] = true,
|
|
143
|
+
_a);
|
|
144
|
+
/**
|
|
145
|
+
* 接続段階の失敗か(応答が無く、code が接続系)。
|
|
146
|
+
* ★ブラウザの axios は接続失敗も送信後の切断もまとめて ERR_NETWORK(応答無し)にするので、
|
|
147
|
+
* ブラウザでは両者を見分けられない ―― 再送が効くのは Node だけ。
|
|
148
|
+
*/
|
|
149
|
+
function isConnectFailure(error) {
|
|
150
|
+
var _a, _b;
|
|
151
|
+
if (error == null || error.response) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
var code = (_a = error.code) !== null && _a !== void 0 ? _a : (_b = error.cause) === null || _b === void 0 ? void 0 : _b.code;
|
|
155
|
+
return typeof code === 'string' && CONNECT_FAILURE_CODES[code] === true;
|
|
156
|
+
}
|
|
157
|
+
exports.isConnectFailure = isConnectFailure;
|
|
158
|
+
var steadyAgentCache = {};
|
|
159
|
+
function withConnectTimeout(socket, timeoutMs, connectedEvent) {
|
|
160
|
+
var timer = setTimeout(function () {
|
|
161
|
+
var error = new Error('connect timeout (' + timeoutMs + 'ms)');
|
|
162
|
+
error.code = exports.STEADY_CONNECT_TIMEOUT_CODE;
|
|
163
|
+
socket.destroy(error);
|
|
164
|
+
}, timeoutMs);
|
|
165
|
+
var clear = function () { return clearTimeout(timer); };
|
|
166
|
+
socket.once(connectedEvent, clear);
|
|
167
|
+
socket.once('error', clear);
|
|
168
|
+
socket.once('close', clear);
|
|
169
|
+
return socket;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Node のときだけ: 接続(DNS / TCP / TLS handshake)に上限を置く Agent を作る(timeout ごとに使い回す)。
|
|
173
|
+
* ★要求全体の timeout は使わない ―― GS2 には応答まで長くかかる API があるので殺せない。
|
|
174
|
+
* ブラウザ(window がある)では接続だけの上限を持てないので null を返す(再送だけが効く)。
|
|
175
|
+
*/
|
|
176
|
+
function steadyAgents(timeoutMs) {
|
|
177
|
+
if (typeof window !== 'undefined' || typeof require !== 'function') {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
var cached = steadyAgentCache[timeoutMs];
|
|
181
|
+
if (cached != null) {
|
|
182
|
+
return cached;
|
|
183
|
+
}
|
|
184
|
+
var http;
|
|
185
|
+
var https;
|
|
186
|
+
try {
|
|
187
|
+
http = require('http');
|
|
188
|
+
https = require('https');
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
if ((http === null || http === void 0 ? void 0 : http.Agent) == null || (https === null || https === void 0 ? void 0 : https.Agent) == null) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
var SteadyHttpAgent = /** @class */ (function (_super) {
|
|
197
|
+
tslib_1.__extends(SteadyHttpAgent, _super);
|
|
198
|
+
function SteadyHttpAgent() {
|
|
199
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
200
|
+
}
|
|
201
|
+
SteadyHttpAgent.prototype.createConnection = function (options, callback) {
|
|
202
|
+
return withConnectTimeout(_super.prototype.createConnection.call(this, options, callback), timeoutMs, 'connect');
|
|
203
|
+
};
|
|
204
|
+
return SteadyHttpAgent;
|
|
205
|
+
}(http.Agent));
|
|
206
|
+
var SteadyHttpsAgent = /** @class */ (function (_super) {
|
|
207
|
+
tslib_1.__extends(SteadyHttpsAgent, _super);
|
|
208
|
+
function SteadyHttpsAgent() {
|
|
209
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
210
|
+
}
|
|
211
|
+
SteadyHttpsAgent.prototype.createConnection = function (options, callback) {
|
|
212
|
+
return withConnectTimeout(_super.prototype.createConnection.call(this, options, callback), timeoutMs, 'secureConnect');
|
|
213
|
+
};
|
|
214
|
+
return SteadyHttpsAgent;
|
|
215
|
+
}(https.Agent));
|
|
216
|
+
// ★接続は使い回す(Node 既定の globalAgent と同じ keepAlive)。Steady だけ毎回 3-way handshake に
|
|
217
|
+
// なると、接続段階の上限を付けた意味(速く諦める)と引き換えに遅くなってしまう。
|
|
218
|
+
var options = { keepAlive: true, scheduling: 'lifo', timeout: 5000 };
|
|
219
|
+
var agents = {
|
|
220
|
+
http: new SteadyHttpAgent(options),
|
|
221
|
+
https: new SteadyHttpsAgent(options),
|
|
222
|
+
};
|
|
223
|
+
steadyAgentCache[timeoutMs] = agents;
|
|
224
|
+
return agents;
|
|
225
|
+
}
|
|
226
|
+
exports.steadyAgents = steadyAgents;
|
|
227
|
+
/**
|
|
228
|
+
* Steady のときだけ、接続段階に上限を置いた POST を投げ、接続段階の失敗なら
|
|
229
|
+
* 同じ要求をもう 1 回だけ送る(プロジェクトトークンのログイン用)。
|
|
230
|
+
* steadyEndpoint が未設定なら従来どおり素の axios.post。
|
|
231
|
+
*/
|
|
232
|
+
function postWithSteadyResilience(url, data, steadyEndpoint, steadyConnectTimeoutMs) {
|
|
233
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
234
|
+
var agents, config, error_1;
|
|
235
|
+
return tslib_1.__generator(this, function (_a) {
|
|
236
|
+
switch (_a.label) {
|
|
237
|
+
case 0:
|
|
238
|
+
if (!isSteadyUrl(steadyEndpoint, url)) {
|
|
239
|
+
return [2 /*return*/, axios_1.default.post(url, data)];
|
|
240
|
+
}
|
|
241
|
+
agents = steadyAgents(steadyConnectTimeoutMs);
|
|
242
|
+
config = agents == null ? {} : { httpAgent: agents.http, httpsAgent: agents.https };
|
|
243
|
+
_a.label = 1;
|
|
244
|
+
case 1:
|
|
245
|
+
_a.trys.push([1, 3, , 5]);
|
|
246
|
+
return [4 /*yield*/, axios_1.default.post(url, data, config)];
|
|
247
|
+
case 2: return [2 /*return*/, _a.sent()];
|
|
248
|
+
case 3:
|
|
249
|
+
error_1 = _a.sent();
|
|
250
|
+
if (!isConnectFailure(error_1)) {
|
|
251
|
+
throw error_1;
|
|
252
|
+
}
|
|
253
|
+
return [4 /*yield*/, axios_1.default.post(url, data, config)];
|
|
254
|
+
case 4:
|
|
255
|
+
// ★接続段階の失敗(DNS / dial / TLS。1 バイトも送っていない)だけ、同じ要求をもう 1 回だけ。
|
|
256
|
+
// フリートが手放した IP に当たったとき、名前を引き直して別のノードへ着く機会を 1 回だけ作る。
|
|
257
|
+
return [2 /*return*/, _a.sent()];
|
|
258
|
+
case 5: return [2 /*return*/];
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
}
|
|
32
263
|
var Gs2RestSession = /** @class */ (function () {
|
|
33
264
|
function Gs2RestSession(credential, region, options) {
|
|
34
|
-
var _a, _b;
|
|
265
|
+
var _a, _b, _c;
|
|
35
266
|
this.credential = credential;
|
|
36
267
|
this.region = region;
|
|
37
268
|
this.projectToken = null;
|
|
38
269
|
this.expiresAt = null;
|
|
39
270
|
this.compressRequest = (_a = options === null || options === void 0 ? void 0 : options.compressRequest) !== null && _a !== void 0 ? _a : true;
|
|
40
271
|
this.acceptGzipResponse = (_b = options === null || options === void 0 ? void 0 : options.acceptGzipResponse) !== null && _b !== void 0 ? _b : true;
|
|
272
|
+
this.steadyEndpoint = normalizeSteadyEndpoint(options === null || options === void 0 ? void 0 : options.steadyEndpoint);
|
|
273
|
+
this.steadyConnectTimeoutMs = (_c = options === null || options === void 0 ? void 0 : options.steadyConnectTimeoutMs) !== null && _c !== void 0 ? _c : exports.STEADY_CONNECT_TIMEOUT_MS;
|
|
41
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* サービスの接続先。優先順: steadyEndpoint > 共有クラウドの `Gs2Constant.ENDPOINT_HOST`。
|
|
277
|
+
* steadyEndpoint が未設定なら従来の文字列と byte 単位で一致する
|
|
278
|
+
* (生成クライアントのサービスごとの override はこれより強い。`steadyRestUrl` の説明)。
|
|
279
|
+
*/
|
|
280
|
+
Gs2RestSession.prototype.endpointHost = function (service) {
|
|
281
|
+
var template = steadyRestTemplate(this.steadyEndpoint) || exports.Gs2Constant.ENDPOINT_HOST;
|
|
282
|
+
return template
|
|
283
|
+
.replace('{service}', service)
|
|
284
|
+
.replace('{region}', this.region);
|
|
285
|
+
};
|
|
42
286
|
Gs2RestSession.prototype.connect = function () {
|
|
43
287
|
var _this = this;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
.replace('{region}', this.region)
|
|
48
|
-
+ '/projectToken/login';
|
|
288
|
+
// ★プロジェクトトークンのログインも Steady 配下(<steady>/identifier)へ向ける
|
|
289
|
+
// ―― 放置すると Steady のアプリの identifier だけ共有クラウドへ行く。
|
|
290
|
+
var url = this.endpointHost('identifier') + '/projectToken/login';
|
|
49
291
|
if (this.credential instanceof BasicGs2Credential) {
|
|
50
292
|
var data = {
|
|
51
293
|
client_id: this.credential.clientId,
|
|
52
294
|
client_secret: this.credential.clientSecret,
|
|
53
295
|
};
|
|
54
|
-
return
|
|
296
|
+
return postWithSteadyResilience(url, data, this.steadyEndpoint, this.steadyConnectTimeoutMs)
|
|
55
297
|
.then(function (response) {
|
|
56
298
|
var result = new LoginResult(response.data);
|
|
57
299
|
_this.projectToken = result.accessToken;
|
|
58
300
|
_this.expiresAt = new Date().getTime() + result.expiresIn * 1000;
|
|
59
301
|
return result;
|
|
60
302
|
}).catch(function (error) {
|
|
303
|
+
// ★応答が無い失敗(接続段階の失敗・切断)では error.response が無いので、
|
|
304
|
+
// 元の誤りをそのまま投げる(従来はここで TypeError になっていた)。
|
|
305
|
+
if ((error === null || error === void 0 ? void 0 : error.response) == null) {
|
|
306
|
+
throw error;
|
|
307
|
+
}
|
|
61
308
|
throw JSON.parse(error.response.data.message);
|
|
62
309
|
});
|
|
63
310
|
}
|
|
@@ -71,10 +318,65 @@ var Gs2RestSession = /** @class */ (function () {
|
|
|
71
318
|
return Gs2RestSession;
|
|
72
319
|
}());
|
|
73
320
|
exports.Gs2RestSession = Gs2RestSession;
|
|
321
|
+
// ---------------------------------------------------------------- WebSocket が切れたときの誤り
|
|
322
|
+
//
|
|
323
|
+
// ★サーバーは応答を返す前に接続を閉じることがある
|
|
324
|
+
// (gateway の setUserId を force=true で呼ぶと呼び手自身の接続が切られる/ノードの停止/
|
|
325
|
+
// ネットワーク断)。そのとき待ち中の要求を決着させないと、呼び手は永久に await したままになる。
|
|
326
|
+
// 切れたら待ち中の要求すべてをこの誤りで落とし、繋ぎ直すまで以後の send も即座にこの誤りで落とす。
|
|
327
|
+
var ConnectionBrokenError = /** @class */ (function (_super) {
|
|
328
|
+
tslib_1.__extends(ConnectionBrokenError, _super);
|
|
329
|
+
function ConnectionBrokenError(detail) {
|
|
330
|
+
var _this = _super.call(this, detail == null ? 'connection broken' : 'connection broken (' + detail + ')') || this;
|
|
331
|
+
_this.name = 'ConnectionBrokenError';
|
|
332
|
+
// ★target: es5 では Error を継承すると prototype が失われ instanceof が偽になるので繋ぎ直す。
|
|
333
|
+
Object.setPrototypeOf(_this, ConnectionBrokenError.prototype);
|
|
334
|
+
return _this;
|
|
335
|
+
}
|
|
336
|
+
return ConnectionBrokenError;
|
|
337
|
+
}(Error));
|
|
338
|
+
exports.ConnectionBrokenError = ConnectionBrokenError;
|
|
339
|
+
/** readyState(Node の `ws` もブラウザの WebSocket も同じ値) */
|
|
340
|
+
var WS_OPEN = 1;
|
|
341
|
+
var WS_CLOSED = 3;
|
|
342
|
+
/** 閉じる挨拶を送る(既に閉じている接続でも安全。例外は握る) */
|
|
343
|
+
function closeQuietly(client) {
|
|
344
|
+
try {
|
|
345
|
+
if (client != null && client.readyState !== WS_CLOSED) {
|
|
346
|
+
client.close();
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
catch (e) {
|
|
350
|
+
// 既に閉じている / 閉じ途中 ―― 何もしない。
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* 接続を叩き落とす(★相手がもう居ない接続に close() を送ると、`ws` は閉じる挨拶の返事を
|
|
355
|
+
* 30 秒待つタイマーを置くので、socket もタイマーも残さないようにこちらを使う)。
|
|
356
|
+
* terminate を持たないブラウザの WebSocket では close() に落とす。
|
|
357
|
+
*/
|
|
358
|
+
function terminateQuietly(client) {
|
|
359
|
+
try {
|
|
360
|
+
if (client != null && typeof client.terminate === 'function') {
|
|
361
|
+
client.terminate();
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
catch (e) {
|
|
366
|
+
// 何もしない。
|
|
367
|
+
}
|
|
368
|
+
closeQuietly(client);
|
|
369
|
+
}
|
|
74
370
|
var Gs2WebSocketSession = /** @class */ (function () {
|
|
75
|
-
function Gs2WebSocketSession(credential, region) {
|
|
371
|
+
function Gs2WebSocketSession(credential, region, options) {
|
|
372
|
+
var _a;
|
|
76
373
|
this.client = null;
|
|
77
|
-
|
|
374
|
+
/**
|
|
375
|
+
* 応答待ちの要求(requestId → Promise の決着口)。
|
|
376
|
+
* ★応答が来たもの・接続が切れたものは必ず取り除く。以前は応答の無い要求が残り続け、
|
|
377
|
+
* 呼び手は「応答も誤りも来ない」まま待っていた(送信の成否も見ていなかった)。
|
|
378
|
+
*/
|
|
379
|
+
this.pendingRequests = {};
|
|
78
380
|
this.onOpenHandlers = [];
|
|
79
381
|
this.onErrorHandlers = [];
|
|
80
382
|
this.onCloseHandlers = [];
|
|
@@ -83,25 +385,55 @@ var Gs2WebSocketSession = /** @class */ (function () {
|
|
|
83
385
|
this.region = region;
|
|
84
386
|
this.projectToken = null;
|
|
85
387
|
this.expiresAt = null;
|
|
388
|
+
this.steadyEndpoint = normalizeSteadyEndpoint(options === null || options === void 0 ? void 0 : options.steadyEndpoint);
|
|
389
|
+
this.steadyConnectTimeoutMs = (_a = options === null || options === void 0 ? void 0 : options.steadyConnectTimeoutMs) !== null && _a !== void 0 ? _a : exports.STEADY_CONNECT_TIMEOUT_MS;
|
|
86
390
|
}
|
|
391
|
+
/** 接続先。steadyEndpoint > 共有クラウドの `Gs2Constant.WS_ENDPOINT_HOST` */
|
|
392
|
+
Gs2WebSocketSession.prototype.webSocketUrl = function () {
|
|
393
|
+
var url = steadyWebSocketUrl(this.steadyEndpoint);
|
|
394
|
+
if (url !== '') {
|
|
395
|
+
return url;
|
|
396
|
+
}
|
|
397
|
+
return exports.Gs2Constant.WS_ENDPOINT_HOST.replace('{region}', this.region);
|
|
398
|
+
};
|
|
399
|
+
/**
|
|
400
|
+
* Node の `ws` に渡す接続オプション。Steady のときだけ handshake に上限を置く。
|
|
401
|
+
* ★ブラウザの WebSocket は handshake の上限を持てない(オプションが無い)ので、
|
|
402
|
+
* ブラウザでは上限が効かない。共有クラウドは従来どおりオプション無し(undefined)。
|
|
403
|
+
*/
|
|
404
|
+
Gs2WebSocketSession.prototype.webSocketOptions = function () {
|
|
405
|
+
if (normalizeSteadyEndpoint(this.steadyEndpoint) === '') {
|
|
406
|
+
return undefined;
|
|
407
|
+
}
|
|
408
|
+
return { handshakeTimeout: this.steadyConnectTimeoutMs };
|
|
409
|
+
};
|
|
410
|
+
/** ログイン(identifier)の REST 接続先。steady があれば `<steady>/identifier`、無ければ従来 */
|
|
411
|
+
Gs2WebSocketSession.prototype.endpointHost = function (service) {
|
|
412
|
+
var template = steadyRestTemplate(this.steadyEndpoint) || exports.Gs2Constant.ENDPOINT_HOST;
|
|
413
|
+
return template
|
|
414
|
+
.replace('{service}', service)
|
|
415
|
+
.replace('{region}', this.region);
|
|
416
|
+
};
|
|
87
417
|
Gs2WebSocketSession.prototype.connect = function () {
|
|
88
418
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
89
|
-
var
|
|
419
|
+
var url, data, response, result, wsUrl, client;
|
|
90
420
|
var _this = this;
|
|
91
421
|
return tslib_1.__generator(this, function (_a) {
|
|
92
422
|
switch (_a.label) {
|
|
93
423
|
case 0:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
424
|
+
// ★繋ぎ直す前に古い接続を片付ける(そこに残した要求が決着しないまま忘れられないように)。
|
|
425
|
+
// ログインより前に済ませる ―― dropConnection は projectToken も捨てるので、
|
|
426
|
+
// この後で取り直したトークンを消させない。
|
|
427
|
+
if (this.client != null) {
|
|
428
|
+
this.dropConnection(this.client, 'reconnect');
|
|
429
|
+
}
|
|
430
|
+
url = this.endpointHost('identifier') + '/projectToken/login';
|
|
99
431
|
if (!(this.credential instanceof BasicGs2Credential)) return [3 /*break*/, 2];
|
|
100
432
|
data = {
|
|
101
433
|
client_id: this.credential.clientId,
|
|
102
434
|
client_secret: this.credential.clientSecret,
|
|
103
435
|
};
|
|
104
|
-
return [4 /*yield*/,
|
|
436
|
+
return [4 /*yield*/, postWithSteadyResilience(url, data, this.steadyEndpoint, this.steadyConnectTimeoutMs)];
|
|
105
437
|
case 1:
|
|
106
438
|
response = _a.sent();
|
|
107
439
|
result = new LoginResult(response.data);
|
|
@@ -114,63 +446,115 @@ var Gs2WebSocketSession = /** @class */ (function () {
|
|
|
114
446
|
}
|
|
115
447
|
_a.label = 3;
|
|
116
448
|
case 3:
|
|
449
|
+
wsUrl = this.webSocketUrl();
|
|
117
450
|
if (typeof window === 'undefined') {
|
|
118
|
-
|
|
451
|
+
client = new NodeWebSocket(wsUrl, this.webSocketOptions());
|
|
119
452
|
}
|
|
120
453
|
else {
|
|
121
|
-
|
|
454
|
+
client = new WebSocket(wsUrl);
|
|
122
455
|
}
|
|
123
|
-
this.client
|
|
456
|
+
this.client = client;
|
|
457
|
+
client.onopen = function (event) {
|
|
124
458
|
for (var i = 0; i < _this.onOpenHandlers.length; i++) {
|
|
125
459
|
_this.onOpenHandlers[i]();
|
|
126
460
|
}
|
|
127
461
|
};
|
|
128
|
-
|
|
462
|
+
client.onmessage = function (message) {
|
|
129
463
|
var payload = JSON.parse(message.data);
|
|
130
464
|
if (payload.type == 'notification') {
|
|
131
465
|
for (var i = 0; i < _this.onNotificationHandlers.length; i++) {
|
|
132
466
|
_this.onNotificationHandlers[i](payload.body);
|
|
133
467
|
}
|
|
468
|
+
return;
|
|
134
469
|
}
|
|
135
|
-
|
|
136
|
-
|
|
470
|
+
var pending = _this.takePending(payload.requestId);
|
|
471
|
+
// ★待ち行列に無い requestId(既に決着した要求への応答など)は捨てる。
|
|
472
|
+
if (pending != null) {
|
|
473
|
+
pending.resolve(payload);
|
|
137
474
|
}
|
|
138
475
|
};
|
|
139
|
-
|
|
476
|
+
client.onerror = function (error) {
|
|
477
|
+
// ★close が来ないまま error だけ来ることがある(TCP が黙って切れた・handshake が失敗した)。
|
|
478
|
+
// ここでも待ち中の要求を決着させる(dropConnection は同じ接続に何度呼んでも無害)。
|
|
479
|
+
_this.dropConnection(client, 'error');
|
|
140
480
|
for (var i = 0; i < _this.onErrorHandlers.length; i++) {
|
|
141
481
|
_this.onErrorHandlers[i](error);
|
|
142
482
|
}
|
|
143
483
|
};
|
|
144
|
-
|
|
484
|
+
client.onclose = function () {
|
|
485
|
+
// ★応答を返す前にサーバーが閉じても、待ち中の要求は必ず ConnectionBrokenError で決着させる。
|
|
486
|
+
_this.dropConnection(client, 'closed by peer');
|
|
145
487
|
for (var i = 0; i < _this.onCloseHandlers.length; i++) {
|
|
146
488
|
_this.onCloseHandlers[i]();
|
|
147
489
|
}
|
|
148
490
|
};
|
|
149
|
-
|
|
150
|
-
return [4 /*yield*/, (0, async_wait_until_1.default)(function () { return _this.client
|
|
491
|
+
// 開くか閉じるまで待つ(this.client が差し替わった・捨てられた場合も抜ける)。
|
|
492
|
+
return [4 /*yield*/, (0, async_wait_until_1.default)(function () { return _this.client !== client || client.readyState == WS_CLOSED || client.readyState == WS_OPEN; })];
|
|
151
493
|
case 4:
|
|
494
|
+
// 開くか閉じるまで待つ(this.client が差し替わった・捨てられた場合も抜ける)。
|
|
152
495
|
_a.sent();
|
|
153
|
-
return [
|
|
154
|
-
case 5: return [4 /*yield*/, (0, async_wait_until_1.default)(function () { return _this.client == null || _this.client.readyState == WebSocket.CLOSED || _this.client.readyState == WebSocket.OPEN; })];
|
|
155
|
-
case 6:
|
|
156
|
-
_a.sent();
|
|
157
|
-
_a.label = 7;
|
|
158
|
-
case 7: return [2 /*return*/];
|
|
496
|
+
return [2 /*return*/];
|
|
159
497
|
}
|
|
160
498
|
});
|
|
161
499
|
});
|
|
162
500
|
};
|
|
501
|
+
/** requestId の要求を待ち行列から外して返す(無ければ null) */
|
|
502
|
+
Gs2WebSocketSession.prototype.takePending = function (requestId) {
|
|
503
|
+
if (requestId == null) {
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
var pending = this.pendingRequests[requestId];
|
|
507
|
+
if (pending == null) {
|
|
508
|
+
return null;
|
|
509
|
+
}
|
|
510
|
+
delete this.pendingRequests[requestId];
|
|
511
|
+
return pending;
|
|
512
|
+
};
|
|
513
|
+
/** 待ち中の要求すべてを ConnectionBrokenError で決着させ、待ち行列を空にする */
|
|
514
|
+
Gs2WebSocketSession.prototype.failPending = function (detail) {
|
|
515
|
+
var pendingRequests = this.pendingRequests;
|
|
516
|
+
this.pendingRequests = {};
|
|
517
|
+
var error = new ConnectionBrokenError(detail);
|
|
518
|
+
// ★先に待ち行列を空にしてから落とす(reject の先で send が呼ばれても混ざらない)。
|
|
519
|
+
Object.keys(pendingRequests).forEach(function (requestId) {
|
|
520
|
+
pendingRequests[requestId].reject(error);
|
|
521
|
+
});
|
|
522
|
+
};
|
|
523
|
+
/**
|
|
524
|
+
* 切れた接続を捨て、待ち中の要求すべてを ConnectionBrokenError で決着させる。
|
|
525
|
+
* ★既に別の接続へ差し替わっていたら(disconnect → connect の後の古い接続)何もしない。
|
|
526
|
+
* ★同じ接続に二度呼ばれても 2 回目は待ち行列が空なので無害(close と error の両方から来る)。
|
|
527
|
+
*/
|
|
528
|
+
Gs2WebSocketSession.prototype.dropConnection = function (client, detail) {
|
|
529
|
+
if (this.client !== client) {
|
|
530
|
+
terminateQuietly(client);
|
|
531
|
+
return;
|
|
532
|
+
}
|
|
533
|
+
this.client = null;
|
|
534
|
+
this.projectToken = null;
|
|
535
|
+
this.expiresAt = null;
|
|
536
|
+
this.failPending(detail);
|
|
537
|
+
// ★相手はもう居ないので閉じる挨拶はしない(socket もタイマーも残さない)。
|
|
538
|
+
terminateQuietly(client);
|
|
539
|
+
};
|
|
163
540
|
Gs2WebSocketSession.prototype.send = function (service, component, func, payload) {
|
|
164
|
-
var _a;
|
|
165
541
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
166
|
-
var requestId, result;
|
|
542
|
+
var client, requestId, body, result;
|
|
167
543
|
var _this = this;
|
|
168
|
-
return tslib_1.__generator(this, function (
|
|
169
|
-
switch (
|
|
544
|
+
return tslib_1.__generator(this, function (_a) {
|
|
545
|
+
switch (_a.label) {
|
|
170
546
|
case 0:
|
|
547
|
+
client = this.client;
|
|
548
|
+
// ★接続が無い/閉じかけ・閉じた接続への送信は、待たずにその場で落とす
|
|
549
|
+
// (以前は送ったつもりになって応答を待ち続けていた)。
|
|
550
|
+
if (client == null) {
|
|
551
|
+
throw new ConnectionBrokenError('not connected');
|
|
552
|
+
}
|
|
553
|
+
if (client.readyState !== WS_OPEN) {
|
|
554
|
+
throw new ConnectionBrokenError('readyState=' + client.readyState);
|
|
555
|
+
}
|
|
171
556
|
requestId = (0, uuid_1.v4)();
|
|
172
|
-
|
|
173
|
-
(_a = this.client) === null || _a === void 0 ? void 0 : _a.send(JSON.stringify(Object.assign({}, payload, {
|
|
557
|
+
body = JSON.stringify(Object.assign({}, payload, {
|
|
174
558
|
xGs2ClientId: this.credential.clientId,
|
|
175
559
|
xGs2ProjectToken: this.projectToken,
|
|
176
560
|
x_gs2: {
|
|
@@ -180,12 +564,32 @@ var Gs2WebSocketSession = /** @class */ (function () {
|
|
|
180
564
|
contentType: "application/json",
|
|
181
565
|
requestId: requestId,
|
|
182
566
|
},
|
|
183
|
-
}))
|
|
184
|
-
return [4 /*yield*/,
|
|
567
|
+
}));
|
|
568
|
+
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
569
|
+
// ★送信の前に待ち行列へ載せる(応答が先に届いても取り落とさない)。
|
|
570
|
+
_this.pendingRequests[requestId] = { resolve: resolve, reject: reject };
|
|
571
|
+
try {
|
|
572
|
+
// ★Node の `ws` は第 2 引数に書き込みの結果を受ける口を取る(ブラウザの WebSocket は
|
|
573
|
+
// 余分な引数を無視する)。送れなかった要求は届いていないので、その場で落とす。
|
|
574
|
+
client.send(body, function (error) {
|
|
575
|
+
if (error == null) {
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
var pending = _this.takePending(requestId);
|
|
579
|
+
if (pending != null) {
|
|
580
|
+
pending.reject(new ConnectionBrokenError(error.message));
|
|
581
|
+
}
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
catch (error) {
|
|
585
|
+
var pending_1 = _this.takePending(requestId);
|
|
586
|
+
if (pending_1 != null) {
|
|
587
|
+
pending_1.reject(error);
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
})];
|
|
185
591
|
case 1:
|
|
186
|
-
|
|
187
|
-
result = this.inflightRequest[requestId];
|
|
188
|
-
delete this.inflightRequest[requestId];
|
|
592
|
+
result = _a.sent();
|
|
189
593
|
if (result.status != 200) {
|
|
190
594
|
throw result.body;
|
|
191
595
|
}
|
|
@@ -206,29 +610,38 @@ var Gs2WebSocketSession = /** @class */ (function () {
|
|
|
206
610
|
Gs2WebSocketSession.prototype.onNotification = function (func) {
|
|
207
611
|
this.onNotificationHandlers.push(func);
|
|
208
612
|
};
|
|
613
|
+
/** 接続を閉じる。★待ち中の要求には ConnectionBrokenError が返る(close を待たずに決着させる) */
|
|
209
614
|
Gs2WebSocketSession.prototype.disconnect = function () {
|
|
210
615
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
211
|
-
var
|
|
616
|
+
var client, e_1;
|
|
212
617
|
return tslib_1.__generator(this, function (_a) {
|
|
213
618
|
switch (_a.label) {
|
|
214
619
|
case 0:
|
|
215
|
-
|
|
216
|
-
this.client
|
|
217
|
-
|
|
218
|
-
|
|
620
|
+
client = this.client;
|
|
621
|
+
this.client = null;
|
|
622
|
+
this.projectToken = null;
|
|
623
|
+
this.expiresAt = null;
|
|
624
|
+
// ★close イベントを待たない(来ないこともある)。
|
|
625
|
+
this.failPending('disconnected');
|
|
626
|
+
if (!(client != null)) return [3 /*break*/, 5];
|
|
627
|
+
closeQuietly(client);
|
|
628
|
+
_a.label = 1;
|
|
219
629
|
case 1:
|
|
630
|
+
_a.trys.push([1, 3, , 4]);
|
|
631
|
+
return [4 /*yield*/, (0, async_wait_until_1.default)(function () { return client.readyState == WS_CLOSED; }, { timeout: 1000 })];
|
|
632
|
+
case 2:
|
|
220
633
|
_a.sent();
|
|
221
634
|
return [3 /*break*/, 4];
|
|
222
|
-
case 2: return [4 /*yield*/, (0, async_wait_until_1.default)(function () { return _this.client == null || _this.client.readyState == WebSocket.CLOSED; })];
|
|
223
635
|
case 3:
|
|
224
|
-
_a.sent();
|
|
225
|
-
|
|
636
|
+
e_1 = _a.sent();
|
|
637
|
+
return [3 /*break*/, 4];
|
|
226
638
|
case 4:
|
|
227
|
-
|
|
639
|
+
if (client.readyState !== WS_CLOSED) {
|
|
640
|
+
// ★閉じ切らないまま抜けると socket とタイマーが残るので叩き落とす。
|
|
641
|
+
terminateQuietly(client);
|
|
642
|
+
}
|
|
228
643
|
_a.label = 5;
|
|
229
|
-
case 5:
|
|
230
|
-
this.projectToken = null;
|
|
231
|
-
return [2 /*return*/];
|
|
644
|
+
case 5: return [2 /*return*/];
|
|
232
645
|
}
|
|
233
646
|
});
|
|
234
647
|
});
|
package/core/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;AAIH,wDAA0B;AAC1B,8EAAyC;AACzC,6BAAkC;AAClC,IAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpC;IAKE,4BACI,QAAgB,EAChB,YAAoB;QAEtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IACH,yBAAC;AAAD,CAAC,AAZD,IAYC;AAZY,gDAAkB;AAsB/B;IASE,wBAAY,UAA0B,EAAE,MAAc,EAAE,OAA+B;;QACrF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,mCAAI,IAAI,CAAC;QACxD,IAAI,CAAC,kBAAkB,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,kBAAkB,mCAAI,IAAI,CAAC;IAChE,CAAC;IAEM,gCAAO,GAAd;QAAA,iBA6BC;QA3BC,IAAM,OAAO,GAAG,YAAY,CAAC;QAC7B,IAAM,GAAG,GAAG,mBAAW,CAAC,aAAa;aAC5B,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;aAC7B,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;cACnC,qBAAqB,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,YAAY,kBAAkB,EAAE;YACjD,IAAM,IAAI,GAAG;gBACX,SAAS,EAAG,IAAI,CAAC,UAAiC,CAAC,QAAQ;gBAC3D,aAAa,EAAG,IAAI,CAAC,UAAiC,CAAC,YAAY;aACpE,CAAC;YAEF,OAAO,eAAK,CAAC,IAAI,CACb,GAAG,EACH,IAAI,CACP;iBACI,IAAI,CAAC,UAAC,QAAa;gBAClB,IAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,KAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;gBACvC,KAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC,KAAK,CAAC,UAAC,KAAU;gBAClB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;SACR;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,yBAAyB,EAAE;YAC/D,IAAI,CAAC,YAAY,GAAI,IAAI,CAAC,UAAwC,CAAC,YAAY,CAAC;SACjF;IACH,CAAC;IAEM,mCAAU,GAAjB;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IACH,qBAAC;AAAD,CAAC,AApDD,IAoDC;AApDY,wCAAc;AAuD3B;IAgBE,6BAAY,UAA0B,EAAE,MAAc;QAb9C,WAAM,GAAqB,IAAI,CAAC;QAKhC,oBAAe,GAAQ,EAAE,CAAC;QAE1B,mBAAc,GAAe,EAAE,CAAC;QAChC,oBAAe,GAAe,EAAE,CAAC;QACjC,oBAAe,GAAe,EAAE,CAAC;QAEjC,2BAAsB,GAAe,EAAE,CAAC;QAG9C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAEY,qCAAO,GAApB;;;;;;;wBAEQ,OAAO,GAAG,YAAY,CAAC;wBACvB,GAAG,GAAG,mBAAW,CAAC,aAAa;6BAC5B,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;6BAC7B,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;8BACnC,qBAAqB,CAAC;6BAExB,CAAA,IAAI,CAAC,UAAU,YAAY,kBAAkB,CAAA,EAA7C,wBAA6C;wBACzC,IAAI,GAAG;4BACX,SAAS,EAAG,IAAI,CAAC,UAAiC,CAAC,QAAQ;4BAC3D,aAAa,EAAG,IAAI,CAAC,UAAiC,CAAC,YAAY;yBACpE,CAAC;wBAEe,qBAAM,eAAK,CAAC,IAAI,CAC7B,GAAG,EACH,IAAI,CACP,EAAA;;wBAHK,QAAQ,GAAG,SAGhB;wBACK,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC9C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;wBACvC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;;;wBAC3D,IAAI,IAAI,CAAC,UAAU,YAAY,yBAAyB,EAAE;4BAC/D,IAAI,CAAC,YAAY,GAAI,IAAI,CAAC,UAAwC,CAAC,YAAY,CAAC;yBACjF;;;wBAED,IAAI,OAAO,MAAM,KAAK,WAAW,EAAC;4BAChC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,mBAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;yBAChG;6BAAM;4BACL,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,mBAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;yBAC5F;wBACD,IAAI,CAAC,MAAO,CAAC,MAAM,GAAG,UAAC,KAAY;4BACjC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,KAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCAC/C,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;6BAC1B;wBACH,CAAC,CAAC;wBACF,IAAI,CAAC,MAAO,CAAC,SAAS,GAAG,UAAC,OAAqB;4BAC7C,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BACzC,IAAI,OAAO,CAAC,IAAI,IAAI,cAAc,EAAE;gCAClC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,KAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oCACvD,KAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iCAC9C;6BACF;iCAAM;gCACL,KAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;6BACnD;wBACH,CAAC,CAAC;wBACF,IAAI,CAAC,MAAO,CAAC,OAAO,GAAG,UAAC,KAAY;4BAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACpD,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;6BAChC;wBACH,CAAC,CAAC;wBACF,IAAI,CAAC,MAAO,CAAC,OAAO,GAAG;4BACrB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCAChD,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;6BAC3B;wBACH,CAAC,CAAC;6BACE,CAAA,OAAO,MAAM,KAAK,WAAW,CAAA,EAA7B,wBAA6B;wBAC/B,qBAAM,IAAA,0BAAS,EAAC,cAAM,OAAA,KAAI,CAAC,MAAM,IAAI,IAAI,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC,IAAI,EAArH,CAAqH,CAAC,EAAA;;wBAA5I,SAA4I,CAAC;;4BAE7I,qBAAM,IAAA,0BAAS,EAAC,cAAM,OAAA,KAAI,CAAC,MAAM,IAAI,IAAI,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,EAA7G,CAA6G,CAAC,EAAA;;wBAApI,SAAoI,CAAC;;;;;;KAExI;IAEY,kCAAI,GAAjB,UACI,OAAe,EACf,SAAiB,EACjB,IAAY,EACZ,OAAY;;;;;;;;wBAGR,SAAS,GAAG,IAAA,SAAI,GAAE,CAAC;wBAEzB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;wBACvC,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE;4BAC1D,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;4BACtC,gBAAgB,EAAE,IAAI,CAAC,YAAY;4BACnC,KAAK,EAAE;gCACL,OAAO,EAAE,OAAO;gCAChB,SAAS,EAAE,SAAS;gCACpB,QAAQ,EAAE,IAAI;gCACd,WAAW,EAAE,kBAAkB;gCAC/B,SAAS,EAAG,SAAS;6BACtB;yBACF,CAAC,CAAC,CAAC,CAAC;wBAEL,qBAAM,IAAA,0BAAS,EAAC,cAAM,OAAA,KAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,IAAI,EAAvC,CAAuC,CAAC,EAAA;;wBAA9D,SAA8D,CAAC;wBAEzD,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;wBAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;wBACvC,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;4BACxB,MAAM,MAAM,CAAC,IAAI,CAAC;yBACnB;wBACD,sBAAO,MAAM,CAAC,IAAI,EAAC;;;;KACpB;IAEM,oCAAM,GAAb,UAAc,IAAwB;QACpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,qCAAO,GAAd,UAAe,IAAwB;QACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,qCAAO,GAAd,UAAe,IAA6B;QAC1C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,4CAAc,GAArB,UAAsB,IAIb;QACP,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEY,wCAAU,GAAvB;;;;;;6BACM,CAAA,IAAI,CAAC,MAAM,IAAI,IAAI,CAAA,EAAnB,wBAAmB;wBACrB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;6BAChB,CAAA,OAAO,MAAM,KAAK,WAAW,CAAA,EAA7B,wBAA6B;wBAC/B,qBAAM,IAAA,0BAAS,EAAC,cAAM,OAAA,KAAI,CAAC,MAAM,IAAI,IAAI,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC,MAAM,EAArE,CAAqE,CAAC,EAAA;;wBAA5F,SAA4F,CAAC;;4BAE7F,qBAAM,IAAA,0BAAS,EAAC,cAAM,OAAA,KAAI,CAAC,MAAM,IAAI,IAAI,IAAI,KAAI,CAAC,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC,MAAM,EAAjE,CAAiE,CAAC,EAAA;;wBAAxF,SAAwF,CAAC;;;wBAE3F,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;;;wBAErB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;;;;;KAC1B;IACH,0BAAC;AAAD,CAAC,AArJD,IAqJC;AArJY,kDAAmB;AAuJhC;IAME,qBACI,IAA6B;QAE/B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;SAClC;IACH,CAAC;IACH,kBAAC;AAAD,CAAC,AAfD,IAeC;AAED;IAKE,sBACI,IAA4B;QAJzB,UAAK,GAAkB,IAAI,CAAC;QAC5B,cAAS,GAAkB,IAAI,CAAC;QAKrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAClC,CAAC;IACH,mBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,oCAAY;AAazB;IAKE,mCACI,QAAgB,EAChB,YAAoB;QAEtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IACH,gCAAC;AAAD,CAAC,AAZD,IAYC;AAZY,8DAAyB;AAczB,QAAA,WAAW,GAAG;IACzB,aAAa,EAAE,2CAA2C;IAC1D,gBAAgB,EAAE,0CAA0C;CAC7D,CAAC;AAEW,QAAA,MAAM,GAAG;IACpB,cAAc,EAAE,gBAAgB;IAChC,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,gBAAgB;CACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"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"}
|