@sap/cds-mtxs
Advanced tools
Comparing version 1.13.3 to 1.13.4
@@ -9,2 +9,8 @@ # Change Log | ||
## Version 1.13.4 - 2023-12-07 | ||
### Changed | ||
- The built-in Service Manager client uses async APIs for creating or deleting service bindings by default. | ||
## Version 1.13.3 - 2023-12-05 | ||
@@ -11,0 +17,0 @@ |
{ | ||
"name": "@sap/cds-mtxs", | ||
"version": "1.13.3", | ||
"version": "1.13.4", | ||
"description": "SAP Cloud Application Programming Model - Multitenancy library", | ||
@@ -5,0 +5,0 @@ "homepage": "https://cap.cloud.sap/", |
@@ -33,3 +33,3 @@ const cds = require('@sap/cds/lib') | ||
tenantToDbUrl = (await hana.getAll(tenants)).reduce((res, t) => { | ||
const id = t.labels.tenant_id[0] | ||
const id = t.tenant_id ?? t.labels.tenant_id[0] | ||
if (!t.credentials) throw new Error('Credentials for tenant ' + id + ' are not available.') | ||
@@ -36,0 +36,0 @@ return { ...res, [id]: `${t.credentials.host}:${t.credentials.port}` } |
@@ -27,7 +27,7 @@ const https = require('https') | ||
try { | ||
_instance = await api.post('service_instances', { | ||
_instance = await api.post('service_instances?async=true', { | ||
name, service_plan_id, parameters: provisioning_parameters, | ||
labels: { tenant_id: [tenant] }, | ||
}) | ||
service_instance_id = await _poll(_instance.headers.location) | ||
service_instance_id = (await _poll(_instance.headers.location)).resource_id | ||
} catch (e) { | ||
@@ -37,7 +37,8 @@ if (e.status === 409) service_instance_id = (await _instance4(tenant)).id | ||
} | ||
const { data } = await api.post('service_bindings', { | ||
const _binding = await api.post('service_bindings?async=true', { | ||
name: tenant + `-${uuid()}`, service_instance_id, binding_parameters, | ||
labels: { tenant_id: [tenant], service_plan_id: [service_plan_id], managing_client_lib: ['instance-manager-client-lib'] } | ||
}) | ||
const binding = { ...data, tags: ['hana'] } | ||
await _poll(_binding.headers.location) | ||
const binding = { ...await get(tenant), tags: ['hana'] } | ||
return cacheBindings ? _bindings4.cached[tenant] = binding : binding | ||
@@ -53,6 +54,4 @@ } | ||
// TODO revisit control flow | ||
async function get(tenant, options) { | ||
let credentials | ||
let result | ||
let credentials, result | ||
try { | ||
@@ -78,3 +77,5 @@ [{ credentials } = {}] = await _bindings4([tenant], options) | ||
const bindings = await _bindings4([tenant], { disableCache: true }) | ||
const _deleteBindings = bindings.map(({id}) => api.delete(`service_bindings/${id}`)) | ||
const _deleteBindings = bindings.map(async ({ id }) => | ||
_poll((await api.delete(`service_bindings/${id}?async=true`)).headers.location) | ||
) | ||
if (cacheBindings) delete _bindings4.cached[tenant] | ||
@@ -86,3 +87,3 @@ const failedDeletions = (await Promise.allSettled(_deleteBindings)).filter(d => d.status === 'rejected') | ||
if (instance) { | ||
const _deleteInstance = await api.delete(`service_instances/${instance.id}`) | ||
const _deleteInstance = await api.delete(`service_instances/${instance.id}?async=true`) | ||
if (_deleteInstance.headers.location) await _poll(_deleteInstance.headers.location) | ||
@@ -98,3 +99,3 @@ } | ||
const fieldQuery = `name eq '${await _instanceName4(tenant)}'` | ||
const instances = await api.get('service_instances', { params: { fieldQuery }}) | ||
const instances = await api.get('service_instances?async=true', { params: { fieldQuery }}) | ||
return instances.data.items[0] | ||
@@ -167,4 +168,4 @@ } | ||
const _next = async (resolve, reject) => { | ||
const { data: { state, resource_id, errors }} = await api.get(location.slice(4)) // Remove '/v1/' | ||
if (state === 'succeeded') return resolve(resource_id) | ||
const { data, data: { state, errors } } = await api.get(location.slice('/v1/'.length)) | ||
if (state === 'succeeded') return resolve(data) | ||
if (state === 'failed') return reject(errors[0] ?? errors) | ||
@@ -171,0 +172,0 @@ if (attempts > 20) return reject(new Error(`Polling ${location} timed out`)) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
235987
4509