@axiom-lattice/client-sdk 3.0.6 → 4.0.1
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/README.md +37 -0
- package/dist/__tests__/a2a-keys.test.d.ts +8 -0
- package/dist/__tests__/a2a-keys.test.d.ts.map +1 -0
- package/dist/__tests__/a2a-keys.test.js +110 -0
- package/dist/__tests__/a2a-keys.test.js.map +1 -0
- package/dist/__tests__/export-import.test.d.ts +2 -0
- package/dist/__tests__/export-import.test.d.ts.map +1 -0
- package/dist/__tests__/export-import.test.js +245 -0
- package/dist/__tests__/export-import.test.js.map +1 -0
- package/dist/__tests__/tasks.test.d.ts +2 -0
- package/dist/__tests__/tasks.test.d.ts.map +1 -0
- package/dist/__tests__/tasks.test.js +67 -0
- package/dist/__tests__/tasks.test.js.map +1 -0
- package/dist/__tests__/web-apps.test.d.ts +8 -0
- package/dist/__tests__/web-apps.test.d.ts.map +1 -0
- package/dist/__tests__/web-apps.test.js +166 -0
- package/dist/__tests__/web-apps.test.js.map +1 -0
- package/dist/__tests__/workspace-client.test.d.ts +10 -0
- package/dist/__tests__/workspace-client.test.d.ts.map +1 -0
- package/dist/__tests__/workspace-client.test.js +56 -0
- package/dist/__tests__/workspace-client.test.js.map +1 -0
- package/dist/abstract-client.d.ts +106 -2
- package/dist/abstract-client.d.ts.map +1 -1
- package/dist/abstract-client.js +170 -3
- package/dist/abstract-client.js.map +1 -1
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -1
- package/dist/export-import.d.ts +136 -24
- package/dist/export-import.d.ts.map +1 -1
- package/dist/export-import.js +142 -48
- package/dist/export-import.js.map +1 -1
- package/dist/index.d.ts +322 -35
- package/dist/index.js +359 -96
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +359 -96
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.ts +72 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/workspace-client.d.ts +2 -2
- package/dist/workspace-client.d.ts.map +1 -1
- package/dist/workspace-client.js +7 -2
- package/dist/workspace-client.js.map +1 -1
- package/package.json +2 -2
package/dist/export-import.js
CHANGED
|
@@ -1,81 +1,175 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
function base64ToBytes(base64) {
|
|
2
|
+
if (typeof globalThis.atob === "function") {
|
|
3
|
+
const binary = globalThis.atob(base64);
|
|
4
|
+
const bytes = new Uint8Array(binary.length);
|
|
5
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
6
|
+
bytes[index] = binary.charCodeAt(index);
|
|
7
|
+
}
|
|
8
|
+
return bytes;
|
|
9
|
+
}
|
|
10
|
+
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
11
|
+
}
|
|
12
|
+
function bytesToArrayBuffer(bytes) {
|
|
13
|
+
return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
14
|
+
}
|
|
15
|
+
async function archiveToBlob(archive) {
|
|
16
|
+
if (typeof archive === "string") {
|
|
17
|
+
return {
|
|
18
|
+
blob: new Blob([bytesToArrayBuffer(base64ToBytes(archive))], { type: "application/gzip" }),
|
|
19
|
+
filename: "tenant-import.tar.gz",
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (archive instanceof Blob) {
|
|
23
|
+
const filename = "name" in archive && typeof archive.name === "string"
|
|
24
|
+
? archive.name
|
|
25
|
+
: "tenant-import.tar.gz";
|
|
26
|
+
return { blob: archive, filename };
|
|
27
|
+
}
|
|
28
|
+
const bytes = archive instanceof Uint8Array
|
|
29
|
+
? archive
|
|
30
|
+
: archive instanceof ArrayBuffer
|
|
31
|
+
? new Uint8Array(archive)
|
|
32
|
+
: new Uint8Array(await archive.arrayBuffer());
|
|
33
|
+
return {
|
|
34
|
+
blob: new Blob([bytesToArrayBuffer(bytes)], { type: "application/gzip" }),
|
|
35
|
+
filename: "tenant-import.tar.gz",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function attachmentFilename(contentDisposition) {
|
|
39
|
+
if (!contentDisposition)
|
|
40
|
+
return "tenant-export.tar.gz";
|
|
41
|
+
const encoded = contentDisposition.match(/filename\*=UTF-8''([^;]+)/i)?.[1];
|
|
42
|
+
if (encoded) {
|
|
43
|
+
try {
|
|
44
|
+
return decodeURIComponent(encoded);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return encoded;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return contentDisposition.match(/filename="([^"]+)"/i)?.[1]
|
|
51
|
+
?? contentDisposition.match(/filename=([^;\s]+)/i)?.[1]
|
|
52
|
+
?? "tenant-export.tar.gz";
|
|
53
|
+
}
|
|
54
|
+
/** Client for the gateway tenant export/import archive API. */
|
|
7
55
|
export class ExportImportClient {
|
|
8
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Creates an export/import client.
|
|
58
|
+
*
|
|
59
|
+
* @param config - Base client configuration.
|
|
60
|
+
* @param headerProvider - Optional provider for headers that change after construction.
|
|
61
|
+
*/
|
|
62
|
+
constructor(config, headerProvider) {
|
|
9
63
|
this.baseURL = config.baseURL;
|
|
10
64
|
this.headers = {
|
|
11
65
|
"Content-Type": "application/json",
|
|
12
66
|
Authorization: `Bearer ${config.apiKey}`,
|
|
13
67
|
...config.headers,
|
|
14
68
|
};
|
|
69
|
+
this.headerProvider = headerProvider;
|
|
15
70
|
}
|
|
16
71
|
async request(url, options = {}) {
|
|
17
|
-
const
|
|
18
|
-
|
|
72
|
+
const headers = {
|
|
73
|
+
...this.headers,
|
|
74
|
+
...this.headerProvider?.(),
|
|
75
|
+
...options.headers,
|
|
76
|
+
};
|
|
77
|
+
if (options.body instanceof FormData) {
|
|
78
|
+
for (const name of Object.keys(headers)) {
|
|
79
|
+
if (name.toLowerCase() === "content-type")
|
|
80
|
+
delete headers[name];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const response = await fetch(`${this.baseURL}${url}`, {
|
|
84
|
+
method: options.method ?? "GET",
|
|
19
85
|
...options,
|
|
20
|
-
headers
|
|
21
|
-
...this.headers,
|
|
22
|
-
...options.headers,
|
|
23
|
-
},
|
|
86
|
+
headers,
|
|
24
87
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
throw new Error(
|
|
88
|
+
const envelope = (await response.json().catch(() => ({})));
|
|
89
|
+
if (!response.ok || envelope.success === false) {
|
|
90
|
+
throw new Error(envelope.message || envelope.error || `HTTP error! Status: ${response.status}`);
|
|
91
|
+
}
|
|
92
|
+
if (envelope.data === undefined) {
|
|
93
|
+
throw new Error(envelope.message || envelope.error || "API response contained no data");
|
|
28
94
|
}
|
|
29
|
-
return
|
|
95
|
+
return envelope.data;
|
|
30
96
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return
|
|
97
|
+
/** Returns all entity types registered for export. */
|
|
98
|
+
getExportableTypes() {
|
|
99
|
+
return this.request("/api/tenants/exportable-types");
|
|
34
100
|
}
|
|
35
|
-
|
|
36
|
-
|
|
101
|
+
/** Starts an export or returns dependencies requiring confirmation. */
|
|
102
|
+
exportConfig(tenantId, entityTypes, entityIds) {
|
|
103
|
+
return this.request(`/api/tenants/${tenantId}/export`, {
|
|
37
104
|
method: "POST",
|
|
38
|
-
body: JSON.stringify({ entityTypes }),
|
|
105
|
+
body: JSON.stringify({ entityTypes, ...(entityIds ? { entityIds } : {}) }),
|
|
39
106
|
});
|
|
40
|
-
return response.data;
|
|
41
107
|
}
|
|
42
|
-
|
|
43
|
-
|
|
108
|
+
/** Starts an export after confirming dependency additions. */
|
|
109
|
+
exportConfigConfirm(tenantId, entityTypes, entityIds) {
|
|
110
|
+
return this.request(`/api/tenants/${tenantId}/export/confirm`, {
|
|
44
111
|
method: "POST",
|
|
45
|
-
body: JSON.stringify({ entityTypes }),
|
|
112
|
+
body: JSON.stringify({ entityTypes, ...(entityIds ? { entityIds } : {}) }),
|
|
46
113
|
});
|
|
47
|
-
return response.data;
|
|
48
114
|
}
|
|
115
|
+
/** Lists selectable entities for the requested export types. */
|
|
116
|
+
previewEntities(tenantId, entityTypes) {
|
|
117
|
+
return this.request(`/api/tenants/${tenantId}/export/entities`, { method: "POST", body: JSON.stringify({ entityTypes }) });
|
|
118
|
+
}
|
|
119
|
+
/** Returns the gateway URL for an export download job. */
|
|
49
120
|
getExportDownloadUrl(tenantId, jobId) {
|
|
50
121
|
return `${this.baseURL}/api/tenants/${tenantId}/export/${jobId}/download`;
|
|
51
122
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
headers,
|
|
61
|
-
body: formData,
|
|
123
|
+
/** Downloads an export archive as raw bytes. */
|
|
124
|
+
async downloadExport(tenantId, jobId) {
|
|
125
|
+
const response = await fetch(`${this.baseURL}/api/tenants/${tenantId}/export/${jobId}/download`, {
|
|
126
|
+
method: "GET",
|
|
127
|
+
headers: {
|
|
128
|
+
...this.headers,
|
|
129
|
+
...this.headerProvider?.(),
|
|
130
|
+
},
|
|
62
131
|
});
|
|
63
132
|
if (!response.ok) {
|
|
64
|
-
const
|
|
65
|
-
throw new Error(
|
|
133
|
+
const envelope = await response.json().catch(() => ({}));
|
|
134
|
+
throw new Error(envelope.message || envelope.error || `HTTP error! Status: ${response.status}`);
|
|
66
135
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
136
|
+
return {
|
|
137
|
+
filename: attachmentFilename(response.headers.get("Content-Disposition")),
|
|
138
|
+
data: new Uint8Array(await response.arrayBuffer()),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** Previews an archive or plain JSON bundle import. */
|
|
142
|
+
async importPreview(tenantId, source) {
|
|
143
|
+
if (source.archive !== undefined) {
|
|
144
|
+
const form = new FormData();
|
|
145
|
+
const { blob, filename } = await archiveToBlob(source.archive);
|
|
146
|
+
form.append("file", blob, filename);
|
|
147
|
+
return this.request(`/api/tenants/${tenantId}/import/preview`, {
|
|
148
|
+
method: "POST",
|
|
149
|
+
body: form,
|
|
150
|
+
});
|
|
70
151
|
}
|
|
71
|
-
return
|
|
152
|
+
return this.request(`/api/tenants/${tenantId}/import/preview`, {
|
|
153
|
+
method: "POST",
|
|
154
|
+
body: JSON.stringify({ bundle: source.bundle }),
|
|
155
|
+
});
|
|
72
156
|
}
|
|
73
|
-
|
|
74
|
-
|
|
157
|
+
/** Applies an archive or plain JSON bundle import with conflict resolutions. */
|
|
158
|
+
async importApply(tenantId, source, resolutions) {
|
|
159
|
+
if (source.archive !== undefined) {
|
|
160
|
+
const form = new FormData();
|
|
161
|
+
const { blob, filename } = await archiveToBlob(source.archive);
|
|
162
|
+
form.append("file", blob, filename);
|
|
163
|
+
form.append("resolutions", JSON.stringify(resolutions));
|
|
164
|
+
return this.request(`/api/tenants/${tenantId}/import/apply`, {
|
|
165
|
+
method: "POST",
|
|
166
|
+
body: form,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return this.request(`/api/tenants/${tenantId}/import/apply`, {
|
|
75
170
|
method: "POST",
|
|
76
|
-
body: JSON.stringify({ bundle, resolutions }),
|
|
171
|
+
body: JSON.stringify({ bundle: source.bundle, resolutions }),
|
|
77
172
|
});
|
|
78
|
-
return response.data;
|
|
79
173
|
}
|
|
80
174
|
}
|
|
81
175
|
//# sourceMappingURL=export-import.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../src/export-import.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../src/export-import.ts"],"names":[],"mappings":"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"}
|