@mondomob/gae-node-nestjs 12.0.0-alpha-2 → 12.0.0-alpha-3

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 (206) hide show
  1. package/dist/_test/mocks.d.ts +9 -0
  2. package/dist/_test/mocks.js +27 -0
  3. package/dist/_test/mocks.js.map +1 -0
  4. package/dist/_test/request-scope-test-utils.d.ts +3 -0
  5. package/dist/_test/request-scope-test-utils.js +18 -0
  6. package/dist/_test/request-scope-test-utils.js.map +1 -0
  7. package/dist/auth/auth-user.model.d.ts +9 -0
  8. package/dist/auth/auth-user.model.js +33 -0
  9. package/dist/auth/auth-user.model.js.map +1 -0
  10. package/dist/auth/auth.callbacks.d.ts +8 -0
  11. package/dist/auth/auth.callbacks.js +5 -0
  12. package/dist/auth/auth.callbacks.js.map +1 -0
  13. package/dist/auth/auth.configurer.d.ts +35 -0
  14. package/dist/auth/auth.configurer.js +212 -0
  15. package/dist/auth/auth.configurer.js.map +1 -0
  16. package/dist/auth/auth.controller.d.ts +27 -0
  17. package/dist/auth/auth.controller.js +312 -0
  18. package/dist/auth/auth.controller.js.map +1 -0
  19. package/dist/auth/auth.guard.d.ts +16 -0
  20. package/dist/auth/auth.guard.js +127 -0
  21. package/dist/auth/auth.guard.js.map +1 -0
  22. package/dist/auth/auth.listener.d.ts +5 -0
  23. package/dist/auth/auth.listener.js +5 -0
  24. package/dist/auth/auth.listener.js.map +1 -0
  25. package/dist/auth/auth.repository.d.ts +52 -0
  26. package/dist/auth/auth.repository.js +79 -0
  27. package/dist/auth/auth.repository.js.map +1 -0
  28. package/dist/auth/auth.resolver.d.ts +13 -0
  29. package/dist/auth/auth.resolver.js +86 -0
  30. package/dist/auth/auth.resolver.js.map +1 -0
  31. package/dist/auth/auth.service.d.ts +35 -0
  32. package/dist/auth/auth.service.js +299 -0
  33. package/dist/auth/auth.service.js.map +1 -0
  34. package/dist/auth/auth.task.controller.d.ts +13 -0
  35. package/dist/auth/auth.task.controller.js +76 -0
  36. package/dist/auth/auth.task.controller.js.map +1 -0
  37. package/dist/auth/auth.task.service.d.ts +8 -0
  38. package/dist/auth/auth.task.service.js +26 -0
  39. package/dist/auth/auth.task.service.js.map +1 -0
  40. package/dist/auth/csrf.interceptor.d.ts +11 -0
  41. package/dist/auth/csrf.interceptor.js +38 -0
  42. package/dist/auth/csrf.interceptor.js.map +1 -0
  43. package/dist/auth/invite-user.service.d.ts +45 -0
  44. package/dist/auth/invite-user.service.js +215 -0
  45. package/dist/auth/invite-user.service.js.map +1 -0
  46. package/dist/auth/invite.callbacks.d.ts +6 -0
  47. package/dist/auth/invite.callbacks.js +5 -0
  48. package/dist/auth/invite.callbacks.js.map +1 -0
  49. package/dist/auth/login-identifier.repository.d.ts +13 -0
  50. package/dist/auth/login-identifier.repository.js +28 -0
  51. package/dist/auth/login-identifier.repository.js.map +1 -0
  52. package/dist/auth/password-reset.service.d.ts +15 -0
  53. package/dist/auth/password-reset.service.js +81 -0
  54. package/dist/auth/password-reset.service.js.map +1 -0
  55. package/dist/auth/user.service.d.ts +27 -0
  56. package/dist/auth/user.service.js +94 -0
  57. package/dist/auth/user.service.js.map +1 -0
  58. package/dist/configuration.d.ts +84 -0
  59. package/dist/configuration.js +5 -0
  60. package/dist/configuration.js.map +1 -0
  61. package/dist/configure.d.ts +40 -0
  62. package/dist/configure.js +85 -0
  63. package/dist/configure.js.map +1 -0
  64. package/dist/context/context-middleware.d.ts +15 -0
  65. package/dist/context/context-middleware.js +37 -0
  66. package/dist/context/context-middleware.js.map +1 -0
  67. package/dist/context/context-request-scope.d.ts +8 -0
  68. package/dist/context/context-request-scope.js +29 -0
  69. package/dist/context/context-request-scope.js.map +1 -0
  70. package/dist/context/index.d.ts +2 -0
  71. package/dist/context/index.js +9 -0
  72. package/dist/context/index.js.map +1 -0
  73. package/dist/datastore/context.d.ts +36 -0
  74. package/dist/datastore/context.js +27 -0
  75. package/dist/datastore/context.js.map +1 -0
  76. package/dist/datastore/datastore.provider.d.ts +8 -0
  77. package/dist/datastore/datastore.provider.js +30 -0
  78. package/dist/datastore/datastore.provider.js.map +1 -0
  79. package/dist/datastore/filters.d.ts +19 -0
  80. package/dist/datastore/filters.js +27 -0
  81. package/dist/datastore/filters.js.map +1 -0
  82. package/dist/datastore/loader.d.ts +50 -0
  83. package/dist/datastore/loader.js +147 -0
  84. package/dist/datastore/loader.js.map +1 -0
  85. package/dist/datastore/node-datastore-session.d.ts +17 -0
  86. package/dist/datastore/node-datastore-session.js +87 -0
  87. package/dist/datastore/node-datastore-session.js.map +1 -0
  88. package/dist/datastore/repository.d.ts +45 -0
  89. package/dist/datastore/repository.js +150 -0
  90. package/dist/datastore/repository.js.map +1 -0
  91. package/dist/datastore/transactional.d.ts +4 -0
  92. package/dist/datastore/transactional.js +13 -0
  93. package/dist/datastore/transactional.js.map +1 -0
  94. package/dist/error/NonFatalError.d.ts +3 -0
  95. package/dist/error/NonFatalError.js +11 -0
  96. package/dist/error/NonFatalError.js.map +1 -0
  97. package/dist/filter.d.ts +5 -0
  98. package/dist/filter.js +40 -0
  99. package/dist/filter.js.map +1 -0
  100. package/dist/gcloud/logging.d.ts +1 -0
  101. package/dist/gcloud/logging.js +5 -0
  102. package/dist/gcloud/logging.js.map +1 -0
  103. package/dist/gcloud/storage.provider.d.ts +12 -0
  104. package/dist/gcloud/storage.provider.js +41 -0
  105. package/dist/gcloud/storage.provider.js.map +1 -0
  106. package/dist/gcloud/tasks.d.ts +10 -0
  107. package/dist/gcloud/tasks.js +68 -0
  108. package/dist/gcloud/tasks.js.map +1 -0
  109. package/dist/graphql/GraphQLMiddleware.d.ts +0 -0
  110. package/dist/graphql/GraphQLMiddleware.js +2 -0
  111. package/dist/graphql/GraphQLMiddleware.js.map +1 -0
  112. package/dist/index.d.ts +28 -0
  113. package/dist/index.js +65 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/logging/index.d.ts +1 -0
  116. package/dist/logging/index.js +8 -0
  117. package/dist/logging/index.js.map +1 -0
  118. package/dist/logging/logging-internal.d.ts +2 -0
  119. package/dist/logging/logging-internal.js +20 -0
  120. package/dist/logging/logging-internal.js.map +1 -0
  121. package/dist/logging/logging-request-scope.d.ts +15 -0
  122. package/dist/logging/logging-request-scope.js +39 -0
  123. package/dist/logging/logging-request-scope.js.map +1 -0
  124. package/dist/logging/logging.d.ts +34 -0
  125. package/dist/logging/logging.js +55 -0
  126. package/dist/logging/logging.js.map +1 -0
  127. package/dist/mail/gmail/gmail.configurer.d.ts +15 -0
  128. package/dist/mail/gmail/gmail.configurer.js +59 -0
  129. package/dist/mail/gmail/gmail.configurer.js.map +1 -0
  130. package/dist/mail/gmail/gmail.controller.d.ts +9 -0
  131. package/dist/mail/gmail/gmail.controller.js +62 -0
  132. package/dist/mail/gmail/gmail.controller.js.map +1 -0
  133. package/dist/mail/gmail/gmail.sender.d.ts +12 -0
  134. package/dist/mail/gmail/gmail.sender.js +62 -0
  135. package/dist/mail/gmail/gmail.sender.js.map +1 -0
  136. package/dist/mail/gmail/stored.credentials.repository.d.ts +12 -0
  137. package/dist/mail/gmail/stored.credentials.repository.js +23 -0
  138. package/dist/mail/gmail/stored.credentials.repository.js.map +1 -0
  139. package/dist/mail/mail-logging.sender.d.ts +9 -0
  140. package/dist/mail/mail-logging.sender.js +42 -0
  141. package/dist/mail/mail-logging.sender.js.map +1 -0
  142. package/dist/mail/mail-subject.sender.d.ts +12 -0
  143. package/dist/mail/mail-subject.sender.js +33 -0
  144. package/dist/mail/mail-subject.sender.js.map +1 -0
  145. package/dist/mail/mail-whitelist.sender.d.ts +14 -0
  146. package/dist/mail/mail-whitelist.sender.js +59 -0
  147. package/dist/mail/mail-whitelist.sender.js.map +1 -0
  148. package/dist/mail/mail.diverter.d.ts +13 -0
  149. package/dist/mail/mail.diverter.js +65 -0
  150. package/dist/mail/mail.diverter.js.map +1 -0
  151. package/dist/mail/mail.sender.d.ts +6 -0
  152. package/dist/mail/mail.sender.js +5 -0
  153. package/dist/mail/mail.sender.js.map +1 -0
  154. package/dist/mail/smtp/smtp.sender.d.ts +10 -0
  155. package/dist/mail/smtp/smtp.sender.js +65 -0
  156. package/dist/mail/smtp/smtp.sender.js.map +1 -0
  157. package/dist/mail-templates/base.d.ts +2 -0
  158. package/dist/mail-templates/base.js +328 -0
  159. package/dist/mail-templates/base.js.map +1 -0
  160. package/dist/mail-templates/invite.d.ts +1 -0
  161. package/dist/mail-templates/invite.js +19 -0
  162. package/dist/mail-templates/invite.js.map +1 -0
  163. package/dist/module.d.ts +16 -0
  164. package/dist/module.js +136 -0
  165. package/dist/module.js.map +1 -0
  166. package/dist/request-scope/index.d.ts +2 -0
  167. package/dist/request-scope/index.js +9 -0
  168. package/dist/request-scope/index.js.map +1 -0
  169. package/dist/request-scope/request-scope-interceptor.d.ts +5 -0
  170. package/dist/request-scope/request-scope-interceptor.js +3 -0
  171. package/dist/request-scope/request-scope-interceptor.js.map +1 -0
  172. package/dist/request-scope/request-scope.d.ts +12 -0
  173. package/dist/request-scope/request-scope.js +79 -0
  174. package/dist/request-scope/request-scope.js.map +1 -0
  175. package/dist/request-scope/request-scope.middleware.d.ts +15 -0
  176. package/dist/request-scope/request-scope.middleware.js +53 -0
  177. package/dist/request-scope/request-scope.middleware.js.map +1 -0
  178. package/dist/search/search.service.d.ts +52 -0
  179. package/dist/search/search.service.js +90 -0
  180. package/dist/search/search.service.js.map +1 -0
  181. package/dist/search/searchable.repository.d.ts +36 -0
  182. package/dist/search/searchable.repository.js +95 -0
  183. package/dist/search/searchable.repository.js.map +1 -0
  184. package/dist/types.d.ts +3 -0
  185. package/dist/types.js +9 -0
  186. package/dist/types.js.map +1 -0
  187. package/dist/util/arrays.d.ts +1 -0
  188. package/dist/util/arrays.js +10 -0
  189. package/dist/util/arrays.js.map +1 -0
  190. package/dist/util/guards.d.ts +1 -0
  191. package/dist/util/guards.js +7 -0
  192. package/dist/util/guards.js.map +1 -0
  193. package/dist/util/index.d.ts +1 -0
  194. package/dist/util/index.js +5 -0
  195. package/dist/util/index.js.map +1 -0
  196. package/dist/util/nestjs.d.ts +9 -0
  197. package/dist/util/nestjs.js +9 -0
  198. package/dist/util/nestjs.js.map +1 -0
  199. package/dist/util/types.d.ts +4 -0
  200. package/dist/util/types.js +8 -0
  201. package/dist/util/types.js.map +1 -0
  202. package/dist/validator.d.ts +1 -0
  203. package/dist/validator.js +5 -0
  204. package/dist/validator.js.map +1 -0
  205. package/mondomob-gae-node-nestjs-12.0.0-alpha-3.tgz +0 -0
  206. package/package.json +1 -1
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatastoreLoader = void 0;
4
+ const datastore_1 = require("@google-cloud/datastore");
5
+ const entity_1 = require("@google-cloud/datastore/build/src/entity");
6
+ const trace = require("@google-cloud/trace-agent");
7
+ const DataLoader = require("dataloader");
8
+ const _ = require("lodash");
9
+ const logging_1 = require("../logging");
10
+ const types_1 = require("../util/types");
11
+ const filters_1 = require("./filters");
12
+ const NonFatalError_1 = require("../error/NonFatalError");
13
+ const keysEqual = (key1, key2) => {
14
+ return _.isEqual(key1.path, key2.path);
15
+ };
16
+ const countEntities = (keys) => {
17
+ const result = keys.reduce((prev, current) => {
18
+ if (!prev[current.kind]) {
19
+ prev[current.kind] = 1;
20
+ }
21
+ else {
22
+ prev[current.kind] += 1;
23
+ }
24
+ return prev;
25
+ }, {});
26
+ return Object.entries(result)
27
+ .map(([entry, value]) => `${entry}: ${value} entities`)
28
+ .join(', ');
29
+ };
30
+ function isTransaction(datastore) {
31
+ return datastore.commit !== undefined;
32
+ }
33
+ class DatastoreLoader {
34
+ constructor(datastore, context) {
35
+ this.load = async (keys) => {
36
+ const span = trace.get().createChildSpan({
37
+ name: 'load-keys',
38
+ });
39
+ const prettyPrint = countEntities(keys);
40
+ span.addLabel('entities', prettyPrint);
41
+ const [results] = await this.datastore.get([...keys]);
42
+ span.endSpan();
43
+ this.logger.debug('Fetched entities by key ', { entities: prettyPrint });
44
+ return keys.map(key => results.find((result) => keysEqual(result[datastore_1.Datastore.KEY], key)));
45
+ };
46
+ this.datastore = datastore;
47
+ this.loader = new DataLoader(this.load, {
48
+ cacheKeyFn: (key) => key.path.join(':'),
49
+ });
50
+ this.parentContext = context;
51
+ this.logger = (0, logging_1.createLogger)('loader');
52
+ }
53
+ async get(ids) {
54
+ const results = await this.loader.loadMany(ids);
55
+ const firstError = results.find(result => result instanceof Error);
56
+ if (firstError) {
57
+ throw firstError;
58
+ }
59
+ return results;
60
+ }
61
+ async save(entities) {
62
+ await this.applyBatched(entities, (datastore, chunk) => datastore.save(chunk), (loader, { key, data }) => this.resetDataloaderCache(loader, key, data));
63
+ }
64
+ async delete(entities) {
65
+ await this.applyBatched(entities, (datastore, chunk) => datastore.delete(chunk), (loader, key) => loader.clear(key));
66
+ }
67
+ async update(entities) {
68
+ await this.applyBatched(entities, (datastore, chunk) => datastore.save(chunk), (loader, { key, data }) => this.resetDataloaderCache(loader, key, data));
69
+ }
70
+ async upsert(entities) {
71
+ await this.applyBatched(entities, (datastore, chunk) => datastore.upsert(chunk), (loader, { key, data }) => this.resetDataloaderCache(loader, key, data));
72
+ }
73
+ async insert(entities) {
74
+ await this.applyBatched(entities, (datastore, chunk) => datastore.insert(chunk), (loader, { key, data }) => this.resetDataloaderCache(loader, key, data));
75
+ }
76
+ async executeQuery(kind, options) {
77
+ let query = this.datastore.createQuery(kind);
78
+ if (options.select) {
79
+ query = query.select((0, types_1.asArray)(options.select));
80
+ }
81
+ if (options.filters) {
82
+ query = (0, filters_1.buildFilters)(query, options.filters);
83
+ }
84
+ if (options.sort) {
85
+ (0, types_1.asArray)(options.sort).forEach(sort => query.order(sort.property, sort.options));
86
+ }
87
+ if (options.groupBy) {
88
+ query.groupBy((0, types_1.asArray)(options.groupBy));
89
+ }
90
+ if (options.start) {
91
+ query.start(options.start);
92
+ }
93
+ if (options.end) {
94
+ query.end(options.end);
95
+ }
96
+ if (options.hasAnscestor) {
97
+ query.hasAncestor(options.hasAnscestor);
98
+ }
99
+ if (options.limit) {
100
+ query.limit(options.limit);
101
+ }
102
+ if (options.offset) {
103
+ query.offset(options.offset);
104
+ }
105
+ const [results, queryInfo] = await query.run();
106
+ results.forEach((result) => {
107
+ this.loader.prime(result[datastore_1.Datastore.KEY], _.omit(result, datastore_1.Datastore.KEY));
108
+ });
109
+ return [results, queryInfo];
110
+ }
111
+ async inTransaction(callback) {
112
+ if (isTransaction(this.datastore)) {
113
+ return await callback(Object.assign(Object.assign({}, this.parentContext), { datastore: this }));
114
+ }
115
+ else {
116
+ const transaction = this.datastore.transaction();
117
+ await transaction.run();
118
+ try {
119
+ const result = await callback(Object.assign(Object.assign({}, this.parentContext), { datastore: new DatastoreLoader(transaction, this.parentContext) }));
120
+ await transaction.commit();
121
+ this.parentContext.datastore.loader.clearAll();
122
+ return result;
123
+ }
124
+ catch (ex) {
125
+ if (ex instanceof NonFatalError_1.NonFatalError) {
126
+ this.logger.warn('Rolling back transaction - non-fatal error encountered', ex);
127
+ }
128
+ else {
129
+ this.logger.error('Rolling back transaction - error encountered', ex);
130
+ }
131
+ await transaction.rollback();
132
+ throw ex;
133
+ }
134
+ }
135
+ }
136
+ resetDataloaderCache(loader, key, data) {
137
+ return loader.clear(key).prime(key, data);
138
+ }
139
+ async applyBatched(values, operation, updateLoader, batchSize = 100) {
140
+ const entityChunks = _.chunk(values, batchSize);
141
+ const pendingModifications = entityChunks.map((chunk) => operation(this.datastore, chunk));
142
+ await Promise.all(pendingModifications);
143
+ values.forEach(value => updateLoader(this.loader, value));
144
+ }
145
+ }
146
+ exports.DatastoreLoader = DatastoreLoader;
147
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/datastore/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import * as expressSession from 'express-session';
2
+ import { Datastore } from '@google-cloud/datastore';
3
+ export interface DataStoreOptions {
4
+ dataset?: Datastore;
5
+ datastore?: Datastore;
6
+ kind?: string;
7
+ expirationMs?: number;
8
+ }
9
+ export declare class DatastoreStore extends expressSession.Store {
10
+ ds: Datastore;
11
+ kind: string;
12
+ expirationMs: number;
13
+ constructor(options?: DataStoreOptions);
14
+ get: (sid: string, callback: (err: Error | null, session?: expressSession.SessionData | null) => void) => void;
15
+ set: (sid: string, sess: expressSession.SessionData, callback?: (err: Error | null) => void) => void;
16
+ destroy: (sid: string, callback?: (err: Error | null) => void) => void;
17
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatastoreStore = void 0;
4
+ const expressSession = require("express-session");
5
+ class DatastoreStore extends expressSession.Store {
6
+ constructor(options = {}) {
7
+ super();
8
+ this.get = (sid, callback) => {
9
+ this.ds.get(this.ds.key([this.kind, sid]), (err, entity) => {
10
+ if (err) {
11
+ return callback(err);
12
+ }
13
+ if (!entity) {
14
+ return callback(null);
15
+ }
16
+ let result;
17
+ try {
18
+ result = JSON.parse(entity.data);
19
+ }
20
+ catch (er) {
21
+ return callback(er);
22
+ }
23
+ if (!entity.createdAt || !this.expirationMs) {
24
+ return callback(null, result);
25
+ }
26
+ const createdAtMs = entity.createdAt.valueOf();
27
+ const expiresAtMs = createdAtMs + this.expirationMs;
28
+ const nowMs = new Date().valueOf();
29
+ if (expiresAtMs <= nowMs) {
30
+ this.destroy(sid, err => {
31
+ if (err) {
32
+ return callback(err);
33
+ }
34
+ return callback(null);
35
+ });
36
+ return;
37
+ }
38
+ return callback(null, result);
39
+ });
40
+ };
41
+ this.set = (sid, sess, callback) => {
42
+ callback = callback || (() => { });
43
+ let sessJson;
44
+ try {
45
+ sessJson = JSON.stringify(sess);
46
+ }
47
+ catch (err) {
48
+ return callback(err);
49
+ }
50
+ const createdAt = new Date();
51
+ const data = [
52
+ {
53
+ name: 'data',
54
+ value: sessJson,
55
+ excludeFromIndexes: true,
56
+ },
57
+ {
58
+ name: 'createdAt',
59
+ value: createdAt,
60
+ },
61
+ ];
62
+ this.ds.save({
63
+ key: this.ds.key([this.kind, sid]),
64
+ data,
65
+ }, callback);
66
+ };
67
+ this.destroy = (sid, callback) => {
68
+ this.ds.delete(this.ds.key([this.kind, sid]), callback);
69
+ };
70
+ this.ds = (options.dataset || options.datastore);
71
+ if (!this.ds) {
72
+ throw new Error('No dataset provided to Datastore Session.');
73
+ }
74
+ this.kind = options.kind || 'Session';
75
+ if (options.expirationMs) {
76
+ if (typeof options.expirationMs !== typeof 0 || options.expirationMs < 0) {
77
+ throw new Error('invalid value for option expirationMs: must be an integer greater than 0');
78
+ }
79
+ this.expirationMs = Number(options.expirationMs);
80
+ }
81
+ else {
82
+ this.expirationMs = 0;
83
+ }
84
+ }
85
+ }
86
+ exports.DatastoreStore = DatastoreStore;
87
+ //# sourceMappingURL=node-datastore-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-datastore-session.js","sourceRoot":"","sources":["../../src/datastore/node-datastore-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { Datastore } from '@google-cloud/datastore';
2
+ import { entity as Entity } from '@google-cloud/datastore/build/src/entity';
3
+ import { RunQueryInfo } from '@google-cloud/datastore/build/src/query';
4
+ import * as t from 'io-ts';
5
+ import { Omit, OneOrMany } from '../util/types';
6
+ import { Context } from './context';
7
+ import { Index, QueryOptions } from './loader';
8
+ export interface RepositoryOptions<T extends {
9
+ id: any;
10
+ }> {
11
+ defaultValues?: Partial<Omit<T, 'id'>>;
12
+ index?: Index<Omit<T, 'id'>>;
13
+ }
14
+ export declare function buildExclusions<T>(input: T, schema?: Index<T>, path?: string): string[];
15
+ export declare const datastoreKey: t.Type<Entity.Key, Entity.Key, unknown>;
16
+ export declare const dateType: t.Type<Date, Date, unknown>;
17
+ export interface BaseEntity {
18
+ id: string;
19
+ }
20
+ export declare class Repository<T extends BaseEntity> {
21
+ private readonly datastore;
22
+ protected readonly kind: string;
23
+ protected readonly options: RepositoryOptions<T>;
24
+ private readonly validator;
25
+ constructor(datastore: Datastore, kind: string, validator: t.Type<T>, options?: RepositoryOptions<T>);
26
+ getRequired(context: Context, id: string): Promise<T>;
27
+ get(context: Context, id: string): Promise<T | undefined>;
28
+ get(context: Context, id: ReadonlyArray<string>): Promise<ReadonlyArray<T> | undefined>;
29
+ query(context: Context, options?: Partial<QueryOptions<T>>): Promise<[ReadonlyArray<T>, RunQueryInfo]>;
30
+ save(context: Context, entities: T): Promise<T>;
31
+ save(context: Context, entities: ReadonlyArray<T>): Promise<ReadonlyArray<T>>;
32
+ update(context: Context, entities: T): Promise<T>;
33
+ update(context: Context, entities: ReadonlyArray<T>): Promise<ReadonlyArray<T>>;
34
+ insert(context: Context, entities: T): Promise<T>;
35
+ insert(context: Context, entities: ReadonlyArray<T>): Promise<ReadonlyArray<T>>;
36
+ upsert(context: Context, entities: T): Promise<T>;
37
+ upsert(context: Context, entities: ReadonlyArray<T>): Promise<ReadonlyArray<T>>;
38
+ protected beforePersist(context: Context, entities: OneOrMany<T>): OneOrMany<T>;
39
+ reindex(context: Context, operation?: (input: T) => T | Promise<T>): Promise<readonly T[]>;
40
+ delete(context: Context, ...ids: string[]): Promise<void>;
41
+ deleteAll(context: Context): Promise<void>;
42
+ key: (name: string) => Entity.Key;
43
+ private validate;
44
+ private applyMutation;
45
+ }
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Repository = exports.dateType = exports.datastoreKey = void 0;
4
+ exports.buildExclusions = buildExclusions;
5
+ const datastore_1 = require("@google-cloud/datastore");
6
+ const entity_1 = require("@google-cloud/datastore/build/src/entity");
7
+ const t = require("io-ts");
8
+ const io_ts_reporters_1 = require("io-ts-reporters");
9
+ const _ = require("lodash");
10
+ const types_1 = require("../util/types");
11
+ const Either_1 = require("fp-ts/lib/Either");
12
+ function buildExclusions(input, schema = {}, path = '') {
13
+ if (schema === true) {
14
+ return [];
15
+ }
16
+ else if (Array.isArray(input)) {
17
+ return _.chain(input)
18
+ .flatMap(value => {
19
+ return buildExclusions(value, schema, `${path}[]`);
20
+ })
21
+ .push(`${path}[]`)
22
+ .uniq()
23
+ .value();
24
+ }
25
+ else if (typeof input === 'object') {
26
+ const paths = _.flatMap(input, (value, key) => {
27
+ return buildExclusions(value, schema[key], `${path}${path.length > 0 ? '.' : ''}${key}`);
28
+ });
29
+ if (path) {
30
+ paths.push(path);
31
+ }
32
+ return paths;
33
+ }
34
+ return [path];
35
+ }
36
+ exports.datastoreKey = new t.Type('Entity.Key', (input) => typeof input === 'object', input => t.success(input), (value) => value);
37
+ exports.dateType = new t.Type('DateType', (m) => m instanceof Date, (m, c) => (m instanceof Date ? t.success(m) : t.failure('Value is not date', c)), a => a);
38
+ class LoadError extends Error {
39
+ constructor(kind, id, errors) {
40
+ super(`"${kind}" with id "${id}" failed to load due to ${errors.length} errors:\n${errors.join('\n')}`);
41
+ }
42
+ }
43
+ class SaveError extends Error {
44
+ constructor(kind, id, errors) {
45
+ super(`"${kind}" with id "${id}" failed to save due to ${errors.length} errors:\n${errors.join('\n')}`);
46
+ }
47
+ }
48
+ class Repository {
49
+ constructor(datastore, kind, validator, options = {}) {
50
+ this.datastore = datastore;
51
+ this.kind = kind;
52
+ this.options = options;
53
+ this.key = (name) => {
54
+ return this.datastore.key([this.kind, name]);
55
+ };
56
+ this.validate = (id, value) => {
57
+ const entity = Object.assign(Object.assign(Object.assign({}, this.options.defaultValues), value), { id });
58
+ const validation = this.validator.decode(entity);
59
+ if ((0, Either_1.isLeft)(validation)) {
60
+ const errors = io_ts_reporters_1.default.report(validation);
61
+ throw new LoadError(this.kind, id, errors);
62
+ }
63
+ return validation.right;
64
+ };
65
+ this.validator = validator;
66
+ }
67
+ async getRequired(context, id) {
68
+ const result = await this.get(context, id);
69
+ if (!result) {
70
+ throw new LoadError(this.kind, id, ['invalid id']);
71
+ }
72
+ return result;
73
+ }
74
+ async get(context, ids) {
75
+ const idArray = (0, types_1.asArray)(ids);
76
+ const allKeys = idArray.map(this.key);
77
+ const results = await context.datastore.get(allKeys);
78
+ const validatedResults = results.map((result, idx) => {
79
+ if (result) {
80
+ return this.validate(idArray[idx], result);
81
+ }
82
+ return result;
83
+ });
84
+ if (Array.isArray(ids)) {
85
+ return validatedResults;
86
+ }
87
+ else {
88
+ return validatedResults[0];
89
+ }
90
+ }
91
+ async query(context, options = {}) {
92
+ const [results, queryInfo] = await context.datastore.executeQuery(this.kind, options);
93
+ return [
94
+ results.map(value => this.validate(value[entity_1.entity.KEY_SYMBOL].name, _.omit(value, datastore_1.Datastore.KEY))),
95
+ queryInfo,
96
+ ];
97
+ }
98
+ async save(context, entities) {
99
+ return this.applyMutation(context, this.beforePersist(context, entities), (loader, e) => loader.save(e));
100
+ }
101
+ async update(context, entities) {
102
+ return this.applyMutation(context, this.beforePersist(context, entities), (loader, e) => loader.update(e));
103
+ }
104
+ async insert(context, entities) {
105
+ return this.applyMutation(context, this.beforePersist(context, entities), (loader, e) => loader.insert(e));
106
+ }
107
+ async upsert(context, entities) {
108
+ return this.applyMutation(context, this.beforePersist(context, entities), (loader, e) => loader.upsert(e));
109
+ }
110
+ beforePersist(context, entities) {
111
+ return entities;
112
+ }
113
+ async reindex(context, operation = input => input) {
114
+ const [allEntities] = await this.query(context);
115
+ const updatedEntities = await Promise.all(allEntities.map(operation));
116
+ return this.update(context, updatedEntities);
117
+ }
118
+ async delete(context, ...ids) {
119
+ const allIds = ids.map(id => this.key(id));
120
+ await context.datastore.delete(allIds);
121
+ }
122
+ async deleteAll(context) {
123
+ const [allEntities] = await this.query(context);
124
+ const allIds = allEntities.map(value => this.key(value.id));
125
+ await context.datastore.delete(allIds);
126
+ }
127
+ async applyMutation(context, entities, mutation) {
128
+ const entitiesToSave = (0, types_1.asArray)(entities)
129
+ .map(entity => {
130
+ const validation = this.validator.decode(entity);
131
+ if ((0, Either_1.isLeft)(validation)) {
132
+ const errors = io_ts_reporters_1.default.report(validation);
133
+ throw new SaveError(this.kind, entity.id, errors);
134
+ }
135
+ return validation.right;
136
+ })
137
+ .map(data => {
138
+ const withoutId = _.omit(data, 'id');
139
+ return {
140
+ key: this.key(data.id),
141
+ data: withoutId,
142
+ excludeFromIndexes: buildExclusions(withoutId, this.options.index),
143
+ };
144
+ });
145
+ await mutation(context.datastore, entitiesToSave);
146
+ return entities;
147
+ }
148
+ }
149
+ exports.Repository = Repository;
150
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/datastore/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Context } from './context';
2
+ type WithContext = (context: Context, ...args: any[]) => Promise<any>;
3
+ export declare function Transactional(): (target: any, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<WithContext>) => TypedPropertyDescriptor<WithContext>;
4
+ export {};
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Transactional = Transactional;
4
+ function Transactional() {
5
+ return function (target, propertyKey, descriptor) {
6
+ const value = descriptor.value;
7
+ descriptor.value = async function (context, ...args) {
8
+ return await context.datastore.inTransaction(async (tx) => await value.apply(this, [tx, ...args]));
9
+ };
10
+ return descriptor;
11
+ };
12
+ }
13
+ //# sourceMappingURL=transactional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional.js","sourceRoot":"","sources":["../../src/datastore/transactional.ts"],"names":[],"mappings":";;AASA,sCAcC;AAdD,SAAgB,aAAa;IAC3B,OAAO,UACL,MAAW,EACX,WAA4B,EAC5B,UAAgD;QAEhD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAM,CAAC;QAEhC,UAAU,CAAC,KAAK,GAAG,KAAK,WAAW,OAAO,EAAE,GAAG,IAAI;YACjD,OAAO,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare class NonFatalError extends Error {
2
+ constructor(message: string);
3
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NonFatalError = void 0;
4
+ class NonFatalError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ Object.setPrototypeOf(this, new.target.prototype);
8
+ }
9
+ }
10
+ exports.NonFatalError = NonFatalError;
11
+ //# sourceMappingURL=NonFatalError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NonFatalError.js","sourceRoot":"","sources":["../../src/error/NonFatalError.ts"],"names":[],"mappings":";;;AAIA,MAAa,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AALD,sCAKC"}
@@ -0,0 +1,5 @@
1
+ import { ArgumentsHost, ExceptionFilter, HttpException } from '@nestjs/common';
2
+ export declare class NotFoundFilter implements ExceptionFilter {
3
+ private readonly logger;
4
+ catch(exception: HttpException, host: ArgumentsHost): void | (import("express-session").Session & Partial<import("express-session").SessionData>);
5
+ }
package/dist/filter.js ADDED
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NotFoundFilter = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const path = require("path");
7
+ const logging_1 = require("./logging");
8
+ const saveSessionAndSendIndexPage = (request, response, logger) => {
9
+ if (request.session && request.session.save) {
10
+ return request.session.save(() => {
11
+ logger.debug(`Session saved ${request.session.id}`);
12
+ sendIndexPage(response);
13
+ });
14
+ }
15
+ return sendIndexPage(response);
16
+ };
17
+ const sendIndexPage = (response) => response.status(200).sendFile(path.join(process.cwd(), 'public', 'index.html'));
18
+ let NotFoundFilter = class NotFoundFilter {
19
+ constructor() {
20
+ this.logger = (0, logging_1.createLogger)('not-found-filter');
21
+ }
22
+ catch(exception, host) {
23
+ const ctx = host.switchToHttp();
24
+ const response = ctx.getResponse();
25
+ const request = ctx.getRequest();
26
+ if (request.headers.accept && request.headers.accept.includes('text/html')) {
27
+ return saveSessionAndSendIndexPage(request, response, this.logger);
28
+ }
29
+ response.status(404).json({
30
+ statusCode: exception.getStatus(),
31
+ timestamp: new Date().toISOString(),
32
+ path: request.url,
33
+ });
34
+ }
35
+ };
36
+ exports.NotFoundFilter = NotFoundFilter;
37
+ exports.NotFoundFilter = NotFoundFilter = tslib_1.__decorate([
38
+ (0, common_1.Catch)(common_1.NotFoundException)
39
+ ], NotFoundFilter);
40
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":";;;;AAAA,2CAAyG;AAEzG,6BAA6B;AAC7B,uCAAiD;AAKjD,MAAM,2BAA2B,GAAG,CAAC,OAAgB,EAAE,QAAkB,EAAE,MAAc,EAAE,EAAE;IAC3F,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,OAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YACrD,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,EAAE,CAC3C,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AAG3E,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QACY,WAAM,GAAG,IAAA,sBAAY,EAAC,kBAAkB,CAAC,CAAC;IAiB7D,CAAC;IAfC,KAAK,CAAC,SAAwB,EAAE,IAAmB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAW,CAAC;QAE1C,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3E,OAAO,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC;QAED,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACxB,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,OAAO,CAAC,GAAG;SAClB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAlBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,cAAK,EAAC,0BAAiB,CAAC;GACZ,cAAc,CAkB1B"}
@@ -0,0 +1 @@
1
+ export * from '../logging/logging';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("../logging/logging"), exports);
5
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/gcloud/logging.ts"],"names":[],"mappings":";;;AAIA,6DAAmC"}
@@ -0,0 +1,12 @@
1
+ import { Configuration } from '../configuration';
2
+ import { Bucket, Storage } from '@google-cloud/storage';
3
+ export declare class StorageProvider {
4
+ private readonly configurationProvider;
5
+ private readonly _storage;
6
+ private readonly _defaultBucket;
7
+ private readonly logger;
8
+ constructor(configurationProvider: Configuration);
9
+ get storage(): Storage;
10
+ get defaultBucket(): Bucket;
11
+ getDefaultBucketResumableUploadUrl(fileId: string): Promise<string>;
12
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageProvider = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const storage_1 = require("@google-cloud/storage");
7
+ const logging_1 = require("./logging");
8
+ let StorageProvider = class StorageProvider {
9
+ constructor(configurationProvider) {
10
+ this.configurationProvider = configurationProvider;
11
+ this.logger = (0, logging_1.createLogger)('storage');
12
+ const config = {};
13
+ if (configurationProvider.isDevelopment()) {
14
+ this.logger.info('Application is running locally, using keyfile.json credentials to connect to Google Cloud Storage');
15
+ config.keyFilename = './keyfile.json';
16
+ }
17
+ this._storage = new storage_1.Storage(config);
18
+ this.logger.info(`Default Google Cloud Storage bucket: ${configurationProvider.bucket}`);
19
+ this._defaultBucket = this.storage.bucket(configurationProvider.bucket);
20
+ }
21
+ get storage() {
22
+ return this._storage;
23
+ }
24
+ get defaultBucket() {
25
+ return this._defaultBucket;
26
+ }
27
+ async getDefaultBucketResumableUploadUrl(fileId) {
28
+ const gcsFile = this._defaultBucket.file(fileId);
29
+ const urls = await gcsFile.createResumableUpload({
30
+ origin: this.configurationProvider.host,
31
+ });
32
+ return urls[0];
33
+ }
34
+ };
35
+ exports.StorageProvider = StorageProvider;
36
+ exports.StorageProvider = StorageProvider = tslib_1.__decorate([
37
+ (0, common_1.Injectable)(),
38
+ tslib_1.__param(0, (0, common_1.Inject)('Configuration')),
39
+ tslib_1.__metadata("design:paramtypes", [Object])
40
+ ], StorageProvider);
41
+ //# sourceMappingURL=storage.provider.js.map