lemon-core 4.1.15 → 4.2.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 (154) hide show
  1. package/dist/common/test-helper.d.ts +2 -2
  2. package/dist/common/test-helper.js +24 -26
  3. package/dist/common/test-helper.js.map +1 -1
  4. package/dist/controllers/dummy-controller.js +39 -46
  5. package/dist/controllers/dummy-controller.js.map +1 -1
  6. package/dist/controllers/general-api-controller.js +95 -100
  7. package/dist/controllers/general-api-controller.js.map +1 -1
  8. package/dist/controllers/general-controller.js +81 -82
  9. package/dist/controllers/general-controller.js.map +1 -1
  10. package/dist/cores/api/api-service.d.ts +1 -1
  11. package/dist/cores/api/api-service.js +228 -269
  12. package/dist/cores/api/api-service.js.map +1 -1
  13. package/dist/cores/aws/aws-kms-service.d.ts +1 -2
  14. package/dist/cores/aws/aws-kms-service.js +143 -153
  15. package/dist/cores/aws/aws-kms-service.js.map +1 -1
  16. package/dist/cores/aws/aws-s3-service.d.ts +2 -4
  17. package/dist/cores/aws/aws-s3-service.js +306 -330
  18. package/dist/cores/aws/aws-s3-service.js.map +1 -1
  19. package/dist/cores/aws/aws-sns-service.js +147 -153
  20. package/dist/cores/aws/aws-sns-service.js.map +1 -1
  21. package/dist/cores/aws/aws-sqs-service.js +149 -170
  22. package/dist/cores/aws/aws-sqs-service.js.map +1 -1
  23. package/dist/cores/aws/index.js +10 -20
  24. package/dist/cores/aws/index.js.map +1 -1
  25. package/dist/cores/cache/cache-service.d.ts +2 -2
  26. package/dist/cores/cache/cache-service.js +435 -499
  27. package/dist/cores/cache/cache-service.js.map +1 -1
  28. package/dist/cores/config/config-service.d.ts +1 -1
  29. package/dist/cores/config/config-service.js +56 -63
  30. package/dist/cores/config/config-service.js.map +1 -1
  31. package/dist/cores/config/index.js +14 -24
  32. package/dist/cores/config/index.js.map +1 -1
  33. package/dist/cores/core-services.d.ts +1 -1
  34. package/dist/cores/dynamo/dynamo-query-service.js +37 -51
  35. package/dist/cores/dynamo/dynamo-query-service.js.map +1 -1
  36. package/dist/cores/dynamo/dynamo-scan-service.d.ts +2 -2
  37. package/dist/cores/dynamo/dynamo-scan-service.js +29 -40
  38. package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -1
  39. package/dist/cores/dynamo/dynamo-service.d.ts +2 -2
  40. package/dist/cores/dynamo/dynamo-service.js +528 -601
  41. package/dist/cores/dynamo/dynamo-service.js.map +1 -1
  42. package/dist/cores/dynamo/tools/expressions.js +17 -7
  43. package/dist/cores/dynamo/tools/expressions.js.map +1 -1
  44. package/dist/cores/dynamo/tools/query.js +142 -127
  45. package/dist/cores/dynamo/tools/query.js.map +1 -1
  46. package/dist/cores/dynamo/tools/scan.js +111 -97
  47. package/dist/cores/dynamo/tools/scan.js.map +1 -1
  48. package/dist/cores/dynamo/tools/serializer.js +17 -7
  49. package/dist/cores/dynamo/tools/serializer.js.map +1 -1
  50. package/dist/cores/dynamo/tools/utils.d.ts +0 -2
  51. package/dist/cores/dynamo/tools/utils.js.map +1 -1
  52. package/dist/cores/elastic/elastic6-query-service.js +307 -324
  53. package/dist/cores/elastic/elastic6-query-service.js.map +1 -1
  54. package/dist/cores/elastic/elastic6-service.d.ts +3 -3
  55. package/dist/cores/elastic/elastic6-service.js +568 -647
  56. package/dist/cores/elastic/elastic6-service.js.map +1 -1
  57. package/dist/cores/elastic/hangul-service.js +52 -54
  58. package/dist/cores/elastic/hangul-service.js.map +1 -1
  59. package/dist/cores/lambda/index.js +42 -36
  60. package/dist/cores/lambda/index.js.map +1 -1
  61. package/dist/cores/lambda/lambda-alb-handler.d.ts +2 -2
  62. package/dist/cores/lambda/lambda-alb-handler.js +59 -72
  63. package/dist/cores/lambda/lambda-alb-handler.js.map +1 -1
  64. package/dist/cores/lambda/lambda-cognito-handler.js +10 -19
  65. package/dist/cores/lambda/lambda-cognito-handler.js.map +1 -1
  66. package/dist/cores/lambda/lambda-cron-handler.d.ts +1 -1
  67. package/dist/cores/lambda/lambda-cron-handler.js +14 -23
  68. package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
  69. package/dist/cores/lambda/lambda-dynamo-stream-handler.d.ts +2 -2
  70. package/dist/cores/lambda/lambda-dynamo-stream-handler.js +57 -67
  71. package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
  72. package/dist/cores/lambda/lambda-handler.d.ts +22 -22
  73. package/dist/cores/lambda/lambda-handler.js +93 -106
  74. package/dist/cores/lambda/lambda-handler.js.map +1 -1
  75. package/dist/cores/lambda/lambda-notification-handler.d.ts +1 -1
  76. package/dist/cores/lambda/lambda-notification-handler.js +39 -50
  77. package/dist/cores/lambda/lambda-notification-handler.js.map +1 -1
  78. package/dist/cores/lambda/lambda-sns-handler.js +79 -88
  79. package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
  80. package/dist/cores/lambda/lambda-sqs-handler.js +79 -88
  81. package/dist/cores/lambda/lambda-sqs-handler.js.map +1 -1
  82. package/dist/cores/lambda/lambda-web-handler.d.ts +6 -6
  83. package/dist/cores/lambda/lambda-web-handler.js +387 -412
  84. package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
  85. package/dist/cores/lambda/lambda-wss-handler.js +23 -32
  86. package/dist/cores/lambda/lambda-wss-handler.js.map +1 -1
  87. package/dist/cores/protocol/index.js +10 -20
  88. package/dist/cores/protocol/index.js.map +1 -1
  89. package/dist/cores/protocol/protocol-service.d.ts +3 -3
  90. package/dist/cores/protocol/protocol-service.js +235 -227
  91. package/dist/cores/protocol/protocol-service.js.map +1 -1
  92. package/dist/cores/storage/http-storage-service.js +65 -85
  93. package/dist/cores/storage/http-storage-service.js.map +1 -1
  94. package/dist/cores/storage/model-manager.js +66 -85
  95. package/dist/cores/storage/model-manager.js.map +1 -1
  96. package/dist/cores/storage/proxy-storage-service.d.ts +2 -2
  97. package/dist/cores/storage/proxy-storage-service.js +562 -599
  98. package/dist/cores/storage/proxy-storage-service.js.map +1 -1
  99. package/dist/cores/storage/redis-storage-service.js +163 -177
  100. package/dist/cores/storage/redis-storage-service.js.map +1 -1
  101. package/dist/cores/storage/storage-service.js +281 -322
  102. package/dist/cores/storage/storage-service.js.map +1 -1
  103. package/dist/engine/builder.d.ts +1 -1
  104. package/dist/engine/builder.js +59 -63
  105. package/dist/engine/builder.js.map +1 -1
  106. package/dist/engine/engine.d.ts +4 -4
  107. package/dist/engine/engine.js +9 -18
  108. package/dist/engine/engine.js.map +1 -1
  109. package/dist/engine/types.d.ts +1 -1
  110. package/dist/engine/utilities.d.ts +5 -5
  111. package/dist/engine/utilities.js +301 -293
  112. package/dist/engine/utilities.js.map +1 -1
  113. package/dist/environ.js +4 -6
  114. package/dist/environ.js.map +1 -1
  115. package/dist/extended/abstract-service.js +595 -645
  116. package/dist/extended/abstract-service.js.map +1 -1
  117. package/dist/extended/libs/sig-v4.js.map +1 -1
  118. package/dist/generated/field-registry.d.ts +10 -0
  119. package/dist/generated/field-registry.js +17 -0
  120. package/dist/generated/field-registry.js.map +1 -0
  121. package/dist/helpers/helpers.d.ts +17 -9
  122. package/dist/helpers/helpers.js +88 -78
  123. package/dist/helpers/helpers.js.map +1 -1
  124. package/dist/index.js +17 -7
  125. package/dist/index.js.map +1 -1
  126. package/dist/lib/dynamodb-value.js +2 -3
  127. package/dist/lib/dynamodb-value.js.map +1 -1
  128. package/dist/tools/express.js +4 -5
  129. package/dist/tools/express.js.map +1 -1
  130. package/dist/tools/tools.d.ts +3 -1
  131. package/dist/tools/tools.js +14 -21
  132. package/dist/tools/tools.js.map +1 -1
  133. package/package.json +19 -18
  134. package/dist/exec-cli.d.ts +0 -2
  135. package/dist/exec-cli.js +0 -211
  136. package/dist/exec-cli.js.map +0 -1
  137. package/dist/lib/dynamo/expressions.d.ts +0 -14
  138. package/dist/lib/dynamo/expressions.js +0 -212
  139. package/dist/lib/dynamo/expressions.js.map +0 -1
  140. package/dist/lib/dynamo/query.d.ts +0 -43
  141. package/dist/lib/dynamo/query.js +0 -246
  142. package/dist/lib/dynamo/query.js.map +0 -1
  143. package/dist/lib/dynamo/scan.d.ts +0 -33
  144. package/dist/lib/dynamo/scan.js +0 -172
  145. package/dist/lib/dynamo/scan.js.map +0 -1
  146. package/dist/lib/dynamo/serializer.d.ts +0 -12
  147. package/dist/lib/dynamo/serializer.js +0 -243
  148. package/dist/lib/dynamo/serializer.js.map +0 -1
  149. package/dist/lib/dynamo/utils.d.ts +0 -15
  150. package/dist/lib/dynamo/utils.js +0 -129
  151. package/dist/lib/dynamo/utils.js.map +0 -1
  152. package/dist/tools/shared.d.ts +0 -28
  153. package/dist/tools/shared.js +0 -143
  154. package/dist/tools/shared.js.map +0 -1
