@syncbridge/common 1.1.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/app-factory.d.ts +29 -0
  2. package/{processor-factory.js → app-factory.js} +64 -44
  3. package/app-factory.js.map +1 -0
  4. package/classes/{processor-base.d.ts → app-base.d.ts} +3 -3
  5. package/classes/app-base.js +11 -0
  6. package/classes/app-base.js.map +1 -0
  7. package/classes/base-element.d.ts +3 -0
  8. package/classes/base-element.js +2 -0
  9. package/classes/base-element.js.map +1 -1
  10. package/classes/component-base.d.ts +6 -6
  11. package/classes/component-base.js +2 -2
  12. package/classes/component-base.js.map +1 -1
  13. package/classes/log-channel-writer.d.ts +32 -0
  14. package/classes/log-channel-writer.js +97 -0
  15. package/classes/log-channel-writer.js.map +1 -0
  16. package/classes/runnable.d.ts +6 -0
  17. package/classes/runnable.js +22 -0
  18. package/classes/runnable.js.map +1 -1
  19. package/constants.d.ts +1 -1
  20. package/constants.js +1 -1
  21. package/decorators/app-events.decorator.d.ts +5 -0
  22. package/decorators/{processor-events.decorator.js → app-events.decorator.js} +1 -1
  23. package/decorators/app-events.decorator.js.map +1 -0
  24. package/decorators/app.decorator.d.ts +29 -0
  25. package/decorators/{processor.decorator.js → app.decorator.js} +25 -19
  26. package/decorators/app.decorator.js.map +1 -0
  27. package/decorators/component.decorator.js +13 -5
  28. package/decorators/component.decorator.js.map +1 -1
  29. package/decorators/define-variable.decorator.d.ts +6 -1
  30. package/decorators/define-variable.decorator.js +5 -1
  31. package/decorators/define-variable.decorator.js.map +1 -1
  32. package/decorators/log-channel.decorator.d.ts +97 -0
  33. package/decorators/log-channel.decorator.js +34 -0
  34. package/decorators/log-channel.decorator.js.map +1 -0
  35. package/decorators/use-component.decorator.d.ts +2 -2
  36. package/decorators/use-component.decorator.js +1 -1
  37. package/decorators/use-component.decorator.js.map +1 -1
  38. package/decorators/use-variables.decorator.d.ts +2 -2
  39. package/host-link/host-identity.d.ts +53 -0
  40. package/host-link/host-identity.js +140 -0
  41. package/host-link/host-identity.js.map +1 -0
  42. package/host-link/host-link.d.ts +43 -0
  43. package/host-link/host-link.js +54 -0
  44. package/host-link/host-link.js.map +1 -0
  45. package/host-link/host-packages.d.ts +25 -0
  46. package/host-link/host-packages.js +10 -0
  47. package/host-link/host-packages.js.map +1 -0
  48. package/host-link/host-workers.d.ts +75 -0
  49. package/host-link/host-workers.js +29 -0
  50. package/host-link/host-workers.js.map +1 -0
  51. package/host-link/multiplexer.d.ts +115 -0
  52. package/host-link/multiplexer.js +289 -0
  53. package/host-link/multiplexer.js.map +1 -0
  54. package/host-link/sealed-box.d.ts +21 -0
  55. package/host-link/sealed-box.js +104 -0
  56. package/host-link/sealed-box.js.map +1 -0
  57. package/index.d.ts +16 -3
  58. package/index.js +16 -3
  59. package/index.js.map +1 -1
  60. package/models/enums/enum-source.enum.d.ts +11 -0
  61. package/models/enums/enum-source.enum.js +22 -0
  62. package/models/enums/enum-source.enum.js.map +1 -0
  63. package/models/enums/log-channel-kind.d.ts +7 -0
  64. package/models/enums/log-channel-kind.js +14 -0
  65. package/models/enums/log-channel-kind.js.map +1 -0
  66. package/models/enums/service-status.d.ts +5 -1
  67. package/models/enums/service-status.js +4 -0
  68. package/models/enums/service-status.js.map +1 -1
  69. package/models/enums/worker-permission.enum.d.ts +16 -0
  70. package/models/enums/worker-permission.enum.js +28 -0
  71. package/models/enums/worker-permission.enum.js.map +1 -0
  72. package/models/index.d.ts +6 -1
  73. package/models/index.js +6 -1
  74. package/models/index.js.map +1 -1
  75. package/models/metadata/app-metadata.d.ts +6 -0
  76. package/models/metadata/{processor-metadata.js → app-metadata.js} +7 -7
  77. package/models/metadata/app-metadata.js.map +1 -0
  78. package/models/metadata/element-component-metadata.d.ts +2 -0
  79. package/models/metadata/element-component-metadata.js +10 -2
  80. package/models/metadata/element-component-metadata.js.map +1 -1
  81. package/models/metadata/element-metadata.d.ts +8 -0
  82. package/models/metadata/element-metadata.js +40 -0
  83. package/models/metadata/element-metadata.js.map +1 -1
  84. package/models/metadata/log-channel-metadata.d.ts +23 -0
  85. package/models/metadata/log-channel-metadata.js +73 -0
  86. package/models/metadata/log-channel-metadata.js.map +1 -0
  87. package/models/metadata/plugin-metadata.d.ts +15 -0
  88. package/models/metadata/plugin-metadata.js +66 -0
  89. package/models/metadata/plugin-metadata.js.map +1 -0
  90. package/models/metadata/variable-metadata.d.ts +3 -0
  91. package/models/metadata/variable-metadata.js +15 -1
  92. package/models/metadata/variable-metadata.js.map +1 -1
  93. package/models/profile/log-options.d.ts +17 -0
  94. package/models/profile/log-options.js +58 -1
  95. package/models/profile/log-options.js.map +1 -1
  96. package/models/profile/profile.d.ts +2 -2
  97. package/models/profile/profile.js +9 -9
  98. package/models/profile/profile.js.map +1 -1
  99. package/package.json +2 -2
  100. package/registry/docs-sidebar.d.ts +59 -0
  101. package/registry/docs-sidebar.js +170 -0
  102. package/registry/docs-sidebar.js.map +1 -0
  103. package/registry/extension-package.d.ts +40 -15
  104. package/registry/extension-package.js +59 -20
  105. package/registry/extension-package.js.map +1 -1
  106. package/registry/extension-registry.d.ts +16 -16
  107. package/registry/extension-registry.js +59 -44
  108. package/registry/extension-registry.js.map +1 -1
  109. package/registry/module-catalog.d.ts +31 -0
  110. package/registry/module-catalog.js +89 -0
  111. package/registry/module-catalog.js.map +1 -0
  112. package/registry/package-docs.d.ts +98 -0
  113. package/registry/package-docs.js +160 -0
  114. package/registry/package-docs.js.map +1 -0
  115. package/registry/package-manifest.d.ts +52 -24
  116. package/registry/package-manifest.js +53 -21
  117. package/registry/package-manifest.js.map +1 -1
  118. package/utils/decode-profile.d.ts +18 -2
  119. package/utils/decode-profile.js +65 -9
  120. package/utils/decode-profile.js.map +1 -1
  121. package/utils/encrypt-helpers.d.ts +7 -0
  122. package/utils/encrypt-helpers.js +12 -5
  123. package/utils/encrypt-helpers.js.map +1 -1
  124. package/utils/materialize-metadata.d.ts +3 -3
  125. package/utils/materialize-metadata.js +16 -12
  126. package/utils/materialize-metadata.js.map +1 -1
  127. package/utils/normalize-metadata.d.ts +23 -4
  128. package/utils/normalize-metadata.js +52 -6
  129. package/utils/normalize-metadata.js.map +1 -1
  130. package/utils/type-guards.d.ts +2 -2
  131. package/utils/type-guards.js +4 -4
  132. package/utils/type-guards.js.map +1 -1
  133. package/utils/worker-permissions.d.ts +25 -0
  134. package/utils/worker-permissions.js +60 -0
  135. package/utils/worker-permissions.js.map +1 -0
  136. package/classes/processor-base.js +0 -11
  137. package/classes/processor-base.js.map +0 -1
  138. package/decorators/processor-events.decorator.d.ts +0 -5
  139. package/decorators/processor-events.decorator.js.map +0 -1
  140. package/decorators/processor.decorator.d.ts +0 -29
  141. package/decorators/processor.decorator.js.map +0 -1
  142. package/models/metadata/processor-metadata.d.ts +0 -6
  143. package/models/metadata/processor-metadata.js.map +0 -1
  144. package/processor-factory.d.ts +0 -26
  145. package/processor-factory.js.map +0 -1
