@konker.dev/config-o-tron 0.0.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/LICENSE +15 -0
- package/README.md +131 -0
- package/dist/api.d.ts +24 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +44 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +267 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/delete.d.ts +22 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +105 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/delete.test.d.ts +2 -0
- package/dist/commands/delete.test.d.ts.map +1 -0
- package/dist/commands/delete.test.js +165 -0
- package/dist/commands/delete.test.js.map +1 -0
- package/dist/commands/export.d.ts +31 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +117 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/export.test.d.ts +2 -0
- package/dist/commands/export.test.d.ts.map +1 -0
- package/dist/commands/export.test.js +173 -0
- package/dist/commands/export.test.js.map +1 -0
- package/dist/commands/index.d.ts +10 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +10 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/list.d.ts +37 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +107 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/list.test.d.ts +2 -0
- package/dist/commands/list.test.d.ts.map +1 -0
- package/dist/commands/list.test.js +275 -0
- package/dist/commands/list.test.js.map +1 -0
- package/dist/commands/snapshot.d.ts +67 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +261 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/commands/snapshot.test.d.ts +2 -0
- package/dist/commands/snapshot.test.d.ts.map +1 -0
- package/dist/commands/snapshot.test.js +527 -0
- package/dist/commands/snapshot.test.js.map +1 -0
- package/dist/commands/upsert.d.ts +33 -0
- package/dist/commands/upsert.d.ts.map +1 -0
- package/dist/commands/upsert.js +98 -0
- package/dist/commands/upsert.js.map +1 -0
- package/dist/commands/upsert.test.d.ts +2 -0
- package/dist/commands/upsert.test.d.ts.map +1 -0
- package/dist/commands/upsert.test.js +184 -0
- package/dist/commands/upsert.test.js.map +1 -0
- package/dist/commands/validate.d.ts +23 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +138 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/validate.test.d.ts +2 -0
- package/dist/commands/validate.test.d.ts.map +1 -0
- package/dist/commands/validate.test.js +210 -0
- package/dist/commands/validate.test.js.map +1 -0
- package/dist/config.d.ts +75 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +212 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +107 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +362 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/flatten.d.ts +84 -0
- package/dist/lib/flatten.d.ts.map +1 -0
- package/dist/lib/flatten.js +158 -0
- package/dist/lib/flatten.js.map +1 -0
- package/dist/lib/flatten.test.d.ts +2 -0
- package/dist/lib/flatten.test.d.ts.map +1 -0
- package/dist/lib/flatten.test.js +230 -0
- package/dist/lib/flatten.test.js.map +1 -0
- package/dist/lib/format.d.ts +41 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +182 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/format.test.d.ts +2 -0
- package/dist/lib/format.test.d.ts.map +1 -0
- package/dist/lib/format.test.js +317 -0
- package/dist/lib/format.test.js.map +1 -0
- package/dist/lib/index.d.ts +8 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +8 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/merge.d.ts +42 -0
- package/dist/lib/merge.d.ts.map +1 -0
- package/dist/lib/merge.js +167 -0
- package/dist/lib/merge.js.map +1 -0
- package/dist/lib/merge.test.d.ts +2 -0
- package/dist/lib/merge.test.d.ts.map +1 -0
- package/dist/lib/merge.test.js +218 -0
- package/dist/lib/merge.test.js.map +1 -0
- package/dist/lib/redact.d.ts +29 -0
- package/dist/lib/redact.d.ts.map +1 -0
- package/dist/lib/redact.js +77 -0
- package/dist/lib/redact.js.map +1 -0
- package/dist/lib/redact.test.d.ts +2 -0
- package/dist/lib/redact.test.d.ts.map +1 -0
- package/dist/lib/redact.test.js +192 -0
- package/dist/lib/redact.test.js.map +1 -0
- package/dist/providers/AwsSsmProvider.d.ts +3 -0
- package/dist/providers/AwsSsmProvider.d.ts.map +1 -0
- package/dist/providers/AwsSsmProvider.js +230 -0
- package/dist/providers/AwsSsmProvider.js.map +1 -0
- package/dist/providers/AwsSsmProvider.test.d.ts +5 -0
- package/dist/providers/AwsSsmProvider.test.d.ts.map +1 -0
- package/dist/providers/AwsSsmProvider.test.js +200 -0
- package/dist/providers/AwsSsmProvider.test.js.map +1 -0
- package/dist/providers/MockProvider.d.ts +21 -0
- package/dist/providers/MockProvider.d.ts.map +1 -0
- package/dist/providers/MockProvider.js +118 -0
- package/dist/providers/MockProvider.js.map +1 -0
- package/dist/providers/MockProvider.test.d.ts +2 -0
- package/dist/providers/MockProvider.test.d.ts.map +1 -0
- package/dist/providers/MockProvider.test.js +166 -0
- package/dist/providers/MockProvider.test.js.map +1 -0
- package/dist/providers/Provider.d.ts +95 -0
- package/dist/providers/Provider.d.ts.map +1 -0
- package/dist/providers/Provider.js +49 -0
- package/dist/providers/Provider.js.map +1 -0
- package/dist/providers/Provider.test.d.ts +2 -0
- package/dist/providers/Provider.test.d.ts.map +1 -0
- package/dist/providers/Provider.test.js +136 -0
- package/dist/providers/Provider.test.js.map +1 -0
- package/dist/providers/guards.d.ts +13 -0
- package/dist/providers/guards.d.ts.map +1 -0
- package/dist/providers/guards.js +60 -0
- package/dist/providers/guards.js.map +1 -0
- package/dist/providers/guards.test.d.ts +2 -0
- package/dist/providers/guards.test.d.ts.map +1 -0
- package/dist/providers/guards.test.js +84 -0
- package/dist/providers/guards.test.js.map +1 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/registry.d.ts +27 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +50 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/registry.test.d.ts +5 -0
- package/dist/providers/registry.test.d.ts.map +1 -0
- package/dist/providers/registry.test.js +89 -0
- package/dist/providers/registry.test.js.map +1 -0
- package/dist/schema/index.d.ts +8 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +8 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/loader.d.ts +21 -0
- package/dist/schema/loader.d.ts.map +1 -0
- package/dist/schema/loader.js +68 -0
- package/dist/schema/loader.js.map +1 -0
- package/dist/schema/loader.test.d.ts +2 -0
- package/dist/schema/loader.test.d.ts.map +1 -0
- package/dist/schema/loader.test.js +111 -0
- package/dist/schema/loader.test.js.map +1 -0
- package/dist/schema/parser.d.ts +17 -0
- package/dist/schema/parser.d.ts.map +1 -0
- package/dist/schema/parser.js +55 -0
- package/dist/schema/parser.js.map +1 -0
- package/dist/schema/parser.test.d.ts +2 -0
- package/dist/schema/parser.test.d.ts.map +1 -0
- package/dist/schema/parser.test.js +62 -0
- package/dist/schema/parser.test.js.map +1 -0
- package/dist/schema/resolver.d.ts +16 -0
- package/dist/schema/resolver.d.ts.map +1 -0
- package/dist/schema/resolver.js +41 -0
- package/dist/schema/resolver.js.map +1 -0
- package/dist/schema/resolver.test.d.ts +2 -0
- package/dist/schema/resolver.test.d.ts.map +1 -0
- package/dist/schema/resolver.test.js +77 -0
- package/dist/schema/resolver.test.js.map +1 -0
- package/dist/schema/validator.d.ts +16 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +21 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/schema/validator.test.d.ts +2 -0
- package/dist/schema/validator.test.d.ts.map +1 -0
- package/dist/schema/validator.test.js +40 -0
- package/dist/schema/validator.test.js.map +1 -0
- package/dist/test/fixtures/index.d.ts +39 -0
- package/dist/test/fixtures/index.d.ts.map +1 -0
- package/dist/test/fixtures/index.js +85 -0
- package/dist/test/fixtures/index.js.map +1 -0
- package/dist/test/fixtures/schema.basic.d.ts +16 -0
- package/dist/test/fixtures/schema.basic.d.ts.map +1 -0
- package/dist/test/fixtures/schema.basic.js +16 -0
- package/dist/test/fixtures/schema.basic.js.map +1 -0
- package/dist/test/fixtures/schema.basic.zod.d.ts +58 -0
- package/dist/test/fixtures/schema.basic.zod.d.ts.map +1 -0
- package/dist/test/fixtures/schema.basic.zod.js +16 -0
- package/dist/test/fixtures/schema.basic.zod.js.map +1 -0
- package/dist/validation/effect.d.ts +3 -0
- package/dist/validation/effect.d.ts.map +1 -0
- package/dist/validation/effect.js +368 -0
- package/dist/validation/effect.js.map +1 -0
- package/dist/validation/effect.test.d.ts +2 -0
- package/dist/validation/effect.test.d.ts.map +1 -0
- package/dist/validation/effect.test.js +137 -0
- package/dist/validation/effect.test.js.map +1 -0
- package/dist/validation/hash.d.ts +2 -0
- package/dist/validation/hash.d.ts.map +1 -0
- package/dist/validation/hash.js +27 -0
- package/dist/validation/hash.js.map +1 -0
- package/dist/validation/hash.test.d.ts +2 -0
- package/dist/validation/hash.test.d.ts.map +1 -0
- package/dist/validation/hash.test.js +25 -0
- package/dist/validation/hash.test.js.map +1 -0
- package/dist/validation/index.d.ts +7 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +11 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/parse.d.ts +7 -0
- package/dist/validation/parse.d.ts.map +1 -0
- package/dist/validation/parse.js +44 -0
- package/dist/validation/parse.js.map +1 -0
- package/dist/validation/parse.test.d.ts +2 -0
- package/dist/validation/parse.test.d.ts.map +1 -0
- package/dist/validation/parse.test.js +47 -0
- package/dist/validation/parse.test.js.map +1 -0
- package/dist/validation/types.d.ts +33 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +2 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/zod.d.ts +3 -0
- package/dist/validation/zod.d.ts.map +1 -0
- package/dist/validation/zod.js +326 -0
- package/dist/validation/zod.js.map +1 -0
- package/dist/validation/zod.test.d.ts +2 -0
- package/dist/validation/zod.test.d.ts.map +1 -0
- package/dist/validation/zod.test.js +161 -0
- package/dist/validation/zod.test.js.map +1 -0
- package/package.json +242 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MockProvider Tests
|
|
3
|
+
*/
|
|
4
|
+
import * as Effect from 'effect/Effect';
|
|
5
|
+
import { beforeEach, describe, expect, it } from 'vitest';
|
|
6
|
+
import { createMockProvider, mockProvider } from './MockProvider.js';
|
|
7
|
+
describe('MockProvider', () => {
|
|
8
|
+
const ctx = {
|
|
9
|
+
prefix: '/config-o-tron',
|
|
10
|
+
service: 'test-service',
|
|
11
|
+
env: 'dev',
|
|
12
|
+
};
|
|
13
|
+
describe('mockProvider (default instance)', () => {
|
|
14
|
+
it('should have expected capabilities', () => {
|
|
15
|
+
expect(mockProvider.capabilities.secureWrite).toBe(true);
|
|
16
|
+
expect(mockProvider.capabilities.encryptionVerification).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
it('should have name mock', () => {
|
|
19
|
+
expect(mockProvider.name).toBe('mock');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('createMockProvider', () => {
|
|
23
|
+
it('should create provider with empty storage', async () => {
|
|
24
|
+
const provider = createMockProvider();
|
|
25
|
+
const result = await Effect.runPromise(provider.fetch(ctx));
|
|
26
|
+
expect(result).toEqual({});
|
|
27
|
+
});
|
|
28
|
+
it('should create provider with initial data', async () => {
|
|
29
|
+
const storageKey = `${ctx.prefix}/${ctx.env}/${ctx.service}`;
|
|
30
|
+
const provider = createMockProvider({
|
|
31
|
+
[storageKey]: {
|
|
32
|
+
'database.host': 'localhost',
|
|
33
|
+
'database.port': '5432',
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
const result = await Effect.runPromise(provider.fetch(ctx));
|
|
37
|
+
expect(result).toEqual({
|
|
38
|
+
'database.host': 'localhost',
|
|
39
|
+
'database.port': '5432',
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
it('should expose storage for inspection', () => {
|
|
43
|
+
const provider = createMockProvider();
|
|
44
|
+
expect(provider.storage).toBeDefined();
|
|
45
|
+
expect(provider.storage.size).toBe(0);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('fetch', () => {
|
|
49
|
+
let provider;
|
|
50
|
+
beforeEach(() => {
|
|
51
|
+
provider = createMockProvider();
|
|
52
|
+
});
|
|
53
|
+
it('should fetch empty object when no data', async () => {
|
|
54
|
+
const result = await Effect.runPromise(provider.fetch(ctx));
|
|
55
|
+
expect(result).toEqual({});
|
|
56
|
+
});
|
|
57
|
+
it('should fetch service-specific data', async () => {
|
|
58
|
+
const ctx1 = { ...ctx, service: 'service-1' };
|
|
59
|
+
const ctx2 = { ...ctx, service: 'service-2' };
|
|
60
|
+
await Effect.runPromise(provider.upsert(ctx1, 'key1', 'value1'));
|
|
61
|
+
await Effect.runPromise(provider.upsert(ctx2, 'key2', 'value2'));
|
|
62
|
+
const result1 = await Effect.runPromise(provider.fetch(ctx1));
|
|
63
|
+
const result2 = await Effect.runPromise(provider.fetch(ctx2));
|
|
64
|
+
expect(result1).toEqual({ key1: 'value1' });
|
|
65
|
+
expect(result2).toEqual({ key2: 'value2' });
|
|
66
|
+
});
|
|
67
|
+
it('should fetch env-specific data', async () => {
|
|
68
|
+
const devCtx = { ...ctx, env: 'dev' };
|
|
69
|
+
const prodCtx = { ...ctx, env: 'prod' };
|
|
70
|
+
await Effect.runPromise(provider.upsert(devCtx, 'url', 'http://dev.local'));
|
|
71
|
+
await Effect.runPromise(provider.upsert(prodCtx, 'url', 'https://prod.example.com'));
|
|
72
|
+
const devResult = await Effect.runPromise(provider.fetch(devCtx));
|
|
73
|
+
const prodResult = await Effect.runPromise(provider.fetch(prodCtx));
|
|
74
|
+
expect(devResult).toEqual({ url: 'http://dev.local' });
|
|
75
|
+
expect(prodResult).toEqual({ url: 'https://prod.example.com' });
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('upsert', () => {
|
|
79
|
+
let provider;
|
|
80
|
+
beforeEach(() => {
|
|
81
|
+
provider = createMockProvider();
|
|
82
|
+
});
|
|
83
|
+
it('should add new key', async () => {
|
|
84
|
+
await Effect.runPromise(provider.upsert(ctx, 'new.key', 'new-value'));
|
|
85
|
+
const result = await Effect.runPromise(provider.fetch(ctx));
|
|
86
|
+
expect(result['new.key']).toBe('new-value');
|
|
87
|
+
});
|
|
88
|
+
it('should update existing key', async () => {
|
|
89
|
+
await Effect.runPromise(provider.upsert(ctx, 'existing.key', 'old-value'));
|
|
90
|
+
await Effect.runPromise(provider.upsert(ctx, 'existing.key', 'new-value'));
|
|
91
|
+
const result = await Effect.runPromise(provider.fetch(ctx));
|
|
92
|
+
expect(result['existing.key']).toBe('new-value');
|
|
93
|
+
});
|
|
94
|
+
it('should preserve other keys when upserting', async () => {
|
|
95
|
+
await Effect.runPromise(provider.upsert(ctx, 'key1', 'value1'));
|
|
96
|
+
await Effect.runPromise(provider.upsert(ctx, 'key2', 'value2'));
|
|
97
|
+
await Effect.runPromise(provider.upsert(ctx, 'key1', 'updated'));
|
|
98
|
+
const result = await Effect.runPromise(provider.fetch(ctx));
|
|
99
|
+
expect(result).toEqual({
|
|
100
|
+
key1: 'updated',
|
|
101
|
+
key2: 'value2',
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe('delete', () => {
|
|
106
|
+
let provider;
|
|
107
|
+
beforeEach(() => {
|
|
108
|
+
provider = createMockProvider();
|
|
109
|
+
});
|
|
110
|
+
it('should delete existing key', async () => {
|
|
111
|
+
await Effect.runPromise(provider.upsert(ctx, 'key1', 'value1'));
|
|
112
|
+
await Effect.runPromise(provider.upsert(ctx, 'key2', 'value2'));
|
|
113
|
+
await Effect.runPromise(provider.delete(ctx, 'key1'));
|
|
114
|
+
const result = await Effect.runPromise(provider.fetch(ctx));
|
|
115
|
+
expect(result).toEqual({ key2: 'value2' });
|
|
116
|
+
});
|
|
117
|
+
it('should fail when deleting non-existent key', async () => {
|
|
118
|
+
await expect(Effect.runPromise(provider.delete(ctx, 'nonexistent'))).rejects.toThrow();
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe('verifyEncryption', () => {
|
|
122
|
+
it('should return SecureString by default', async () => {
|
|
123
|
+
const provider = createMockProvider();
|
|
124
|
+
await Effect.runPromise(provider.upsert(ctx, 'secret.key', 'secret-value'));
|
|
125
|
+
const result = await Effect.runPromise(provider.verifyEncryption(ctx, 'secret.key'));
|
|
126
|
+
expect(result).toBe('SecureString');
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('checkGuards', () => {
|
|
130
|
+
it('should no-op when guards are empty', async () => {
|
|
131
|
+
const provider = createMockProvider();
|
|
132
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, {}))).resolves.toBeUndefined();
|
|
133
|
+
});
|
|
134
|
+
it('should no-op when guards are undefined', async () => {
|
|
135
|
+
const provider = createMockProvider();
|
|
136
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, undefined))).resolves.toBeUndefined();
|
|
137
|
+
});
|
|
138
|
+
it('should fail when guards are not an object', async () => {
|
|
139
|
+
const provider = createMockProvider();
|
|
140
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, 'not-an-object'))).rejects.toThrowError();
|
|
141
|
+
});
|
|
142
|
+
it('should fail when guard values have invalid types', async () => {
|
|
143
|
+
const provider = createMockProvider();
|
|
144
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, { prefix: 123 }))).rejects.toThrowError();
|
|
145
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, { service: 456 }))).rejects.toThrowError();
|
|
146
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, { env: 789 }))).rejects.toThrowError();
|
|
147
|
+
});
|
|
148
|
+
it('should fail when guard values do not match context', async () => {
|
|
149
|
+
const provider = createMockProvider();
|
|
150
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, { env: 'prod' }))).rejects.toThrowError();
|
|
151
|
+
});
|
|
152
|
+
it('should fail when prefix does not match', async () => {
|
|
153
|
+
const provider = createMockProvider();
|
|
154
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, { prefix: '/other' }))).rejects.toThrowError();
|
|
155
|
+
});
|
|
156
|
+
it('should fail when service does not match', async () => {
|
|
157
|
+
const provider = createMockProvider();
|
|
158
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, { service: 'other-service' }))).rejects.toThrowError();
|
|
159
|
+
});
|
|
160
|
+
it('should pass when guard values match context', async () => {
|
|
161
|
+
const provider = createMockProvider();
|
|
162
|
+
await expect(Effect.runPromise(provider.checkGuards(ctx, { env: 'dev', service: ctx.service }))).resolves.toBeUndefined();
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
//# sourceMappingURL=MockProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockProvider.test.js","sourceRoot":"","sources":["../../src/providers/MockProvider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the contract for configuration providers (AWS SSM, AWS Secrets Manager, Vault, etc.)
|
|
5
|
+
*/
|
|
6
|
+
import type { Effect } from 'effect';
|
|
7
|
+
import type { ProviderError } from '../errors.js';
|
|
8
|
+
/**
|
|
9
|
+
* Context for provider operations
|
|
10
|
+
*/
|
|
11
|
+
export type ProviderContext = {
|
|
12
|
+
readonly prefix: string;
|
|
13
|
+
readonly service: string;
|
|
14
|
+
readonly env: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Key-value map using canonical key paths (dot notation) to raw provider strings
|
|
18
|
+
* Example: { "database.url": "postgres://...", "api.timeoutMs": "6500" }
|
|
19
|
+
*/
|
|
20
|
+
export type ProviderKV = Record<string, string>;
|
|
21
|
+
/**
|
|
22
|
+
* Encryption type for stored values
|
|
23
|
+
*/
|
|
24
|
+
export declare const EncryptionType: {
|
|
25
|
+
readonly SECURE_STRING: "SecureString";
|
|
26
|
+
readonly STRING: "String";
|
|
27
|
+
readonly UNKNOWN: "Unknown";
|
|
28
|
+
};
|
|
29
|
+
export type EncryptionTypeValue = (typeof EncryptionType)[keyof typeof EncryptionType];
|
|
30
|
+
/**
|
|
31
|
+
* Provider capabilities
|
|
32
|
+
*/
|
|
33
|
+
export type ProviderCapabilities = {
|
|
34
|
+
readonly secureWrite?: boolean;
|
|
35
|
+
readonly encryptionVerification?: boolean;
|
|
36
|
+
readonly transactions?: boolean;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Provider interface
|
|
40
|
+
*
|
|
41
|
+
* All providers must implement fetch, upsert, and delete.
|
|
42
|
+
* Optional: verifyEncryption if capabilities.encryptionVerification is true.
|
|
43
|
+
*/
|
|
44
|
+
export type Provider = {
|
|
45
|
+
readonly name: string;
|
|
46
|
+
readonly capabilities: ProviderCapabilities;
|
|
47
|
+
/**
|
|
48
|
+
* Optional provider-specific guard check
|
|
49
|
+
*/
|
|
50
|
+
readonly checkGuards?: (ctx: ProviderContext, guards?: unknown) => Effect.Effect<void, ProviderError>;
|
|
51
|
+
/**
|
|
52
|
+
* Fetch all key-value pairs for the given context
|
|
53
|
+
* Returns canonical key paths (dot notation) mapped to string values
|
|
54
|
+
*/
|
|
55
|
+
readonly fetch: (ctx: ProviderContext) => Effect.Effect<ProviderKV, ProviderError>;
|
|
56
|
+
/**
|
|
57
|
+
* Upsert a single key-value pair
|
|
58
|
+
* keyPath is in canonical dot notation (e.g., "database.url")
|
|
59
|
+
* value is the string-encoded value
|
|
60
|
+
*/
|
|
61
|
+
readonly upsert: (ctx: ProviderContext, keyPath: string, value: string) => Effect.Effect<void, ProviderError>;
|
|
62
|
+
/**
|
|
63
|
+
* Delete a single key
|
|
64
|
+
* keyPath is in canonical dot notation
|
|
65
|
+
*/
|
|
66
|
+
readonly delete: (ctx: ProviderContext, keyPath: string) => Effect.Effect<void, ProviderError>;
|
|
67
|
+
/**
|
|
68
|
+
* Verify encryption type for a key (optional)
|
|
69
|
+
* Only available if capabilities.encryptionVerification is true
|
|
70
|
+
*/
|
|
71
|
+
readonly verifyEncryption?: (ctx: ProviderContext, keyPath: string) => Effect.Effect<EncryptionTypeValue, ProviderError>;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Convert canonical dot path to SSM slash path
|
|
75
|
+
* Example: "database.url" -> "database/url"
|
|
76
|
+
*/
|
|
77
|
+
export declare function dotToSlashPath(dotPath: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* Convert SSM slash path to canonical dot path
|
|
80
|
+
* Example: "database/url" -> "database.url"
|
|
81
|
+
*/
|
|
82
|
+
export declare function slashToDotPath(slashPath: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* Build the full SSM parameter path
|
|
85
|
+
* Example: buildFullPath({ prefix: "/config-o-tron", service: "api", env: "prod" }, "database.url")
|
|
86
|
+
* -> "/config-o-tron/prod/api/database/url"
|
|
87
|
+
*/
|
|
88
|
+
export declare function buildFullPath(ctx: ProviderContext, keyPath: string): string;
|
|
89
|
+
/**
|
|
90
|
+
* Extract the key path from a full SSM parameter path
|
|
91
|
+
* Example: extractKeyPath("/config-o-tron/prod/api/database/url", { prefix: "/config-o-tron", service: "api", env: "prod" })
|
|
92
|
+
* -> "database.url"
|
|
93
|
+
*/
|
|
94
|
+
export declare function extractKeyPath(fullPath: string, ctx: ProviderContext): string;
|
|
95
|
+
//# sourceMappingURL=Provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../src/providers/Provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEvF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAEtG;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEnF;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAE9G;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAE/F;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;CACxD,CAAC;AAMF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,MAAM,CAO7E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encryption type for stored values
|
|
3
|
+
*/
|
|
4
|
+
export const EncryptionType = {
|
|
5
|
+
SECURE_STRING: 'SecureString',
|
|
6
|
+
STRING: 'String',
|
|
7
|
+
UNKNOWN: 'Unknown',
|
|
8
|
+
};
|
|
9
|
+
// --------------------------------------------------------------------------
|
|
10
|
+
// Utility Functions
|
|
11
|
+
// --------------------------------------------------------------------------
|
|
12
|
+
/**
|
|
13
|
+
* Convert canonical dot path to SSM slash path
|
|
14
|
+
* Example: "database.url" -> "database/url"
|
|
15
|
+
*/
|
|
16
|
+
export function dotToSlashPath(dotPath) {
|
|
17
|
+
return dotPath.replace(/\./g, '/');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Convert SSM slash path to canonical dot path
|
|
21
|
+
* Example: "database/url" -> "database.url"
|
|
22
|
+
*/
|
|
23
|
+
export function slashToDotPath(slashPath) {
|
|
24
|
+
return slashPath.replace(/\//g, '.');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build the full SSM parameter path
|
|
28
|
+
* Example: buildFullPath({ prefix: "/config-o-tron", service: "api", env: "prod" }, "database.url")
|
|
29
|
+
* -> "/config-o-tron/prod/api/database/url"
|
|
30
|
+
*/
|
|
31
|
+
export function buildFullPath(ctx, keyPath) {
|
|
32
|
+
const prefix = ctx.prefix.endsWith('/') ? ctx.prefix.slice(0, -1) : ctx.prefix;
|
|
33
|
+
const slashKeyPath = dotToSlashPath(keyPath);
|
|
34
|
+
return `${prefix}/${ctx.env}/${ctx.service}/${slashKeyPath}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Extract the key path from a full SSM parameter path
|
|
38
|
+
* Example: extractKeyPath("/config-o-tron/prod/api/database/url", { prefix: "/config-o-tron", service: "api", env: "prod" })
|
|
39
|
+
* -> "database.url"
|
|
40
|
+
*/
|
|
41
|
+
export function extractKeyPath(fullPath, ctx) {
|
|
42
|
+
const prefix = ctx.prefix.endsWith('/') ? ctx.prefix.slice(0, -1) : ctx.prefix;
|
|
43
|
+
const basePrefix = `${prefix}/${ctx.env}/${ctx.service}/`;
|
|
44
|
+
if (fullPath.startsWith(basePrefix)) {
|
|
45
|
+
return slashToDotPath(fullPath.slice(basePrefix.length));
|
|
46
|
+
}
|
|
47
|
+
return slashToDotPath(fullPath);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=Provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../src/providers/Provider.ts"],"names":[],"mappings":"AA4BA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa,EAAE,cAAc;IAC7B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC;AAyDX,6EAA6E;AAC7E,oBAAoB;AACpB,6EAA6E;AAE7E;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAoB,EAAE,OAAe;IACjE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/E,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,YAAY,EAAE,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,GAAoB;IACnE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/E,MAAM,UAAU,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC;IAC1D,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provider.test.d.ts","sourceRoot":"","sources":["../../src/providers/Provider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Utility Tests
|
|
3
|
+
*/
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { buildFullPath, dotToSlashPath, EncryptionType, extractKeyPath, slashToDotPath, } from './Provider.js';
|
|
6
|
+
describe('Provider', () => {
|
|
7
|
+
describe('EncryptionType', () => {
|
|
8
|
+
it('should have correct values', () => {
|
|
9
|
+
expect(EncryptionType.SECURE_STRING).toBe('SecureString');
|
|
10
|
+
expect(EncryptionType.STRING).toBe('String');
|
|
11
|
+
expect(EncryptionType.UNKNOWN).toBe('Unknown');
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
describe('dotToSlashPath', () => {
|
|
15
|
+
it('should convert single dot to slash', () => {
|
|
16
|
+
expect(dotToSlashPath('database.url')).toBe('database/url');
|
|
17
|
+
});
|
|
18
|
+
it('should convert multiple dots to slashes', () => {
|
|
19
|
+
expect(dotToSlashPath('database.connection.url')).toBe('database/connection/url');
|
|
20
|
+
});
|
|
21
|
+
it('should handle single segment (no dots)', () => {
|
|
22
|
+
expect(dotToSlashPath('database')).toBe('database');
|
|
23
|
+
});
|
|
24
|
+
it('should handle empty string', () => {
|
|
25
|
+
expect(dotToSlashPath('')).toBe('');
|
|
26
|
+
});
|
|
27
|
+
it('should handle deep nesting', () => {
|
|
28
|
+
expect(dotToSlashPath('a.b.c.d.e.f')).toBe('a/b/c/d/e/f');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('slashToDotPath', () => {
|
|
32
|
+
it('should convert single slash to dot', () => {
|
|
33
|
+
expect(slashToDotPath('database/url')).toBe('database.url');
|
|
34
|
+
});
|
|
35
|
+
it('should convert multiple slashes to dots', () => {
|
|
36
|
+
expect(slashToDotPath('database/connection/url')).toBe('database.connection.url');
|
|
37
|
+
});
|
|
38
|
+
it('should handle single segment (no slashes)', () => {
|
|
39
|
+
expect(slashToDotPath('database')).toBe('database');
|
|
40
|
+
});
|
|
41
|
+
it('should handle empty string', () => {
|
|
42
|
+
expect(slashToDotPath('')).toBe('');
|
|
43
|
+
});
|
|
44
|
+
it('should handle deep nesting', () => {
|
|
45
|
+
expect(slashToDotPath('a/b/c/d/e/f')).toBe('a.b.c.d.e.f');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('buildFullPath', () => {
|
|
49
|
+
const ctx = {
|
|
50
|
+
prefix: '/config-o-tron',
|
|
51
|
+
service: 'api',
|
|
52
|
+
env: 'prod',
|
|
53
|
+
};
|
|
54
|
+
it('should build full path for simple key', () => {
|
|
55
|
+
expect(buildFullPath(ctx, 'database.url')).toBe('/config-o-tron/prod/api/database/url');
|
|
56
|
+
});
|
|
57
|
+
it('should build full path for nested key', () => {
|
|
58
|
+
expect(buildFullPath(ctx, 'database.connection.url')).toBe('/config-o-tron/prod/api/database/connection/url');
|
|
59
|
+
});
|
|
60
|
+
it('should build full path for single segment key', () => {
|
|
61
|
+
expect(buildFullPath(ctx, 'timeout')).toBe('/config-o-tron/prod/api/timeout');
|
|
62
|
+
});
|
|
63
|
+
it('should handle different context values', () => {
|
|
64
|
+
const customCtx = {
|
|
65
|
+
prefix: '/custom',
|
|
66
|
+
service: 'myapp',
|
|
67
|
+
env: 'staging',
|
|
68
|
+
};
|
|
69
|
+
expect(buildFullPath(customCtx, 'api.key')).toBe('/custom/staging/myapp/api/key');
|
|
70
|
+
});
|
|
71
|
+
it('should handle context with empty prefix', () => {
|
|
72
|
+
const ctxNoPrefix = {
|
|
73
|
+
prefix: '',
|
|
74
|
+
service: 'api',
|
|
75
|
+
env: 'prod',
|
|
76
|
+
};
|
|
77
|
+
expect(buildFullPath(ctxNoPrefix, 'database.url')).toBe('/prod/api/database/url');
|
|
78
|
+
});
|
|
79
|
+
it('should trim trailing slashes in prefix', () => {
|
|
80
|
+
const ctxWithSlash = {
|
|
81
|
+
prefix: '/config-o-tron/',
|
|
82
|
+
service: 'api',
|
|
83
|
+
env: 'prod',
|
|
84
|
+
};
|
|
85
|
+
expect(buildFullPath(ctxWithSlash, 'database.url')).toBe('/config-o-tron/prod/api/database/url');
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('extractKeyPath', () => {
|
|
89
|
+
const ctx = {
|
|
90
|
+
prefix: '/config-o-tron',
|
|
91
|
+
service: 'api',
|
|
92
|
+
env: 'prod',
|
|
93
|
+
};
|
|
94
|
+
it('should extract key path from full path', () => {
|
|
95
|
+
expect(extractKeyPath('/config-o-tron/prod/api/database/url', ctx)).toBe('database.url');
|
|
96
|
+
});
|
|
97
|
+
it('should extract nested key path', () => {
|
|
98
|
+
expect(extractKeyPath('/config-o-tron/prod/api/database/connection/url', ctx)).toBe('database.connection.url');
|
|
99
|
+
});
|
|
100
|
+
it('should extract single segment key path', () => {
|
|
101
|
+
expect(extractKeyPath('/config-o-tron/prod/api/timeout', ctx)).toBe('timeout');
|
|
102
|
+
});
|
|
103
|
+
it('should handle path that does not match prefix', () => {
|
|
104
|
+
// When path doesn't start with the expected prefix, it just converts slashes to dots
|
|
105
|
+
expect(extractKeyPath('/other/path/value', ctx)).toBe('.other.path.value');
|
|
106
|
+
});
|
|
107
|
+
it('should handle different context values', () => {
|
|
108
|
+
const customCtx = {
|
|
109
|
+
prefix: '/custom',
|
|
110
|
+
service: 'myapp',
|
|
111
|
+
env: 'staging',
|
|
112
|
+
};
|
|
113
|
+
expect(extractKeyPath('/custom/staging/myapp/api/key', customCtx)).toBe('api.key');
|
|
114
|
+
});
|
|
115
|
+
it('should trim trailing slashes in prefix when extracting', () => {
|
|
116
|
+
const ctxWithSlash = {
|
|
117
|
+
prefix: '/config-o-tron/',
|
|
118
|
+
service: 'api',
|
|
119
|
+
env: 'prod',
|
|
120
|
+
};
|
|
121
|
+
expect(extractKeyPath('/config-o-tron/prod/api/database/url', ctxWithSlash)).toBe('database.url');
|
|
122
|
+
});
|
|
123
|
+
it('should handle non-matching paths with trailing slash prefix', () => {
|
|
124
|
+
const ctxWithSlash = {
|
|
125
|
+
prefix: '/config-o-tron/',
|
|
126
|
+
service: 'api',
|
|
127
|
+
env: 'prod',
|
|
128
|
+
};
|
|
129
|
+
expect(extractKeyPath('/other/path/value', ctxWithSlash)).toBe('.other.path.value');
|
|
130
|
+
});
|
|
131
|
+
it('should handle empty key path', () => {
|
|
132
|
+
expect(extractKeyPath('/config-o-tron/prod/api/', ctx)).toBe('');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=Provider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provider.test.js","sourceRoot":"","sources":["../../src/providers/Provider.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EAEd,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1D,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,MAAM,GAAG,GAAoB;YAC3B,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,MAAM;SACZ,CAAC;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,SAAS,GAAoB;gBACjC,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,OAAO;gBAChB,GAAG,EAAE,SAAS;aACf,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,WAAW,GAAoB;gBACnC,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,MAAM;aACZ,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,YAAY,GAAoB;gBACpC,MAAM,EAAE,iBAAiB;gBACzB,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,MAAM;aACZ,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAoB;YAC3B,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,MAAM;SACZ,CAAC;QAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,cAAc,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,cAAc,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,cAAc,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,qFAAqF;YACrF,MAAM,CAAC,cAAc,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,SAAS,GAAoB;gBACjC,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,OAAO;gBAChB,GAAG,EAAE,SAAS;aACf,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,+BAA+B,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,YAAY,GAAoB;gBACpC,MAAM,EAAE,iBAAiB;gBACzB,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,MAAM;aACZ,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,YAAY,GAAoB;gBACpC,MAAM,EAAE,iBAAiB;gBACzB,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,MAAM;aACZ,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,cAAc,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Guards
|
|
3
|
+
*
|
|
4
|
+
* Utilities for resolving and invoking provider guard checks.
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import { type ProviderGuardsConfig } from '../config.js';
|
|
8
|
+
import { type ProviderError } from '../errors.js';
|
|
9
|
+
import { type Provider, type ProviderContext } from './Provider.js';
|
|
10
|
+
export declare function getProviderGuardConfig(providerName: string, providerGuards: ProviderGuardsConfig): unknown | undefined;
|
|
11
|
+
export declare function shouldIgnoreProviderGuards(): boolean;
|
|
12
|
+
export declare function checkProviderGuards(provider: Provider, ctx: ProviderContext, providerGuards: ProviderGuardsConfig): Effect.Effect<void, ProviderError>;
|
|
13
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/providers/guards.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAoBpE,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,oBAAoB,GACnC,OAAO,GAAG,SAAS,CAkBrB;AAMD,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,oBAAoB,GACnC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAepC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Guards
|
|
3
|
+
*
|
|
4
|
+
* Utilities for resolving and invoking provider guard checks.
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import {} from '../config.js';
|
|
8
|
+
import {} from '../errors.js';
|
|
9
|
+
import {} from './Provider.js';
|
|
10
|
+
// --------------------------------------------------------------------------
|
|
11
|
+
// Helpers
|
|
12
|
+
// --------------------------------------------------------------------------
|
|
13
|
+
function normalizeProviderName(name) {
|
|
14
|
+
return name.toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
function isGuardOverrideEnabled(value) {
|
|
17
|
+
if (!value)
|
|
18
|
+
return false;
|
|
19
|
+
const normalized = value.trim().toLowerCase();
|
|
20
|
+
return normalized === '1' || normalized === 'true';
|
|
21
|
+
}
|
|
22
|
+
// --------------------------------------------------------------------------
|
|
23
|
+
// Guard Resolution
|
|
24
|
+
// --------------------------------------------------------------------------
|
|
25
|
+
export function getProviderGuardConfig(providerName, providerGuards) {
|
|
26
|
+
const direct = providerGuards[providerName];
|
|
27
|
+
if (direct !== undefined) {
|
|
28
|
+
return direct;
|
|
29
|
+
}
|
|
30
|
+
const normalized = normalizeProviderName(providerName);
|
|
31
|
+
const normalizedDirect = providerGuards[normalized];
|
|
32
|
+
if (normalizedDirect !== undefined) {
|
|
33
|
+
return normalizedDirect;
|
|
34
|
+
}
|
|
35
|
+
const matchedKey = Object.keys(providerGuards).find((key) => normalizeProviderName(key) === normalized);
|
|
36
|
+
if (matchedKey) {
|
|
37
|
+
return providerGuards[matchedKey];
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
// --------------------------------------------------------------------------
|
|
42
|
+
// Guard Invocation
|
|
43
|
+
// --------------------------------------------------------------------------
|
|
44
|
+
export function shouldIgnoreProviderGuards() {
|
|
45
|
+
return isGuardOverrideEnabled(process.env.CONFIG_O_TRON_IGNORE_PROVIDER_GUARDS);
|
|
46
|
+
}
|
|
47
|
+
export function checkProviderGuards(provider, ctx, providerGuards) {
|
|
48
|
+
if (!provider.checkGuards) {
|
|
49
|
+
return Effect.void;
|
|
50
|
+
}
|
|
51
|
+
if (shouldIgnoreProviderGuards()) {
|
|
52
|
+
return Effect.void;
|
|
53
|
+
}
|
|
54
|
+
const guardConfig = getProviderGuardConfig(provider.name, providerGuards);
|
|
55
|
+
if (guardConfig === undefined) {
|
|
56
|
+
return Effect.void;
|
|
57
|
+
}
|
|
58
|
+
return provider.checkGuards(ctx, guardConfig);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/providers/guards.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAA6B,MAAM,cAAc,CAAC;AACzD,OAAO,EAAsB,MAAM,cAAc,CAAC;AAClD,OAAO,EAAuC,MAAM,eAAe,CAAC;AAEpE,6EAA6E;AAC7E,UAAU;AACV,6EAA6E;AAE7E,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAyB;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,CAAC;AACrD,CAAC;AAED,6EAA6E;AAC7E,mBAAmB;AACnB,6EAA6E;AAE7E,MAAM,UAAU,sBAAsB,CACpC,YAAoB,EACpB,cAAoC;IAEpC,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC;IACxG,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,6EAA6E;AAC7E,mBAAmB;AACnB,6EAA6E;AAE7E,MAAM,UAAU,0BAA0B;IACxC,OAAO,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAkB,EAClB,GAAoB,EACpB,cAAoC;IAEpC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,0BAA0B,EAAE,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1E,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,OAAO,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.test.d.ts","sourceRoot":"","sources":["../../src/providers/guards.test.ts"],"names":[],"mappings":""}
|