@routr/common 2.0.8-alpha.9 → 2.0.9

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 (103) hide show
  1. package/dist/assertions.js +2 -2
  2. package/dist/auth.d.ts +18 -11
  3. package/dist/auth.js +34 -12
  4. package/dist/connect/api/client.d.ts +3 -0
  5. package/dist/connect/api/client.js +158 -0
  6. package/dist/connect/api/index.d.ts +2 -0
  7. package/dist/connect/api/index.js +36 -0
  8. package/dist/connect/api/types.d.ts +51 -0
  9. package/dist/connect/api/types.js +2 -0
  10. package/dist/connect/assertions.d.ts +37 -0
  11. package/dist/connect/assertions.js +112 -0
  12. package/dist/connect/client.d.ts +8 -0
  13. package/dist/connect/client.js +94 -0
  14. package/dist/connect/config.d.ts +113 -0
  15. package/dist/connect/config.js +2 -0
  16. package/dist/connect/connect_error.d.ts +21 -0
  17. package/dist/connect/connect_error.js +44 -0
  18. package/dist/connect/index.d.ts +7 -2
  19. package/dist/connect/index.js +8 -3
  20. package/dist/connect/mappers/acl.d.ts +3 -0
  21. package/dist/connect/mappers/acl.js +19 -0
  22. package/dist/connect/mappers/agent.d.ts +3 -0
  23. package/dist/connect/mappers/agent.js +42 -0
  24. package/dist/connect/mappers/assertions.d.ts +3 -0
  25. package/dist/connect/mappers/assertions.js +43 -0
  26. package/dist/connect/mappers/credentials.d.ts +3 -0
  27. package/dist/connect/mappers/credentials.js +18 -0
  28. package/dist/connect/mappers/domain.d.ts +3 -0
  29. package/dist/connect/mappers/domain.js +19 -0
  30. package/dist/connect/mappers/index.d.ts +7 -0
  31. package/dist/connect/mappers/index.js +41 -0
  32. package/dist/connect/mappers/number.d.ts +3 -0
  33. package/dist/connect/mappers/number.js +26 -0
  34. package/dist/connect/mappers/peer.d.ts +3 -0
  35. package/dist/connect/mappers/peer.js +26 -0
  36. package/dist/connect/mappers/trunk.d.ts +3 -0
  37. package/dist/connect/mappers/trunk.js +34 -0
  38. package/dist/connect/protos/acl.proto +112 -0
  39. package/dist/connect/protos/agents.proto +153 -0
  40. package/dist/connect/protos/credentials.proto +114 -0
  41. package/dist/connect/protos/domains.proto +146 -0
  42. package/dist/connect/protos/numbers.proto +166 -0
  43. package/dist/connect/protos/peers.proto +174 -0
  44. package/dist/connect/protos/trunks.proto +178 -0
  45. package/dist/connect/schemas/acl.d.ts +66 -0
  46. package/dist/connect/schemas/acl.js +85 -0
  47. package/dist/connect/schemas/agent.d.ts +61 -0
  48. package/dist/connect/schemas/agent.js +80 -0
  49. package/dist/connect/schemas/crendentials.d.ts +59 -0
  50. package/dist/connect/schemas/crendentials.js +78 -0
  51. package/dist/connect/schemas/domain.d.ts +72 -0
  52. package/dist/connect/schemas/domain.js +91 -0
  53. package/dist/connect/schemas/index.d.ts +1 -0
  54. package/dist/connect/schemas/index.js +35 -0
  55. package/dist/connect/schemas/number.d.ts +81 -0
  56. package/dist/connect/schemas/number.js +100 -0
  57. package/dist/connect/schemas/peer.d.ts +84 -0
  58. package/dist/connect/schemas/peer.js +103 -0
  59. package/dist/connect/schemas/trunk.d.ts +125 -0
  60. package/dist/connect/schemas/trunk.js +157 -0
  61. package/dist/connect/schemas/validators.d.ts +2 -0
  62. package/dist/connect/schemas/validators.js +43 -0
  63. package/dist/connect/types.d.ts +89 -23
  64. package/dist/connect/types.js +7 -29
  65. package/dist/connect/validations.d.ts +43 -0
  66. package/dist/connect/validations.js +272 -0
  67. package/dist/envs.d.ts +2 -0
  68. package/dist/envs.js +23 -0
  69. package/dist/errors.d.ts +35 -1
  70. package/dist/errors.js +52 -6
  71. package/dist/healthcheck.d.ts +1 -0
  72. package/dist/healthcheck.js +24 -0
  73. package/dist/helper.d.ts +13 -0
  74. package/dist/helper.js +78 -4
  75. package/dist/index.d.ts +8 -4
  76. package/dist/index.js +9 -6
  77. package/dist/ip_utils.js +1 -1
  78. package/dist/protos/common.proto +2 -4
  79. package/dist/protos/location.proto +21 -8
  80. package/dist/protos/processor.proto +8 -6
  81. package/dist/protos/requester.proto +6 -6
  82. package/dist/protos/sipmessage.proto +9 -2
  83. package/dist/protos/verifier.proto +39 -0
  84. package/dist/requester/grpc_client.js +1 -1
  85. package/dist/requester/index.js +1 -1
  86. package/dist/service.d.ts +2 -2
  87. package/dist/service.js +27 -5
  88. package/dist/tracer.js +1 -1
  89. package/dist/types.d.ts +119 -87
  90. package/dist/types.js +79 -69
  91. package/dist/verifier/grpc_client.d.ts +1 -0
  92. package/dist/{connect → verifier}/grpc_client.js +4 -4
  93. package/dist/verifier/index.d.ts +2 -0
  94. package/dist/verifier/index.js +36 -0
  95. package/dist/verifier/types.d.ts +10 -0
  96. package/dist/verifier/types.js +2 -0
  97. package/dist/verifier/verifier.d.ts +3 -0
  98. package/dist/verifier/verifier.js +64 -0
  99. package/package.json +17 -7
  100. package/dist/connect/data_api.d.ts +0 -11
  101. package/dist/connect/data_api.js +0 -91
  102. package/dist/connect/grpc_client.d.ts +0 -1
  103. package/dist/protos/resources.proto +0 -108
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /*
4
+ * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
5
+ * http://github.com/fonoster
6
+ *
7
+ * This file is part of Routr.
8
+ *
9
+ * Licensed under the MIT License (the "License");
10
+ * you may not use this file except in compliance with
11
+ * the License. You may obtain a copy of the License at
12
+ *
13
+ * https://opensource.org/licenses/MIT
14
+ *
15
+ * Unless required by applicable law or agreed to in writing, software
16
+ * distributed under the License is distributed on an "AS IS" BASIS,
17
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ * See the License for the specific language governing permissions and
19
+ * limitations under the License.
20
+ */
21
+ exports.default = {
22
+ $id: "https://json-schema.org/draft/2020-12/schema",
23
+ title: "Credentials Schema",
24
+ description: "Credentials resource for Agents and Trunks",
25
+ type: "object",
26
+ properties: {
27
+ apiVersion: {
28
+ enum: ["v2beta1", "v2"]
29
+ },
30
+ kind: {
31
+ enum: ["Credentials", "credentials"]
32
+ },
33
+ ref: {
34
+ description: "Reference to the resource",
35
+ type: "string"
36
+ },
37
+ metadata: {
38
+ description: "Resource metadata",
39
+ type: "object",
40
+ properties: {
41
+ name: {
42
+ description: "Resource's friendly name",
43
+ type: "string",
44
+ maxLength: 60
45
+ }
46
+ },
47
+ required: ["name"]
48
+ },
49
+ spec: {
50
+ description: "Operations spec for Credentials",
51
+ type: "object",
52
+ properties: {
53
+ credentials: {
54
+ description: "Credential configuration",
55
+ type: "object",
56
+ properties: {
57
+ username: {
58
+ description: "Username",
59
+ type: "string",
60
+ readOnly: true,
61
+ minLength: 4,
62
+ maxLength: 60
63
+ },
64
+ password: {
65
+ description: "Password",
66
+ type: "string",
67
+ writeOnly: true,
68
+ maxLength: 255
69
+ }
70
+ },
71
+ required: ["username", "password"]
72
+ }
73
+ },
74
+ required: ["credentials"]
75
+ }
76
+ },
77
+ required: ["apiVersion", "kind", "ref", "metadata", "spec"]
78
+ };
@@ -0,0 +1,72 @@
1
+ declare const _default: {
2
+ $id: string;
3
+ title: string;
4
+ description: string;
5
+ type: string;
6
+ properties: {
7
+ apiVersion: {
8
+ enum: string[];
9
+ };
10
+ kind: {
11
+ enum: string[];
12
+ };
13
+ ref: {
14
+ description: string;
15
+ type: string;
16
+ };
17
+ metadata: {
18
+ description: string;
19
+ type: string;
20
+ properties: {
21
+ name: {
22
+ description: string;
23
+ type: string;
24
+ maxLength: number;
25
+ };
26
+ };
27
+ required: string[];
28
+ };
29
+ spec: {
30
+ description: string;
31
+ type: string;
32
+ properties: {
33
+ context: {
34
+ description: string;
35
+ type: string;
36
+ properties: {
37
+ domainUri: {
38
+ description: string;
39
+ type: string;
40
+ maxLength: number;
41
+ };
42
+ accessControlListRef: {
43
+ description: string;
44
+ type: string;
45
+ };
46
+ egressPolicies: {
47
+ description: string;
48
+ type: string;
49
+ items: {
50
+ type: string;
51
+ properties: {
52
+ rule: {
53
+ description: string;
54
+ type: string;
55
+ };
56
+ numberRef: {
57
+ description: string;
58
+ type: string;
59
+ };
60
+ };
61
+ required: string[];
62
+ };
63
+ };
64
+ };
65
+ required: string[];
66
+ };
67
+ };
68
+ };
69
+ };
70
+ required: string[];
71
+ };
72
+ export default _default;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /*
4
+ * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
5
+ * http://github.com/fonoster
6
+ *
7
+ * This file is part of Routr.
8
+ *
9
+ * Licensed under the MIT License (the "License");
10
+ * you may not use this file except in compliance with
11
+ * the License. You may obtain a copy of the License at
12
+ *
13
+ * https://opensource.org/licenses/MIT
14
+ *
15
+ * Unless required by applicable law or agreed to in writing, software
16
+ * distributed under the License is distributed on an "AS IS" BASIS,
17
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ * See the License for the specific language governing permissions and
19
+ * limitations under the License.
20
+ */
21
+ exports.default = {
22
+ $id: "https://json-schema.org/draft/2020-12/schema",
23
+ title: "Domain validation schema",
24
+ description: "The spec defined for Domain validation",
25
+ type: "object",
26
+ properties: {
27
+ apiVersion: {
28
+ enum: ["v2beta1", "v2"]
29
+ },
30
+ kind: {
31
+ enum: ["Domain", "domain"]
32
+ },
33
+ ref: {
34
+ description: "Reference to the resource",
35
+ type: "string"
36
+ },
37
+ metadata: {
38
+ description: "Resource metadata",
39
+ type: "object",
40
+ properties: {
41
+ name: {
42
+ description: "Resource's friendly name",
43
+ type: "string",
44
+ maxLength: 60
45
+ }
46
+ },
47
+ required: ["name"]
48
+ },
49
+ spec: {
50
+ description: "Operations spec for an Domain",
51
+ type: "object",
52
+ properties: {
53
+ context: {
54
+ description: "The username for the Domain",
55
+ type: "object",
56
+ properties: {
57
+ domainUri: {
58
+ description: "The URI of the Domain",
59
+ type: "string",
60
+ maxLength: 255
61
+ },
62
+ accessControlListRef: {
63
+ description: "The reference to the AccessControlList",
64
+ type: "string"
65
+ },
66
+ egressPolicies: {
67
+ description: "The egress policy for the Domain",
68
+ type: "array",
69
+ items: {
70
+ type: "object",
71
+ properties: {
72
+ rule: {
73
+ description: "The rule for the egress policy",
74
+ type: "string"
75
+ },
76
+ numberRef: {
77
+ description: "The reference to the number",
78
+ type: "string"
79
+ }
80
+ },
81
+ required: ["rule", "numberRef"]
82
+ }
83
+ }
84
+ },
85
+ required: ["domainUri"]
86
+ }
87
+ }
88
+ }
89
+ },
90
+ required: ["apiVersion", "kind", "ref", "metadata", "spec"]
91
+ };
@@ -0,0 +1 @@
1
+ export * from "./validators";
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /*
18
+ * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
19
+ * http://github.com/fonoster
20
+ *
21
+ * This file is part of Routr.
22
+ *
23
+ * Licensed under the MIT License (the "License");
24
+ * you may not use this file except in compliance with
25
+ * the License. You may obtain a copy of the License at
26
+ *
27
+ * https://opensource.org/licenses/MIT
28
+ *
29
+ * Unless required by applicable law or agreed to in writing, software
30
+ * distributed under the License is distributed on an "AS IS" BASIS,
31
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
32
+ * See the License for the specific language governing permissions and
33
+ * limitations under the License.
34
+ */
35
+ __exportStar(require("./validators"), exports);
@@ -0,0 +1,81 @@
1
+ declare const _default: {
2
+ $id: string;
3
+ title: string;
4
+ description: string;
5
+ type: string;
6
+ properties: {
7
+ apiVersion: {
8
+ enum: string[];
9
+ };
10
+ kind: {
11
+ enum: string[];
12
+ };
13
+ ref: {
14
+ description: string;
15
+ type: string;
16
+ };
17
+ metadata: {
18
+ description: string;
19
+ type: string;
20
+ properties: {
21
+ name: {
22
+ description: string;
23
+ type: string;
24
+ maxLength: number;
25
+ };
26
+ };
27
+ required: string[];
28
+ };
29
+ spec: {
30
+ description: string;
31
+ type: string;
32
+ properties: {
33
+ trunkRef: {
34
+ description: string;
35
+ type: string;
36
+ };
37
+ location: {
38
+ description: string;
39
+ type: string;
40
+ properties: {
41
+ telUrl: {
42
+ description: string;
43
+ type: string;
44
+ };
45
+ aorLink: {
46
+ description: string;
47
+ type: string;
48
+ minLength: number;
49
+ maxLength: number;
50
+ };
51
+ sessionAffinityHeader: {
52
+ description: string;
53
+ type: string;
54
+ };
55
+ extraHeaders: {
56
+ description: string;
57
+ type: string;
58
+ items: {
59
+ type: string;
60
+ properties: {
61
+ name: {
62
+ description: string;
63
+ type: string;
64
+ };
65
+ value: {
66
+ description: string;
67
+ type: string;
68
+ };
69
+ };
70
+ };
71
+ };
72
+ };
73
+ required: string[];
74
+ };
75
+ };
76
+ required: string[];
77
+ };
78
+ };
79
+ required: string[];
80
+ };
81
+ export default _default;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /*
4
+ * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
5
+ * http://github.com/fonoster
6
+ *
7
+ * This file is part of Routr.
8
+ *
9
+ * Licensed under the MIT License (the "License");
10
+ * you may not use this file except in compliance with
11
+ * the License. You may obtain a copy of the License at
12
+ *
13
+ * https://opensource.org/licenses/MIT
14
+ *
15
+ * Unless required by applicable law or agreed to in writing, software
16
+ * distributed under the License is distributed on an "AS IS" BASIS,
17
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ * See the License for the specific language governing permissions and
19
+ * limitations under the License.
20
+ */
21
+ exports.default = {
22
+ $id: "https://json-schema.org/draft/2020-12/schema",
23
+ title: "Number Schema",
24
+ description: "A JSON Schema for validating numbers.",
25
+ type: "object",
26
+ properties: {
27
+ apiVersion: {
28
+ enum: ["v2beta1", "v2"]
29
+ },
30
+ kind: {
31
+ enum: ["Number", "number"]
32
+ },
33
+ ref: {
34
+ description: "Reference to the resource",
35
+ type: "string"
36
+ },
37
+ metadata: {
38
+ description: "Resource metadata",
39
+ type: "object",
40
+ properties: {
41
+ name: {
42
+ description: "Resource's friendly name",
43
+ type: "string",
44
+ maxLength: 60
45
+ }
46
+ },
47
+ required: ["name"]
48
+ },
49
+ spec: {
50
+ description: "Operations spec for Numbers",
51
+ type: "object",
52
+ properties: {
53
+ trunkRef: {
54
+ description: "Reference to the trunk",
55
+ type: "string"
56
+ },
57
+ location: {
58
+ description: "Location of the number",
59
+ type: "object",
60
+ properties: {
61
+ telUrl: {
62
+ description: "Tel URL",
63
+ type: "string"
64
+ },
65
+ aorLink: {
66
+ description: "AOR link",
67
+ type: "string",
68
+ minLength: 5,
69
+ maxLength: 255
70
+ },
71
+ sessionAffinityHeader: {
72
+ description: "Session affinity",
73
+ type: "string"
74
+ },
75
+ extraHeaders: {
76
+ description: "Properties",
77
+ type: "array",
78
+ items: {
79
+ type: "object",
80
+ properties: {
81
+ name: {
82
+ description: "Name of the header",
83
+ type: "string"
84
+ },
85
+ value: {
86
+ description: "Value of the header",
87
+ type: "string"
88
+ }
89
+ }
90
+ }
91
+ }
92
+ },
93
+ required: ["telUrl"]
94
+ }
95
+ },
96
+ required: ["location"]
97
+ }
98
+ },
99
+ required: ["apiVersion", "kind", "ref", "metadata", "spec"]
100
+ };
@@ -0,0 +1,84 @@
1
+ declare const _default: {
2
+ $id: string;
3
+ title: string;
4
+ description: string;
5
+ type: string;
6
+ properties: {
7
+ apiVersion: {
8
+ enum: string[];
9
+ };
10
+ kind: {
11
+ enum: string[];
12
+ };
13
+ ref: {
14
+ description: string;
15
+ type: string;
16
+ };
17
+ metadata: {
18
+ description: string;
19
+ type: string;
20
+ properties: {
21
+ name: {
22
+ description: string;
23
+ type: string;
24
+ maxLength: number;
25
+ };
26
+ };
27
+ required: string[];
28
+ };
29
+ spec: {
30
+ description: string;
31
+ type: string;
32
+ properties: {
33
+ username: {
34
+ description: string;
35
+ type: string;
36
+ minLength: number;
37
+ maxLength: number;
38
+ readOnly: boolean;
39
+ };
40
+ aor: {
41
+ description: string;
42
+ type: string;
43
+ minLength: number;
44
+ maxLength: number;
45
+ };
46
+ contactAddr: {
47
+ description: string;
48
+ type: string;
49
+ minLength: number;
50
+ maxLength: number;
51
+ };
52
+ credentialsRef: {
53
+ description: string;
54
+ type: string;
55
+ };
56
+ accessControlListRef: {
57
+ description: string;
58
+ type: string;
59
+ };
60
+ loadBalancing: {
61
+ description: string;
62
+ type: string;
63
+ properties: {
64
+ algorithm: {
65
+ description: string;
66
+ enum: string[];
67
+ };
68
+ withSessionAffinity: {
69
+ description: string;
70
+ type: string;
71
+ };
72
+ };
73
+ };
74
+ enabled: {
75
+ description: string;
76
+ type: string;
77
+ };
78
+ };
79
+ required: string[];
80
+ };
81
+ };
82
+ required: string[];
83
+ };
84
+ export default _default;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /*
4
+ * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
5
+ * http://github.com/fonoster
6
+ *
7
+ * This file is part of Routr.
8
+ *
9
+ * Licensed under the MIT License (the "License");
10
+ * you may not use this file except in compliance with
11
+ * the License. You may obtain a copy of the License at
12
+ *
13
+ * https://opensource.org/licenses/MIT
14
+ *
15
+ * Unless required by applicable law or agreed to in writing, software
16
+ * distributed under the License is distributed on an "AS IS" BASIS,
17
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ * See the License for the specific language governing permissions and
19
+ * limitations under the License.
20
+ */
21
+ exports.default = {
22
+ $id: "https://json-schema.org/draft/2020-12/schema",
23
+ title: "Agent validation schema",
24
+ description: "The spec defined for Peer validation",
25
+ type: "object",
26
+ properties: {
27
+ apiVersion: {
28
+ enum: ["v2beta1", "v2"]
29
+ },
30
+ kind: {
31
+ enum: ["Peer", "peer"]
32
+ },
33
+ ref: {
34
+ description: "Reference to the resource",
35
+ type: "string"
36
+ },
37
+ metadata: {
38
+ description: "Resource metadata",
39
+ type: "object",
40
+ properties: {
41
+ name: {
42
+ description: "Resource's friendly name",
43
+ type: "string",
44
+ maxLength: 60
45
+ }
46
+ },
47
+ required: ["name"]
48
+ },
49
+ spec: {
50
+ description: "Operations spec for an Peer",
51
+ type: "object",
52
+ properties: {
53
+ username: {
54
+ description: "The username for the Peer",
55
+ type: "string",
56
+ minLength: 4,
57
+ maxLength: 60,
58
+ readOnly: true
59
+ },
60
+ aor: {
61
+ description: "Address of the Peer (acceptable schemas are sip, backend.)",
62
+ type: "string",
63
+ minLength: 5,
64
+ maxLength: 323
65
+ },
66
+ contactAddr: {
67
+ description: "Contact address of the Peer",
68
+ type: "string",
69
+ minLength: 7,
70
+ maxLength: 20
71
+ },
72
+ credentialsRef: {
73
+ description: "The credential the Peer uses to authenticate",
74
+ type: "string"
75
+ },
76
+ accessControlListRef: {
77
+ description: "The ACL the Peer uses to control access to the Peer (Reserved for future use)",
78
+ type: "string"
79
+ },
80
+ loadBalancing: {
81
+ description: "The load balancing strategy for the Peer",
82
+ type: "object",
83
+ properties: {
84
+ algorithm: {
85
+ description: "The load balancing algorithm",
86
+ enum: ["round-robin", "least-sessions"]
87
+ },
88
+ withSessionAffinity: {
89
+ description: "Whether to allow session affinity",
90
+ type: "boolean"
91
+ }
92
+ }
93
+ },
94
+ enabled: {
95
+ description: "Whether the Peer is enabled",
96
+ type: "boolean"
97
+ }
98
+ },
99
+ required: ["username"]
100
+ }
101
+ },
102
+ required: ["apiVersion", "kind", "ref", "metadata", "spec"]
103
+ };