package/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- export const version = '1.1.3';
1
+ export const version = '2.0.0';
2
2
  export const CLASS_METADATA = Symbol.for('CLASS_METADATA');
3
3
  export const CLASS_TYPE = Symbol.for('CLASS_TYPE');
4
4
  export const VARIABLE_CONTAINER = Symbol.for('VARIABLE_CONTAINER');
@@ -0,0 +1,5 @@
1
+ import 'reflect-metadata';
2
+ import type { Type } from 'ts-gems';
3
+ import type { AppBase } from '../classes/app-base.js';
4
+ export declare function OnCreateProfile<T extends Type<AppBase>>(): (target: T, propertyKey: string | symbol) => void;
5
+ export declare function OnUpdateProfile<T extends Type<AppBase>>(): (target: T, propertyKey: string | symbol) => void;
@@ -19,4 +19,4 @@ export function OnUpdateProfile() {
19
19
  });
20
20
  };
21
21
  }
22
- //# sourceMappingURL=processor-events.decorator.js.map
22
+ //# sourceMappingURL=app-events.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-events.decorator.js","sourceRoot":"","sources":["../../src/decorators/app-events.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,MAAS,EAAE,WAA4B;QACtD,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE;YACxC,YAAY,EAAE;gBACZ,eAAe,EAAE,WAAW;aAC7B;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,MAAS,EAAE,WAA4B;QACtD,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE;YACxC,YAAY,EAAE;gBACZ,eAAe,EAAE,WAAW;aAC7B;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import 'reflect-metadata';
2
+ import type { DeepPartial, StrictOmit, Type } from 'ts-gems';
3
+ import type { AppBase } from '../classes/app-base.js';
4
+ import { AppMetadata } from '../models/index.js';
5
+ import { UseComponent as _UseComponent } from './use-component.decorator.js';
6
+ export declare function App<T extends AppBase>(options?: App.Options): (target: Type<T>) => void;
7
+ export declare namespace App {
8
+ /**
9
+ *
10
+ */
11
+ function UseVariables<T extends AppBase>(variablesClass?: Type): (target: T, propertyKey: "values") => void;
12
+ /**
13
+ *
14
+ */
15
+ function UseComponent<T extends AppBase>(options?: _UseComponent.Options): (target: T, propertyKey: string | symbol) => void;
16
+ /**
17
+ *
18
+ */
19
+ function OnCreateProfile<T extends AppBase>(): (target: Type<T>, propertyKey: string | symbol) => void;
20
+ /**
21
+ *
22
+ */
23
+ function OnUpdateProfile<T extends AppBase>(): (target: Type<T>, propertyKey: string | symbol) => void;
24
+ }
25
+ export declare namespace App {
26
+ type Options = DeepPartial<StrictOmit<AppMetadata, 'uri' | 'classType' | 'className' | 'components' | 'variables' | 'version'>> & {
27
+ className?: string;
28
+ };
29
+ }
@@ -3,28 +3,30 @@ import path from 'node:path';
3
3
  import { omit } from '@jsopen/objects';
