@toa.io/extensions.origins 0.20.0-dev.22 → 0.20.0-dev.24
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/package.json +6 -6
- package/transpiled/annotation.d.ts +9 -0
- package/transpiled/annotation.js +15 -0
- package/transpiled/annotation.js.map +1 -0
- package/transpiled/constants.d.ts +1 -0
- package/transpiled/constants.js +3 -0
- package/transpiled/constants.js.map +1 -0
- package/transpiled/env.d.ts +5 -0
- package/transpiled/env.js +40 -0
- package/transpiled/env.js.map +1 -0
- package/transpiled/extension.d.ts +7 -0
- package/transpiled/extension.js +13 -0
- package/transpiled/extension.js.map +1 -0
- package/transpiled/factory.d.ts +9 -0
- package/transpiled/factory.js +36 -0
- package/transpiled/factory.js.map +1 -0
- package/transpiled/factory.test.d.ts +1 -0
- package/transpiled/factory.test.js +107 -0
- package/transpiled/factory.test.js.map +1 -0
- package/transpiled/index.d.ts +3 -0
- package/transpiled/index.js +8 -0
- package/transpiled/index.js.map +1 -0
- package/transpiled/manifest.d.ts +1 -0
- package/transpiled/manifest.js +5 -0
- package/transpiled/manifest.js.map +1 -0
- package/transpiled/manifest.test.d.ts +1 -0
- package/transpiled/manifest.test.js +53 -0
- package/transpiled/manifest.test.js.map +1 -0
- package/transpiled/protocols/amqp/.test/aspect.fixtures.d.ts +1 -0
- package/transpiled/protocols/amqp/.test/aspect.fixtures.js +11 -0
- package/transpiled/protocols/amqp/.test/aspect.fixtures.js.map +1 -0
- package/transpiled/protocols/amqp/.test/mock.comq.d.ts +7 -0
- package/transpiled/protocols/amqp/.test/mock.comq.js +11 -0
- package/transpiled/protocols/amqp/.test/mock.comq.js.map +1 -0
- package/transpiled/protocols/amqp/aspect.d.ts +18 -0
- package/transpiled/protocols/amqp/aspect.js +61 -0
- package/transpiled/protocols/amqp/aspect.js.map +1 -0
- package/transpiled/protocols/amqp/aspect.test.d.ts +1 -0
- package/transpiled/protocols/amqp/aspect.test.js +84 -0
- package/transpiled/protocols/amqp/aspect.test.js.map +1 -0
- package/transpiled/protocols/amqp/deployment.d.ts +5 -0
- package/transpiled/protocols/amqp/deployment.js +55 -0
- package/transpiled/protocols/amqp/deployment.js.map +1 -0
- package/transpiled/protocols/amqp/id.d.ts +1 -0
- package/transpiled/protocols/amqp/id.js +3 -0
- package/transpiled/protocols/amqp/id.js.map +1 -0
- package/transpiled/protocols/amqp/index.d.ts +5 -0
- package/transpiled/protocols/amqp/index.js +10 -0
- package/transpiled/protocols/amqp/index.js.map +1 -0
- package/transpiled/protocols/amqp/protocols.d.ts +2 -0
- package/transpiled/protocols/amqp/protocols.js +3 -0
- package/transpiled/protocols/amqp/protocols.js.map +1 -0
- package/transpiled/protocols/http/.aspect/permissions.d.ts +11 -0
- package/transpiled/protocols/http/.aspect/permissions.js +52 -0
- package/transpiled/protocols/http/.aspect/permissions.js.map +1 -0
- package/transpiled/protocols/http/.test/aspect.fixtures.d.ts +10 -0
- package/transpiled/protocols/http/.test/aspect.fixtures.js +27 -0
- package/transpiled/protocols/http/.test/aspect.fixtures.js.map +1 -0
- package/transpiled/protocols/http/aspect.d.ts +18 -0
- package/transpiled/protocols/http/aspect.js +97 -0
- package/transpiled/protocols/http/aspect.js.map +1 -0
- package/transpiled/protocols/http/aspect.test.d.ts +1 -0
- package/transpiled/protocols/http/aspect.test.js +155 -0
- package/transpiled/protocols/http/aspect.test.js.map +1 -0
- package/transpiled/protocols/http/id.d.ts +1 -0
- package/transpiled/protocols/http/id.js +3 -0
- package/transpiled/protocols/http/id.js.map +1 -0
- package/transpiled/protocols/http/index.d.ts +4 -0
- package/transpiled/protocols/http/index.js +8 -0
- package/transpiled/protocols/http/index.js.map +1 -0
- package/transpiled/protocols/http/protocols.d.ts +2 -0
- package/transpiled/protocols/http/protocols.js +3 -0
- package/transpiled/protocols/http/protocols.js.map +1 -0
- package/transpiled/protocols/index.d.ts +4 -0
- package/transpiled/protocols/index.js +5 -0
- package/transpiled/protocols/index.js.map +1 -0
- package/transpiled/tsconfig.tsbuildinfo +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/extensions.origins",
|
|
3
|
-
"version": "0.20.0-dev.
|
|
3
|
+
"version": "0.20.0-dev.24",
|
|
4
4
|
"description": "Toa Origins",
|
|
5
5
|
"author": "temich <tema.gurtovoy@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/toa-io/toa#readme",
|
|
@@ -19,15 +19,15 @@
|
|
|
19
19
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@toa.io/core": "0.20.0-dev.
|
|
23
|
-
"@toa.io/generic": "0.20.0-dev.
|
|
24
|
-
"@toa.io/schemas": "0.20.0-dev.
|
|
25
|
-
"@toa.io/yaml": "0.20.0-dev.
|
|
22
|
+
"@toa.io/core": "0.20.0-dev.24",
|
|
23
|
+
"@toa.io/generic": "0.20.0-dev.24",
|
|
24
|
+
"@toa.io/schemas": "0.20.0-dev.24",
|
|
25
|
+
"@toa.io/yaml": "0.20.0-dev.24",
|
|
26
26
|
"comq": "0.8.0",
|
|
27
27
|
"node-fetch": "2.6.7"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node-fetch": "2.6.2"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "8e5e12c2cb181dbec7509fdaa0a51e8512ce2529"
|
|
33
33
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type * as pointer from '@toa.io/pointer';
|
|
2
|
+
export declare function split(annotation: Annotation): {
|
|
3
|
+
uris: pointer.Declaration;
|
|
4
|
+
properties: Properties;
|
|
5
|
+
};
|
|
6
|
+
type PropertySet = Record<string, boolean>;
|
|
7
|
+
type Properties = Record<string, PropertySet>;
|
|
8
|
+
export type Annotation = Record<string, string | string[] | PropertySet>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.split = void 0;
|
|
4
|
+
function split(annotation) {
|
|
5
|
+
const uris = {};
|
|
6
|
+
const properties = {};
|
|
7
|
+
for (const [key, value] of Object.entries(annotation))
|
|
8
|
+
if (key[0] === '.')
|
|
9
|
+
properties[key] = value;
|
|
10
|
+
else
|
|
11
|
+
uris[key] = value;
|
|
12
|
+
return { uris, properties };
|
|
13
|
+
}
|
|
14
|
+
exports.split = split;
|
|
15
|
+
//# sourceMappingURL=annotation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotation.js","sourceRoot":"","sources":["../source/annotation.ts"],"names":[],"mappings":";;;AAEA,SAAgB,KAAK,CAAE,UAAsB;IAI3C,MAAM,IAAI,GAAwB,EAAE,CAAA;IACpC,MAAM,UAAU,GAAe,EAAE,CAAA;IAEjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,UAAU,CAAC,GAAG,CAAC,GAAG,KAAoB,CAAA;;YACrD,IAAI,CAAC,GAAG,CAAC,GAAG,KAA0B,CAAA;IAE7C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;AAC7B,CAAC;AAZD,sBAYC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const PREFIX: "TOA_ORIGINS_";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../source/constants.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,CAAC,MAAM,GAAG,cAAc,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const { PREFIX } = require('./constants');
|
|
3
|
+
const { overwrite, remap, letters: { up } } = require('@toa.io/generic');
|
|
4
|
+
/**
|
|
5
|
+
* @param {toa.core.Locator} locator
|
|
6
|
+
* @param {toa.origins.Manifest} manifest
|
|
7
|
+
*/
|
|
8
|
+
function apply(locator, manifest) {
|
|
9
|
+
const variable = PREFIX + locator.uppercase;
|
|
10
|
+
const envValue = readEnv(variable);
|
|
11
|
+
overwrite(manifest, envValue);
|
|
12
|
+
addCredentials(manifest, variable);
|
|
13
|
+
}
|
|
14
|
+
function readEnv(variable) {
|
|
15
|
+
if (!(variable in process.env))
|
|
16
|
+
return;
|
|
17
|
+
const base64 = process.env[variable];
|
|
18
|
+
const json = atob(base64);
|
|
19
|
+
return JSON.parse(json);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @param {toa.origins.Manifest} manifest
|
|
23
|
+
* @param {string} variable
|
|
24
|
+
*/
|
|
25
|
+
function addCredentials(manifest, variable) {
|
|
26
|
+
const prefix = variable + '_';
|
|
27
|
+
remap(manifest, (reference, origin) => {
|
|
28
|
+
const originPrefix = prefix + up(origin);
|
|
29
|
+
const username = process.env[originPrefix + '_USERNAME'];
|
|
30
|
+
const password = process.env[originPrefix + '_PASSWORD'];
|
|
31
|
+
if (username === undefined && password === undefined)
|
|
32
|
+
return;
|
|
33
|
+
const url = new URL(reference);
|
|
34
|
+
url.username = username;
|
|
35
|
+
url.password = password;
|
|
36
|
+
manifest[origin] = url.href;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
exports.apply = apply;
|
|
40
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../source/env.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AACzC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAExE;;;GAGG;AACH,SAAS,KAAK,CAAE,OAAO,EAAE,QAAQ;IAC/B,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,CAAA;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAElC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC7B,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,OAAO,CAAE,QAAQ;IACxB,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;QAAE,OAAM;IAEtC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAEzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAE,QAAQ,EAAE,QAAQ;IACzC,MAAM,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAA;IAE7B,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;QACpC,MAAM,YAAY,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,CAAA;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,CAAA;QAExD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAM;QAE5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;QAE9B,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACvB,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAEvB,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Dependency } from '@toa.io/operations';
|
|
2
|
+
import type { context } from '@toa.io/norm';
|
|
3
|
+
export declare function deployment(instances: Instances, annotation: Declaration): Dependency;
|
|
4
|
+
export type Declaration = any;
|
|
5
|
+
export type Manifest = Record<string, string | null>;
|
|
6
|
+
export type Instance = context.Dependency<Manifest>;
|
|
7
|
+
export type Instances = Instance[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deployment = void 0;
|
|
4
|
+
const pointer_1 = require("@toa.io/pointer");
|
|
5
|
+
function deployment(instances, annotation) {
|
|
6
|
+
const variables = {};
|
|
7
|
+
const requests = [{ label: '', selectors: [''] }];
|
|
8
|
+
(0, pointer_1.createDeployment)(ID, annotation, requests);
|
|
9
|
+
return { variables };
|
|
10
|
+
}
|
|
11
|
+
exports.deployment = deployment;
|
|
12
|
+
const ID = 'origins';
|
|
13
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../source/extension.ts"],"names":[],"mappings":";;;AAAA,6CAA6E;AAI7E,SAAgB,UAAU,CAAE,SAAoB,EAAE,UAAuB;IACvE,MAAM,SAAS,GAAc,EAAE,CAAA;IAE/B,MAAM,QAAQ,GAAc,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAE5D,IAAA,0BAAgB,EAAC,EAAE,EAAE,UAA+B,EAAE,QAAQ,CAAC,CAAA;IAE/D,OAAO,EAAE,SAAS,EAAE,CAAA;AACtB,CAAC;AARD,gCAQC;AAED,MAAM,EAAE,GAAG,SAAS,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export class Factory {
|
|
2
|
+
/**
|
|
3
|
+
* @param {toa.core.Locator} locator
|
|
4
|
+
* @param {toa.origins.Manifest} manifest
|
|
5
|
+
* @return {toa.core.extensions.Aspect[]}
|
|
6
|
+
*/
|
|
7
|
+
aspect(locator: toa.core.Locator, manifest: toa.origins.Manifest): toa.core.extensions.Aspect[];
|
|
8
|
+
#private;
|
|
9
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const protocols = require('./protocols');
|
|
3
|
+
const env = require('./env');
|
|
4
|
+
class Factory {
|
|
5
|
+
/**
|
|
6
|
+
* @param {toa.core.Locator} locator
|
|
7
|
+
* @param {toa.origins.Manifest} manifest
|
|
8
|
+
* @return {toa.core.extensions.Aspect[]}
|
|
9
|
+
*/
|
|
10
|
+
aspect(locator, manifest) {
|
|
11
|
+
env.apply(locator, manifest);
|
|
12
|
+
return protocols.map((protocol) => this.#createAspect(protocol, manifest));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @param {object} protocol
|
|
16
|
+
* @param {toa.origins.Manifest} manifest
|
|
17
|
+
* @return {toa.core.extensions.Aspect}
|
|
18
|
+
*/
|
|
19
|
+
#createAspect(protocol, manifest) {
|
|
20
|
+
const protocolManifest = {};
|
|
21
|
+
let properties;
|
|
22
|
+
for (const [origin, reference] of Object.entries(manifest)) {
|
|
23
|
+
if (origin[0] === '.') {
|
|
24
|
+
if (origin.substring(1) === protocol.id)
|
|
25
|
+
properties = reference;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const url = new URL(reference);
|
|
29
|
+
if (protocol.protocols.includes(url.protocol))
|
|
30
|
+
protocolManifest[origin] = reference;
|
|
31
|
+
}
|
|
32
|
+
return protocol.create(protocolManifest, properties);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.Factory = Factory;
|
|
36
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../source/factory.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AACxC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAE5B,MAAM,OAAO;IACX;;;;OAIG;IACH,MAAM,CAAE,OAAO,EAAE,QAAQ;QACvB,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAE5B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAE,QAAQ,EAAE,QAAQ;QAC/B,MAAM,gBAAgB,GAAG,EAAE,CAAA;QAE3B,IAAI,UAAU,CAAA;QAEd,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC1D,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBACrB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE;oBAAE,UAAU,GAAG,SAAS,CAAA;gBAE/D,SAAQ;aACT;YAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;YAE9B,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;SACpF;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAA;IACtD,CAAC;CACF;AAED,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const { generate } = require('randomstring');
|
|
3
|
+
const { Locator } = require('@toa.io/core');
|
|
4
|
+
const { sample, overwrite, letters: { up } } = require('@toa.io/generic');
|
|
5
|
+
jest.mock('./protocols/http/aspect');
|
|
6
|
+
jest.mock('./protocols/amqp/aspect');
|
|
7
|
+
const http = require('./protocols/http/aspect');
|
|
8
|
+
const amqp = require('./protocols/amqp/aspect');
|
|
9
|
+
const fixtures = require('./.test/factory.fixtures');
|
|
10
|
+
const { Factory } = require('../');
|
|
11
|
+
let factory;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
jest.clearAllMocks();
|
|
14
|
+
factory = new Factory();
|
|
15
|
+
});
|
|
16
|
+
it('should create aspects', () => {
|
|
17
|
+
factory.aspect(new Locator(generate(), generate()), fixtures.manifest);
|
|
18
|
+
const httpManifest = filterManifest(fixtures.manifest, 'http');
|
|
19
|
+
const amqpManifest = filterManifest(fixtures.manifest, 'amqp');
|
|
20
|
+
expect(http.create).toHaveBeenCalledWith(httpManifest, undefined);
|
|
21
|
+
expect(amqp.create).toHaveBeenCalledWith(amqpManifest, undefined);
|
|
22
|
+
});
|
|
23
|
+
describe('env', () => {
|
|
24
|
+
it('should overwrites URLs from environment', async () => {
|
|
25
|
+
const httpManifest = filterManifest(fixtures.manifest, 'http');
|
|
26
|
+
const key = sample(Object.keys(httpManifest));
|
|
27
|
+
const override = { [key]: 'http://' + generate() };
|
|
28
|
+
const json = JSON.stringify(override);
|
|
29
|
+
const base64 = btoa(json);
|
|
30
|
+
const locator = new Locator(generate(), generate());
|
|
31
|
+
process.env['TOA_ORIGINS_' + locator.uppercase] = base64;
|
|
32
|
+
factory.aspect(locator, fixtures.manifest);
|
|
33
|
+
const expected = overwrite(httpManifest, override);
|
|
34
|
+
expect(http.create.mock.calls[0][0]).toStrictEqual(expected);
|
|
35
|
+
});
|
|
36
|
+
describe('amqp', () => {
|
|
37
|
+
/** @type {toa.origins.Manifest} */
|
|
38
|
+
let amqpManifest;
|
|
39
|
+
beforeEach(() => {
|
|
40
|
+
amqpManifest = filterManifest(fixtures.manifest, 'amqp');
|
|
41
|
+
});
|
|
42
|
+
it('should add credentials from environment', async () => {
|
|
43
|
+
const key = sample(Object.keys(amqpManifest));
|
|
44
|
+
const locator = new Locator(generate(), generate());
|
|
45
|
+
const envPrefix = 'TOA_ORIGINS_' + locator.uppercase + '_' + up(key) + '_';
|
|
46
|
+
const username = generate();
|
|
47
|
+
const password = generate();
|
|
48
|
+
process.env[envPrefix + 'USERNAME'] = username;
|
|
49
|
+
process.env[envPrefix + 'PASSWORD'] = password;
|
|
50
|
+
factory.aspect(locator, amqpManifest);
|
|
51
|
+
const manifest = amqp.create.mock.calls[0][0];
|
|
52
|
+
const origin = manifest[key];
|
|
53
|
+
const url = new URL(origin);
|
|
54
|
+
expect(url.username).toStrictEqual(username);
|
|
55
|
+
expect(url.password).toStrictEqual(password);
|
|
56
|
+
});
|
|
57
|
+
it('should add credentials to URLs from environment', async () => {
|
|
58
|
+
const key = sample(Object.keys(amqpManifest));
|
|
59
|
+
const hostname = generate().toLowerCase();
|
|
60
|
+
const override = { [key]: 'amqp://' + hostname };
|
|
61
|
+
const json = JSON.stringify(override);
|
|
62
|
+
const base64 = btoa(json);
|
|
63
|
+
const locator = new Locator(generate(), generate());
|
|
64
|
+
const envPrefix = 'TOA_ORIGINS_' + locator.uppercase + '_' + up(key) + '_';
|
|
65
|
+
const username = generate();
|
|
66
|
+
const password = generate();
|
|
67
|
+
process.env['TOA_ORIGINS_' + locator.uppercase] = base64;
|
|
68
|
+
process.env[envPrefix + 'USERNAME'] = username;
|
|
69
|
+
process.env[envPrefix + 'PASSWORD'] = password;
|
|
70
|
+
factory.aspect(locator, fixtures.manifest);
|
|
71
|
+
const manifest = amqp.create.mock.calls[0][0];
|
|
72
|
+
const origin = manifest[key];
|
|
73
|
+
const url = new URL(origin);
|
|
74
|
+
expect(url.hostname).toStrictEqual(hostname);
|
|
75
|
+
expect(url.username).toStrictEqual(username);
|
|
76
|
+
expect(url.password).toStrictEqual(password);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('http', () => {
|
|
80
|
+
it('should read properties', async () => {
|
|
81
|
+
const properties = {
|
|
82
|
+
'.http': {
|
|
83
|
+
[generate()]: generate()
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const locator = new Locator(generate(), generate());
|
|
87
|
+
const json = JSON.stringify(properties);
|
|
88
|
+
process.env['TOA_ORIGINS_' + locator.uppercase] = btoa(json);
|
|
89
|
+
factory.aspect(locator, fixtures.manifest);
|
|
90
|
+
expect(http.create).toHaveBeenCalledWith(expect.anything(), properties['.http']);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* @param {toa.origins.Manifest} manifest
|
|
96
|
+
* @param {string} protocol
|
|
97
|
+
* @return {toa.origins.Manifest}
|
|
98
|
+
*/
|
|
99
|
+
function filterManifest(manifest, protocol) {
|
|
100
|
+
const result = {};
|
|
101
|
+
for (const [origin, reference] of Object.entries(manifest)) {
|
|
102
|
+
if (reference.slice(0, protocol.length) === protocol)
|
|
103
|
+
result[origin] = reference;
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=factory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.test.js","sourceRoot":"","sources":["../source/factory.test.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const { manifest } = require('./manifest');
|
|
3
|
+
const { extension } = require('./extension');
|
|
4
|
+
const { Factory } = require('./factory');
|
|
5
|
+
exports.manifest = manifest;
|
|
6
|
+
exports.deployment = extension;
|
|
7
|
+
exports.Factory = Factory;
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;AAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AAExC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;AAC3B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAA;AAC9B,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function manifest(manifest: any): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../source/manifest.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,SAAS,QAAQ,CAAE,QAAQ;AAE3B,CAAC;AAED,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const { generate } = require('randomstring');
|
|
3
|
+
const { PROTOCOLS } = require('./.test/constants');
|
|
4
|
+
const { manifest } = require('../');
|
|
5
|
+
it('should be', async () => {
|
|
6
|
+
expect(manifest).toBeInstanceOf(Function);
|
|
7
|
+
});
|
|
8
|
+
it('should return manifest', async () => {
|
|
9
|
+
const input = { [generate()]: 'http://' + generate() };
|
|
10
|
+
const output = manifest(input);
|
|
11
|
+
expect(output).toStrictEqual(input);
|
|
12
|
+
});
|
|
13
|
+
it('should fail if not Record<string, string>', async () => {
|
|
14
|
+
const input = /** @type {toa.origins.Manifest} */ {
|
|
15
|
+
foo: {
|
|
16
|
+
bar: 'dev://null'
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
expect(() => manifest(input)).toThrow();
|
|
20
|
+
});
|
|
21
|
+
it('should pass if valid', async () => {
|
|
22
|
+
const input = { foo: 'amqp://' + generate() };
|
|
23
|
+
expect(() => manifest(input)).not.toThrow();
|
|
24
|
+
});
|
|
25
|
+
it('should throw if protocol is not supported', async () => {
|
|
26
|
+
const input = { foo: 'wat://' + generate() };
|
|
27
|
+
expect(() => manifest(input)).toThrow('is not supported');
|
|
28
|
+
});
|
|
29
|
+
it('should convert null to {}', async () => {
|
|
30
|
+
const output = manifest(null);
|
|
31
|
+
expect(output).toStrictEqual({});
|
|
32
|
+
});
|
|
33
|
+
it.each(PROTOCOLS)('should support %s protocol', async (protocol) => {
|
|
34
|
+
const input = { foo: protocol + '//' + generate() };
|
|
35
|
+
expect(() => manifest(input)).not.toThrow();
|
|
36
|
+
});
|
|
37
|
+
it('should handle placeholders', async () => {
|
|
38
|
+
const input = { foo: 'http://${FOO}' + generate() + ':${BAR}/' }; // eslint-disable-line no-template-curly-in-string
|
|
39
|
+
expect(() => manifest(input)).not.toThrow();
|
|
40
|
+
});
|
|
41
|
+
it('should handle host shards', async () => {
|
|
42
|
+
const input = { foo: 'http://{0-3}' + generate() };
|
|
43
|
+
expect(() => manifest(input)).not.toThrow();
|
|
44
|
+
});
|
|
45
|
+
it('should handle port shards', async () => {
|
|
46
|
+
const input = { foo: 'http://' + generate() + ':888{0-9}' };
|
|
47
|
+
expect(() => manifest(input)).not.toThrow();
|
|
48
|
+
});
|
|
49
|
+
it.each(['dev:sec', 'dev'])('should throw if url contains credentials (%s)', async (credentials) => {
|
|
50
|
+
const input = { foo: `http://${credentials}@${generate()}:888{0-9}` };
|
|
51
|
+
expect(() => manifest(input)).toThrow('must not contain credentials');
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=manifest.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.test.js","sourceRoot":"","sources":["../source/manifest.test.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const manifest: {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const { generate } = require('randomstring');
|
|
3
|
+
const { random } = require('@toa.io/generic');
|
|
4
|
+
const manifest = {};
|
|
5
|
+
const originCount = random(5) + 2;
|
|
6
|
+
for (let j = 0; j < originCount; j++) {
|
|
7
|
+
const origin = generate();
|
|
8
|
+
manifest[origin] = 'amqp://' + generate();
|
|
9
|
+
}
|
|
10
|
+
exports.manifest = manifest;
|
|
11
|
+
//# sourceMappingURL=aspect.fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspect.fixtures.js","sourceRoot":"","sources":["../../../../source/protocols/amqp/.test/aspect.fixtures.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAE7C,MAAM,QAAQ,GAAG,EAAE,CAAA;AACnB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;IACpC,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;IAEzB,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAA;CAC1C;AAED,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const assert: jest.Mock<Promise<{
|
|
2
|
+
emit: jest.Mock<Promise<undefined>, []>;
|
|
3
|
+
request: jest.Mock<Promise<string>, []>;
|
|
4
|
+
reply: jest.Mock<Promise<undefined>, []>;
|
|
5
|
+
consume: jest.Mock<Promise<undefined>, []>;
|
|
6
|
+
close: jest.Mock<Promise<undefined>, []>;
|
|
7
|
+
}>, []>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const { generate } = require('randomstring');
|
|
3
|
+
const assert = jest.fn(async () => ({
|
|
4
|
+
emit: jest.fn(async () => undefined),
|
|
5
|
+
request: jest.fn(async () => generate()),
|
|
6
|
+
reply: jest.fn(async () => undefined),
|
|
7
|
+
consume: jest.fn(async () => undefined),
|
|
8
|
+
close: jest.fn(async () => undefined)
|
|
9
|
+
}));
|
|
10
|
+
exports.assert = assert;
|
|
11
|
+
//# sourceMappingURL=mock.comq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.comq.js","sourceRoot":"","sources":["../../../../source/protocols/amqp/.test/mock.comq.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;IACpC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;IACxC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;IACrC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;IACvC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;CACtC,CAAC,CAAC,CAAA;AAEH,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {toa.origins.Manifest} manifest
|
|
3
|
+
*/
|
|
4
|
+
export function create(manifest: toa.origins.Manifest): Aspect;
|
|
5
|
+
/**
|
|
6
|
+
* @implements {toa.origins.amqp.Aspect}
|
|
7
|
+
*/
|
|
8
|
+
declare class Aspect extends Connector implements toa.origins.amqp.Aspect {
|
|
9
|
+
/**
|
|
10
|
+
* @param {toa.origins.Manifest} manifest
|
|
11
|
+
*/
|
|
12
|
+
constructor(manifest: toa.origins.Manifest);
|
|
13
|
+
name: "amqp";
|
|
14
|
+
invoke(origin: any, method: any, ...args: any[]): Promise<any>;
|
|
15
|
+
#private;
|
|
16
|
+
}
|
|
17
|
+
import { Connector } from "@toa.io/core";
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const { assert } = require('comq');
|
|
3
|
+
const { Connector } = require('@toa.io/core');
|
|
4
|
+
const { shards } = require('@toa.io/generic');
|
|
5
|
+
const { id } = require('./id');
|
|
6
|
+
/**
|
|
7
|
+
* @implements {toa.origins.amqp.Aspect}
|
|
8
|
+
*/
|
|
9
|
+
class Aspect extends Connector {
|
|
10
|
+
name = id;
|
|
11
|
+
/** @type {toa.origins.Manifest} */
|
|
12
|
+
#manifest;
|
|
13
|
+
/** @type {Record<string, Partial<comq.IO>>} */
|
|
14
|
+
#origins = {};
|
|
15
|
+
/**
|
|
16
|
+
* @param {toa.origins.Manifest} manifest
|
|
17
|
+
*/
|
|
18
|
+
constructor(manifest) {
|
|
19
|
+
super();
|
|
20
|
+
this.#manifest = manifest;
|
|
21
|
+
}
|
|
22
|
+
async open() {
|
|
23
|
+
const promises = Object.entries(this.#manifest).map(this.#open);
|
|
24
|
+
await Promise.all(promises);
|
|
25
|
+
}
|
|
26
|
+
async close() {
|
|
27
|
+
const promises = Object.values(this.#origins).map(this.#close);
|
|
28
|
+
await Promise.all(promises);
|
|
29
|
+
}
|
|
30
|
+
async invoke(origin, method, ...args) {
|
|
31
|
+
return this.#origins[origin][method](...args);
|
|
32
|
+
}
|
|
33
|
+
#open = async ([origin, reference]) => {
|
|
34
|
+
const references = shards(reference);
|
|
35
|
+
const io = await assert(...references);
|
|
36
|
+
this.#origins[origin] = restrict(io);
|
|
37
|
+
};
|
|
38
|
+
#close = async (io) => {
|
|
39
|
+
await io.close();
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @param {comq.IO} io
|
|
44
|
+
* @return {Partial<comq.IO>}
|
|
45
|
+
*/
|
|
46
|
+
function restrict(io) {
|
|
47
|
+
// noinspection JSUnresolvedReference
|
|
48
|
+
return {
|
|
49
|
+
request: (...args) => io.request(...args),
|
|
50
|
+
emit: (...args) => io.emit(...args),
|
|
51
|
+
close: () => io.close()
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* @param {toa.origins.Manifest} manifest
|
|
56
|
+
*/
|
|
57
|
+
function create(manifest) {
|
|
58
|
+
return new Aspect(manifest);
|
|
59
|
+
}
|
|
60
|
+
exports.create = create;
|
|
61
|
+
//# sourceMappingURL=aspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspect.js","sourceRoot":"","sources":["../../../source/protocols/amqp/aspect.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAClC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAE7C,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE9B;;GAEG;AACH,MAAM,MAAO,SAAQ,SAAS;IAC5B,IAAI,GAAG,EAAE,CAAA;IACT,mCAAmC;IACnC,SAAS,CAAA;IAET,+CAA+C;IAC/C,QAAQ,GAAG,EAAE,CAAA;IAEb;;OAEG;IACH,YAAa,QAAQ;QACnB,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAE/D,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9D,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,GAAG,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE;QACpC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;QACpC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;QAEtC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,MAAM,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;QACpB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,CAAA;CACF;AAED;;;GAGG;AACH,SAAS,QAAQ,CAAE,EAAE;IACnB,qCAAqC;IACrC,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACzC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACnC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;KACxB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAE,QAAQ;IACvB,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC;AAED,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|