@webda/gcp 4.0.0-beta.2 → 4.0.0-beta.4

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 (68) hide show
  1. package/README.md +54 -4
  2. package/lib/index.d.ts +4 -4
  3. package/lib/index.d.ts.map +1 -1
  4. package/lib/index.js +4 -4
  5. package/lib/index.js.map +1 -1
  6. package/lib/services/firestore.service.d.ts +237 -0
  7. package/lib/services/firestore.service.d.ts.map +1 -0
  8. package/lib/services/firestore.service.js +693 -0
  9. package/lib/services/firestore.service.js.map +1 -0
  10. package/lib/services/index.d.ts +1 -1
  11. package/lib/services/index.d.ts.map +1 -1
  12. package/lib/services/index.js +1 -1
  13. package/lib/services/index.js.map +1 -1
  14. package/lib/services/{kms.d.ts → kms.service.d.ts} +14 -15
  15. package/lib/services/kms.service.d.ts.map +1 -0
  16. package/lib/services/{kms.js → kms.service.js} +18 -16
  17. package/lib/services/kms.service.js.map +1 -0
  18. package/lib/services/{pubsub.d.ts → pubsub.service.d.ts} +23 -4
  19. package/lib/services/pubsub.service.d.ts.map +1 -0
  20. package/lib/services/{pubsub.js → pubsub.service.js} +36 -10
  21. package/lib/services/pubsub.service.js.map +1 -0
  22. package/lib/services/{queue.d.ts → queue.service.d.ts} +32 -16
  23. package/lib/services/queue.service.d.ts.map +1 -0
  24. package/lib/services/{queue.js → queue.service.js} +63 -32
  25. package/lib/services/queue.service.js.map +1 -0
  26. package/lib/services/storage.service.d.ts +268 -0
  27. package/lib/services/storage.service.d.ts.map +1 -0
  28. package/lib/services/{storage.js → storage.service.js} +116 -69
  29. package/lib/services/storage.service.js.map +1 -0
  30. package/package.json +33 -43
  31. package/webda.module.json +1122 -1440
  32. package/lib/index.spec.d.ts +0 -5
  33. package/lib/index.spec.d.ts.map +0 -1
  34. package/lib/index.spec.js +0 -7
  35. package/lib/index.spec.js.map +0 -1
  36. package/lib/services/firestore.d.ts +0 -135
  37. package/lib/services/firestore.d.ts.map +0 -1
  38. package/lib/services/firestore.js +0 -423
  39. package/lib/services/firestore.js.map +0 -1
  40. package/lib/services/firestore.spec.d.ts +0 -2
  41. package/lib/services/firestore.spec.d.ts.map +0 -1
  42. package/lib/services/firestore.spec.js +0 -187
  43. package/lib/services/firestore.spec.js.map +0 -1
  44. package/lib/services/kms.d.ts.map +0 -1
  45. package/lib/services/kms.js.map +0 -1
  46. package/lib/services/kms.spec.d.ts +0 -2
  47. package/lib/services/kms.spec.d.ts.map +0 -1
  48. package/lib/services/kms.spec.js +0 -53
  49. package/lib/services/kms.spec.js.map +0 -1
  50. package/lib/services/pubsub.d.ts.map +0 -1
  51. package/lib/services/pubsub.js.map +0 -1
  52. package/lib/services/pubsub.spec.d.ts +0 -2
  53. package/lib/services/pubsub.spec.d.ts.map +0 -1
  54. package/lib/services/pubsub.spec.js +0 -95
  55. package/lib/services/pubsub.spec.js.map +0 -1
  56. package/lib/services/queue.d.ts.map +0 -1
  57. package/lib/services/queue.js.map +0 -1
  58. package/lib/services/queue.spec.d.ts +0 -2
  59. package/lib/services/queue.spec.d.ts.map +0 -1
  60. package/lib/services/queue.spec.js +0 -117
  61. package/lib/services/queue.spec.js.map +0 -1
  62. package/lib/services/storage.d.ts +0 -215
  63. package/lib/services/storage.d.ts.map +0 -1
  64. package/lib/services/storage.js.map +0 -1
  65. package/lib/services/storage.spec.d.ts +0 -2
  66. package/lib/services/storage.spec.d.ts.map +0 -1
  67. package/lib/services/storage.spec.js +0 -224
  68. package/lib/services/storage.spec.js.map +0 -1
package/README.md CHANGED
@@ -13,16 +13,66 @@ This module is part of Webda Application Framework that allows you to quickly de
13
13
 
14
14
  <!-- README_HEADER -->
15
15
 
16
- This project allows you to use Cloud Storage ... soon
16
+ # @webda/gcp
17
17
 
