@komputer-ai/sdk 0.11.1

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 (76) hide show
  1. package/.openapi-generator-ignore +31 -0
  2. package/README.md +147 -0
  3. package/docs/AgentListResponse.md +34 -0
  4. package/docs/AgentResponse.md +68 -0
  5. package/docs/AgentsApi.md +584 -0
  6. package/docs/ConnectorResponse.md +58 -0
  7. package/docs/ConnectorsApi.md +366 -0
  8. package/docs/CreateAgentRequest.md +58 -0
  9. package/docs/CreateConnectorRequest.md +54 -0
  10. package/docs/CreateMemoryRequest.md +40 -0
  11. package/docs/CreateScheduleAgentSpec.md +42 -0
  12. package/docs/CreateScheduleRequest.md +50 -0
  13. package/docs/CreateSecretRequest.md +38 -0
  14. package/docs/CreateSkillRequest.md +40 -0
  15. package/docs/MemoriesApi.md +368 -0
  16. package/docs/MemoryResponse.md +46 -0
  17. package/docs/OfficeListResponse.md +34 -0
  18. package/docs/OfficeMemberResponse.md +40 -0
  19. package/docs/OfficeResponse.md +54 -0
  20. package/docs/OfficesApi.md +300 -0
  21. package/docs/PatchAgentRequest.md +50 -0
  22. package/docs/PatchMemoryRequest.md +36 -0
  23. package/docs/PatchScheduleRequest.md +34 -0
  24. package/docs/PatchSkillRequest.md +36 -0
  25. package/docs/ScheduleListResponse.md +34 -0
  26. package/docs/ScheduleResponse.md +70 -0
  27. package/docs/SchedulesApi.md +369 -0
  28. package/docs/SecretListResponse.md +34 -0
  29. package/docs/SecretResponse.md +48 -0
  30. package/docs/SecretsApi.md +298 -0
  31. package/docs/SkillResponse.md +48 -0
  32. package/docs/SkillsApi.md +368 -0
  33. package/docs/TemplatesApi.md +138 -0
  34. package/docs/UpdateSecretRequest.md +36 -0
  35. package/package.json +27 -0
  36. package/src/apis/AgentsApi.ts +485 -0
  37. package/src/apis/ConnectorsApi.ts +301 -0
  38. package/src/apis/MemoriesApi.ts +315 -0
  39. package/src/apis/OfficesApi.ts +253 -0
  40. package/src/apis/SchedulesApi.ts +318 -0
  41. package/src/apis/SecretsApi.ts +267 -0
  42. package/src/apis/SkillsApi.ts +315 -0
  43. package/src/apis/TemplatesApi.ts +109 -0
  44. package/src/apis/index.ts +10 -0
  45. package/src/client.test.ts +88 -0
  46. package/src/client.ts +212 -0
  47. package/src/index.ts +7 -0
  48. package/src/models/AgentListResponse.ts +73 -0
  49. package/src/models/AgentResponse.ts +201 -0
  50. package/src/models/ConnectorResponse.ts +161 -0
  51. package/src/models/CreateAgentRequest.ts +163 -0
  52. package/src/models/CreateConnectorRequest.ts +148 -0
  53. package/src/models/CreateMemoryRequest.ts +91 -0
  54. package/src/models/CreateScheduleAgentSpec.ts +97 -0
  55. package/src/models/CreateScheduleRequest.ts +140 -0
  56. package/src/models/CreateSecretRequest.ts +83 -0
  57. package/src/models/CreateSkillRequest.ts +92 -0
  58. package/src/models/MemoryResponse.ts +113 -0
  59. package/src/models/OfficeListResponse.ts +73 -0
  60. package/src/models/OfficeMemberResponse.ts +89 -0
  61. package/src/models/OfficeResponse.ts +153 -0
  62. package/src/models/PatchAgentRequest.ts +129 -0
  63. package/src/models/PatchMemoryRequest.ts +73 -0
  64. package/src/models/PatchScheduleRequest.ts +65 -0
  65. package/src/models/PatchSkillRequest.ts +73 -0
  66. package/src/models/ScheduleListResponse.ts +73 -0
  67. package/src/models/ScheduleResponse.ts +209 -0
  68. package/src/models/SecretListResponse.ts +73 -0
  69. package/src/models/SecretResponse.ts +121 -0
  70. package/src/models/SkillResponse.ts +121 -0
  71. package/src/models/UpdateSecretRequest.ts +74 -0
  72. package/src/models/index.ts +26 -0
  73. package/src/runtime.ts +450 -0
  74. package/src/watch.ts +89 -0
  75. package/tsconfig.esm.json +7 -0
  76. package/tsconfig.json +18 -0
