lemon-core 3.0.2 → 3.1.2

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 (185) hide show
  1. package/README.md +3 -0
  2. package/dist/common/test-helper.js +19 -11
  3. package/dist/common/test-helper.js.map +1 -1
  4. package/dist/controllers/dummy-controller.d.ts +2 -2
  5. package/dist/controllers/dummy-controller.js +2 -2
  6. package/dist/controllers/dummy-controller.js.map +1 -1
  7. package/dist/controllers/general-api-controller.d.ts +2 -2
  8. package/dist/controllers/general-api-controller.js +5 -5
  9. package/dist/controllers/general-api-controller.js.map +1 -1
  10. package/dist/controllers/general-controller.d.ts +1 -1
  11. package/dist/controllers/general-controller.js +2 -1
  12. package/dist/controllers/general-controller.js.map +1 -1
  13. package/dist/controllers/index.js +6 -2
  14. package/dist/controllers/index.js.map +1 -1
  15. package/dist/cores/{api-service.d.ts → api/api-service.d.ts} +0 -0
  16. package/dist/cores/{api-service.js → api/api-service.js} +22 -21
  17. package/dist/cores/api/api-service.js.map +1 -0
  18. package/dist/cores/api/index.d.ts +10 -0
  19. package/dist/cores/api/index.js +27 -0
  20. package/dist/cores/api/index.js.map +1 -0
  21. package/dist/cores/aws/aws-kms-service.d.ts +53 -2
  22. package/dist/cores/aws/aws-kms-service.js +112 -29
  23. package/dist/cores/aws/aws-kms-service.js.map +1 -1
  24. package/dist/cores/aws/aws-s3-service.js +19 -18
  25. package/dist/cores/aws/aws-s3-service.js.map +1 -1
  26. package/dist/cores/aws/aws-sns-service.js +10 -10
  27. package/dist/cores/aws/aws-sns-service.js.map +1 -1
  28. package/dist/cores/aws/aws-sqs-service.js +12 -12
  29. package/dist/cores/aws/aws-sqs-service.js.map +1 -1
  30. package/dist/cores/aws/index.js +1 -1
  31. package/dist/cores/{cache-service.d.ts → cache/cache-service.d.ts} +77 -25
  32. package/dist/cores/{cache-service.js → cache/cache-service.js} +77 -47
  33. package/dist/cores/cache/cache-service.js.map +1 -0
  34. package/dist/cores/cache/index.d.ts +10 -0
  35. package/dist/cores/cache/index.js +27 -0
  36. package/dist/cores/cache/index.js.map +1 -0
  37. package/dist/cores/config/config-service.js +11 -10
  38. package/dist/cores/config/config-service.js.map +1 -1
  39. package/dist/cores/core-services.d.ts +1 -2
  40. package/dist/cores/core-services.js +0 -21
  41. package/dist/cores/core-services.js.map +1 -1
  42. package/dist/cores/{dynamo-query-service.d.ts → dynamo/dynamo-query-service.d.ts} +1 -1
  43. package/dist/cores/{dynamo-query-service.js → dynamo/dynamo-query-service.js} +10 -10
  44. package/dist/cores/dynamo/dynamo-query-service.js.map +1 -0
  45. package/dist/cores/{dynamo-scan-service.d.ts → dynamo/dynamo-scan-service.d.ts} +1 -1
  46. package/dist/cores/{dynamo-scan-service.js → dynamo/dynamo-scan-service.js} +11 -11
  47. package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -0
  48. package/dist/cores/{dynamo-service.d.ts → dynamo/dynamo-service.d.ts} +1 -1
  49. package/dist/cores/{dynamo-service.js → dynamo/dynamo-service.js} +21 -21
  50. package/dist/cores/dynamo/dynamo-service.js.map +1 -0
  51. package/dist/cores/dynamo/index.d.ts +12 -0
  52. package/dist/cores/dynamo/index.js +29 -0
  53. package/dist/cores/dynamo/index.js.map +1 -0
  54. package/dist/cores/{elastic6-query-service.d.ts → elastic/elastic6-query-service.d.ts} +1 -1
  55. package/dist/cores/{elastic6-query-service.js → elastic/elastic6-query-service.js} +8 -8
  56. package/dist/cores/elastic/elastic6-query-service.js.map +1 -0
  57. package/dist/cores/{elastic6-service.d.ts → elastic/elastic6-service.d.ts} +1 -1
  58. package/dist/cores/{elastic6-service.js → elastic/elastic6-service.js} +60 -68
  59. package/dist/cores/elastic/elastic6-service.js.map +1 -0
  60. package/dist/cores/{hangul-service.d.ts → elastic/hangul-service.d.ts} +17 -3
  61. package/dist/cores/{hangul-service.js → elastic/hangul-service.js} +17 -8
  62. package/dist/cores/elastic/hangul-service.js.map +1 -0
  63. package/dist/cores/elastic/index.d.ts +12 -0
  64. package/dist/cores/elastic/index.js +29 -0
  65. package/dist/cores/elastic/index.js.map +1 -0
  66. package/dist/cores/index.d.ts +10 -16
  67. package/dist/cores/index.js +15 -16
  68. package/dist/cores/index.js.map +1 -1
  69. package/dist/cores/lambda/index.js +8 -4
  70. package/dist/cores/lambda/index.js.map +1 -1
  71. package/dist/cores/lambda/lambda-cognito-handler.js +2 -2
  72. package/dist/cores/lambda/lambda-cognito-handler.js.map +1 -1
  73. package/dist/cores/lambda/lambda-cron-handler.d.ts +1 -1
  74. package/dist/cores/lambda/lambda-cron-handler.js +2 -2
  75. package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
  76. package/dist/cores/lambda/lambda-dynamo-stream-handler.d.ts +3 -3
  77. package/dist/cores/lambda/lambda-dynamo-stream-handler.js +20 -20
  78. package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
  79. package/dist/cores/lambda/lambda-handler.d.ts +2 -1
  80. package/dist/cores/lambda/lambda-handler.js +12 -11
  81. package/dist/cores/lambda/lambda-handler.js.map +1 -1
  82. package/dist/cores/lambda/lambda-notification-handler.d.ts +1 -1
  83. package/dist/cores/lambda/lambda-notification-handler.js +10 -10
  84. package/dist/cores/lambda/lambda-notification-handler.js.map +1 -1
  85. package/dist/cores/lambda/lambda-sns-handler.d.ts +1 -1
  86. package/dist/cores/lambda/lambda-sns-handler.js +13 -13
  87. package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
  88. package/dist/cores/lambda/lambda-sqs-handler.d.ts +1 -1
  89. package/dist/cores/lambda/lambda-sqs-handler.js +13 -13
  90. package/dist/cores/lambda/lambda-sqs-handler.js.map +1 -1
  91. package/dist/cores/lambda/lambda-web-handler.d.ts +158 -8
  92. package/dist/cores/lambda/lambda-web-handler.js +330 -119
  93. package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
  94. package/dist/cores/lambda/lambda-wss-handler.js +16 -12
  95. package/dist/cores/lambda/lambda-wss-handler.js.map +1 -1
  96. package/dist/cores/protocol/protocol-service.d.ts +5 -1
  97. package/dist/cores/protocol/protocol-service.js +46 -40
  98. package/dist/cores/protocol/protocol-service.js.map +1 -1
  99. package/dist/cores/{http-storage-service.d.ts → storage/http-storage-service.d.ts} +1 -1
  100. package/dist/cores/{http-storage-service.js → storage/http-storage-service.js} +6 -6
  101. package/dist/cores/storage/http-storage-service.js.map +1 -0
  102. package/dist/cores/storage/index.d.ts +14 -0
  103. package/dist/cores/storage/index.js +31 -0
  104. package/dist/cores/storage/index.js.map +1 -0
  105. package/dist/cores/{model-manager.d.ts → storage/model-manager.d.ts} +2 -1
  106. package/dist/cores/{model-manager.js → storage/model-manager.js} +12 -12
  107. package/dist/cores/storage/model-manager.js.map +1 -0
  108. package/dist/cores/{proxy-storage-service.d.ts → storage/proxy-storage-service.d.ts} +3 -72
  109. package/dist/cores/{proxy-storage-service.js → storage/proxy-storage-service.js} +13 -19
  110. package/dist/cores/storage/proxy-storage-service.js.map +1 -0
  111. package/dist/cores/{redis-storage-service.d.ts → storage/redis-storage-service.d.ts} +0 -0
  112. package/dist/cores/{redis-storage-service.js → storage/redis-storage-service.js} +14 -14
  113. package/dist/cores/storage/redis-storage-service.js.map +1 -0
  114. package/dist/cores/{storage-service.d.ts → storage/storage-service.d.ts} +6 -19
  115. package/dist/cores/{storage-service.js → storage/storage-service.js} +9 -19
  116. package/dist/cores/storage/storage-service.js.map +1 -0
  117. package/dist/engine/builder.js +27 -20
  118. package/dist/engine/builder.js.map +1 -1
  119. package/dist/engine/engine.d.ts +1 -1
  120. package/dist/engine/engine.js +53 -44
  121. package/dist/engine/engine.js.map +1 -1
  122. package/dist/engine/index.js +8 -4
  123. package/dist/engine/index.js.map +1 -1
  124. package/dist/engine/utilities.d.ts +4 -3
  125. package/dist/engine/utilities.js +32 -37
  126. package/dist/engine/utilities.js.map +1 -1
  127. package/dist/environ.d.ts +2 -2
  128. package/dist/environ.js +20 -10
  129. package/dist/environ.js.map +1 -1
  130. package/dist/exec-cli.js +26 -26
  131. package/dist/exec-cli.js.map +1 -1
  132. package/dist/extended/abstract-service.d.ts +540 -0
  133. package/dist/extended/abstract-service.js +924 -0
  134. package/dist/extended/abstract-service.js.map +1 -0
  135. package/dist/extended/index.d.ts +10 -0
  136. package/dist/extended/index.js +27 -0
  137. package/dist/extended/index.js.map +1 -0
  138. package/dist/helpers/helpers.d.ts +8 -1
  139. package/dist/helpers/helpers.js +25 -12
  140. package/dist/helpers/helpers.js.map +1 -1
  141. package/dist/helpers/index.js +6 -2
  142. package/dist/helpers/index.js.map +1 -1
  143. package/dist/index.d.ts +6 -5
  144. package/dist/index.js +10 -4
  145. package/dist/index.js.map +1 -1
  146. package/dist/lib/dynamo/expressions.js +35 -27
  147. package/dist/lib/dynamo/expressions.js.map +1 -1
  148. package/dist/lib/dynamo/query.js +24 -20
  149. package/dist/lib/dynamo/query.js.map +1 -1
  150. package/dist/lib/dynamo/scan.js +17 -13
  151. package/dist/lib/dynamo/scan.js.map +1 -1
  152. package/dist/lib/dynamo/serializer.js +11 -7
  153. package/dist/lib/dynamo/serializer.js.map +1 -1
  154. package/dist/lib/dynamo/utils.js +19 -14
  155. package/dist/lib/dynamo/utils.js.map +1 -1
  156. package/dist/lib/dynamodb-value.js +3 -3
  157. package/dist/lib/dynamodb-value.js.map +1 -1
  158. package/dist/lib/index.js +6 -2
  159. package/dist/lib/index.js.map +1 -1
  160. package/dist/tools/express.js +21 -15
  161. package/dist/tools/express.js.map +1 -1
  162. package/dist/tools/index.js +6 -2
  163. package/dist/tools/index.js.map +1 -1
  164. package/dist/tools/shared.js +12 -6
  165. package/dist/tools/shared.js.map +1 -1
  166. package/package.json +18 -15
  167. package/dist/cores/api-service.js.map +0 -1
  168. package/dist/cores/cache-service.js.map +0 -1
  169. package/dist/cores/core-types.d.ts +0 -368
  170. package/dist/cores/core-types.js +0 -15
  171. package/dist/cores/core-types.js.map +0 -1
  172. package/dist/cores/dynamo-query-service.js.map +0 -1
  173. package/dist/cores/dynamo-scan-service.js.map +0 -1
  174. package/dist/cores/dynamo-service.js.map +0 -1
  175. package/dist/cores/elastic6-query-service.js.map +0 -1
  176. package/dist/cores/elastic6-service.js.map +0 -1
  177. package/dist/cores/hangul-service.js.map +0 -1
  178. package/dist/cores/http-storage-service.js.map +0 -1
  179. package/dist/cores/model-manager.js.map +0 -1
  180. package/dist/cores/proxy-storage-service.js.map +0 -1
  181. package/dist/cores/redis-storage-service.js.map +0 -1
  182. package/dist/cores/storage-service.js.map +0 -1
  183. package/dist/tools/helpers.d.ts +0 -243
  184. package/dist/tools/helpers.js +0 -593
  185. package/dist/tools/helpers.js.map +0 -1
