oak-domain 3.0.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/lib/actions/action.d.ts +16 -16
  2. package/lib/actions/action.js +17 -17
  3. package/lib/actions/relation.d.ts +5 -5
  4. package/lib/actions/relation.js +25 -38
  5. package/lib/base-app-domain/ActionAuth/Schema.d.ts +186 -160
  6. package/lib/base-app-domain/ActionAuth/Storage.js +39 -42
  7. package/lib/base-app-domain/ActionDefDict.d.ts +8 -9
  8. package/lib/base-app-domain/ActionDefDict.js +9 -11
  9. package/lib/base-app-domain/EntityDict.d.ts +28 -24
  10. package/lib/base-app-domain/I18n/Schema.d.ts +129 -129
  11. package/lib/base-app-domain/I18n/Schema.js +2 -2
  12. package/lib/base-app-domain/I18n/Storage.d.ts +3 -3
  13. package/lib/base-app-domain/I18n/Storage.js +59 -59
  14. package/lib/base-app-domain/Modi/Action.d.ts +10 -10
  15. package/lib/base-app-domain/Modi/Action.js +14 -14
  16. package/lib/base-app-domain/Modi/Schema.d.ts +136 -136
  17. package/lib/base-app-domain/Modi/Storage.js +63 -63
  18. package/lib/base-app-domain/ModiEntity/Schema.d.ts +384 -311
  19. package/lib/base-app-domain/ModiEntity/Storage.js +30 -30
  20. package/lib/base-app-domain/Oper/Schema.d.ts +153 -152
  21. package/lib/base-app-domain/Oper/Storage.js +38 -38
  22. package/lib/base-app-domain/OperEntity/Schema.d.ts +373 -300
  23. package/lib/base-app-domain/OperEntity/Storage.js +30 -30
  24. package/lib/base-app-domain/Path/Schema.d.ts +149 -0
  25. package/lib/base-app-domain/Path/Schema.js +2 -0
  26. package/lib/base-app-domain/Path/Storage.d.ts +3 -0
  27. package/lib/base-app-domain/Path/Storage.js +54 -0
  28. package/lib/base-app-domain/Relation/Schema.d.ts +188 -188
  29. package/lib/base-app-domain/Relation/Storage.js +54 -54
  30. package/lib/base-app-domain/Relation.d.ts +2 -10
  31. package/lib/base-app-domain/Relation.js +4 -10
  32. package/lib/base-app-domain/RelationAuth/Schema.d.ts +214 -180
  33. package/lib/base-app-domain/RelationAuth/Storage.js +44 -46
  34. package/lib/base-app-domain/Storage.js +31 -27
  35. package/lib/base-app-domain/User/Action.d.ts +10 -10
  36. package/lib/base-app-domain/User/Action.js +12 -12
  37. package/lib/base-app-domain/User/Schema.d.ts +210 -197
  38. package/lib/base-app-domain/User/Storage.js +33 -33
  39. package/lib/base-app-domain/UserEntityClaim/Schema.d.ts +264 -0
  40. package/lib/base-app-domain/UserEntityClaim/Schema.js +2 -0
  41. package/lib/base-app-domain/UserEntityClaim/Storage.d.ts +3 -0
  42. package/lib/base-app-domain/UserEntityClaim/Storage.js +37 -0
  43. package/lib/base-app-domain/UserEntityGrant/Action.d.ts +5 -5
  44. package/lib/base-app-domain/UserEntityGrant/Action.js +5 -5
  45. package/lib/base-app-domain/UserEntityGrant/Schema.d.ts +131 -157
  46. package/lib/base-app-domain/UserEntityGrant/Storage.js +25 -29
  47. package/lib/base-app-domain/UserRelation/Schema.d.ts +208 -194
  48. package/lib/base-app-domain/UserRelation/Storage.js +56 -56
  49. package/lib/base-app-domain/_SubQuery.d.ts +142 -112
  50. package/lib/base-app-domain/index.d.ts +4 -4
  51. package/lib/base-app-domain/index.js +7 -7
  52. package/lib/checkers/index.d.ts +5 -5
  53. package/lib/checkers/index.js +13 -14
  54. package/lib/compiler/entities.d.ts +2 -0
  55. package/lib/compiler/entities.js +7 -0
  56. package/lib/compiler/env.d.ts +13 -14
  57. package/lib/compiler/env.js +45 -50
  58. package/lib/compiler/localeBuilder.d.ts +27 -22
  59. package/lib/compiler/localeBuilder.js +184 -169
  60. package/lib/compiler/schemalBuilder.d.ts +27 -11
  61. package/lib/compiler/schemalBuilder.js +3569 -3787
  62. package/lib/entities/ActionAuth.d.ts +10 -12
  63. package/lib/entities/ActionAuth.js +31 -29
  64. package/lib/entities/I18n.d.ts +9 -9
  65. package/lib/entities/I18n.js +36 -37
  66. package/lib/entities/Modi.js +49 -49
  67. package/lib/entities/ModiEntity.js +18 -18
  68. package/lib/entities/Oper.js +21 -21
  69. package/lib/entities/OperEntity.js +18 -18
  70. package/lib/entities/Path.d.ts +8 -0
  71. package/lib/entities/Path.js +35 -0
  72. package/lib/entities/Relation.d.ts +8 -8
  73. package/lib/entities/Relation.js +35 -35
  74. package/lib/entities/RelationAuth.d.ts +8 -8
  75. package/lib/entities/RelationAuth.js +34 -34
  76. package/lib/entities/User.js +31 -31
  77. package/lib/entities/UserEntityClaim.d.ts +13 -0
  78. package/lib/entities/UserEntityClaim.js +17 -0
  79. package/lib/entities/UserEntityGrant.d.ts +9 -8
  80. package/lib/entities/UserEntityGrant.js +15 -18
  81. package/lib/entities/UserRelation.d.ts +10 -10
  82. package/lib/entities/UserRelation.js +38 -38
  83. package/lib/index.d.ts +23 -0
  84. package/lib/index.js +37 -0
  85. package/lib/store/AsyncRowStore.d.ts +60 -58
  86. package/lib/store/AsyncRowStore.js +118 -190
  87. package/lib/store/CascadeStore.d.ts +104 -103
  88. package/lib/store/CascadeStore.js +1688 -2036
  89. package/lib/store/RelationAuth.d.ts +96 -103
  90. package/lib/store/RelationAuth.js +1336 -1492
  91. package/lib/store/SyncRowStore.d.ts +29 -29
  92. package/lib/store/SyncRowStore.js +50 -49
  93. package/lib/store/TriggerExecutor.d.ts +38 -31
  94. package/lib/store/TriggerExecutor.js +459 -532
  95. package/lib/store/actionAuth.d.ts +4 -4
  96. package/lib/store/actionAuth.js +25 -40
  97. package/lib/store/actionDef.d.ts +10 -10
  98. package/lib/store/actionDef.js +278 -353
  99. package/lib/store/checker.d.ts +26 -26
  100. package/lib/store/checker.js +487 -623
  101. package/lib/store/filter.d.ts +85 -123
  102. package/lib/store/filter.js +1651 -1761
  103. package/lib/store/modi.d.ts +13 -13
  104. package/lib/store/modi.js +254 -315
  105. package/lib/store/relation.d.ts +12 -12
  106. package/lib/store/relation.js +67 -67
  107. package/lib/timers/oper.d.ts +18 -18
  108. package/lib/timers/oper.js +57 -60
  109. package/lib/timers/vaccum.d.ts +20 -20
  110. package/lib/timers/vaccum.js +111 -176
  111. package/lib/triggers/index.d.ts +5 -5
  112. package/lib/triggers/index.js +8 -8
  113. package/lib/types/Action.d.ts +20 -20
  114. package/lib/types/AppLoader.d.ts +17 -11
  115. package/lib/types/AppLoader.js +10 -10
  116. package/lib/types/Aspect.d.ts +1 -3
  117. package/lib/types/Auth.d.ts +70 -74
  118. package/lib/types/Cluster.d.ts +5 -0
  119. package/lib/types/Cluster.js +2 -0
  120. package/lib/types/Connector.d.ts +38 -34
  121. package/lib/types/Connector.js +2 -9
  122. package/lib/types/DataType.d.ts +25 -24
  123. package/lib/types/DataType.js +6 -6
  124. package/lib/types/Demand.d.ts +88 -88
  125. package/lib/types/Demand.js +10 -10
  126. package/lib/types/Endpoint.d.ts +11 -11
  127. package/lib/types/Entity.d.ts +203 -198
  128. package/lib/types/Entity.js +15 -15
  129. package/lib/types/EntityDesc.d.ts +9 -8
  130. package/lib/types/EntityDesc.js +2 -2
  131. package/lib/types/Environment.d.ts +88 -57
  132. package/lib/types/Environment.js +2 -2
  133. package/lib/types/Exception.d.ts +147 -120
  134. package/lib/types/Exception.js +406 -406
  135. package/lib/types/Expression.d.ts +163 -163
  136. package/lib/types/Expression.js +397 -427
  137. package/lib/types/Geo.d.ts +18 -18
  138. package/lib/types/Locale.d.ts +25 -25
  139. package/lib/types/Logger.d.ts +6 -6
  140. package/lib/types/Polyfill.d.ts +24 -24
  141. package/lib/types/Port.d.ts +18 -18
  142. package/lib/types/RowStore.d.ts +18 -18
  143. package/lib/types/RowStore.js +33 -34
  144. package/lib/types/Storage.d.ts +58 -57
  145. package/lib/types/Style.d.ts +11 -11
  146. package/lib/types/Timer.d.ts +14 -14
  147. package/lib/types/Trigger.d.ts +124 -108
  148. package/lib/types/Trigger.js +58 -54
  149. package/lib/types/Watcher.d.ts +19 -19
  150. package/lib/types/index.d.ts +26 -24
  151. package/lib/types/index.js +29 -27
  152. package/lib/types/schema/DataTypes.d.ts +34 -34
  153. package/lib/utils/SimpleConnector.d.ts +64 -50
  154. package/lib/utils/SimpleConnector.js +206 -184
  155. package/lib/utils/assert.d.ts +5 -5
  156. package/lib/utils/assert.js +9 -9
  157. package/lib/utils/concurrent.d.ts +15 -15
  158. package/lib/utils/concurrent.js +63 -89
  159. package/lib/utils/date.js +18 -18
  160. package/lib/utils/{url.d.ts → domain.d.ts} +1 -1
  161. package/lib/utils/{url.js → domain.js} +11 -12
  162. package/lib/utils/geo.js +24 -24
  163. package/lib/utils/lodash.d.ts +24 -20
  164. package/lib/utils/lodash.js +46 -55
  165. package/lib/utils/mask.js +34 -35
  166. package/lib/utils/money.d.ts +6 -6
  167. package/lib/utils/money.js +51 -40
  168. package/lib/utils/projection.d.ts +4 -0
  169. package/lib/utils/projection.js +15 -0
  170. package/lib/utils/random/random.js +19 -24
  171. package/lib/utils/random/random.mp.js +14 -25
  172. package/lib/utils/random/random.native.d.ts +1 -0
  173. package/lib/utils/random/random.native.js +14 -0
  174. package/lib/utils/random/random.web.js +11 -17
  175. package/lib/utils/string.d.ts +28 -28
  176. package/lib/utils/string.js +69 -82
  177. package/lib/utils/url/index.d.ts +7 -0
  178. package/lib/utils/url/index.js +8 -0
  179. package/lib/utils/url/index.mp.d.ts +4 -0
  180. package/lib/utils/url/index.mp.js +8 -0
  181. package/lib/utils/url/index.native.d.ts +12 -0
  182. package/lib/utils/url/index.native.js +7 -0
  183. package/lib/utils/url/index.web.d.ts +12 -0
  184. package/lib/utils/url/index.web.js +7 -0
  185. package/lib/utils/uuid.d.ts +17 -17
  186. package/lib/utils/uuid.js +218 -257
  187. package/lib/utils/validator.d.ts +26 -25
  188. package/lib/utils/validator.js +131 -128
  189. package/lib/utils/version.js +21 -21
  190. package/package.json +51 -49
  191. package/src/entities/ActionAuth.ts +41 -41
  192. package/src/entities/I18n.ts +45 -46
  193. package/src/entities/Modi.ts +69 -69
  194. package/src/entities/ModiEntity.ts +26 -26
  195. package/src/entities/Oper.ts +32 -32
  196. package/src/entities/OperEntity.ts +27 -27
  197. package/src/entities/Path.ts +43 -0
  198. package/src/entities/Relation.ts +43 -43
  199. package/src/entities/RelationAuth.ts +44 -43
  200. package/src/entities/User.ts +48 -48
  201. package/src/entities/UserEntityClaim.ts +30 -0
  202. package/src/entities/UserEntityGrant.ts +24 -27
  203. package/src/entities/UserRelation.ts +50 -50
