@webda/gcp 3.2.7 → 3.3.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/services/kms.d.ts +38 -0
- package/lib/services/kms.js +78 -0
- package/lib/services/kms.js.map +1 -0
- package/lib/services/kms.spec.d.ts +1 -0
- package/lib/services/kms.spec.js +53 -0
- package/lib/services/kms.spec.js.map +1 -0
- package/lib/services/pubsub.d.ts +1 -0
- package/lib/services/pubsub.js +10 -0
- package/lib/services/pubsub.js.map +1 -1
- package/lib/services/pubsub.spec.js +2 -0
- package/lib/services/pubsub.spec.js.map +1 -1
- package/package.json +6 -5
- package/webda.module.json +40 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { KeyManagementServiceClient } from "@google-cloud/kms";
|
|
2
|
+
import { DeepPartial, Service, ServiceParameters } from "@webda/core";
|
|
3
|
+
/**
|
|
4
|
+
* Parameters for the KMS Service
|
|
5
|
+
*/
|
|
6
|
+
export declare class KMSServiceParameters extends ServiceParameters {
|
|
7
|
+
/**
|
|
8
|
+
* Encryption key to use by default
|
|
9
|
+
* @default WEBDA_GCP_KMS_KEY env variable
|
|
10
|
+
*/
|
|
11
|
+
defaultKey?: string;
|
|
12
|
+
constructor(params: any);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Expose KMS Service
|
|
16
|
+
*
|
|
17
|
+
* @WebdaModda GoogleCloudKMS
|
|
18
|
+
*/
|
|
19
|
+
export declare class GCPKMSService<T extends KMSServiceParameters> extends Service<T> {
|
|
20
|
+
client: KeyManagementServiceClient;
|
|
21
|
+
/**
|
|
22
|
+
* @override
|
|
23
|
+
*/
|
|
24
|
+
loadParameters(params: DeepPartial<ServiceParameters>): ServiceParameters;
|
|
25
|
+
/**
|
|
26
|
+
* Encrypt a data with GCP KMS given key or defaultKey
|
|
27
|
+
* @param data
|
|
28
|
+
* @param key
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
encrypt(data: string, key?: string): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Decrypt a data previously encrypted with this service
|
|
34
|
+
* @param data
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
decrypt(data: string): Promise<string>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { KeyManagementServiceClient } from "@google-cloud/kms";
|
|
2
|
+
import { CryptoService, Service, ServiceParameters } from "@webda/core";
|
|
3
|
+
/**
|
|
4
|
+
* Encrypter for GCP KMS
|
|
5
|
+
*/
|
|
6
|
+
const encrypter = {
|
|
7
|
+
encrypt: async (data, key) => {
|
|
8
|
+
key ?? (key = process.env.WEBDA_GCP_KMS_KEY);
|
|
9
|
+
// Only the odd elements are dynamic
|
|
10
|
+
const infos = key.split("/").filter((i, ind) => ind % 2 === 1);
|
|
11
|
+
const client = new KeyManagementServiceClient();
|
|
12
|
+
// Encode the infos in base64
|
|
13
|
+
// Add the encrypted info after a : separator
|
|
14
|
+
return (Buffer.from(infos.join(":")).toString("base64") +
|
|
15
|
+
":" +
|
|
16
|
+
(await client.encrypt({
|
|
17
|
+
name: key,
|
|
18
|
+
plaintext: Buffer.from(data)
|
|
19
|
+
}))[0].ciphertext);
|
|
20
|
+
},
|
|
21
|
+
decrypt: async (data) => {
|
|
22
|
+
// Get the info
|
|
23
|
+
const info = data.substring(0, data.indexOf(":"));
|
|
24
|
+
const infos = Buffer.from(info, "base64").toString().split(":");
|
|
25
|
+
if (infos.length !== 4) {
|
|
26
|
+
throw new Error("Invalid KMS encryption");
|
|
27
|
+
}
|
|
28
|
+
const client = new KeyManagementServiceClient();
|
|
29
|
+
return (await client.decrypt({
|
|
30
|
+
name: `projects/${infos[0]}/locations/${infos[1]}/keyRings/${infos[2]}/cryptoKeys/${infos[3]}`,
|
|
31
|
+
ciphertext: Buffer.from(data.substring(data.indexOf(":") + 1))
|
|
32
|
+
}))[0].plaintext;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Register the encrypter
|
|
37
|
+
*/
|
|
38
|
+
CryptoService.registerEncrypter("gcp", encrypter);
|
|
39
|
+
/**
|
|
40
|
+
* Parameters for the KMS Service
|
|
41
|
+
*/
|
|
42
|
+
export class KMSServiceParameters extends ServiceParameters {
|
|
43
|
+
constructor(params) {
|
|
44
|
+
super(params);
|
|
45
|
+
this.defaultKey ?? (this.defaultKey = process.env.WEBDA_GCP_KMS_KEY);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Expose KMS Service
|
|
50
|
+
*
|
|
51
|
+
* @WebdaModda GoogleCloudKMS
|
|
52
|
+
*/
|
|
53
|
+
export class GCPKMSService extends Service {
|
|
54
|
+
/**
|
|
55
|
+
* @override
|
|
56
|
+
*/
|
|
57
|
+
loadParameters(params) {
|
|
58
|
+
return new KMSServiceParameters(params);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Encrypt a data with GCP KMS given key or defaultKey
|
|
62
|
+
* @param data
|
|
63
|
+
* @param key
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
encrypt(data, key) {
|
|
67
|
+
return encrypter.encrypt(data, key || this.parameters.defaultKey);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Decrypt a data previously encrypted with this service
|
|
71
|
+
* @param data
|
|
72
|
+
* @returns
|
|
73
|
+
*/
|
|
74
|
+
decrypt(data) {
|
|
75
|
+
return encrypter.decrypt(data);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=kms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kms.js","sourceRoot":"","sources":["../../src/services/kms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { KeyManagementServiceClient } from "@google-cloud/kms";
|
|
8
|
+
import { suite, test } from "@testdeck/mocha";
|
|
9
|
+
import { WebdaSimpleTest } from "@webda/core/lib/test.js";
|
|
10
|
+
import * as assert from "assert";
|
|
11
|
+
import * as sinon from "sinon";
|
|
12
|
+
import { GCPKMSService } from "./kms.js";
|
|
13
|
+
let KMSTest = class KMSTest extends WebdaSimpleTest {
|
|
14
|
+
async test() {
|
|
15
|
+
sinon.stub(KeyManagementServiceClient.prototype, "encrypt").callsFake(() => {
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
ciphertext: "ciphertext"
|
|
19
|
+
}
|
|
20
|
+
];
|
|
21
|
+
});
|
|
22
|
+
sinon.stub(KeyManagementServiceClient.prototype, "decrypt").callsFake(() => {
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
plaintext: "plaintext"
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
});
|
|
29
|
+
let service = await this.registerService(new GCPKMSService(this.webda, "KMSService", {
|
|
30
|
+
defaultKey: "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key"
|
|
31
|
+
}))
|
|
32
|
+
.resolve()
|
|
33
|
+
.init();
|
|
34
|
+
let encoded = await service.encrypt("test");
|
|
35
|
+
assert.deepStrictEqual(Buffer.from(encoded.split(":")[0], "base64").toString().split(":"), [
|
|
36
|
+
"my-project",
|
|
37
|
+
"us-east1",
|
|
38
|
+
"my-key-ring",
|
|
39
|
+
"my-key"
|
|
40
|
+
]);
|
|
41
|
+
assert.strictEqual(encoded.split(":").pop(), "ciphertext");
|
|
42
|
+
let decoded = await service.decrypt(encoded);
|
|
43
|
+
assert.strictEqual(decoded, "plaintext");
|
|
44
|
+
assert.rejects(() => service.decrypt(Buffer.from("test:plop").toString("base64") + ":test"));
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
__decorate([
|
|
48
|
+
test
|
|
49
|
+
], KMSTest.prototype, "test", null);
|
|
50
|
+
KMSTest = __decorate([
|
|
51
|
+
suite
|
|
52
|
+
], KMSTest);
|
|
53
|
+
//# sourceMappingURL=kms.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kms.spec.js","sourceRoot":"","sources":["../../src/services/kms.spec.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,eAAe;IAE7B,AAAN,KAAK,CAAC,IAAI;QACR,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;YACzE,OAAO;gBACL;oBACE,UAAU,EAAE,YAAY;iBACzB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;YACzE,OAAO;gBACL;oBACE,SAAS,EAAE,WAAW;iBACvB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CACtC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE;YAC1C,UAAU,EAAE,+EAA+E;SAC5F,CAAC,CACH;aACE,OAAO,EAAE;aACT,IAAI,EAAE,CAAC;QACV,IAAI,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACzF,YAAY;YACZ,UAAU;YACV,aAAa;YACb,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAC/F,CAAC;CACF,CAAA;AAlCO;IADL,IAAI;mCAkCJ;AAnCG,OAAO;IADZ,KAAK;GACA,OAAO,CAoCZ"}
|
package/lib/services/pubsub.d.ts
CHANGED
package/lib/services/pubsub.js
CHANGED
|
@@ -22,8 +22,12 @@ export default class GCPPubSubService extends PubSubService {
|
|
|
22
22
|
* @override
|
|
23
23
|
*/
|
|
24
24
|
async sendMessage(event) {
|
|
25
|
+
this.metrics.messages_sent.inc();
|
|
25
26
|
await this.pubsub.topic(this.parameters.topic).publishMessage({ data: Buffer.from(JSON.stringify(event)) });
|
|
26
27
|
}
|
|
28
|
+
async size() {
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
27
31
|
/**
|
|
28
32
|
* @override
|
|
29
33
|
*/
|
|
@@ -31,13 +35,19 @@ export default class GCPPubSubService extends PubSubService {
|
|
|
31
35
|
const subscriptionName = `${this.getName()}-${this.getWebda().getUuid()}`;
|
|
32
36
|
let subscription;
|
|
33
37
|
const messageHandler = async (message) => {
|
|
38
|
+
this.metrics.messages_received.inc();
|
|
39
|
+
const end = this.metrics.processing_duration.startTimer();
|
|
34
40
|
try {
|
|
35
41
|
await callback(this.unserialize(message.data.toString(), eventPrototype));
|
|
36
42
|
message.ack();
|
|
37
43
|
}
|
|
38
44
|
catch (err) {
|
|
45
|
+
this.metrics.errors.inc();
|
|
39
46
|
this.log("ERROR", `${this.getName()} consume message error`, err);
|
|
40
47
|
}
|
|
48
|
+
finally {
|
|
49
|
+
end();
|
|
50
|
+
}
|
|
41
51
|
};
|
|
42
52
|
return new CancelablePromise(async (_resolve, reject) => {
|
|
43
53
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/services/pubsub.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/services/pubsub.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,8 @@ let GCPPubSubTest = class GCPPubSubTest extends WebdaTest {
|
|
|
28
28
|
}));
|
|
29
29
|
});
|
|
30
30
|
await pubsub.sendMessage("plop");
|
|
31
|
+
// This is not logical w/o subscription value
|
|
32
|
+
assert.strictEqual(await pubsub.size(), 0);
|
|
31
33
|
await WaitFor(async (resolve) => {
|
|
32
34
|
if (counter === 2) {
|
|
33
35
|
resolve();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.spec.js","sourceRoot":"","sources":["../../src/services/pubsub.spec.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAqB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,SAAS;IAE7B,AAAN,KAAK,CAAC,KAAK;QACT,IAAI,MAAM,GAAqB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAmB,QAAQ,CAAC,CAAC;QACjF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,SAAS,GAAwB,EAAE,CAAC;QACxC,IAAI,YAAY,CAAC;QACjB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CACH,CAAC;YACF,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,OAAO,CACZ,KAAK,EAAC,GAAG,EAAC,EAAE;gBACV,OAAO,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC,EACD,SAAS,EACT,GAAG,CAAC,EAAE;gBACJ,YAAY,GAAG,GAAG,CAAC;gBACnB,OAAO,EAAE,CAAC;YACZ,CAAC,CACF,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,OAAO,CACX,KAAK,EAAC,OAAO,EAAC,EAAE;YACd,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;gBACV,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,EACD,EAAE,EACF,QAAQ,EACR,SAAS,EACT,eAAe,CAAC,IAAI,CAAC,CACtB,CAAC;QACF,yCAAyC;QACzC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAC9D,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,sDAAsD;QACtD,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;YAClE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,gBAAgB;QAChB,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,EACJ,YAAY,CACb,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"pubsub.spec.js","sourceRoot":"","sources":["../../src/services/pubsub.spec.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAqB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,SAAS;IAE7B,AAAN,KAAK,CAAC,KAAK;QACT,IAAI,MAAM,GAAqB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAmB,QAAQ,CAAC,CAAC;QACjF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,SAAS,GAAwB,EAAE,CAAC;QACxC,IAAI,YAAY,CAAC;QACjB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CACH,CAAC;YACF,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,OAAO,CACZ,KAAK,EAAC,GAAG,EAAC,EAAE;gBACV,OAAO,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC,EACD,SAAS,EACT,GAAG,CAAC,EAAE;gBACJ,YAAY,GAAG,GAAG,CAAC;gBACnB,OAAO,EAAE,CAAC;YACZ,CAAC,CACF,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,6CAA6C;QAC7C,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,OAAO,CACX,KAAK,EAAC,OAAO,EAAC,EAAE;YACd,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;gBACV,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,EACD,EAAE,EACF,QAAQ,EACR,SAAS,EACT,eAAe,CAAC,IAAI,CAAC,CACtB,CAAC;QACF,yCAAyC;QACzC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAC9D,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,sDAAsD;QACtD,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;YAClE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,gBAAgB;QAChB,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,EACJ,YAAY,CACb,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;CACF,CAAA;AA5DO;IADL,IAAI;0CA4DJ;AA7DG,aAAa;IADlB,KAAK;GACA,aAAa,CA8DlB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webda/gcp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Webda GCP Services implementation",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -33,9 +33,10 @@
|
|
|
33
33
|
"homepage": "https://github.com/loopingz/webda.io#readme",
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@google-cloud/firestore": "^7.0.0",
|
|
36
|
+
"@google-cloud/kms": "^4.0.1",
|
|
36
37
|
"@google-cloud/pubsub": "^4.0.1",
|
|
37
38
|
"@google-cloud/storage": "~7.7.0",
|
|
38
|
-
"@webda/core": "^3.
|
|
39
|
+
"@webda/core": "^3.12.0",
|
|
39
40
|
"mime-types": "^2.1.35"
|
|
40
41
|
},
|
|
41
42
|
"c8": {
|
|
@@ -57,8 +58,8 @@
|
|
|
57
58
|
"devDependencies": {
|
|
58
59
|
"@testdeck/mocha": "^0.3.2",
|
|
59
60
|
"@types/node": "18.11.13",
|
|
60
|
-
"@webda/async": "^3.
|
|
61
|
-
"@webda/shell": "^3.
|
|
61
|
+
"@webda/async": "^3.5.0",
|
|
62
|
+
"@webda/shell": "^3.9.0",
|
|
62
63
|
"sinon": "^17.0.0",
|
|
63
64
|
"uuid": "^9.0.0"
|
|
64
65
|
},
|
|
@@ -72,5 +73,5 @@
|
|
|
72
73
|
"@webda/shell"
|
|
73
74
|
]
|
|
74
75
|
},
|
|
75
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "167f6b86b33867ef2ab10cc02624bc0441965632"
|
|
76
77
|
}
|
package/webda.module.json
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"deployers": {},
|
|
4
4
|
"moddas": {
|
|
5
5
|
"Webda/GoogleCloudFireStore": "lib/services/firestore:default",
|
|
6
|
+
"Webda/GoogleCloudKMS": "lib/services/kms:GCPKMSService",
|
|
6
7
|
"Webda/GoogleCloudPubSub": "lib/services/pubsub:default",
|
|
7
8
|
"Webda/GoogleCloudQueue": "lib/services/queue:default",
|
|
8
9
|
"Webda/GoogleCloudStorage": "lib/services/storage:default"
|
|
@@ -115,6 +116,10 @@
|
|
|
115
116
|
},
|
|
116
117
|
"description": "Model Aliases to allow easier rename of Model"
|
|
117
118
|
},
|
|
119
|
+
"noCache": {
|
|
120
|
+
"type": "boolean",
|
|
121
|
+
"description": "Disable default memory cache"
|
|
122
|
+
},
|
|
118
123
|
"collection": {
|
|
119
124
|
"type": "string",
|
|
120
125
|
"description": "Collection to use"
|
|
@@ -202,6 +207,34 @@
|
|
|
202
207
|
},
|
|
203
208
|
"title": "FireStore"
|
|
204
209
|
},
|
|
210
|
+
"Webda/GoogleCloudKMS": {
|
|
211
|
+
"type": "object",
|
|
212
|
+
"properties": {
|
|
213
|
+
"type": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"description": "Type of the service"
|
|
216
|
+
},
|
|
217
|
+
"url": {
|
|
218
|
+
"type": "string",
|
|
219
|
+
"description": "URL on which to serve the content"
|
|
220
|
+
},
|
|
221
|
+
"defaultKey": {
|
|
222
|
+
"type": "string",
|
|
223
|
+
"description": "Encryption key to use by default",
|
|
224
|
+
"default": "WEBDA_GCP_KMS_KEY env variable"
|
|
225
|
+
},
|
|
226
|
+
"openapi": {
|
|
227
|
+
"type": "object",
|
|
228
|
+
"additionalProperties": true
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
"required": [
|
|
232
|
+
"type"
|
|
233
|
+
],
|
|
234
|
+
"description": "Parameters for the KMS Service",
|
|
235
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
236
|
+
"title": "GCPKMSService"
|
|
237
|
+
},
|
|
205
238
|
"Webda/GoogleCloudPubSub": {
|
|
206
239
|
"type": "object",
|
|
207
240
|
"properties": {
|
|
@@ -557,6 +590,13 @@
|
|
|
557
590
|
}
|
|
558
591
|
],
|
|
559
592
|
"description": "BigQueryConfig state"
|
|
593
|
+
},
|
|
594
|
+
"useTableSchema": {
|
|
595
|
+
"type": [
|
|
596
|
+
"boolean",
|
|
597
|
+
"null"
|
|
598
|
+
],
|
|
599
|
+
"description": "BigQueryConfig useTableSchema"
|
|
560
600
|
}
|
|
561
601
|
},
|
|
562
602
|
"description": "Properties of a BigQueryConfig."
|