@@ -0,0 +1,153 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * komputer.ai API
5
+ * API-first platform for running persistent Claude AI agents on Kubernetes. Designed to be driven by external systems — create agents, send tasks, and stream real-time results via REST + WebSocket.
6
+ *
7
+ * The version of the OpenAPI document: 1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ import type { OfficeMemberResponse } from './OfficeMemberResponse';
17
+ import {
18
+ OfficeMemberResponseFromJSON,
19
+ OfficeMemberResponseFromJSONTyped,
20
+ OfficeMemberResponseToJSON,
21
+ OfficeMemberResponseToJSONTyped,
22
+ } from './OfficeMemberResponse';
23
+
24
+ /**
25
+ *
26
+ * @export
27
+ * @interface OfficeResponse
28
+ */
29
+ export interface OfficeResponse {
30
+ /**
31
+ *
32
+ * @type {number}
33
+ * @memberof OfficeResponse
34
+ */
35
+ activeAgents?: number;
36
+ /**
37
+ *
38
+ * @type {number}
39
+ * @memberof OfficeResponse
40
+ */
41
+ completedAgents?: number;
42
+ /**
43
+ *
44
+ * @type {string}
45
+ * @memberof OfficeResponse
46
+ */
47
+ createdAt?: string;
48
+ /**
49
+ *
50
+ * @type {string}
51
+ * @memberof OfficeResponse
52
+ */
53
+ manager?: string;
54
+ /**
55
+ *
56
+ * @type {Array<OfficeMemberResponse>}
57
+ * @memberof OfficeResponse
58
+ */
59
+ members?: Array<OfficeMemberResponse>;
60
+ /**
61
+ *
62
+ * @type {string}
63
+ * @memberof OfficeResponse
64
+ */
65
+ name?: string;
66
+ /**
67
+ *
68
+ * @type {string}
69
+ * @memberof OfficeResponse
70
+ */
71
+ namespace?: string;
72
+ /**
73
+ *
74
+ * @type {string}
75
+ * @memberof OfficeResponse
76
+ */
77
+ phase?: string;
78
+ /**
79
+ *
80
+ * @type {number}
81
+ * @memberof OfficeResponse
82
+ */
83
+ totalAgents?: number;
84
+ /**
85
+ *
86
+ * @type {string}
87
+ * @memberof OfficeResponse
88
+ */
89
+ totalCostUSD?: string;
90
+ /**
91
+ *
92
+ * @type {number}
93
+ * @memberof OfficeResponse
94
+ */
95
+ totalTokens?: number;
96
+ }
97
+
98
+ /**
99
+ * Check if a given object implements the OfficeResponse interface.
100
+ */
101
+ export function instanceOfOfficeResponse(value: object): value is OfficeResponse {
102
+ return true;
103
+ }
104
+
105
+ export function OfficeResponseFromJSON(json: any): OfficeResponse {
106
+ return OfficeResponseFromJSONTyped(json, false);
107
+ }
108
+
109
+ export function OfficeResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): OfficeResponse {
110
+ if (json == null) {
111
+ return json;
112
+ }
113
+ return {
114
+
115
+ 'activeAgents': json['activeAgents'] == null ? undefined : json['activeAgents'],
116
+ 'completedAgents': json['completedAgents'] == null ? undefined : json['completedAgents'],
117
+ 'createdAt': json['createdAt'] == null ? undefined : json['createdAt'],
118
+ 'manager': json['manager'] == null ? undefined : json['manager'],
119
+ 'members': json['members'] == null ? undefined : ((json['members'] as Array<any>).map(OfficeMemberResponseFromJSON)),
120
+ 'name': json['name'] == null ? undefined : json['name'],
121
+ 'namespace': json['namespace'] == null ? undefined : json['namespace'],
122
+ 'phase': json['phase'] == null ? undefined : json['phase'],
123
+ 'totalAgents': json['totalAgents'] == null ? undefined : json['totalAgents'],
124
+ 'totalCostUSD': json['totalCostUSD'] == null ? undefined : json['totalCostUSD'],
125
+ 'totalTokens': json['totalTokens'] == null ? undefined : json['totalTokens'],
126
+ };
127
+ }
128
+
129
+ export function OfficeResponseToJSON(json: any): OfficeResponse {
130
+ return OfficeResponseToJSONTyped(json, false);
131
+ }
132
+
133
+ export function OfficeResponseToJSONTyped(value?: OfficeResponse | null, ignoreDiscriminator: boolean = false): any {
134
+ if (value == null) {
135
+ return value;
136
+ }
137
+
138
+ return {
139
+
140
+ 'activeAgents': value['activeAgents'],
141
+ 'completedAgents': value['completedAgents'],
142
+ 'createdAt': value['createdAt'],
143
+ 'manager': value['manager'],
144
+ 'members': value['members'] == null ? undefined : ((value['members'] as Array<any>).map(OfficeMemberResponseToJSON)),
145
+ 'name': value['name'],
146
+ 'namespace': value['namespace'],
147
+ 'phase': value['phase'],
148
+ 'totalAgents': value['totalAgents'],
149
+ 'totalCostUSD': value['totalCostUSD'],
150
+ 'totalTokens': value['totalTokens'],
151
+ };
152
+ }
153
+
@@ -0,0 +1,129 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * komputer.ai API
5
+ * API-first platform for running persistent Claude AI agents on Kubernetes. Designed to be driven by external systems — create agents, send tasks, and stream real-time results via REST + WebSocket.
6
+ *
7
+ * The version of the OpenAPI document: 1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface PatchAgentRequest
20
+ */
21
+ export interface PatchAgentRequest {
22
+ /**
23
+ * connector names to attach
24
+ * @type {Array<string>}
25
+ * @memberof PatchAgentRequest
26
+ */
27
+ connectors?: Array<string>;
28
+ /**
29
+ *
30
+ * @type {string}
31
+ * @memberof PatchAgentRequest
32
+ */
33
+ instructions?: string;
34
+ /**
35
+ *
36
+ * @type {string}
37
+ * @memberof PatchAgentRequest
38
+ */
39
+ lifecycle?: string;
40
+ /**
41
+ * memory names to attach
42
+ * @type {Array<string>}
43
+ * @memberof PatchAgentRequest
44
+ */
45
+ memories?: Array<string>;
46
+ /**
47
+ *
48
+ * @type {string}
49
+ * @memberof PatchAgentRequest
50
+ */
51
+ model?: string;
52
+ /**
53
+ * full replacement list of K8s secret names
54
+ * @type {Array<string>}
55
+ * @memberof PatchAgentRequest
56
+ */
57
+ secretRefs?: Array<string>;
58
+ /**
59
+ * skill names to attach
60
+ * @type {Array<string>}
61
+ * @memberof PatchAgentRequest
62
+ */
63
+ skills?: Array<string>;
64
+ /**
65
+ * custom system prompt
66
+ * @type {string}
67
+ * @memberof PatchAgentRequest
68
+ */
69
+ systemPrompt?: string;
70
+ /**
71
+ *
72
+ * @type {string}
73
+ * @memberof PatchAgentRequest
74
+ */
75
+ templateRef?: string;
76
+ }
77
+
78
+ /**
79
+ * Check if a given object implements the PatchAgentRequest interface.
80
+ */
81
+ export function instanceOfPatchAgentRequest(value: object): value is PatchAgentRequest {
82
+ return true;
83
+ }
84
+
85
+ export function PatchAgentRequestFromJSON(json: any): PatchAgentRequest {
86
+ return PatchAgentRequestFromJSONTyped(json, false);
87
+ }
88
+
89
+ export function PatchAgentRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): PatchAgentRequest {
90
+ if (json == null) {
91
+ return json;
92
+ }
93
+ return {
94
+
95
+ 'connectors': json['connectors'] == null ? undefined : json['connectors'],
96
+ 'instructions': json['instructions'] == null ? undefined : json['instructions'],
97
+ 'lifecycle': json['lifecycle'] == null ? undefined : json['lifecycle'],
98
+ 'memories': json['memories'] == null ? undefined : json['memories'],
99
+ 'model': json['model'] == null ? undefined : json['model'],
100
+ 'secretRefs': json['secretRefs'] == null ? undefined : json['secretRefs'],
101
+ 'skills': json['skills'] == null ? undefined : json['skills'],
102
+ 'systemPrompt': json['systemPrompt'] == null ? undefined : json['systemPrompt'],
103
+ 'templateRef': json['templateRef'] == null ? undefined : json['templateRef'],
104
+ };
105
+ }
106
+
107
+ export function PatchAgentRequestToJSON(json: any): PatchAgentRequest {
108
+ return PatchAgentRequestToJSONTyped(json, false);
109
+ }
110
+
111
+ export function PatchAgentRequestToJSONTyped(value?: PatchAgentRequest | null, ignoreDiscriminator: boolean = false): any {
112
+ if (value == null) {
113
+ return value;
114
+ }
115
+
116
+ return {
117
+
118
+ 'connectors': value['connectors'],
119
+ 'instructions': value['instructions'],
120
+ 'lifecycle': value['lifecycle'],
121
+ 'memories': value['memories'],
122
+ 'model': value['model'],
123
+ 'secretRefs': value['secretRefs'],
124
+ 'skills': value['skills'],
125
+ 'systemPrompt': value['systemPrompt'],
126
+ 'templateRef': value['templateRef'],
127
+ };
128
+ }
129
+
@@ -0,0 +1,73 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * komputer.ai API
5
+ * API-first platform for running persistent Claude AI agents on Kubernetes. Designed to be driven by external systems — create agents, send tasks, and stream real-time results via REST + WebSocket.
6
+ *
7
+ * The version of the OpenAPI document: 1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface PatchMemoryRequest
20
+ */
21
+ export interface PatchMemoryRequest {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof PatchMemoryRequest
26
+ */
27
+ content?: string;
28
+ /**
29
+ *
30
+ * @type {string}
31
+ * @memberof PatchMemoryRequest
32
+ */
33
+ description?: string;
34
+ }
35
+
36
+ /**
37
+ * Check if a given object implements the PatchMemoryRequest interface.
38
+ */
39
+ export function instanceOfPatchMemoryRequest(value: object): value is PatchMemoryRequest {
40
+ return true;
41
+ }
42
+
43
+ export function PatchMemoryRequestFromJSON(json: any): PatchMemoryRequest {
44
+ return PatchMemoryRequestFromJSONTyped(json, false);
45
+ }
46
+
47
+ export function PatchMemoryRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): PatchMemoryRequest {
48
+ if (json == null) {
49
+ return json;
50
+ }
51
+ return {
52
+
53
+ 'content': json['content'] == null ? undefined : json['content'],
54
+ 'description': json['description'] == null ? undefined : json['description'],
55
+ };
56
+ }
57
+
58
+ export function PatchMemoryRequestToJSON(json: any): PatchMemoryRequest {
59
+ return PatchMemoryRequestToJSONTyped(json, false);
60
+ }
61
+
62
+ export function PatchMemoryRequestToJSONTyped(value?: PatchMemoryRequest | null, ignoreDiscriminator: boolean = false): any {
63
+ if (value == null) {
64
+ return value;
65
+ }
66
+
67
+ return {
68
+
69
+ 'content': value['content'],
70
+ 'description': value['description'],
71
+ };
72
+ }
73
+
@@ -0,0 +1,65 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * komputer.ai API
5
+ * API-first platform for running persistent Claude AI agents on Kubernetes. Designed to be driven by external systems — create agents, send tasks, and stream real-time results via REST + WebSocket.
6
+ *
7
+ * The version of the OpenAPI document: 1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface PatchScheduleRequest
20
+ */
21
+ export interface PatchScheduleRequest {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof PatchScheduleRequest
26
+ */
27
+ schedule?: string;
28
+ }
29
+
30
+ /**
31
+ * Check if a given object implements the PatchScheduleRequest interface.
32
+ */
33
+ export function instanceOfPatchScheduleRequest(value: object): value is PatchScheduleRequest {
34
+ return true;
35
+ }
36
+
37
+ export function PatchScheduleRequestFromJSON(json: any): PatchScheduleRequest {
38
+ return PatchScheduleRequestFromJSONTyped(json, false);
39
+ }
40
+
41
+ export function PatchScheduleRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): PatchScheduleRequest {
42
+ if (json == null) {
43
+ return json;
44
+ }
45
+ return {
46
+
47
+ 'schedule': json['schedule'] == null ? undefined : json['schedule'],
48
+ };
49
+ }
50
+
51
+ export function PatchScheduleRequestToJSON(json: any): PatchScheduleRequest {
52
+ return PatchScheduleRequestToJSONTyped(json, false);
53
+ }
54
+
55
+ export function PatchScheduleRequestToJSONTyped(value?: PatchScheduleRequest | null, ignoreDiscriminator: boolean = false): any {
56
+ if (value == null) {
57
+ return value;
58
+ }
59
+
60
+ return {
61
+
62
+ 'schedule': value['schedule'],
63
+ };
64
+ }
65
+
@@ -0,0 +1,73 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * komputer.ai API
5
+ * API-first platform for running persistent Claude AI agents on Kubernetes. Designed to be driven by external systems — create agents, send tasks, and stream real-time results via REST + WebSocket.
6
+ *
7
+ * The version of the OpenAPI document: 1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface PatchSkillRequest
20
+ */
21
+ export interface PatchSkillRequest {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof PatchSkillRequest
26
+ */
27
+ content?: string;
28
+ /**
29
+ *
30
+ * @type {string}
31
+ * @memberof PatchSkillRequest
32
+ */
33
+ description?: string;
34
+ }
35
+
36
+ /**
37
+ * Check if a given object implements the PatchSkillRequest interface.
38
+ */
39
+ export function instanceOfPatchSkillRequest(value: object): value is PatchSkillRequest {
40
+ return true;
41
+ }
42
+
43
+ export function PatchSkillRequestFromJSON(json: any): PatchSkillRequest {
44
+ return PatchSkillRequestFromJSONTyped(json, false);
45
+ }
46
+
47
+ export function PatchSkillRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): PatchSkillRequest {
48
+ if (json == null) {
49
+ return json;
50
+ }
51
+ return {
52
+
53
+ 'content': json['content'] == null ? undefined : json['content'],
54
+ 'description': json['description'] == null ? undefined : json['description'],
55
+ };
56
+ }
57
+
58
+ export function PatchSkillRequestToJSON(json: any): PatchSkillRequest {
59
+ return PatchSkillRequestToJSONTyped(json, false);
60
+ }
61
+
62
+ export function PatchSkillRequestToJSONTyped(value?: PatchSkillRequest | null, ignoreDiscriminator: boolean = false): any {
63
+ if (value == null) {
64
+ return value;
65
+ }
66
+
67
+ return {
68
+
69
+ 'content': value['content'],
70
+ 'description': value['description'],
71
+ };
72
+ }
73
+
@@ -0,0 +1,73 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * komputer.ai API
5
+ * API-first platform for running persistent Claude AI agents on Kubernetes. Designed to be driven by external systems — create agents, send tasks, and stream real-time results via REST + WebSocket.
6
+ *
7
+ * The version of the OpenAPI document: 1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ import type { ScheduleResponse } from './ScheduleResponse';
17
+ import {
18
+ ScheduleResponseFromJSON,
19
+ ScheduleResponseFromJSONTyped,
20
+ ScheduleResponseToJSON,
21
+ ScheduleResponseToJSONTyped,
22
+ } from './ScheduleResponse';
23
+
24
+ /**
25
+ *
26
+ * @export
27
+ * @interface ScheduleListResponse
28
+ */
29
+ export interface ScheduleListResponse {
30
+ /**
31
+ *
32
+ * @type {Array<ScheduleResponse>}
33
+ * @memberof ScheduleListResponse
34
+ */
35
+ schedules?: Array<ScheduleResponse>;
36
+ }
37
+
38
+ /**
39
+ * Check if a given object implements the ScheduleListResponse interface.
40
+ */
41
+ export function instanceOfScheduleListResponse(value: object): value is ScheduleListResponse {
42
+ return true;
43
+ }
44
+
45
+ export function ScheduleListResponseFromJSON(json: any): ScheduleListResponse {
46
+ return ScheduleListResponseFromJSONTyped(json, false);
47
+ }
48
+
49
+ export function ScheduleListResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): ScheduleListResponse {
50
+ if (json == null) {
51
+ return json;
52
+ }
53
+ return {
54
+
55
+ 'schedules': json['schedules'] == null ? undefined : ((json['schedules'] as Array<any>).map(ScheduleResponseFromJSON)),
56
+ };
57
+ }
58
+
59
+ export function ScheduleListResponseToJSON(json: any): ScheduleListResponse {
60
+ return ScheduleListResponseToJSONTyped(json, false);
61
+ }
62
+
63
+ export function ScheduleListResponseToJSONTyped(value?: ScheduleListResponse | null, ignoreDiscriminator: boolean = false): any {
64
+ if (value == null) {
65
+ return value;
66
+ }
67
+
68
+ return {
69
+
70
+ 'schedules': value['schedules'] == null ? undefined : ((value['schedules'] as Array<any>).map(ScheduleResponseToJSON)),
71
+ };
72
+ }
73
+