@ductape/sdk 0.1.10 → 0.1.12
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/dist/api/services/cloudApi.service.d.ts +10 -8
- package/dist/api/services/cloudApi.service.js +63 -38
- package/dist/api/services/cloudApi.service.js.map +1 -1
- package/dist/api/urls.d.ts +2 -0
- package/dist/api/urls.js +3 -1
- package/dist/api/urls.js.map +1 -1
- package/dist/cloud/cloud-api.util.d.ts +4 -0
- package/dist/cloud/cloud-api.util.js +9 -0
- package/dist/cloud/cloud-api.util.js.map +1 -0
- package/dist/cloud/cloud-broker-link.util.d.ts +9 -0
- package/dist/cloud/cloud-broker-link.util.js +62 -0
- package/dist/cloud/cloud-broker-link.util.js.map +1 -0
- package/dist/cloud/cloud-database-link.util.d.ts +12 -0
- package/dist/cloud/cloud-database-link.util.js +65 -0
- package/dist/cloud/cloud-database-link.util.js.map +1 -0
- package/dist/cloud/cloud-runtime.util.js +13 -8
- package/dist/cloud/cloud-runtime.util.js.map +1 -1
- package/dist/cloud/cloud.service.d.ts +11 -16
- package/dist/cloud/cloud.service.js +10 -14
- package/dist/cloud/cloud.service.js.map +1 -1
- package/dist/cloud/index.d.ts +3 -0
- package/dist/cloud/index.js +7 -1
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/types/cloud.types.d.ts +14 -4
- package/dist/database/databases.service.js +2 -0
- package/dist/database/databases.service.js.map +1 -1
- package/dist/database/types/connection.interface.d.ts +4 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -1
- package/dist/products/services/products.service.d.ts +1 -0
- package/dist/products/services/products.service.js +95 -14
- package/dist/products/services/products.service.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productDatabase.validator.js +22 -17
- package/dist/products/validators/joi-validators/create.productDatabase.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js +23 -4
- package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productStorage.validator.js +39 -26
- package/dist/products/validators/joi-validators/create.productStorage.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.productDatabase.validator.js +4 -0
- package/dist/products/validators/joi-validators/update.productDatabase.validator.js.map +1 -1
- package/dist/storage/storage-cloud-link.util.d.ts +13 -0
- package/dist/storage/storage-cloud-link.util.js +92 -0
- package/dist/storage/storage-cloud-link.util.js.map +1 -0
- package/dist/types/productsBuilder.types.d.ts +9 -0
- package/dist/types/productsBuilder.types.js.map +1 -1
- package/package.json +1 -1
|
@@ -28,17 +28,18 @@ class CloudService {
|
|
|
28
28
|
async listConnections() {
|
|
29
29
|
return this.api.listConnections(this.auth());
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
/** Fetch a workspace cloud connection by tag */
|
|
32
|
+
async fetchConnection(cloud) {
|
|
33
|
+
return this.api.fetchConnection(cloud, this.auth());
|
|
33
34
|
}
|
|
34
|
-
async deleteConnection(
|
|
35
|
-
return this.api.deleteConnection(
|
|
35
|
+
async deleteConnection(cloud) {
|
|
36
|
+
return this.api.deleteConnection(cloud, this.auth());
|
|
36
37
|
}
|
|
37
|
-
async completeConnection(
|
|
38
|
-
return this.api.completeConnection(
|
|
38
|
+
async completeConnection(cloud, input) {
|
|
39
|
+
return this.api.completeConnection(cloud, input, this.auth());
|
|
39
40
|
}
|
|
40
|
-
async validateConnection(
|
|
41
|
-
return this.api.validateConnection(
|
|
41
|
+
async validateConnection(cloud) {
|
|
42
|
+
return this.api.validateConnection(cloud, this.auth());
|
|
42
43
|
}
|
|
43
44
|
async listResources(input) {
|
|
44
45
|
return this.api.listResources(input, this.auth());
|
|
@@ -52,17 +53,11 @@ class CloudService {
|
|
|
52
53
|
async issueRuntimeCredentials(input) {
|
|
53
54
|
return this.api.issueRuntimeCredentials(input, this.auth());
|
|
54
55
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Import a cloud resource and persist the returned draft on the product via ProductsBuilder.
|
|
57
|
-
*/
|
|
58
56
|
async importAndPersist(input) {
|
|
59
57
|
const result = await this.importResource(input);
|
|
60
58
|
await this.persistComponentDraft(input.productTag, result.componentDraft);
|
|
61
59
|
return result;
|
|
62
60
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Provision in cloud and persist the component draft on the product.
|
|
65
|
-
*/
|
|
66
61
|
async provisionAndPersist(input) {
|
|
67
62
|
const result = await this.provisionResource(input);
|
|
68
63
|
await this.persistComponentDraft(input.productTag, result.componentDraft);
|
|
@@ -118,4 +113,5 @@ class CloudService {
|
|
|
118
113
|
}
|
|
119
114
|
}
|
|
120
115
|
exports.CloudService = CloudService;
|
|
116
|
+
exports.default = CloudService;
|
|
121
117
|
//# sourceMappingURL=cloud.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.service.js","sourceRoot":"","sources":["../../src/cloud/cloud.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"cloud.service.js","sourceRoot":"","sources":["../../src/cloud/cloud.service.ts"],"names":[],"mappings":"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"}
|
package/dist/cloud/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { CloudService, CloudError } from './cloud.service';
|
|
2
2
|
export type { ICloudServiceDeps } from './cloud.service';
|
|
3
3
|
export { resolveCloudLinkedConfig, resolveCloudLinkedEnvConfig } from './cloud-runtime.util';
|
|
4
|
+
export { materializeCloudLinkedBrokerEnv } from './cloud-broker-link.util';
|
|
5
|
+
export { materializeCloudLinkedDatabaseEnv } from './cloud-database-link.util';
|
|
6
|
+
export { resolveCloudConnectionId } from './cloud-api.util';
|
|
4
7
|
export type { ICloudRuntimeContext } from './cloud-runtime.util';
|
|
5
8
|
export * from './types';
|
package/dist/cloud/index.js
CHANGED
|
@@ -14,12 +14,18 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.resolveCloudLinkedEnvConfig = exports.resolveCloudLinkedConfig = exports.CloudError = exports.CloudService = void 0;
|
|
17
|
+
exports.resolveCloudConnectionId = exports.materializeCloudLinkedDatabaseEnv = exports.materializeCloudLinkedBrokerEnv = exports.resolveCloudLinkedEnvConfig = exports.resolveCloudLinkedConfig = exports.CloudError = exports.CloudService = void 0;
|
|
18
18
|
var cloud_service_1 = require("./cloud.service");
|
|
19
19
|
Object.defineProperty(exports, "CloudService", { enumerable: true, get: function () { return cloud_service_1.CloudService; } });
|
|
20
20
|
Object.defineProperty(exports, "CloudError", { enumerable: true, get: function () { return cloud_service_1.CloudError; } });
|
|
21
21
|
var cloud_runtime_util_1 = require("./cloud-runtime.util");
|
|
22
22
|
Object.defineProperty(exports, "resolveCloudLinkedConfig", { enumerable: true, get: function () { return cloud_runtime_util_1.resolveCloudLinkedConfig; } });
|
|
23
23
|
Object.defineProperty(exports, "resolveCloudLinkedEnvConfig", { enumerable: true, get: function () { return cloud_runtime_util_1.resolveCloudLinkedEnvConfig; } });
|
|
24
|
+
var cloud_broker_link_util_1 = require("./cloud-broker-link.util");
|
|
25
|
+
Object.defineProperty(exports, "materializeCloudLinkedBrokerEnv", { enumerable: true, get: function () { return cloud_broker_link_util_1.materializeCloudLinkedBrokerEnv; } });
|
|
26
|
+
var cloud_database_link_util_1 = require("./cloud-database-link.util");
|
|
27
|
+
Object.defineProperty(exports, "materializeCloudLinkedDatabaseEnv", { enumerable: true, get: function () { return cloud_database_link_util_1.materializeCloudLinkedDatabaseEnv; } });
|
|
28
|
+
var cloud_api_util_1 = require("./cloud-api.util");
|
|
29
|
+
Object.defineProperty(exports, "resolveCloudConnectionId", { enumerable: true, get: function () { return cloud_api_util_1.resolveCloudConnectionId; } });
|
|
24
30
|
__exportStar(require("./types"), exports);
|
|
25
31
|
//# sourceMappingURL=index.js.map
|
package/dist/cloud/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iDAA2D;AAAlD,6GAAA,YAAY,OAAA;AAAE,2GAAA,UAAU,OAAA;AAEjC,2DAA6F;AAApF,8HAAA,wBAAwB,OAAA;AAAE,iIAAA,2BAA2B,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iDAA2D;AAAlD,6GAAA,YAAY,OAAA;AAAE,2GAAA,UAAU,OAAA;AAEjC,2DAA6F;AAApF,8HAAA,wBAAwB,OAAA;AAAE,iIAAA,2BAA2B,OAAA;AAC9D,mEAA2E;AAAlE,yIAAA,+BAA+B,OAAA;AACxC,uEAA+E;AAAtE,6IAAA,iCAAiC,OAAA;AAC1C,mDAA4D;AAAnD,0HAAA,wBAAwB,OAAA;AAEjC,0CAAwB"}
|
|
@@ -15,6 +15,7 @@ export interface ICloudConnection {
|
|
|
15
15
|
workspace_id: string;
|
|
16
16
|
provider: CloudProvider;
|
|
17
17
|
display_name: string;
|
|
18
|
+
tag: string;
|
|
18
19
|
account_identifier: string;
|
|
19
20
|
auth_mode: CloudAuthMode;
|
|
20
21
|
status: CloudConnectionStatus;
|
|
@@ -68,7 +69,8 @@ export interface ICloudResource {
|
|
|
68
69
|
metadata?: Record<string, unknown>;
|
|
69
70
|
}
|
|
70
71
|
export interface IListCloudResourcesInput {
|
|
71
|
-
|
|
72
|
+
/** Workspace cloud connection tag */
|
|
73
|
+
cloud: string;
|
|
72
74
|
service: CloudResourceService;
|
|
73
75
|
region?: string;
|
|
74
76
|
prefix?: string;
|
|
@@ -85,7 +87,8 @@ export interface IListCloudResourcesResult {
|
|
|
85
87
|
/** Target Ductape component when importing or provisioning */
|
|
86
88
|
export type CloudComponentType = 'storage' | 'messageBrokers' | 'databases' | 'graphs' | 'vectors' | 'caches';
|
|
87
89
|
export interface IImportCloudResourceInput {
|
|
88
|
-
|
|
90
|
+
/** Workspace cloud connection tag */
|
|
91
|
+
cloud: string;
|
|
89
92
|
service: CloudResourceService;
|
|
90
93
|
resourceId: string;
|
|
91
94
|
componentType: CloudComponentType;
|
|
@@ -94,7 +97,8 @@ export interface IImportCloudResourceInput {
|
|
|
94
97
|
envSlug: string;
|
|
95
98
|
}
|
|
96
99
|
export interface IProvisionCloudResourceInput {
|
|
97
|
-
|
|
100
|
+
/** Workspace cloud connection tag */
|
|
101
|
+
cloud: string;
|
|
98
102
|
service: CloudResourceService;
|
|
99
103
|
template: string;
|
|
100
104
|
componentType: CloudComponentType;
|
|
@@ -120,7 +124,10 @@ export interface IProvisionCloudResourceResult extends IImportCloudResourceResul
|
|
|
120
124
|
}
|
|
121
125
|
/** Runtime short-lived credentials (proxy / connector broker) */
|
|
122
126
|
export interface ICloudRuntimeCredentialsInput {
|
|
123
|
-
|
|
127
|
+
/** Workspace cloud connection tag */
|
|
128
|
+
cloud?: string;
|
|
129
|
+
/** @deprecated Legacy persisted configs only */
|
|
130
|
+
connectionId?: string;
|
|
124
131
|
productTag: string;
|
|
125
132
|
componentTag: string;
|
|
126
133
|
envSlug: string;
|
|
@@ -135,6 +142,9 @@ export interface ICloudRuntimeCredentials {
|
|
|
135
142
|
export type ComponentCloudAuthMode = 'manual' | 'cloud_connection';
|
|
136
143
|
export interface ICloudLinkedComponentFields {
|
|
137
144
|
authMode?: ComponentCloudAuthMode;
|
|
145
|
+
/** User-friendly cloud connection tag (preferred over cloudConnectionId) */
|
|
146
|
+
cloud?: string;
|
|
147
|
+
/** @deprecated Use cloud tag instead Host configs */
|
|
138
148
|
cloudConnectionId?: string;
|
|
139
149
|
roleArn?: string;
|
|
140
150
|
}
|
|
@@ -573,6 +573,7 @@ class DatabaseService {
|
|
|
573
573
|
description: config.description,
|
|
574
574
|
authMode: envConfig.authMode,
|
|
575
575
|
cloudConnectionId: envConfig.cloudConnectionId,
|
|
576
|
+
cloud: envConfig.cloud,
|
|
576
577
|
});
|
|
577
578
|
}
|
|
578
579
|
}
|
|
@@ -836,6 +837,7 @@ class DatabaseService {
|
|
|
836
837
|
connection_url: context.connectionUrl,
|
|
837
838
|
authMode: context.authMode,
|
|
838
839
|
cloudConnectionId: context.cloudConnectionId,
|
|
840
|
+
cloud: context.cloud,
|
|
839
841
|
}, {
|
|
840
842
|
environment: this.config.env_type,
|
|
841
843
|
auth: {
|