@toa.io/extensions.origins 1.0.0-alpha.0 → 1.0.0-alpha.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/package.json +10 -8
  2. package/readme.md +39 -3
  3. package/source/Factory.ts +13 -18
  4. package/source/annotation.ts +2 -1
  5. package/source/manifest.ts +2 -1
  6. package/source/protocols/amqp/aspect.js +7 -23
  7. package/source/protocols/http/.aspect/permissions.js +3 -8
  8. package/source/protocols/http/aspect.js +5 -12
  9. package/source/protocols/index.ts +5 -6
  10. package/source/protocols/pubsub/Aspect.ts +88 -0
  11. package/source/protocols/pubsub/Origin.ts +10 -0
  12. package/source/protocols/pubsub/Topic.ts +23 -0
  13. package/source/protocols/pubsub/index.ts +8 -0
  14. package/transpiled/Factory.d.ts +16 -0
  15. package/transpiled/Factory.js +62 -0
  16. package/transpiled/Factory.js.map +1 -0
  17. package/transpiled/annotation.d.ts +10 -0
  18. package/transpiled/annotation.js +91 -0
  19. package/transpiled/annotation.js.map +1 -0
  20. package/transpiled/constants.d.ts +1 -0
  21. package/transpiled/constants.js +3 -0
  22. package/transpiled/constants.js.map +1 -0
  23. package/transpiled/env.d.ts +5 -0
  24. package/transpiled/env.js +40 -0
  25. package/transpiled/env.js.map +1 -0
  26. package/transpiled/extension.d.ts +10 -0
  27. package/transpiled/extension.js +49 -0
  28. package/transpiled/extension.js.map +1 -0
  29. package/transpiled/index.d.ts +2 -0
  30. package/transpiled/index.js +9 -0
  31. package/transpiled/index.js.map +1 -0
  32. package/transpiled/manifest.d.ts +2 -0
  33. package/transpiled/manifest.js +36 -0
  34. package/transpiled/manifest.js.map +1 -0
  35. package/transpiled/protocols/amqp/aspect.d.ts +11 -0
  36. package/transpiled/protocols/amqp/aspect.js +39 -0
  37. package/transpiled/protocols/amqp/aspect.js.map +1 -0
  38. package/transpiled/protocols/amqp/deployment.d.ts +5 -0
  39. package/transpiled/protocols/amqp/deployment.js +55 -0
  40. package/transpiled/protocols/amqp/deployment.js.map +1 -0
  41. package/transpiled/protocols/amqp/id.d.ts +1 -0
  42. package/transpiled/protocols/amqp/id.js +3 -0
  43. package/transpiled/protocols/amqp/id.js.map +1 -0
  44. package/transpiled/protocols/amqp/index.d.ts +5 -0
  45. package/transpiled/protocols/amqp/index.js +10 -0
  46. package/transpiled/protocols/amqp/index.js.map +1 -0
  47. package/transpiled/protocols/amqp/protocols.d.ts +2 -0
  48. package/transpiled/protocols/amqp/protocols.js +3 -0
  49. package/transpiled/protocols/amqp/protocols.js.map +1 -0
  50. package/transpiled/protocols/http/.aspect/permissions.d.ts +6 -0
  51. package/transpiled/protocols/http/.aspect/permissions.js +48 -0
  52. package/transpiled/protocols/http/.aspect/permissions.js.map +1 -0
  53. package/transpiled/protocols/http/aspect.d.ts +10 -0
  54. package/transpiled/protocols/http/aspect.js +82 -0
  55. package/transpiled/protocols/http/aspect.js.map +1 -0
  56. package/transpiled/protocols/http/id.d.ts +1 -0
  57. package/transpiled/protocols/http/id.js +3 -0
  58. package/transpiled/protocols/http/id.js.map +1 -0
  59. package/transpiled/protocols/http/index.d.ts +4 -0
  60. package/transpiled/protocols/http/index.js +8 -0
  61. package/transpiled/protocols/http/index.js.map +1 -0
  62. package/transpiled/protocols/http/protocols.d.ts +2 -0
  63. package/transpiled/protocols/http/protocols.js +3 -0
  64. package/transpiled/protocols/http/protocols.js.map +1 -0
  65. package/transpiled/protocols/index.d.ts +9 -0
  66. package/transpiled/protocols/index.js +11 -0
  67. package/transpiled/protocols/index.js.map +1 -0
  68. package/transpiled/protocols/pubsub/Aspect.d.ts +13 -0
  69. package/transpiled/protocols/pubsub/Aspect.js +70 -0
  70. package/transpiled/protocols/pubsub/Aspect.js.map +1 -0
  71. package/transpiled/protocols/pubsub/Origin.d.ts +8 -0
  72. package/transpiled/protocols/pubsub/Origin.js +3 -0
  73. package/transpiled/protocols/pubsub/Origin.js.map +1 -0
  74. package/transpiled/protocols/pubsub/Topic.d.ts +8 -0
  75. package/transpiled/protocols/pubsub/Topic.js +19 -0
  76. package/transpiled/protocols/pubsub/Topic.js.map +1 -0
  77. package/transpiled/protocols/pubsub/index.d.ts +7 -0
  78. package/transpiled/protocols/pubsub/index.js +8 -0
  79. package/transpiled/protocols/pubsub/index.js.map +1 -0
  80. package/transpiled/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation.js","sourceRoot":"","sources":["../source/annotation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export const PREFIX: "TOA_ORIGINS_";
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+ exports.PREFIX = 'TOA_ORIGINS_';
3
+ //# sourceMappingURL=constants.js.map
@@ -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,5 @@
1
+ /**
2
+ * @param {toa.core.Locator} locator
3
+ * @param {toa.origins.Manifest} manifest
4
+ */
5
+ export function apply(locator: toa.core.Locator, manifest: toa.origins.Manifest): void;
@@ -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,10 @@
1
+ import { type Annotation } from './annotation';
2
+ import { type Manifest } from './manifest';
3
+ import type { Dependency } from '@toa.io/operations';
4
+ import type { context } from '@toa.io/norm';
5
+ export declare function deployment(instances: Instance[], annotation?: Annotation): Dependency;
6
+ export declare function manifest(manifest: Manifest): Manifest;
7
+ export declare const ID_PREFIX = "origins-";
8
+ export declare const ENV_PREFIX = "TOA_ORIGINS_";
9
+ export declare const PROPERTIES_SUFFIX = "__PROPERTIES";
10
+ export type Instance = context.Dependency<Manifest>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROPERTIES_SUFFIX = exports.ENV_PREFIX = exports.ID_PREFIX = exports.manifest = exports.deployment = void 0;
4
+ const msgpackr_1 = require("msgpackr");
5
+ const pointer_1 = require("@toa.io/pointer");
6
+ const generic_1 = require("@toa.io/generic");
7
+ const annotation_1 = require("./annotation");
8
+ const manifest_1 = require("./manifest");
9
+ function deployment(instances, annotation = {}) {
10
+ (0, annotation_1.normalize)(instances, annotation);
11
+ const variables = {};
12
+ for (const instance of instances) {
13
+ const component = annotation[instance.locator.id];
14
+ const { origins, properties } = (0, annotation_1.split)(component);
15
+ const instanceVariables = createInstanceVariables(instance, origins);
16
+ const propertiesVariable = createPropertiesVariable(instance.locator, properties);
17
+ (0, generic_1.merge)(variables, instanceVariables);
18
+ (0, generic_1.merge)(variables, propertiesVariable);
19
+ }
20
+ return { variables };
21
+ }
22
+ exports.deployment = deployment;
23
+ function manifest(manifest) {
24
+ (0, manifest_1.validate)(manifest);
25
+ return manifest;
26
+ }
27
+ exports.manifest = manifest;
28
+ function createInstanceVariables(instance, origins) {
29
+ if (instance.manifest === null)
30
+ return {};
31
+ const label = instance.locator.label;
32
+ const id = exports.ID_PREFIX + label;
33
+ const selectors = Object.keys(instance.manifest);
34
+ const request = { group: label, selectors };
35
+ return (0, pointer_1.createVariables)(id, origins, [request]);
36
+ }
37
+ function createPropertiesVariable(locator, properties) {
38
+ const name = exports.ENV_PREFIX + locator.uppercase + exports.PROPERTIES_SUFFIX;
39
+ const value = (0, msgpackr_1.encode)(properties).toString('base64');
40
+ return {
41
+ [locator.label]: [
42
+ { name, value }
43
+ ]
44
+ };
45
+ }
46
+ exports.ID_PREFIX = 'origins-';
47
+ exports.ENV_PREFIX = 'TOA_ORIGINS_';
48
+ exports.PROPERTIES_SUFFIX = '__PROPERTIES';
49
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../source/extension.ts"],"names":[],"mappings":";;;AAAA,uCAAiC;AACjC,6CAA+D;AAC/D,6CAAuC;AACvC,6CAA+F;AAC/F,yCAAoD;AAKpD,SAAgB,UAAU,CAAE,SAAqB,EAAE,aAAyB,EAAE;IAC5E,IAAA,sBAAS,EAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAEhC,MAAM,SAAS,GAAc,EAAE,CAAA;IAE/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACjD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAA,kBAAK,EAAC,SAAS,CAAC,CAAA;QAChD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACpE,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAEjF,IAAA,eAAK,EAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;QACnC,IAAA,eAAK,EAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IACtC,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,CAAA;AACtB,CAAC;AAhBD,gCAgBC;AAED,SAAgB,QAAQ,CAAE,QAAkB;IAC1C,IAAA,mBAAQ,EAAC,QAAQ,CAAC,CAAA;IAElB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAJD,4BAIC;AAED,SAAS,uBAAuB,CAAE,QAAkB,EAAE,OAAgB;IACpE,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IAEzC,MAAM,KAAK,GAAW,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAA;IAC5C,MAAM,EAAE,GAAG,iBAAS,GAAG,KAAK,CAAA;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,OAAO,GAAY,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IAEpD,OAAO,IAAA,yBAAe,EAAC,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,SAAS,wBAAwB,CAAE,OAAgB,EAAE,UAAsB;IACzE,MAAM,IAAI,GAAG,kBAAU,GAAG,OAAO,CAAC,SAAS,GAAG,yBAAiB,CAAA;IAC/D,MAAM,KAAK,GAAG,IAAA,iBAAM,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAEnD,OAAO;QACL,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACf,EAAE,IAAI,EAAE,KAAK,EAAE;SAChB;KACF,CAAA;AACH,CAAC;AAEY,QAAA,SAAS,GAAG,UAAU,CAAA;AACtB,QAAA,UAAU,GAAG,cAAc,CAAA;AAC3B,QAAA,iBAAiB,GAAG,cAAc,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { deployment, manifest } from './extension';
2
+ export { Factory } from './Factory';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Factory = exports.manifest = exports.deployment = void 0;
4
+ var extension_1 = require("./extension");
5
+ Object.defineProperty(exports, "deployment", { enumerable: true, get: function () { return extension_1.deployment; } });
6
+ Object.defineProperty(exports, "manifest", { enumerable: true, get: function () { return extension_1.manifest; } });
7
+ var Factory_1 = require("./Factory");
8
+ Object.defineProperty(exports, "Factory", { enumerable: true, get: function () { return Factory_1.Factory; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";;;AAAA,yCAAkD;AAAzC,uGAAA,UAAU,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAC7B,qCAAmC;AAA1B,kGAAA,OAAO,OAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function validate(manifest: Manifest): void;
2
+ export type Manifest = Record<string, string | null> | null;
@@ -0,0 +1,36 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.validate = void 0;
27
+ const node_path_1 = require("node:path");
28
+ const schemas = __importStar(require("@toa.io/schemas"));
29
+ function validate(manifest) {
30
+ if (manifest !== null)
31
+ schema.validate(manifest);
32
+ }
33
+ exports.validate = validate;
34
+ const path = (0, node_path_1.resolve)(__dirname, '../schemas/manifest.cos.yaml');
35
+ const schema = schemas.schema(path);
36
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../source/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAmC;AACnC,yDAA0C;AAG1C,SAAgB,QAAQ,CAAE,QAAkB;IAC1C,IAAI,QAAQ,KAAK,IAAI;QAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC;AAFD,4BAEC;AAED,MAAM,IAAI,GAAG,IAAA,mBAAO,EAAC,SAAS,EAAE,8BAA8B,CAAC,CAAA;AAC/D,MAAM,MAAM,GAAgB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ export function create(declaration: any): Aspect;
2
+ declare class Aspect extends Connector {
3
+ constructor(origins: any);
4
+ name: "amqp";
5
+ open(): Promise<void>;
6
+ close(): Promise<void>;
7
+ invoke(origin: any, method: any, ...args: any[]): Promise<any>;
8
+ #private;
9
+ }
10
+ import { Connector } from "@toa.io/core";
11
+ export {};
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+ const { assert } = require('comq');
3
+ const { Connector } = require('@toa.io/core');
4
+ const protocol = require('./index');
5
+ class Aspect extends Connector {
6
+ name = protocol.id;
7
+ #declarations;
8
+ #origins = {};
9
+ constructor(origins) {
10
+ super();
11
+ this.#declarations = origins;
12
+ }
13
+ async open() {
14
+ const promises = Object.entries(this.#declarations).map(this.#open);
15
+ await Promise.all(promises);
16
+ }
17
+ async close() {
18
+ const promises = Object.values(this.#origins).map(this.#close);
19
+ await Promise.all(promises);
20
+ }
21
+ async invoke(origin, method, ...args) {
22
+ if (this.#origins[origin]?.[method] === undefined) {
23
+ throw new Error(`Origin "${origin}" or method "${method}" is undefined`);
24
+ }
25
+ return this.#origins[origin][method](...args);
26
+ }
27
+ #open = async ([origin, references]) => {
28
+ const io = await assert(...references);
29
+ this.#origins[origin] = io;
30
+ };
31
+ #close = async (io) => {
32
+ await io.close();
33
+ };
34
+ }
35
+ function create(declaration) {
36
+ return new Aspect(declaration.origins);
37
+ }
38
+ exports.create = create;
39
+ //# 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,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAEnC,MAAM,MAAO,SAAQ,SAAS;IAC5B,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAA;IAElB,aAAa,CAAA;IACb,QAAQ,GAAG,EAAE,CAAA;IAEb,YAAa,OAAO;QAClB,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEnE,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,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,gBAAgB,MAAM,gBAAgB,CAAC,CAAA;QAC1E,CAAC;QAED,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,UAAU,CAAC,EAAE,EAAE;QACrC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;QAEtC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IAC5B,CAAC,CAAA;IAED,MAAM,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;QACpB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,CAAA;CACF;AAED,SAAS,MAAM,CAAE,WAAW;IAC1B,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @param {toa.norm.context.dependencies.Instance[]} instances
3
+ * @returns {toa.deployment.dependency.Variables}
4
+ */
5
+ export function deployment(instances: toa.norm.context.dependencies.Instance[]): toa.deployment.dependency.Variables;
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+ const { letters: { up } } = require('@toa.io/generic');
3
+ const protocols = require('./protocols');
4
+ /**
5
+ * @param {toa.norm.context.dependencies.Instance[]} instances
6
+ * @returns {toa.deployment.dependency.Variables}
7
+ */
8
+ function deployment(instances) {
9
+ /** @type {toa.deployment.dependency.Variables} */
10
+ const variables = {};
11
+ for (const { locator, manifest } of instances) {
12
+ const secrets = [];
13
+ for (const [origin, reference] of Object.entries(manifest)) {
14
+ let protocol;
15
+ const match = reference.match(RX);
16
+ if (match !== null)
17
+ protocol = match.groups.protocol;
18
+ if (protocols.includes(protocol)) {
19
+ const originSecrets = createSecrets(locator, origin);
20
+ secrets.push(...originSecrets);
21
+ }
22
+ }
23
+ variables[locator.label] = secrets;
24
+ }
25
+ return variables;
26
+ }
27
+ /**
28
+ * @param {toa.core.Locator} locator
29
+ * @param {string} origin
30
+ * @return {toa.deployment.dependency.Variable[]}
31
+ */
32
+ function createSecrets(locator, origin) {
33
+ const properties = ['username', 'password'];
34
+ return properties.map((property) => createSecret(locator, origin, property));
35
+ }
36
+ /**
37
+ * @param {toa.core.Locator} locator
38
+ * @param {string} origin
39
+ * @param {string} property
40
+ * @return {toa.deployment.dependency.Variable}
41
+ */
42
+ function createSecret(locator, origin, property) {
43
+ const variable = `TOA_ORIGINS_${locator.uppercase}_${up(origin)}_${up(property)}`;
44
+ const secret = `toa-origins-${locator.label}-${origin}`;
45
+ return {
46
+ name: variable,
47
+ secret: {
48
+ name: secret,
49
+ key: property
50
+ }
51
+ };
52
+ }
53
+ const RX = /^(?<protocol>\w{1,12}:)/;
54
+ exports.deployment = deployment;
55
+ //# sourceMappingURL=deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../../source/protocols/amqp/deployment.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAExC;;;GAGG;AACH,SAAS,UAAU,CAAE,SAAS;IAC5B,kDAAkD;IAClD,MAAM,SAAS,GAAG,EAAE,CAAA;IAEpB,KAAK,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,EAAE,CAAA;QAElB,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,IAAI,QAAQ,CAAA;YAEZ,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAEjC,IAAI,KAAK,KAAK,IAAI;gBAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAA;YAEpD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;gBAEpD,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;QAED,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;IACpC,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAE,OAAO,EAAE,MAAM;IACrC,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IAE3C,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAE,OAAO,EAAE,MAAM,EAAE,QAAQ;IAC9C,MAAM,QAAQ,GAAG,eAAe,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAA;IACjF,MAAM,MAAM,GAAG,eAAe,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,CAAA;IAEvD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,QAAQ;SACd;KACF,CAAA;AACH,CAAC;AAED,MAAM,EAAE,GAAG,yBAAyB,CAAA;AAEpC,OAAO,CAAC,UAAU,GAAG,UAAU,CAAA"}
@@ -0,0 +1 @@
1
+ export const id: "amqp";
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+ exports.id = 'amqp';
3
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../../source/protocols/amqp/id.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,CAAC,EAAE,GAAG,MAAM,CAAA"}
@@ -0,0 +1,5 @@
1
+ import protocols = require("./protocols");
2
+ import { id } from "./id";
3
+ import { create } from "./aspect";
4
+ import { deployment } from "./deployment";
5
+ export { protocols, id, create, deployment };
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+ const protocols = require('./protocols');
3
+ const { id } = require('./id');
4
+ const { create } = require('./aspect');
5
+ const { deployment } = require('./deployment');
6
+ exports.protocols = protocols;
7
+ exports.id = id;
8
+ exports.create = create;
9
+ exports.deployment = deployment;
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/protocols/amqp/index.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AACxC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AACtC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAE9C,OAAO,CAAC,SAAS,GAAG,SAAS,CAAA;AAC7B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;AACf,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;AACvB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _exports: string[];
2
+ export = _exports;
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+ module.exports = ['amqp:', 'amqps:'];
3
+ //# sourceMappingURL=protocols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocols.js","sourceRoot":"","sources":["../../../source/protocols/amqp/protocols.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export class Permissions extends Connector {
2
+ constructor(properties: any);
3
+ test(url: any): boolean;
4
+ #private;
5
+ }
6
+ import { Connector } from "@toa.io/core";
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+ const { echo } = require('@toa.io/generic');
3
+ const { Connector } = require('@toa.io/core');
4
+ class Permissions extends Connector {
5
+ /** @type {RegExp[]} */
6
+ #allowances = [];
7
+ /** @type {RegExp[]} */
8
+ #denials = [];
9
+ #resolve;
10
+ constructor(properties) {
11
+ super();
12
+ if (properties !== undefined)
13
+ this.#parse(properties);
14
+ }
15
+ test(url) {
16
+ const denial = this.#denials.findIndex((regexp) => regexp.test(url));
17
+ if (denial !== -1)
18
+ return false;
19
+ const allowance = this.#allowances.findIndex((regexp) => regexp.test(url));
20
+ return allowance !== -1;
21
+ }
22
+ #parse(properties) {
23
+ if ('null' in properties) {
24
+ const always = /** @type {RegExp} */ { test: () => true };
25
+ this.#addRule(always, properties.null);
26
+ delete properties.null;
27
+ }
28
+ for (const [key, rule] of Object.entries(properties)) {
29
+ const match = key.match(EXPRESSION);
30
+ if (match === null)
31
+ throw new Error(`'${key}' is not a regular expression`);
32
+ const expression = echo(match.groups.expression);
33
+ const regex = new RegExp(expression);
34
+ this.#addRule(regex, rule);
35
+ }
36
+ }
37
+ /**
38
+ * @param {RegExp} regex
39
+ * @param {boolean} rule
40
+ */
41
+ #addRule(regex, rule) {
42
+ const rules = rule ? this.#allowances : this.#denials;
43
+ rules.push(regex);
44
+ }
45
+ }
46
+ const EXPRESSION = /^\/(?<expression>.+)\/$/;
47
+ exports.Permissions = Permissions;
48
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../../source/protocols/http/.aspect/permissions.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAC3C,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;AAE7C,MAAM,WAAY,SAAQ,SAAS;IACjC,uBAAuB;IACvB,WAAW,GAAG,EAAE,CAAA;IAEhB,uBAAuB;IACvB,QAAQ,GAAG,EAAE,CAAA;IAEb,QAAQ,CAAA;IAER,YAAa,UAAU;QACrB,KAAK,EAAE,CAAA;QAEP,IAAI,UAAU,KAAK,SAAS;YAC1B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,CAAE,GAAG;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAEpE,IAAI,MAAM,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;QAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAE1E,OAAO,SAAS,KAAK,CAAC,CAAC,CAAA;IACzB,CAAC;IAED,MAAM,CAAE,UAAU;QAChB,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;YAEzD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;YACtC,OAAO,UAAU,CAAC,IAAI,CAAA;QACxB,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAEnC,IAAI,KAAK,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,+BAA+B,CAAC,CAAA;YAE3E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAChD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;YAEpC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAE,KAAK,EAAE,IAAI;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAA;QAErD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;CACF;AAED,MAAM,UAAU,GAAG,yBAAyB,CAAA;AAE5C,OAAO,CAAC,WAAW,GAAG,WAAW,CAAA"}
@@ -0,0 +1,10 @@
1
+ export function create(declaration: any): Aspect;
2
+ declare class Aspect extends Connector {
3
+ constructor(origins: any, permissions: any);
4
+ /** @readonly */
5
+ readonly name: "http";
6
+ invoke(name: any, path: any, request: any, options: any): Promise<any>;
7
+ #private;
8
+ }
9
+ import { Connector } from "@toa.io/core";
10
+ export {};
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+ const { Connector } = require('@toa.io/core');
3
+ const { retry } = require('@toa.io/generic');
4
+ const { Permissions } = require('./.aspect/permissions');
5
+ const protocols = require('./protocols');
6
+ const protocol = require('./index');
7
+ class Aspect extends Connector {
8
+ /** @readonly */
9
+ name = protocol.id;
10
+ #origins;
11
+ #permissions;
12
+ constructor(origins, permissions) {
13
+ super();
14
+ this.#origins = origins;
15
+ this.#permissions = permissions;
16
+ this.depends(permissions);
17
+ }
18
+ async invoke(name, path, request, options) {
19
+ let origin = this.#origins[name];
20
+ if (origin === undefined) {
21
+ if (isAbsoluteURL(name))
22
+ return this.#invokeURL(name, /** @type {Request} */ path);
23
+ else
24
+ throw new Error(`Origin '${name}' is not defined`);
25
+ }
26
+ // absolute urls are forbidden when using origins
27
+ if (typeof path === 'string' && isAbsoluteURL(path))
28
+ throw new Error(`Absolute URLs are forbidden (${path})`);
29
+ if (options?.substitutions !== undefined)
30
+ origin = substitute(origin, options.substitutions);
31
+ const url = path === undefined ? new URL(origin) : new URL(path, origin);
32
+ return this.#request(url.href, request, options?.retry);
33
+ }
34
+ async #invokeURL(url, request) {
35
+ if (this.#permissions.test(url) === false)
36
+ throw new Error(`URL '${url}' is not allowed`);
37
+ return this.#request(url, request);
38
+ }
39
+ async #request(url, request, options) {
40
+ const call = () => fetch(url, request);
41
+ if (options === undefined)
42
+ return call();
43
+ else
44
+ return this.#retry(call, options);
45
+ }
46
+ /**
47
+ * @param {Function} call
48
+ * @param {toa.generic.retry.Options} options
49
+ * @return {any}
50
+ */
51
+ #retry(call, options) {
52
+ return retry(async (retry) => {
53
+ const response = await call();
54
+ if (Math.floor(response.status / 100) !== 2)
55
+ return retry();
56
+ return response;
57
+ }, options);
58
+ }
59
+ }
60
+ /**
61
+ * @param {string} origin
62
+ * @param {string[]} substitutions
63
+ * @returns {string}
64
+ */
65
+ function substitute(origin, substitutions) {
66
+ const replace = () => substitutions.shift();
67
+ return origin.replace(PLACEHOLDER, replace);
68
+ }
69
+ /**
70
+ * @param {string} path
71
+ * @returns {boolean}
72
+ */
73
+ function isAbsoluteURL(path) {
74
+ return protocols.findIndex((protocol) => path.indexOf(protocol) === 0) !== -1;
75
+ }
76
+ const PLACEHOLDER = /\*/g;
77
+ function create(declaration) {
78
+ const permissions = new Permissions(declaration.properties);
79
+ return new Aspect(declaration.origins, permissions);
80
+ }
81
+ exports.create = create;
82
+ //# sourceMappingURL=aspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aspect.js","sourceRoot":"","sources":["../../../source/protocols/http/aspect.js"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export const id: "http";
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+ exports.id = 'http';
3
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../../source/protocols/http/id.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,CAAC,EAAE,GAAG,MAAM,CAAA"}
@@ -0,0 +1,4 @@
1
+ import protocols = require("./protocols");
2
+ import { id } from "./id";
3
+ import { create } from "./aspect";
4
+ export { protocols, id, create };
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+ const protocols = require('./protocols');
3
+ const { id } = require('./id');
4
+ const { create } = require('./aspect');
5
+ exports.protocols = protocols;
6
+ exports.id = id;
7
+ exports.create = create;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/protocols/http/index.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AACxC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAEtC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAA;AAC7B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;AACf,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _exports: string[];
2
+ export = _exports;
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+ module.exports = ['http:', 'https:'];
3
+ //# sourceMappingURL=protocols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocols.js","sourceRoot":"","sources":["../../../source/protocols/http/protocols.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { Declaration } from '../Factory';
2
+ import type { extensions } from '@toa.io/core';
3
+ export declare const protocols: Protocol[];
4
+ export interface Protocol {
5
+ id: ProtocolID;
6
+ protocols: string[];
7
+ create: (declaration: Declaration) => extensions.Aspect;
8
+ }
9
+ export type ProtocolID = 'http' | 'amqp' | 'pubsub';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.protocols = void 0;
7
+ const amqp_1 = __importDefault(require("./amqp"));
8
+ const http_1 = __importDefault(require("./http"));
9
+ const pubsub_1 = __importDefault(require("./pubsub"));
10
+ exports.protocols = [http_1.default, amqp_1.default, pubsub_1.default];
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/protocols/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AACzB,kDAAyB;AACzB,sDAA6B;AAIhB,QAAA,SAAS,GAAe,CAAC,cAAI,EAAE,cAAI,EAAE,gBAAM,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { Connector } from '@toa.io/core';
2
+ import { Topic } from './Topic';
3
+ import type { extensions } from '@toa.io/core';
4
+ import type { Declaration } from '../../Factory';
5
+ declare class Aspect extends Connector implements extensions.Aspect {
6
+ readonly name = "pubsub";
7
+ private readonly topics;
8
+ constructor(topics: Record<string, Topic>);
9
+ invoke(method: Method, topic: string, message: unknown): Promise<string>;
10
+ }
11
+ type Method = 'publish';
12
+ export declare function create(declaration: Declaration): Aspect;
13
+ export {};