18
- ## Run local tests
18
+ > Google Cloud Platform integration bundle for Webda — Firestore Store, Cloud Storage Binary, Cloud Pub/Sub, GCP Queue, and KMS encryption service in one package.
19
19
 
20
- The test credentials need to be provided by the author
20
+ ## When to use it
21
21
 
22
+ - You are deploying a Webda application on GCP and need cloud-native backing services.
23
+ - You want to replace `MemoryStore` / `FileBinary` / `MemoryQueue` with GCP-managed equivalents for production.
24
+ - You need envelope encryption via Google Cloud KMS for stored model data.
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ pnpm add @webda/gcp
30
+ ```
31
+
32
+ ## What's inside
33
+
34
+ - `FireStore` — Firestore-backed Store for any Webda model ([source](./src/services/firestore.ts))
35
+ - `Storage` — Cloud Storage-backed Binary service for file uploads/downloads ([source](./src/services/storage.ts))
36
+ - `GCPQueue` — Cloud Pub/Sub-backed Queue for reliable task delivery ([source](./src/services/queue.ts))
37
+ - `GCPPubSubService` — Cloud Pub/Sub fan-out pub/sub messaging ([source](./src/services/pubsub.ts))
38
+ - `GCPKMSService` — Cloud KMS-based encryption/decryption ([source](./src/services/kms.ts))
39
+
40
+ ## Quick config example
41
+
42
+ ```json
43
+ {
44
+ "services": {
45
+ "userStore": {
46
+ "type": "FireStore",
47
+ "model": "MyApp/User",
48
+ "project": "my-gcp-project",
49
+ "collection": "users"
50
+ },
51
+ "uploads": {
52
+ "type": "Storage",
53
+ "bucket": "my-app-uploads"
54
+ },
55
+ "taskQueue": {
56
+ "type": "GCPQueue",
57
+ "topic": "my-app-tasks",
58
+ "subscription": "my-app-tasks-sub"
59
+ }
60
+ }
61
+ }
22
62
  ```
23
- GOOGLE_APPLICATION_CREDENTIALS=`pwd`/webda-dev-750c62811e3b.json yarn test
63
+
64
+ Authentication uses Application Default Credentials. Set `GOOGLE_APPLICATION_CREDENTIALS` to a service account key file for local development:
65
+
66
+ ```bash
67
+ GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json webda serve
24
68
  ```
25
69
 
70
+ ## Reference
71
+
72
+ - API reference: see the auto-generated typedoc at `docs/pages/Modules/gcp/`.
73
+ - Source: [`packages/gcp`](https://github.com/loopingz/webda.io/tree/main/packages/gcp)
74
+ - Related: [`@webda/core`](../core) for the `Store`, `Binary`, and `Queue` base classes; [`@webda/async`](../async) for job orchestration on top of GCPQueue; [`@webda/aws`](../aws) for the AWS equivalent.
75
+
26
76
  <!-- README_FOOTER -->
27
77
  ## Sponsors
28
78
 
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export * from "./services/firestore.js";
2
- export * from "./services/pubsub.js";
3
- export * from "./services/queue.js";
4
- export * from "./services/storage.js";
1
+ export * from "./services/firestore.service.js";
2
+ export * from "./services/pubsub.service.js";
3
+ export * from "./services/queue.service.js";
4
+ export * from "./services/storage.service.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC"}
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
- export * from "./services/firestore.js";
2
- export * from "./services/pubsub.js";
3
- export * from "./services/queue.js";
4
- export * from "./services/storage.js";
1
+ export * from "./services/firestore.service.js";
2
+ export * from "./services/pubsub.service.js";
3
+ export * from "./services/queue.service.js";
4
+ export * from "./services/storage.service.js";
5
5
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,237 @@
1
+ import { DocumentReference, Firestore } from "@google-cloud/firestore";
2
+ import { MemoryRepository, Store, StoreParameters } from "@webda/core";
3
+ import type { ModelClass, Repository } from "@webda/core";
4
+ import * as WebdaQL from "@webda/ql";
5
+ /**
6
+ * Definition of a FireStore index
7
+ */
8
+ export type FireStoreIndex = {
9
+ [key: string]: "asc" | "desc";
10
+ };
11
+ /**
12
+ * Stored version of indexes
13
+ */
14
+ export type FireStoreIndexOrder = {
15
+ [key: string]: Set<"asc" | "desc">;
16
+ };
17
+ /**
18
+ * Result of a Firestore find, `filter` is the part of the query that Firestore
19
+ * could not apply natively and that was applied in memory (`true` if none)
20
+ */
21
+ export interface FireStoreFindResult<T> {
22
+ results: T[];
23
+ filter: WebdaQL.Expression | true;
24
+ continuationToken?: string;
25
+ }
26
+ /**
27
+ * Firebase parameters
28
+ */
29
+ export declare class FireStoreParameters extends StoreParameters {
30
+ /**
31
+ * Collection to use
32
+ */
33
+ collection: string;
34
+ /**
35
+ * Per-model collection overrides.
36
+ * Maps a model identifier (e.g. "Webda/User") to a collection name.
37
+ * When not specified, the first model uses `collection` and others use their identifier
38
+ * lowercased with "/" replaced by "_".
39
+ */
40
+ collections?: {
41
+ [modelIdentifier: string]: string;
42
+ };
43
+ /**
44
+ * To allow efficient query on several fields
45
+ *
46
+ * @see https://firebase.google.com/docs/firestore/query-data/queries
47
+ */
48
+ compoundIndexes?: FireStoreIndex[];
49
+ /**
50
+ * @override
51
+ * @param params - raw parameters
52
+ * @returns this
53
+ */
54
+ load(params?: any): this;
55
+ }
56
+ /**
57
+ * Recursively convert a value to what Firestore can store
58
+ *
59
+ * Dates are kept as is (Firestore stores them as Timestamp), objects exposing a
60
+ * `toJSON` (models, binaries) are serialized first, functions and undefined are dropped
61
+ *
62
+ * @param value - the value to convert
63
+ * @returns the Firestore compatible value
64
+ */
65
+ export declare function toFirestore(value: any): any;
66
+ /**
67
+ * Recursively replace Timestamp by Date
68
+ * @param doc - the Firestore document data
69
+ * @returns the data with Date objects
70
+ */
71
+ export declare function giveDatesBack(doc: any): any;
72
+ /**
73
+ * Firestore-backed repository for a single model class
74
+ *
75
+ * Every object is stored as a document of the collection, keyed by its primary key.
76
+ * The inherited MemoryRepository is only used for its helpers, every storage
77
+ * method hits Firestore.
78
+ */
79
+ export declare class FireStoreRepository<T extends ModelClass> extends MemoryRepository<T> {
80
+ protected readonly firestore: Firestore;
81
+ protected readonly collection: string;
82
+ protected readonly log: (level: any, ...args: any[]) => void;
83
+ /**
84
+ * Compound indexes available, keyed by the sorted fields joined with "/"
85
+ */
86
+ protected compoundIndexes: {
87
+ [key: string]: FireStoreIndexOrder;
88
+ };
89
+ /**
90
+ * @param model - the model class
91
+ * @param pks - primary key field names
92
+ * @param firestore - the Firestore client
93
+ * @param collection - the collection name
94
+ * @param indexes - compound indexes declared on the store
95
+ * @param log - logger of the store
96
+ * @param separator - primary key separator
97
+ */
98
+ constructor(model: T, pks: string[], firestore: Firestore, collection: string, indexes?: FireStoreIndex[], log?: (level: any, ...args: any[]) => void, separator?: string);
99
+ /**
100
+ * The backing collection name for this repository's model
101
+ * @returns the collection name
102
+ */
103
+ getCollection(): string;
104
+ /**
105
+ * Get Document Reference
106
+ * @param primaryKey - the object or primary key
107
+ * @returns the document reference
108
+ */
109
+ getDocumentRef(primaryKey: any): DocumentReference;
110
+ /**
111
+ * Deserialize a Firestore document into a model instance
112
+ * @param data - the document data
113
+ * @returns the model instance
114
+ */
115
+ protected fromFirestore(data: any): InstanceType<T>;
116
+ /**
117
+ * Verify a write condition
118
+ * @param uid - the object key, for the error
119
+ * @param data - the current data
120
+ * @param field - the field to check
121
+ * @param condition - the expected value
122
+ */
123
+ protected checkFirestoreCondition(uid: string, data: any, field: string, condition: any): void;
124
+ /**
125
+ * Translate Firestore not found error
126
+ * @param uid - the object key
127
+ * @param err - the error raised
128
+ */
129
+ protected translateError(uid: string, err: any): never;
130
+ /** @override */
131
+ get(primaryKey: any): Promise<any>;
132
+ /** @override */
133
+ exists(primaryKey: any): Promise<boolean>;
134
+ /** @override */
135
+ create(data: any, save?: boolean): Promise<any>;
136
+ /**
137
+ * Implement both update and patch
138
+ * @param merge - merge with the existing document (patch) or replace it (update)
139
+ * @param primaryKey - the object or primary key
140
+ * @param data - the data to write
141
+ * @param conditionField - the field to check
142
+ * @param condition - the expected value
143
+ */
144
+ protected setDocument(merge: boolean, primaryKey: any, data: any, conditionField?: string, condition?: any): Promise<void>;
145
+ /** @override */
146
+ update(data: any, conditionField?: any, condition?: any): Promise<void>;
147
+ /** @override */
148
+ patch(primaryKey: any, data: any, conditionField?: any, condition?: any): Promise<void>;
149
+ /** @override */
150
+ delete(primaryKey: any, conditionField?: any, condition?: any): Promise<void>;
151
+ /** @override */
152
+ removeAttribute(primaryKey: any, attribute: any, conditionField?: any, condition?: any): Promise<void>;
153
+ /** @override */
154
+ incrementAttributes(primaryKey: any, info: any, _conditionField?: any, _condition?: any): Promise<void>;
155
+ /** @override */
156
+ upsertItemToCollection(primaryKey: any, collection: any, item: any, index?: number, itemWriteConditionField?: any, itemWriteCondition?: any): Promise<void>;
157
+ /** @override */
158
+ deleteItemFromCollection(primaryKey: any, collection: any, index: number, itemWriteConditionField?: any, itemWriteCondition?: any): Promise<void>;
159
+ /**
160
+ * Run a parsed query against Firestore
161
+ *
162
+ * Firestore has strong limitations on what can be queried natively, the part of the
163
+ * query that cannot be translated is applied in memory and returned as `filter`
164
+ *
165
+ * @param parsedQuery - the parsed WebdaQL query
166
+ * @returns the results, the in-memory filter and the continuation token
167
+ */
168
+ find(parsedQuery: WebdaQL.Query): Promise<FireStoreFindResult<InstanceType<T>>>;
169
+ /**
170
+ * Manage OrderBy complex condition on Firebase
171
+ * @param query - the Firestore query
172
+ * @param orderBy - the requested order
173
+ * @param rangeAttribute - the attribute used in a range condition if any
174
+ * @returns the Firestore query with ordering
175
+ */
176
+ handleOrderBy(query: FirebaseFirestore.Query<FirebaseFirestore.DocumentData>, orderBy: WebdaQL.OrderBy[], rangeAttribute: string): FirebaseFirestore.Query<FirebaseFirestore.DocumentData>;
177
+ /** @override */
178
+ query(query: string | any): Promise<{
179
+ results: InstanceType<T>[];
180
+ continuationToken?: string;
181
+ }>;
182
+ /** @override */
183
+ iterate(query: string): AsyncGenerator<InstanceType<T>, any, any>;
184
+ /**
185
+ * Delete every document of the collection (used in tests)
186
+ */
187
+ clear(): Promise<void>;
188
+ }
189
+ /**
190
+ * Implement Firebase abstraction within Webda
191
+ *
192
+ * @WebdaModda GoogleCloudFireStore
193
+ */
194
+ export default class FireStore<K extends FireStoreParameters = FireStoreParameters> extends Store<K> {
195
+ firestore: Firestore;
196
+ /**
197
+ * Create the Firestore client
198
+ * @override
199
+ */
200
+ computeParameters(): void;
201
+ /**
202
+ * Terminate the Firestore client
203
+ * @override
204
+ */
205
+ stop(): Promise<void>;
206
+ /**
207
+ * Resolve the collection name for a given model class
208
+ *
209
+ * Resolution order:
210
+ * 1. `parameters.collections[meta.Identifier]` — explicit per-model override
211
+ * 2. `parameters.collection` for the first model configured or when a single model is managed
212
+ * 3. Default — model identifier lowercased with "/" replaced by "_"
213
+ *
214
+ * @param model - the model class
215
+ * @returns the collection name
216
+ */
217
+ resolveCollection(model: ModelClass): string;
218
+ /**
219
+ * Build and return a FireStoreRepository for the given model
220
+ *
221
+ * The result is cached per model class via `@InstanceCache`.
222
+ * @param model - the model class
223
+ * @returns a repository backed by Firestore
224
+ */
225
+ getRepository<T extends ModelClass>(model: T): Repository<T>;
226
+ /**
227
+ * Return the underlying FireStoreRepository for each model this store manages
228
+ * @returns the per-model FireStoreRepository instances
229
+ */
230
+ getRepositories(): FireStoreRepository<any>[];
231
+ /**
232
+ * Delete every document of the managed collections (used in tests)
233
+ */
234
+ __clean(): Promise<void>;
235
+ }
236
+ export { FireStore };
237
+ //# sourceMappingURL=firestore.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firestore.service.d.ts","sourceRoot":"","sources":["../../src/services/firestore.service.ts"],"names":[],"mappings":"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"}