@cheqd/studio 3.12.1 → 3.13.0-develop.10

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 (173) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +21 -2
  3. package/dist/app.js.map +1 -1
  4. package/dist/controllers/admin/subscriptions.d.ts.map +1 -1
  5. package/dist/controllers/admin/subscriptions.js.map +1 -1
  6. package/dist/controllers/api/accreditation.d.ts.map +1 -1
  7. package/dist/controllers/api/accreditation.js +2 -2
  8. package/dist/controllers/api/accreditation.js.map +1 -1
  9. package/dist/controllers/api/credential.d.ts +55 -0
  10. package/dist/controllers/api/credential.d.ts.map +1 -1
  11. package/dist/controllers/api/credential.js +145 -0
  12. package/dist/controllers/api/credential.js.map +1 -1
  13. package/dist/controllers/api/did.d.ts +77 -1
  14. package/dist/controllers/api/did.d.ts.map +1 -1
  15. package/dist/controllers/api/did.js +210 -93
  16. package/dist/controllers/api/did.js.map +1 -1
  17. package/dist/controllers/api/providers.controller.d.ts +214 -0
  18. package/dist/controllers/api/providers.controller.d.ts.map +1 -0
  19. package/dist/controllers/api/providers.controller.js +462 -0
  20. package/dist/controllers/api/providers.controller.js.map +1 -0
  21. package/dist/controllers/validator/service-create-request.js +3 -3
  22. package/dist/controllers/validator/service-create-request.js.map +1 -1
  23. package/dist/controllers/validator/service.js +2 -2
  24. package/dist/controllers/validator/service.js.map +1 -1
  25. package/dist/database/entities/credential-provider.entity.d.ts +16 -0
  26. package/dist/database/entities/credential-provider.entity.d.ts.map +1 -0
  27. package/dist/database/entities/credential-provider.entity.js +109 -0
  28. package/dist/database/entities/credential-provider.entity.js.map +1 -0
  29. package/dist/database/entities/provider-configuration.entity.d.ts +23 -0
  30. package/dist/database/entities/provider-configuration.entity.d.ts.map +1 -0
  31. package/dist/database/entities/provider-configuration.entity.js +139 -0
  32. package/dist/database/entities/provider-configuration.entity.js.map +1 -0
  33. package/dist/database/migrations/1758011998054-studio-migrations.d.ts +7 -0
  34. package/dist/database/migrations/1758011998054-studio-migrations.d.ts.map +1 -0
  35. package/dist/database/migrations/1758011998054-studio-migrations.js +18 -0
  36. package/dist/database/migrations/1758011998054-studio-migrations.js.map +1 -0
  37. package/dist/database/seeds/providers.seed.d.ts +2 -0
  38. package/dist/database/seeds/providers.seed.d.ts.map +1 -0
  39. package/dist/database/seeds/providers.seed.js +89 -0
  40. package/dist/database/seeds/providers.seed.js.map +1 -0
  41. package/dist/database/types/types.d.ts.map +1 -1
  42. package/dist/database/types/types.js +6 -0
  43. package/dist/database/types/types.js.map +1 -1
  44. package/dist/helpers/helpers.js +1 -1
  45. package/dist/helpers/helpers.js.map +1 -1
  46. package/dist/middleware/auth/routes/api/accreditation-auth.js.map +1 -1
  47. package/dist/middleware/auth/routes/api/credential-auth.d.ts.map +1 -1
  48. package/dist/middleware/auth/routes/api/credential-auth.js +2 -0
  49. package/dist/middleware/auth/routes/api/credential-auth.js.map +1 -1
  50. package/dist/middleware/auth/routes/api/did-auth.d.ts.map +1 -1
  51. package/dist/middleware/auth/routes/api/did-auth.js +2 -0
  52. package/dist/middleware/auth/routes/api/did-auth.js.map +1 -1
  53. package/dist/middleware/auth/routes/api/provider-auth.d.ts +5 -0
  54. package/dist/middleware/auth/routes/api/provider-auth.d.ts.map +1 -0
  55. package/dist/middleware/auth/routes/api/provider-auth.js +29 -0
  56. package/dist/middleware/auth/routes/api/provider-auth.js.map +1 -0
  57. package/dist/middleware/authentication.d.ts.map +1 -1
  58. package/dist/middleware/authentication.js +2 -0
  59. package/dist/middleware/authentication.js.map +1 -1
  60. package/dist/services/api/credentials.d.ts.map +1 -1
  61. package/dist/services/api/credentials.js +36 -17
  62. package/dist/services/api/credentials.js.map +1 -1
  63. package/dist/services/api/identifier.d.ts +1 -1
  64. package/dist/services/api/identifier.d.ts.map +1 -1
  65. package/dist/services/api/identifier.js +2 -2
  66. package/dist/services/api/identifier.js.map +1 -1
  67. package/dist/services/api/provider.factory.d.ts +9 -0
  68. package/dist/services/api/provider.factory.d.ts.map +1 -0
  69. package/dist/services/api/provider.factory.js +41 -0
  70. package/dist/services/api/provider.factory.js.map +1 -0
  71. package/dist/services/api/provider.service.d.ts +25 -0
  72. package/dist/services/api/provider.service.d.ts.map +1 -0
  73. package/dist/services/api/provider.service.js +148 -0
  74. package/dist/services/api/provider.service.js.map +1 -0
  75. package/dist/services/api/providers/base-provider.service.d.ts +22 -0
  76. package/dist/services/api/providers/base-provider.service.d.ts.map +1 -0
  77. package/dist/services/api/providers/base-provider.service.js +60 -0
  78. package/dist/services/api/providers/base-provider.service.js.map +1 -0
  79. package/dist/services/api/providers/dock-api.service.d.ts +18 -0
  80. package/dist/services/api/providers/dock-api.service.d.ts.map +1 -0
  81. package/dist/services/api/providers/dock-api.service.js +95 -0
  82. package/dist/services/api/providers/dock-api.service.js.map +1 -0
  83. package/dist/services/api/providers/hovi-api.service.d.ts +16 -0
  84. package/dist/services/api/providers/hovi-api.service.d.ts.map +1 -0
  85. package/dist/services/api/providers/hovi-api.service.js +99 -0
  86. package/dist/services/api/providers/hovi-api.service.js.map +1 -0
  87. package/dist/services/api/providers/paradym-api.service.d.ts +16 -0
  88. package/dist/services/api/providers/paradym-api.service.d.ts.map +1 -0
  89. package/dist/services/api/providers/paradym-api.service.js +99 -0
  90. package/dist/services/api/providers/paradym-api.service.js.map +1 -0
  91. package/dist/services/api/providers/studio-api.service.d.ts +18 -0
  92. package/dist/services/api/providers/studio-api.service.d.ts.map +1 -0
  93. package/dist/services/api/providers/studio-api.service.js +104 -0
  94. package/dist/services/api/providers/studio-api.service.js.map +1 -0
  95. package/dist/services/api/resource.d.ts +2 -2
  96. package/dist/services/api/resource.d.ts.map +1 -1
  97. package/dist/services/api/resource.js.map +1 -1
  98. package/dist/services/connectors/resource.d.ts.map +1 -1
  99. package/dist/services/connectors/resource.js.map +1 -1
  100. package/dist/services/identity/abstract.d.ts +7 -3
  101. package/dist/services/identity/abstract.d.ts.map +1 -1
  102. package/dist/services/identity/abstract.js +9 -1
  103. package/dist/services/identity/abstract.js.map +1 -1
  104. package/dist/services/identity/default.js +1 -1
  105. package/dist/services/identity/default.js.map +1 -1
  106. package/dist/services/identity/index.d.ts +8 -4
  107. package/dist/services/identity/index.d.ts.map +1 -1
  108. package/dist/services/identity/index.js +2 -3
  109. package/dist/services/identity/index.js.map +1 -1
  110. package/dist/services/identity/providers/dock/identity.d.ts +25 -0
  111. package/dist/services/identity/providers/dock/identity.d.ts.map +1 -0
  112. package/dist/services/identity/providers/dock/identity.js +307 -0
  113. package/dist/services/identity/providers/dock/identity.js.map +1 -0
  114. package/dist/services/identity/providers/dock/types.d.ts +138 -0
  115. package/dist/services/identity/providers/dock/types.d.ts.map +1 -0
  116. package/dist/services/identity/providers/dock/types.js +2 -0
  117. package/dist/services/identity/providers/dock/types.js.map +1 -0
  118. package/dist/services/identity/providers/index.d.ts +3 -0
  119. package/dist/services/identity/providers/index.d.ts.map +1 -0
  120. package/dist/services/identity/providers/index.js +3 -0
  121. package/dist/services/identity/providers/index.js.map +1 -0
  122. package/dist/services/identity/{agent.d.ts → providers/studio/agent.d.ts} +8 -8
  123. package/dist/services/identity/providers/studio/agent.d.ts.map +1 -0
  124. package/dist/services/identity/{agent.js → providers/studio/agent.js} +7 -6
  125. package/dist/services/identity/providers/studio/agent.js.map +1 -0
  126. package/dist/services/identity/providers/studio/index.d.ts +3 -0
  127. package/dist/services/identity/providers/studio/index.d.ts.map +1 -0
  128. package/dist/services/identity/providers/studio/index.js +3 -0
  129. package/dist/services/identity/providers/studio/index.js.map +1 -0
  130. package/dist/services/identity/{local.d.ts → providers/studio/local.d.ts} +9 -9
  131. package/dist/services/identity/providers/studio/local.d.ts.map +1 -0
  132. package/dist/services/identity/{local.js → providers/studio/local.js} +3 -3
  133. package/dist/services/identity/providers/studio/local.js.map +1 -0
  134. package/dist/services/identity/{postgres.d.ts → providers/studio/postgres.d.ts} +24 -18
  135. package/dist/services/identity/providers/studio/postgres.d.ts.map +1 -0
  136. package/dist/services/identity/{postgres.js → providers/studio/postgres.js} +138 -17
  137. package/dist/services/identity/providers/studio/postgres.js.map +1 -0
  138. package/dist/services/identity/providers/studio/unauthorized.d.ts +6 -0
  139. package/dist/services/identity/providers/studio/unauthorized.d.ts.map +1 -0
  140. package/dist/services/identity/{unauthorized.js → providers/studio/unauthorized.js} +2 -2
  141. package/dist/services/identity/providers/studio/unauthorized.js.map +1 -0
  142. package/dist/services/track/api/resource-subscriber.js +1 -1
  143. package/dist/services/track/api/resource-subscriber.js.map +1 -1
  144. package/dist/static/swagger-api.json +623 -0
  145. package/dist/types/constants.d.ts +1 -0
  146. package/dist/types/constants.d.ts.map +1 -1
  147. package/dist/types/constants.js +1 -0
  148. package/dist/types/constants.js.map +1 -1
  149. package/dist/types/credential.d.ts +35 -3
  150. package/dist/types/credential.d.ts.map +1 -1
  151. package/dist/types/credential.js +4 -2
  152. package/dist/types/credential.js.map +1 -1
  153. package/dist/types/did.d.ts +20 -1
  154. package/dist/types/did.d.ts.map +1 -1
  155. package/dist/types/provider.types.d.ts +30 -0
  156. package/dist/types/provider.types.d.ts.map +1 -0
  157. package/dist/types/provider.types.js +2 -0
  158. package/dist/types/provider.types.js.map +1 -0
  159. package/dist/types/swagger-api-types.d.ts +94 -0
  160. package/dist/types/swagger-api-types.d.ts.map +1 -1
  161. package/dist/types/swagger-api-types.js +94 -0
  162. package/dist/types/swagger-api-types.js.map +1 -1
  163. package/example.env +6 -0
  164. package/package.json +4 -3
  165. package/dist/services/identity/agent.d.ts.map +0 -1
  166. package/dist/services/identity/agent.js.map +0 -1
  167. package/dist/services/identity/local.d.ts.map +0 -1
  168. package/dist/services/identity/local.js.map +0 -1
  169. package/dist/services/identity/postgres.d.ts.map +0 -1
  170. package/dist/services/identity/postgres.js.map +0 -1
  171. package/dist/services/identity/unauthorized.d.ts +0 -6
  172. package/dist/services/identity/unauthorized.d.ts.map +0 -1
  173. package/dist/services/identity/unauthorized.js.map +0 -1
