@kapeta/local-cluster-service 0.24.3 → 0.25.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.
- package/.eslintrc.cjs +8 -0
- package/.github/workflows/check-license.yml +18 -0
- package/CHANGELOG.md +17 -0
- package/LICENSE +38 -21
- package/README.md +4 -0
- package/definitions.d.ts +5 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +16 -2
- package/dist/cjs/src/RepositoryWatcher.d.ts +4 -0
- package/dist/cjs/src/RepositoryWatcher.js +4 -0
- package/dist/cjs/src/api.d.ts +4 -0
- package/dist/cjs/src/api.js +4 -0
- package/dist/cjs/src/assetManager.d.ts +4 -0
- package/dist/cjs/src/assetManager.js +4 -0
- package/dist/cjs/src/assets/routes.d.ts +4 -0
- package/dist/cjs/src/assets/routes.js +4 -0
- package/dist/cjs/src/attachments/routes.d.ts +4 -0
- package/dist/cjs/src/attachments/routes.js +4 -0
- package/dist/cjs/src/authManager.d.ts +4 -0
- package/dist/cjs/src/authManager.js +4 -0
- package/dist/cjs/src/cacheManager.d.ts +4 -0
- package/dist/cjs/src/cacheManager.js +4 -0
- package/dist/cjs/src/clusterService.d.ts +4 -0
- package/dist/cjs/src/clusterService.js +4 -0
- package/dist/cjs/src/codeGeneratorManager.d.ts +4 -0
- package/dist/cjs/src/codeGeneratorManager.js +4 -0
- package/dist/cjs/src/config/routes.d.ts +4 -0
- package/dist/cjs/src/config/routes.js +4 -0
- package/dist/cjs/src/configManager.d.ts +4 -0
- package/dist/cjs/src/configManager.js +4 -0
- package/dist/cjs/src/containerManager.d.ts +4 -0
- package/dist/cjs/src/containerManager.js +4 -0
- package/dist/cjs/src/definitionsManager.d.ts +4 -0
- package/dist/cjs/src/definitionsManager.js +4 -0
- package/dist/cjs/src/filesystem/routes.d.ts +4 -0
- package/dist/cjs/src/filesystem/routes.js +4 -0
- package/dist/cjs/src/filesystemManager.d.ts +4 -0
- package/dist/cjs/src/filesystemManager.js +4 -0
- package/dist/cjs/src/identities/routes.d.ts +4 -0
- package/dist/cjs/src/identities/routes.js +4 -0
- package/dist/cjs/src/instanceManager.d.ts +4 -0
- package/dist/cjs/src/instanceManager.js +4 -0
- package/dist/cjs/src/instances/routes.d.ts +4 -0
- package/dist/cjs/src/instances/routes.js +4 -0
- package/dist/cjs/src/middleware/cors.d.ts +4 -0
- package/dist/cjs/src/middleware/cors.js +4 -0
- package/dist/cjs/src/middleware/kapeta.d.ts +4 -0
- package/dist/cjs/src/middleware/kapeta.js +4 -0
- package/dist/cjs/src/middleware/stringBody.d.ts +4 -0
- package/dist/cjs/src/middleware/stringBody.js +4 -0
- package/dist/cjs/src/networkManager.d.ts +4 -0
- package/dist/cjs/src/networkManager.js +4 -0
- package/dist/cjs/src/operatorManager.d.ts +4 -0
- package/dist/cjs/src/operatorManager.js +4 -0
- package/dist/cjs/src/progressListener.d.ts +4 -0
- package/dist/cjs/src/progressListener.js +4 -0
- package/dist/cjs/src/providerManager.d.ts +4 -0
- package/dist/cjs/src/providerManager.js +4 -0
- package/dist/cjs/src/providers/routes.d.ts +4 -0
- package/dist/cjs/src/providers/routes.js +4 -0
- package/dist/cjs/src/proxy/routes.d.ts +4 -0
- package/dist/cjs/src/proxy/routes.js +4 -0
- package/dist/cjs/src/proxy/types/rest.d.ts +4 -0
- package/dist/cjs/src/proxy/types/rest.js +4 -0
- package/dist/cjs/src/proxy/types/web.d.ts +4 -0
- package/dist/cjs/src/proxy/types/web.js +4 -0
- package/dist/cjs/src/repositoryManager.d.ts +4 -0
- package/dist/cjs/src/repositoryManager.js +4 -0
- package/dist/cjs/src/serviceManager.d.ts +4 -0
- package/dist/cjs/src/serviceManager.js +4 -0
- package/dist/cjs/src/socketManager.d.ts +4 -0
- package/dist/cjs/src/socketManager.js +4 -0
- package/dist/cjs/src/storageService.d.ts +4 -0
- package/dist/cjs/src/storageService.js +4 -0
- package/dist/cjs/src/taskManager.d.ts +4 -0
- package/dist/cjs/src/taskManager.js +4 -0
- package/dist/cjs/src/tasks/routes.d.ts +4 -0
- package/dist/cjs/src/tasks/routes.js +4 -0
- package/dist/cjs/src/traffic/routes.d.ts +4 -0
- package/dist/cjs/src/traffic/routes.js +4 -0
- package/dist/cjs/src/types.d.ts +4 -0
- package/dist/cjs/src/types.js +4 -0
- package/dist/cjs/src/utils/BlockInstanceRunner.d.ts +4 -0
- package/dist/cjs/src/utils/BlockInstanceRunner.js +5 -1
- package/dist/cjs/src/utils/DefaultProviderInstaller.d.ts +4 -0
- package/dist/cjs/src/utils/DefaultProviderInstaller.js +4 -0
- package/dist/cjs/src/utils/LogData.d.ts +4 -0
- package/dist/cjs/src/utils/LogData.js +4 -0
- package/dist/cjs/src/utils/commandLineUtils.d.ts +5 -0
- package/dist/cjs/src/utils/commandLineUtils.js +11 -1
- package/dist/cjs/src/utils/pathTemplateParser.d.ts +4 -0
- package/dist/cjs/src/utils/pathTemplateParser.js +4 -0
- package/dist/cjs/src/utils/utils.d.ts +4 -0
- package/dist/cjs/src/utils/utils.js +4 -0
- package/dist/cjs/start.d.ts +4 -0
- package/dist/cjs/start.js +4 -0
- package/dist/cjs/test/proxy/types/rest.test.d.ts +4 -0
- package/dist/cjs/test/proxy/types/rest.test.js +4 -0
- package/dist/cjs/test/utils/pathTemplateParser.test.d.ts +4 -0
- package/dist/cjs/test/utils/pathTemplateParser.test.js +4 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +16 -2
- package/dist/esm/src/RepositoryWatcher.d.ts +4 -0
- package/dist/esm/src/RepositoryWatcher.js +4 -0
- package/dist/esm/src/api.d.ts +4 -0
- package/dist/esm/src/api.js +4 -0
- package/dist/esm/src/assetManager.d.ts +4 -0
- package/dist/esm/src/assetManager.js +4 -0
- package/dist/esm/src/assets/routes.d.ts +4 -0
- package/dist/esm/src/assets/routes.js +4 -0
- package/dist/esm/src/attachments/routes.d.ts +4 -0
- package/dist/esm/src/attachments/routes.js +4 -0
- package/dist/esm/src/authManager.d.ts +4 -0
- package/dist/esm/src/authManager.js +4 -0
- package/dist/esm/src/cacheManager.d.ts +4 -0
- package/dist/esm/src/cacheManager.js +4 -0
- package/dist/esm/src/clusterService.d.ts +4 -0
- package/dist/esm/src/clusterService.js +4 -0
- package/dist/esm/src/codeGeneratorManager.d.ts +4 -0
- package/dist/esm/src/codeGeneratorManager.js +4 -0
- package/dist/esm/src/config/routes.d.ts +4 -0
- package/dist/esm/src/config/routes.js +4 -0
- package/dist/esm/src/configManager.d.ts +4 -0
- package/dist/esm/src/configManager.js +4 -0
- package/dist/esm/src/containerManager.d.ts +4 -0
- package/dist/esm/src/containerManager.js +4 -0
- package/dist/esm/src/definitionsManager.d.ts +4 -0
- package/dist/esm/src/definitionsManager.js +4 -0
- package/dist/esm/src/filesystem/routes.d.ts +4 -0
- package/dist/esm/src/filesystem/routes.js +4 -0
- package/dist/esm/src/filesystemManager.d.ts +4 -0
- package/dist/esm/src/filesystemManager.js +4 -0
- package/dist/esm/src/identities/routes.d.ts +4 -0
- package/dist/esm/src/identities/routes.js +4 -0
- package/dist/esm/src/instanceManager.d.ts +4 -0
- package/dist/esm/src/instanceManager.js +4 -0
- package/dist/esm/src/instances/routes.d.ts +4 -0
- package/dist/esm/src/instances/routes.js +4 -0
- package/dist/esm/src/middleware/cors.d.ts +4 -0
- package/dist/esm/src/middleware/cors.js +4 -0
- package/dist/esm/src/middleware/kapeta.d.ts +4 -0
- package/dist/esm/src/middleware/kapeta.js +4 -0
- package/dist/esm/src/middleware/stringBody.d.ts +4 -0
- package/dist/esm/src/middleware/stringBody.js +4 -0
- package/dist/esm/src/networkManager.d.ts +4 -0
- package/dist/esm/src/networkManager.js +4 -0
- package/dist/esm/src/operatorManager.d.ts +4 -0
- package/dist/esm/src/operatorManager.js +4 -0
- package/dist/esm/src/progressListener.d.ts +4 -0
- package/dist/esm/src/progressListener.js +4 -0
- package/dist/esm/src/providerManager.d.ts +4 -0
- package/dist/esm/src/providerManager.js +4 -0
- package/dist/esm/src/providers/routes.d.ts +4 -0
- package/dist/esm/src/providers/routes.js +4 -0
- package/dist/esm/src/proxy/routes.d.ts +4 -0
- package/dist/esm/src/proxy/routes.js +4 -0
- package/dist/esm/src/proxy/types/rest.d.ts +4 -0
- package/dist/esm/src/proxy/types/rest.js +4 -0
- package/dist/esm/src/proxy/types/web.d.ts +4 -0
- package/dist/esm/src/proxy/types/web.js +4 -0
- package/dist/esm/src/repositoryManager.d.ts +4 -0
- package/dist/esm/src/repositoryManager.js +4 -0
- package/dist/esm/src/serviceManager.d.ts +4 -0
- package/dist/esm/src/serviceManager.js +4 -0
- package/dist/esm/src/socketManager.d.ts +4 -0
- package/dist/esm/src/socketManager.js +4 -0
- package/dist/esm/src/storageService.d.ts +4 -0
- package/dist/esm/src/storageService.js +4 -0
- package/dist/esm/src/taskManager.d.ts +4 -0
- package/dist/esm/src/taskManager.js +4 -0
- package/dist/esm/src/tasks/routes.d.ts +4 -0
- package/dist/esm/src/tasks/routes.js +4 -0
- package/dist/esm/src/traffic/routes.d.ts +4 -0
- package/dist/esm/src/traffic/routes.js +4 -0
- package/dist/esm/src/types.d.ts +4 -0
- package/dist/esm/src/types.js +4 -0
- package/dist/esm/src/utils/BlockInstanceRunner.d.ts +4 -0
- package/dist/esm/src/utils/BlockInstanceRunner.js +5 -1
- package/dist/esm/src/utils/DefaultProviderInstaller.d.ts +4 -0
- package/dist/esm/src/utils/DefaultProviderInstaller.js +4 -0
- package/dist/esm/src/utils/LogData.d.ts +4 -0
- package/dist/esm/src/utils/LogData.js +4 -0
- package/dist/esm/src/utils/commandLineUtils.d.ts +5 -0
- package/dist/esm/src/utils/commandLineUtils.js +11 -1
- package/dist/esm/src/utils/pathTemplateParser.d.ts +4 -0
- package/dist/esm/src/utils/pathTemplateParser.js +4 -0
- package/dist/esm/src/utils/utils.d.ts +4 -0
- package/dist/esm/src/utils/utils.js +4 -0
- package/dist/esm/start.d.ts +4 -0
- package/dist/esm/start.js +4 -0
- package/dist/esm/test/proxy/types/rest.test.d.ts +4 -0
- package/dist/esm/test/proxy/types/rest.test.js +4 -0
- package/dist/esm/test/utils/pathTemplateParser.test.d.ts +4 -0
- package/dist/esm/test/utils/pathTemplateParser.test.js +4 -0
- package/index.ts +18 -3
- package/package.json +7 -3
- package/src/RepositoryWatcher.ts +5 -0
- package/src/api.ts +5 -0
- package/src/assetManager.ts +5 -0
- package/src/assets/routes.ts +5 -0
- package/src/attachments/routes.ts +5 -0
- package/src/authManager.ts +5 -0
- package/src/cacheManager.ts +5 -0
- package/src/clusterService.ts +5 -0
- package/src/codeGeneratorManager.ts +5 -0
- package/src/config/routes.ts +5 -0
- package/src/configManager.ts +5 -0
- package/src/containerManager.ts +5 -0
- package/src/definitionsManager.ts +5 -0
- package/src/filesystem/routes.ts +5 -0
- package/src/filesystemManager.ts +5 -0
- package/src/identities/routes.ts +5 -0
- package/src/instanceManager.ts +5 -0
- package/src/instances/routes.ts +5 -0
- package/src/middleware/cors.ts +5 -0
- package/src/middleware/kapeta.ts +5 -0
- package/src/middleware/stringBody.ts +5 -0
- package/src/networkManager.ts +5 -0
- package/src/operatorManager.ts +5 -0
- package/src/progressListener.ts +5 -0
- package/src/providerManager.ts +5 -0
- package/src/providers/routes.ts +5 -0
- package/src/proxy/routes.ts +5 -0
- package/src/proxy/types/rest.ts +5 -0
- package/src/proxy/types/web.ts +5 -0
- package/src/repositoryManager.ts +5 -0
- package/src/serviceManager.ts +5 -0
- package/src/socketManager.ts +5 -0
- package/src/storageService.ts +5 -0
- package/src/taskManager.ts +5 -0
- package/src/tasks/routes.ts +5 -0
- package/src/traffic/routes.ts +5 -0
- package/src/types.ts +5 -0
- package/src/utils/BlockInstanceRunner.ts +6 -1
- package/src/utils/DefaultProviderInstaller.ts +5 -0
- package/src/utils/LogData.ts +5 -0
- package/src/utils/commandLineUtils.ts +11 -0
- package/src/utils/pathTemplateParser.ts +5 -0
- package/src/utils/utils.ts +5 -0
- package/start.ts +5 -0
- package/test/proxy/types/rest.test.ts +5 -0
- package/test/utils/pathTemplateParser.test.ts +5 -0
@@ -1,2 +1,7 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
4
|
+
*/
|
1
5
|
export declare function hasCLI(): Promise<boolean>;
|
2
6
|
export declare function ensureCLI(): Promise<import("../taskManager").Task<void> | null>;
|
7
|
+
export declare function ensureCLICommands(): Promise<void>;
|
@@ -1,6 +1,10 @@
|
|
1
1
|
"use strict";
|
2
|
+
/**
|
3
|
+
* Copyright 2023 Kapeta Inc.
|
4
|
+
* SPDX-License-Identifier: BUSL-1.1
|
5
|
+
*/
|
2
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.ensureCLI = exports.hasCLI = void 0;
|
7
|
+
exports.ensureCLICommands = exports.ensureCLI = exports.hasCLI = void 0;
|
4
8
|
const nodejs_process_1 = require("@kapeta/nodejs-process");
|
5
9
|
const taskManager_1 = require("../taskManager");
|
6
10
|
async function hasCLI() {
|
@@ -21,3 +25,9 @@ async function ensureCLI() {
|
|
21
25
|
});
|
22
26
|
}
|
23
27
|
exports.ensureCLI = ensureCLI;
|
28
|
+
function ensureCLICommands() {
|
29
|
+
console.log('Run `kap init` to ensure default commands are installed');
|
30
|
+
const process = (0, nodejs_process_1.spawn)('kap', ['init'], { shell: true });
|
31
|
+
return process.wait();
|
32
|
+
}
|
33
|
+
exports.ensureCLICommands = ensureCLICommands;
|
package/dist/esm/start.d.ts
CHANGED
package/dist/esm/start.js
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
"use strict";
|
2
|
+
/**
|
3
|
+
* Copyright 2023 Kapeta Inc.
|
4
|
+
* SPDX-License-Identifier: BUSL-1.1
|
5
|
+
*/
|
2
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
7
|
const pathTemplateParser_1 = require("../../src/utils/pathTemplateParser");
|
4
8
|
describe('pathTemplateParser', () => {
|
package/index.ts
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
4
|
+
*/
|
5
|
+
|
1
6
|
import { clusterService } from './src/clusterService';
|
2
7
|
import { storageService } from './src/storageService';
|
3
8
|
import { serviceManager } from './src/serviceManager';
|
@@ -21,7 +26,8 @@ import APIRoutes from './src/api';
|
|
21
26
|
import { getBindHost } from './src/utils/utils';
|
22
27
|
import request from 'request';
|
23
28
|
import { repositoryManager } from './src/repositoryManager';
|
24
|
-
import {
|
29
|
+
import { taskManager } from './src/taskManager';
|
30
|
+
import { ensureCLI, ensureCLICommands } from './src/utils/commandLineUtils';
|
25
31
|
import { defaultProviderInstaller } from './src/utils/DefaultProviderInstaller';
|
26
32
|
import { authManager } from './src/authManager';
|
27
33
|
import { codeGeneratorManager } from './src/codeGeneratorManager';
|
@@ -179,7 +185,7 @@ export default {
|
|
179
185
|
storageService.put('cluster', 'host', host);
|
180
186
|
}
|
181
187
|
|
182
|
-
return new Promise(
|
188
|
+
return new Promise((resolve, reject) => {
|
183
189
|
if (!currentServer) {
|
184
190
|
reject(new Error(`Current server wasn't set`));
|
185
191
|
return;
|
@@ -196,11 +202,20 @@ export default {
|
|
196
202
|
|
197
203
|
currentServer.listen(port, bindHost, async () => {
|
198
204
|
try {
|
199
|
-
|
205
|
+
const ensureCLITask = await ensureCLI();
|
206
|
+
if (ensureCLITask) {
|
207
|
+
await taskManager.waitFor((t) => t === ensureCLITask);
|
208
|
+
}
|
200
209
|
} catch (e: any) {
|
201
210
|
console.error('Failed to install CLI.', e);
|
202
211
|
}
|
203
212
|
|
213
|
+
try {
|
214
|
+
await ensureCLICommands();
|
215
|
+
} catch (error) {
|
216
|
+
console.error('Failed to ensure default CLI commands', error);
|
217
|
+
}
|
218
|
+
|
204
219
|
try {
|
205
220
|
// Start installation process for all default providers
|
206
221
|
await repositoryManager.ensureDefaultProviders();
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@kapeta/local-cluster-service",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.25.0",
|
4
4
|
"description": "Manages configuration, ports and service discovery for locally running Kapeta systems",
|
5
5
|
"type": "commonjs",
|
6
6
|
"exports": {
|
@@ -24,8 +24,12 @@
|
|
24
24
|
"keywords": [
|
25
25
|
"kapeta"
|
26
26
|
],
|
27
|
-
"
|
28
|
-
"
|
27
|
+
"license": "BUSL-1.1",
|
28
|
+
"author": {
|
29
|
+
"email": "engineering@kapeta.com",
|
30
|
+
"name": "Kapeta",
|
31
|
+
"url": "https://kapeta.com"
|
32
|
+
},
|
29
33
|
"bugs": {
|
30
34
|
"url": "https://github.com/kapetacom/local-cluster-service/issues"
|
31
35
|
},
|
package/src/RepositoryWatcher.ts
CHANGED
package/src/api.ts
CHANGED
package/src/assetManager.ts
CHANGED
package/src/assets/routes.ts
CHANGED
package/src/authManager.ts
CHANGED
package/src/cacheManager.ts
CHANGED
package/src/clusterService.ts
CHANGED
package/src/config/routes.ts
CHANGED
package/src/configManager.ts
CHANGED
package/src/containerManager.ts
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
4
|
+
*/
|
5
|
+
|
1
6
|
import ClusterConfiguration, { DefinitionInfo } from '@kapeta/local-cluster-config';
|
2
7
|
import { parseKapetaUri, normalizeKapetaUri } from '@kapeta/nodejs-utils';
|
3
8
|
import { cacheManager, doCached } from './cacheManager';
|
package/src/filesystem/routes.ts
CHANGED
package/src/filesystemManager.ts
CHANGED
package/src/identities/routes.ts
CHANGED
package/src/instanceManager.ts
CHANGED
package/src/instances/routes.ts
CHANGED
package/src/middleware/cors.ts
CHANGED
package/src/middleware/kapeta.ts
CHANGED
package/src/networkManager.ts
CHANGED
package/src/operatorManager.ts
CHANGED
package/src/progressListener.ts
CHANGED
package/src/providerManager.ts
CHANGED
package/src/providers/routes.ts
CHANGED
package/src/proxy/routes.ts
CHANGED
package/src/proxy/types/rest.ts
CHANGED
package/src/proxy/types/web.ts
CHANGED
package/src/repositoryManager.ts
CHANGED
package/src/serviceManager.ts
CHANGED
package/src/socketManager.ts
CHANGED
package/src/storageService.ts
CHANGED
package/src/taskManager.ts
CHANGED
package/src/tasks/routes.ts
CHANGED
package/src/traffic/routes.ts
CHANGED
package/src/types.ts
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
4
|
+
*/
|
5
|
+
|
1
6
|
import FS from 'node:fs';
|
2
7
|
import ClusterConfig, { DefinitionInfo } from '@kapeta/local-cluster-config';
|
3
8
|
import { getBindHost, getBlockInstanceContainerName, readYML } from './utils';
|
@@ -153,7 +158,7 @@ export class BlockInstanceRunner {
|
|
153
158
|
if (!FS.existsSync(baseDir)) {
|
154
159
|
throw new Error(
|
155
160
|
`Local block not registered correctly - expected symlink here: ${baseDir}.\n` +
|
156
|
-
`Make sure you've run "
|
161
|
+
`Make sure you've run "kap registry link" in your local directory to connect it to Kapeta`
|
157
162
|
);
|
158
163
|
}
|
159
164
|
|
package/src/utils/LogData.ts
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2023 Kapeta Inc.
|
3
|
+
* SPDX-License-Identifier: BUSL-1.1
|
4
|
+
*/
|
5
|
+
|
1
6
|
import { spawn, hasApp } from '@kapeta/nodejs-process';
|
2
7
|
import { taskManager } from '../taskManager';
|
3
8
|
|
@@ -24,3 +29,9 @@ export async function ensureCLI() {
|
|
24
29
|
}
|
25
30
|
);
|
26
31
|
}
|
32
|
+
|
33
|
+
export function ensureCLICommands() {
|
34
|
+
console.log('Run `kap init` to ensure default commands are installed');
|
35
|
+
const process = spawn('kap', ['init'], { shell: true });
|
36
|
+
return process.wait();
|
37
|
+
}
|
package/src/utils/utils.ts
CHANGED