@friggframework/schemas 2.0.0-next.30

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.
@@ -0,0 +1,387 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schemas.friggframework.org/environment-config.schema.json",
4
+ "title": "Frigg Environment Configuration",
5
+ "description": "Schema for environment variable configuration and validation in Frigg applications.",
6
+ "type": "object",
7
+ "properties": {
8
+ "environments": {
9
+ "type": "object",
10
+ "description": "Environment-specific configurations",
11
+ "patternProperties": {
12
+ "^(development|staging|production|test)$": {
13
+ "type": "object",
14
+ "description": "Environment configuration",
15
+ "properties": {
16
+ "variables": {
17
+ "type": "object",
18
+ "description": "Environment variables for this environment",
19
+ "patternProperties": {
20
+ "^[A-Z][A-Z0-9_]*$": {
21
+ "type": "object",
22
+ "description": "Environment variable configuration",
23
+ "required": ["value"],
24
+ "properties": {
25
+ "value": {
26
+ "type": "string",
27
+ "description": "Variable value"
28
+ },
29
+ "required": {
30
+ "type": "boolean",
31
+ "description": "Whether this variable is required",
32
+ "default": true
33
+ },
34
+ "sensitive": {
35
+ "type": "boolean",
36
+ "description": "Whether this variable contains sensitive data",
37
+ "default": false
38
+ },
39
+ "description": {
40
+ "type": "string",
41
+ "description": "Human-readable description of the variable",
42
+ "maxLength": 500
43
+ },
44
+ "validation": {
45
+ "type": "object",
46
+ "description": "Validation rules for the variable",
47
+ "properties": {
48
+ "pattern": {
49
+ "type": "string",
50
+ "description": "Regex pattern for validation"
51
+ },
52
+ "minLength": {
53
+ "type": "integer",
54
+ "description": "Minimum length",
55
+ "minimum": 0
56
+ },
57
+ "maxLength": {
58
+ "type": "integer",
59
+ "description": "Maximum length",
60
+ "minimum": 1
61
+ },
62
+ "enum": {
63
+ "type": "array",
64
+ "description": "Allowed values",
65
+ "items": {"type": "string"},
66
+ "uniqueItems": true
67
+ },
68
+ "format": {
69
+ "type": "string",
70
+ "description": "Expected format",
71
+ "enum": ["url", "email", "uuid", "base64", "jwt", "arn"]
72
+ }
73
+ },
74
+ "additionalProperties": false
75
+ },
76
+ "defaultValue": {
77
+ "type": "string",
78
+ "description": "Default value if not provided"
79
+ }
80
+ },
81
+ "additionalProperties": false
82
+ }
83
+ },
84
+ "additionalProperties": false
85
+ },
86
+ "integrations": {
87
+ "type": "object",
88
+ "description": "Integration-specific environment requirements",
89
+ "patternProperties": {
90
+ "^[a-zA-Z][a-zA-Z0-9_-]*$": {
91
+ "type": "object",
92
+ "description": "Integration environment configuration",
93
+ "properties": {
94
+ "required": {
95
+ "type": "array",
96
+ "description": "Required environment variables for this integration",
97
+ "items": {
98
+ "type": "string",
99
+ "pattern": "^[A-Z][A-Z0-9_]*$"
100
+ },
101
+ "uniqueItems": true
102
+ },
103
+ "optional": {
104
+ "type": "array",
105
+ "description": "Optional environment variables for this integration",
106
+ "items": {
107
+ "type": "string",
108
+ "pattern": "^[A-Z][A-Z0-9_]*$"
109
+ },
110
+ "uniqueItems": true
111
+ },
112
+ "prefix": {
113
+ "type": "string",
114
+ "description": "Common prefix for integration variables",
115
+ "pattern": "^[A-Z][A-Z0-9_]*$"
116
+ }
117
+ },
118
+ "additionalProperties": false
119
+ }
120
+ },
121
+ "additionalProperties": false
122
+ },
123
+ "validation": {
124
+ "type": "object",
125
+ "description": "Environment-level validation rules",
126
+ "properties": {
127
+ "strict": {
128
+ "type": "boolean",
129
+ "description": "Whether to enforce strict validation",
130
+ "default": false
131
+ },
132
+ "allowUndefined": {
133
+ "type": "boolean",
134
+ "description": "Whether to allow undefined variables",
135
+ "default": true
136
+ }
137
+ },
138
+ "additionalProperties": false
139
+ }
140
+ },
141
+ "additionalProperties": false
142
+ }
143
+ },
144
+ "additionalProperties": false
145
+ },
146
+ "global": {
147
+ "type": "object",
148
+ "description": "Global environment configuration",
149
+ "properties": {
150
+ "maskingPatterns": {
151
+ "type": "array",
152
+ "description": "Patterns for masking sensitive values in logs",
153
+ "items": {
154
+ "type": "object",
155
+ "required": ["pattern", "replacement"],
156
+ "properties": {
157
+ "pattern": {
158
+ "type": "string",
159
+ "description": "Regex pattern to match sensitive data"
160
+ },
161
+ "replacement": {
162
+ "type": "string",
163
+ "description": "Replacement string for matched patterns",
164
+ "default": "***"
165
+ },
166
+ "description": {
167
+ "type": "string",
168
+ "description": "Description of what this pattern matches"
169
+ }
170
+ },
171
+ "additionalProperties": false
172
+ }
173
+ },
174
+ "encryptionKeys": {
175
+ "type": "object",
176
+ "description": "Encryption key configuration",
177
+ "properties": {
178
+ "kmsKeyId": {
179
+ "type": "string",
180
+ "description": "AWS KMS key ID for encryption",
181
+ "pattern": "^[a-f0-9-]+$"
182
+ },
183
+ "algorithm": {
184
+ "type": "string",
185
+ "description": "Encryption algorithm",
186
+ "enum": ["AES-256-GCM", "AES-256-CBC"],
187
+ "default": "AES-256-GCM"
188
+ }
189
+ },
190
+ "additionalProperties": false
191
+ },
192
+ "auditLog": {
193
+ "type": "object",
194
+ "description": "Audit logging configuration",
195
+ "properties": {
196
+ "enabled": {
197
+ "type": "boolean",
198
+ "description": "Whether audit logging is enabled",
199
+ "default": true
200
+ },
201
+ "logChanges": {
202
+ "type": "boolean",
203
+ "description": "Whether to log environment variable changes",
204
+ "default": true
205
+ },
206
+ "logAccess": {
207
+ "type": "boolean",
208
+ "description": "Whether to log environment variable access",
209
+ "default": false
210
+ },
211
+ "retention": {
212
+ "type": "integer",
213
+ "description": "Audit log retention period in days",
214
+ "minimum": 1,
215
+ "maximum": 2557,
216
+ "default": 90
217
+ }
218
+ },
219
+ "additionalProperties": false
220
+ }
221
+ },
222
+ "additionalProperties": false
223
+ },
224
+ "templates": {
225
+ "type": "object",
226
+ "description": "Environment variable templates for different integration types",
227
+ "patternProperties": {
228
+ "^[a-zA-Z][a-zA-Z0-9_-]*$": {
229
+ "type": "object",
230
+ "description": "Template for specific integration type",
231
+ "properties": {
232
+ "variables": {
233
+ "type": "array",
234
+ "description": "Required environment variables for this template",
235
+ "items": {
236
+ "type": "object",
237
+ "required": ["name", "description"],
238
+ "properties": {
239
+ "name": {
240
+ "type": "string",
241
+ "description": "Variable name",
242
+ "pattern": "^[A-Z][A-Z0-9_]*$"
243
+ },
244
+ "description": {
245
+ "type": "string",
246
+ "description": "Variable description"
247
+ },
248
+ "required": {
249
+ "type": "boolean",
250
+ "description": "Whether variable is required",
251
+ "default": true
252
+ },
253
+ "sensitive": {
254
+ "type": "boolean",
255
+ "description": "Whether variable is sensitive",
256
+ "default": false
257
+ },
258
+ "example": {
259
+ "type": "string",
260
+ "description": "Example value for documentation"
261
+ }
262
+ },
263
+ "additionalProperties": false
264
+ }
265
+ },
266
+ "description": {
267
+ "type": "string",
268
+ "description": "Template description"
269
+ }
270
+ },
271
+ "additionalProperties": false
272
+ }
273
+ },
274
+ "additionalProperties": false
275
+ }
276
+ },
277
+ "additionalProperties": false,
278
+ "examples": [
279
+ {
280
+ "environments": {
281
+ "development": {
282
+ "variables": {
283
+ "DATABASE_URL": {
284
+ "value": "mongodb://localhost:27017/frigg-dev",
285
+ "required": true,
286
+ "sensitive": true,
287
+ "description": "MongoDB connection string",
288
+ "validation": {
289
+ "format": "url",
290
+ "pattern": "^mongodb://"
291
+ }
292
+ },
293
+ "JWT_SECRET": {
294
+ "value": "dev-secret-key",
295
+ "required": true,
296
+ "sensitive": true,
297
+ "description": "JWT signing secret",
298
+ "validation": {
299
+ "minLength": 32
300
+ }
301
+ },
302
+ "LOG_LEVEL": {
303
+ "value": "debug",
304
+ "required": false,
305
+ "description": "Application log level",
306
+ "validation": {
307
+ "enum": ["error", "warn", "info", "debug", "trace"]
308
+ },
309
+ "defaultValue": "info"
310
+ }
311
+ },
312
+ "integrations": {
313
+ "hubspot": {
314
+ "required": ["HUBSPOT_CLIENT_ID", "HUBSPOT_CLIENT_SECRET"],
315
+ "optional": ["HUBSPOT_SCOPE"],
316
+ "prefix": "HUBSPOT"
317
+ }
318
+ }
319
+ },
320
+ "production": {
321
+ "variables": {
322
+ "DATABASE_URL": {
323
+ "value": "${AWS_SSM:/frigg/prod/database-url}",
324
+ "required": true,
325
+ "sensitive": true,
326
+ "description": "MongoDB connection string from SSM"
327
+ },
328
+ "JWT_SECRET": {
329
+ "value": "${AWS_SSM:/frigg/prod/jwt-secret}",
330
+ "required": true,
331
+ "sensitive": true,
332
+ "description": "JWT signing secret from SSM"
333
+ }
334
+ },
335
+ "validation": {
336
+ "strict": true,
337
+ "allowUndefined": false
338
+ }
339
+ }
340
+ },
341
+ "global": {
342
+ "maskingPatterns": [
343
+ {
344
+ "pattern": "(?i)(password|secret|key|token)=([^\\s&]+)",
345
+ "replacement": "$1=***",
346
+ "description": "Mask password and secret parameters"
347
+ }
348
+ ],
349
+ "encryptionKeys": {
350
+ "kmsKeyId": "12345678-1234-1234-1234-123456789abc",
351
+ "algorithm": "AES-256-GCM"
352
+ },
353
+ "auditLog": {
354
+ "enabled": true,
355
+ "logChanges": true,
356
+ "retention": 90
357
+ }
358
+ },
359
+ "templates": {
360
+ "oauth2": {
361
+ "variables": [
362
+ {
363
+ "name": "CLIENT_ID",
364
+ "description": "OAuth2 client identifier",
365
+ "required": true,
366
+ "example": "your-client-id"
367
+ },
368
+ {
369
+ "name": "CLIENT_SECRET",
370
+ "description": "OAuth2 client secret",
371
+ "required": true,
372
+ "sensitive": true,
373
+ "example": "your-client-secret"
374
+ },
375
+ {
376
+ "name": "REDIRECT_URI",
377
+ "description": "OAuth2 redirect URI",
378
+ "required": true,
379
+ "example": "https://your-app.com/auth/callback"
380
+ }
381
+ ],
382
+ "description": "Standard OAuth2 integration template"
383
+ }
384
+ }
385
+ }
386
+ ]
387
+ }
@@ -0,0 +1,304 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schemas.friggframework.org/integration-definition.schema.json",
4
+ "title": "Frigg Integration Definition",
5
+ "description": "Schema for defining a Frigg integration including configuration, options, and display properties.",
6
+ "type": "object",
7
+ "required": ["name", "version"],
8
+ "properties": {
9
+ "name": {
10
+ "type": "string",
11
+ "description": "Integration name identifier",
12
+ "pattern": "^[a-zA-Z][a-zA-Z0-9_-]*$",
13
+ "minLength": 1,
14
+ "maxLength": 100
15
+ },
16
+ "version": {
17
+ "type": "string",
18
+ "description": "Integration version following semantic versioning",
19
+ "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?$"
20
+ },
21
+ "supportedVersions": {
22
+ "type": "array",
23
+ "description": "List of supported Frigg framework versions",
24
+ "items": {
25
+ "type": "string",
26
+ "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?$"
27
+ },
28
+ "uniqueItems": true
29
+ },
30
+ "events": {
31
+ "type": "array",
32
+ "description": "List of events this integration can emit or handle",
33
+ "items": {
34
+ "type": "string",
35
+ "pattern": "^[a-zA-Z][a-zA-Z0-9._-]*$"
36
+ },
37
+ "uniqueItems": true
38
+ },
39
+ "options": {
40
+ "type": "object",
41
+ "description": "Integration configuration options",
42
+ "properties": {
43
+ "type": {
44
+ "type": "string",
45
+ "description": "Integration type classification",
46
+ "enum": ["api", "webhook", "sync", "transform", "custom"]
47
+ },
48
+ "hasUserConfig": {
49
+ "type": "boolean",
50
+ "description": "Whether integration requires user-specific configuration",
51
+ "default": false
52
+ },
53
+ "isMany": {
54
+ "type": "boolean",
55
+ "description": "Whether multiple instances can exist per user",
56
+ "default": false
57
+ },
58
+ "requiresNewEntity": {
59
+ "type": "boolean",
60
+ "description": "Whether integration requires creating new entities",
61
+ "default": true
62
+ },
63
+ "display": {
64
+ "type": "object",
65
+ "description": "Display properties for UI representation",
66
+ "required": ["name", "description"],
67
+ "properties": {
68
+ "name": {
69
+ "type": "string",
70
+ "description": "Human-readable display name",
71
+ "minLength": 1,
72
+ "maxLength": 200
73
+ },
74
+ "description": {
75
+ "type": "string",
76
+ "description": "Integration description",
77
+ "minLength": 1,
78
+ "maxLength": 1000
79
+ },
80
+ "detailsUrl": {
81
+ "type": "string",
82
+ "description": "URL to integration documentation or details",
83
+ "format": "uri"
84
+ },
85
+ "icon": {
86
+ "type": "string",
87
+ "description": "Icon identifier or URL for the integration",
88
+ "minLength": 1
89
+ },
90
+ "category": {
91
+ "type": "string",
92
+ "description": "Integration category for grouping",
93
+ "enum": [
94
+ "CRM", "Marketing", "Communication", "ECommerce",
95
+ "Finance", "Analytics", "Storage", "Development",
96
+ "Productivity", "Social", "Other"
97
+ ]
98
+ },
99
+ "tags": {
100
+ "type": "array",
101
+ "description": "Tags for filtering and search",
102
+ "items": {
103
+ "type": "string",
104
+ "pattern": "^[a-zA-Z0-9_-]+$"
105
+ },
106
+ "uniqueItems": true
107
+ }
108
+ },
109
+ "additionalProperties": false
110
+ }
111
+ },
112
+ "additionalProperties": false
113
+ },
114
+ "model": {
115
+ "type": "object",
116
+ "description": "Integration data model configuration",
117
+ "properties": {
118
+ "entities": {
119
+ "type": "array",
120
+ "description": "Entity types managed by this integration",
121
+ "items": {
122
+ "type": "string"
123
+ },
124
+ "uniqueItems": true
125
+ },
126
+ "userId": {
127
+ "type": "string",
128
+ "description": "User identifier field"
129
+ },
130
+ "status": {
131
+ "type": "string",
132
+ "description": "Integration status",
133
+ "enum": ["active", "inactive", "error", "pending", "disabled"]
134
+ },
135
+ "config": {
136
+ "type": "object",
137
+ "description": "Integration-specific configuration object"
138
+ },
139
+ "messages": {
140
+ "type": "object",
141
+ "description": "Integration messaging configuration",
142
+ "properties": {
143
+ "errors": {
144
+ "type": "array",
145
+ "description": "Error messages",
146
+ "items": {"type": "string"}
147
+ },
148
+ "warnings": {
149
+ "type": "array",
150
+ "description": "Warning messages",
151
+ "items": {"type": "string"}
152
+ },
153
+ "info": {
154
+ "type": "array",
155
+ "description": "Informational messages",
156
+ "items": {"type": "string"}
157
+ },
158
+ "logs": {
159
+ "type": "array",
160
+ "description": "Log messages",
161
+ "items": {"type": "string"}
162
+ }
163
+ },
164
+ "additionalProperties": false
165
+ }
166
+ },
167
+ "additionalProperties": true
168
+ },
169
+ "capabilities": {
170
+ "type": "object",
171
+ "description": "Integration capabilities and features",
172
+ "properties": {
173
+ "auth": {
174
+ "type": "array",
175
+ "description": "Supported authentication methods",
176
+ "items": {
177
+ "type": "string",
178
+ "enum": ["oauth2", "api-key", "basic", "token", "custom"]
179
+ },
180
+ "uniqueItems": true
181
+ },
182
+ "webhooks": {
183
+ "type": "boolean",
184
+ "description": "Supports webhook functionality",
185
+ "default": false
186
+ },
187
+ "realtime": {
188
+ "type": "boolean",
189
+ "description": "Supports real-time data updates",
190
+ "default": false
191
+ },
192
+ "sync": {
193
+ "type": "object",
194
+ "description": "Data synchronization capabilities",
195
+ "properties": {
196
+ "bidirectional": {
197
+ "type": "boolean",
198
+ "description": "Supports bidirectional sync",
199
+ "default": false
200
+ },
201
+ "incremental": {
202
+ "type": "boolean",
203
+ "description": "Supports incremental sync",
204
+ "default": false
205
+ },
206
+ "batchSize": {
207
+ "type": "integer",
208
+ "description": "Maximum batch size for sync operations",
209
+ "minimum": 1,
210
+ "maximum": 10000
211
+ }
212
+ },
213
+ "additionalProperties": false
214
+ }
215
+ },
216
+ "additionalProperties": false
217
+ },
218
+ "requirements": {
219
+ "type": "object",
220
+ "description": "Integration requirements and dependencies",
221
+ "properties": {
222
+ "environment": {
223
+ "type": "object",
224
+ "description": "Required environment variables",
225
+ "patternProperties": {
226
+ "^[A-Z][A-Z0-9_]*$": {
227
+ "type": "object",
228
+ "properties": {
229
+ "required": {"type": "boolean", "default": true},
230
+ "description": {"type": "string"},
231
+ "example": {"type": "string"}
232
+ },
233
+ "required": ["description"]
234
+ }
235
+ }
236
+ },
237
+ "permissions": {
238
+ "type": "array",
239
+ "description": "Required permissions or scopes",
240
+ "items": {"type": "string"},
241
+ "uniqueItems": true
242
+ },
243
+ "dependencies": {
244
+ "type": "object",
245
+ "description": "Package dependencies",
246
+ "patternProperties": {
247
+ "^[a-zA-Z0-9@/_-]+$": {
248
+ "type": "string"
249
+ }
250
+ }
251
+ }
252
+ },
253
+ "additionalProperties": false
254
+ }
255
+ },
256
+ "additionalProperties": false,
257
+ "examples": [
258
+ {
259
+ "name": "hubspot",
260
+ "version": "2.0.0",
261
+ "supportedVersions": ["2.0.0", "1.9.0"],
262
+ "events": ["contact.created", "deal.updated"],
263
+ "options": {
264
+ "type": "api",
265
+ "hasUserConfig": true,
266
+ "isMany": false,
267
+ "requiresNewEntity": true,
268
+ "display": {
269
+ "name": "HubSpot CRM",
270
+ "description": "Integrate with HubSpot CRM for contacts, deals, and marketing automation",
271
+ "detailsUrl": "https://docs.frigg.dev/integrations/hubspot",
272
+ "icon": "hubspot",
273
+ "category": "CRM",
274
+ "tags": ["crm", "marketing", "sales"]
275
+ }
276
+ },
277
+ "capabilities": {
278
+ "auth": ["oauth2"],
279
+ "webhooks": true,
280
+ "realtime": false,
281
+ "sync": {
282
+ "bidirectional": true,
283
+ "incremental": true,
284
+ "batchSize": 100
285
+ }
286
+ },
287
+ "requirements": {
288
+ "environment": {
289
+ "HUBSPOT_CLIENT_ID": {
290
+ "required": true,
291
+ "description": "HubSpot OAuth client ID",
292
+ "example": "your-client-id"
293
+ },
294
+ "HUBSPOT_CLIENT_SECRET": {
295
+ "required": true,
296
+ "description": "HubSpot OAuth client secret",
297
+ "example": "your-client-secret"
298
+ }
299
+ },
300
+ "permissions": ["contacts", "deals", "companies"]
301
+ }
302
+ }
303
+ ]
304
+ }