@@ -1,50 +1,64 @@
1
- /// <reference types="node" />
2
- import { IncomingHttpHeaders } from "http";
3
- import { AsyncContext, AsyncRowStore } from '../store/AsyncRowStore';
4
- import { SyncContext } from '../store/SyncRowStore';
5
- import { Connector, EntityDict, OakException } from "../types";
6
- export declare class SimpleConnector<ED extends EntityDict, BackCxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>> extends Connector<ED, BackCxt, FrontCxt> {
7
- static ASPECT_ROUTER: string;
8
- static BRIDGE_ROUTER: string;
9
- static SUBSCRIBE_ROUTER: string;
10
- private serverAspectUrl;
11
- private serverBridgeUrl;
12
- private makeException;
13
- private contextBuilder;
14
- constructor(serverUrl: string, makeException: (exceptionData: any) => OakException<ED>, contextBuilder: (str: string | undefined) => (store: AsyncRowStore<ED, BackCxt>) => Promise<BackCxt>);
15
- callAspect(name: string, params: any, context: FrontCxt): Promise<{
16
- result: any;
17
- opRecords: any;
18
- message: string | null;
19
- } | {
20
- result: ArrayBuffer;
21
- message: string | null;
22
- opRecords?: undefined;
23
- }>;
24
- getRouter(): string;
25
- getSubscribeRouter(): string;
26
- parseRequest(headers: IncomingHttpHeaders, body: any, store: AsyncRowStore<ED, BackCxt>): Promise<{
27
- name: string;
28
- params: any;
29
- context: BackCxt;
30
- }>;
31
- serializeResult(result: any, context: BackCxt, headers: IncomingHttpHeaders, body: any): Promise<{
32
- body: any;
33
- headers?: Record<string, any> | undefined;
34
- }>;
35
- serializeException(exception: OakException<ED>, headers: IncomingHttpHeaders, body: any): {
36
- body: any;
37
- headers?: Record<string, any> | undefined;
38
- };
39
- getBridgeRouter(): string;
40
- /**
41
- * 通过本地服务器桥接访问外部资源的url
42
- * @param url
43
- * @param headers
44
- */
45
- makeBridgeUrl(url: string, headers?: Record<string, string>): string;
46
- parseBridgeRequestQuery(urlParams: string): {
47
- url: string;
48
- headers?: Record<string, string> | undefined;
49
- };
50
- }
1
+ /// <reference types="node" />
2
+ import { IncomingHttpHeaders } from "http";
3
+ import { SyncContext } from '../store/SyncRowStore';
4
+ import { Connector, EntityDict, OakException, OpRecord } from "../types";
5
+ type ServerOption = {
6
+ protocol: string;
7
+ hostname: string;
8
+ port?: number;
9
+ apiPath?: string;
10
+ };
11
+ export declare class SimpleConnector<ED extends EntityDict, FrontCxt extends SyncContext<ED>> implements Connector<ED, FrontCxt> {
12
+ static ASPECT_ROUTER: string;
13
+ static BRIDGE_ROUTER: string;
14
+ static SUBSCRIBE_ROUTER: string;
15
+ static SUBSCRIBE_POINT_ROUTER: string;
16
+ static ENDPOINT_ROUTER: string;
17
+ private serverAspectUrl;
18
+ private serverBridgeUrl;
19
+ private serverSubscribePointUrl;
20
+ private option;
21
+ private makeException;
22
+ constructor(option: ServerOption, makeException: (exceptionData: any) => OakException<ED>);
23
+ callAspect(name: string, params: any, context: FrontCxt): Promise<{
24
+ result: any;
25
+ opRecords: any;
26
+ message: string | null;
27
+ } | {
28
+ result: ArrayBuffer;
29
+ message: string | null;
30
+ opRecords?: undefined;
31
+ }>;
32
+ getRouter(): string;
33
+ getSubscribeRouter(): string;
34
+ getSubscribePointRouter(): string;
35
+ getSubscribePoint(): Promise<{
36
+ url: any;
37
+ path: any;
38
+ }>;
39
+ getEndpointRouter(): string;
40
+ parseRequestHeaders(headers: IncomingHttpHeaders): {
41
+ contextString: string | undefined;
42
+ aspectName: string;
43
+ };
44
+ serializeResult(result: any, opRecords: OpRecord<ED>[], headers: IncomingHttpHeaders, body: any, message?: string): Promise<{
45
+ body: any;
46
+ headers?: Record<string, any> | undefined;
47
+ }>;
48
+ serializeException(exception: OakException<ED>, headers: IncomingHttpHeaders, body: any): {
49
+ body: any;
50
+ headers?: Record<string, any> | undefined;
51
+ };
52
+ getBridgeRouter(): string;
53
+ /**
54
+ * 通过本地服务器桥接访问外部资源的url
55
+ * @param url
56
+ * @param headers
57
+ */
58
+ makeBridgeUrl(url: string, headers?: Record<string, string>): string;
59
+ parseBridgeRequestQuery(urlParams: string): {
60
+ url: string;
61
+ headers?: Record<string, string> | undefined;
62
+ };
63
+ }
64
+ export {};
@@ -1,184 +1,206 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SimpleConnector = void 0;
4
- var tslib_1 = require("tslib");
5
- var assert_1 = tslib_1.__importDefault(require("assert"));
6
- var stream_1 = require("stream");
7
- var url_1 = tslib_1.__importDefault(require("url"));
8
- var types_1 = require("../types");
9
- function makeContentTypeAndBody(data) {
10
- //
11
- if (process.env.OAK_PLATFORM !== 'wechatMp') {
12
- if (data instanceof FormData) {
13
- return {
14
- // contentType: 'multipart/form-data',
15
- body: data,
16
- };
17
- }
18
- }
19
- return {
20
- contentType: 'application/json',
21
- body: JSON.stringify(data),
22
- };
23
- }
24
- var SimpleConnector = /** @class */ (function (_super) {
25
- tslib_1.__extends(SimpleConnector, _super);
26
- function SimpleConnector(serverUrl, makeException, contextBuilder) {
27
- var _this = _super.call(this) || this;
28
- _this.serverAspectUrl = "".concat(serverUrl).concat(SimpleConnector.ASPECT_ROUTER);
29
- _this.serverBridgeUrl = "".concat(serverUrl).concat(SimpleConnector.BRIDGE_ROUTER);
30
- _this.makeException = makeException;
31
- _this.contextBuilder = contextBuilder;
32
- return _this;
33
- }
34
- SimpleConnector.prototype.callAspect = function (name, params, context) {
35
- return tslib_1.__awaiter(this, void 0, void 0, function () {
36
- var cxtStr, _a, contentType, body, response, err, message, responseType, _b, exception, result, opRecords, result;
37
- return tslib_1.__generator(this, function (_c) {
38
- switch (_c.label) {
39
- case 0:
40
- cxtStr = context.toString();
41
- _a = makeContentTypeAndBody(params), contentType = _a.contentType, body = _a.body;
42
- return [4 /*yield*/, global.fetch(this.serverAspectUrl, {
43
- method: 'POST',
44
- headers: Object.assign({
45
- 'oak-cxt': cxtStr,
46
- 'oak-aspect': name,
47
- }, contentType && {
48
- 'Content-Type': contentType,
49
- }),
50
- body: body,
51
- })];
52
- case 1:
53
- response = _c.sent();
54
- if (response.status > 299) {
55
- err = new types_1.OakExternalException("\u7F51\u7EDC\u8BF7\u6C42\u8FD4\u56DE\u5F02\u5E38\uFF0Cstatus\u662F".concat(response.status));
56
- throw err;
57
- }
58
- message = response.headers.get('oak-message');
59
- responseType = response.headers.get('Content-Type') || response.headers.get('content-type');
60
- if (!(responseType === null || responseType === void 0 ? void 0 : responseType.toLocaleLowerCase().match(/application\/json/i))) return [3 /*break*/, 3];
61
- return [4 /*yield*/, response.json()];
62
- case 2:
63
- _b = _c.sent(), exception = _b.exception, result = _b.result, opRecords = _b.opRecords;
64
- if (exception) {
65
- throw this.makeException(exception);
66
- }
67
- return [2 /*return*/, {
68
- result: result,
69
- opRecords: opRecords,
70
- message: message,
71
- }];
72
- case 3:
73
- if (!(responseType === null || responseType === void 0 ? void 0 : responseType.toLocaleLowerCase().match(/application\/octet-stream/i))) return [3 /*break*/, 5];
74
- return [4 /*yield*/, response.arrayBuffer()];
75
- case 4:
76
- result = _c.sent();
77
- return [2 /*return*/, {
78
- result: result,
79
- message: message,
80
- }];
81
- case 5: throw new Error("\u5C1A\u4E0D\u652F\u6301\u7684content-type\u7C7B\u578B".concat(responseType));
82
- }
83
- });
84
- });
85
- };
86
- SimpleConnector.prototype.getRouter = function () {
87
- return SimpleConnector.ASPECT_ROUTER;
88
- };
89
- SimpleConnector.prototype.getSubscribeRouter = function () {
90
- return SimpleConnector.SUBSCRIBE_ROUTER;
91
- };
92
- SimpleConnector.prototype.parseRequest = function (headers, body, store) {
93
- return tslib_1.__awaiter(this, void 0, void 0, function () {
94
- var oakCxtStr, aspectName, context;
95
- return tslib_1.__generator(this, function (_a) {
96
- switch (_a.label) {
97
- case 0:
98
- oakCxtStr = headers["oak-cxt"], aspectName = headers["oak-aspect"];
99
- (0, assert_1.default)(typeof oakCxtStr === 'string' || oakCxtStr === undefined);
100
- (0, assert_1.default)(typeof aspectName === 'string');
101
- return [4 /*yield*/, this.contextBuilder(oakCxtStr)(store)];
102
- case 1:
103
- context = _a.sent();
104
- context.setHeaders(headers);
105
- return [2 /*return*/, {
106
- name: aspectName,
107
- params: body,
108
- context: context,
109
- }];
110
- }
111
- });
112
- });
113
- };
114
- SimpleConnector.prototype.serializeResult = function (result, context, headers, body) {
115
- return tslib_1.__awaiter(this, void 0, void 0, function () {
116
- return tslib_1.__generator(this, function (_a) {
117
- switch (_a.label) {
118
- case 0:
119
- if (result instanceof stream_1.Stream || result instanceof Buffer) {
120
- return [2 /*return*/, {
121
- body: result,
122
- }];
123
- }
124
- return [4 /*yield*/, context.refineOpRecords()];
125
- case 1:
126
- _a.sent();
127
- return [2 /*return*/, {
128
- body: {
129
- result: result,
130
- opRecords: context.opRecords,
131
- },
132
- headers: {
133
- 'oak-message': context.getMessage(),
134
- },
135
- }];
136
- }
137
- });
138
- });
139
- };
140
- SimpleConnector.prototype.serializeException = function (exception, headers, body) {
141
- return {
142
- body: {
143
- exception: exception.toString(),
144
- },
145
- };
146
- };
147
- SimpleConnector.prototype.getBridgeRouter = function () {
148
- return SimpleConnector.BRIDGE_ROUTER;
149
- };
150
- /**
151
- * 通过本地服务器桥接访问外部资源的url
152
- * @param url
153
- * @param headers
154
- */
155
- SimpleConnector.prototype.makeBridgeUrl = function (url, headers) {
156
- // if (process.env.PROD !== 'true') {
157
- //     console.warn('在development下无法通过bridge访问资源,将直接访问,可能失败', url);
158
- //     return url;
159
- // }
160
- var encodeUrl = encodeURIComponent(url);
161
- // const urlParse = URL.parse(url, true);
162
- // const { search } = urlParse as {
163
- //     search: string;
164
- // };
165
- // if (headers) {
166
- //     search.append('headers', JSON.stringify(headers));
167
- // }
168
- return "".concat(this.serverBridgeUrl, "?url=").concat(encodeUrl);
169
- };
170
- SimpleConnector.prototype.parseBridgeRequestQuery = function (urlParams) {
171
- var search = new url_1.default.URLSearchParams(urlParams);
172
- var url = search.get('url');
173
- var headers = search.get('headers');
174
- return {
175
- url: url,
176
- headers: headers && JSON.parse(headers),
177
- };
178
- };
179
- SimpleConnector.ASPECT_ROUTER = '/aspect';
180
- SimpleConnector.BRIDGE_ROUTER = '/bridge';
181
- SimpleConnector.SUBSCRIBE_ROUTER = '/subscribe';
182
- return SimpleConnector;
183
- }(types_1.Connector));
184
- exports.SimpleConnector = SimpleConnector;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleConnector = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const assert_1 = tslib_1.__importDefault(require("assert"));
6
+ const stream_1 = require("stream");
7
+ const url_1 = tslib_1.__importDefault(require("url"));
8
+ const types_1 = require("../types");
9
+ function makeContentTypeAndBody(data) {
10
+ if (process.env.OAK_PLATFORM !== 'wechatMp') {
11
+ if (data instanceof FormData) {
12
+ return {
13
+ // contentType: 'multipart/form-data',
14
+ body: data,
15
+ };
16
+ }
17
+ }
18
+ return {
19
+ contentType: 'application/json',
20
+ body: JSON.stringify(data),
21
+ };
22
+ }
23
+ class SimpleConnector {
24
+ static ASPECT_ROUTER = '/aspect';
25
+ static BRIDGE_ROUTER = '/bridge';
26
+ static SUBSCRIBE_ROUTER = '/subscribe';
27
+ static SUBSCRIBE_POINT_ROUTER = '/subscribePoint';
28
+ static ENDPOINT_ROUTER = '/endpoint';
29
+ serverAspectUrl;
30
+ serverBridgeUrl;
31
+ serverSubscribePointUrl;
32
+ option;
33
+ makeException;
34
+ constructor(option, makeException) {
35
+ this.option = option;
36
+ const { protocol, hostname, port, apiPath } = option;
37
+ let serverUrl = `${protocol}//${hostname}`;
38
+ if (typeof port === 'number') {
39
+ serverUrl += `:${port}`;
40
+ }
41
+ if (apiPath) {
42
+ (0, assert_1.default)(apiPath.startsWith('/'), 'apiPath前缀必须存在/');
43
+ serverUrl += apiPath;
44
+ }
45
+ this.serverAspectUrl = `${serverUrl}${SimpleConnector.ASPECT_ROUTER}`;
46
+ this.serverBridgeUrl = `${serverUrl}${SimpleConnector.BRIDGE_ROUTER}`;
47
+ this.serverSubscribePointUrl = `${serverUrl}${SimpleConnector.SUBSCRIBE_POINT_ROUTER}`;
48
+ this.makeException = makeException;
49
+ }
50
+ async callAspect(name, params, context) {
51
+ const cxtStr = context.toString();
52
+ const { contentType, body } = makeContentTypeAndBody(params);
53
+ let response;
54
+ try {
55
+ response = await global.fetch(this.serverAspectUrl, {
56
+ method: 'POST',
57
+ headers: Object.assign({
58
+ 'oak-cxt': cxtStr,
59
+ 'oak-aspect': name,
60
+ }, contentType && {
61
+ 'Content-Type': contentType,
62
+ }),
63
+ body,
64
+ });
65
+ }
66
+ catch (err) {
67
+ // fetch返回异常一定是网络异常
68
+ throw new types_1.OakNetworkException();
69
+ }
70
+ if (response.status > 299) {
71
+ const err = new types_1.OakServerProxyException(`网络请求返回status是${response.status}`);
72
+ throw err;
73
+ }
74
+ const message = response.headers.get('oak-message');
75
+ const responseType = response.headers.get('Content-Type') ||
76
+ response.headers.get('content-type');
77
+ if (responseType?.toLocaleLowerCase().match(/application\/json/i)) {
78
+ const { exception, result, opRecords } = await response.json();
79
+ if (exception) {
80
+ throw this.makeException(exception);
81
+ }
82
+ return {
83
+ result,
84
+ opRecords,
85
+ message,
86
+ };
87
+ }
88
+ else if (responseType
89
+ ?.toLocaleLowerCase()
90
+ .match(/application\/octet-stream/i)) {
91
+ const result = await response.arrayBuffer();
92
+ return {
93
+ result,
94
+ message,
95
+ };
96
+ }
97
+ else {
98
+ throw new Error(`尚不支持的content-type类型${responseType}`);
99
+ }
100
+ }
101
+ getRouter() {
102
+ return SimpleConnector.ASPECT_ROUTER;
103
+ }
104
+ getSubscribeRouter() {
105
+ return SimpleConnector.SUBSCRIBE_ROUTER;
106
+ }
107
+ getSubscribePointRouter() {
108
+ return SimpleConnector.SUBSCRIBE_POINT_ROUTER;
109
+ }
110
+ async getSubscribePoint() {
111
+ let response;
112
+ try {
113
+ response = await global.fetch(this.serverSubscribePointUrl);
114
+ }
115
+ catch (err) {
116
+ throw new types_1.OakNetworkException();
117
+ }
118
+ if (response.status > 299) {
119
+ const err = new types_1.OakServerProxyException(`网络请求返回status是${response.status}`);
120
+ throw err;
121
+ }
122
+ const message = response.headers.get('oak-message');
123
+ const responseType = response.headers.get('Content-Type') ||
124
+ response.headers.get('content-type');
125
+ if (responseType?.toLocaleLowerCase().match(/application\/json/i)) {
126
+ const { url, path, port, namespace } = await response.json();
127
+ let url2 = url || `${this.option.protocol}//${this.option.hostname}`;
128
+ (0, assert_1.default)(port);
129
+ url2 += `:${port}`;
130
+ if (namespace) {
131
+ url2 += namespace;
132
+ }
133
+ return {
134
+ url: url2,
135
+ path,
136
+ };
137
+ }
138
+ else {
139
+ throw new Error(`尚不支持的content-type类型${responseType}`);
140
+ }
141
+ }
142
+ getEndpointRouter() {
143
+ return SimpleConnector.ENDPOINT_ROUTER;
144
+ }
145
+ parseRequestHeaders(headers) {
146
+ const { 'oak-cxt': oakCxtStr, 'oak-aspect': aspectName } = headers;
147
+ (0, assert_1.default)(typeof oakCxtStr === 'string' || oakCxtStr === undefined);
148
+ (0, assert_1.default)(typeof aspectName === 'string');
149
+ return {
150
+ contextString: oakCxtStr,
151
+ aspectName,
152
+ };
153
+ }
154
+ async serializeResult(result, opRecords, headers, body, message) {
155
+ if (result instanceof stream_1.Stream || result instanceof Buffer) {
156
+ return {
157
+ body: result,
158
+ headers: {
159
+ 'oak-message': message,
160
+ },
161
+ };
162
+ }
163
+ return {
164
+ body: {
165
+ result,
166
+ opRecords,
167
+ },
168
+ headers: {
169
+ 'oak-message': message,
170
+ },
171
+ };
172
+ }
173
+ serializeException(exception, headers, body) {
174
+ return {
175
+ body: {
176
+ exception: exception.toString(),
177
+ },
178
+ };
179
+ }
180
+ getBridgeRouter() {
181
+ return SimpleConnector.BRIDGE_ROUTER;
182
+ }
183
+ /**
184
+ * 通过本地服务器桥接访问外部资源的url
185
+ * @param url
186
+ * @param headers
187
+ */
188
+ makeBridgeUrl(url, headers) {
189
+ // if (process.env.PROD !== 'true') {
190
+ //     console.warn('在development下无法通过bridge访问资源,将直接访问,可能失败', url);
191
+ //     return url;
192
+ // }
193
+ const encodeUrl = encodeURIComponent(url);
194
+ return `${this.serverBridgeUrl}?url=${encodeUrl}`;
195
+ }
196
+ parseBridgeRequestQuery(urlParams) {
197
+ const search = new url_1.default.URLSearchParams(urlParams);
198
+ const url = search.get('url');
199
+ const headers = search.get('headers');
200
+ return {
201
+ url,
202
+ headers: headers && JSON.parse(headers),
203
+ };
204
+ }
205
+ }
206
+ exports.SimpleConnector = SimpleConnector;
@@ -1,5 +1,5 @@
1
- /**
2
- * 防止assert打包体积过大,从这里引用
3
- */
4
- import assert from 'assert';
5
- export { assert, };
1
+ /**
2
+ * 防止assert打包体积过大,从这里引用
3
+ */
4
+ import assert from 'assert';
5
+ export { assert, };
@@ -1,9 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assert = void 0;
4
- var tslib_1 = require("tslib");
5
- /**
6
- * 防止assert打包体积过大,从这里引用
7
- */
8
- var assert_1 = tslib_1.__importDefault(require("assert"));
9
- exports.assert = assert_1.default;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assert = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /**
6
+ * 防止assert打包体积过大,从这里引用
7
+ */
8
+ const assert_1 = tslib_1.__importDefault(require("assert"));
9
+ exports.assert = assert_1.default;
@@ -1,15 +1,15 @@
1
- declare type Mode = 'S' | 'X';
2
- /**
3
- * 模拟一个读写锁,用于同步。
4
- * 注意,千万不要发生自己等自己
5
- */
6
- export declare class RWLock {
7
- private readNumber;
8
- private writeNumber;
9
- private readWaiter;
10
- private writeWaiter;
11
- constructor();
12
- acquire(mode: Mode): Promise<void>;
13
- release(): void;
14
- }
15
- export {};
1
+ type Mode = 'S' | 'X';
2
+ /**
3
+ * 模拟一个读写锁,用于同步。
4
+ * 注意,千万不要发生自己等自己
5
+ */
6
+ export declare class RWLock {
7
+ private readNumber;
8
+ private writeNumber;
9
+ private readWaiter;
10
+ private writeWaiter;
11
+ constructor();
12
+ acquire(mode: Mode): Promise<void>;
13
+ release(): void;
14
+ }
15
+ export {};