@lakutata/nats 2.3.0 → 3.0.0-beta.1
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/LICENSE +23 -0
- package/README.md +288 -25
- package/dist/cjs/codecs/JSONCodec.d.ts +32 -0
- package/dist/cjs/codecs/JSONCodec.js +44 -0
- package/dist/cjs/codecs/MessagePackCodec.d.ts +22 -0
- package/dist/cjs/codecs/MessagePackCodec.js +35 -0
- package/dist/cjs/components/NATS.d.ts +376 -0
- package/dist/cjs/components/NATS.js +772 -0
- package/dist/cjs/entrypoints/NatsServiceEntrypoint.d.ts +102 -0
- package/dist/cjs/entrypoints/NatsServiceEntrypoint.js +127 -0
- package/dist/cjs/exceptions/NatsBadRequestException.d.ts +11 -0
- package/dist/cjs/exceptions/NatsBadRequestException.js +18 -0
- package/dist/cjs/exceptions/NatsBulkException.d.ts +19 -0
- package/dist/cjs/exceptions/NatsBulkException.js +26 -0
- package/dist/cjs/exceptions/NatsForbiddenException.d.ts +11 -0
- package/dist/cjs/exceptions/NatsForbiddenException.js +18 -0
- package/dist/cjs/exceptions/NatsInternalServerException.d.ts +12 -0
- package/dist/cjs/exceptions/NatsInternalServerException.js +19 -0
- package/dist/cjs/exceptions/NatsNoRespondersAvailableException.d.ts +12 -0
- package/dist/cjs/exceptions/NatsNoRespondersAvailableException.js +19 -0
- package/dist/cjs/exceptions/NatsNotFoundException.d.ts +11 -0
- package/dist/cjs/exceptions/NatsNotFoundException.js +18 -0
- package/dist/cjs/exceptions/NatsRequestTimeoutException.d.ts +11 -0
- package/dist/cjs/exceptions/NatsRequestTimeoutException.js +18 -0
- package/dist/cjs/exports/Nats.d.ts +18 -0
- package/dist/cjs/exports/Nats.js +39 -0
- package/dist/cjs/interfaces/NatsClientOptions.d.ts +106 -0
- package/dist/{lib → cjs/lib}/ServiceEventCodec.d.ts +0 -1
- package/dist/{lib → cjs/lib}/ServiceEventCodec.js +19 -9
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/providers/ServiceProxy.d.ts +210 -0
- package/dist/cjs/providers/ServiceProxy.js +274 -0
- package/dist/cjs/types/SubscribeOptions.d.ts +33 -0
- package/dist/esm/codecs/JSONCodec.js +41 -0
- package/dist/esm/codecs/MessagePackCodec.js +32 -0
- package/dist/esm/components/NATS.js +767 -0
- package/dist/esm/entrypoints/NatsServiceEntrypoint.js +123 -0
- package/dist/esm/exceptions/NatsBadRequestException.js +14 -0
- package/dist/esm/exceptions/NatsBulkException.js +22 -0
- package/dist/esm/exceptions/NatsForbiddenException.js +14 -0
- package/dist/esm/exceptions/NatsInternalServerException.js +15 -0
- package/dist/esm/exceptions/NatsNoRespondersAvailableException.js +15 -0
- package/dist/esm/exceptions/NatsNotFoundException.js +14 -0
- package/dist/esm/exceptions/NatsRequestTimeoutException.js +14 -0
- package/dist/esm/exports/Nats.js +15 -0
- package/dist/esm/interfaces/NatsClientOptions.js +1 -0
- package/dist/esm/lib/ServiceEventCodec.js +21 -0
- package/dist/esm/providers/ServiceProxy.js +270 -0
- package/dist/esm/types/SubscribeOptions.js +1 -0
- package/dist/types/codecs/JSONCodec.d.ts +32 -0
- package/dist/types/codecs/MessagePackCodec.d.ts +22 -0
- package/dist/types/components/NATS.d.ts +376 -0
- package/dist/types/entrypoints/NatsServiceEntrypoint.d.ts +102 -0
- package/dist/types/exceptions/NatsBadRequestException.d.ts +11 -0
- package/dist/types/exceptions/NatsBulkException.d.ts +19 -0
- package/dist/types/exceptions/NatsForbiddenException.d.ts +11 -0
- package/dist/types/exceptions/NatsInternalServerException.d.ts +12 -0
- package/dist/types/exceptions/NatsNoRespondersAvailableException.d.ts +12 -0
- package/dist/types/exceptions/NatsNotFoundException.d.ts +11 -0
- package/dist/types/exceptions/NatsRequestTimeoutException.d.ts +11 -0
- package/dist/types/exports/Nats.d.ts +18 -0
- package/dist/types/interfaces/NatsClientOptions.d.ts +106 -0
- package/dist/types/lib/ServiceEventCodec.d.ts +9 -0
- package/dist/types/providers/ServiceProxy.d.ts +210 -0
- package/dist/types/types/SubscribeOptions.d.ts +33 -0
- package/package.json +42 -33
- package/CHANGELOG.md +0 -288
- package/dist/CommonExports.d.ts +0 -19
- package/dist/CommonExports.d.ts.map +0 -1
- package/dist/CommonExports.js +0 -35
- package/dist/codecs/JSONCodec.d.ts +0 -3
- package/dist/codecs/JSONCodec.d.ts.map +0 -1
- package/dist/codecs/JSONCodec.js +0 -15
- package/dist/codecs/MessagePackCodec.d.ts +0 -3
- package/dist/codecs/MessagePackCodec.d.ts.map +0 -1
- package/dist/codecs/MessagePackCodec.js +0 -16
- package/dist/components/NATS.d.ts +0 -252
- package/dist/components/NATS.d.ts.map +0 -1
- package/dist/components/NATS.js +0 -564
- package/dist/entrypoints/SetupNatsServiceEntrypoint.d.ts +0 -8
- package/dist/entrypoints/SetupNatsServiceEntrypoint.d.ts.map +0 -1
- package/dist/entrypoints/SetupNatsServiceEntrypoint.js +0 -41
- package/dist/exceptions/NatsBadRequestException.d.ts +0 -7
- package/dist/exceptions/NatsBadRequestException.d.ts.map +0 -1
- package/dist/exceptions/NatsBadRequestException.js +0 -13
- package/dist/exceptions/NatsBulkException.d.ts +0 -11
- package/dist/exceptions/NatsBulkException.d.ts.map +0 -1
- package/dist/exceptions/NatsBulkException.js +0 -17
- package/dist/exceptions/NatsForbiddenException.d.ts +0 -7
- package/dist/exceptions/NatsForbiddenException.d.ts.map +0 -1
- package/dist/exceptions/NatsForbiddenException.js +0 -13
- package/dist/exceptions/NatsInternalServerException.d.ts +0 -7
- package/dist/exceptions/NatsInternalServerException.d.ts.map +0 -1
- package/dist/exceptions/NatsInternalServerException.js +0 -13
- package/dist/exceptions/NatsNoRespondersAvailableException.d.ts +0 -7
- package/dist/exceptions/NatsNoRespondersAvailableException.d.ts.map +0 -1
- package/dist/exceptions/NatsNoRespondersAvailableException.js +0 -13
- package/dist/exceptions/NatsNotFoundException.d.ts +0 -7
- package/dist/exceptions/NatsNotFoundException.d.ts.map +0 -1
- package/dist/exceptions/NatsNotFoundException.js +0 -13
- package/dist/exceptions/NatsRequestTimeoutException.d.ts +0 -7
- package/dist/exceptions/NatsRequestTimeoutException.d.ts.map +0 -1
- package/dist/exceptions/NatsRequestTimeoutException.js +0 -13
- package/dist/exceptions/ServiceInvokeException.d.ts +0 -6
- package/dist/exceptions/ServiceInvokeException.d.ts.map +0 -1
- package/dist/exceptions/ServiceInvokeException.js +0 -11
- package/dist/interfaces/NatsClientOptions.d.ts +0 -26
- package/dist/interfaces/NatsClientOptions.d.ts.map +0 -1
- package/dist/lib/ServiceEventCodec.d.ts.map +0 -1
- package/dist/lib/ServiceResponseCodec.d.ts +0 -22
- package/dist/lib/ServiceResponseCodec.d.ts.map +0 -1
- package/dist/lib/ServiceResponseCodec.js +0 -50
- package/dist/providers/ServiceProxy.d.ts +0 -85
- package/dist/providers/ServiceProxy.d.ts.map +0 -1
- package/dist/providers/ServiceProxy.js +0 -124
- package/dist/types/SubscribeOptions.d.ts +0 -12
- package/dist/types/SubscribeOptions.d.ts.map +0 -1
- package/docs/large-payload-design.md +0 -199
- package/tsconfig.json +0 -8
- /package/dist/{interfaces → cjs/interfaces}/NatsClientOptions.js +0 -0
- /package/dist/{types → cjs/types}/SubscribeOptions.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NatsForbiddenException.d.ts","sourceRoot":"","sources":["../../src/exceptions/NatsForbiddenException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAElC,qBAAa,sBAAuB,SAAQ,SAAS;IAC1C,KAAK,EAAE,MAAM,GAAG,MAAM,CAAqB;IAC3C,OAAO,EAAE,MAAM,CAAc;IAC7B,UAAU,EAAE,MAAM,CAAM;CAClC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NatsForbiddenException = void 0;
|
|
4
|
-
const lakutata_1 = require("lakutata");
|
|
5
|
-
class NatsForbiddenException extends lakutata_1.Exception {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.errno = 'E_NATS_FORBIDDEN';
|
|
9
|
-
this.message = 'Forbidden';
|
|
10
|
-
this.statusCode = 403;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.NatsForbiddenException = NatsForbiddenException;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NatsInternalServerException.d.ts","sourceRoot":"","sources":["../../src/exceptions/NatsInternalServerException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAElC,qBAAa,2BAA4B,SAAQ,SAAS;IAC/C,KAAK,EAAE,MAAM,GAAG,MAAM,CAA2B;IACjD,OAAO,EAAE,MAAM,CAA0B;IACzC,UAAU,EAAE,MAAM,CAAM;CAClC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NatsInternalServerException = void 0;
|
|
4
|
-
const lakutata_1 = require("lakutata");
|
|
5
|
-
class NatsInternalServerException extends lakutata_1.Exception {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.errno = 'E_NATS_INTERNAL_SERVER';
|
|
9
|
-
this.message = 'Internal Server Error';
|
|
10
|
-
this.statusCode = 500;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.NatsInternalServerException = NatsInternalServerException;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NatsNoRespondersAvailableException.d.ts","sourceRoot":"","sources":["../../src/exceptions/NatsNoRespondersAvailableException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAElC,qBAAa,kCAAmC,SAAQ,SAAS;IACtD,KAAK,EAAE,MAAM,GAAG,MAAM,CAAmC;IACzD,OAAO,EAAE,MAAM,CAA4B;IAC3C,UAAU,EAAE,MAAM,CAAM;CAClC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NatsNoRespondersAvailableException = void 0;
|
|
4
|
-
const lakutata_1 = require("lakutata");
|
|
5
|
-
class NatsNoRespondersAvailableException extends lakutata_1.Exception {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.errno = 'E_NATS_NO_RESPONDERS_AVAILABLE';
|
|
9
|
-
this.message = 'No Responders Available';
|
|
10
|
-
this.statusCode = 503;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.NatsNoRespondersAvailableException = NatsNoRespondersAvailableException;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NatsNotFoundException.d.ts","sourceRoot":"","sources":["../../src/exceptions/NatsNotFoundException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAElC,qBAAa,qBAAsB,SAAQ,SAAS;IACzC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAqB;IAC3C,OAAO,EAAE,MAAM,CAAsB;IACrC,UAAU,EAAE,MAAM,CAAM;CAClC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NatsNotFoundException = void 0;
|
|
4
|
-
const lakutata_1 = require("lakutata");
|
|
5
|
-
class NatsNotFoundException extends lakutata_1.Exception {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.errno = 'E_NATS_NOT_FOUND';
|
|
9
|
-
this.message = 'Subject Not Found';
|
|
10
|
-
this.statusCode = 404;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.NatsNotFoundException = NatsNotFoundException;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NatsRequestTimeoutException.d.ts","sourceRoot":"","sources":["../../src/exceptions/NatsRequestTimeoutException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAElC,qBAAa,2BAA4B,SAAQ,SAAS;IAC/C,KAAK,EAAE,MAAM,GAAG,MAAM,CAA2B;IACjD,OAAO,EAAE,MAAM,CAAoB;IACnC,UAAU,EAAE,MAAM,CAAM;CAClC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NatsRequestTimeoutException = void 0;
|
|
4
|
-
const lakutata_1 = require("lakutata");
|
|
5
|
-
class NatsRequestTimeoutException extends lakutata_1.Exception {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.errno = 'E_NATS_REQUEST_TIMEOUT';
|
|
9
|
-
this.message = 'Request Timeout';
|
|
10
|
-
this.statusCode = 408;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.NatsRequestTimeoutException = NatsRequestTimeoutException;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceInvokeException.d.ts","sourceRoot":"","sources":["../../src/exceptions/ServiceInvokeException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAElC,qBAAa,sBAAuB,SAAQ,SAAS;IAC1C,KAAK,EAAE,MAAM,GAAG,MAAM,CAAqB;IAE3C,OAAO,CAAC,EAAC,MAAM,CAAA;CACzB"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ServiceInvokeException = void 0;
|
|
4
|
-
const lakutata_1 = require("lakutata");
|
|
5
|
-
class ServiceInvokeException extends lakutata_1.Exception {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.errno = 'E_SERVICE_INVOKE';
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
exports.ServiceInvokeException = ServiceInvokeException;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Codec } from 'nats';
|
|
2
|
-
export interface NatsClientOptions {
|
|
3
|
-
servers: string | string[];
|
|
4
|
-
codec?: Codec<unknown>;
|
|
5
|
-
timeout?: number;
|
|
6
|
-
token?: string;
|
|
7
|
-
user?: string;
|
|
8
|
-
pass?: string;
|
|
9
|
-
debug?: boolean;
|
|
10
|
-
maxPingOut?: number;
|
|
11
|
-
maxReconnectAttempts?: number;
|
|
12
|
-
name?: string;
|
|
13
|
-
noEcho?: boolean;
|
|
14
|
-
noRandomize?: boolean;
|
|
15
|
-
pingInterval?: number;
|
|
16
|
-
reconnect?: boolean;
|
|
17
|
-
/** 是否启用 bulk 大数据旁路(启动建第二条连接 + Object Store),默认 true */
|
|
18
|
-
bulk?: boolean;
|
|
19
|
-
/** bulk Object Store bucket 名,默认 lkt-bulk-${name} */
|
|
20
|
-
bulkBucket?: string;
|
|
21
|
-
/** bulk 对象 TTL(毫秒),默认 5 分钟 */
|
|
22
|
-
bulkTTL?: number;
|
|
23
|
-
/** bulk bucket 副本数,默认 1(中转数据用完即弃) */
|
|
24
|
-
bulkReplicas?: number;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=NatsClientOptions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NatsClientOptions.d.ts","sourceRoot":"","sources":["../../src/interfaces/NatsClientOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,MAAM,CAAA;AAE1B,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceEventCodec.d.ts","sourceRoot":"","sources":["../../src/lib/ServiceEventCodec.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA;CACvB;AAED,qBAAa,iBAAiB;IAC1B,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;WAO9D,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,gBAAgB;WAMrC,MAAM,CAAC,SAAS,EAAE,gBAAgB,GAAG,GAAG,EAAE;WAI1C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;CAG5E"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Exception } from 'lakutata';
|
|
2
|
-
interface ServiceResponse {
|
|
3
|
-
readonly success: boolean;
|
|
4
|
-
readonly error: Error | Exception | null;
|
|
5
|
-
readonly payload: any | null;
|
|
6
|
-
}
|
|
7
|
-
export declare class ServiceResponseCodec {
|
|
8
|
-
/**
|
|
9
|
-
* Encode service response
|
|
10
|
-
* @param data
|
|
11
|
-
* @param isError
|
|
12
|
-
*/
|
|
13
|
-
static encode(data: any, isError: boolean): ServiceResponse;
|
|
14
|
-
/**
|
|
15
|
-
* Decode service response
|
|
16
|
-
* @param response
|
|
17
|
-
* @param serviceId
|
|
18
|
-
*/
|
|
19
|
-
static decode(response: ServiceResponse, serviceId?: string): any;
|
|
20
|
-
}
|
|
21
|
-
export {};
|
|
22
|
-
//# sourceMappingURL=ServiceResponseCodec.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceResponseCodec.d.ts","sourceRoot":"","sources":["../../src/lib/ServiceResponseCodec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,UAAU,CAAA;AAGlC,UAAU,eAAe;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAA;CAC/B;AAED,qBAAa,oBAAoB;IAC7B;;;;OAIG;WACW,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe;IAYlE;;;;OAIG;WACW,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG;CAoB3E"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ServiceResponseCodec = void 0;
|
|
4
|
-
const ServiceInvokeException_1 = require("../exceptions/ServiceInvokeException");
|
|
5
|
-
class ServiceResponseCodec {
|
|
6
|
-
/**
|
|
7
|
-
* Encode service response
|
|
8
|
-
* @param data
|
|
9
|
-
* @param isError
|
|
10
|
-
*/
|
|
11
|
-
static encode(data, isError) {
|
|
12
|
-
return isError ? {
|
|
13
|
-
success: false,
|
|
14
|
-
error: data,
|
|
15
|
-
payload: null
|
|
16
|
-
} : {
|
|
17
|
-
success: true,
|
|
18
|
-
error: null,
|
|
19
|
-
payload: data
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Decode service response
|
|
24
|
-
* @param response
|
|
25
|
-
* @param serviceId
|
|
26
|
-
*/
|
|
27
|
-
static decode(response, serviceId) {
|
|
28
|
-
if (!response.success) {
|
|
29
|
-
const remoteError = response.error;
|
|
30
|
-
const serviceInvokeException = new ServiceInvokeException_1.ServiceInvokeException(remoteError?.message || 'Unknown Error');
|
|
31
|
-
if (serviceId)
|
|
32
|
-
serviceInvokeException.service = serviceId;
|
|
33
|
-
// 安全拷贝远端错误的自有属性:逐个赋值并跳过只读属性(如 NatsError 的 name),
|
|
34
|
-
// 避免 Object.assign 碰到只读属性时整体抛 TypeError。
|
|
35
|
-
if (remoteError && typeof remoteError === 'object') {
|
|
36
|
-
for (const key of Object.keys(remoteError)) {
|
|
37
|
-
try {
|
|
38
|
-
serviceInvokeException[key] = remoteError[key];
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
// 只读属性,跳过
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
throw serviceInvokeException;
|
|
46
|
-
}
|
|
47
|
-
return response.payload;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
exports.ServiceResponseCodec = ServiceResponseCodec;
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { ActionPattern, Application, Provider, ProviderOptionsBuilder } from 'lakutata';
|
|
2
|
-
import { NATS } from '../components/NATS';
|
|
3
|
-
/**
|
|
4
|
-
* Build service proxy options
|
|
5
|
-
*/
|
|
6
|
-
export type BuildServiceProxyOptions = {
|
|
7
|
-
readonly natsComponentName: string;
|
|
8
|
-
readonly serviceId: string;
|
|
9
|
-
/** 仅对 NoResponders(对侧确定没处理)自动重试的次数,默认 3;超时/业务异常不重试 */
|
|
10
|
-
readonly maxRetries?: number;
|
|
11
|
-
/** 每次重试前等待的毫秒,默认 100 */
|
|
12
|
-
readonly retryDelay?: number;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Build service proxy
|
|
16
|
-
* @param options
|
|
17
|
-
* @constructor
|
|
18
|
-
*/
|
|
19
|
-
export declare const BuildServiceProxy: ProviderOptionsBuilder<BuildServiceProxyOptions>;
|
|
20
|
-
/**
|
|
21
|
-
* Service proxy provider
|
|
22
|
-
*/
|
|
23
|
-
export declare class ServiceProxy extends Provider {
|
|
24
|
-
/**
|
|
25
|
-
* Inject application instance
|
|
26
|
-
* @protected
|
|
27
|
-
*/
|
|
28
|
-
protected readonly app: Application;
|
|
29
|
-
/**
|
|
30
|
-
* NATS registered component name
|
|
31
|
-
* @protected
|
|
32
|
-
*/
|
|
33
|
-
protected readonly natsComponentName: string;
|
|
34
|
-
/**
|
|
35
|
-
* Service ID
|
|
36
|
-
* @protected
|
|
37
|
-
*/
|
|
38
|
-
protected readonly serviceId: string;
|
|
39
|
-
/**
|
|
40
|
-
* 仅对 NoResponders(对侧确定没处理)自动重试的次数;超时/业务异常不重试。
|
|
41
|
-
* @protected
|
|
42
|
-
*/
|
|
43
|
-
protected readonly maxRetries: number;
|
|
44
|
-
/**
|
|
45
|
-
* 每次重试前等待的毫秒。
|
|
46
|
-
* @protected
|
|
47
|
-
*/
|
|
48
|
-
protected readonly retryDelay: number;
|
|
49
|
-
/**
|
|
50
|
-
* NATS component instance
|
|
51
|
-
* @protected
|
|
52
|
-
*/
|
|
53
|
-
protected nats: NATS;
|
|
54
|
-
/**
|
|
55
|
-
* Initializer
|
|
56
|
-
* @protected
|
|
57
|
-
*/
|
|
58
|
-
protected init(): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Invoke service registered method by pattern
|
|
61
|
-
* @param input
|
|
62
|
-
* @param timeout 默认 10 分钟。服务不存在/无响应者由 NoResponders 立即失败,此超时仅兜底"已被接收但处理太慢"的情况;已知的慢操作可显式传更长值。
|
|
63
|
-
*/
|
|
64
|
-
invoke<T extends Record<string, any>>(input: ActionPattern<T>, timeout?: number): Promise<any>;
|
|
65
|
-
/**
|
|
66
|
-
* On service event
|
|
67
|
-
* @param eventName
|
|
68
|
-
* @param listener
|
|
69
|
-
* @param onlySingleClientReceived
|
|
70
|
-
*/
|
|
71
|
-
on(eventName: string, listener: (...args: any[]) => void, onlySingleClientReceived?: boolean): this;
|
|
72
|
-
/**
|
|
73
|
-
* Once service event
|
|
74
|
-
* @param eventName
|
|
75
|
-
* @param listener
|
|
76
|
-
*/
|
|
77
|
-
once(eventName: string, listener: (...args: any[]) => void): this;
|
|
78
|
-
/**
|
|
79
|
-
* Off service events
|
|
80
|
-
* @param eventName
|
|
81
|
-
* @param listener
|
|
82
|
-
*/
|
|
83
|
-
off(eventName: string, listener?: (...args: any[]) => void): this;
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=ServiceProxy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceProxy.d.ts","sourceRoot":"","sources":["../../src/providers/ServiceProxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,WAAW,EAAO,QAAQ,EAAE,sBAAsB,EAAC,MAAM,UAAU,CAAA;AAG1F,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAA;AAIvC;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,wBAAwB;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,sBAAsB,CAAC,wBAAwB,CAQ9E,CAAA;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,QAAQ;IACtC;;;OAGG;IAEH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;IAEnC;;;OAGG;IAEH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAE5C;;;OAGG;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAEpC;;;OAGG;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAErC;;;OAGG;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAErC;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,IAAI,CAAA;IAEpB;;;OAGG;cACa,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC;;;;OAIG;IACU,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,MAAuB,GAAG,OAAO,CAAC,GAAG,CAAC;IAkB3H;;;;;OAKG;IACI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,wBAAwB,GAAE,OAAe,GAAG,IAAI;IAKjH;;;;OAIG;IACI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAKxE;;;;OAIG;IACI,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;CAI3E"}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.ServiceProxy = exports.BuildServiceProxy = void 0;
|
|
13
|
-
const lakutata_1 = require("lakutata");
|
|
14
|
-
const di_1 = require("lakutata/decorator/di");
|
|
15
|
-
const helper_1 = require("lakutata/helper");
|
|
16
|
-
const ServiceResponseCodec_1 = require("../lib/ServiceResponseCodec");
|
|
17
|
-
const NatsNoRespondersAvailableException_1 = require("../exceptions/NatsNoRespondersAvailableException");
|
|
18
|
-
/**
|
|
19
|
-
* Build service proxy
|
|
20
|
-
* @param options
|
|
21
|
-
* @constructor
|
|
22
|
-
*/
|
|
23
|
-
const BuildServiceProxy = (options) => {
|
|
24
|
-
return {
|
|
25
|
-
class: ServiceProxy,
|
|
26
|
-
natsComponentName: options.natsComponentName,
|
|
27
|
-
serviceId: options.serviceId,
|
|
28
|
-
maxRetries: options.maxRetries,
|
|
29
|
-
retryDelay: options.retryDelay
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
exports.BuildServiceProxy = BuildServiceProxy;
|
|
33
|
-
/**
|
|
34
|
-
* Service proxy provider
|
|
35
|
-
*/
|
|
36
|
-
let ServiceProxy = class ServiceProxy extends lakutata_1.Provider {
|
|
37
|
-
/**
|
|
38
|
-
* Initializer
|
|
39
|
-
* @protected
|
|
40
|
-
*/
|
|
41
|
-
async init() {
|
|
42
|
-
this.nats = await this.app.getObject(this.natsComponentName);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Invoke service registered method by pattern
|
|
46
|
-
* @param input
|
|
47
|
-
* @param timeout 默认 10 分钟。服务不存在/无响应者由 NoResponders 立即失败,此超时仅兜底"已被接收但处理太慢"的情况;已知的慢操作可显式传更长值。
|
|
48
|
-
*/
|
|
49
|
-
async invoke(input, timeout = 10 * 60 * 1000) {
|
|
50
|
-
// 安全重试红线:只对 NoResponders 重试 —— NATS 明确告知"当时没人订阅",对侧【确定没处理】,
|
|
51
|
-
// 重试到其他副本是首次处理,不会重复。超时(可能已处理但响应丢失)、业务异常(对侧已处理并返回)
|
|
52
|
-
// 都【不】重试,直接抛给调用方,避免重复执行非幂等操作。
|
|
53
|
-
for (let attempt = 0;; attempt++) {
|
|
54
|
-
try {
|
|
55
|
-
const response = await this.nats.request(this.serviceId, input, timeout);
|
|
56
|
-
return ServiceResponseCodec_1.ServiceResponseCodec.decode(response, this.serviceId);
|
|
57
|
-
}
|
|
58
|
-
catch (e) {
|
|
59
|
-
if (e instanceof NatsNoRespondersAvailableException_1.NatsNoRespondersAvailableException && attempt < this.maxRetries) {
|
|
60
|
-
await (0, helper_1.Delay)(this.retryDelay);
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
throw e;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* On service event
|
|
69
|
-
* @param eventName
|
|
70
|
-
* @param listener
|
|
71
|
-
* @param onlySingleClientReceived
|
|
72
|
-
*/
|
|
73
|
-
on(eventName, listener, onlySingleClientReceived = false) {
|
|
74
|
-
this.nats.onServiceEvent(this.serviceId, eventName, listener, onlySingleClientReceived);
|
|
75
|
-
return this;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Once service event
|
|
79
|
-
* @param eventName
|
|
80
|
-
* @param listener
|
|
81
|
-
*/
|
|
82
|
-
once(eventName, listener) {
|
|
83
|
-
this.nats.onceServiceEvent(this.serviceId, eventName, listener);
|
|
84
|
-
return this;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Off service events
|
|
88
|
-
* @param eventName
|
|
89
|
-
* @param listener
|
|
90
|
-
*/
|
|
91
|
-
off(eventName, listener) {
|
|
92
|
-
this.nats.offServiceEvent(this.serviceId, eventName, listener);
|
|
93
|
-
return this;
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
exports.ServiceProxy = ServiceProxy;
|
|
97
|
-
__decorate([
|
|
98
|
-
(0, di_1.Inject)(lakutata_1.Application),
|
|
99
|
-
__metadata("design:type", lakutata_1.Application
|
|
100
|
-
/**
|
|
101
|
-
* NATS registered component name
|
|
102
|
-
* @protected
|
|
103
|
-
*/
|
|
104
|
-
)
|
|
105
|
-
], ServiceProxy.prototype, "app", void 0);
|
|
106
|
-
__decorate([
|
|
107
|
-
(0, di_1.Configurable)(lakutata_1.DTO.String().required()),
|
|
108
|
-
__metadata("design:type", String)
|
|
109
|
-
], ServiceProxy.prototype, "natsComponentName", void 0);
|
|
110
|
-
__decorate([
|
|
111
|
-
(0, di_1.Configurable)(lakutata_1.DTO.String().required()),
|
|
112
|
-
__metadata("design:type", String)
|
|
113
|
-
], ServiceProxy.prototype, "serviceId", void 0);
|
|
114
|
-
__decorate([
|
|
115
|
-
(0, di_1.Configurable)(lakutata_1.DTO.Number().integer().optional().default(3)),
|
|
116
|
-
__metadata("design:type", Number)
|
|
117
|
-
], ServiceProxy.prototype, "maxRetries", void 0);
|
|
118
|
-
__decorate([
|
|
119
|
-
(0, di_1.Configurable)(lakutata_1.DTO.Number().integer().optional().default(100)),
|
|
120
|
-
__metadata("design:type", Number)
|
|
121
|
-
], ServiceProxy.prototype, "retryDelay", void 0);
|
|
122
|
-
exports.ServiceProxy = ServiceProxy = __decorate([
|
|
123
|
-
(0, di_1.Singleton)()
|
|
124
|
-
], ServiceProxy);
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export type SubscribeOptions = {
|
|
2
|
-
queue?: string;
|
|
3
|
-
max?: number;
|
|
4
|
-
iterator?: boolean;
|
|
5
|
-
/**
|
|
6
|
-
* 当消息处理出错且该消息是请求(带 reply 地址)时,用此工厂生成回传给请求方的 payload。
|
|
7
|
-
* subscribe 会用当前 codec 编码它并 respond;返回 undefined 则不回响应(请求方靠超时感知)。
|
|
8
|
-
* 用于让上层(如服务入口)注入自己的错误响应协议,而不让通用 subscribe 依赖该协议。
|
|
9
|
-
*/
|
|
10
|
-
errorResponse?: (error: any) => any;
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=SubscribeOptions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SubscribeOptions.d.ts","sourceRoot":"","sources":["../../src/types/SubscribeOptions.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;CACtC,CAAA"}
|