@superblocksteam/sdk 0.0.23 → 1.0.2

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/client.d.ts CHANGED
@@ -4,13 +4,27 @@ export interface UploadFile {
4
4
  filename: string;
5
5
  ContentType: string;
6
6
  }
7
+ export interface ApplicationWrapper {
8
+ application: Record<string, any>;
9
+ page: Record<string, any>;
10
+ apis: Record<string, any>[];
11
+ }
7
12
  export declare function fetchApplication({ applicationId, token, superblocksBaseUrl, viewMode, injectedHeaders, }: {
8
13
  applicationId: string;
9
14
  token: string;
10
15
  superblocksBaseUrl: string;
11
16
  viewMode: ViewMode;
12
17
  injectedHeaders: Record<string, string>;
13
- }): Promise<any>;
18
+ }): Promise<ApplicationWrapper | undefined>;
19
+ export declare function fetchApplicationWithComponents({ applicationId, token, superblocksBaseUrl, viewMode, injectedHeaders, }: {
20
+ applicationId: string;
21
+ token: string;
22
+ superblocksBaseUrl: string;
23
+ viewMode: ViewMode;
24
+ injectedHeaders: Record<string, string>;
25
+ }): Promise<(ApplicationWrapper & {
26
+ componentFiles: any;
27
+ }) | undefined>;
14
28
  export declare function fetchApplications(token: string, superblocksBaseUrl: string, injectedHeaders?: Record<string, string>): Promise<any>;
15
29
  export declare function fetchApi(apiId: string, token: string, superblocksBaseUrl: string, viewMode: ViewMode): Promise<any>;
16
30
  export declare function fetchApis(token: string, superblocksBaseUrl: string): Promise<any>;
package/dist/client.js CHANGED
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchCurrentUser = exports.uploadComponents = exports.registerComponents = exports.fetchApis = exports.fetchApi = exports.fetchApplications = exports.fetchApplication = void 0;
3
+ exports.fetchCurrentUser = exports.uploadComponents = exports.registerComponents = exports.fetchApis = exports.fetchApi = exports.fetchApplications = exports.fetchApplicationWithComponents = exports.fetchApplication = void 0;
4
4
  const fs = require("fs");
5
5
  const util_1 = require("@superblocksteam/util");
6
- const util_2 = require("@superblocksteam/util");
7
6
  const axios_1 = require("axios");
8
7
  const FormData = require("form-data");
9
8
  const lodash_1 = require("lodash");
@@ -13,7 +12,7 @@ const SUPERBLOCKS_MAX_FILE_SIZE_MB = 10;
13
12
  const CLI_VERSION_HEADER = "x-superblocks-cli-version";
14
13
  const SUPERBLOCKS_URL_HEADER = "x-superblocks-url";
