@webda/gcp 2.0.0-beta.3 → 2.0.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.
- package/lib/index.d.ts +4 -1
- package/lib/index.js +4 -17
- package/lib/index.js.map +1 -1
- package/lib/index.spec.d.ts +1 -1
- package/lib/index.spec.js +4 -22
- package/lib/index.spec.js.map +1 -1
- package/lib/services/firestore.js +207 -256
- package/lib/services/firestore.js.map +1 -1
- package/lib/services/firestore.spec.js +132 -169
- package/lib/services/firestore.spec.js.map +1 -1
- package/lib/services/index.d.ts +1 -1
- package/lib/services/index.js +1 -17
- package/lib/services/index.js.map +1 -1
- package/lib/services/pubsub.js +19 -40
- package/lib/services/pubsub.js.map +1 -1
- package/lib/services/pubsub.spec.js +45 -58
- package/lib/services/pubsub.spec.js.map +1 -1
- package/lib/services/queue.js +63 -90
- package/lib/services/queue.js.map +1 -1
- package/lib/services/queue.spec.js +75 -92
- package/lib/services/queue.spec.js.map +1 -1
- package/lib/services/storage.d.ts +2 -0
- package/lib/services/storage.js +93 -126
- package/lib/services/storage.js.map +1 -1
- package/lib/services/storage.spec.js +113 -169
- package/lib/services/storage.spec.js.map +1 -1
- package/package.json +13 -10
- package/webda.module.json +98 -66
|
@@ -1,38 +1,22 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
6
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const store_spec_1 = require("@webda/core/lib/stores/store.spec");
|
|
22
|
-
const assert = require("assert");
|
|
23
|
-
const sinon = require("sinon");
|
|
24
|
-
const uuid_1 = require("uuid");
|
|
25
|
-
const firestore_2 = require("./firestore");
|
|
26
|
-
let FireStoreTest = class FireStoreTest extends store_spec_1.StoreTest {
|
|
27
|
-
before() {
|
|
28
|
-
const _super = Object.create(null, {
|
|
29
|
-
before: { get: () => super.before }
|
|
30
|
-
});
|
|
31
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
this.unitUuid = (0, uuid_1.v4)();
|
|
33
|
-
this.firestore = new firestore_1.Firestore();
|
|
34
|
-
yield _super.before.call(this);
|
|
35
|
-
});
|
|
7
|
+
import { Firestore } from "@google-cloud/firestore";
|
|
8
|
+
import { suite, test } from "@testdeck/mocha";
|
|
9
|
+
import { Ident, WebdaQL } from "@webda/core";
|
|
10
|
+
import { StoreTest } from "@webda/core/lib/stores/store.spec.js";
|
|
11
|
+
import * as assert from "assert";
|
|
12
|
+
import * as sinon from "sinon";
|
|
13
|
+
import { v4 as uuidv4 } from "uuid";
|
|
14
|
+
import { FireStore } from "./firestore.js";
|
|
15
|
+
let FireStoreTest = class FireStoreTest extends StoreTest {
|
|
16
|
+
async before() {
|
|
17
|
+
this.unitUuid = uuidv4();
|
|
18
|
+
this.firestore = new Firestore();
|
|
19
|
+
await super.before();
|
|
36
20
|
}
|
|
37
21
|
getIdentStore() {
|
|
38
22
|
let ident = this.getService("fireidents");
|
|
@@ -45,112 +29,99 @@ let FireStoreTest = class FireStoreTest extends store_spec_1.StoreTest {
|
|
|
45
29
|
return user;
|
|
46
30
|
}
|
|
47
31
|
getModelClass() {
|
|
48
|
-
return
|
|
32
|
+
return Ident;
|
|
49
33
|
}
|
|
50
34
|
/**
|
|
51
35
|
* Delete a full collection
|
|
52
36
|
*/
|
|
53
|
-
deleteCollection(collectionPath, batchSize) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
this.deleteQueryBatch(this.firestore, query, resolve).catch(reject);
|
|
59
|
-
});
|
|
37
|
+
async deleteCollection(collectionPath, batchSize) {
|
|
38
|
+
const collectionRef = this.firestore.collection(collectionPath);
|
|
39
|
+
const query = collectionRef.orderBy("__name__").limit(batchSize);
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
this.deleteQueryBatch(this.firestore, query, resolve).catch(reject);
|
|
60
42
|
});
|
|
61
43
|
}
|
|
62
|
-
cleanCollection() {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}));
|
|
68
|
-
});
|
|
44
|
+
async cleanCollection() {
|
|
45
|
+
let collections = await this.firestore.listCollections();
|
|
46
|
+
await Promise.all(collections.map(c => {
|
|
47
|
+
return this.deleteCollection(c.id, 1000);
|
|
48
|
+
}));
|
|
69
49
|
}
|
|
70
|
-
fillForQuery() {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
store.resolve();
|
|
81
|
-
yield store.init();
|
|
82
|
-
let res = yield this.firestore.collection("webda-query").where("order", "==", 1).get();
|
|
83
|
-
if (!res.docs.length) {
|
|
84
|
-
console.log("Init the query collection");
|
|
85
|
-
yield Promise.all(this.getQueryDocuments().map(d => store.save(d)));
|
|
86
|
-
}
|
|
87
|
-
return store;
|
|
50
|
+
async fillForQuery() {
|
|
51
|
+
// Create a new store
|
|
52
|
+
let store = new FireStore(this.webda, "queryStore", {
|
|
53
|
+
collection: "webda-query",
|
|
54
|
+
compoundIndexes: [{ state: "asc", "team.id": "asc" }],
|
|
55
|
+
expose: {
|
|
56
|
+
url: "/query",
|
|
57
|
+
},
|
|
88
58
|
});
|
|
59
|
+
store.resolve();
|
|
60
|
+
await store.init();
|
|
61
|
+
let res = await this.firestore.collection("webda-query").where("order", "==", 1).get();
|
|
62
|
+
if (!res.docs.length) {
|
|
63
|
+
console.log("Init the query collection");
|
|
64
|
+
await Promise.all(this.getQueryDocuments().map(d => store.save(d)));
|
|
65
|
+
}
|
|
66
|
+
return store;
|
|
89
67
|
}
|
|
90
|
-
query() {
|
|
91
|
-
|
|
92
|
-
|
|
68
|
+
async query() {
|
|
69
|
+
let store = await super.query();
|
|
70
|
+
let exp = new WebdaQL.QueryValidator('state = "CA" AND role = 4').getExpression();
|
|
71
|
+
let res = await store.find({ filter: exp, limit: 1000 });
|
|
72
|
+
assert.strictEqual(res.filter, true, `Should not have any post filter ${res.filter.toString()}`);
|
|
73
|
+
assert.strictEqual(res.results.length, 50);
|
|
74
|
+
exp = new WebdaQL.QueryValidator('state = "CA" AND team.id < 5').getExpression();
|
|
75
|
+
res = await store.find({ filter: exp, limit: 1000 });
|
|
76
|
+
assert.strictEqual(res.filter, true, `Should not have post filter ${res.filter.toString()}`);
|
|
77
|
+
assert.strictEqual(res.results.length, 100);
|
|
78
|
+
exp = new WebdaQL.QueryValidator('state = "CA" AND team.id < 5 AND role >= 4').getExpression();
|
|
79
|
+
res = await store.find({ filter: exp, limit: 1000 });
|
|
80
|
+
assert.notStrictEqual(res.filter, true, `Should have post filter ${res.filter.toString()}`);
|
|
81
|
+
assert.strictEqual(res.results.length, 100);
|
|
82
|
+
assert.strictEqual(res.results.filter(c => res.filter.eval(c)).length, 50);
|
|
83
|
+
exp = new WebdaQL.QueryValidator('state = "CA" AND role <= 4').getExpression();
|
|
84
|
+
res = await store.find({ filter: exp, limit: 1000 });
|
|
85
|
+
assert.notStrictEqual(res.filter, true, "Should have post filter");
|
|
86
|
+
assert.strictEqual(res.results.length, 250);
|
|
87
|
+
let items = ["CA", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
|
|
88
|
+
res = await store.find({
|
|
89
|
+
filter: new WebdaQL.QueryValidator(`state IN [${items.map(i => `"${i}"`).join(",")}]`).getExpression(),
|
|
90
|
+
limit: 1000,
|
|
93
91
|
});
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
assert.strictEqual(res.results.length, 50);
|
|
100
|
-
exp = new core_1.WebdaQL.QueryValidator('state = "CA" AND team.id < 5').getExpression();
|
|
101
|
-
res = yield store.find({ filter: exp, limit: 1000 });
|
|
102
|
-
assert.strictEqual(res.filter, true, `Should not have post filter ${res.filter.toString()}`);
|
|
103
|
-
assert.strictEqual(res.results.length, 100);
|
|
104
|
-
exp = new core_1.WebdaQL.QueryValidator('state = "CA" AND team.id < 5 AND role >= 4').getExpression();
|
|
105
|
-
res = yield store.find({ filter: exp, limit: 1000 });
|
|
106
|
-
assert.notStrictEqual(res.filter, true, `Should have post filter ${res.filter.toString()}`);
|
|
107
|
-
assert.strictEqual(res.results.length, 100);
|
|
108
|
-
assert.strictEqual(res.results.filter(c => res.filter.eval(c)).length, 50);
|
|
109
|
-
exp = new core_1.WebdaQL.QueryValidator('state = "CA" AND role <= 4').getExpression();
|
|
110
|
-
res = yield store.find({ filter: exp, limit: 1000 });
|
|
111
|
-
assert.notStrictEqual(res.filter, true, "Should have post filter");
|
|
112
|
-
assert.strictEqual(res.results.length, 250);
|
|
113
|
-
let items = ["CA", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
|
|
114
|
-
res = yield store.find({
|
|
115
|
-
filter: new core_1.WebdaQL.QueryValidator(`state IN [${items.map(i => `"${i}"`).join(",")}]`).getExpression(),
|
|
116
|
-
limit: 1000,
|
|
117
|
-
});
|
|
118
|
-
// Should be post filtered
|
|
119
|
-
assert.strictEqual(res.results.length, 1000);
|
|
120
|
-
res = yield store.find({
|
|
121
|
-
filter: new core_1.WebdaQL.QueryValidator(`state IN ["CA", "OR"] AND team.id IN [4,8]`).getExpression(),
|
|
122
|
-
limit: 1000,
|
|
123
|
-
});
|
|
124
|
-
assert.strictEqual(res.results.length, 500);
|
|
125
|
-
res = yield store.find({
|
|
126
|
-
filter: new core_1.WebdaQL.QueryValidator(`team.id < 5 AND state > "CA"`).getExpression(),
|
|
127
|
-
limit: 1000,
|
|
128
|
-
});
|
|
129
|
-
assert.strictEqual(res.results.length, 250);
|
|
130
|
-
return store;
|
|
92
|
+
// Should be post filtered
|
|
93
|
+
assert.strictEqual(res.results.length, 1000);
|
|
94
|
+
res = await store.find({
|
|
95
|
+
filter: new WebdaQL.QueryValidator(`state IN ["CA", "OR"] AND team.id IN [4,8]`).getExpression(),
|
|
96
|
+
limit: 1000,
|
|
131
97
|
});
|
|
98
|
+
assert.strictEqual(res.results.length, 500);
|
|
99
|
+
res = await store.find({
|
|
100
|
+
filter: new WebdaQL.QueryValidator(`team.id < 5 AND state > "CA"`).getExpression(),
|
|
101
|
+
limit: 1000,
|
|
102
|
+
});
|
|
103
|
+
assert.strictEqual(res.results.length, 250);
|
|
104
|
+
return store;
|
|
132
105
|
}
|
|
133
|
-
queryOrder() {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
assert.deepStrictEqual({ teamId: 0, state: "CA" }, { teamId: c.teamId, state: c.state });
|
|
148
|
-
});
|
|
149
|
-
// It should not fail even if index is not found
|
|
150
|
-
res = yield store.query("ORDER BY state ASC, team.id DESC LIMIT 10");
|
|
151
|
-
res = yield store.query("order > 900 ORDER BY team.id ASC LIMIT 10");
|
|
152
|
-
res = yield store.query("ORDER BY team.id ASC, order DESC LIMIT 10");
|
|
106
|
+
async queryOrder() {
|
|
107
|
+
// Disable default ordering query as it is not possible with Dynamo
|
|
108
|
+
let store = await this.fillForQuery();
|
|
109
|
+
let res = await store.query("order > 900 ORDER BY order DESC LIMIT 10");
|
|
110
|
+
assert.strictEqual(res.results.shift().order, 999);
|
|
111
|
+
res = await store.query("ORDER BY order ASC LIMIT 10");
|
|
112
|
+
assert.strictEqual(res.results.shift().order, 0);
|
|
113
|
+
res = await store.query("ORDER BY order DESC LIMIT 10");
|
|
114
|
+
assert.strictEqual(res.results.shift().order, 999);
|
|
115
|
+
res = await store.query("ORDER BY state ASC, team.id ASC LIMIT 10");
|
|
116
|
+
res.results
|
|
117
|
+
.map(c => this.mapQueryModel(c))
|
|
118
|
+
.forEach(c => {
|
|
119
|
+
assert.deepStrictEqual({ teamId: 0, state: "CA" }, { teamId: c.teamId, state: c.state });
|
|
153
120
|
});
|
|
121
|
+
// It should not fail even if index is not found
|
|
122
|
+
res = await store.query("ORDER BY state ASC, team.id DESC LIMIT 10");
|
|
123
|
+
res = await store.query("order > 900 ORDER BY team.id ASC LIMIT 10");
|
|
124
|
+
res = await store.query("ORDER BY team.id ASC, order DESC LIMIT 10");
|
|
154
125
|
}
|
|
155
126
|
/**
|
|
156
127
|
* Query batch
|
|
@@ -158,69 +129,61 @@ let FireStoreTest = class FireStoreTest extends store_spec_1.StoreTest {
|
|
|
158
129
|
* Code from Google Documentation
|
|
159
130
|
*
|
|
160
131
|
*/
|
|
161
|
-
deleteQueryBatch(db, query, resolve) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
batch.delete(doc.ref);
|
|
174
|
-
});
|
|
175
|
-
yield batch.commit();
|
|
176
|
-
// Recurse on the next process tick, to avoid
|
|
177
|
-
// exploding the stack.
|
|
178
|
-
process.nextTick(() => {
|
|
179
|
-
this.deleteQueryBatch(db, query, resolve);
|
|
180
|
-
});
|
|
132
|
+
async deleteQueryBatch(db, query, resolve) {
|
|
133
|
+
const snapshot = await query.get();
|
|
134
|
+
const batchSize = snapshot.size;
|
|
135
|
+
if (batchSize === 0) {
|
|
136
|
+
// When there are no documents left, we are done
|
|
137
|
+
resolve();
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Delete documents in a batch
|
|
141
|
+
const batch = db.batch();
|
|
142
|
+
snapshot.docs.forEach(doc => {
|
|
143
|
+
batch.delete(doc.ref);
|
|
181
144
|
});
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
145
|
+
await batch.commit();
|
|
146
|
+
// Recurse on the next process tick, to avoid
|
|
147
|
+
// exploding the stack.
|
|
148
|
+
process.nextTick(() => {
|
|
149
|
+
this.deleteQueryBatch(db, query, resolve);
|
|
187
150
|
});
|
|
188
151
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
152
|
+
async after() {
|
|
153
|
+
await this.deleteCollection(`idents_${this.unitUuid}`, 10000);
|
|
154
|
+
await this.deleteCollection(`users_${this.unitUuid}`, 10000);
|
|
155
|
+
}
|
|
156
|
+
async deleteCondition() {
|
|
157
|
+
let idents = this.getIdentStore();
|
|
158
|
+
let obj = await idents.save({
|
|
159
|
+
plop: 3,
|
|
197
160
|
});
|
|
161
|
+
await assert.rejects(() => idents._delete(obj.getUuid(), 2, "plop"), /UpdateCondition not met/);
|
|
162
|
+
await idents._delete(obj.getUuid(), 3, "plop");
|
|
198
163
|
}
|
|
199
|
-
cov() {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
throw new Error("FAKE");
|
|
205
|
-
});
|
|
206
|
-
yield assert.rejects(() => store.upsertItemToCollection("inexisting", "plop", {}), /FAKE/);
|
|
207
|
-
yield assert.rejects(() => store.incrementAttribute("inexisting", "plop", 1), /FAKE/);
|
|
164
|
+
async cov() {
|
|
165
|
+
const store = this.getIdentStore();
|
|
166
|
+
await assert.rejects(() => store.upsertItemToCollection("inexisting", "plop", {}, 0), /Item not found inexisting/);
|
|
167
|
+
sinon.stub(store, "getDocumentRef").callsFake(() => {
|
|
168
|
+
throw new Error("FAKE");
|
|
208
169
|
});
|
|
170
|
+
await assert.rejects(() => store.upsertItemToCollection("inexisting", "plop", {}), /FAKE/);
|
|
171
|
+
await assert.rejects(() => store.incrementAttribute("inexisting", "plop", 1), /FAKE/);
|
|
209
172
|
}
|
|
210
173
|
};
|
|
211
174
|
__decorate([
|
|
212
|
-
|
|
175
|
+
test
|
|
213
176
|
], FireStoreTest.prototype, "query", null);
|
|
214
177
|
__decorate([
|
|
215
|
-
|
|
178
|
+
test
|
|
216
179
|
], FireStoreTest.prototype, "queryOrder", null);
|
|
217
180
|
__decorate([
|
|
218
|
-
|
|
181
|
+
test
|
|
219
182
|
], FireStoreTest.prototype, "deleteCondition", null);
|
|
220
183
|
__decorate([
|
|
221
|
-
|
|
184
|
+
test
|
|
222
185
|
], FireStoreTest.prototype, "cov", null);
|
|
223
186
|
FireStoreTest = __decorate([
|
|
224
|
-
|
|
187
|
+
suite
|
|
225
188
|
], FireStoreTest);
|
|
226
189
|
//# sourceMappingURL=firestore.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.spec.js","sourceRoot":"","sources":["../../src/services/firestore.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"firestore.spec.js","sourceRoot":"","sources":["../../src/services/firestore.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/services/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./storage";
|
|
1
|
+
export * from "./storage.js";
|
package/lib/services/index.js
CHANGED
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./storage"), exports);
|
|
1
|
+
export * from "./storage.js";
|
|
18
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|
package/lib/services/pubsub.js
CHANGED
|
@@ -1,20 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.GCPPubSubService = exports.GCPPubSubParameters = void 0;
|
|
13
|
-
const pubsub_1 = require("@google-cloud/pubsub");
|
|
14
|
-
const core_1 = require("@webda/core");
|
|
15
|
-
class GCPPubSubParameters extends core_1.ServiceParameters {
|
|
1
|
+
import { PubSub } from "@google-cloud/pubsub";
|
|
2
|
+
import { CancelablePromise, PubSubService, ServiceParameters } from "@webda/core";
|
|
3
|
+
export class GCPPubSubParameters extends ServiceParameters {
|
|
16
4
|
}
|
|
17
|
-
exports.GCPPubSubParameters = GCPPubSubParameters;
|
|
18
5
|
/***
|
|
19
6
|
* Implement GCP Pub/Sub
|
|
20
7
|
*
|
|
@@ -22,27 +9,20 @@ exports.GCPPubSubParameters = GCPPubSubParameters;
|
|
|
22
9
|
*
|
|
23
10
|
* @WebdaModda GoogleCloudPubSub
|
|
24
11
|
*/
|
|
25
|
-
class GCPPubSubService extends
|
|
12
|
+
export default class GCPPubSubService extends PubSubService {
|
|
26
13
|
/**
|
|
27
14
|
* @override
|
|
28
15
|
*/
|
|
29
|
-
init() {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
-
yield _super.init.call(this);
|
|
35
|
-
this.pubsub = new pubsub_1.PubSub();
|
|
36
|
-
return this;
|
|
37
|
-
});
|
|
16
|
+
async init() {
|
|
17
|
+
await super.init();
|
|
18
|
+
this.pubsub = new PubSub();
|
|
19
|
+
return this;
|
|
38
20
|
}
|
|
39
21
|
/**
|
|
40
22
|
* @override
|
|
41
23
|
*/
|
|
42
|
-
sendMessage(event) {
|
|
43
|
-
|
|
44
|
-
yield this.pubsub.topic(this.parameters.topic).publishMessage({ data: Buffer.from(JSON.stringify(event)) });
|
|
45
|
-
});
|
|
24
|
+
async sendMessage(event) {
|
|
25
|
+
await this.pubsub.topic(this.parameters.topic).publishMessage({ data: Buffer.from(JSON.stringify(event)) });
|
|
46
26
|
}
|
|
47
27
|
/**
|
|
48
28
|
* @override
|
|
@@ -50,19 +30,19 @@ class GCPPubSubService extends core_1.PubSubService {
|
|
|
50
30
|
consume(callback, eventPrototype, onBind) {
|
|
51
31
|
const subscriptionName = `${this.getName()}-${this.getWebda().getUuid()}`;
|
|
52
32
|
let subscription;
|
|
53
|
-
const messageHandler = (message) =>
|
|
33
|
+
const messageHandler = async (message) => {
|
|
54
34
|
try {
|
|
55
|
-
|
|
35
|
+
await callback(this.unserialize(message.data.toString(), eventPrototype));
|
|
56
36
|
message.ack();
|
|
57
37
|
}
|
|
58
38
|
catch (err) {
|
|
59
39
|
this.log("ERROR", `${this.getName()} consume message error`, err);
|
|
60
40
|
}
|
|
61
|
-
}
|
|
62
|
-
return new
|
|
41
|
+
};
|
|
42
|
+
return new CancelablePromise(async (_resolve, reject) => {
|
|
63
43
|
try {
|
|
64
44
|
subscription = this.pubsub.subscription(subscriptionName);
|
|
65
|
-
const [result] =
|
|
45
|
+
const [result] = await this.pubsub
|
|
66
46
|
.topic(this.parameters.topic)
|
|
67
47
|
.createSubscription(subscriptionName, this.parameters.subscriptionOptions);
|
|
68
48
|
subscription = result;
|
|
@@ -81,14 +61,13 @@ class GCPPubSubService extends core_1.PubSubService {
|
|
|
81
61
|
this.log("ERROR", `${this.getName()} consume error`, err);
|
|
82
62
|
reject(err);
|
|
83
63
|
}
|
|
84
|
-
}
|
|
64
|
+
}, async () => {
|
|
85
65
|
if (subscription) {
|
|
86
66
|
subscription.removeAllListeners();
|
|
87
|
-
|
|
67
|
+
await subscription.delete();
|
|
88
68
|
}
|
|
89
|
-
})
|
|
69
|
+
});
|
|
90
70
|
}
|
|
91
71
|
}
|
|
92
|
-
|
|
93
|
-
exports.GCPPubSubService = GCPPubSubService;
|
|
72
|
+
export { GCPPubSubService };
|
|
94
73
|
//# sourceMappingURL=pubsub.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/services/pubsub.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/services/pubsub.ts"],"names":[],"mappings":"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"}
|