@webda/gcp 2.0.0-beta.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firestore.spec.js","sourceRoot":"","sources":["../../src/services/firestore.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./storage";
@@ -0,0 +1,18 @@
1
+ "use strict";
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);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B"}
@@ -0,0 +1,35 @@
1
+ import { CancelablePromise, PubSubService, ServiceParameters } from "@webda/core";
2
+ import { PubSub, CreateSubscriptionOptions, Subscription } from "@google-cloud/pubsub";
3
+ export declare class GCPPubSubParameters extends ServiceParameters {
4
+ /**
5
+ * Topic to use on GCP
6
+ */
7
+ topic: string;
8
+ /**
9
+ * Subscription options to pass to GCP
10
+ */
11
+ subscriptionOptions?: CreateSubscriptionOptions;
12
+ }
13
+ /***
14
+ * Implement GCP Pub/Sub
15
+ *
16
+ * Can also act as queue
17
+ *
18
+ * @WebdaModda GoogleCloudPubSub
19
+ */
20
+ export default class GCPPubSubService<T = any, K extends GCPPubSubParameters = GCPPubSubParameters> extends PubSubService<T, K> {
21
+ pubsub: PubSub;
22
+ /**
23
+ * @override
24
+ */
25
+ init(): Promise<void>;
26
+ /**
27
+ * @override
28
+ */
29
+ sendMessage(event: T): Promise<void>;
30
+ /**
31
+ * @override
32
+ */
33
+ consume(callback: (event: T) => Promise<void>, eventPrototype?: new () => T, onBind?: (subscription: Subscription) => void): CancelablePromise<void>;
34
+ }
35
+ export { GCPPubSubService };
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.GCPPubSubService = exports.GCPPubSubParameters = void 0;
13
+ const core_1 = require("@webda/core");
14
+ const pubsub_1 = require("@google-cloud/pubsub");
15
+ class GCPPubSubParameters extends core_1.ServiceParameters {
16
+ }
17
+ exports.GCPPubSubParameters = GCPPubSubParameters;
18
+ /***
19
+ * Implement GCP Pub/Sub
20
+ *
21
+ * Can also act as queue
22
+ *
23
+ * @WebdaModda GoogleCloudPubSub
24
+ */
25
+ class GCPPubSubService extends core_1.PubSubService {
26
+ /**
27
+ * @override
28
+ */
29
+ init() {
30
+ const _super = Object.create(null, {
31
+ init: { get: () => super.init }
32
+ });
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ yield _super.init.call(this);
35
+ this.pubsub = new pubsub_1.PubSub();
36
+ });
37
+ }
38
+ /**
39
+ * @override
40
+ */
41
+ sendMessage(event) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ yield this.pubsub.topic(this.parameters.topic).publishMessage({ data: Buffer.from(JSON.stringify(event)) });
44
+ });
45
+ }
46
+ /**
47
+ * @override
48
+ */
49
+ consume(callback, eventPrototype, onBind) {
50
+ const subscriptionName = `${this.getName()}-${this.getWebda().getUuid()}`;
51
+ let subscription;
52
+ const messageHandler = (message) => __awaiter(this, void 0, void 0, function* () {
53
+ try {
54
+ yield callback(this.unserialize(message.data.toString(), eventPrototype));
55
+ message.ack();
56
+ }
57
+ catch (err) {
58
+ this.log("ERROR", `${this.getName()} consume message error`, err);
59
+ }
60
+ });
61
+ return new core_1.CancelablePromise((_resolve, reject) => __awaiter(this, void 0, void 0, function* () {
62
+ try {
63
+ subscription = this.pubsub.subscription(subscriptionName);
64
+ const [result] = yield this.pubsub
65
+ .topic(this.parameters.topic)
66
+ .createSubscription(subscriptionName, this.parameters.subscriptionOptions);
67
+ subscription = result;
68
+ // Receive callbacks for new messages on the subscription
69
+ subscription.on("message", messageHandler);
70
+ // Receive callbacks for errors on the subscription
71
+ subscription.on("error", error => {
72
+ console.error("Received error:", error);
73
+ reject(error);
74
+ });
75
+ if (onBind) {
76
+ onBind(subscription);
77
+ }
78
+ }
79
+ catch (err) {
80
+ this.log("ERROR", `${this.getName()} consume error`, err);
81
+ reject(err);
82
+ }
83
+ }), () => __awaiter(this, void 0, void 0, function* () {
84
+ if (subscription) {
85
+ subscription.removeAllListeners();
86
+ yield subscription.delete();
87
+ }
88
+ }));
89
+ }
90
+ }
91
+ exports.default = GCPPubSubService;
92
+ exports.GCPPubSubService = GCPPubSubService;
93
+ //# sourceMappingURL=pubsub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/services/pubsub.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sCAAkF;AAClF,iDAAgG;AAEhG,MAAa,mBAAoB,SAAQ,wBAAiB;CASzD;AATD,kDASC;AAED;;;;;;GAMG;AACH,MAAqB,gBAGnB,SAAQ,oBAAmB;IAG3B;;OAEG;IACG,IAAI;;;;;YACR,MAAM,OAAM,IAAI,WAAE,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAC7B,CAAC;KAAA;IAED;;OAEG;IACG,WAAW,CAAC,KAAQ;;YACxB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9G,CAAC;KAAA;IAED;;OAEG;IACH,OAAO,CACL,QAAqC,EACrC,cAA4B,EAC5B,MAA6C;QAE7C,MAAM,gBAAgB,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1E,IAAI,YAA0B,CAAC;QAC/B,MAAM,cAAc,GAAG,CAAO,OAAgB,EAAE,EAAE;YAChD,IAAI;gBACF,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,EAAE,CAAC;aACf;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;aACnE;QACH,CAAC,CAAA,CAAC;QACF,OAAO,IAAI,wBAAiB,CAC1B,CAAO,QAAQ,EAAE,MAAM,EAAE,EAAE;YACzB,IAAI;gBACF,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM;qBAC/B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;qBAC5B,kBAAkB,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;gBAC7E,YAAY,GAAG,MAAM,CAAC;gBAEtB,yDAAyD;gBACzD,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;gBAE3C,mDAAmD;gBACnD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;oBAC/B,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;oBACxC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBACH,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,YAAY,CAAC,CAAC;iBACtB;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;gBAC1D,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;QACH,CAAC,CAAA,EACD,GAAS,EAAE;YACT,IAAI,YAAY,EAAE;gBAChB,YAAY,CAAC,kBAAkB,EAAE,CAAC;gBAClC,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;aAC7B;QACH,CAAC,CAAA,CACF,CAAC;IACJ,CAAC;CACF;AAxED,mCAwEC;AAEQ,4CAAgB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const test_1 = require("@webda/core/lib/test");
19
+ const assert = require("assert");
20
+ const mocha_1 = require("@testdeck/mocha");
21
+ const core_1 = require("@webda/core");
22
+ const sinon = require("sinon");
23
+ let GCPPubSubTest = class GCPPubSubTest extends test_1.WebdaTest {
24
+ basic() {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ let pubsub = this.webda.getService("pubsub");
27
+ let counter = 0;
28
+ let consumers = [];
29
+ let subscription;
30
+ yield new Promise((resolve, reject) => {
31
+ consumers.push(pubsub.consume((evt) => __awaiter(this, void 0, void 0, function* () {
32
+ counter++;
33
+ })));
34
+ consumers.push(pubsub.consume((evt) => __awaiter(this, void 0, void 0, function* () {
35
+ counter++;
36
+ throw new Error("Should not fail");
37
+ }), undefined, sub => {
38
+ subscription = sub;
39
+ resolve();
40
+ }));
41
+ });
42
+ yield pubsub.sendMessage("plop");
43
+ yield (0, core_1.WaitFor)((resolve) => __awaiter(this, void 0, void 0, function* () {
44
+ if (counter === 2) {
45
+ resolve();
46
+ return true;
47
+ }
48
+ return false;
49
+ }), 10, "Events", undefined, (0, core_1.WaitLinearDelay)(1000));
50
+ // We might have concurrence in unit test
51
+ assert.ok(counter >= 2);
52
+ subscription.emit("error", "Fake server error");
53
+ yield assert.rejects(() => consumers[1], /Fake server error/);
54
+ yield consumers[0].cancel();
55
+ // Hack our way to test exception within the main loop
56
+ let stub = sinon.stub(pubsub.pubsub, "subscription").callsFake(() => {
57
+ throw new Error("Bad code?");
58
+ });
59
+ // Should reject
60
+ yield assert.rejects(() => pubsub.consume((evt) => __awaiter(this, void 0, void 0, function* () {
61
+ counter++;
62
+ })), /Bad code\?/);
63
+ stub.restore();
64
+ });
65
+ }
66
+ };
67
+ __decorate([
68
+ mocha_1.test
69
+ ], GCPPubSubTest.prototype, "basic", null);
70
+ GCPPubSubTest = __decorate([
71
+ mocha_1.suite
72
+ ], GCPPubSubTest);
73
+ //# sourceMappingURL=pubsub.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub.spec.js","sourceRoot":"","sources":["../../src/services/pubsub.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+CAAiD;AACjD,iCAAiC;AACjC,2CAA8C;AAE9C,sCAA0E;AAC1E,+BAA+B;AAG/B,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,gBAAS;IAE7B,KAAK;;YACT,IAAI,MAAM,GAAqB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAmB,QAAQ,CAAC,CAAC;YACjF,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,SAAS,GAAwB,EAAE,CAAC;YACxC,IAAI,YAAY,CAAC;YACjB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,OAAO,CAAC,CAAM,GAAG,EAAC,EAAE;oBACzB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAA,CAAC,CACH,CAAC;gBACF,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,OAAO,CACZ,CAAM,GAAG,EAAC,EAAE;oBACV,OAAO,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACrC,CAAC,CAAA,EACD,SAAS,EACT,GAAG,CAAC,EAAE;oBACJ,YAAY,GAAG,GAAG,CAAC;oBACnB,OAAO,EAAE,CAAC;gBACZ,CAAC,CACF,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,IAAA,cAAO,EACX,CAAM,OAAO,EAAC,EAAE;gBACd,IAAI,OAAO,KAAK,CAAC,EAAE;oBACjB,OAAO,EAAE,CAAC;oBACV,OAAO,IAAI,CAAC;iBACb;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAA,EACD,EAAE,EACF,QAAQ,EACR,SAAS,EACT,IAAA,sBAAe,EAAC,IAAI,CAAC,CACtB,CAAC;YACF,yCAAyC;YACzC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAChD,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC9D,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC5B,sDAAsD;YACtD,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;gBAClE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,gBAAgB;YAChB,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,MAAM,CAAC,OAAO,CAAC,CAAM,GAAG,EAAC,EAAE;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAA,CAAC,EACJ,YAAY,CACb,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;KAAA;CACF,CAAA;AA1DC;IADC,YAAI;0CA0DJ;AA3DG,aAAa;IADlB,aAAK;GACA,aAAa,CA4DlB"}
@@ -0,0 +1,81 @@
1
+ import { Message, PubSub } from "@google-cloud/pubsub";
2
+ import { CancelablePromise, DeepPartial, MessageReceipt, Queue, QueueParameters } from "@webda/core";
3
+ /**
4
+ * GCPQueue Parameters
5
+ */
6
+ export declare class GCPQueueParameters extends QueueParameters {
7
+ /**
8
+ * Topic to use
9
+ */
10
+ topic: string;
11
+ /**
12
+ * Subscription to use for the queue
13
+ *
14
+ * All instances will use the same subscription to create a queue style pubsub
15
+ */
16
+ subscription: string;
17
+ /**
18
+ * Timeout when receiveMessage is used before returning empty result (in ms)
19
+ *
20
+ * If not define then no timeout is applied and receiveMessage can hang forever
21
+ */
22
+ timeout?: number;
23
+ }
24
+ /**
25
+ * GCP Queue implementation on top of Pub/Sub
26
+ *
27
+ * @WebdaModda GoogleCloudQueue
28
+ */
29
+ export default class GCPQueue<T = any, K extends GCPQueueParameters = GCPQueueParameters> extends Queue<T, K> {
30
+ /**
31
+ * Main api object
32
+ */
33
+ pubsub: PubSub;
34
+ /**
35
+ * Current project id, used for manual acknowledge of message based on just their ackId
36
+ */
37
+ projectId: Promise<string>;
38
+ messages: {
39
+ [key: string]: Message;
40
+ };
41
+ /**
42
+ * @override
43
+ */
44
+ loadParameters(params: DeepPartial<K>): GCPQueueParameters;
45
+ /**
46
+ * @override
47
+ */
48
+ init(): Promise<void>;
49
+ /**
50
+ * The queue size is not available within this service
51
+ *
52
+ * @returns
53
+ */
54
+ size(): Promise<0>;
55
+ /**
56
+ * Acknowledge a message
57
+ * @param id
58
+ */
59
+ deleteMessage(id: string): Promise<void>;
60
+ /**
61
+ * Send a message to the queue
62
+ * @param msg
63
+ */
64
+ sendMessage(msg: T): Promise<void>;
65
+ /**
66
+ * Retrieve just one message from the queue
67
+ * @param proto
68
+ * @returns
69
+ */
70
+ receiveMessage<L>(proto?: new () => L): Promise<MessageReceipt<L>[]>;
71
+ /**
72
+ * Work a queue calling the callback with every Event received
73
+ * If the callback is called without exception the `deleteMessage` is called
74
+ * @param callback
75
+ * @param eventPrototype
76
+ */
77
+ consume(callback: (event: T) => Promise<void>, eventPrototype?: {
78
+ new (): T;
79
+ }): CancelablePromise;
80
+ }
81
+ export { GCPQueue };
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.GCPQueue = exports.GCPQueueParameters = void 0;
13
+ const pubsub_1 = require("@google-cloud/pubsub");
14
+ const core_1 = require("@webda/core");
15
+ /**
16
+ * GCPQueue Parameters
17
+ */
18
+ class GCPQueueParameters extends core_1.QueueParameters {
19
+ }
20
+ exports.GCPQueueParameters = GCPQueueParameters;
21
+ /**
22
+ * GCP Queue implementation on top of Pub/Sub
23
+ *
24
+ * @WebdaModda GoogleCloudQueue
25
+ */
26
+ class GCPQueue extends core_1.Queue {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.messages = {};
30
+ }
31
+ /**
32
+ * @override
33
+ */
34
+ loadParameters(params) {
35
+ return new GCPQueueParameters(params);
36
+ }
37
+ /**
38
+ * @override
39
+ */
40
+ init() {
41
+ const _super = Object.create(null, {
42
+ init: { get: () => super.init }
43
+ });
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ yield _super.init.call(this);
46
+ this.pubsub = new pubsub_1.PubSub();
47
+ this.projectId = this.pubsub.auth.getProjectId();
48
+ });
49
+ }
50
+ /**
51
+ * The queue size is not available within this service
52
+ *
53
+ * @returns
54
+ */
55
+ size() {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ return 0;
58
+ });
59
+ }
60
+ /**
61
+ * Acknowledge a message
62
+ * @param id
63
+ */
64
+ deleteMessage(id) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ yield this.pubsub.auth.request({
67
+ method: "POST",
68
+ url: `https://pubsub.googleapis.com/v1/projects/${yield this.projectId}/subscriptions/${this.parameters.subscription}:acknowledge`,
69
+ body: JSON.stringify({
70
+ ackIds: [id],
71
+ }),
72
+ });
73
+ this.messages[id].ack();
74
+ delete this.messages[id];
75
+ });
76
+ }
77
+ /**
78
+ * Send a message to the queue
79
+ * @param msg
80
+ */
81
+ sendMessage(msg) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ yield this.pubsub.topic(this.parameters.topic).publishMessage({ data: Buffer.from(JSON.stringify(msg)) });
84
+ });
85
+ }
86
+ /**
87
+ * Retrieve just one message from the queue
88
+ * @param proto
89
+ * @returns
90
+ */
91
+ receiveMessage(proto) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ let timeoutId;
94
+ let errorHandler;
95
+ let msgHandler;
96
+ const subscription = this.pubsub.subscription(this.parameters.subscription, {
97
+ flowControl: {
98
+ maxMessages: 1,
99
+ },
100
+ });
101
+ try {
102
+ return yield new Promise((resolve, reject) => {
103
+ if (this.parameters.timeout) {
104
+ timeoutId = setTimeout(() => resolve([]), this.parameters.timeout);
105
+ }
106
+ errorHandler = err => {
107
+ reject(err);
108
+ };
109
+ msgHandler = (message) => {
110
+ this.messages[message.ackId] = message;
111
+ resolve([
112
+ {
113
+ Message: this.unserialize(message.data.toString(), proto),
114
+ ReceiptHandle: message.ackId,
115
+ },
116
+ ]);
117
+ };
118
+ subscription.on("error", errorHandler);
119
+ subscription.on("message", msgHandler);
120
+ });
121
+ }
122
+ finally {
123
+ subscription.close();
124
+ if (timeoutId) {
125
+ clearTimeout(timeoutId);
126
+ }
127
+ }
128
+ });
129
+ }
130
+ /**
131
+ * Work a queue calling the callback with every Event received
132
+ * If the callback is called without exception the `deleteMessage` is called
133
+ * @param callback
134
+ * @param eventPrototype
135
+ */
136
+ consume(callback, eventPrototype) {
137
+ const subscription = this.pubsub.subscription(this.parameters.subscription, {
138
+ flowControl: {
139
+ maxMessages: this.getMaxConsumers(),
140
+ },
141
+ });
142
+ return new core_1.CancelablePromise(() => __awaiter(this, void 0, void 0, function* () {
143
+ subscription.on("message", (message) => __awaiter(this, void 0, void 0, function* () {
144
+ try {
145
+ yield callback(this.unserialize(message.data.toString(), eventPrototype));
146
+ message.ack();
147
+ }
148
+ catch (err) {
149
+ this.log("ERROR", `Message ${message.ackId}`, err);
150
+ }
151
+ }));
152
+ }), () => __awaiter(this, void 0, void 0, function* () {
153
+ subscription.close();
154
+ }));
155
+ }
156
+ }
157
+ exports.default = GCPQueue;
158
+ exports.GCPQueue = GCPQueue;
159
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/services/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const queue_spec_1 = require("@webda/core/lib/queues/queue.spec");
19
+ const assert = require("assert");
20
+ const mocha_1 = require("@testdeck/mocha");
21
+ const events_1 = require("events");
22
+ const sinon = require("sinon");
23
+ class FakeSubscription extends events_1.EventEmitter {
24
+ emitError() {
25
+ this.emit("error", "Fake error");
26
+ }
27
+ close() { }
28
+ }
29
+ let GCPQueueTest = class GCPQueueTest extends queue_spec_1.QueueTest {
30
+ basic() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ let queue = this.webda.getService("queue");
33
+ queue.getParameters().subscription = `${queue.getParameters().subscription}_${this.webda.getUuid()}`;
34
+ yield queue.pubsub.createSubscription(queue.getParameters().topic, queue.getParameters().subscription, {
35
+ ackDeadlineSeconds: 10,
36
+ enableExactlyOnceDelivery: true,
37
+ });
38
+ try {
39
+ yield this.simple(queue, true, 12000);
40
+ // Seems to be penalized by no promise on ACK
41
+ yield this.sleep(5000);
42
+ this.log("DEBUG", "Verify receiveMessage is now empty");
43
+ queue.getParameters().timeout = 3000;
44
+ // TODO Investigate this one
45
+ if ((yield queue.receiveMessage()).length > 0) {
46
+ this.log("ERROR", "Queue should be empty - not an assert to avoid random");
47
+ }
48
+ }
49
+ finally {
50
+ yield queue.pubsub.subscription(queue.getParameters().subscription).delete();
51
+ }
52
+ });
53
+ }
54
+ consumers() {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ let queue = this.webda.getService("queue");
57
+ queue.getParameters().subscription = `${queue.getParameters().subscription}_${this.webda.getUuid()}`;
58
+ yield queue.pubsub.createSubscription(queue.getParameters().topic, queue.getParameters().subscription, {
59
+ ackDeadlineSeconds: 10,
60
+ enableMessageOrdering: true,
61
+ });
62
+ try {
63
+ // Test consumer
64
+ let msg;
65
+ let consumed = 0;
66
+ let consumer = queue.consume((dt) => __awaiter(this, void 0, void 0, function* () {
67
+ consumed++;
68
+ if (msg) {
69
+ throw new Error();
70
+ }
71
+ msg = dt;
72
+ }));
73
+ yield this.sleep(1000);
74
+ this.log("DEBUG", "Consume sendMessage");
75
+ yield queue.sendMessage({ plop: 1 });
76
+ this.log("DEBUG", "Consume cancel");
77
+ yield queue.sendMessage({ plop: 2 });
78
+ // Need to wait before cancel to ensure message are received
79
+ while (consumed < 2) {
80
+ yield this.sleep(500);
81
+ }
82
+ yield consumer.cancel();
83
+ this.log("DEBUG", "Consume assert");
84
+ assert.notStrictEqual(msg, undefined);
85
+ // The second message throw an exception so it can come back
86
+ yield queue.receiveMessage();
87
+ yield queue.receiveMessage();
88
+ }
89
+ finally {
90
+ yield queue.pubsub.subscription(queue.getParameters().subscription).delete();
91
+ }
92
+ });
93
+ }
94
+ receiveError() {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ this.log("DEBUG", "Receive Error test");
97
+ let queue = this.webda.getService("queue");
98
+ let service = new FakeSubscription();
99
+ sinon.stub(queue.pubsub, "subscription").callsFake(() => {
100
+ return service;
101
+ });
102
+ let consumer = queue.receiveMessage();
103
+ service.emitError();
104
+ yield assert.rejects(() => consumer, /Fake error/);
105
+ });
106
+ }
107
+ };
108
+ __decorate([
109
+ mocha_1.test
110
+ ], GCPQueueTest.prototype, "basic", null);
111
+ __decorate([
112
+ mocha_1.test
113
+ ], GCPQueueTest.prototype, "consumers", null);
114
+ __decorate([
115
+ mocha_1.test
116
+ ], GCPQueueTest.prototype, "receiveError", null);
117
+ GCPQueueTest = __decorate([
118
+ mocha_1.suite
119
+ ], GCPQueueTest);
120
+ //# sourceMappingURL=queue.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.spec.js","sourceRoot":"","sources":["../../src/services/queue.spec.ts"],"names":[],"mappings":"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"}