@emilgroup/tenant-sdk-node 1.39.1-beta.30 → 1.39.1-beta.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,11 +17,11 @@ Although this package can be used in both TypeScript and JavaScript, it is inten
17
17
  Navigate to the folder of your consuming project and run one of the following commands:
18
18
 
19
19
  ```
20
- npm install @emilgroup/tenant-sdk-node@1.39.1-beta.30 --save
20
+ npm install @emilgroup/tenant-sdk-node@1.39.1-beta.31 --save
21
21
  ```
22
22
  or
23
23
  ```
24
- yarn add @emilgroup/tenant-sdk-node@1.39.1-beta.30
24
+ yarn add @emilgroup/tenant-sdk-node@1.39.1-beta.31
25
25
  ```
26
26
 
27
27
  And then you can import `UsersApi`.
@@ -129,6 +129,51 @@ export const TestTenantPoolApiAxiosParamCreator = function (configuration?: Conf
129
129
 
130
130
 
131
131
 
132
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
133
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
134
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
135
+
136
+ return {
137
+ url: toPathString(localVarUrlObj),
138
+ options: localVarRequestOptions,
139
+ };
140
+ },
141
+ /**
142
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
143
+ * @summary Force a pool tenant back to available
144
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
145
+ * @param {string} [authorization] Bearer Token
146
+ * @param {*} [options] Override http request option.
147
+ * @throws {RequiredError}
148
+ */
149
+ forceAvailable: async (tenantSlug: string, authorization?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
150
+ // verify required parameter 'tenantSlug' is not null or undefined
151
+ assertParamExists('forceAvailable', 'tenantSlug', tenantSlug)
152
+ const localVarPath = `/tenantservice/v1/test-tenant-pool/{tenantSlug}/force-available`
153
+ .replace(`{${"tenantSlug"}}`, encodeURIComponent(String(tenantSlug)));
154
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
155
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
156
+ let baseOptions;
157
+ let baseAccessToken;
158
+ if (configuration) {
159
+ baseOptions = configuration.baseOptions;
160
+ baseAccessToken = configuration.accessToken;
161
+ }
162
+
163
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
164
+ const localVarHeaderParameter = {} as any;
165
+ const localVarQueryParameter = {} as any;
166
+
167
+ // authentication bearer required
168
+ // http bearer authentication required
169
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
170
+
171
+ if (authorization !== undefined && authorization !== null || baseAccessToken !== undefined && baseAccessToken !== null) {
172
+ localVarHeaderParameter['Authorization'] = String(authorization ? authorization : baseAccessToken);
173
+ }
174
+
175
+
176
+
132
177
  setSearchParams(localVarUrlObj, localVarQueryParameter);
133
178
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
134
179
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -624,6 +669,18 @@ export const TestTenantPoolApiFp = function(configuration?: Configuration) {
624
669
  const localVarAxiosArgs = await localVarAxiosParamCreator.deregister(tenantSlug, authorization, options);
625
670
  return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
626
671
  },
672
+ /**
673
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
674
+ * @summary Force a pool tenant back to available
675
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
676
+ * @param {string} [authorization] Bearer Token
677
+ * @param {*} [options] Override http request option.
678
+ * @throws {RequiredError}
679
+ */
680
+ async forceAvailable(tenantSlug: string, authorization?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PoolTenantResponseClass>> {
681
+ const localVarAxiosArgs = await localVarAxiosParamCreator.forceAvailable(tenantSlug, authorization, options);
682
+ return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
683
+ },
627
684
  /**
628
685
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
629
686
  * @summary Read the shared cleanup registry
@@ -775,6 +832,17 @@ export const TestTenantPoolApiFactory = function (configuration?: Configuration,
775
832
  deregister(tenantSlug: string, authorization?: string, options?: any): AxiosPromise<void> {
776
833
  return localVarFp.deregister(tenantSlug, authorization, options).then((request) => request(axios, basePath));
777
834
  },
835
+ /**
836
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
837
+ * @summary Force a pool tenant back to available
838
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
839
+ * @param {string} [authorization] Bearer Token
840
+ * @param {*} [options] Override http request option.
841
+ * @throws {RequiredError}
842
+ */
843
+ forceAvailable(tenantSlug: string, authorization?: string, options?: any): AxiosPromise<PoolTenantResponseClass> {
844
+ return localVarFp.forceAvailable(tenantSlug, authorization, options).then((request) => request(axios, basePath));
845
+ },
778
846
  /**
779
847
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
780
848
  * @summary Read the shared cleanup registry
@@ -929,6 +997,27 @@ export interface TestTenantPoolApiDeregisterRequest {
929
997
  readonly authorization?: string
930
998
  }
931
999
 
1000
+ /**
1001
+ * Request parameters for forceAvailable operation in TestTenantPoolApi.
1002
+ * @export
1003
+ * @interface TestTenantPoolApiForceAvailableRequest
1004
+ */
1005
+ export interface TestTenantPoolApiForceAvailableRequest {
1006
+ /**
1007
+ * The slug of the tenant it was registered under.
1008
+ * @type {string}
1009
+ * @memberof TestTenantPoolApiForceAvailable
1010
+ */
1011
+ readonly tenantSlug: string
1012
+
1013
+ /**
1014
+ * Bearer Token
1015
+ * @type {string}
1016
+ * @memberof TestTenantPoolApiForceAvailable
1017
+ */
1018
+ readonly authorization?: string
1019
+ }
1020
+
932
1021
  /**
933
1022
  * Request parameters for getCleanupRegistry operation in TestTenantPoolApi.
934
1023
  * @export
@@ -1163,6 +1252,18 @@ export class TestTenantPoolApi extends BaseAPI {
1163
1252
  return TestTenantPoolApiFp(this.configuration).deregister(requestParameters.tenantSlug, requestParameters.authorization, options).then((request) => request(this.axios, this.basePath));
1164
1253
  }
1165
1254
 
1255
+ /**
1256
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
1257
+ * @summary Force a pool tenant back to available
1258
+ * @param {TestTenantPoolApiForceAvailableRequest} requestParameters Request parameters.
1259
+ * @param {*} [options] Override http request option.
1260
+ * @throws {RequiredError}
1261
+ * @memberof TestTenantPoolApi
1262
+ */
1263
+ public forceAvailable(requestParameters: TestTenantPoolApiForceAvailableRequest, options?: AxiosRequestConfig) {
1264
+ return TestTenantPoolApiFp(this.configuration).forceAvailable(requestParameters.tenantSlug, requestParameters.authorization, options).then((request) => request(this.axios, this.basePath));
1265
+ }
1266
+
1166
1267
  /**
1167
1268
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
1168
1269
  * @summary Read the shared cleanup registry
@@ -43,6 +43,15 @@ export declare const TestTenantPoolApiAxiosParamCreator: (configuration?: Config
43
43
  * @throws {RequiredError}
44
44
  */
45
45
  deregister: (tenantSlug: string, authorization?: string, options?: AxiosRequestConfig) => Promise<RequestArgs>;
46
+ /**
47
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
48
+ * @summary Force a pool tenant back to available
49
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
50
+ * @param {string} [authorization] Bearer Token
51
+ * @param {*} [options] Override http request option.
52
+ * @throws {RequiredError}
53
+ */
54
+ forceAvailable: (tenantSlug: string, authorization?: string, options?: AxiosRequestConfig) => Promise<RequestArgs>;
46
55
  /**
47
56
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
48
57
  * @summary Read the shared cleanup registry
@@ -156,6 +165,15 @@ export declare const TestTenantPoolApiFp: (configuration?: Configuration) => {
156
165
  * @throws {RequiredError}
157
166
  */
158
167
  deregister(tenantSlug: string, authorization?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>>;
168
+ /**
169
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
170
+ * @summary Force a pool tenant back to available
171
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
172
+ * @param {string} [authorization] Bearer Token
173
+ * @param {*} [options] Override http request option.
174
+ * @throws {RequiredError}
175
+ */
176
+ forceAvailable(tenantSlug: string, authorization?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PoolTenantResponseClass>>;
159
177
  /**
160
178
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
161
179
  * @summary Read the shared cleanup registry
@@ -269,6 +287,15 @@ export declare const TestTenantPoolApiFactory: (configuration?: Configuration, b
269
287
  * @throws {RequiredError}
270
288
  */
271
289
  deregister(tenantSlug: string, authorization?: string, options?: any): AxiosPromise<void>;
290
+ /**
291
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
292
+ * @summary Force a pool tenant back to available
293
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
294
+ * @param {string} [authorization] Bearer Token
295
+ * @param {*} [options] Override http request option.
296
+ * @throws {RequiredError}
297
+ */
298
+ forceAvailable(tenantSlug: string, authorization?: string, options?: any): AxiosPromise<PoolTenantResponseClass>;
272
299
  /**
273
300
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
274
301
  * @summary Read the shared cleanup registry
@@ -397,6 +424,25 @@ export interface TestTenantPoolApiDeregisterRequest {
397
424
  */
398
425
  readonly authorization?: string;
399
426
  }
427
+ /**
428
+ * Request parameters for forceAvailable operation in TestTenantPoolApi.
429
+ * @export
430
+ * @interface TestTenantPoolApiForceAvailableRequest
431
+ */
432
+ export interface TestTenantPoolApiForceAvailableRequest {
433
+ /**
434
+ * The slug of the tenant it was registered under.
435
+ * @type {string}
436
+ * @memberof TestTenantPoolApiForceAvailable
437
+ */
438
+ readonly tenantSlug: string;
439
+ /**
440
+ * Bearer Token
441
+ * @type {string}
442
+ * @memberof TestTenantPoolApiForceAvailable
443
+ */
444
+ readonly authorization?: string;
445
+ }
400
446
  /**
401
447
  * Request parameters for getCleanupRegistry operation in TestTenantPoolApi.
402
448
  * @export
@@ -606,6 +652,15 @@ export declare class TestTenantPoolApi extends BaseAPI {
606
652
  * @memberof TestTenantPoolApi
607
653
  */
608
654
  deregister(requestParameters: TestTenantPoolApiDeregisterRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
655
+ /**
656
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
657
+ * @summary Force a pool tenant back to available
658
+ * @param {TestTenantPoolApiForceAvailableRequest} requestParameters Request parameters.
659
+ * @param {*} [options] Override http request option.
660
+ * @throws {RequiredError}
661
+ * @memberof TestTenantPoolApi
662
+ */
663
+ forceAvailable(requestParameters: TestTenantPoolApiForceAvailableRequest, options?: AxiosRequestConfig): Promise<import("axios").AxiosResponse<PoolTenantResponseClass, any, {}>>;
609
664
  /**
610
665
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
611
666
  * @summary Read the shared cleanup registry
@@ -193,6 +193,54 @@ var TestTenantPoolApiAxiosParamCreator = function (configuration) {
193
193
  });
194
194
  });
195
195
  },
196
+ /**
197
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
198
+ * @summary Force a pool tenant back to available
199
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
200
+ * @param {string} [authorization] Bearer Token
201
+ * @param {*} [options] Override http request option.
202
+ * @throws {RequiredError}
203
+ */
204
+ forceAvailable: function (tenantSlug, authorization, options) {
205
+ if (options === void 0) { options = {}; }
206
+ return __awaiter(_this, void 0, void 0, function () {
207
+ var localVarPath, localVarUrlObj, baseOptions, baseAccessToken, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, headersFromBaseOptions;
208
+ return __generator(this, function (_a) {
209
+ switch (_a.label) {
210
+ case 0:
211
+ // verify required parameter 'tenantSlug' is not null or undefined
212
+ (0, common_1.assertParamExists)('forceAvailable', 'tenantSlug', tenantSlug);
213
+ localVarPath = "/tenantservice/v1/test-tenant-pool/{tenantSlug}/force-available"
214
+ .replace("{".concat("tenantSlug", "}"), encodeURIComponent(String(tenantSlug)));
215
+ localVarUrlObj = new url_1.URL(localVarPath, common_1.DUMMY_BASE_URL);
216
+ if (configuration) {
217
+ baseOptions = configuration.baseOptions;
218
+ baseAccessToken = configuration.accessToken;
219
+ }
220
+ localVarRequestOptions = __assign(__assign({ method: 'POST' }, baseOptions), options);
221
+ localVarHeaderParameter = {};
222
+ localVarQueryParameter = {};
223
+ // authentication bearer required
224
+ // http bearer authentication required
225
+ return [4 /*yield*/, (0, common_1.setBearerAuthToObject)(localVarHeaderParameter, configuration)];
226
+ case 1:
227
+ // authentication bearer required
228
+ // http bearer authentication required
229
+ _a.sent();
230
+ if (authorization !== undefined && authorization !== null || baseAccessToken !== undefined && baseAccessToken !== null) {
231
+ localVarHeaderParameter['Authorization'] = String(authorization ? authorization : baseAccessToken);
232
+ }
233
+ (0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter);
234
+ headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
235
+ localVarRequestOptions.headers = __assign(__assign(__assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
236
+ return [2 /*return*/, {
237
+ url: (0, common_1.toPathString)(localVarUrlObj),
238
+ options: localVarRequestOptions,
239
+ }];
240
+ }
241
+ });
242
+ });
243
+ },
196
244
  /**
197
245
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
198
246
  * @summary Read the shared cleanup registry
@@ -724,6 +772,27 @@ var TestTenantPoolApiFp = function (configuration) {
724
772
  });
725
773
  });
726
774
  },
775
+ /**
776
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
777
+ * @summary Force a pool tenant back to available
778
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
779
+ * @param {string} [authorization] Bearer Token
780
+ * @param {*} [options] Override http request option.
781
+ * @throws {RequiredError}
782
+ */
783
+ forceAvailable: function (tenantSlug, authorization, options) {
784
+ return __awaiter(this, void 0, void 0, function () {
785
+ var localVarAxiosArgs;
786
+ return __generator(this, function (_a) {
787
+ switch (_a.label) {
788
+ case 0: return [4 /*yield*/, localVarAxiosParamCreator.forceAvailable(tenantSlug, authorization, options)];
789
+ case 1:
790
+ localVarAxiosArgs = _a.sent();
791
+ return [2 /*return*/, (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration)];
792
+ }
793
+ });
794
+ });
795
+ },
727
796
  /**
728
797
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
729
798
  * @summary Read the shared cleanup registry
@@ -965,6 +1034,17 @@ var TestTenantPoolApiFactory = function (configuration, basePath, axios) {
965
1034
  deregister: function (tenantSlug, authorization, options) {
966
1035
  return localVarFp.deregister(tenantSlug, authorization, options).then(function (request) { return request(axios, basePath); });
967
1036
  },
1037
+ /**
1038
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
1039
+ * @summary Force a pool tenant back to available
1040
+ * @param {string} tenantSlug The slug of the tenant it was registered under.
1041
+ * @param {string} [authorization] Bearer Token
1042
+ * @param {*} [options] Override http request option.
1043
+ * @throws {RequiredError}
1044
+ */
1045
+ forceAvailable: function (tenantSlug, authorization, options) {
1046
+ return localVarFp.forceAvailable(tenantSlug, authorization, options).then(function (request) { return request(axios, basePath); });
1047
+ },
968
1048
  /**
969
1049
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
970
1050
  * @summary Read the shared cleanup registry
@@ -1112,6 +1192,18 @@ var TestTenantPoolApi = /** @class */ (function (_super) {
1112
1192
  var _this = this;
1113
1193
  return (0, exports.TestTenantPoolApiFp)(this.configuration).deregister(requestParameters.tenantSlug, requestParameters.authorization, options).then(function (request) { return request(_this.axios, _this.basePath); });
1114
1194
  };
1195
+ /**
1196
+ * Operator escape hatch for a pool tenant stuck in reset_failed: forces it straight to available, clearing lease/cleanup-job state, without re-running cleanup -- unlike retrigger-cleanup. Only use this once the underlying data has been handled some other way, since it skips cleanup entirely. Refused for any other status. **Required Permissions** \"tenant-management.tenants.update\"
1197
+ * @summary Force a pool tenant back to available
1198
+ * @param {TestTenantPoolApiForceAvailableRequest} requestParameters Request parameters.
1199
+ * @param {*} [options] Override http request option.
1200
+ * @throws {RequiredError}
1201
+ * @memberof TestTenantPoolApi
1202
+ */
1203
+ TestTenantPoolApi.prototype.forceAvailable = function (requestParameters, options) {
1204
+ var _this = this;
1205
+ return (0, exports.TestTenantPoolApiFp)(this.configuration).forceAvailable(requestParameters.tenantSlug, requestParameters.authorization, options).then(function (request) { return request(_this.axios, _this.basePath); });
1206
+ };
1115
1207
  /**
1116
1208
  * Returns the single, shared configuration describing which database entities get hard-deleted when a pool tenant is cleaned up after release. **Required Permissions** \"tenant-management.tenants.view\"
1117
1209
  * @summary Read the shared cleanup registry
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@emilgroup/tenant-sdk-node",
3
- "version": "1.39.1-beta.30",
3
+ "version": "1.39.1-beta.31",
4
4
  "description": "OpenAPI client for @emilgroup/tenant-sdk-node",
5
5
  "author": "OpenAPI-Generator Contributors",
6
6
  "keywords": [