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.
@@ -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
- var data = body ? this.compressBody(body, headers) : undefined;
63
- var axiosMethod = method === 'POST' ? axios_1.default.post : axios_1.default.put;
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;;;AAGH,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;IAES,2BAAO,GAAjB,UACE,MAAyC,EACzC,GAAW,EACX,OAA6B,EAC7B,MAA6B,EAC7B,IAA2B;QAE3B,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,EAAE;YAC3C,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,IAAM,WAAW,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC;YAChE,OAAO,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;iBAC5B,IAAI,CAAC,UAAC,QAAa,IAAK,OAAA,QAAQ,CAAC,IAAS,EAAlB,CAAkB,CAAC;iBAC3C,KAAK,CAAC,UAAC,KAAU;gBAChB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;SACN;aAAM;YACL,IAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjE,IAAM,WAAW,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC;YAC/D,OAAO,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;iBAClC,IAAI,CAAC,UAAC,QAAa,IAAK,OAAA,QAAQ,CAAC,IAAS,EAAlB,CAAkB,CAAC;iBAC3C,KAAK,CAAC,UAAC,KAAU;gBAChB,IAAI,KAAK,CAAC,QAAQ,EAAE;oBAClB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC/C;qBAAM;oBACL,MAAM,EAAE,CAAC;iBACV;YACH,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IACH,gBAAC;AAAD,CAAC,AArED,IAqEC"}
1
+ {"version":3,"file":"AbstractGs2RestClient.js","sourceRoot":"","sources":["../../src/core/AbstractGs2RestClient.ts"],"names":[],"mappings":"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"}
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;AAQtD,4BARK,+BAAiB,CAQL;AAPnB,iCAAqH;AAQnH,+FARO,sBAAc,OAQP;AACd,oGATuB,2BAAmB,OASvB;AACnB,mGAV4C,0BAAkB,OAU5C;AAClB,0GAXgE,iCAAyB,OAWhE;AACzB,uFAZ2F,cAAM,OAY3F;AAXR,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,sFAAwD;AAYtD,8BAZK,6BAAmB,CAYL;AAXrB,oFAAsD;AAYpD,6BAZK,4BAAkB,CAYL;AAXpB,kFAAoD;AAYlD,4BAZK,2BAAiB,CAYL"}
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
- private inflightRequest;
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
- var service = 'identifier';
45
- var url = exports.Gs2Constant.ENDPOINT_HOST
46
- .replace('{service}', service)
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 axios_1.default.post(url, data)
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
- this.inflightRequest = {};
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 service, url, data, response, result;
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
- service = 'identifier';
95
- url = exports.Gs2Constant.ENDPOINT_HOST
96
- .replace('{service}', service)
97
- .replace('{region}', this.region)
98
- + '/projectToken/login';
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*/, axios_1.default.post(url, data)];
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
- this.client = new NodeWebSocket(exports.Gs2Constant.WS_ENDPOINT_HOST.replace('{region}', this.region));
451
+ client = new NodeWebSocket(wsUrl, this.webSocketOptions());
119
452
  }
120
453
  else {
121
- this.client = new WebSocket(exports.Gs2Constant.WS_ENDPOINT_HOST.replace('{region}', this.region));
454
+ client = new WebSocket(wsUrl);
122
455
  }
123
- this.client.onopen = function (event) {
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
- this.client.onmessage = function (message) {
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
- else {
136
- _this.inflightRequest[payload.requestId] = payload;
470
+ var pending = _this.takePending(payload.requestId);
471
+ // ★待ち行列に無い requestId(既に決着した要求への応答など)は捨てる。
472
+ if (pending != null) {
473
+ pending.resolve(payload);
137
474
  }
138
475
  };
139
- this.client.onerror = function (error) {
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
- this.client.onclose = function () {
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
- if (!(typeof window === 'undefined')) return [3 /*break*/, 5];
150
- return [4 /*yield*/, (0, async_wait_until_1.default)(function () { return _this.client == null || _this.client.readyState == NodeWebSocket.CLOSED || _this.client.readyState == NodeWebSocket.OPEN; })];
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 [3 /*break*/, 7];
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 (_b) {
169
- switch (_b.label) {
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
- this.inflightRequest[requestId] = null;
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*/, (0, async_wait_until_1.default)(function () { return _this.inflightRequest[requestId] != null; })];
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
- _b.sent();
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 _this = this;
616
+ var client, e_1;
212
617
  return tslib_1.__generator(this, function (_a) {
213
618
  switch (_a.label) {
214
619
  case 0:
215
- if (!(this.client != null)) return [3 /*break*/, 5];
216
- this.client.close();
217
- if (!(typeof window === 'undefined')) return [3 /*break*/, 2];
218
- return [4 /*yield*/, (0, async_wait_until_1.default)(function () { return _this.client == null || _this.client.readyState == NodeWebSocket.CLOSED; })];
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
- _a.label = 4;
636
+ e_1 = _a.sent();
637
+ return [3 /*break*/, 4];
226
638
  case 4:
227
- this.client = null;
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":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gs2",
3
- "version": "1.4.126",
3
+ "version": "1.4.128",
4
4
  "scripts": {
5
5
  "build": "tsc",
6
6
  "prepublishOnly": "npm run build"