lemon-core 3.0.2 → 3.1.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 (115) hide show
  1. package/README.md +1 -0
  2. package/dist/common/test-helper.js +19 -11
  3. package/dist/common/test-helper.js.map +1 -1
  4. package/dist/controllers/general-api-controller.js +5 -5
  5. package/dist/controllers/general-api-controller.js.map +1 -1
  6. package/dist/controllers/general-controller.js +2 -1
  7. package/dist/controllers/general-controller.js.map +1 -1
  8. package/dist/controllers/index.js +6 -2
  9. package/dist/controllers/index.js.map +1 -1
  10. package/dist/cores/api-service.js +19 -18
  11. package/dist/cores/api-service.js.map +1 -1
  12. package/dist/cores/aws/aws-kms-service.js +10 -14
  13. package/dist/cores/aws/aws-kms-service.js.map +1 -1
  14. package/dist/cores/aws/aws-s3-service.js +19 -18
  15. package/dist/cores/aws/aws-s3-service.js.map +1 -1
  16. package/dist/cores/aws/aws-sns-service.js +10 -10
  17. package/dist/cores/aws/aws-sns-service.js.map +1 -1
  18. package/dist/cores/aws/aws-sqs-service.js +12 -12
  19. package/dist/cores/aws/aws-sqs-service.js.map +1 -1
  20. package/dist/cores/aws/index.js +1 -1
  21. package/dist/cores/cache-service.js +33 -33
  22. package/dist/cores/cache-service.js.map +1 -1
  23. package/dist/cores/config/config-service.js +11 -10
  24. package/dist/cores/config/config-service.js.map +1 -1
  25. package/dist/cores/core-services.js +6 -2
  26. package/dist/cores/core-services.js.map +1 -1
  27. package/dist/cores/dynamo-query-service.js +7 -7
  28. package/dist/cores/dynamo-query-service.js.map +1 -1
  29. package/dist/cores/dynamo-scan-service.js +8 -8
  30. package/dist/cores/dynamo-scan-service.js.map +1 -1
  31. package/dist/cores/dynamo-service.js +19 -19
  32. package/dist/cores/dynamo-service.js.map +1 -1
  33. package/dist/cores/elastic6-query-service.js +7 -7
  34. package/dist/cores/elastic6-query-service.js.map +1 -1
  35. package/dist/cores/elastic6-service.js +57 -65
  36. package/dist/cores/elastic6-service.js.map +1 -1
  37. package/dist/cores/http-storage-service.js +1 -1
  38. package/dist/cores/http-storage-service.js.map +1 -1
  39. package/dist/cores/index.d.ts +4 -4
  40. package/dist/cores/index.js +6 -2
  41. package/dist/cores/index.js.map +1 -1
  42. package/dist/cores/lambda/index.js +8 -4
  43. package/dist/cores/lambda/index.js.map +1 -1
  44. package/dist/cores/lambda/lambda-cognito-handler.js +2 -2
  45. package/dist/cores/lambda/lambda-cognito-handler.js.map +1 -1
  46. package/dist/cores/lambda/lambda-cron-handler.js +2 -2
  47. package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
  48. package/dist/cores/lambda/lambda-dynamo-stream-handler.js +20 -20
  49. package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
  50. package/dist/cores/lambda/lambda-handler.js +12 -11
  51. package/dist/cores/lambda/lambda-handler.js.map +1 -1
  52. package/dist/cores/lambda/lambda-notification-handler.js +10 -10
  53. package/dist/cores/lambda/lambda-notification-handler.js.map +1 -1
  54. package/dist/cores/lambda/lambda-sns-handler.js +13 -13
  55. package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
  56. package/dist/cores/lambda/lambda-sqs-handler.js +13 -13
  57. package/dist/cores/lambda/lambda-sqs-handler.js.map +1 -1
  58. package/dist/cores/lambda/lambda-web-handler.js +57 -52
  59. package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
  60. package/dist/cores/lambda/lambda-wss-handler.js +16 -12
  61. package/dist/cores/lambda/lambda-wss-handler.js.map +1 -1
  62. package/dist/cores/model-manager.js +11 -11
  63. package/dist/cores/model-manager.js.map +1 -1
  64. package/dist/cores/protocol/protocol-service.js +34 -33
  65. package/dist/cores/protocol/protocol-service.js.map +1 -1
  66. package/dist/cores/proxy-storage-service.js +7 -10
  67. package/dist/cores/proxy-storage-service.js.map +1 -1
  68. package/dist/cores/redis-storage-service.js +13 -13
  69. package/dist/cores/redis-storage-service.js.map +1 -1
  70. package/dist/cores/storage-service.js +8 -6
  71. package/dist/cores/storage-service.js.map +1 -1
  72. package/dist/engine/builder.js +27 -20
  73. package/dist/engine/builder.js.map +1 -1
  74. package/dist/engine/engine.js +53 -44
  75. package/dist/engine/engine.js.map +1 -1
  76. package/dist/engine/index.js +8 -4
  77. package/dist/engine/index.js.map +1 -1
  78. package/dist/engine/utilities.js +26 -31
  79. package/dist/engine/utilities.js.map +1 -1
  80. package/dist/environ.js +13 -6
  81. package/dist/environ.js.map +1 -1
  82. package/dist/exec-cli.js +26 -26
  83. package/dist/exec-cli.js.map +1 -1
  84. package/dist/helpers/helpers.d.ts +1 -1
  85. package/dist/helpers/helpers.js +18 -12
  86. package/dist/helpers/helpers.js.map +1 -1
  87. package/dist/helpers/index.js +6 -2
  88. package/dist/helpers/index.js.map +1 -1
  89. package/dist/index.d.ts +5 -5
  90. package/dist/index.js +7 -3
  91. package/dist/index.js.map +1 -1
  92. package/dist/lib/dynamo/expressions.js +35 -27
  93. package/dist/lib/dynamo/expressions.js.map +1 -1
  94. package/dist/lib/dynamo/query.js +24 -20
  95. package/dist/lib/dynamo/query.js.map +1 -1
  96. package/dist/lib/dynamo/scan.js +17 -13
  97. package/dist/lib/dynamo/scan.js.map +1 -1
  98. package/dist/lib/dynamo/serializer.js +11 -7
  99. package/dist/lib/dynamo/serializer.js.map +1 -1
  100. package/dist/lib/dynamo/utils.js +19 -14
  101. package/dist/lib/dynamo/utils.js.map +1 -1
  102. package/dist/lib/dynamodb-value.js +3 -3
  103. package/dist/lib/dynamodb-value.js.map +1 -1
  104. package/dist/lib/index.js +6 -2
  105. package/dist/lib/index.js.map +1 -1
  106. package/dist/tools/express.js +21 -15
  107. package/dist/tools/express.js.map +1 -1
  108. package/dist/tools/index.js +6 -2
  109. package/dist/tools/index.js.map +1 -1
  110. package/dist/tools/shared.js +12 -6
  111. package/dist/tools/shared.js.map +1 -1
  112. package/package.json +12 -12
  113. package/dist/tools/helpers.d.ts +0 -243
  114. package/dist/tools/helpers.js +0 -593
  115. package/dist/tools/helpers.js.map +0 -1
