@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.
- package/LICENSE.md +9 -0
- package/README.md +377 -0
- package/index.js +173 -0
- package/package.json +43 -0
- package/schemas/api-module-definition.schema.json +358 -0
- package/schemas/app-definition.schema.json +276 -0
- package/schemas/core-models.schema.json +445 -0
- package/schemas/environment-config.schema.json +387 -0
- package/schemas/integration-definition.schema.json +304 -0
- package/schemas/serverless-config.schema.json +393 -0
|
@@ -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
|
+
}
|