@aifabrix/builder 2.32.2 → 2.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/.cursor/rules/project-rules.mdc +8 -0
  2. package/README.md +36 -8
  3. package/bin/aifabrix.js +6 -8
  4. package/integration/hubspot/README.md +8 -7
  5. package/integration/hubspot/companies.json +2048 -0
  6. package/integration/hubspot/create-hubspot.js +665 -0
  7. package/integration/hubspot/{hubspot-deploy-company.json → hubspot-datasource-company.json} +1 -1
  8. package/integration/hubspot/{hubspot-deploy-contact.json → hubspot-datasource-contact.json} +1 -1
  9. package/integration/hubspot/{hubspot-deploy-deal.json → hubspot-datasource-deal.json} +1 -1
  10. package/integration/hubspot/hubspot-deploy.json +832 -81
  11. package/integration/hubspot/hubspot-system.json +99 -0
  12. package/integration/hubspot/test-artifacts/wizard-hubspot-credential-real.yaml +20 -0
  13. package/integration/hubspot/test-artifacts/wizard-hubspot-env-vars.yaml +9 -0
  14. package/integration/hubspot/test-artifacts/wizard-invalid-add-datasource.yaml +5 -0
  15. package/integration/hubspot/test-artifacts/wizard-invalid-app-name.yaml +5 -0
  16. package/integration/hubspot/test-artifacts/wizard-invalid-credential-create.yaml +7 -0
  17. package/integration/hubspot/test-artifacts/wizard-invalid-credential-select.yaml +7 -0
  18. package/integration/hubspot/test-artifacts/wizard-invalid-known-platform.yaml +4 -0
  19. package/integration/hubspot/test-artifacts/wizard-invalid-missing-app.yaml +4 -0
  20. package/integration/hubspot/test-artifacts/wizard-invalid-missing-source.yaml +2 -0
  21. package/integration/hubspot/test-artifacts/wizard-invalid-mode.yaml +5 -0
  22. package/integration/hubspot/test-artifacts/wizard-invalid-openapi-file.yaml +5 -0
  23. package/integration/hubspot/test-artifacts/wizard-invalid-openapi-url.yaml +4 -0
  24. package/integration/hubspot/test-artifacts/wizard-invalid-source.yaml +4 -0
  25. package/integration/hubspot/test-artifacts/wizard-valid-for-dimension-array-test.yaml +5 -0
  26. package/integration/hubspot/test-artifacts/wizard-valid-for-dimension-key-test.yaml +5 -0
  27. package/integration/hubspot/test-artifacts/wizard-valid-for-dimension-path-test.yaml +5 -0
  28. package/integration/hubspot/test-artifacts/wizard-valid-for-dimension-test.yaml +5 -0
  29. package/integration/hubspot/test-artifacts/wizard-valid-for-rbac-test.yaml +5 -0
  30. package/integration/hubspot/test-artifacts/wizard-valid-for-rbac-yaml-test.yaml +5 -0
  31. package/integration/hubspot/test-dataplane-down-helpers.js +246 -0
  32. package/integration/hubspot/test-dataplane-down-tests.js +419 -0
  33. package/integration/hubspot/test-dataplane-down.js +157 -0
  34. package/integration/hubspot/test.js +1517 -0
  35. package/integration/hubspot/variables.yaml +4 -4
  36. package/integration/hubspot/wizard-hubspot-e2e.yaml +16 -0
  37. package/integration/hubspot/wizard-hubspot-platform.yaml +8 -0
  38. package/lib/api/applications.api.js +1 -0
  39. package/lib/api/index.js +10 -5
  40. package/lib/api/types/wizard.types.js +176 -38
  41. package/lib/api/wizard.api.js +207 -38
  42. package/lib/app/deploy.js +116 -54
  43. package/lib/app/display.js +6 -5
  44. package/lib/app/dockerfile.js +2 -1
  45. package/lib/app/list.js +78 -37
  46. package/lib/app/prompts.js +9 -5
  47. package/lib/app/readme.js +41 -112
  48. package/lib/app/register.js +44 -9
  49. package/lib/app/rotate-secret.js +50 -32
  50. package/lib/cli.js +243 -65
  51. package/lib/commands/app.js +4 -9
  52. package/lib/commands/auth-config.js +125 -0
  53. package/lib/commands/auth-status.js +261 -0
  54. package/lib/commands/datasource.js +3 -6
  55. package/lib/commands/login-credentials.js +4 -4
  56. package/lib/commands/login-device.js +43 -29
  57. package/lib/commands/login.js +22 -13
  58. package/lib/commands/wizard-config-normalizer.js +92 -0
  59. package/lib/commands/wizard-core.js +515 -0
  60. package/lib/commands/wizard-dataplane.js +122 -0
  61. package/lib/commands/wizard-headless.js +115 -0
  62. package/lib/commands/wizard.js +129 -357
  63. package/lib/core/config.js +46 -0
  64. package/lib/core/secrets.js +3 -22
  65. package/lib/core/templates-env.js +1 -1
  66. package/lib/datasource/deploy.js +34 -23
  67. package/lib/datasource/list.js +8 -6
  68. package/lib/deployment/deployer.js +25 -0
  69. package/lib/deployment/environment.js +10 -13
  70. package/lib/external-system/delete.js +151 -0
  71. package/lib/external-system/deploy.js +54 -378
  72. package/lib/external-system/download-helpers.js +45 -65
  73. package/lib/external-system/download.js +34 -13
  74. package/lib/external-system/generator.js +11 -7
  75. package/lib/external-system/test-auth.js +5 -3
  76. package/lib/generator/builders.js +3 -1
  77. package/lib/generator/external-controller-manifest.js +157 -0
  78. package/lib/generator/external-schema-utils.js +236 -0
  79. package/lib/generator/external.js +55 -3
  80. package/lib/generator/index.js +22 -10
  81. package/lib/generator/wizard-prompts.js +33 -10
  82. package/lib/generator/wizard.js +69 -86
  83. package/lib/infrastructure/compose.js +100 -0
  84. package/lib/infrastructure/helpers.js +139 -0
  85. package/lib/infrastructure/index.js +52 -311
  86. package/lib/infrastructure/services.js +168 -0
  87. package/lib/schema/application-schema.json +24 -5
  88. package/lib/schema/external-datasource.schema.json +303 -17
  89. package/lib/schema/external-system.schema.json +1 -1
  90. package/lib/schema/wizard-config.schema.json +234 -0
  91. package/lib/utils/api.js +37 -42
  92. package/lib/utils/app-existence.js +42 -0
  93. package/lib/utils/app-register-config.js +7 -2
  94. package/lib/utils/app-register-display.js +2 -1
  95. package/lib/utils/auth-config-validator.js +92 -0
  96. package/lib/utils/cli-utils.js +3 -1
  97. package/lib/utils/command-header.js +43 -0
  98. package/lib/utils/compose-generator.js +113 -70
  99. package/lib/utils/controller-url.js +115 -0
  100. package/lib/utils/dataplane-health.js +115 -0
  101. package/lib/utils/dataplane-resolver.js +29 -0
  102. package/lib/utils/dev-config.js +6 -2
  103. package/lib/utils/env-copy.js +2 -1
  104. package/lib/utils/env-map.js +2 -1
  105. package/lib/utils/env-ports.js +2 -1
  106. package/lib/utils/env-template.js +1 -1
  107. package/lib/utils/error-formatter.js +149 -28
  108. package/lib/utils/external-readme.js +125 -0
  109. package/lib/utils/help-builder.js +190 -0
  110. package/lib/utils/infra-status.js +13 -3
  111. package/lib/utils/paths.js +17 -2
  112. package/lib/utils/port-resolver.js +111 -0
  113. package/lib/utils/secrets-helpers.js +3 -15
  114. package/lib/utils/secrets-utils.js +2 -2
  115. package/lib/utils/token-manager.js +69 -4
  116. package/lib/utils/variable-transformer.js +7 -2
  117. package/lib/validation/external-manifest-validator.js +202 -0
  118. package/lib/validation/validate-display.js +406 -0
  119. package/lib/validation/validate.js +159 -123
  120. package/lib/validation/validator.js +38 -4
  121. package/lib/validation/wizard-config-validator.js +267 -0
  122. package/package.json +4 -2
  123. package/templates/applications/README.md.hbs +19 -17
  124. package/templates/applications/miso-controller/env.template +1 -1
  125. package/templates/applications/miso-controller/rbac.yaml +7 -7
  126. package/templates/external-system/README.md.hbs +99 -0
  127. package/templates/external-system/external-system.json.hbs +1 -1
  128. package/templates/infra/compose.yaml.hbs +35 -0
  129. package/templates/python/docker-compose.hbs +26 -0
  130. package/templates/typescript/docker-compose.hbs +26 -0