@@ -15,22 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
34
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
35
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
37
  };
@@ -69,6 +70,16 @@ exports.HEADER_PROTOCOL_CONTEXT = engine_1.$U.env('HEADER_PROTOCOL_CONTEXT', 'x-
69
70
  * - support protocol via `API(WEB)` + `SNS` + `SQS`
70
71
  */
71
72
  class MyProtocolService {
73
+ //* shared config.
74
+ static REPORT_ERROR = lambda_handler_1.LambdaHandler.REPORT_ERROR;
75
+ //* transformers
76
+ web = new WEBProtocolTransformer(this);
77
+ sns = new SNSProtocolTransformer(this);
78
+ sqs = new SQSProtocolTransformer(this);
79
+ // config-service to use.
80
+ config;
81
+ // self service name
82
+ selfService;
72
83
  /**
73
84
  * default constructor.
74
85
  *
@@ -76,18 +87,34 @@ class MyProtocolService {
76
87
  * @param config config-service to use (for debug)
77
88
  */
78
89
  constructor(service, config) {
79
- //* transformers
80
- this.web = new WEBProtocolTransformer(this);
81
- this.sns = new SNSProtocolTransformer(this);
82
- this.sqs = new SQSProtocolTransformer(this);
83
- /**
84
- * say hello() of this service
85
- */
86
- this.hello = () => `protocol-service:${this.selfService || ''}`;
87
90
  // _log(NS, `MyProtocolService()..`);
88
91
  this.selfService = `${service || ''}`;
89
92
  this.config = config ? config : config_1.default.config; // use default config-service.
90
93
  }
94
+ /**
95
+ * say hello() of this service
96
+ */
97
+ hello = () => `protocol-service:${this.selfService || ''}`;
98
+ //* determine path part
99
+ static asPath = (type, id, cmd) => {
100
+ const buf = [''];
101
+ const enc = (_) => encodeURIComponent(_);
102
+ const esc = (_) => encodeURI(_);
103
+ //* add type by default
104
+ buf.push(enc(`${type || ''}`));
105
+ if (id !== undefined && id !== null) {
106
+ buf.push(enc(`${id}`));
107
+ if (cmd) {
108
+ buf.push(esc(`${cmd}`));
109
+ }
110
+ }
111
+ else if (cmd) {
112
+ buf.push('');
113
+ buf.push(esc(`${cmd}`));
114
+ }
115
+ const path = buf.join('/');
116
+ return path && path != '/' ? path : '';
117
+ };
91
118
  /**
92
119
  * load transformer
93
120
  */
@@ -203,16 +230,14 @@ class MyProtocolService {
203
230
  /**
204
231
  * internal safe report-error.
205
232
  */
206
- doReportError(e, context, event, data) {
207
- return __awaiter(this, void 0, void 0, function* () {
208
- if (!MyProtocolService.REPORT_ERROR)
209
- throw e;
210
- (0, engine_1._err)(NS, `! err@report =`, e);
211
- return (0, engine_1.doReportError)(e, context, event, data)
212
- .catch(() => { })
213
- .then(() => {
214
- throw e instanceof Error ? e : new Error(typeof e == 'string' ? e : engine_1.$U.json(e));
215
- });
233
+ async doReportError(e, context, event, data) {
234
+ if (!MyProtocolService.REPORT_ERROR)
235
+ throw e;
236
+ (0, engine_1._err)(NS, `! err@report =`, e);
237
+ return (0, engine_1.doReportError)(e, context, event, data)
238
+ .catch(() => { })
239
+ .then(() => {
240
+ throw e instanceof Error ? e : new Error(typeof e == 'string' ? e : engine_1.$U.json(e));
216
241
  });
217
242
  }
218
243
  /**
@@ -245,7 +270,7 @@ class MyProtocolService {
245
270
  const qs = uri.query;
246
271
  if (qs) {
247
272
  const qs2 = engine_1.$U.qs.parse(qs);
248
- param = Object.assign(Object.assign({}, qs2), param);
273
+ param = { ...qs2, ...param };
249
274
  }
250
275
  //* prepare protocol-param.
251
276
  const proto = {
@@ -255,7 +280,7 @@ class MyProtocolService {
255
280
  stage,
256
281
  id: id ? decodeURIComponent(id) : id,
257
282
  cmd: cmd ? decodeURI(cmd) : cmd,
258
- context: Object.assign({}, context),
283
+ context: { ...context },
259
284
  };
260
285
  if (param !== undefined)
261
286
  proto.param = param;
@@ -281,68 +306,66 @@ class MyProtocolService {
281
306
  * @param config config service (for debug)
282
307
  * @param uri (optional) if useing custom uri.
283
308
  */
284
- execute(param, config, uri) {
285
- return __awaiter(this, void 0, void 0, function* () {
286
- // const _log = console.info;
287
- config = config || this.config;
288
- (0, engine_1._log)(NS, `execute(${param.service || ''})..`);
289
- //* execute via lambda call.
290
- uri = uri || this.asProtocolURI('web', param, config);
291
- (0, engine_1._inf)(NS, `> uri =`, uri);
292
- // const url = new URL(uri);
293
- const url = url_1.default.parse(uri);
294
- const payload = this.transformEvent(uri, param);
295
- //* prepare lambda payload.
296
- const params = {
297
- FunctionName: url.hostname,
298
- Payload: payload ? new TextEncoder().encode(engine_1.$U.json(payload)) : undefined,
299
- ClientContext: undefined,
300
- // InvocationType: 'Event',
301
- };
302
- // _log(NS, `> params =`, $U.json(params));
303
- //* call lambda.
304
- const region = 'ap-northeast-2'; //TODO - optimize of aws region....
305
- const lambda = new client_lambda_1.LambdaClient((0, tools_1.awsConfig)(engine_1.default, region));
306
- const response = yield lambda
307
- .send(new client_lambda_1.InvokeCommand(params))
308
- .catch((e) => {
309
- (0, engine_1._err)(NS, `! execute[${param.service || ''}].err =`, typeof e, e);
310
- // return this.doReportError(e, param.context, null, { protocol: uri, param });
311
- throw e;
312
- })
313
- .then((data) => {
314
- (0, engine_1._log)(NS, `! execute[${param.service || ''}].res =`, engine_1.$U.S(data, 320, 64, ' .... '));
315
- const payload = data && (data === null || data === void 0 ? void 0 : data.Payload) ? JSON.parse(Buffer.from(data.Payload).toString()) : {};
316
- const statusCode = engine_1.$U.N(payload.statusCode || (data && data.StatusCode), 200);
317
- (0, engine_1._log)(NS, `> Lambda[${params.FunctionName}].StatusCode :=`, statusCode);
318
- [200, 201].includes(statusCode) || (0, engine_1._inf)(NS, `> WARN! status[${statusCode}] data =`, engine_1.$U.S(data)); // print whole data if not 200.
319
- //* safe parse payload.body.
320
- const body = (() => {
321
- try {
322
- if (payload.text && typeof payload.text == 'string')
323
- return payload.text;
324
- return payload.body && typeof payload.body == 'string'
325
- ? JSON.parse(payload.body)
326
- : payload.body;
327
- }
328
- catch (e) {
329
- (0, engine_1._log)(NS, `> WARN! payload.body =`, engine_1.$U.S(payload.body));
330
- return payload.body;
331
- }
332
- })();
333
- //* returns
334
- if (statusCode == 400 || statusCode == 404)
335
- return Promise.reject(new Error(engine_1.$U.S(body) || '404 NOT FOUND'));
336
- else if (statusCode != 200 && statusCode != 201) {
337
- if (typeof body == 'string' && body.startsWith('404 NOT FOUND'))
338
- throw new Error(body);
339
- throw new Error(engine_1.$U.S(body) || `Lambda Error. status:${statusCode}`);
309
+ async execute(param, config, uri) {
310
+ // const _log = console.info;
311
+ config = config || this.config;
312
+ (0, engine_1._log)(NS, `execute(${param.service || ''})..`);
313
+ //* execute via lambda call.
314
+ uri = uri || this.asProtocolURI('web', param, config);
315
+ (0, engine_1._inf)(NS, `> uri =`, uri);
316
+ // const url = new URL(uri);
317
+ const url = url_1.default.parse(uri);
318
+ const payload = this.transformEvent(uri, param);
319
+ //* prepare lambda payload.
320
+ const params = {
321
+ FunctionName: url.hostname,
322
+ Payload: payload ? new TextEncoder().encode(engine_1.$U.json(payload)) : undefined,
323
+ ClientContext: undefined,
324
+ // InvocationType: 'Event',
325
+ };
326
+ // _log(NS, `> params =`, $U.json(params));
327
+ //* call lambda.
328
+ const region = 'ap-northeast-2'; //TODO - optimize of aws region....
329
+ const lambda = new client_lambda_1.LambdaClient((0, tools_1.awsConfig)(engine_1.default, region));
330
+ const response = await lambda
331
+ .send(new client_lambda_1.InvokeCommand(params))
332
+ .catch((e) => {
333
+ (0, engine_1._err)(NS, `! execute[${param.service || ''}].err =`, typeof e, e);
334
+ // return this.doReportError(e, param.context, null, { protocol: uri, param });
335
+ throw e;
336
+ })
337
+ .then((data) => {
338
+ (0, engine_1._log)(NS, `! execute[${param.service || ''}].res =`, engine_1.$U.S(data, 320, 64, ' .... '));
339
+ const payload = data && data?.Payload ? JSON.parse(Buffer.from(data.Payload).toString()) : {};
340
+ const statusCode = engine_1.$U.N(payload.statusCode || (data && data.StatusCode), 200);
341
+ (0, engine_1._log)(NS, `> Lambda[${params.FunctionName}].StatusCode :=`, statusCode);
342
+ [200, 201].includes(statusCode) || (0, engine_1._inf)(NS, `> WARN! status[${statusCode}] data =`, engine_1.$U.S(data)); // print whole data if not 200.
343
+ //* safe parse payload.body.
344
+ const body = (() => {
345
+ try {
346
+ if (payload.text && typeof payload.text == 'string')
347
+ return payload.text;
348
+ return payload.body && typeof payload.body == 'string'
349
+ ? JSON.parse(payload.body)
350
+ : payload.body;
351
+ }
352
+ catch (e) {
353
+ (0, engine_1._log)(NS, `> WARN! payload.body =`, engine_1.$U.S(payload.body));
354
+ return payload.body;
340
355
  }
341
- return body;
342
- });
343
- const res = response;
344
- return res;
356
+ })();
357
+ //* returns
358
+ if (statusCode == 400 || statusCode == 404)
359
+ return Promise.reject(new Error(engine_1.$U.S(body) || '404 NOT FOUND'));
360
+ else if (statusCode != 200 && statusCode != 201) {
361
+ if (typeof body == 'string' && body.startsWith('404 NOT FOUND'))
362
+ throw new Error(body);
363
+ throw new Error(engine_1.$U.S(body) || `Lambda Error. status:${statusCode}`);
364
+ }
365
+ return body;
345
366
  });
367
+ const res = response;
368
+ return res;
346
369
  }
347
370
  /**
348
371
  * Asynchronized call to target function via `SNS`
@@ -351,34 +374,32 @@ class MyProtocolService {
351
374
  * @param callback the return target
352
375
  * @param config config service (for debug)
353
376
  */
354
- notify(param, callback, config) {
355
- return __awaiter(this, void 0, void 0, function* () {
356
- // const _log = console.info;
357
- config = config || this.config;
358
- const service = `${param.service || config.getService() || ''}`;
359
- (0, engine_1._log)(NS, `notify(${service})..`);
360
- const uri = this.asProtocolURI('sns', param, config);
361
- (0, engine_1._inf)(NS, `> uri[${service}] =`, uri);
362
- const cbUrl = callback ? this.asCallbackURI(param.context, callback) : null;
363
- const params = this.sns.transformToEvent(uri, param, cbUrl);
364
- const arn = params.TopicArn; // "arn:aws:sns:ap-northeast-2:796730245826:lemon-metrics-sns-dev"
365
- // _inf(NS, `> arn[${service}] =`, arn);
366
- (0, engine_1._inf)(NS, `> payload[${arn}] =`, engine_1.$U.json(params));
367
- //* call sns
368
- const region = arn.split(':')[3] || 'ap-northeast-2';
369
- const sns = new client_sns_1.SNSClient((0, tools_1.awsConfig)(engine_1.default, region));
370
- const res = yield sns
371
- .send(new client_sns_1.PublishCommand(params))
372
- .catch((e) => {
373
- (0, engine_1._err)(NS, `! notify[${param.service || ''}].err =`, typeof e, e);
374
- return this.doReportError(e, param.context, null, { protocol: uri, param });
375
- })
376
- .then((data) => {
377
- (0, engine_1._log)(NS, `> res[${service}] =`, engine_1.$U.json(data));
378
- return data.MessageId;
379
- });
380
- return res;
377
+ async notify(param, callback, config) {
378
+ // const _log = console.info;
379
+ config = config || this.config;
380
+ const service = `${param.service || config.getService() || ''}`;
381
+ (0, engine_1._log)(NS, `notify(${service})..`);
382
+ const uri = this.asProtocolURI('sns', param, config);
383
+ (0, engine_1._inf)(NS, `> uri[${service}] =`, uri);
384
+ const cbUrl = callback ? this.asCallbackURI(param.context, callback) : null;
385
+ const params = this.sns.transformToEvent(uri, param, cbUrl);
386
+ const arn = params.TopicArn; // "arn:aws:sns:ap-northeast-2:796730245826:lemon-metrics-sns-dev"
387
+ // _inf(NS, `> arn[${service}] =`, arn);
388
+ (0, engine_1._inf)(NS, `> payload[${arn}] =`, engine_1.$U.json(params));
389
+ //* call sns
390
+ const region = arn.split(':')[3] || 'ap-northeast-2';
391
+ const sns = new client_sns_1.SNSClient((0, tools_1.awsConfig)(engine_1.default, region));
392
+ const res = await sns
393
+ .send(new client_sns_1.PublishCommand(params))
394
+ .catch((e) => {
395
+ (0, engine_1._err)(NS, `! notify[${param.service || ''}].err =`, typeof e, e);
396
+ return this.doReportError(e, param.context, null, { protocol: uri, param });
397
+ })
398
+ .then((data) => {
399
+ (0, engine_1._log)(NS, `> res[${service}] =`, engine_1.$U.json(data));
400
+ return data.MessageId;
381
401
  });
402
+ return res;
382
403
  }
383
404
  /**
384
405
  * Asynchronized call to target function via `SQS`
@@ -388,40 +409,38 @@ class MyProtocolService {
388
409
  * @param delaySeconds the delayed seconds
389
410
  * @param config config service (for debug)
390
411
  */
391
- enqueue(param, callback, delaySeconds, config) {
392
- return __awaiter(this, void 0, void 0, function* () {
393
- // const _log = console.info;
394
- config = config || this.config;
395
- const service = `${param.service || config.getService() || ''}`;
396
- const stage = `${param.stage || config.getStage() || ''}`;
397
- (0, engine_1._log)(NS, `enqueue(${service}-${stage})..`);
398
- const uri = this.asProtocolURI('sqs', param, config);
399
- (0, engine_1._inf)(NS, `> uri[${service}] =`, uri);
400
- delaySeconds = engine_1.$U.N(delaySeconds, 10);
401
- if (delaySeconds < 0)
402
- throw new Error(`@delaySeconds (number) should be >= 0. but ${delaySeconds}`);
403
- const cbUrl = callback ? this.asCallbackURI(param.context, callback) : null;
404
- (0, engine_1._inf)(NS, `> callback[${service}] =`, cbUrl);
405
- const params = this.sqs.transformToEvent(uri, param, cbUrl);
406
- params.DelaySeconds = delaySeconds;
407
- const endpoint = params.QueueUrl; // https://sqs.${arr[3]}.amazonaws.com
408
- // _inf(NS, `> endpoint[${service}] =`, endpoint);
409
- (0, engine_1._inf)(NS, `> payload[${endpoint}] =`, engine_1.$U.json(params));
410
- //* call sns
411
- const region = endpoint.split('.')[1] || 'ap-northeast-2';
412
- const sqs = new client_sqs_1.SQSClient((0, tools_1.awsConfig)(engine_1.default, region));
413
- const res = yield sqs
414
- .send(new client_sqs_1.SendMessageCommand(params))
415
- .catch((e) => {
416
- (0, engine_1._err)(NS, `! enqueue[${param.service || ''}].err =`, typeof e, e);
417
- return this.doReportError(e, param.context, null, { protocol: uri, param });
418
- })
419
- .then((data) => {
420
- (0, engine_1._log)(NS, `> res[${endpoint}] =`, engine_1.$U.json(data));
421
- return data.MessageId;
422
- });
423
- return res;
412
+ async enqueue(param, callback, delaySeconds, config) {
413
+ // const _log = console.info;
414
+ config = config || this.config;
415
+ const service = `${param.service || config.getService() || ''}`;
416
+ const stage = `${param.stage || config.getStage() || ''}`;
417
+ (0, engine_1._log)(NS, `enqueue(${service}-${stage})..`);
418
+ const uri = this.asProtocolURI('sqs', param, config);
419
+ (0, engine_1._inf)(NS, `> uri[${service}] =`, uri);
420
+ delaySeconds = engine_1.$U.N(delaySeconds, 10);
421
+ if (delaySeconds < 0)
422
+ throw new Error(`@delaySeconds (number) should be >= 0. but ${delaySeconds}`);
423
+ const cbUrl = callback ? this.asCallbackURI(param.context, callback) : null;
424
+ (0, engine_1._inf)(NS, `> callback[${service}] =`, cbUrl);
425
+ const params = this.sqs.transformToEvent(uri, param, cbUrl);
426
+ params.DelaySeconds = delaySeconds;
427
+ const endpoint = params.QueueUrl; // https://sqs.${arr[3]}.amazonaws.com
428
+ // _inf(NS, `> endpoint[${service}] =`, endpoint);
429
+ (0, engine_1._inf)(NS, `> payload[${endpoint}] =`, engine_1.$U.json(params));
430
+ //* call sns
431
+ const region = endpoint.split('.')[1] || 'ap-northeast-2';
432
+ const sqs = new client_sqs_1.SQSClient((0, tools_1.awsConfig)(engine_1.default, region));
433
+ const res = await sqs
434
+ .send(new client_sqs_1.SendMessageCommand(params))
435
+ .catch((e) => {
436
+ (0, engine_1._err)(NS, `! enqueue[${param.service || ''}].err =`, typeof e, e);
437
+ return this.doReportError(e, param.context, null, { protocol: uri, param });
438
+ })
439
+ .then((data) => {
440
+ (0, engine_1._log)(NS, `> res[${endpoint}] =`, engine_1.$U.json(data));
441
+ return data.MessageId;
424
442
  });
443
+ return res;
425
444
  }
426
445
  /**
427
446
  * broadcast body message via shared `SNS` Subscritions. (see `NotificationHandler`)
@@ -432,70 +451,46 @@ class MyProtocolService {
432
451
  * @param body the message body to broadcast.
433
452
  * @returns the message-id if applicable.
434
453
  */
435
- broadcast(context, endpoint, body) {
436
- return __awaiter(this, void 0, void 0, function* () {
437
- const service = this.myProtocolURI(context);
438
- (0, engine_1._log)(NS, `broadcast(${service})..`);
439
- (0, engine_1._log)(NS, `> body[${service}] =`, engine_1.$U.json(body));
440
- const arn = yield aws_1.default.sns.endpoint(endpoint);
441
- (0, engine_1._inf)(NS, `> arn[${endpoint}] =`, arn);
442
- const accountId = `${(context && context.accountId) || ''}`;
443
- const requestId = `${(context && context.requestId) || ''}`;
444
- const params = {
445
- TopicArn: arn,
446
- Subject: `x-protocol-service/broadcast`,
447
- Message: JSON.stringify({ default: engine_1.$U.json(body) }),
448
- // Message: JSON.stringify({ default: param }),
449
- MessageAttributes: {
450
- // accountId: { DataType: 'String', StringValue: accountId },
451
- // requestId: { DataType: 'String', StringValue: requestId },
452
- },
453
- MessageStructure: 'json',
454
- };
455
- if (accountId)
456
- params.MessageAttributes['accountId'] = { DataType: 'String', StringValue: accountId };
457
- if (requestId)
458
- params.MessageAttributes['requestId'] = { DataType: 'String', StringValue: requestId };
459
- //* call sns
460
- const region = arn.split(':')[3] || 'ap-northeast-2';
461
- const sns = new client_sns_1.SNSClient((0, tools_1.awsConfig)(engine_1.default, region));
462
- const res = yield sns
463
- .send(new client_sns_1.PublishCommand(params))
464
- .catch((e) => {
465
- (0, engine_1._err)(NS, `! broadcast[${service || ''}].err =`, typeof e, e);
466
- return this.doReportError(e, context, null, { endpoint, body });
467
- })
468
- .then((data) => {
469
- (0, engine_1._log)(NS, `> res[${service}] =`, engine_1.$U.json(data));
470
- return data.MessageId;
471
- });
472
- return res;
454
+ async broadcast(context, endpoint, body) {
455
+ const service = this.myProtocolURI(context);
456
+ (0, engine_1._log)(NS, `broadcast(${service})..`);
457
+ (0, engine_1._log)(NS, `> body[${service}] =`, engine_1.$U.json(body));
458
+ const arn = await aws_1.default.sns.endpoint(endpoint);
459
+ (0, engine_1._inf)(NS, `> arn[${endpoint}] =`, arn);
460
+ const accountId = `${(context && context.accountId) || ''}`;
461
+ const requestId = `${(context && context.requestId) || ''}`;
462
+ const params = {
463
+ TopicArn: arn,
464
+ Subject: `x-protocol-service/broadcast`, //NOTE! - can be no 'Subject' if subscribed as HTTP SNS.
465
+ Message: JSON.stringify({ default: engine_1.$U.json(body) }), //NOTE! - only body data is required.
466
+ // Message: JSON.stringify({ default: param }),
467
+ MessageAttributes: {
468
+ // accountId: { DataType: 'String', StringValue: accountId },
469
+ // requestId: { DataType: 'String', StringValue: requestId },
470
+ },
471
+ MessageStructure: 'json',
472
+ };
473
+ if (accountId)
474
+ params.MessageAttributes['accountId'] = { DataType: 'String', StringValue: accountId };
475
+ if (requestId)
476
+ params.MessageAttributes['requestId'] = { DataType: 'String', StringValue: requestId };
477
+ //* call sns
478
+ const region = arn.split(':')[3] || 'ap-northeast-2';
479
+ const sns = new client_sns_1.SNSClient((0, tools_1.awsConfig)(engine_1.default, region));
480
+ const res = await sns
481
+ .send(new client_sns_1.PublishCommand(params))
482
+ .catch((e) => {
483
+ (0, engine_1._err)(NS, `! broadcast[${service || ''}].err =`, typeof e, e);
484
+ return this.doReportError(e, context, null, { endpoint, body });
485
+ })
486
+ .then((data) => {
487
+ (0, engine_1._log)(NS, `> res[${service}] =`, engine_1.$U.json(data));
488
+ return data.MessageId;
473
489
  });
490
+ return res;
474
491
  }
475
492
  }
476
493
  exports.MyProtocolService = MyProtocolService;
477
- //* shared config.
478
- MyProtocolService.REPORT_ERROR = lambda_handler_1.LambdaHandler.REPORT_ERROR;
479
- //* determine path part
480
- MyProtocolService.asPath = (type, id, cmd) => {
481
- const buf = [''];
482
- const enc = (_) => encodeURIComponent(_);
483
- const esc = (_) => encodeURI(_);
484
- //* add type by default
485
- buf.push(enc(`${type || ''}`));
486
- if (id !== undefined && id !== null) {
487
- buf.push(enc(`${id}`));
488
- if (cmd) {
489
- buf.push(esc(`${cmd}`));
490
- }
491
- }
492
- else if (cmd) {
493
- buf.push('');
494
- buf.push(esc(`${cmd}`));
495
- }
496
- const path = buf.join('/');
497
- return path && path != '/' ? path : '';
498
- };
499
494
  /**
500
495
  * class: `WEBProtocolTransformer`
501
496
  * - transformer for `WEB` Handler
@@ -524,14 +519,26 @@ class WEBProtocolTransformer {
524
519
  //* build http parameter
525
520
  const base = {};
526
521
  const $ctx = {};
527
- const event = Object.assign(Object.assign({}, base), { headers: {
522
+ const event = {
523
+ ...base,
524
+ headers: {
528
525
  [exports.HEADER_PROTOCOL_CONTEXT]: engine_1.$U.json(context),
529
- }, path,
530
- httpMethod, pathParameters: { type, id, cmd }, queryStringParameters: param.param, requestContext: Object.assign(Object.assign({}, $ctx), { path,
531
- httpMethod, identity: null, // must be 'null' due to not compartible with AWS auth.
526
+ },
527
+ path,
528
+ httpMethod,
529
+ pathParameters: { type, id, cmd },
530
+ queryStringParameters: param.param,
531
+ requestContext: {
532
+ ...$ctx,
533
+ path,
534
+ httpMethod,
535
+ identity: null, // must be 'null' due to not compartible with AWS auth.
532
536
  stage,
533
537
  accountId,
534
- requestId }), body: param.body ? engine_1.$U.json(param.body) : null });
538
+ requestId,
539
+ },
540
+ body: param.body ? engine_1.$U.json(param.body) : null,
541
+ };
535
542
  const res = event;
536
543
  return res;
537
544
  }
@@ -540,8 +547,7 @@ class WEBProtocolTransformer {
540
547
  * @param event the lambda compartible event data.
541
548
  */
542
549
  transformToParam(event, context) {
543
- var _a, _b, _c;
544
- const errScope = `web.transformToParam(${(_a = event === null || event === void 0 ? void 0 : event.path) !== null && _a !== void 0 ? _a : ''})`;
550
+ const errScope = `web.transformToParam(${event?.path ?? ''})`;
545
551
  if (!event)
546
552
  throw new Error(`@event (API Event) is required - ${errScope}`); // avoid null exception.
547
553
  const headers = event.headers;
@@ -606,10 +612,10 @@ class WEBProtocolTransformer {
606
612
  const type = $path.type || `${resource || path || ''}`.split('/')[1] || ''; // 1st path param will be type of resource.
607
613
  const mode = httpMethod == 'GET' && !$path.id && !$path.cmd ? 'LIST' : `${httpMethod}`.toUpperCase();
608
614
  //* validate values.
609
- if ((context === null || context === void 0 ? void 0 : context.accountId) && requestContext.accountId != context.accountId)
610
- throw new Error(`400 INVALID CONTEXT - accountId:${(_b = context.accountId) !== null && _b !== void 0 ? _b : ''} @${errScope}`);
611
- if ((context === null || context === void 0 ? void 0 : context.requestId) && requestContext.requestId != context.requestId)
612
- throw new Error(`400 INVALID CONTEXT - requestId:${(_c = context.requestId) !== null && _c !== void 0 ? _c : ''} @${errScope}`);
615
+ if (context?.accountId && requestContext.accountId != context.accountId)
616
+ throw new Error(`400 INVALID CONTEXT - accountId:${context.accountId ?? ''} @${errScope}`);
617
+ if (context?.requestId && requestContext.requestId != context.requestId)
618
+ throw new Error(`400 INVALID CONTEXT - requestId:${context.requestId ?? ''} @${errScope}`);
613
619
  //* pack as protocol-param.
614
620
  const res = { service, stage, type, mode, id: $path.id, cmd: $path.cmd, param, body, context };
615
621
  return res;
@@ -621,6 +627,7 @@ exports.WEBProtocolTransformer = WEBProtocolTransformer;
621
627
  * - transformer for `SNS` Handler
622
628
  */
623
629
  class SNSProtocolTransformer {
630
+ service;
624
631
  constructor(service) {
625
632
  this.service = service;
626
633
  }
@@ -696,6 +703,7 @@ exports.SNSProtocolTransformer = SNSProtocolTransformer;
696
703
  * - transformer for `SQS` Handler
697
704
  */
698
705
  class SQSProtocolTransformer {
706
+ service;
699
707
  constructor(service) {
700
708
  this.service = service;
701
709
  }