15
14
  async function fetchApplication({ applicationId, token, superblocksBaseUrl, viewMode, injectedHeaders = {}, }) {
16
- var _a, _b, _c, _d, _e, _f;
15
+ var _a, _b;
17
16
  const serverURL = new URL(`api/v2/applications/${applicationId}?viewMode=${viewMode}`, superblocksBaseUrl);
18
17
  let serverResponse;
19
18
  try {
@@ -29,13 +28,31 @@ async function fetchApplication({ applicationId, token, superblocksBaseUrl, view
29
28
  }
30
29
  catch (e) {
31
30
  if (axios_1.default.isAxiosError(e) && ((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
32
- throw new Error(`Application ${applicationId} was not found`);
31
+ throw new util_1.NotFoundError(`Application ${applicationId} was not found`);
33
32
  }
34
33
  throw new Error("Could not fetch application");
35
34
  }
35
+ return (_b = serverResponse === null || serverResponse === void 0 ? void 0 : serverResponse.data) === null || _b === void 0 ? void 0 : _b.data;
36
+ }
37
+ exports.fetchApplication = fetchApplication;
38
+ async function fetchApplicationWithComponents({ applicationId, token, superblocksBaseUrl, viewMode, injectedHeaders = {}, }) {
39
+ var _a, _b, _c;
40
+ const applicationWrapper = await fetchApplication({
41
+ applicationId,
42
+ token,
43
+ superblocksBaseUrl,
44
+ viewMode,
45
+ injectedHeaders,
46
+ });
47
+ if ((0, lodash_1.isEmpty)(applicationWrapper)) {
48
+ return;
49
+ }
36
50
  // if there are no custom components, just return here without trying to initialize them using bucketeer
37
- if ((0, lodash_1.isEmpty)((_e = (_d = (_c = (_b = serverResponse === null || serverResponse === void 0 ? void 0 : serverResponse.data) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.application) === null || _d === void 0 ? void 0 : _d.settings) === null || _e === void 0 ? void 0 : _e.registeredComponents)) {
38
- return serverResponse.data.data;
51
+ if ((0, lodash_1.isEmpty)((_b = (_a = applicationWrapper.application) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.registeredComponents)) {
52
+ return {
53
+ ...applicationWrapper,
54
+ componentFiles: null,
55
+ };
39
56
  }
40
57
  // TODO(jason) update this with commit ID once we enable fetching by commit
41
58
  const commitId = "latest";
@@ -57,13 +74,13 @@ async function fetchApplication({ applicationId, token, superblocksBaseUrl, view
57
74
  return response.data;
58
75
  }
59
76
  catch (e) {
60
- if (axios_1.default.isAxiosError(e) && ((_f = e.response) === null || _f === void 0 ? void 0 : _f.status) === 404) {
61
- throw new Error(`Application ${applicationId} was not found`);
77
+ if (axios_1.default.isAxiosError(e) && ((_c = e.response) === null || _c === void 0 ? void 0 : _c.status) === 404) {
78
+ throw new util_1.NotFoundError(`Application ${applicationId} was not found`);
62
79
  }
63
80
  throw new Error("Could not fetch application");
64
81
  }
65
82
  }
66
- exports.fetchApplication = fetchApplication;
83
+ exports.fetchApplicationWithComponents = fetchApplicationWithComponents;
67
84
  async function fetchApplications(token, superblocksBaseUrl, injectedHeaders = {}) {
68
85
  try {
69
86
  const config = {
@@ -97,7 +114,7 @@ async function fetchApi(apiId, token, superblocksBaseUrl, viewMode) {
97
114
  }
98
115
  catch (e) {
99
116
  if (axios_1.default.isAxiosError(e) && ((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
100
- throw new Error(`Api ${apiId} was not found`);
117
+ throw new util_1.NotFoundError(`Api ${apiId} was not found`);
101
118
  }
102
119
  throw new Error("Could not fetch api");
103
120
  }
@@ -123,7 +140,7 @@ exports.fetchApis = fetchApis;
123
140
  async function registerComponents(applicationId, componentConfigs, token, superblocksBaseUrl, injectedHeaders) {
124
141
  var _a, _b, _c, _d, _e, _f, _g;
125
142
  try {
126
- const [rootSettings] = await (0, util_2.getSuperblocksMonorepoConfigJson)(true);
143
+ const [rootSettings] = await (0, util_1.getSuperblocksMonorepoConfigJson)(true);
127
144
  const config = {
128
145
  method: "put",
129
146
  url: new URL(`${BASE_SERVER_URL}/public/application/${applicationId}/components`, superblocksBaseUrl).toString(),
@@ -147,7 +164,7 @@ async function registerComponents(applicationId, componentConfigs, token, superb
147
164
  }
148
165
  exports.registerComponents = registerComponents;
149
166
  async function uploadComponents({ applicationId, componentConfigs, files, token, superblocksBaseUrl, }) {
150
- var _a, _b, _c, _d, _e, _f, _g;
167
+ var _a, _b, _c, _d, _e, _f, _g, _h;
151
168
  superblocksBaseUrl = superblocksBaseUrl.replace(/\/$/, "");
152
169
  const bucketeerBaseUrl = (0, util_1.getBucketeerUrlFromSuperblocksUrl)(superblocksBaseUrl);
153
170
  // parse files to source and bundled files based on path
@@ -190,7 +207,7 @@ You can reduce your component bundle size by uploading static assets to a separa
190
207
  }
191
208
  const formHeaders = formData.getHeaders();
192
209
  try {
193
- const [rootSettings] = await (0, util_2.getSuperblocksMonorepoConfigJson)(true);
210
+ const [rootSettings] = await (0, util_1.getSuperblocksMonorepoConfigJson)(true);
194
211
  const config = {
195
212
  headers: {
196
213
  Authorization: "Bearer " + token,
@@ -207,13 +224,20 @@ You can reduce your component bundle size by uploading static assets to a separa
207
224
  if (e instanceof axios_1.AxiosError && ((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 413) {
208
225
  throw new Error(`Could not upload application components, file size limit exceeded`);
209
226
  }
210
- else if (e instanceof axios_1.AxiosError) {
211
- const message = (_e = (_d = (_c = (_b = e.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.responseMeta) === null || _d === void 0 ? void 0 : _d.message) !== null && _e !== void 0 ? _e : (_f = e.response) === null || _f === void 0 ? void 0 : _f.data;
212
- throw new Error(`Could not upload application components
213
- ${message !== null && message !== void 0 ? message : (_g = e.response) === null || _g === void 0 ? void 0 : _g.statusText}`);
227
+ else {
228
+ let message;
229
+ if (e instanceof axios_1.AxiosError) {
230
+ message =
231
+ (_g = (_e = (_d = (_c = (_b = e.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.responseMeta) === null || _d === void 0 ? void 0 : _d.message) !== null && _e !== void 0 ? _e : (_f = e.response) === null || _f === void 0 ? void 0 : _f.data) !== null && _g !== void 0 ? _g : (_h = e.response) === null || _h === void 0 ? void 0 : _h.statusText;
232
+ }
233
+ else {
234
+ message = e.message;
235
+ }
236
+ if (typeof message !== "string") {
237
+ message = JSON.stringify(message, null, 2);
238
+ }
239
+ throw new Error(`Could not upload application components\n${message}`);
214
240
  }
215
- throw new Error(`Could not upload application components
216
- ${e.message}`);
217
241
  }
218
242
  }
219
243
  exports.uploadComponents = uploadComponents;
package/dist/sdk.d.ts CHANGED
@@ -7,7 +7,14 @@ export declare class SuperblocksSdk {
7
7
  applicationId: string;
8
8
  headers?: Record<string, string>;
9
9
  viewMode?: ViewMode;
10
- }): Promise<any>;
10
+ }): Promise<import("./client").ApplicationWrapper | undefined>;
11
+ fetchApplicationWithComponents({ applicationId, headers, viewMode, }: {
12
+ applicationId: string;
13
+ headers?: Record<string, string>;
14
+ viewMode?: ViewMode;
15
+ }): Promise<(import("./client").ApplicationWrapper & {
16
+ componentFiles: any;
17
+ }) | undefined>;
11
18
  fetchApplications(headers?: Record<string, string>): Promise<any>;
12
19
  fetchApi(apiId: string, viewMode?: ViewMode): Promise<any>;
13
20
  fetchApis(): Promise<any>;
package/dist/sdk.js CHANGED
@@ -18,6 +18,15 @@ class SuperblocksSdk {
18
18
  injectedHeaders: headers,
19
19
  });
20
20
  }
21
+ async fetchApplicationWithComponents({ applicationId, headers = {}, viewMode = "export-live", }) {
22
+ return (0, client_1.fetchApplicationWithComponents)({
23
+ applicationId,
24
+ token: this.token,
25
+ superblocksBaseUrl: this.superblocksBaseUrl,
26
+ viewMode,
27
+ injectedHeaders: headers,
28
+ });
29
+ }
21
30
  async fetchApplications(headers) {
22
31
  return (0, client_1.fetchApplications)(this.token, this.superblocksBaseUrl, headers);
23
32
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superblocksteam/sdk",
3
- "version": "0.0.23",
3
+ "version": "1.0.2",
4
4
  "description": "Superblocks JS SDK",
5
5
  "main": "./dist/index.js",
6
6
  "exports": {
@@ -24,13 +24,13 @@
24
24
  "devDependencies": {
25
25
  "@typescript-eslint/eslint-plugin": "^5.60.1",
26
26
  "@typescript-eslint/parser": "^5.60.1",
27
- "eslint": "^8.45.0",
27
+ "eslint": "^8.48.0",
28
28
  "eslint-plugin-unicorn": "^47.0.0",
29
29
  "prettier": "^2.8.8",
30
30
  "typescript": "^5.1.3"
31
31
  },
32
32
  "dependencies": {
33
- "@superblocksteam/util": "0.0.23",
33
+ "@superblocksteam/util": "1.0.2",
34
34
  "axios": "^1.3.5"
35
35
  },
36
36
  "homepage": "https://www.superblocks.com",
package/src/client.ts CHANGED
@@ -2,11 +2,12 @@ import * as fs from "fs";
2
2
  import {
3
3
  ComponentEvent,
4
4
  getBucketeerUrlFromSuperblocksUrl,
5
+ getSuperblocksMonorepoConfigJson,
5
6
  getContentType,
6
7
  COMPONENT_EVENT_HEADER,
8
+ NotFoundError,
7
9
  } from "@superblocksteam/util";
8
- import { getSuperblocksMonorepoConfigJson } from "@superblocksteam/util";
9
- import axios, { AxiosError } from "axios";
10
+ import axios, { AxiosError, AxiosRequestConfig } from "axios";
10
11
  import * as FormData from "form-data";
11
12
  import { isEmpty } from "lodash";
12
13
 
@@ -26,6 +27,14 @@ export interface UploadFile {
26
27
  ContentType: string;
27
28
  }
28
29
 
30
+ export interface ApplicationWrapper {
31
+ application: Record<string, any>;
32
+ page: Record<string, any>;
33
+ apis: Record<string, any>[];
34
+ }
35
+
36
+ type ResponseWithMeta<T> = { responseMeta: unknown; data: T };
37
+
29
38
  export async function fetchApplication({
30
39
  applicationId,
31
40
  token,
@@ -38,7 +47,7 @@ export async function fetchApplication({
38
47
  superblocksBaseUrl: string;
39
48
  viewMode: ViewMode;
40
49
  injectedHeaders: Record<string, string>;
41
- }) {
50
+ }): Promise<ApplicationWrapper | undefined> {
42
51
  const serverURL = new URL(
43
52
  `api/v2/applications/${applicationId}?viewMode=${viewMode}`,
44
53
  superblocksBaseUrl
@@ -46,7 +55,7 @@ export async function fetchApplication({
46
55
  let serverResponse;
47
56
 
48
57
  try {
49
- const config = {
58
+ const config: AxiosRequestConfig = {
50
59
  method: "get",
51
60
  url: serverURL.toString(),
52
61
  headers: {
@@ -54,21 +63,48 @@ export async function fetchApplication({
54
63
  ...injectedHeaders,
55
64
  },
56
65
  };
57
- serverResponse = await axios(config);
66
+ serverResponse = await axios<ResponseWithMeta<ApplicationWrapper>>(config);
58
67
  } catch (e) {
59
68
  if (axios.isAxiosError(e) && e.response?.status === 404) {
60
- throw new Error(`Application ${applicationId} was not found`);
69
+ throw new NotFoundError(`Application ${applicationId} was not found`);
61
70
  }
62
71
  throw new Error("Could not fetch application");
63
72
  }
64
73
 
74
+ return serverResponse?.data?.data;
75
+ }
76
+
77
+ export async function fetchApplicationWithComponents({
78
+ applicationId,
79
+ token,
80
+ superblocksBaseUrl,
81
+ viewMode,
82
+ injectedHeaders = {},
83
+ }: {
84
+ applicationId: string;
85
+ token: string;
86
+ superblocksBaseUrl: string;
87
+ viewMode: ViewMode;
88
+ injectedHeaders: Record<string, string>;
89
+ }): Promise<(ApplicationWrapper & { componentFiles: any }) | undefined> {
90
+ const applicationWrapper = await fetchApplication({
91
+ applicationId,
92
+ token,
93
+ superblocksBaseUrl,
94
+ viewMode,
95
+ injectedHeaders,
96
+ });
97
+
98
+ if (isEmpty(applicationWrapper)) {
99
+ return;
100
+ }
101
+
65
102
  // if there are no custom components, just return here without trying to initialize them using bucketeer
66
- if (
67
- isEmpty(
68
- serverResponse?.data?.data?.application?.settings?.registeredComponents
69
- )
70
- ) {
71
- return serverResponse.data.data;
103
+ if (isEmpty(applicationWrapper.application?.settings?.registeredComponents)) {
104
+ return {
105
+ ...applicationWrapper,
106
+ componentFiles: null,
107
+ };
72
108
  }
73
109
 
74
110
  // TODO(jason) update this with commit ID once we enable fetching by commit
@@ -84,7 +120,7 @@ export async function fetchApplication({
84
120
  ).toString();
85
121
 
86
122
  try {
87
- const config = {
123
+ const config: AxiosRequestConfig = {
88
124
  method: "get",
89
125
  url: componentFileURL,
90
126
  headers: {
@@ -97,7 +133,7 @@ export async function fetchApplication({
97
133
  return response.data;
98
134
  } catch (e) {
99
135
  if (axios.isAxiosError(e) && e.response?.status === 404) {
100
- throw new Error(`Application ${applicationId} was not found`);
136
+ throw new NotFoundError(`Application ${applicationId} was not found`);
101
137
  }
102
138
  throw new Error("Could not fetch application");
103
139
  }
@@ -109,7 +145,7 @@ export async function fetchApplications(
109
145
  injectedHeaders: Record<string, string> = {}
110
146
  ) {
111
147
  try {
112
- const config = {
148
+ const config: AxiosRequestConfig = {
113
149
  method: "get",
114
150
  url: new URL(`/api/v2/applications`, superblocksBaseUrl).toString(),
115
151
  headers: {
@@ -131,7 +167,7 @@ export async function fetchApi(
131
167
  viewMode: ViewMode
132
168
  ) {
133
169
  try {
134
- const config = {
170
+ const config: AxiosRequestConfig = {
135
171
  method: "get",
136
172
  url: new URL(
137
173
  `/api/v3/apis/${apiId}?viewMode=${viewMode}`,
@@ -145,7 +181,7 @@ export async function fetchApi(
145
181
  return response.data.data;
146
182
  } catch (e) {
147
183
  if (axios.isAxiosError(e) && e.response?.status === 404) {
148
- throw new Error(`Api ${apiId} was not found`);
184
+ throw new NotFoundError(`Api ${apiId} was not found`);
149
185
  }
150
186
  throw new Error("Could not fetch api");
151
187
  }
@@ -153,7 +189,7 @@ export async function fetchApi(
153
189
 
154
190
  export async function fetchApis(token: string, superblocksBaseUrl: string) {
155
191
  try {
156
- const config = {
192
+ const config: AxiosRequestConfig = {
157
193
  method: "get",
158
194
  url: new URL(`/api/v3/apis`, superblocksBaseUrl).toString(),
159
195
  headers: {
@@ -176,7 +212,7 @@ export async function registerComponents(
176
212
  ) {
177
213
  try {
178
214
  const [rootSettings] = await getSuperblocksMonorepoConfigJson(true);
179
- const config = {
215
+ const config: AxiosRequestConfig = {
180
216
  method: "put",
181
217
  url: new URL(
182
218
  `${BASE_SERVER_URL}/public/application/${applicationId}/components`,
@@ -280,7 +316,7 @@ You can reduce your component bundle size by uploading static assets to a separa
280
316
 
281
317
  try {
282
318
  const [rootSettings] = await getSuperblocksMonorepoConfigJson(true);
283
- const config = {
319
+ const config: AxiosRequestConfig = {
284
320
  headers: {
285
321
  Authorization: "Bearer " + token,
286
322
  [CLI_VERSION_HEADER]: rootSettings.metadata.cliVersion,
@@ -298,14 +334,19 @@ You can reduce your component bundle size by uploading static assets to a separa
298
334
  throw new Error(
299
335
  `Could not upload application components, file size limit exceeded`
300
336
  );
301
- } else if (e instanceof AxiosError) {
302
- const message =
303
- (e.response?.data?.responseMeta?.message as string) ?? e.response?.data;
304
- throw new Error(`Could not upload application components
305
- ${message ?? e.response?.statusText}`);
337
+ } else {
338
+ let message: any;
339
+ if (e instanceof AxiosError) {
340
+ message =
341
+ e.response?.data?.responseMeta?.message ?? e.response?.data ?? e.response?.statusText;
342
+ } else {
343
+ message = e.message;
344
+ }
345
+ if (typeof message !== "string") {
346
+ message = JSON.stringify(message, null, 2);
347
+ }
348
+ throw new Error(`Could not upload application components\n${message}`);
306
349
  }
307
- throw new Error(`Could not upload application components
308
- ${e.message as string}`);
309
350
  }
310
351
  }
311
352
 
@@ -314,7 +355,7 @@ export async function fetchCurrentUser(
314
355
  superblocksBaseUrl: string
315
356
  ) {
316
357
  try {
317
- const config = {
358
+ const config: AxiosRequestConfig = {
318
359
  method: "get",
319
360
  url: new URL(`/api/v1/users/me`, superblocksBaseUrl).toString(),
320
361
  headers: {
package/src/sdk.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  fetchApi,
3
3
  fetchApis,
4
- fetchApplication as fetchApplicationClient,
4
+ fetchApplication,
5
+ fetchApplicationWithComponents,
5
6
  fetchApplications,
6
7
  registerComponents,
7
8
  uploadComponents,
@@ -27,7 +28,25 @@ export class SuperblocksSdk {
27
28
  headers?: Record<string, string>;
28
29
  viewMode?: ViewMode;
29
30
  }) {
30
- return fetchApplicationClient({
31
+ return fetchApplication({
32
+ applicationId,
33
+ token: this.token,
34
+ superblocksBaseUrl: this.superblocksBaseUrl,
35
+ viewMode,
36
+ injectedHeaders: headers,
37
+ });
38
+ }
39
+
40
+ async fetchApplicationWithComponents({
41
+ applicationId,
42
+ headers = {},
43
+ viewMode = "export-live",
44
+ }: {
45
+ applicationId: string;
46
+ headers?: Record<string, string>;
47
+ viewMode?: ViewMode;
48
+ }) {
49
+ return fetchApplicationWithComponents({
31
50
  applicationId,
32
51
  token: this.token,
33
52
  superblocksBaseUrl: this.superblocksBaseUrl,