@@ -0,0 +1,540 @@
1
+ /**
2
+ * `abstract-service.ts`
3
+ * - common service design pattern to build micro-service backend.
4
+ *
5
+ * @author Tim Hong <tim@lemoncloud.io>
6
+ * @date 2021-02-23 initial version
7
+ * @author Steve <steve@lemoncloud.io>
8
+ * @date 2022-02-18 optimized search w/ ES6.8
9
+ * @date 2022-02-22 optimized w/ `lemon-core#3.0` and `@elastic/elasticsearch`
10
+ * @date 2022-02-24 use `$id` in elastic-search as `_id` in dynamo-table.
11
+ * @date 2022-03-15 optimized w/ `AbstractProxy`
12
+ * @date 2022-03-17 optimized w/ `lemon-core#3.0.2` and use `env.ES6_DOCTYPE`
13
+ * @date 2022-03-31 optimized w/ unit test spec.
14
+ * @date 2022-05-19 optimized `CacheService` w/ typed key.
15
+ *
16
+ * @origin see `lemon-accounts-api/src/service/core-service.ts`
17
+ * @copyright (C) 2021 LemonCloud Co Ltd. - All Rights Reserved.
18
+ */
19
+ import { AbstractManager, CacheService, CoreModel, CoreModelFilterable, DynamoOption, DynamoStreamEvent, Elastic6Option, Elastic6QueryService, Elastic6Service, GeneralKeyMaker, NextContext, NextIdentityAccess, StorageMakeable } from '../cores/';
20
+ import elasticsearch from '@elastic/elasticsearch';
21
+ /**
22
+ * authentication helper - get identity-id from context
23
+ * @param context the current request context.
24
+ */
25
+ export declare function asIdentityId(context: NextContext): string | undefined;
26
+ /**
27
+ * extract field names from models
28
+ * - only fields start with lowercase, or all upper.
29
+ */
30
+ export declare const filterFields: (fields: string[], base?: string[]) => string[];
31
+ /**
32
+ * interface `ModelSynchronizer`
33
+ */
34
+ export interface ModelSynchronizer<T extends CoreModel<string> = CoreModel<string>> {
35
+ /**
36
+ * callback for filtering items
37
+ * @param id
38
+ * @param item
39
+ */
40
+ filter?(id: string, item: T): boolean;
41
+ /**
42
+ * callback invoked before synchronization
43
+ * @param id
44
+ * @param eventName
45
+ * @param item
46
+ * @param diff
47
+ * @param prev
48
+ */
49
+ onBeforeSync?(id: string, eventName: DynamoStreamEvent, item: T, diff?: string[], prev?: T): Promise<void>;
50
+ /**
51
+ * callback invoked after synchronization
52
+ * @param id
53
+ * @param eventName
54
+ * @param item
55
+ * @param diff
56
+ * @param prev
57
+ */
58
+ onAfterSync?(id: string, eventName: DynamoStreamEvent, item: T, diff?: string[], prev?: T): Promise<void>;
59
+ }
60
+ /**
61
+ * abstract class `CoreService`
62
+ * - common abstract to build user service
63
+ *
64
+ * @abstract
65
+ */
66
+ export declare abstract class CoreService<Model extends CoreModel<ModelType>, ModelType extends string> extends GeneralKeyMaker<ModelType> implements StorageMakeable<Model, ModelType> {
67
+ /** dynamo table name */
68
+ readonly tableName: string;
69
+ /** global index name of elasticsearch */
70
+ readonly idName: string;
71
+ /** (optional) current timestamp */
72
+ protected current: number;
73
+ /**
74
+ * constructor
75
+ * @param tableName target table-name (or .yml dummy file-name)
76
+ * @param ns namespace of dataset
77
+ * @param idName must be `_id` unless otherwise
78
+ */
79
+ protected constructor(tableName?: string, ns?: string, idName?: string);
80
+ /**
81
+ * override current time
82
+ */
83
+ setCurrent: (current: number) => number;
84
+ /**
85
+ * get the current dynamo-options.
86
+ */
87
+ get dynamoOptions(): DynamoOption;
88
+ /**
89
+ * create storage-service w/ fields list.
90
+ */
91
+ makeStorageService<T extends Model>(type: ModelType, fields: string[], filter: CoreModelFilterable<T>): import("../cores/").TypedStorageService<T, ModelType>;
92
+ }
93
+ /**
94
+ * class: `CoreManager`
95
+ * - shared core manager for all model
96
+ *
97
+ * @abstract
98
+ */
99
+ export declare abstract class CoreManager<Model extends CoreModel<ModelType>, ModelType extends string, Service extends CoreService<Model, ModelType>> extends AbstractManager<Model, Service, ModelType> {
100
+ /**
101
+ * constructor
102
+ * @protected
103
+ */
104
+ protected constructor(type: ModelType, parent: Service, fields: string[], uniqueField?: string);
105
+ /**
106
+ * say hello()
107
+ */
108
+ hello: () => string;
109
+ /**
110
+ * get existence of model
111
+ * @param id
112
+ */
113
+ exists(id: string): Promise<boolean>;
114
+ /**
115
+ * find model - retrieve or null
116
+ * @param id model-id
117
+ */
118
+ find(id: string): Promise<Model | null>;
119
+ /**
120
+ * get model by key
121
+ * @param key global id(like primary-key)
122
+ */
123
+ findByKey(key: string): Promise<Model | null>;
124
+ /**
125
+ * batch get models
126
+ * - retrieve multi models per each id
127
+ * - must be matched with idList in sequence order.
128
+ *
129
+ * @param idList list of id
130
+ * @param parrallel (optional) in parrallel size
131
+ */
132
+ getMulti(idList: string[], parrallel?: number): Promise<(Model | null)[]>;
133
+ /**
134
+ * batch get models in map by idName
135
+ */
136
+ getMulti$(idList: string[], idName?: string, parrallel?: number): Promise<{
137
+ [id: string]: Model;
138
+ }>;
139
+ /**
140
+ * get by unique field value
141
+ * @param uniqueValue
142
+ */
143
+ getByUniqueField(uniqueValue: string): Promise<Model>;
144
+ /**
145
+ * find model by unique field value - retrieve or null
146
+ * @param uniqueValue
147
+ */
148
+ findByUniqueField(uniqueValue: string): Promise<Model | null>;
149
+ /**
150
+ * prepare model
151
+ * - override `AbstractManager.prepare()`
152
+ */
153
+ prepare(id: string, $def?: Model, isCreate?: boolean): Promise<Model>;
154
+ /**
155
+ * update model
156
+ * - override 'AbstractManager.insert()'
157
+ *
158
+ * @deprecated use `AbstractProxy`
159
+ */
160
+ insert(model: Model, initSeq?: number): Promise<Model>;
161
+ /**
162
+ * create or update model
163
+ * @param id model id
164
+ * @param model model data
165
+ */
166
+ save(id: string, model: Model): Promise<Model>;
167
+ /**
168
+ * update model
169
+ * - override 'AbstractManager.update()'
170
+ */
171
+ update(id: string, model: Model, $inc?: Model): Promise<Model>;
172
+ /**
173
+ * update or create model
174
+ * - override 'AbstractManager.updateOrCreate()'
175
+ */
176
+ updateOrCreate(id: string, model: Model, $inc?: Model): Promise<Model>;
177
+ /**
178
+ * delete model
179
+ * - override 'AbstractManager.delete()'
180
+ */
181
+ delete(id: string, destroy?: boolean): Promise<Model>;
182
+ /**
183
+ * prepare default-model when creation
184
+ * @param $def base-model
185
+ */
186
+ protected prepareDefault($def: Model): Model;
187
+ /**
188
+ * update lookup and delete old one if exists
189
+ */
190
+ protected updateLookup(id: string, model: Model, $org?: Model): Promise<void>;
191
+ }
192
+ /**
193
+ * proxy of manager
194
+ * - save model internally, and update only if changed properties.
195
+ * Model extends CoreModel<ModelType>, ModelType extends string
196
+ */
197
+ export declare class ManagerProxy<Model extends CoreModel<ModelType>, Manager extends CoreManager<Model, ModelType, CoreService<Model, ModelType>>, ModelType extends string = string> {
198
+ readonly $mgr: Manager;
199
+ constructor(proxy: AbstractProxy<string, CoreService<Model, ModelType>>, mgr: Manager);
200
+ /**
201
+ * store the origin model.
202
+ * - `null` means `404 not found`
203
+ */
204
+ protected readonly _org: {
205
+ [key: string]: Model;
206
+ };
207
+ /**
208
+ * store the updated one.
209
+ */
210
+ protected readonly _new: {
211
+ [key: string]: Model;
212
+ };
213
+ /**
214
+ * get storage linked.
215
+ */
216
+ get storage(): import("../cores/").TypedStorageService<Model, ModelType>;
217
+ /**
218
+ * read the origin node (cloned not to change).
219
+ */
220
+ org(id: string, raw?: boolean): Model;
221
+ /**
222
+ * check if already read.
223
+ */
224
+ has(id: string): boolean;
225
+ /**
226
+ * read the node.
227
+ * @param id object-id
228
+ * @param defaultOrThrow (optional) create if not exists, or flag to throw error
229
+ */
230
+ get(id: string, defaultOrThrow?: Model | boolean): Promise<Model>;
231
+ /**
232
+ * 객체 정규화 시킴.
233
+ * - null 에 대해서는 특별히 처리.
234
+ */
235
+ normal: (N: Model) => Model;
236
+ /**
237
+ * override w/ model
238
+ * @param $org the origin model by `.get(id)`
239
+ * @param model the new model.
240
+ */
241
+ override: ($org: Model, model: Model) => Model;
242
+ /**
243
+ * update the node.
244
+ */
245
+ set(id: string, model: Model): Promise<Model>;
246
+ /**
247
+ * increment the field of Object[id]
248
+ * !WARN! this incremented properties should NOT be updated later.
249
+ */
250
+ inc(id: string, model: Model): Promise<Model>;
251
+ /**
252
+ * get all the updated node.
253
+ *
254
+ * @param onlyUpdated flag to return the only updated set. (useful to check whether to update really!)
255
+ */
256
+ alls(onlyUpdated?: boolean, onlyValid?: boolean): {
257
+ [key: string]: Model;
258
+ };
259
+ }
260
+ /**
261
+ * class: `AbstractProxy`
262
+ * - common abstract based class for Proxy
263
+ */
264
+ export declare abstract class AbstractProxy<U extends string, T extends CoreService<CoreModel<U>, U>> {
265
+ /** parrallel factor */
266
+ readonly parrallel: number;
267
+ /** (internal) current context */
268
+ readonly context: NextContext;
269
+ /** (internal) backend-service */
270
+ readonly service: T;
271
+ /** (internal) cache service instance */
272
+ readonly cache?: CacheService;
273
+ /**
274
+ * constructor of proxy.
275
+ * @param service user service instance
276
+ * @param parrallel parrallel count (default 2)
277
+ * @param cacheScope prefix of cache-key (like `lemon:SS:` or `lemon:SS:user`)
278
+ */
279
+ constructor(context: NextContext, service: T, parrallel?: number, cacheScope?: string);
280
+ /**
281
+ * say hello().
282
+ */
283
+ hello: () => string;
284
+ /**
285
+ * list of manager-proxy
286
+ */
287
+ protected _proxies: ManagerProxy<any, any>[];
288
+ /**
289
+ * get all proxies in list.
290
+ */
291
+ protected get allProxies(): ManagerProxy<any, any, string>[];
292
+ /**
293
+ * register this.
294
+ */
295
+ register(mgr: ManagerProxy<any, any>): void;
296
+ /**
297
+ * 업데이트할 항목을 모두 저장함
298
+ */
299
+ saveAllUpdates(parrallel?: number): Promise<any[]>;
300
+ /**
301
+ * report via slack.
302
+ */
303
+ report: (title: string, data: any) => Promise<string>;
304
+ /**
305
+ * featch identity-acess from `lemon-accounts-api`
306
+ */
307
+ protected fetchIdentityAccess(identityId: string, domain?: string): Promise<{
308
+ identityId: string;
309
+ $identity: NextIdentityAccess<any>;
310
+ }>;
311
+ /**
312
+ * the cached identity model
313
+ */
314
+ protected _identity: {
315
+ [key: string]: NextIdentityAccess;
316
+ };
317
+ /**
318
+ * fetch(or load) identity.
319
+ *
320
+ * @param identityId id to find
321
+ * @param force (optional) force to reload if not available
322
+ * @returns the cached identity-access
323
+ */
324
+ getIdentity$(identityId: string, force?: boolean): Promise<NextIdentityAccess>;
325
+ /**
326
+ * get current identity-id
327
+ */
328
+ getCurrentIdentityId(throwable?: boolean): Promise<string>;
329
+ /**
330
+ * get the current identity object (or throw access-error)
331
+ */
332
+ getCurrentIdentity$(throwable?: boolean): Promise<NextIdentityAccess>;
333
+ }
334
+ /**
335
+ * type `SearchResult`
336
+ */
337
+ export interface SearchResult<T, U = any> {
338
+ /**
339
+ * total count of items searched
340
+ */
341
+ total: number;
342
+ /**
343
+ * item list
344
+ */
345
+ list: T[];
346
+ /**
347
+ * pagination cursor
348
+ */
349
+ last?: string[];
350
+ /**
351
+ * aggregation result
352
+ */
353
+ aggregations?: U;
354
+ }
355
+ /**
356
+ * class `Elastic6Synchronizer`
357
+ * - listen DynamoDBStream events and index into Elasticsearch
358
+ */
359
+ export declare class Elastic6Synchronizer {
360
+ /**
361
+ * model synchronizer map
362
+ * @private
363
+ */
364
+ private readonly synchronizerMap;
365
+ /**
366
+ * default model synchronizer
367
+ * @private
368
+ */
369
+ private readonly defModelSynchronizer;
370
+ /**
371
+ * constructor
372
+ * @param elastic elastic6-service instance
373
+ * @param dynamoOptions dynamo options
374
+ */
375
+ constructor(elastic: Elastic6Service, dynamoOptions: DynamoOption | {
376
+ tableName: string;
377
+ });
378
+ /**
379
+ * set synchronizer for the model
380
+ * @param type the model-type
381
+ * @param handler (optional) custom synchronizer.
382
+ */
383
+ enableSynchronization(type: string, handler?: ModelSynchronizer): void;
384
+ /**
385
+ * internal callback for filtering
386
+ * @private
387
+ */
388
+ private filter;
389
+ /**
390
+ * internal callback on before synchronization
391
+ * @private
392
+ */
393
+ private onBeforeSync;
394
+ /**
395
+ * internal callback on after synchronization
396
+ * @private
397
+ */
398
+ private onAfterSync;
399
+ }
400
+ /**
401
+ * class `ElasticInstance`
402
+ * - to manipulate the shared Elasticsearch resources.
403
+ */
404
+ export declare class Elastic6Instance {
405
+ /**
406
+ * Elasticsearch client
407
+ */
408
+ readonly client?: elasticsearch.Client;
409
+ /**
410
+ * Elastic6Service instance
411
+ */
412
+ readonly elastic?: Elastic6Service;
413
+ /**
414
+ * Elastic6QueryService instance
415
+ */
416
+ readonly query?: Elastic6QueryService<any>;
417
+ /**
418
+ * Elastic6Synchronizer instance
419
+ */
420
+ readonly synchronizer?: Elastic6Synchronizer;
421
+ /**
422
+ * default constructor
423
+ */
424
+ constructor({ endpoint, indexName, esVersion, esDocType, tableName, autocompleteFields, }: {
425
+ /** url endpoint */
426
+ endpoint: string;
427
+ /** name of index */
428
+ indexName: string;
429
+ /** ES engine version(6.2 ~ 7.x) */
430
+ esVersion: string;
431
+ /** doc-type (only valid under 6.2) */
432
+ esDocType: string;
433
+ /** dynamo-table to sync */
434
+ tableName: string;
435
+ /** field to make auto-complele */
436
+ autocompleteFields: string[];
437
+ });
438
+ /**
439
+ * read the current elastic6-option.
440
+ */
441
+ get options(): Elastic6Option;
442
+ /**
443
+ * create Elasticsearch index w/ custom settings
444
+ */
445
+ createIndex(): Promise<any>;
446
+ /**
447
+ * destroy Elasticsearch index
448
+ */
449
+ destroyIndex(): Promise<any>;
450
+ /**
451
+ * display index settings and mappings
452
+ */
453
+ describeIndex(): Promise<any>;
454
+ /**
455
+ * multi get
456
+ * @param _ids _id list
457
+ */
458
+ mget<T>(_ids: string[]): Promise<(T | null)[]>;
459
+ /**
460
+ * search raw query
461
+ * @param body Elasticsearch Query DSL
462
+ * @param params see 'search_type' in Elasticsearch documentation
463
+ */
464
+ search<T>(body: any, params?: {
465
+ indexName?: string;
466
+ searchType?: 'query_then_fetch' | 'dfs_query_then_fetch';
467
+ }): Promise<SearchResult<T>>;
468
+ /**
469
+ * create async generator that yields items queried until last
470
+ * @param body Elasticsearch Query DSL
471
+ * @param searchType see 'search_type' in Elasticsearch documentation
472
+ */
473
+ generateSearchResult<T>(body: any, searchType?: 'query_then_fetch' | 'dfs_query_then_fetch'): AsyncGenerator<T[], void, unknown>;
474
+ }
475
+ /**
476
+ * from Elasticsearch document to model item
477
+ * - replace the elastic's `$id` field to `_id` of dynamo-table.
478
+ *
479
+ * @param _source from elastic-search
480
+ * @param idName (optional) global id of elastic. (default is `$id`)
481
+ */
482
+ export declare function sourceToItem<T>(_source: T, idName?: string): T;
483
+ /**
484
+ * const `$ES6`
485
+ * - default instance as a singleton by env configuration.
486
+ */
487
+ export declare const $ES6: {
488
+ /**
489
+ * Elasticsearch client
490
+ */
491
+ readonly client?: elasticsearch.Client;
492
+ /**
493
+ * Elastic6Service instance
494
+ */
495
+ readonly elastic?: Elastic6Service;
496
+ /**
497
+ * Elastic6QueryService instance
498
+ */
499
+ readonly query?: Elastic6QueryService<any>;
500
+ /**
501
+ * Elastic6Synchronizer instance
502
+ */
503
+ readonly synchronizer?: Elastic6Synchronizer;
504
+ /**
505
+ * read the current elastic6-option.
506
+ */
507
+ readonly options: Elastic6Option;
508
+ /**
509
+ * create Elasticsearch index w/ custom settings
510
+ */
511
+ createIndex(): Promise<any>;
512
+ /**
513
+ * destroy Elasticsearch index
514
+ */
515
+ destroyIndex(): Promise<any>;
516
+ /**
517
+ * display index settings and mappings
518
+ */
519
+ describeIndex(): Promise<any>;
520
+ /**
521
+ * multi get
522
+ * @param _ids _id list
523
+ */
524
+ mget<T>(_ids: string[]): Promise<T[]>;
525
+ /**
526
+ * search raw query
527
+ * @param body Elasticsearch Query DSL
528
+ * @param params see 'search_type' in Elasticsearch documentation
529
+ */
530
+ search<T_1>(body: any, params?: {
531
+ indexName?: string;
532
+ searchType?: 'query_then_fetch' | 'dfs_query_then_fetch';
533
+ }): Promise<SearchResult<T_1, any>>;
534
+ /**
535
+ * create async generator that yields items queried until last
536
+ * @param body Elasticsearch Query DSL
537
+ * @param searchType see 'search_type' in Elasticsearch documentation
538
+ */
539
+ generateSearchResult<T_2>(body: any, searchType?: 'query_then_fetch' | 'dfs_query_then_fetch'): AsyncGenerator<T_2[], void, unknown>;
540
+ };