@kya-os/create-mcpi-app 1.7.37 → 1.7.38-canary.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.
- package/ARCHITECTURE_ANALYSIS.md +392 -0
- package/DEPRECATION_WARNINGS_ANALYSIS.md +192 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/helpers/config-builder.d.ts +1 -1
- package/dist/helpers/config-builder.d.ts.map +1 -1
- package/dist/helpers/config-builder.js +1 -1
- package/dist/helpers/config-builder.js.map +1 -1
- package/dist/helpers/create.d.ts +1 -1
- package/dist/helpers/create.d.ts.map +1 -1
- package/dist/helpers/generate-config.d.ts.map +1 -1
- package/dist/helpers/generate-config.js.map +1 -1
- package/dist/utils/fetch-remote-config.d.ts +74 -0
- package/dist/utils/fetch-remote-config.d.ts.map +1 -0
- package/dist/utils/fetch-remote-config.js +109 -0
- package/dist/utils/fetch-remote-config.js.map +1 -0
- package/package.json +9 -10
- package/src/helpers/config-builder.ts +1 -1
- package/src/helpers/create.ts +1 -1
- package/src/helpers/generate-config.ts +0 -1
- package/src/utils/__tests__/fetch-remote-config.test.ts +271 -0
- package/src/utils/fetch-remote-config.ts +179 -0
- package/.turbo/turbo-build.log +0 -4
- package/.turbo/turbo-test$colon$coverage.log +0 -168
- package/.turbo/turbo-test.log +0 -306
- package/dist/helpers/__tests__/config-builder.spec.d.ts +0 -8
- package/dist/helpers/__tests__/config-builder.spec.d.ts.map +0 -1
- package/dist/helpers/__tests__/config-builder.spec.js +0 -182
- package/dist/helpers/__tests__/config-builder.spec.js.map +0 -1
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Configuration Builder Utilities
|
|
3
|
-
*
|
|
4
|
-
* Validates that config builders generate correct configurations
|
|
5
|
-
* and handle remote fetching correctly.
|
|
6
|
-
*/
|
|
7
|
-
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
8
|
-
import { buildBaseConfig, buildConfigWithRemote } from '../config-builder.js';
|
|
9
|
-
describe('buildBaseConfig', () => {
|
|
10
|
-
it('should generate valid base config with defaults', () => {
|
|
11
|
-
const env = {};
|
|
12
|
-
const config = buildBaseConfig(env);
|
|
13
|
-
expect(config.environment).toBe('development');
|
|
14
|
-
expect(config.identity?.enabled).toBe(true);
|
|
15
|
-
expect(config.proofing?.enabled).toBe(true);
|
|
16
|
-
expect(config.delegation?.enabled).toBe(true);
|
|
17
|
-
expect(config.audit?.enabled).toBe(true);
|
|
18
|
-
});
|
|
19
|
-
it('should use environment variables when provided', () => {
|
|
20
|
-
const env = {
|
|
21
|
-
MCPI_ENV: 'production',
|
|
22
|
-
AGENTSHIELD_API_URL: 'https://custom.example.com',
|
|
23
|
-
AGENTSHIELD_API_KEY: 'custom-key'
|
|
24
|
-
};
|
|
25
|
-
const config = buildBaseConfig(env);
|
|
26
|
-
expect(config.environment).toBe('production');
|
|
27
|
-
expect(config.identity?.environment).toBe('production');
|
|
28
|
-
expect(config.proofing?.batchQueue?.destinations?.[0].apiUrl).toBe('https://custom.example.com');
|
|
29
|
-
expect(config.delegation?.verifier?.apiUrl).toBe('https://custom.example.com');
|
|
30
|
-
});
|
|
31
|
-
it('should include all required config sections', () => {
|
|
32
|
-
const env = {};
|
|
33
|
-
const config = buildBaseConfig(env);
|
|
34
|
-
expect(config).toHaveProperty('environment');
|
|
35
|
-
expect(config).toHaveProperty('identity');
|
|
36
|
-
expect(config).toHaveProperty('proofing');
|
|
37
|
-
expect(config).toHaveProperty('delegation');
|
|
38
|
-
expect(config).toHaveProperty('audit');
|
|
39
|
-
expect(config).toHaveProperty('session');
|
|
40
|
-
});
|
|
41
|
-
it('should set debug mode based on environment', () => {
|
|
42
|
-
const devConfig = buildBaseConfig({ MCPI_ENV: 'development' });
|
|
43
|
-
const prodConfig = buildBaseConfig({ MCPI_ENV: 'production' });
|
|
44
|
-
expect(devConfig.proofing?.batchQueue?.debug).toBe(true);
|
|
45
|
-
expect(prodConfig.proofing?.batchQueue?.debug).toBe(false);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
describe('buildConfigWithRemote', () => {
|
|
49
|
-
let mockFetch;
|
|
50
|
-
let mockCache;
|
|
51
|
-
beforeEach(() => {
|
|
52
|
-
mockFetch = vi.fn();
|
|
53
|
-
mockCache = {
|
|
54
|
-
get: vi.fn(),
|
|
55
|
-
set: vi.fn()
|
|
56
|
-
};
|
|
57
|
-
});
|
|
58
|
-
it('should use remote config when API key is provided', async () => {
|
|
59
|
-
const remoteConfig = {
|
|
60
|
-
environment: 'production',
|
|
61
|
-
identity: { enabled: true, environment: 'production' }
|
|
62
|
-
};
|
|
63
|
-
vi.mocked(mockCache.get).mockResolvedValue(null);
|
|
64
|
-
mockFetch.mockResolvedValue({
|
|
65
|
-
ok: true,
|
|
66
|
-
json: async () => ({ success: true, data: remoteConfig })
|
|
67
|
-
});
|
|
68
|
-
const options = {
|
|
69
|
-
env: {
|
|
70
|
-
AGENTSHIELD_API_KEY: 'test-key',
|
|
71
|
-
AGENTSHIELD_API_URL: 'https://kya.vouched.id'
|
|
72
|
-
},
|
|
73
|
-
fetchProvider: mockFetch,
|
|
74
|
-
cache: mockCache,
|
|
75
|
-
agentDid: 'did:key:test'
|
|
76
|
-
};
|
|
77
|
-
const config = await buildConfigWithRemote(options);
|
|
78
|
-
expect(config).toEqual(remoteConfig);
|
|
79
|
-
expect(mockFetch).toHaveBeenCalled();
|
|
80
|
-
});
|
|
81
|
-
it('should fallback to local config when remote fetch fails', async () => {
|
|
82
|
-
vi.mocked(mockCache.get).mockResolvedValue(null);
|
|
83
|
-
mockFetch.mockResolvedValue({
|
|
84
|
-
ok: false,
|
|
85
|
-
status: 500
|
|
86
|
-
});
|
|
87
|
-
const options = {
|
|
88
|
-
env: {
|
|
89
|
-
AGENTSHIELD_API_KEY: 'test-key',
|
|
90
|
-
MCPI_ENV: 'production'
|
|
91
|
-
},
|
|
92
|
-
fetchProvider: mockFetch,
|
|
93
|
-
cache: mockCache
|
|
94
|
-
};
|
|
95
|
-
const config = await buildConfigWithRemote(options);
|
|
96
|
-
expect(config.environment).toBe('production');
|
|
97
|
-
expect(config).toHaveProperty('identity');
|
|
98
|
-
expect(config).toHaveProperty('proofing');
|
|
99
|
-
});
|
|
100
|
-
it('should fallback to local config when API key not provided', async () => {
|
|
101
|
-
const options = {
|
|
102
|
-
env: {
|
|
103
|
-
MCPI_ENV: 'development'
|
|
104
|
-
},
|
|
105
|
-
fetchProvider: mockFetch,
|
|
106
|
-
cache: mockCache
|
|
107
|
-
};
|
|
108
|
-
const config = await buildConfigWithRemote(options);
|
|
109
|
-
expect(config.environment).toBe('development');
|
|
110
|
-
expect(mockFetch).not.toHaveBeenCalled();
|
|
111
|
-
});
|
|
112
|
-
it('should fallback to local config when fetch provider not provided', async () => {
|
|
113
|
-
const options = {
|
|
114
|
-
env: {
|
|
115
|
-
AGENTSHIELD_API_KEY: 'test-key',
|
|
116
|
-
MCPI_ENV: 'development'
|
|
117
|
-
},
|
|
118
|
-
cache: mockCache
|
|
119
|
-
// fetchProvider not provided
|
|
120
|
-
};
|
|
121
|
-
const config = await buildConfigWithRemote(options);
|
|
122
|
-
expect(config.environment).toBe('development');
|
|
123
|
-
expect(mockFetch).not.toHaveBeenCalled();
|
|
124
|
-
});
|
|
125
|
-
it('should use projectId when provided', async () => {
|
|
126
|
-
const remoteConfig = {
|
|
127
|
-
environment: 'production'
|
|
128
|
-
};
|
|
129
|
-
vi.mocked(mockCache.get).mockResolvedValue(null);
|
|
130
|
-
mockFetch.mockResolvedValue({
|
|
131
|
-
ok: true,
|
|
132
|
-
json: async () => ({ success: true, data: remoteConfig })
|
|
133
|
-
});
|
|
134
|
-
const options = {
|
|
135
|
-
env: {
|
|
136
|
-
AGENTSHIELD_API_KEY: 'test-key',
|
|
137
|
-
AGENTSHIELD_PROJECT_ID: 'test-project'
|
|
138
|
-
},
|
|
139
|
-
fetchProvider: mockFetch,
|
|
140
|
-
cache: mockCache
|
|
141
|
-
};
|
|
142
|
-
const config = await buildConfigWithRemote(options);
|
|
143
|
-
expect(config).toEqual(remoteConfig);
|
|
144
|
-
// Verify fetch was called with projectId endpoint
|
|
145
|
-
expect(mockFetch).toHaveBeenCalled();
|
|
146
|
-
});
|
|
147
|
-
it('should handle cache hit from remote config', async () => {
|
|
148
|
-
const cachedConfig = {
|
|
149
|
-
environment: 'production',
|
|
150
|
-
identity: { enabled: true, environment: 'production' }
|
|
151
|
-
};
|
|
152
|
-
vi.mocked(mockCache.get).mockResolvedValue(JSON.stringify({
|
|
153
|
-
config: cachedConfig,
|
|
154
|
-
expiresAt: Date.now() + 60000
|
|
155
|
-
}));
|
|
156
|
-
const options = {
|
|
157
|
-
env: {
|
|
158
|
-
AGENTSHIELD_API_KEY: 'test-key',
|
|
159
|
-
AGENTSHIELD_PROJECT_ID: 'test-project'
|
|
160
|
-
},
|
|
161
|
-
fetchProvider: mockFetch,
|
|
162
|
-
cache: mockCache
|
|
163
|
-
};
|
|
164
|
-
const config = await buildConfigWithRemote(options);
|
|
165
|
-
expect(config).toEqual(cachedConfig);
|
|
166
|
-
expect(mockFetch).not.toHaveBeenCalled();
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
describe('Environment variable parsing', () => {
|
|
170
|
-
it('should handle different environment variable names', () => {
|
|
171
|
-
const config1 = buildBaseConfig({ MCPI_ENV: 'production' });
|
|
172
|
-
const config2 = buildBaseConfig({ ENVIRONMENT: 'production' });
|
|
173
|
-
expect(config1.environment).toBe('production');
|
|
174
|
-
expect(config2.environment).toBe('production');
|
|
175
|
-
});
|
|
176
|
-
it('should default to development when no env var provided', () => {
|
|
177
|
-
const config = buildBaseConfig({});
|
|
178
|
-
expect(config.environment).toBe('development');
|
|
179
|
-
expect(config.identity?.environment).toBe('development');
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
//# sourceMappingURL=config-builder.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-builder.spec.js","sourceRoot":"","sources":["../../../src/helpers/__tests__/config-builder.spec.ts"],"names":[],"mappings":"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"}
|