@@ -1,593 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.my_parrallel = exports.parseRange = exports.isUserAuthorized = exports.getIdentityId = exports.$event = exports.$slack = exports.$info = exports.$protocol = exports.$rand = exports.$T = void 0;
16
- /**
17
- * `helpers.ts`
18
- * - helper functions used globally in project
19
- *
20
- *
21
- * @author Steve Jung <steve@lemoncloud.io>
22
- * @date 2020-12-22 initial version
23
- * @date 2021-12-21 protocol support `//self` url.
24
- * @date 2021-12-23 optimize types of $protocol.
25
- * @date 2022-03-17 addition text processing. (S2, P)
26
- *
27
- * @copyright (C) 2021 LemonCloud Co Ltd. - All Rights Reserved.
28
- */
29
- const engine_1 = require("../engine/");
30
- const querystring_1 = __importDefault(require("querystring"));
31
- const perf_hooks_1 = require("perf_hooks");
32
- const cores_1 = __importDefault(require("../cores/"));
33
- const test_helper_1 = require("../common/test-helper");
34
- /**
35
- * Helpers to transform data-types.
36
- */
37
- exports.$T = {
38
- /**
39
- * transform to string w/ trim()
40
- */
41
- S: (val, def = '') => `${val !== null && val !== void 0 ? val : def}`.trim(),
42
- /**
43
- * as string w/o white-space.
44
- */
45
- S2: (val, def = '', delim = '') => `${val !== null && val !== void 0 ? val : def}`.replace(/\s+/g, delim),
46
- /**
47
- * transform to string[]
48
- */
49
- SS: (val, def = []) => {
50
- if (val === null || val === undefined)
51
- return def;
52
- if (typeof val === 'string')
53
- return val ? val.split(',').map(_ => exports.$T.S(_, '').trim()) : def;
54
- if (Array.isArray(val))
55
- return val.length > 0 ? val.map(_ => exports.$T.S(_, '').trim()) : def;
56
- return [exports.$T.S(val)];
57
- },
58
- /**
59
- * text to Plain text (remove html tag)
60
- */
61
- P: (text, max = 0) => {
62
- const msg = (typeof text === 'string' ? text : `${text || ''}`)
63
- .replace(/<[^>]*>/g, ' ') //! remove html tag.
64
- .replace(/[^a-zA-Z0-9가-힣ㅋ-ㅎㅏ-ㅣ\.\?]+/g, ' ') //! remove non-char.
65
- .trim();
66
- const len = msg.length;
67
- return max && len > max ? msg.substring(0, max) + '...' : msg;
68
- },
69
- /**
70
- * transform to number(integer).
71
- */
72
- N: (val, def = 0) => {
73
- const n = engine_1.$U.N(val, def);
74
- return Number.isNaN(n) ? def : n;
75
- },
76
- /**
77
- * number array
78
- */
79
- NN: (val, def = []) => {
80
- if (val === null || val === undefined)
81
- return def;
82
- if (typeof val === 'string')
83
- return val ? val.split(',').map(_ => exports.$T.N(_, 0)) : def;
84
- if (Array.isArray(val))
85
- return val.length > 0 ? val.map(_ => exports.$T.N(_, 0)) : def;
86
- return [exports.$T.N(val)];
87
- },
88
- /**
89
- * transform to number(float)
90
- */
91
- F: (val, def = 0) => engine_1.$U.F(val, def),
92
- /**
93
- * transform to number(float)[]
94
- */
95
- FF: (val, def = []) => {
96
- if (val === null || val === undefined)
97
- return def;
98
- if (typeof val === 'string')
99
- return val ? val.split(',').map(_ => exports.$T.F(_, 0)) : def;
100
- if (Array.isArray(val))
101
- return val.length > 0 ? val.map(_ => exports.$T.F(_, 0)) : def;
102
- return [exports.$T.F(val)];
103
- },
104
- B: (val, def = 0) => {
105
- if (val === null || val === undefined)
106
- return def;
107
- if (typeof val === 'boolean')
108
- return val ? 1 : 0;
109
- if (typeof val === 'string' && ['y', 'yes', 't', 'true'].includes(val.toLowerCase()))
110
- return 1;
111
- return engine_1.$U.N(val, def) && 1;
112
- },
113
- /**
114
- * transform to Time number via string | number.
115
- */
116
- T: (val, def = 0) => {
117
- const checkVal = `${val || ''}`.includes('-');
118
- if (checkVal) {
119
- if (engine_1.$U.dt(val))
120
- return engine_1.$U.dt(val).getTime();
121
- else
122
- throw new Error(`@val[${val}] is invalid!`);
123
- }
124
- else {
125
- return engine_1.$U.dt(engine_1.$U.N(val, def)).getTime();
126
- }
127
- },
128
- /**
129
- * transform to Date formatted string
130
- */
131
- D: (val, def = '') => {
132
- let s = exports.$T.S(val);
133
- let y;
134
- let m;
135
- let d;
136
- if (s.includes('-')) {
137
- [y, m, d] = s.split('-');
138
- }
139
- else {
140
- y = s.slice(0, 4);
141
- m = s.slice(4, 6);
142
- d = s.slice(6);
143
- }
144
- s = [y, m, d]
145
- .filter(e => (e === null || e === void 0 ? void 0 : e.length) > 0)
146
- .map(e => e.padStart(2, '0'))
147
- .join('-');
148
- if (y && y.length === 4 && !Number.isNaN(Date.parse(s)))
149
- return s;
150
- return def;
151
- },
152
- /**
153
- * date-time format
154
- */
155
- DT: (val, def = '2020-01-01') => {
156
- const s = exports.$T.D(val, '').split('-'); // must be valid date-format like '2000-01-02'
157
- const d = def.split('-');
158
- return d
159
- .map((d, i) => s[i] || d || '01')
160
- .map(e => e.padStart(2, '0'))
161
- .join('-');
162
- },
163
- /**
164
- * Extract Text
165
- */
166
- EX: (data, txt1, txt2) => {
167
- data = `${data || ''}`;
168
- const a = data.indexOf(txt1);
169
- const b = a >= 0 ? data.indexOf(txt2, a + txt1.length) : a;
170
- return b > a ? data.substring(a + txt1.length, b) : '';
171
- },
172
- /**
173
- * transform to simple-set.
174
- * @param val json object.
175
- */
176
- simples: (val, throws = false) => {
177
- //! validate if simple-type (string | number | null | undefined)
178
- const t = typeof val;
179
- if (val === undefined)
180
- return undefined;
181
- else if (val === null || val === '')
182
- return { _: null };
183
- else if (t === 'string' || t === 'number')
184
- return { _: val };
185
- else if (t === 'object' && !Array.isArray(val)) {
186
- const keys = Object.keys(val);
187
- const reName = /^[a-z_][a-zA-Z0-9_\-]*$/;
188
- return keys.reduce((N, k) => {
189
- const v = val[k];
190
- if (v === undefined) {
191
- //! NOP
192
- }
193
- else if (reName.test(k)) {
194
- const t = typeof v;
195
- if (v === null || v === '')
196
- N[k] = null;
197
- else if (t === 'string' || t === 'number')
198
- N[k] = v;
199
- else if (throws)
200
- throw new Error(`.${k}[${v}] is invalid!`);
201
- }
202
- else if (throws)
203
- throw new Error(`.${k} is invalid format!`);
204
- return N;
205
- }, {});
206
- }
207
- else if (throws)
208
- throw new Error(`@val[${t}] is invalid!`);
209
- return {};
210
- },
211
- /**
212
- * catch string between txt1 and txt2
213
- * @param data string
214
- * @param txt1 head
215
- * @param txt2 tail
216
- */
217
- catch: (data, txt1, txt2) => {
218
- data = typeof data == 'string' ? data : `${data}`;
219
- const a = data.indexOf(txt1);
220
- const b = a >= 0 ? data.indexOf(txt2, a + txt1.length) : a;
221
- const c = b > a ? data.substring(a + txt1.length, b) : '';
222
- return c;
223
- },
224
- /**
225
- * merge simple-set from $org to $new
226
- * @param $org the origin set
227
- * @param $new the update set.
228
- */
229
- merge: ($org, $new) => {
230
- if (!$new)
231
- return $org;
232
- return Object.keys($new).reduce((N, k) => {
233
- const val = $new[k];
234
- if (val === null || val === undefined)
235
- delete N[k];
236
- else
237
- N[k] = val;
238
- return N;
239
- }, Object.assign({}, $org));
240
- },
241
- /**
242
- * replace message with template.
243
- */
244
- template: (msg, set) => {
245
- // const msg = $U.env('MSG_PHONE_CODE', '인증 번호는 [{code}] 입니다.') as string;
246
- const tmp = Object.assign({}, set);
247
- return msg.replace(/\{(\w+)\}/g, (a, b) => (tmp[b] !== undefined ? `${tmp[b]}` : `{${b}}`));
248
- },
249
- /**
250
- * make random-code by length
251
- * @param size length of code
252
- * @param rand flag to use random (0 => 0, 1 => max)
253
- */
254
- makeRandomCode: (size = 6, rand) => {
255
- const flag = rand === undefined || rand === true || typeof rand == 'number' ? true : false;
256
- const min = size >= 1 ? Math.pow(10, size - 1) : 1;
257
- const max = 10 * min - 1;
258
- const val = min + (flag ? Math.floor((max - min) * (typeof rand == 'number' ? rand : Math.random())) : max - min);
259
- return { val, min, max };
260
- },
261
- /**
262
- * 객체 정규화 시킴.
263
- * - null 에 대해서는 특별히 처리.
264
- */
265
- normal: (N) => Object.keys(N || {}).reduce((M, k) => {
266
- if (k.startsWith('_') || k.startsWith('$'))
267
- return M;
268
- const v = N[k];
269
- //! `null` 은 DynamoDB에서 비어있는 문자임.
270
- M[k] = v === null ? '' : v;
271
- return M;
272
- }, {}),
273
- /**
274
- * transform list to map by `id`
275
- */
276
- asMap: (list, id = 'id') => list.reduce((M, N) => {
277
- const key = `${N[id] || ''}`;
278
- M[key] = N;
279
- return M;
280
- }, {}),
281
- /**
282
- * compare object, and extract the only diff properties.
283
- */
284
- diff: (A, B, onlyValid = false) => {
285
- if (!A || !B)
286
- return B;
287
- else if (typeof A !== 'object' || typeof B !== 'object')
288
- return B;
289
- return engine_1.$U
290
- .diff(A, B)
291
- .map(s => `${s || ''}`)
292
- .reduce((M, k) => {
293
- const org = A[k];
294
- const val = B[k];
295
- if (onlyValid) {
296
- if (val !== undefined && val !== null) {
297
- //! dynamo 에서는 null 과 '' 이 같음.
298
- if (org === null && val === '') {
299
- // NOP - due to same value.
300
- }
301
- else {
302
- M[k] = val;
303
- }
304
- }
305
- }
306
- else {
307
- M[k] = val === undefined && org !== undefined ? null : val;
308
- }
309
- return M;
310
- }, {});
311
- },
312
- /**
313
- * get $perf instance.
314
- * ```ts
315
- * const p = $T.perf()
316
- * const took = p.took();
317
- */
318
- perf: () => {
319
- return new (class MyPerfmance {
320
- constructor(t0) {
321
- this.took = () => {
322
- const t1 = perf_hooks_1.performance.now(); // start of processing
323
- const took = Math.round((t1 - this.t0) / 100) / 10; // in sec.
324
- return took;
325
- };
326
- this.t0 = t0 || perf_hooks_1.performance.now(); // start of processing
327
- }
328
- })();
329
- },
330
- /**
331
- * parse `.meta` property as object.
332
- * @param meta any
333
- */
334
- parseMeta: (meta) => {
335
- if (typeof meta === 'string' && meta) {
336
- try {
337
- if (meta.startsWith('[') && meta.endsWith(']')) {
338
- const list = JSON.parse(meta);
339
- const $ret = { list };
340
- return $ret;
341
- }
342
- else if (meta.startsWith('{') && meta.endsWith('}')) {
343
- return JSON.parse(meta);
344
- }
345
- else {
346
- const $ret = { type: 'string', value: meta };
347
- return $ret;
348
- }
349
- }
350
- catch (e) {
351
- const $ret = { type: 'string', value: meta, error: test_helper_1.GETERR(e) };
352
- return $ret;
353
- }
354
- }
355
- else if (meta === null || meta === undefined) {
356
- return null;
357
- }
358
- else if (typeof meta === 'object') {
359
- return meta;
360
- }
361
- else {
362
- const type = typeof meta;
363
- const $ret = { type, value: meta };
364
- return $ret;
365
- }
366
- },
367
- };
368
- /**
369
- * random number generator
370
- */
371
- exports.$rand = {
372
- /**
373
- * list of number[] in n-size.
374
- */
375
- range: (n) => [...Array(n).keys()],
376
- /**
377
- * generate random number
378
- */
379
- float: (from, to) => Math.random() * (to - from) + from,
380
- /**
381
- * generate multiple float numbers
382
- */
383
- floats: (from, to, n) => new Array(n).fill(0).map(() => exports.$rand.float(from, to)),
384
- /**
385
- * generate an integer
386
- */
387
- integer: (from, to) => Math.floor(exports.$rand.float(Math.ceil(from), Math.floor(to))),
388
- /**
389
- * generate multiple integers
390
- */
391
- integers: (from, to, n) => new Array(n).fill(0).map(() => exports.$rand.integer(from, to)),
392
- };
393
- /**
394
- * builder to support protocol-service.
395
- * @param context the current context (or service name).
396
- * @param service service name
397
- * @param options additional options.
398
- */
399
- exports.$protocol = (context = {}, service, options) => {
400
- //! for backward compartibility. shift arguments if 1st context is string.
401
- const ctx = typeof context === 'string' ? {} : context;
402
- service = typeof context === 'string' ? context : service;
403
- const param = typeof context === 'string' ? service : options === null || options === void 0 ? void 0 : options.param;
404
- const body = typeof context === 'string' ? param : options === null || options === void 0 ? void 0 : options.body;
405
- if (!ctx)
406
- throw new Error(`@context (NextContext) is required!`);
407
- if (!service)
408
- throw new Error(`@service (string) is required!`);
409
- const $proto = cores_1.default.protocol.service;
410
- const isProd = (options === null || options === void 0 ? void 0 : options.isProd) !== undefined ? options === null || options === void 0 ? void 0 : options.isProd : engine_1.$U.env('NS') === 'SS' ? true : false;
411
- //TODO - `STAGE` is not changed from env.yml file @211215.
412
- // _inf(NS, 'NS =', $U.env('NS'), $engine.cores.config.config.get('NS'), process.env['NS']);
413
- // _inf(NS, 'stage =', $U.env('STAGE'), $engine.cores.config.config.get('STAGE'), process.env['STAGE']); //NOTE - STAGE is not changed.
414
- //! prod용 lambda접근을 위한 환경 구성!!!!!
415
- const $param = (p, b, x) => {
416
- const protoParam = Object.assign(Object.assign({}, $proto.fromURL(ctx, asTargetUrl(), p || param, b || body)), x);
417
- if (isProd)
418
- protoParam.stage = 'prod';
419
- return protoParam;
420
- };
421
- const $callback = (callback) => {
422
- if (callback) {
423
- const [path, qs] = callback.split('?');
424
- if (path) {
425
- const [type, id, cmd] = path.split('/');
426
- const param = querystring_1.default.parse(qs);
427
- return { type, id, cmd, param };
428
- }
429
- }
430
- };
431
- //! find the target protocol-url from context.
432
- const asTargetUrl = () => {
433
- if (!service.startsWith('//'))
434
- throw new Error(`@service[${service}] (string) is invalid!`);
435
- if (service.startsWith('//self/')) {
436
- const self = $proto.myProtocolURI(ctx);
437
- const [a, b] = [self.indexOf('@'), self.indexOf('#')];
438
- const target = self.substring(a < 0 ? 'api://'.length : a + 1, b > a ? b : self.length) +
439
- service.substring('//self'.length);
440
- return `api://${target}`;
441
- }
442
- else {
443
- return `api:${service}`;
444
- }
445
- };
446
- //! execute via protocol-service.
447
- const execute = (param, body, mode = 'POST') => $proto.execute($param(param, body, { mode }));
448
- // eslint-disable-next-line prettier/prettier
449
- const enqueue = (param, body, mode = 'POST', callback, delaySeconds = 1) => $proto.enqueue($param(param, body, { mode }), $callback(callback), delaySeconds);
450
- const notify = (param, body, mode = 'POST', callback) => $proto.notify($param(param, body, { mode }), $callback(callback));
451
- //! returns instance.
452
- return {
453
- hello: () => `helper:protocol:${service || ''}`,
454
- asTargetUrl,
455
- execute,
456
- enqueue,
457
- notify,
458
- };
459
- };
460
- /**
461
- * get the current config info
462
- */
463
- exports.$info = () => {
464
- const $conf = cores_1.default.config.config;
465
- const service = $conf.getService();
466
- const version = $conf.getVersion();
467
- const stage = $conf.getStage();
468
- return { service, version, stage };
469
- };
470
- /**
471
- * send message to slack/public
472
- *
473
- * @param title 헤터 타이틀
474
- * @param text object or 텍스트 내용
475
- * @param pretext (optional) 텍스트 미리보기용.
476
- * @param params (optional) customize more options.
477
- */
478
- exports.$slack = (title, text, pretext, params) => __awaiter(void 0, void 0, void 0, function* () {
479
- var _a, _b;
480
- //! about current service.................
481
- const { service, version, stage } = exports.$info();
482
- const name = `${service}#${version}` + (stage !== 'prod' ? `/${stage}` : '');
483
- return engine_1.doReportSlack((params === null || params === void 0 ? void 0 : params.channel) ? `!${params === null || params === void 0 ? void 0 : params.channel}` : 'public', {
484
- channel: (_a = params === null || params === void 0 ? void 0 : params.channel) !== null && _a !== void 0 ? _a : undefined,
485
- attachments: [
486
- {
487
- color: `${(params === null || params === void 0 ? void 0 : params.color) || '#FFB71B' || 'good'}`,
488
- title,
489
- pretext: pretext !== null && pretext !== void 0 ? pretext : ((params === null || params === void 0 ? void 0 : params.scope) ? `#${name} [\`${params.scope}\`]` : undefined),
490
- text: typeof text === 'string' ? text : engine_1.$U.json(text),
491
- ts: Math.floor(engine_1.$U.current_time_ms() / 1000),
492
- fields: params === null || params === void 0 ? void 0 : params.fields,
493
- footer: (_b = params === null || params === void 0 ? void 0 : params.footer) !== null && _b !== void 0 ? _b : `${service}/${stage}#${version}`,
494
- },
495
- ],
496
- }, params === null || params === void 0 ? void 0 : params.context).catch(e => `#err:${test_helper_1.GETERR(e)}`);
497
- });
498
- /**
499
- * event producer builder
500
- * @param context current context
501
- * @param defEndpoint (optional) the default endpoint.
502
- */
503
- exports.$event = (context, defEndpoint = '') => {
504
- const $protocol = cores_1.default.protocol;
505
- const endpoint = engine_1.$U.env('EVENT_RELAY_SNS', defEndpoint);
506
- if (!endpoint)
507
- throw new Error(`env[EVENT_RELAY_SNS] is required - $event()`);
508
- return {
509
- publish: (body) => __awaiter(void 0, void 0, void 0, function* () { return $protocol.service.broadcast(context, endpoint, body); }),
510
- };
511
- };
512
- /**
513
- * authentication helper - get identity-id from context
514
- * @param ctx
515
- */
516
- function getIdentityId(ctx) {
517
- var _a;
518
- const identityId = (_a = ctx.identity) === null || _a === void 0 ? void 0 : _a.identityId;
519
- // for localhost development
520
- if (!identityId) {
521
- const profile = process.env.NAME;
522
- if (ctx.domain === 'localhost' && profile === 'lemon')
523
- return 'ap-northeast-2:009fa3a9-173f-440b-be74-2cf83370b08b';
524
- if (ctx.domain === 'localhost' && profile === 'colover')
525
- return 'ap-northeast-2:cef62bef-2f3e-4775-893f-7addb6efbeb3';
526
- }
527
- return identityId;
528
- }
529
- exports.getIdentityId = getIdentityId;
530
- /**
531
- * authentication helper - check user is authorized
532
- * - 이 메서드는 AWS IAM 인증 여부만을 확인한다.
533
- * - 따라서 true를 반환한다고 하여 회원 가입이 되어있다는 의미는 아니다.
534
- *
535
- * @param ctx the current context
536
- * @param param (optional) to override `identity` when running local.
537
- */
538
- function isUserAuthorized(ctx, param) {
539
- const identityId = getIdentityId(ctx);
540
- //NOTE - local 실행이라면 넘기자...
541
- if ((ctx === null || ctx === void 0 ? void 0 : ctx.clientIp) === '::1' && (ctx === null || ctx === void 0 ? void 0 : ctx.domain) === 'localhost') {
542
- ctx.identity = Object.assign({}, param); //! override with parameter.
543
- return true;
544
- }
545
- return !!identityId;
546
- }
547
- exports.isUserAuthorized = isUserAuthorized;
548
- /**
549
- * parse range expression
550
- * @param exp range expression (e.g. '[63100 TO 224000]' or '[* TO 150000}')
551
- */
552
- function parseRange(exp) {
553
- const match = exp.match(/^([\[{])([0-9]+|\*) TO ([0-9]+|\*)([}\]])$/);
554
- if (match && (match[2] !== '*' || match[3] !== '*')) {
555
- const range = {};
556
- if (match[2] !== '*') {
557
- const n = exports.$T.N(match[2]);
558
- if (match[1] === '[')
559
- range.gte = n;
560
- else if (match[1] === '{')
561
- range.gt = n;
562
- }
563
- if (match[3] !== '*') {
564
- const n = exports.$T.N(match[3]);
565
- if (match[4] === ']')
566
- range.lte = n;
567
- else if (match[4] === '}')
568
- range.lt = n;
569
- }
570
- return range;
571
- }
572
- }
573
- exports.parseRange = parseRange;
574
- /**
575
- * customized of `do_parrallel` for safe error-handling.
576
- * - use `.error` to report the internal error.
577
- */
578
- exports.my_parrallel = (list, func, size) => __awaiter(void 0, void 0, void 0, function* () {
579
- const results = yield engine_1.do_parrallel(list, (item, i) => {
580
- const ret = (() => {
581
- try {
582
- return func(item, i);
583
- }
584
- catch (e) {
585
- return Promise.reject(e);
586
- }
587
- })();
588
- const res = ret instanceof Promise ? ret : Promise.resolve(ret);
589
- return res.catch(e => ({ id: item.id, error: test_helper_1.GETERR(e) }));
590
- }, size);
591
- return results;
592
- });
593
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"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"}