@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.
Files changed (46) hide show
  1. package/README.md +37 -0
  2. package/dist/__tests__/a2a-keys.test.d.ts +8 -0
  3. package/dist/__tests__/a2a-keys.test.d.ts.map +1 -0
  4. package/dist/__tests__/a2a-keys.test.js +110 -0
  5. package/dist/__tests__/a2a-keys.test.js.map +1 -0
  6. package/dist/__tests__/export-import.test.d.ts +2 -0
  7. package/dist/__tests__/export-import.test.d.ts.map +1 -0
  8. package/dist/__tests__/export-import.test.js +245 -0
  9. package/dist/__tests__/export-import.test.js.map +1 -0
  10. package/dist/__tests__/tasks.test.d.ts +2 -0
  11. package/dist/__tests__/tasks.test.d.ts.map +1 -0
  12. package/dist/__tests__/tasks.test.js +67 -0
  13. package/dist/__tests__/tasks.test.js.map +1 -0
  14. package/dist/__tests__/web-apps.test.d.ts +8 -0
  15. package/dist/__tests__/web-apps.test.d.ts.map +1 -0
  16. package/dist/__tests__/web-apps.test.js +166 -0
  17. package/dist/__tests__/web-apps.test.js.map +1 -0
  18. package/dist/__tests__/workspace-client.test.d.ts +10 -0
  19. package/dist/__tests__/workspace-client.test.d.ts.map +1 -0
  20. package/dist/__tests__/workspace-client.test.js +56 -0
  21. package/dist/__tests__/workspace-client.test.js.map +1 -0
  22. package/dist/abstract-client.d.ts +106 -2
  23. package/dist/abstract-client.d.ts.map +1 -1
  24. package/dist/abstract-client.js +170 -3
  25. package/dist/abstract-client.js.map +1 -1
  26. package/dist/client.d.ts +2 -0
  27. package/dist/client.d.ts.map +1 -1
  28. package/dist/client.js +2 -0
  29. package/dist/client.js.map +1 -1
  30. package/dist/export-import.d.ts +136 -24
  31. package/dist/export-import.d.ts.map +1 -1
  32. package/dist/export-import.js +142 -48
  33. package/dist/export-import.js.map +1 -1
  34. package/dist/index.d.ts +322 -35
  35. package/dist/index.js +359 -96
  36. package/dist/index.js.map +1 -1
  37. package/dist/index.mjs +359 -96
  38. package/dist/index.mjs.map +1 -1
  39. package/dist/types.d.ts +72 -1
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js.map +1 -1
  42. package/dist/workspace-client.d.ts +2 -2
  43. package/dist/workspace-client.d.ts.map +1 -1
  44. package/dist/workspace-client.js +7 -2
  45. package/dist/workspace-client.js.map +1 -1
  46. package/package.json +2 -2
@@ -1,81 +1,175 @@
1
- /**
2
- * ExportImportClient
3
- *
4
- * Client for tenant export/import API: exportable types, export config,
5
- * import preview, and import apply.
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
- constructor(config) {
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 fullUrl = `${this.baseURL}${url}`;
18
- const response = await fetch(fullUrl, {
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
- if (!response.ok) {
26
- const err = (await response.json().catch(() => ({})));
27
- throw new Error(err.message || `HTTP error! Status: ${response.status}`);
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 response.json();
95
+ return envelope.data;
30
96
  }
31
- async getExportableTypes() {
32
- const response = await this.request("/api/tenants/exportable-types");
33
- return response.data || [];
97
+ /** Returns all entity types registered for export. */
98
+ getExportableTypes() {
99
+ return this.request("/api/tenants/exportable-types");
34
100
  }
35
- async exportConfig(tenantId, entityTypes) {
36
- const response = await this.request(`/api/tenants/${tenantId}/export`, {
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
- async exportConfigConfirm(tenantId, entityTypes) {
43
- const response = await this.request(`/api/tenants/${tenantId}/export/confirm`, {
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
- async importPreview(tenantId, file) {
53
- const formData = new FormData();
54
- formData.append("file", file);
55
- const fullUrl = `${this.baseURL}/api/tenants/${tenantId}/import/preview`;
56
- const headers = { ...this.headers };
57
- delete headers["Content-Type"];
58
- const response = await fetch(fullUrl, {
59
- method: "POST",
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 err = (await response.json().catch(() => ({})));
65
- throw new Error(err.message || `HTTP error! Status: ${response.status}`);
133
+ const envelope = await response.json().catch(() => ({}));
134
+ throw new Error(envelope.message || envelope.error || `HTTP error! Status: ${response.status}`);
66
135
  }
67
- const json = (await response.json());
68
- if (!json.success || !json.data) {
69
- throw new Error(json.error || "Import preview failed");
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 json.data;
152
+ return this.request(`/api/tenants/${tenantId}/import/preview`, {
153
+ method: "POST",
154
+ body: JSON.stringify({ bundle: source.bundle }),
155
+ });
72
156
  }
73
- async importApply(tenantId, bundle, resolutions) {
74
- const response = await this.request(`/api/tenants/${tenantId}/import/apply`, {
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":"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"}
1
+ {"version":3,"file":"export-import.js","sourceRoot":"","sources":["../src/export-import.ts"],"names":[],"mappings":"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"}