@@ -0,0 +1,214 @@
1
+ import type { Request, Response } from 'express';
2
+ export declare class ProvidersController {
3
+ static importDIDValidator: import("express-validator").ValidationChainWithExtensions<"isDID" | "isDIDArray" | "isDIDDocument" | "isVerificationMethod" | "isCreateDIDDocumentService" | "isService" | "isCheqdDidLinkedAlsoKnownAs" | "isKeyDID" | "isW3CCheqdCredential" | "isW3CCheqdCredentials" | "isW3CCheqdPresentation" | "isVeridaDID">[];
4
+ /**
5
+ * @openapi
6
+ * /providers:
7
+ * get:
8
+ * tags: [Providers]
9
+ * summary: Get all available credential providers
10
+ * description: Returns list of available credential providers
11
+ * responses:
12
+ * 200:
13
+ * description: Successful response
14
+ * content:
15
+ * application/json:
16
+ * schema:
17
+ * type: object
18
+ * properties:
19
+ * providers:
20
+ * type: array
21
+ * items:
22
+ * type: object
23
+ */
24
+ getProviders(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
25
+ /**
26
+ * @openapi
27
+ * /providers/activated:
28
+ * get:
29
+ * tags: [Providers]
30
+ * summary: Get customer's activated providers
31
+ * description: Returns list of providers activated by the customer
32
+ * responses:
33
+ * 200:
34
+ * description: Successful response
35
+ */
36
+ getActiveProviders(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
37
+ /**
38
+ * @openapi
39
+ * /providers/{providerId}/configuration:
40
+ * get:
41
+ * tags: [Providers]
42
+ * summary: Get provider configuration
43
+ * parameters:
44
+ * - name: providerId
45
+ * in: path
46
+ * required: true
47
+ * schema:
48
+ * type: string
49
+ * responses:
50
+ * 200:
51
+ * description: Provider configuration
52
+ */
53
+ getProviderConfiguration(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
54
+ /**
55
+ * @openapi
56
+ * /providers/{providerId}/activate:
57
+ * post:
58
+ * tags: [Providers]
59
+ * summary: Activate a provider for the customer
60
+ * parameters:
61
+ * - name: providerId
62
+ * in: path
63
+ * required: true
64
+ * schema:
65
+ * type: string
66
+ * responses:
67
+ * 200:
68
+ * description: Provider activated successfully
69
+ * 400:
70
+ * description: Invalid provider or already activated
71
+ * 404:
72
+ * description: Provider not found
73
+ */
74
+ activateProvider(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
75
+ /**
76
+ * @openapi
77
+ * /providers/{providerId}/configuration:
78
+ * put:
79
+ * tags: [Providers]
80
+ * summary: Update provider configuration
81
+ * parameters:
82
+ * - name: providerId
83
+ * in: path
84
+ * required: true
85
+ * schema:
86
+ * type: string
87
+ * requestBody:
88
+ * required: true
89
+ * content:
90
+ * application/json:
91
+ * schema:
92
+ * type: object
93
+ * properties:
94
+ * apiEndpoint:
95
+ * type: string
96
+ * format: uri
97
+ * description: API endpoint URL
98
+ * webhookUrl:
99
+ * type: string
100
+ * format: uri
101
+ * description: Webhook URL for notifications
102
+ * defaultSettings:
103
+ * type: object
104
+ * description: Provider-specific default settings
105
+ * responses:
106
+ * 200:
107
+ * description: Configuration updated successfully
108
+ * 400:
109
+ * description: Invalid configuration data
110
+ * 404:
111
+ * description: Provider configuration not found
112
+ */
113
+ updateProviderConfiguration(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
114
+ /**
115
+ * @openapi
116
+ * /providers/{providerId}/test:
117
+ * post:
118
+ * tags: [Providers]
119
+ * summary: Test connection to a provider
120
+ * parameters:
121
+ * - name: providerId
122
+ * in: path
123
+ * required: true
124
+ * schema:
125
+ * type: string
126
+ * responses:
127
+ * 200:
128
+ * description: Connection test completed
129
+ * 400:
130
+ * description: Connection test failed
131
+ * 404:
132
+ * description: Provider configuration not found
133
+ */
134
+ testConnection(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
135
+ /**
136
+ * @openapi
137
+ * /providers/{providerId}:
138
+ * delete:
139
+ * tags: [Providers]
140
+ * summary: Remove provider configuration
141
+ * parameters:
142
+ * - name: providerId
143
+ * in: path
144
+ * required: true
145
+ * schema:
146
+ * type: string
147
+ * responses:
148
+ * 200:
149
+ * description: Configuration removed successfully
150
+ */
151
+ removeProvider(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
152
+ /**
153
+ * @openapi
154
+ *
155
+ * /providers/{providerId}/did/import:
156
+ * post:
157
+ * tags: [ Providers ]
158
+ * summary: Import a DID into a Provider.
159
+ * description: This endpoint imports a decentralized identifier associated with the user's account with the custodied keys into a provider.
160
+ * parameters:
161
+ * - name: providerId
162
+ * in: path
163
+ * required: true
164
+ * schema:
165
+ * type: string
166
+ * requestBody:
167
+ * content:
168
+ * application/x-www-form-urlencoded:
169
+ * schema:
170
+ * type: object
171
+ * required:
172
+ * - did
173
+ * properties:
174
+ * did:
175
+ * description: DID identifier to resolve.
176
+ * type: string
177
+ * application/json:
178
+ * schema:
179
+ * type: object
180
+ * required:
181
+ * - did
182
+ * properties:
183
+ * did:
184
+ * description: DID identifier to resolve.
185
+ * type: string
186
+ * responses:
187
+ * 200:
188
+ * description: The request was successful.
189
+ * content:
190
+ * application/json:
191
+ * schema:
192
+ * $ref: '#/components/schemas/DidResult'
193
+ * 400:
194
+ * description: A problem with the input fields has occurred. Additional state information plus metadata may be available in the response body.
195
+ * content:
196
+ * application/json:
197
+ * schema:
198
+ * $ref: '#/components/schemas/InvalidRequest'
199
+ * example:
200
+ * error: InvalidRequest
201
+ * 401:
202
+ * $ref: '#/components/schemas/UnauthorizedError'
203
+ * 500:
204
+ * description: An internal error has occurred. Additional state information plus metadata may be available in the response body.
205
+ * content:
206
+ * application/json:
207
+ * schema:
208
+ * $ref: '#/components/schemas/InvalidRequest'
209
+ * example:
210
+ * error: Internal Error
211
+ */
212
+ importDid(request: Request, response: Response): Promise<Response<any, Record<string, any>>>;
213
+ }
214
+ //# sourceMappingURL=providers.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/api/providers.controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAajD,qBAAa,mBAAmB;IAC/B,OAAc,kBAAkB,yTAG9B;IAEF;;;;;;;;;;;;;;;;;;;OAmBG;IACG,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAW9C;;;;;;;;;;OAUG;IACG,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IA6BpD;;;;;;;;;;;;;;;OAeG;IACG,wBAAwB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IA2C1D;;;;;;;;;;;;;;;;;;;OAmBG;IACG,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAgClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACG,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAyE7D;;;;;;;;;;;;;;;;;;;OAmBG;IACG,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAsBhD;;;;;;;;;;;;;;;OAeG;IACG,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAiBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2DG;IAEU,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;CA4C3D"}
@@ -0,0 +1,462 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { StatusCodes } from 'http-status-codes';
8
+ import { ProviderService } from '../../services/api/provider.service.js';
9
+ import { validate } from '../validator/decorator.js';
10
+ import { DockIdentityService } from '../../services/identity/providers/index.js';
11
+ import { IdentityServiceStrategySetup } from '../../services/identity/index.js';
12
+ import { OperationCategoryNameEnum, OperationNameEnum } from '../../types/constants.js';
13
+ import { eventTracker } from '../../services/track/tracker.js';
14
+ import { check, param } from '../validator/index.js';
15
+ export class ProvidersController {
16
+ static importDIDValidator = [
17
+ check('did').exists().isDID().bail(),
18
+ param('providerId').exists().withMessage('providerId is required').isString().bail(),
19
+ ];
20
+ /**
21
+ * @openapi
22
+ * /providers:
23
+ * get:
24
+ * tags: [Providers]
25
+ * summary: Get all available credential providers
26
+ * description: Returns list of available credential providers
27
+ * responses:
28
+ * 200:
29
+ * description: Successful response
30
+ * content:
31
+ * application/json:
32
+ * schema:
33
+ * type: object
34
+ * properties:
35
+ * providers:
36
+ * type: array
37
+ * items:
38
+ * type: object
39
+ */
40
+ async getProviders(req, res) {
41
+ try {
42
+ const providers = await ProviderService.instance.getAllProviders();
43
+ return res.status(StatusCodes.OK).json({ providers });
44
+ }
45
+ catch (error) {
46
+ return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
47
+ error: `Internal error: ${error?.message || error}`,
48
+ });
49
+ }
50
+ }
51
+ /**
52
+ * @openapi
53
+ * /providers/activated:
54
+ * get:
55
+ * tags: [Providers]
56
+ * summary: Get customer's activated providers
57
+ * description: Returns list of providers activated by the customer
58
+ * responses:
59
+ * 200:
60
+ * description: Successful response
61
+ */
62
+ async getActiveProviders(req, res) {
63
+ try {
64
+ const customer = res.locals.customer;
65
+ const configurations = await ProviderService.instance.getCustomerConfigurations(customer.customerId);
66
+ const configuredProviders = configurations.map((config) => ({
67
+ configId: config.configId,
68
+ providerId: config.providerId,
69
+ tenantId: config.tenantId,
70
+ providerName: config.provider.name,
71
+ providerType: config.provider.providerType,
72
+ apiEndpoint: config.apiEndpoint,
73
+ webhookUrl: config.webhookUrl,
74
+ validated: config.validated,
75
+ validatedAt: config.validatedAt,
76
+ active: config.active,
77
+ defaultSettings: config.defaultSettings,
78
+ createdAt: config.createdAt,
79
+ updatedAt: config.updatedAt,
80
+ }));
81
+ return res.status(StatusCodes.OK).json({ providers: configuredProviders });
82
+ }
83
+ catch (error) {
84
+ return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
85
+ error: `Internal error: ${error?.message || error}`,
86
+ });
87
+ }
88
+ }
89
+ /**
90
+ * @openapi
91
+ * /providers/{providerId}/configuration:
92
+ * get:
93
+ * tags: [Providers]
94
+ * summary: Get provider configuration
95
+ * parameters:
96
+ * - name: providerId
97
+ * in: path
98
+ * required: true
99
+ * schema:
100
+ * type: string
101
+ * responses:
102
+ * 200:
103
+ * description: Provider configuration
104
+ */
105
+ async getProviderConfiguration(req, res) {
106
+ try {
107
+ const customer = res.locals.customer;
108
+ const { providerId } = req.params;
109
+ const config = await ProviderService.instance.getProviderConfiguration(customer.customerId, providerId);
110
+ if (!config) {
111
+ return res.status(StatusCodes.NOT_FOUND).json({
112
+ error: `No configuration found for provider ${providerId}`,
113
+ });
114
+ }
115
+ // Don't return encrypted API key
116
+ const safeConfig = {
117
+ configId: config.configId,
118
+ providerId: config.providerId,
119
+ tenantId: config.tenantId,
120
+ apiEndpoint: config.apiEndpoint,
121
+ webhookUrl: config.webhookUrl,
122
+ validated: config.validated,
123
+ validatedAt: config.validatedAt,
124
+ active: config.active,
125
+ defaultSettings: config.defaultSettings,
126
+ hasApiKey: !!config.encryptedApiKey,
127
+ provider: {
128
+ name: config.provider.name,
129
+ description: config.provider.description,
130
+ providerType: config.provider.providerType,
131
+ supportedFormats: config.provider.supportedFormats,
132
+ supportedProtocols: config.provider.supportedProtocols,
133
+ metadata: config.provider.metadata,
134
+ },
135
+ };
136
+ return res.status(StatusCodes.OK).json({ configuration: safeConfig });
137
+ }
138
+ catch (error) {
139
+ return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
140
+ error: `Internal error: ${error?.message || error}`,
141
+ });
142
+ }
143
+ }
144
+ /**
145
+ * @openapi
146
+ * /providers/{providerId}/activate:
147
+ * post:
148
+ * tags: [Providers]
149
+ * summary: Activate a provider for the customer
150
+ * parameters:
151
+ * - name: providerId
152
+ * in: path
153
+ * required: true
154
+ * schema:
155
+ * type: string
156
+ * responses:
157
+ * 200:
158
+ * description: Provider activated successfully
159
+ * 400:
160
+ * description: Invalid provider or already activated
161
+ * 404:
162
+ * description: Provider not found
163
+ */
164
+ async activateProvider(req, res) {
165
+ try {
166
+ const customer = res.locals.customer;
167
+ const { providerId } = req.params;
168
+ const config = await ProviderService.instance.activateProvider(customer.customerId, providerId);
169
+ return res.status(StatusCodes.OK).json({
170
+ message: 'Provider activated successfully',
171
+ configuration: {
172
+ configId: config.configId,
173
+ providerId: config.providerId,
174
+ tenantId: config.tenantId,
175
+ providerName: config.provider.name,
176
+ apiEndpoint: config.apiEndpoint,
177
+ active: config.active,
178
+ createdAt: config.createdAt,
179
+ },
180
+ });
181
+ }
182
+ catch (error) {
183
+ const status = error?.message.includes('not found')
184
+ ? StatusCodes.NOT_FOUND
185
+ : error?.message.includes('already activated')
186
+ ? StatusCodes.CONFLICT
187
+ : StatusCodes.BAD_REQUEST;
188
+ return res.status(status).json({
189
+ error: `Activation failed: ${error?.message || error}`,
190
+ });
191
+ }
192
+ }
193
+ /**
194
+ * @openapi
195
+ * /providers/{providerId}/configuration:
196
+ * put:
197
+ * tags: [Providers]
198
+ * summary: Update provider configuration
199
+ * parameters:
200
+ * - name: providerId
201
+ * in: path
202
+ * required: true
203
+ * schema:
204
+ * type: string
205
+ * requestBody:
206
+ * required: true
207
+ * content:
208
+ * application/json:
209
+ * schema:
210
+ * type: object
211
+ * properties:
212
+ * apiEndpoint:
213
+ * type: string
214
+ * format: uri
215
+ * description: API endpoint URL
216
+ * webhookUrl:
217
+ * type: string
218
+ * format: uri
219
+ * description: Webhook URL for notifications
220
+ * defaultSettings:
221
+ * type: object
222
+ * description: Provider-specific default settings
223
+ * responses:
224
+ * 200:
225
+ * description: Configuration updated successfully
226
+ * 400:
227
+ * description: Invalid configuration data
228
+ * 404:
229
+ * description: Provider configuration not found
230
+ */
231
+ async updateProviderConfiguration(req, res) {
232
+ try {
233
+ const customer = res.locals.customer;
234
+ const { providerId } = req.params;
235
+ const { apiEndpoint, webhookUrl, defaultSettings } = req.body;
236
+ // Validate input
237
+ if (apiEndpoint && typeof apiEndpoint !== 'string') {
238
+ return res.status(StatusCodes.BAD_REQUEST).json({
239
+ error: 'Invalid API endpoint: must be a string',
240
+ });
241
+ }
242
+ if (webhookUrl && typeof webhookUrl !== 'string') {
243
+ return res.status(StatusCodes.BAD_REQUEST).json({
244
+ error: 'Invalid webhook URL: must be a string',
245
+ });
246
+ }
247
+ if (process.env.APPLICATION_BASE_URL?.includes('localhost')) {
248
+ console.warn('Skipping URL validation in local development environment');
249
+ }
250
+ else {
251
+ if (apiEndpoint && !apiEndpoint.startsWith('https://')) {
252
+ return res.status(StatusCodes.BAD_REQUEST).json({
253
+ error: 'API endpoint must be a valid HTTPS URL',
254
+ });
255
+ }
256
+ if (webhookUrl && webhookUrl.trim() && !webhookUrl.startsWith('https://')) {
257
+ return res.status(StatusCodes.BAD_REQUEST).json({
258
+ error: 'Webhook URL must be a valid HTTPS URL',
259
+ });
260
+ }
261
+ }
262
+ const updatedConfig = await ProviderService.instance.updateProviderConfiguration(customer.customerId, providerId, {
263
+ apiEndpoint: apiEndpoint?.trim() || undefined,
264
+ webhookUrl: webhookUrl?.trim() || undefined,
265
+ defaultSettings: defaultSettings || undefined,
266
+ });
267
+ const safeConfig = {
268
+ configId: updatedConfig.configId,
269
+ providerId: updatedConfig.providerId,
270
+ apiEndpoint: updatedConfig.apiEndpoint,
271
+ webhookUrl: updatedConfig.webhookUrl,
272
+ validated: updatedConfig.validated,
273
+ validatedAt: updatedConfig.validatedAt,
274
+ active: updatedConfig.active,
275
+ defaultSettings: updatedConfig.defaultSettings,
276
+ hasApiKey: !!updatedConfig.encryptedApiKey,
277
+ updatedAt: updatedConfig.updatedAt,
278
+ };
279
+ return res.status(StatusCodes.OK).json({
280
+ message: 'Provider configuration updated successfully',
281
+ data: safeConfig,
282
+ });
283
+ }
284
+ catch (error) {
285
+ const status = error?.message.includes('not found')
286
+ ? StatusCodes.NOT_FOUND
287
+ : StatusCodes.BAD_REQUEST;
288
+ return res.status(status).json({
289
+ error: `Configuration update failed: ${error?.message || error}`,
290
+ });
291
+ }
292
+ }
293
+ /**
294
+ * @openapi
295
+ * /providers/{providerId}/test:
296
+ * post:
297
+ * tags: [Providers]
298
+ * summary: Test connection to a provider
299
+ * parameters:
300
+ * - name: providerId
301
+ * in: path
302
+ * required: true
303
+ * schema:
304
+ * type: string
305
+ * responses:
306
+ * 200:
307
+ * description: Connection test completed
308
+ * 400:
309
+ * description: Connection test failed
310
+ * 404:
311
+ * description: Provider configuration not found
312
+ */
313
+ async testConnection(req, res) {
314
+ try {
315
+ const customer = res.locals.customer;
316
+ const { providerId } = req.params;
317
+ const result = await ProviderService.instance.testConnection(customer.customerId, providerId);
318
+ const statusCode = result.success ? StatusCodes.OK : StatusCodes.BAD_REQUEST;
319
+ return res.status(statusCode).json({
320
+ providerId,
321
+ success: result.success,
322
+ message: result.message,
323
+ testedAt: new Date().toISOString(),
324
+ });
325
+ }
326
+ catch (error) {
327
+ return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
328
+ error: `Connection test failed: ${error?.message || error}`,
329
+ });
330
+ }
331
+ }
332
+ /**
333
+ * @openapi
334
+ * /providers/{providerId}:
335
+ * delete:
336
+ * tags: [Providers]
337
+ * summary: Remove provider configuration
338
+ * parameters:
339
+ * - name: providerId
340
+ * in: path
341
+ * required: true
342
+ * schema:
343
+ * type: string
344
+ * responses:
345
+ * 200:
346
+ * description: Configuration removed successfully
347
+ */
348
+ async removeProvider(req, res) {
349
+ try {
350
+ const customer = res.locals.customer;
351
+ const { providerId } = req.params;
352
+ await ProviderService.instance.deleteConfiguration(customer.customerId, providerId);
353
+ return res.status(StatusCodes.OK).json({
354
+ message: `Provider ${providerId} configuration removed successfully`,
355
+ });
356
+ }
357
+ catch (error) {
358
+ return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
359
+ error: `Internal error: ${error?.message || error}`,
360
+ });
361
+ }
362
+ }
363
+ /**
364
+ * @openapi
365
+ *
366
+ * /providers/{providerId}/did/import:
367
+ * post:
368
+ * tags: [ Providers ]
369
+ * summary: Import a DID into a Provider.
370
+ * description: This endpoint imports a decentralized identifier associated with the user's account with the custodied keys into a provider.
371
+ * parameters:
372
+ * - name: providerId
373
+ * in: path
374
+ * required: true
375
+ * schema:
376
+ * type: string
377
+ * requestBody:
378
+ * content:
379
+ * application/x-www-form-urlencoded:
380
+ * schema:
381
+ * type: object
382
+ * required:
383
+ * - did
384
+ * properties:
385
+ * did:
386
+ * description: DID identifier to resolve.
387
+ * type: string
388
+ * application/json:
389
+ * schema:
390
+ * type: object
391
+ * required:
392
+ * - did
393
+ * properties:
394
+ * did:
395
+ * description: DID identifier to resolve.
396
+ * type: string
397
+ * responses:
398
+ * 200:
399
+ * description: The request was successful.
400
+ * content:
401
+ * application/json:
402
+ * schema:
403
+ * $ref: '#/components/schemas/DidResult'
404
+ * 400:
405
+ * description: A problem with the input fields has occurred. Additional state information plus metadata may be available in the response body.
406
+ * content:
407
+ * application/json:
408
+ * schema:
409
+ * $ref: '#/components/schemas/InvalidRequest'
410
+ * example:
411
+ * error: InvalidRequest
412
+ * 401:
413
+ * $ref: '#/components/schemas/UnauthorizedError'
414
+ * 500:
415
+ * description: An internal error has occurred. Additional state information plus metadata may be available in the response body.
416
+ * content:
417
+ * application/json:
418
+ * schema:
419
+ * $ref: '#/components/schemas/InvalidRequest'
420
+ * example:
421
+ * error: Internal Error
422
+ */
423
+ async importDid(request, response) {
424
+ try {
425
+ const { providerId } = request.params;
426
+ const { did } = request.body;
427
+ let importedResult;
428
+ switch (providerId) {
429
+ case 'dock':
430
+ const identityServiceStrategySetup = new IdentityServiceStrategySetup(response.locals.customer);
431
+ const exportedResult = await identityServiceStrategySetup.agent.exportDid(did, process.env.PROVIDER_EXPORT_PASSWORD || '', response.locals.customer);
432
+ importedResult = await new DockIdentityService().importDidV2(did, exportedResult, process.env.PROVIDER_EXPORT_PASSWORD || '', response.locals.customer);
433
+ break;
434
+ default:
435
+ throw new Error(`Importing into provider ${providerId || 'studio'} is not supported`);
436
+ }
437
+ // Track the operation
438
+ eventTracker.emit('track', {
439
+ category: OperationCategoryNameEnum.DID,
440
+ name: OperationNameEnum.DID_EXPORT,
441
+ data: {
442
+ did: did,
443
+ },
444
+ customer: response.locals.customer,
445
+ user: response.locals.user,
446
+ });
447
+ return response.status(StatusCodes.OK).json({
448
+ status: true,
449
+ ...importedResult,
450
+ });
451
+ }
452
+ catch (error) {
453
+ return response.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
454
+ error: `Internal error: ${error?.message || error}`,
455
+ });
456
+ }
457
+ }
458
+ }
459
+ __decorate([
460
+ validate
461
+ ], ProvidersController.prototype, "importDid", null);
462
+ //# sourceMappingURL=providers.controller.js.map