@@ -1,99 +1,850 @@
1
1
  {
2
2
  "key": "hubspot",
3
- "displayName": "HubSpot CRM",
4
- "description": "HubSpot CRM integration with OpenAPI support for companies, contacts, and deals",
5
- "type": "openapi",
6
- "enabled": true,
7
- "environment": {
8
- "baseUrl": "https://api.hubapi.com"
3
+ "displayName": "HubSpot CRM Integration",
4
+ "description": "HubSpot CRM external system integration with companies, contacts, and deals",
5
+ "type": "external",
6
+ "externalIntegration": {
7
+ "schemaBasePath": "./",
8
+ "systems": [
9
+ "hubspot-system.json"
10
+ ],
11
+ "dataSources": [
12
+ "hubspot-datasource-company.json",
13
+ "hubspot-datasource-contact.json",
14
+ "hubspot-datasource-deal.json"
15
+ ],
16
+ "autopublish": true,
17
+ "version": "1.0.0"
9
18
  },
10
- "authentication": {
11
- "type": "oauth2",
12
- "mode": "oauth2",
13
- "oauth2": {
14
- "tokenUrl": "{{TOKENURL}}",
15
- "clientId": "{{CLIENTID}}",
16
- "clientSecret": "{{CLIENTSECRET}}",
17
- "scopes": [
18
- "crm.objects.companies.read",
19
- "crm.objects.companies.write",
20
- "crm.objects.contacts.read",
21
- "crm.objects.contacts.write",
22
- "crm.objects.deals.read",
23
- "crm.objects.deals.write"
24
- ]
25
- }
26
- },
27
- "configuration": [
28
- {
29
- "name": "CLIENTID",
30
- "value": "hubspot-clientidKeyVault",
31
- "location": "keyvault",
32
- "required": true
19
+ "system": {
20
+ "key": "hubspot",
21
+ "displayName": "HubSpot CRM",
22
+ "description": "HubSpot CRM integration with OpenAPI support for companies, contacts, and deals",
23
+ "type": "openapi",
24
+ "enabled": true,
25
+ "environment": {
26
+ "baseUrl": "https://api.hubapi.com"
33
27
  },
34
- {
35
- "name": "CLIENTSECRET",
36
- "value": "hubspot-clientsecretKeyVault",
37
- "location": "keyvault",
38
- "required": true
28
+ "authentication": {
29
+ "type": "oauth2",
30
+ "mode": "oauth2",
31
+ "oauth2": {
32
+ "tokenUrl": "{{TOKENURL}}",
33
+ "clientId": "{{CLIENTID}}",
34
+ "clientSecret": "{{CLIENTSECRET}}",
35
+ "scopes": [
36
+ "crm.objects.companies.read",
37
+ "crm.objects.companies.write",
38
+ "crm.objects.contacts.read",
39
+ "crm.objects.contacts.write",
40
+ "crm.objects.deals.read",
41
+ "crm.objects.deals.write"
42
+ ]
43
+ }
39
44
  },
40
- {
41
- "name": "TOKENURL",
42
- "value": "https://api.hubapi.com/oauth/v1/token",
43
- "location": "variable",
44
- "required": true
45
+ "configuration": [
46
+ {
47
+ "name": "CLIENTID",
48
+ "value": "hubspot-clientidKeyVault",
49
+ "location": "keyvault",
50
+ "required": true
51
+ },
52
+ {
53
+ "name": "CLIENTSECRET",
54
+ "value": "hubspot-clientsecretKeyVault",
55
+ "location": "keyvault",
56
+ "required": true
57
+ },
58
+ {
59
+ "name": "TOKENURL",
60
+ "value": "https://api.hubapi.com/oauth/v1/token",
61
+ "location": "variable",
62
+ "required": true
63
+ },
64
+ {
65
+ "name": "REDIRECT_URI",
66
+ "value": "hubspot-redirect-uriKeyVault",
67
+ "location": "keyvault",
68
+ "required": false
69
+ },
70
+ {
71
+ "name": "HUBSPOT_API_VERSION",
72
+ "value": "v3",
73
+ "location": "variable",
74
+ "required": false,
75
+ "portalInput": {
76
+ "field": "select",
77
+ "label": "HubSpot API Version",
78
+ "placeholder": "Select API version",
79
+ "options": [
80
+ "v1",
81
+ "v2",
82
+ "v3"
83
+ ],
84
+ "validation": {
85
+ "required": false
86
+ }
87
+ }
88
+ },
89
+ {
90
+ "name": "MAX_PAGE_SIZE",
91
+ "value": "100",
92
+ "location": "variable",
93
+ "required": false,
94
+ "portalInput": {
95
+ "field": "text",
96
+ "label": "Maximum Page Size",
97
+ "placeholder": "100",
98
+ "validation": {
99
+ "required": false,
100
+ "pattern": "^[0-9]+$",
101
+ "minLength": 1,
102
+ "maxLength": 1000
103
+ }
104
+ }
105
+ }
106
+ ],
107
+ "openapi": {
108
+ "documentKey": "hubspot-v3",
109
+ "autoDiscoverEntities": false
45
110
  },
111
+ "tags": [
112
+ "crm",
113
+ "sales",
114
+ "marketing",
115
+ "hubspot"
116
+ ]
117
+ },
118
+ "dataSources": [
46
119
  {
47
- "name": "REDIRECT_URI",
48
- "value": "hubspot-redirect-uriKeyVault",
49
- "location": "keyvault",
50
- "required": false
120
+ "key": "hubspot-company",
121
+ "displayName": "HubSpot Company",
122
+ "description": "HubSpot companies datasource with field mappings for CRM company data",
123
+ "systemKey": "hubspot",
124
+ "entityType": "record-storage",
125
+ "resourceType": "customer",
126
+ "enabled": true,
127
+ "version": "1.0.0",
128
+ "metadataSchema": {
129
+ "type": "object",
130
+ "properties": {
131
+ "id": {
132
+ "type": "string"
133
+ },
134
+ "properties": {
135
+ "type": "object",
136
+ "properties": {
137
+ "name": {
138
+ "type": "object",
139
+ "properties": {
140
+ "value": {
141
+ "type": "string"
142
+ }
143
+ }
144
+ },
145
+ "domain": {
146
+ "type": "object",
147
+ "properties": {
148
+ "value": {
149
+ "type": "string"
150
+ }
151
+ }
152
+ },
153
+ "country": {
154
+ "type": "object",
155
+ "properties": {
156
+ "value": {
157
+ "type": "string"
158
+ }
159
+ }
160
+ },
161
+ "city": {
162
+ "type": "object",
163
+ "properties": {
164
+ "value": {
165
+ "type": "string"
166
+ }
167
+ }
168
+ },
169
+ "industry": {
170
+ "type": "object",
171
+ "properties": {
172
+ "value": {
173
+ "type": "string"
174
+ }
175
+ }
176
+ },
177
+ "website": {
178
+ "type": "object",
179
+ "properties": {
180
+ "value": {
181
+ "type": "string"
182
+ }
183
+ }
184
+ },
185
+ "phone": {
186
+ "type": "object",
187
+ "properties": {
188
+ "value": {
189
+ "type": "string"
190
+ }
191
+ }
192
+ },
193
+ "createdate": {
194
+ "type": "object",
195
+ "properties": {
196
+ "value": {
197
+ "type": "string"
198
+ }
199
+ }
200
+ },
201
+ "hs_lastmodifieddate": {
202
+ "type": "object",
203
+ "properties": {
204
+ "value": {
205
+ "type": "string"
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+ },
212
+ "required": [
213
+ "id",
214
+ "properties"
215
+ ]
216
+ },
217
+ "fieldMappings": {
218
+ "dimensions": {
219
+ "country": "metadata.country",
220
+ "domain": "metadata.domain"
221
+ },
222
+ "attributes": {
223
+ "id": {
224
+ "expression": "{{id}}",
225
+ "type": "string",
226
+ "description": "Unique company identifier",
227
+ "indexed": true
228
+ },
229
+ "name": {
230
+ "expression": "{{properties.name.value}} | trim",
231
+ "type": "string",
232
+ "description": "Company name",
233
+ "indexed": false
234
+ },
235
+ "domain": {
236
+ "expression": "{{properties.domain.value}} | toLower | trim",
237
+ "type": "string",
238
+ "description": "Company domain for ABAC filtering",
239
+ "indexed": false
240
+ },
241
+ "country": {
242
+ "expression": "{{properties.country.value}} | toUpper | trim",
243
+ "type": "string",
244
+ "description": "Country code for ABAC filtering",
245
+ "indexed": false
246
+ },
247
+ "city": {
248
+ "expression": "{{properties.city.value}} | trim",
249
+ "type": "string",
250
+ "description": "City name",
251
+ "indexed": false
252
+ },
253
+ "industry": {
254
+ "expression": "{{properties.industry.value}} | trim",
255
+ "type": "string",
256
+ "description": "Industry classification",
257
+ "indexed": false
258
+ },
259
+ "website": {
260
+ "expression": "{{properties.website.value}} | trim",
261
+ "type": "string",
262
+ "description": "Company website URL",
263
+ "indexed": false
264
+ },
265
+ "phone": {
266
+ "expression": "{{properties.phone.value}} | trim",
267
+ "type": "string",
268
+ "description": "Phone number",
269
+ "indexed": false
270
+ },
271
+ "createdAt": {
272
+ "expression": "{{properties.createdate.value}}",
273
+ "type": "string",
274
+ "description": "Creation timestamp",
275
+ "indexed": false
276
+ },
277
+ "updatedAt": {
278
+ "expression": "{{properties.hs_lastmodifieddate.value}}",
279
+ "type": "string",
280
+ "description": "Last modification timestamp",
281
+ "indexed": false
282
+ }
283
+ }
284
+ },
285
+ "exposed": {
286
+ "attributes": [
287
+ "id",
288
+ "name",
289
+ "domain",
290
+ "country",
291
+ "city",
292
+ "industry",
293
+ "website",
294
+ "phone",
295
+ "createdAt",
296
+ "updatedAt"
297
+ ],
298
+ "description": "Exposed fields for HubSpot companies"
299
+ },
300
+ "openapi": {
301
+ "enabled": true,
302
+ "documentKey": "hubspot-v3",
303
+ "baseUrl": "https://api.hubapi.com",
304
+ "operations": {
305
+ "list": {
306
+ "operationId": "getCompanies",
307
+ "method": "GET",
308
+ "path": "/crm/v3/objects/companies"
309
+ },
310
+ "get": {
311
+ "operationId": "getCompany",
312
+ "method": "GET",
313
+ "path": "/crm/v3/objects/companies/{companyId}"
314
+ },
315
+ "create": {
316
+ "operationId": "createCompany",
317
+ "method": "POST",
318
+ "path": "/crm/v3/objects/companies"
319
+ },
320
+ "update": {
321
+ "operationId": "updateCompany",
322
+ "method": "PATCH",
323
+ "path": "/crm/v3/objects/companies/{companyId}"
324
+ },
325
+ "delete": {
326
+ "operationId": "deleteCompany",
327
+ "method": "DELETE",
328
+ "path": "/crm/v3/objects/companies/{companyId}"
329
+ }
330
+ },
331
+ "autoRbac": true
332
+ }
51
333
  },
52
334
  {
53
- "name": "HUBSPOT_API_VERSION",
54
- "value": "v3",
55
- "location": "variable",
56
- "required": false,
57
- "portalInput": {
58
- "field": "select",
59
- "label": "HubSpot API Version",
60
- "placeholder": "Select API version",
61
- "options": [
62
- "v1",
63
- "v2",
64
- "v3"
65
- ],
66
- "validation": {
67
- "required": false
335
+ "key": "hubspot-contact",
336
+ "displayName": "HubSpot Contact",
337
+ "description": "HubSpot contacts datasource with field mappings for CRM contact data",
338
+ "systemKey": "hubspot",
339
+ "entityType": "record-storage",
340
+ "resourceType": "contact",
341
+ "enabled": true,
342
+ "version": "1.0.0",
343
+ "metadataSchema": {
344
+ "type": "object",
345
+ "properties": {
346
+ "id": {
347
+ "type": "string"
348
+ },
349
+ "properties": {
350
+ "type": "object",
351
+ "properties": {
352
+ "firstname": {
353
+ "type": "object",
354
+ "properties": {
355
+ "value": {
356
+ "type": "string"
357
+ }
358
+ }
359
+ },
360
+ "lastname": {
361
+ "type": "object",
362
+ "properties": {
363
+ "value": {
364
+ "type": "string"
365
+ }
366
+ }
367
+ },
368
+ "email": {
369
+ "type": "object",
370
+ "properties": {
371
+ "value": {
372
+ "type": "string"
373
+ }
374
+ }
375
+ },
376
+ "phone": {
377
+ "type": "object",
378
+ "properties": {
379
+ "value": {
380
+ "type": "string"
381
+ }
382
+ }
383
+ },
384
+ "company": {
385
+ "type": "object",
386
+ "properties": {
387
+ "value": {
388
+ "type": "string"
389
+ }
390
+ }
391
+ },
392
+ "jobtitle": {
393
+ "type": "object",
394
+ "properties": {
395
+ "value": {
396
+ "type": "string"
397
+ }
398
+ }
399
+ },
400
+ "address": {
401
+ "type": "object",
402
+ "properties": {
403
+ "value": {
404
+ "type": "string"
405
+ }
406
+ }
407
+ },
408
+ "city": {
409
+ "type": "object",
410
+ "properties": {
411
+ "value": {
412
+ "type": "string"
413
+ }
414
+ }
415
+ },
416
+ "country": {
417
+ "type": "object",
418
+ "properties": {
419
+ "value": {
420
+ "type": "string"
421
+ }
422
+ }
423
+ },
424
+ "createdate": {
425
+ "type": "object",
426
+ "properties": {
427
+ "value": {
428
+ "type": "string"
429
+ }
430
+ }
431
+ },
432
+ "hs_lastmodifieddate": {
433
+ "type": "object",
434
+ "properties": {
435
+ "value": {
436
+ "type": "string"
437
+ }
438
+ }
439
+ }
440
+ }
441
+ }
442
+ },
443
+ "required": [
444
+ "id",
445
+ "properties"
446
+ ]
447
+ },
448
+ "fieldMappings": {
449
+ "dimensions": {
450
+ "email": "metadata.email",
451
+ "country": "metadata.country"
452
+ },
453
+ "attributes": {
454
+ "id": {
455
+ "expression": "{{id}}",
456
+ "type": "string",
457
+ "description": "Unique contact identifier",
458
+ "indexed": true
459
+ },
460
+ "firstName": {
461
+ "expression": "{{properties.firstname.value}} | trim",
462
+ "type": "string",
463
+ "description": "First name",
464
+ "indexed": false
465
+ },
466
+ "lastName": {
467
+ "expression": "{{properties.lastname.value}} | trim",
468
+ "type": "string",
469
+ "description": "Last name",
470
+ "indexed": false
471
+ },
472
+ "email": {
473
+ "expression": "{{properties.email.value}} | toLower | trim",
474
+ "type": "string",
475
+ "description": "Email address for ABAC filtering",
476
+ "indexed": false
477
+ },
478
+ "phone": {
479
+ "expression": "{{properties.phone.value}} | trim",
480
+ "type": "string",
481
+ "description": "Phone number",
482
+ "indexed": false
483
+ },
484
+ "company": {
485
+ "expression": "{{properties.company.value}} | trim",
486
+ "type": "string",
487
+ "description": "Associated company name",
488
+ "indexed": false
489
+ },
490
+ "jobTitle": {
491
+ "expression": "{{properties.jobtitle.value}} | trim",
492
+ "type": "string",
493
+ "description": "Job title",
494
+ "indexed": false
495
+ },
496
+ "address": {
497
+ "expression": "{{properties.address.value}} | trim",
498
+ "type": "string",
499
+ "description": "Street address",
500
+ "indexed": false
501
+ },
502
+ "city": {
503
+ "expression": "{{properties.city.value}} | trim",
504
+ "type": "string",
505
+ "description": "City name",
506
+ "indexed": false
507
+ },
508
+ "country": {
509
+ "expression": "{{properties.country.value}} | toUpper | trim",
510
+ "type": "string",
511
+ "description": "Country code for ABAC filtering",
512
+ "indexed": false
513
+ },
514
+ "createdAt": {
515
+ "expression": "{{properties.createdate.value}}",
516
+ "type": "string",
517
+ "description": "Creation timestamp",
518
+ "indexed": false
519
+ },
520
+ "updatedAt": {
521
+ "expression": "{{properties.hs_lastmodifieddate.value}}",
522
+ "type": "string",
523
+ "description": "Last modification timestamp",
524
+ "indexed": false
525
+ }
68
526
  }
527
+ },
528
+ "exposed": {
529
+ "attributes": [
530
+ "id",
531
+ "firstName",
532
+ "lastName",
533
+ "email",
534
+ "phone",
535
+ "company",
536
+ "jobTitle",
537
+ "address",
538
+ "city",
539
+ "country",
540
+ "createdAt",
541
+ "updatedAt"
542
+ ],
543
+ "description": "Exposed fields for HubSpot contacts"
544
+ },
545
+ "openapi": {
546
+ "enabled": true,
547
+ "documentKey": "hubspot-v3",
548
+ "baseUrl": "https://api.hubapi.com",
549
+ "operations": {
550
+ "list": {
551
+ "operationId": "getContacts",
552
+ "method": "GET",
553
+ "path": "/crm/v3/objects/contacts"
554
+ },
555
+ "get": {
556
+ "operationId": "getContact",
557
+ "method": "GET",
558
+ "path": "/crm/v3/objects/contacts/{contactId}"
559
+ },
560
+ "create": {
561
+ "operationId": "createContact",
562
+ "method": "POST",
563
+ "path": "/crm/v3/objects/contacts"
564
+ },
565
+ "update": {
566
+ "operationId": "updateContact",
567
+ "method": "PATCH",
568
+ "path": "/crm/v3/objects/contacts/{contactId}"
569
+ },
570
+ "delete": {
571
+ "operationId": "deleteContact",
572
+ "method": "DELETE",
573
+ "path": "/crm/v3/objects/contacts/{contactId}"
574
+ }
575
+ },
576
+ "autoRbac": true
69
577
  }
70
578
  },
71
579
  {
72
- "name": "MAX_PAGE_SIZE",
73
- "value": "100",
74
- "location": "variable",
75
- "required": false,
76
- "portalInput": {
77
- "field": "text",
78
- "label": "Maximum Page Size",
79
- "placeholder": "100",
80
- "validation": {
81
- "required": false,
82
- "pattern": "^[0-9]+$",
83
- "min": 1,
84
- "max": 1000
580
+ "key": "hubspot-deal",
581
+ "displayName": "HubSpot Deal",
582
+ "description": "HubSpot deals datasource with field mappings for CRM deal data",
583
+ "systemKey": "hubspot",
584
+ "entityType": "record-storage",
585
+ "resourceType": "deal",
586
+ "enabled": true,
587
+ "version": "1.0.0",
588
+ "metadataSchema": {
589
+ "type": "object",
590
+ "properties": {
591
+ "id": {
592
+ "type": "string"
593
+ },
594
+ "properties": {
595
+ "type": "object",
596
+ "properties": {
597
+ "dealname": {
598
+ "type": "object",
599
+ "properties": {
600
+ "value": {
601
+ "type": "string"
602
+ }
603
+ }
604
+ },
605
+ "amount": {
606
+ "type": "object",
607
+ "properties": {
608
+ "value": {
609
+ "type": "string"
610
+ }
611
+ }
612
+ },
613
+ "deal_currency_code": {
614
+ "type": "object",
615
+ "properties": {
616
+ "value": {
617
+ "type": "string"
618
+ }
619
+ }
620
+ },
621
+ "dealstage": {
622
+ "type": "object",
623
+ "properties": {
624
+ "value": {
625
+ "type": "string"
626
+ }
627
+ }
628
+ },
629
+ "pipeline": {
630
+ "type": "object",
631
+ "properties": {
632
+ "value": {
633
+ "type": "string"
634
+ }
635
+ }
636
+ },
637
+ "closedate": {
638
+ "type": "object",
639
+ "properties": {
640
+ "value": {
641
+ "type": "string"
642
+ }
643
+ }
644
+ },
645
+ "dealtype": {
646
+ "type": "object",
647
+ "properties": {
648
+ "value": {
649
+ "type": "string"
650
+ }
651
+ }
652
+ },
653
+ "createdate": {
654
+ "type": "object",
655
+ "properties": {
656
+ "value": {
657
+ "type": "string"
658
+ }
659
+ }
660
+ },
661
+ "hs_lastmodifieddate": {
662
+ "type": "object",
663
+ "properties": {
664
+ "value": {
665
+ "type": "string"
666
+ }
667
+ }
668
+ }
669
+ }
670
+ },
671
+ "associations": {
672
+ "type": "object",
673
+ "properties": {
674
+ "companies": {
675
+ "type": "object",
676
+ "properties": {
677
+ "results": {
678
+ "type": "array",
679
+ "items": {
680
+ "type": "object",
681
+ "properties": {
682
+ "id": {
683
+ "type": "string"
684
+ }
685
+ }
686
+ }
687
+ }
688
+ }
689
+ },
690
+ "contacts": {
691
+ "type": "object",
692
+ "properties": {
693
+ "results": {
694
+ "type": "array",
695
+ "items": {
696
+ "type": "object",
697
+ "properties": {
698
+ "id": {
699
+ "type": "string"
700
+ }
701
+ }
702
+ }
703
+ }
704
+ }
705
+ }
706
+ }
707
+ }
708
+ },
709
+ "required": [
710
+ "id",
711
+ "properties"
712
+ ]
713
+ },
714
+ "fieldMappings": {
715
+ "dimensions": {
716
+ "stage": "metadata.stage",
717
+ "pipeline": "metadata.pipeline"
718
+ },
719
+ "attributes": {
720
+ "id": {
721
+ "expression": "{{id}}",
722
+ "type": "string",
723
+ "description": "Unique deal identifier",
724
+ "indexed": true
725
+ },
726
+ "dealName": {
727
+ "expression": "{{properties.dealname.value}} | trim",
728
+ "type": "string",
729
+ "description": "Deal name",
730
+ "indexed": false
731
+ },
732
+ "amount": {
733
+ "expression": "{{properties.amount.value}}",
734
+ "type": "string",
735
+ "description": "Deal amount",
736
+ "indexed": false
737
+ },
738
+ "currency": {
739
+ "expression": "{{properties.deal_currency_code.value}} | toUpper | trim",
740
+ "type": "string",
741
+ "description": "Currency code",
742
+ "indexed": false
743
+ },
744
+ "stage": {
745
+ "expression": "{{properties.dealstage.value}} | trim",
746
+ "type": "string",
747
+ "description": "Deal stage for ABAC filtering",
748
+ "indexed": false
749
+ },
750
+ "pipeline": {
751
+ "expression": "{{properties.pipeline.value}} | trim",
752
+ "type": "string",
753
+ "description": "Pipeline name for ABAC filtering",
754
+ "indexed": false
755
+ },
756
+ "closeDate": {
757
+ "expression": "{{properties.closedate.value}}",
758
+ "type": "string",
759
+ "description": "Expected close date",
760
+ "indexed": false
761
+ },
762
+ "dealType": {
763
+ "expression": "{{properties.dealtype.value}} | trim",
764
+ "type": "string",
765
+ "description": "Deal type",
766
+ "indexed": false
767
+ },
768
+ "associatedCompany": {
769
+ "expression": "record_ref:customer",
770
+ "type": "string",
771
+ "description": "Associated company reference (record reference)",
772
+ "indexed": false
773
+ },
774
+ "associatedContacts": {
775
+ "expression": "{{associations.contacts.results}}",
776
+ "type": "array",
777
+ "description": "Array of associated contact IDs",
778
+ "indexed": false
779
+ },
780
+ "createdAt": {
781
+ "expression": "{{properties.createdate.value}}",
782
+ "type": "string",
783
+ "description": "Creation timestamp",
784
+ "indexed": false
785
+ },
786
+ "updatedAt": {
787
+ "expression": "{{properties.hs_lastmodifieddate.value}}",
788
+ "type": "string",
789
+ "description": "Last modification timestamp",
790
+ "indexed": false
791
+ }
85
792
  }
793
+ },
794
+ "exposed": {
795
+ "attributes": [
796
+ "id",
797
+ "dealName",
798
+ "amount",
799
+ "currency",
800
+ "stage",
801
+ "pipeline",
802
+ "closeDate",
803
+ "dealType",
804
+ "associatedCompany",
805
+ "associatedContacts",
806
+ "createdAt",
807
+ "updatedAt"
808
+ ],
809
+ "description": "Exposed fields for HubSpot deals"
810
+ },
811
+ "openapi": {
812
+ "enabled": true,
813
+ "documentKey": "hubspot-v3",
814
+ "baseUrl": "https://api.hubapi.com",
815
+ "operations": {
816
+ "list": {
817
+ "operationId": "getDeals",
818
+ "method": "GET",
819
+ "path": "/crm/v3/objects/deals"
820
+ },
821
+ "get": {
822
+ "operationId": "getDeal",
823
+ "method": "GET",
824
+ "path": "/crm/v3/objects/deals/{dealId}"
825
+ },
826
+ "create": {
827
+ "operationId": "createDeal",
828
+ "method": "POST",
829
+ "path": "/crm/v3/objects/deals"
830
+ },
831
+ "update": {
832
+ "operationId": "updateDeal",
833
+ "method": "PATCH",
834
+ "path": "/crm/v3/objects/deals/{dealId}"
835
+ },
836
+ "delete": {
837
+ "operationId": "deleteDeal",
838
+ "method": "DELETE",
839
+ "path": "/crm/v3/objects/deals/{dealId}"
840
+ }
841
+ },
842
+ "autoRbac": true
86
843
  }
87
844
  }
88
845
  ],
89
- "openapi": {
90
- "documentKey": "hubspot-v3",
91
- "autoDiscoverEntities": false
92
- },
93
- "tags": [
94
- "crm",
95
- "sales",
96
- "marketing",
97
- "hubspot"
98
- ]
846
+ "requiresDatabase": false,
847
+ "requiresRedis": false,
848
+ "requiresStorage": false,
849
+ "deploymentKey": "9b5209bed2ef1eccb04fa83be73a74cf3a9c84d5d2580a95028d34fdb8db78a8"
99
850
  }