4
4
  import callerCallsite from 'caller-callsite';
5
5
  import { CLASS_METADATA, CLASS_TYPE } from '../constants.js';
6
- import { ProcessorMetadata } from '../models/index.js';
7
- import { resolvePackageJson } from '../utils/locate-package-json.js';
6
+ import { AppMetadata } from '../models/index.js';
7
+ import { readExtensionManifest } from '../registry/package-manifest.js';
8
+ import { locatePackageJson, resolvePackageJson, } from '../utils/locate-package-json.js';
9
+ import { OnCreateProfile as _OnCreateProfile, OnUpdateProfile as _OnUpdateProfile, } from './app-events.decorator.js';
8
10
  import { defineOwnMetadata } from './decorator-helpers.js';
9
- import { OnCreateProfile as _OnCreateProfile, OnUpdateProfile as _OnUpdateProfile, } from './processor-events.decorator.js';
10
11
  import { UseComponent as _UseComponent } from './use-component.decorator.js';
11
12
  import { UseVariables as _UseVariables } from './use-variables.decorator.js';
12
- const NAME_PATTERN = /^([A-Z][A-Za-z0-9_]*)(Processor)?$/;
13
- export function Processor(options) {
13
+ const NAME_PATTERN = /^([A-Z][A-Za-z0-9_]*)(App)?$/;
14
+ export function App(options) {
14
15
  const callerFile = callerCallsite()?.getFileName();
15
- const pkgjson = callerFile && resolvePackageJson(path.dirname(callerFile));
16
+ const pkgDir = callerFile && locatePackageJson(path.dirname(callerFile));
17
+ const pkgjson = pkgDir && resolvePackageJson(pkgDir);
16
18
  if (!pkgjson)
17
19
  throw new Error('Could not find package.json');
18
20
  return function (target) {
19
21
  const classType = Reflect.getMetadata(CLASS_TYPE, target);
20
- if (classType && classType !== 'processor')
22
+ if (classType && classType !== 'app')
21
23
  throw new TypeError(`${target.name} already decorated as "${classType}"`);
22
24
  /** Determine class name */
23
25
  let className = options?.className;
24
26
  if (!className) {
25
27
  const m = NAME_PATTERN.exec(target.name);
26
28
  if (!m)
27
- throw new TypeError('Class name must be PascalCase and should contains only letters and numbers. Example: MyProcessor ');
29
+ throw new TypeError('Class name must be PascalCase and should contains only letters and numbers. Example: MyApp ');
28
30
  if (m)
29
31
  className = m[1];
30
32
  }
@@ -32,11 +34,11 @@ export function Processor(options) {
32
34
  if (!className)
33
35
  throw new TypeError('Class name is required');
34
36
  /** Determine uri */
35
- Reflect.defineMetadata(CLASS_TYPE, 'processor', target);
36
- const packageName = pkgjson.syncbridge?.name || pkgjson.name;
37
+ Reflect.defineMetadata(CLASS_TYPE, 'app', target);
38
+ const packageName = readExtensionManifest(pkgDir, pkgjson)?.manifest.name || pkgjson.name;
37
39
  const uri = packageName + ':' + className;
38
- defineOwnMetadata(target, CLASS_METADATA, {
39
- classType: 'processor',
40
+ const metadata = defineOwnMetadata(target, CLASS_METADATA, {
41
+ classType: 'app',
40
42
  uri,
41
43
  className,
42
44
  displayName: className,
@@ -51,39 +53,43 @@ export function Processor(options) {
51
53
  'version',
52
54
  ]),
53
55
  });
56
+ /* What its base reaches, it reaches too */
57
+ const baseMetadata = Reflect.getMetadata(CLASS_METADATA, Object.getPrototypeOf(target));
58
+ if (baseMetadata?.permissions?.length)
59
+ metadata.permissions = Array.from(new Set([...baseMetadata.permissions, ...(metadata.permissions || [])]));
54
60
  target.uri = uri;
55
61
  target.packageName = packageName;
56
62
  target.className = className;
57
63
  };
58
64
  }
59
- (function (Processor) {
65
+ (function (App) {
60
66
  /**
61
67
  *
62
68
  */
63
69
  function UseVariables(variablesClass) {
64
70
  return _UseVariables(variablesClass);
65
71
  }
66
- Processor.UseVariables = UseVariables;
72
+ App.UseVariables = UseVariables;
67
73
  /**
68
74
  *
69
75
  */
70
76
  function UseComponent(options) {
71
77
  return _UseComponent(options);
72
78
  }
73
- Processor.UseComponent = UseComponent;
79
+ App.UseComponent = UseComponent;
74
80
  /**
75
81
  *
76
82
  */
77
83
  function OnCreateProfile() {
78
84
  return _OnCreateProfile();
79
85
  }
80
- Processor.OnCreateProfile = OnCreateProfile;
86
+ App.OnCreateProfile = OnCreateProfile;
81
87
  /**
82
88
  *
83
89
  */
84
90
  function OnUpdateProfile() {
85
91
  return _OnUpdateProfile();
86
92
  }
87
- Processor.OnUpdateProfile = OnUpdateProfile;
88
- })(Processor || (Processor = {}));
89
- //# sourceMappingURL=processor.decorator.js.map
93
+ App.OnUpdateProfile = OnUpdateProfile;
94
+ })(App || (App = {}));
95
+ //# sourceMappingURL=app.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.decorator.js","sourceRoot":"","sources":["../../src/decorators/app.decorator.ts"],"names":[],"mappings":"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"}
@@ -5,14 +5,16 @@ import callerCallsite from 'caller-callsite';
5
5
  import { ComponentBase } from '../classes/component-base.js';
6
6
  import { CLASS_METADATA, CLASS_TYPE } from '../constants.js';
7
7
  import { ComponentMetadata } from '../models/index.js';
8
- import { resolvePackageJson } from '../utils/locate-package-json.js';
8
+ import { readExtensionManifest } from '../registry/package-manifest.js';
9
+ import { locatePackageJson, resolvePackageJson, } from '../utils/locate-package-json.js';
9
10
  import { defineOwnMetadata } from './decorator-helpers.js';
10
11
  import { UseComponent as _UseComponent } from './use-component.decorator.js';
11
12
  import { UseVariables as _UseVariables } from './use-variables.decorator.js';
12
13
  const NAME_PATTERN = /^([A-Z][A-Za-z0-9_]*?)(Component)?$/;
13
14
  export function Component(options) {
14
15
  const callerFile = callerCallsite()?.getFileName();
15
- const pkgjson = callerFile && resolvePackageJson(path.dirname(callerFile));
16
+ const pkgDir = callerFile && locatePackageJson(path.dirname(callerFile));
17
+ const pkgjson = pkgDir && resolvePackageJson(pkgDir);
16
18
  if (!pkgjson)
17
19
  throw new Error('Could not find package.json');
18
20
  return function (target) {
@@ -24,7 +26,7 @@ export function Component(options) {
24
26
  if (!className) {
25
27
  const m = NAME_PATTERN.exec(target.name);
26
28
  if (!m)
27
- throw new TypeError('Class name must be PascalCase and should contains only letters and numbers. Example: MyProcessor ');
29
+ throw new TypeError('Class name must be PascalCase and should contains only letters and numbers. Example: MyApp ');
28
30
  if (m)
29
31
  className = m[1];
30
32
  }
@@ -33,9 +35,9 @@ export function Component(options) {
33
35
  throw new TypeError('Class name is required');
34
36
  /** Determine uri */
35
37
  Reflect.defineMetadata(CLASS_TYPE, 'component', target);
36
- /* As in @Processor: a package published under another name (the npm
38
+ /* As in @App: a package published under another name (the npm
37
39
  * mirror's @sbext/vendor__name) keeps its registry name here */
38
- const packageName = pkgjson.syncbridge?.name || pkgjson.name;
40
+ const packageName = readExtensionManifest(pkgDir, pkgjson)?.manifest.name || pkgjson.name;
39
41
  const uri = packageName + ':' + className;
40
42
  const metadata = defineOwnMetadata(target, CLASS_METADATA, {
41
43
  classType: 'component',
@@ -57,6 +59,12 @@ export function Component(options) {
57
59
  const baseMetadata = Reflect.getMetadata(CLASS_METADATA, base);
58
60
  if (baseMetadata) {
59
61
  metadata.interfaces = Array.from(new Set([...(baseMetadata?.interfaces || []), base.uri]));
62
+ /* What its base reaches, it reaches too */
63
+ if (baseMetadata.permissions?.length)
64
+ metadata.permissions = Array.from(new Set([
65
+ ...baseMetadata.permissions,
66
+ ...(metadata.permissions || []),
67
+ ]));
60
68
  }
61
69
  target.uri = uri;
62
70
  target.packageName = packageName;
@@ -1 +1 @@
1
- {"version":3,"file":"component.decorator.js","sourceRoot":"","sources":["../../src/decorators/component.decorator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component.decorator.js","sourceRoot":"","sources":["../../src/decorators/component.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7E,MAAM,YAAY,GAAG,qCAAqC,CAAC;AAE3D,MAAM,UAAU,SAAS,CAA0B,OAA0B;IAC3E,MAAM,UAAU,GAAG,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,UAAU,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAE7D,OAAO,UAAU,MAAe;QAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,SAAS,IAAI,SAAS,KAAK,WAAW;YACxC,MAAM,IAAI,SAAS,CAAC,GAAG,MAAM,CAAC,IAAI,0BAA0B,SAAS,GAAG,CAAC,CAAC;QAE5E,2BAA2B;QAC3B,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAE,MAA8B,CAAC,IAAI,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC;gBACJ,MAAM,IAAI,SAAS,CACjB,6FAA6F,CAC9F,CAAC;YACJ,IAAI,CAAC;gBAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,oBAAoB;QACpB,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAE9D,oBAAoB;QACpB,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACxD;wEACgE;QAChE,MAAM,WAAW,GACf,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;QACxE,MAAM,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,SAAS,CAAC;QAC1C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE;YACzD,SAAS,EAAE,WAAW;YACtB,GAAG;YACH,SAAS;YACT,WAAW,EAAE,SAAS;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ;YAC5B,GAAG,IAAI,CAAC,OAAc,EAAE;gBACtB,KAAK;gBACL,WAAW;gBACX,WAAW;gBACX,YAAY;gBACZ,WAAW;gBACX,SAAS;aACV,CAAC;SACH,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAC9B,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CACzD,CAAC;YACF,2CAA2C;YAC3C,IAAI,YAAY,CAAC,WAAW,EAAE,MAAM;gBAClC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAC/B,IAAI,GAAG,CAAC;oBACN,GAAG,YAAY,CAAC,WAAW;oBAC3B,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;iBAChC,CAAC,CACH,CAAC;QACN,CAAC;QAEA,MAAc,CAAC,GAAG,GAAG,GAAG,CAAC;QACzB,MAAc,CAAC,WAAW,GAAG,WAAW,CAAC;QACzC,MAAc,CAAC,SAAS,GAAG,SAAS,CAAC;QACrC,MAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU;YAC9C,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC;YAC1B,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED,WAAiB,SAAS;IAUxB,SAAgB,YAAY,CAA0B,cAAqB;QACzE,OAAO,aAAa,CAAI,cAAc,CAAC,CAAC;IAC1C,CAAC;IAFe,sBAAY,eAE3B,CAAA;IAED,SAAgB,YAAY,CAC1B,OAA+B;QAE/B,OAAO,aAAa,CAAI,OAAO,CAAC,CAAC;IACnC,CAAC;IAJe,sBAAY,eAI3B,CAAA;AACH,CAAC,EAnBgB,SAAS,KAAT,SAAS,QAmBzB"}
@@ -7,7 +7,12 @@ type TVariable = DeepPartial<VariableMetadataRecord> | Type;
7
7
  export declare namespace DefineVariable {
8
8
  interface Options extends Partial<StrictOmit<VariableMetadata, 'variables' | 'enumValues' | 'choice'>> {
9
9
  variables?: TVariable | Promise<TVariable>;
10
- enumValues?: TEnumValue | Promise<TEnumValue>;
10
+ /**
11
+ * Values known when the module is written. Ones that depend on the
12
+ * server - its serial ports, its addresses - are an `enumSource`: a
13
+ * module computes nothing at its import
14
+ */
15
+ enumValues?: TEnumValue;
11
16
  choice?: string[] | Promise<string[]>;
12
17
  index?: number;
13
18
  }
@@ -24,13 +24,17 @@ export function DefineVariable(options = {}) {
24
24
  metadata.type = VariableType.Nested;
25
25
  metadata.variables = Reflect.getMetadata(VARIABLE_CONTAINER, options.variables.prototype);
26
26
  }
27
- if (metadata.enumValues && !metadata.type) {
27
+ if ((metadata.enumValues || metadata.enumSource) && !metadata.type) {
28
28
  metadata.type = VariableType.Enum;
29
29
  }
30
30
  if (metadata.type !== VariableType.Enum) {
31
31
  delete metadata.enumValues;
32
+ delete metadata.enumSource;
32
33
  delete metadata.enumStrict;
33
34
  }
35
+ /* A server's list: what was seen when it was read, a suggestion */
36
+ if (metadata.enumSource && metadata.enumStrict === undefined)
37
+ metadata.enumStrict = false;
34
38
  if (!metadata.type) {
35
39
  if (designType === String)
36
40
  metadata.type = VariableType.String;
@@ -1 +1 @@
1
- {"version":3,"file":"define-variable.decorator.js","sourceRoot":"","sources":["../../src/decorators/define-variable.decorator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define-variable.decorator.js","sourceRoot":"","sources":["../../src/decorators/define-variable.decorator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import 'reflect-metadata';
2
+ import type { AppBase } from '../classes/app-base.js';
3
+ import type { ComponentBase } from '../classes/component-base.js';
4
+ import { type LogChannelKind, type LogLevel } from '../models/index.js';
5
+ /**
6
+ * Defines a log channel of an app or component, assigned to the
7
+ * decorated property, which is declared `declare readonly` so a class
8
+ * field does not overwrite it:
9
+ *
10
+ * ```ts
11
+ * @LogChannel({ name: 'communication', kind: 'transmit' })
12
+ * declare readonly ioLogChannel: LogChannel;
13
+ * ```
14
+ *
15
+ * The channel's name defaults to the property's. Records and settings are
16
+ * keyed by the name, so a channel whose property may be renamed is given
17
+ * one. Subclasses inherit the channel.
18
+ */
19
+ export declare function LogChannel(options?: LogChannel.Options): (target: AppBase | ComponentBase, propertyKey: any) => void;
20
+ /**
21
+ * A log channel: what a `@LogChannel` property holds
22
+ */
23
+ export interface LogChannel {
24
+ /** The name within its element */
25
+ readonly name: string;
26
+ /** The element's path and the name: `deviceIo/communication` */
27
+ readonly fullName: string;
28
+ readonly kind: LogChannelKind;
29
+ /** Whether records are written; a disabled channel drops them at once */
30
+ readonly enabled: boolean;
31
+ write(record: LogChannel.Record): void;
32
+ fatal(message: string, fields?: Record<string, any>): void;
33
+ error(message: string, fields?: Record<string, any>): void;
34
+ warn(message: string, fields?: Record<string, any>): void;
35
+ info(message: string, fields?: Record<string, any>): void;
36
+ verbose(message: string, fields?: Record<string, any>): void;
37
+ debug(message: string, fields?: Record<string, any>): void;
38
+ trace(message: string, fields?: Record<string, any>): void;
39
+ }
40
+ export declare namespace LogChannel {
41
+ interface Options {
42
+ /** Default: the property's name */
43
+ name?: string;
44
+ title?: string;
45
+ description?: string;
46
+ /** Default: `text` */
47
+ kind?: LogChannelKind | `${LogChannelKind}`;
48
+ /** Default level threshold of a text channel */
49
+ level?: LogLevel | `${LogLevel}`;
50
+ /** Default days the records are kept */
51
+ retentionDays?: number;
52
+ /** Default: true */
53
+ enabled?: boolean;
54
+ /**
55
+ * The events its records are of, which a profile may pick some of
56
+ * (settings `events`): `read` and `write` for the data received and
57
+ * sent, `connect`, `disconnect`, or the element's own
58
+ */
59
+ events?: string[];
60
+ }
61
+ /** A record written to a channel */
62
+ interface Record {
63
+ level?: LogLevel | `${LogLevel}`;
64
+ message?: string;
65
+ /** Of a transmit channel: received, sent, or a note */
66
+ direction?: 'in' | 'out' | 'info';
67
+ /**
68
+ * What happened, as a profile picks the records by (settings
69
+ * `events`): `connect`, `disconnect`, or the element's own. Data
70
+ * received is `read` and sent `write` without it being given.
71
+ */
72
+ event?: string;
73
+ /**
74
+ * A short note on the record, shown and searched with it: e.g. the
75
+ * other side of a transmission, `10.0.0.5:2575`, `/dev/ttyUSB0`
76
+ */
77
+ details?: string;
78
+ /** Raw content */
79
+ data?: Uint8Array | string;
80
+ /** Fields of the channel's own */
81
+ fields?: {
82
+ [key: string]: any;
83
+ };
84
+ }
85
+ /** A record as a channel hands it on */
86
+ interface Entry extends Record {
87
+ /** When it was written: a record's only time */
88
+ time: Date;
89
+ /** The path of the element that wrote it; '' for the app */
90
+ source: string;
91
+ }
92
+ /**
93
+ * Where a worker's channels hand their records: the channel's full name
94
+ * and the record
95
+ */
96
+ type Sink = (channel: string, entry: Entry) => void;
97
+ }
@@ -0,0 +1,34 @@
1
+ import 'reflect-metadata';
2
+ import { CLASS_METADATA } from '../constants.js';
3
+ import { LogChannelMetadata, } from '../models/index.js';
4
+ import { defineOwnMetadata } from './decorator-helpers.js';
5
+ /**
6
+ * Defines a log channel of an app or component, assigned to the
7
+ * decorated property, which is declared `declare readonly` so a class
8
+ * field does not overwrite it:
9
+ *
10
+ * ```ts
11
+ * @LogChannel({ name: 'communication', kind: 'transmit' })
12
+ * declare readonly ioLogChannel: LogChannel;
13
+ * ```
14
+ *
15
+ * The channel's name defaults to the property's. Records and settings are
16
+ * keyed by the name, so a channel whose property may be renamed is given
17
+ * one. Subclasses inherit the channel.
18
+ */
19
+ export function LogChannel(options = {}) {
20
+ return function (target, propertyKey) {
21
+ if (typeof propertyKey !== 'string')
22
+ throw new TypeError('Property key must be a string');
23
+ const name = options.name || propertyKey;
24
+ const metadata = defineOwnMetadata(target.constructor, CLASS_METADATA);
25
+ metadata.logChannels = metadata.logChannels || {};
26
+ metadata.logChannels[name] = new LogChannelMetadata({
27
+ ...options,
28
+ kind: (options.kind || 'text'),
29
+ name,
30
+ propertyKey,
31
+ });
32
+ };
33
+ }
34
+ //# sourceMappingURL=log-channel.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-channel.decorator.js","sourceRoot":"","sources":["../../src/decorators/log-channel.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAEL,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,UAA8B,EAAE;IACzD,OAAO,UAAU,MAA+B,EAAE,WAAgB;QAChE,IAAI,OAAO,WAAW,KAAK,QAAQ;YACjC,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QACzC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACvE,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;QAClD,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,kBAAkB,CAAC;YAClD,GAAI,OAAuC;YAC3C,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAmB;YAChD,IAAI;YACJ,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import 'reflect-metadata';
2
2
  import type { StrictOmit } from 'ts-gems';
3
+ import { AppBase } from '../classes/app-base.js';
3
4
  import { ComponentBase } from '../classes/component-base.js';
4
- import { ProcessorBase } from '../classes/processor-base.js';
5
5
  import { ElementComponentMetadata } from '../models/index.js';
6
- export declare function UseComponent<T extends ProcessorBase | ComponentBase>(options?: UseComponent.Options): (target: T, propertyKey: string | symbol) => void;
6
+ export declare function UseComponent<T extends AppBase | ComponentBase>(options?: UseComponent.Options): (target: T, propertyKey: string | symbol) => void;
7
7
  export declare namespace UseComponent {
8
8
  interface Options extends Partial<StrictOmit<ElementComponentMetadata, 'classUri' | 'interfaceUri'>> {
9
9
  uri?: string;
@@ -1,7 +1,7 @@
1
1
  import 'reflect-metadata';
2
2
  import { omit } from '@jsopen/objects';
3
+ import { AppBase } from '../classes/app-base.js';
3
4
  import { ComponentBase } from '../classes/component-base.js';
4
- import { ProcessorBase } from '../classes/processor-base.js';
5
5
  import { CLASS_METADATA } from '../constants.js';
6
6
  import { ElementComponentMetadata } from '../models/index.js';
7
7
  import { defineOwnMetadata } from './decorator-helpers.js';
@@ -1 +1 @@
1
- {"version":3,"file":"use-component.decorator.js","sourceRoot":"","sources":["../../src/decorators/use-component.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,YAAY,CAC1B,UAAgC,EAAE;IAElC,OAAO,UAAU,MAAS,EAAE,WAA4B;QACtD,qBAAqB;QACrB,IAAI,OAAO,WAAW,KAAK,QAAQ;YACjC,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAEvD,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CACpC,aAAa,EACb,MAAM,EACN,WAAW,CACZ,CAAC;YACF,IAAI,OAAO,UAAU,KAAK,UAAU,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACvD,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACvE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG;YACjC,YAAY,EAAE,GAAG;YACjB,GAAG,IAAI,CAAC,OAAc,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACrD,WAAW;SACZ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"use-component.decorator.js","sourceRoot":"","sources":["../../src/decorators/use-component.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,YAAY,CAC1B,UAAgC,EAAE;IAElC,OAAO,UAAU,MAAS,EAAE,WAA4B;QACtD,qBAAqB;QACrB,IAAI,OAAO,WAAW,KAAK,QAAQ;YACjC,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAEvD,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CACpC,aAAa,EACb,MAAM,EACN,WAAW,CACZ,CAAC;YACF,IAAI,OAAO,UAAU,KAAK,UAAU,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACvD,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACvE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG;YACjC,YAAY,EAAE,GAAG;YACjB,GAAG,IAAI,CAAC,OAAc,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACrD,WAAW;SACZ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import 'reflect-metadata';
2
2
  import type { Type } from 'ts-gems';
3
+ import type { AppBase } from '../classes/app-base.js';
3
4
  import type { ComponentBase } from '../classes/component-base.js';
4
- import type { ProcessorBase } from '../classes/processor-base.js';
5
- export declare function UseVariables<T extends ProcessorBase | ComponentBase>(variablesClass?: Type): (target: T, propertyKey: "values") => void;
5
+ export declare function UseVariables<T extends AppBase | ComponentBase>(variablesClass?: Type): (target: T, propertyKey: "values") => void;
@@ -0,0 +1,53 @@
1
+ /** Where a host pairs with Console, by a code: on its API's port */
2
+ export declare const HOST_PAIR_PATH = "/hosts/pair";
3
+ /**
4
+ * The header a host's token for Console's APIs comes in: a bearer token
5
+ * is a user's, there
6
+ */
7
+ export declare const HOST_TOKEN_HEADER = "x-sb-host-token";
8
+ /** What a token is for: the link (taken once), or Console's other APIs */
9
+ export type HostTokenAudience = 'link' | 'api';
10
+ /** The longest a token is taken for, by what it is for */
11
+ export declare const HOST_TOKEN_MAX_SECONDS: Record<HostTokenAudience, number>;
12
+ /** What a host's token says: who it is, for what, from when until when */
13
+ export interface HostTokenPayload {
14
+ /** The host's id */
15
+ h: string;
16
+ /** What it is for */
17
+ a: HostTokenAudience;
18
+ /** Made at, and ends at: seconds */
19
+ iat: number;
20
+ exp: number;
21
+ /** A word of its own: a link's token is taken once */
22
+ n: string;
23
+ }
24
+ /** A key pair for a host: its public key told, its private key kept */
25
+ export declare function generateHostKeys(): {
26
+ publicKey: string;
27
+ privateKey: string;
28
+ };
29
+ /** A public key, as sent: an Ed25519 key's SPKI, base64; undefined if not */
30
+ export declare function readHostPublicKey(value: string): Buffer | undefined;
31
+ /** A public key's fingerprint, to compare by eye: SHA256:<base64> */
32
+ export declare function hostKeyFingerprint(publicKey: string): string;
33
+ /** A token of the host's, signed with its private key */
34
+ export declare function signHostToken(privateKey: string, input: {
35
+ hostId: string;
36
+ audience: HostTokenAudience;
37
+ seconds?: number;
38
+ }): string;
39
+ /** What a token says, not checked yet: whose it is, to find its key */
40
+ export declare function readHostToken(token: string): HostTokenPayload | undefined;
41
+ /**
42
+ * What a token says, if it is signed with the host's key, for this, now:
43
+ * not ended, not made later than now (a minute's clock skew taken), and
44
+ * not lasting longer than its kind may
45
+ */
46
+ export declare function verifyHostToken(token: string, publicKey: string, audience: HostTokenAudience): HostTokenPayload | undefined;
47
+ /** A new pairing code: 8 letters, as XXXX-XXXX (40 bits) */
48
+ export declare function generatePairingCode(): string;
49
+ /**
50
+ * A pairing code as typed, taken as given: upper case, spaces and dashes
51
+ * left out; undefined if not a code
52
+ */
53
+ export declare function normalizePairingCode(input: string): string | undefined;