@keboola/api-client 0.1.0 → 1.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 (138) hide show
  1. package/README.md +18 -1
  2. package/dist/ai/index.cjs +7 -1
  3. package/dist/ai/index.cjs.map +1 -1
  4. package/dist/ai/index.js +7 -1
  5. package/dist/ai/index.js.map +1 -1
  6. package/dist/assets/index.cjs +7 -1
  7. package/dist/assets/index.cjs.map +1 -1
  8. package/dist/assets/index.js +7 -1
  9. package/dist/assets/index.js.map +1 -1
  10. package/dist/chat/index.cjs +3 -1
  11. package/dist/chat/index.cjs.map +1 -1
  12. package/dist/chat/index.d.cts +1 -1
  13. package/dist/chat/index.d.ts +1 -1
  14. package/dist/chat/index.js +3 -1
  15. package/dist/chat/index.js.map +1 -1
  16. package/dist/chat/types.d.cts +1 -1
  17. package/dist/chat/types.d.ts +1 -1
  18. package/dist/constants/index.cjs +145 -0
  19. package/dist/constants/index.cjs.map +1 -0
  20. package/dist/constants/index.d.cts +28 -0
  21. package/dist/constants/index.d.ts +28 -0
  22. package/dist/constants/index.js +142 -0
  23. package/dist/constants/index.js.map +1 -0
  24. package/dist/dataScience/index.cjs +7 -2
  25. package/dist/dataScience/index.cjs.map +1 -1
  26. package/dist/dataScience/index.js +7 -2
  27. package/dist/dataScience/index.js.map +1 -1
  28. package/dist/domain/permissions/index.cjs +13 -0
  29. package/dist/domain/permissions/index.cjs.map +1 -0
  30. package/dist/domain/permissions/index.d.cts +5 -0
  31. package/dist/domain/permissions/index.d.ts +5 -0
  32. package/dist/domain/permissions/index.js +11 -0
  33. package/dist/domain/permissions/index.js.map +1 -0
  34. package/dist/editor/index.cjs +7 -10
  35. package/dist/editor/index.cjs.map +1 -1
  36. package/dist/editor/index.d.cts +11 -19
  37. package/dist/editor/index.d.ts +11 -19
  38. package/dist/editor/index.js +7 -10
  39. package/dist/editor/index.js.map +1 -1
  40. package/dist/editor/types.d.cts +1 -1
  41. package/dist/editor/types.d.ts +1 -1
  42. package/dist/encryption/index.cjs +7 -1
  43. package/dist/encryption/index.cjs.map +1 -1
  44. package/dist/encryption/index.js +7 -1
  45. package/dist/encryption/index.js.map +1 -1
  46. package/dist/import/index.cjs +7 -1
  47. package/dist/import/index.cjs.map +1 -1
  48. package/dist/import/index.js +7 -1
  49. package/dist/import/index.js.map +1 -1
  50. package/dist/index.cjs +308 -42
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.d.cts +1085 -122
  53. package/dist/index.d.ts +1085 -122
  54. package/dist/index.js +308 -42
  55. package/dist/index.js.map +1 -1
  56. package/dist/management/index.cjs +40 -23
  57. package/dist/management/index.cjs.map +1 -1
  58. package/dist/management/index.d.cts +59 -23
  59. package/dist/management/index.d.ts +59 -23
  60. package/dist/management/index.js +40 -23
  61. package/dist/management/index.js.map +1 -1
  62. package/dist/management/types.d.cts +2 -2
  63. package/dist/management/types.d.ts +2 -2
  64. package/dist/metastore/index.cjs +7 -1
  65. package/dist/metastore/index.cjs.map +1 -1
  66. package/dist/metastore/index.js +7 -1
  67. package/dist/metastore/index.js.map +1 -1
  68. package/dist/oauth/index.cjs +234 -0
  69. package/dist/oauth/index.cjs.map +1 -0
  70. package/dist/oauth/index.d.cts +12 -0
  71. package/dist/oauth/index.d.ts +12 -0
  72. package/dist/oauth/index.js +228 -0
  73. package/dist/oauth/index.js.map +1 -0
  74. package/dist/oauth/types.cjs +4 -0
  75. package/dist/oauth/types.cjs.map +1 -0
  76. package/dist/oauth/types.d.cts +34 -0
  77. package/dist/oauth/types.d.ts +34 -0
  78. package/dist/oauth/types.js +3 -0
  79. package/dist/oauth/types.js.map +1 -0
  80. package/dist/queryService/index.cjs +7 -1
  81. package/dist/queryService/index.cjs.map +1 -1
  82. package/dist/queryService/index.js +7 -1
  83. package/dist/queryService/index.js.map +1 -1
  84. package/dist/queue/index.cjs +7 -1
  85. package/dist/queue/index.cjs.map +1 -1
  86. package/dist/queue/index.js +7 -1
  87. package/dist/queue/index.js.map +1 -1
  88. package/dist/sdk/configurations/index.cjs +14 -0
  89. package/dist/sdk/configurations/index.cjs.map +1 -0
  90. package/dist/sdk/configurations/index.d.cts +24 -0
  91. package/dist/sdk/configurations/index.d.ts +24 -0
  92. package/dist/sdk/configurations/index.js +11 -0
  93. package/dist/sdk/configurations/index.js.map +1 -0
  94. package/dist/sdk/storage/index.cjs +179 -1
  95. package/dist/sdk/storage/index.cjs.map +1 -1
  96. package/dist/sdk/storage/index.d.cts +118 -13
  97. package/dist/sdk/storage/index.d.ts +118 -13
  98. package/dist/sdk/storage/index.js +169 -2
  99. package/dist/sdk/storage/index.js.map +1 -1
  100. package/dist/status/index.cjs +7 -1
  101. package/dist/status/index.cjs.map +1 -1
  102. package/dist/status/index.js +7 -1
  103. package/dist/status/index.js.map +1 -1
  104. package/dist/storage/index.cjs +107 -9
  105. package/dist/storage/index.cjs.map +1 -1
  106. package/dist/storage/index.d.cts +1 -1
  107. package/dist/storage/index.d.ts +1 -1
  108. package/dist/storage/index.js +107 -9
  109. package/dist/storage/index.js.map +1 -1
  110. package/dist/storage/types.d.cts +2977 -1306
  111. package/dist/storage/types.d.ts +2977 -1306
  112. package/dist/{storageClient-DPLh_p0V.d.cts → storageClient-DSLTM3Cr.d.cts} +20 -1
  113. package/dist/{storageClient-YVWer22Y.d.ts → storageClient-DrYOs4Xm.d.ts} +20 -1
  114. package/dist/storageSdk-BBqAo0Vx.d.cts +143 -0
  115. package/dist/storageSdk-ZVmKQQSl.d.ts +143 -0
  116. package/dist/syncActions/index.cjs +7 -1
  117. package/dist/syncActions/index.cjs.map +1 -1
  118. package/dist/syncActions/index.js +7 -1
  119. package/dist/syncActions/index.js.map +1 -1
  120. package/dist/telemetry/index.cjs +7 -1
  121. package/dist/telemetry/index.cjs.map +1 -1
  122. package/dist/telemetry/index.js +7 -1
  123. package/dist/telemetry/index.js.map +1 -1
  124. package/dist/{types-B7k8S4ki.d.ts → types-B--u7l2H.d.ts} +33 -118
  125. package/dist/{types-BeShtGlc.d.cts → types-BTcT8Q0T.d.cts} +15 -1
  126. package/dist/{types-BeShtGlc.d.ts → types-BTcT8Q0T.d.ts} +15 -1
  127. package/dist/{types-BNQK_jR_.d.cts → types-C0Owx2P7.d.cts} +33 -118
  128. package/dist/{types-DJ6nbNq5.d.cts → types-CNkgmuhe.d.cts} +1 -1
  129. package/dist/{types-BjrNNn5I.d.ts → types-DzwzVgyG.d.ts} +1 -1
  130. package/dist/vault/index.cjs +3 -1
  131. package/dist/vault/index.cjs.map +1 -1
  132. package/dist/vault/index.js +3 -1
  133. package/dist/vault/index.js.map +1 -1
  134. package/dist/verify/index.cjs +3 -1
  135. package/dist/verify/index.cjs.map +1 -1
  136. package/dist/verify/index.js +3 -1
  137. package/dist/verify/index.js.map +1 -1
  138. package/package.json +71 -5
@@ -1,24 +1,129 @@
1
- import { CreateTableAsyncBody, TableCreateJob, TableImportAsyncBody, TableImportJob, TableExportAsyncBody, TableExportJob } from '../../storage/types.cjs';
2
- import { c as createStorageClient } from '../../storageClient-DPLh_p0V.cjs';
1
+ export { c as createStorageSdk } from '../../storageSdk-BBqAo0Vx.cjs';
2
+ import '../../storage/types.cjs';
3
3
  import '../../types-C7mpAfq-.cjs';
4
4
  import '../../types-DYMMsuU0.cjs';
5
+ import '../../storageClient-DSLTM3Cr.cjs';
5
6
  import '../../types-DgaMV8FF.cjs';
6
7
  import 'qs';
7
8
  import '../../createGenericFetchClient-CLUzu-jY.cjs';
8
9
  import '../../createOpenapiFetchClient-CpXmAIFB.cjs';
9
10
 
10
- type Options = {
11
- interval?: number;
12
- maxAttempts?: number;
13
- abortSignal?: AbortSignal;
11
+ declare function parse(tableId: string | null, options?: {
12
+ defaultStage?: string;
13
+ defaultBucket?: string;
14
+ }): {
15
+ tableId: string;
16
+ parts: {
17
+ stage: string;
18
+ bucket: string;
19
+ table: string;
20
+ };
21
+ setPart: (partNameToSet: string, value: string) => {
22
+ tableId: string;
23
+ parts: {
24
+ stage: string;
25
+ bucket: string;
26
+ table: string;
27
+ };
28
+ setPart: /*elided*/ any;
29
+ };
14
30
  };
15
- type StorageSdkOptions = {
16
- storageClient: ReturnType<typeof createStorageClient>;
31
+ declare const tableIdParser: {
32
+ parse: typeof parse;
17
33
  };
18
- declare const createStorageSdk: ({ storageClient }: StorageSdkOptions) => {
19
- createTable: (bucketId: string, body: CreateTableAsyncBody, options?: Options) => Promise<TableCreateJob>;
20
- importFromFile: (tableId: string, body: TableImportAsyncBody, options?: Options) => Promise<TableImportJob>;
21
- exportToFile: (tableId: string, body?: TableExportAsyncBody, options?: Options) => Promise<TableExportJob>;
34
+
35
+ type BucketDisplayNameOptions = {
36
+ disableLegacyBucketPrefix?: boolean;
37
+ };
38
+ declare const getBucketDisplayNameFromName: (bucketName: string, options?: BucketDisplayNameOptions) => string;
39
+ type TableNameParsedOptions = BucketDisplayNameOptions & {
40
+ storageBucket?: {
41
+ displayName?: string;
42
+ } | null;
43
+ };
44
+ declare const tableNameParsed: (tableId: string, options?: TableNameParsedOptions) => string;
45
+
46
+ declare const FQID_TYPES: {
47
+ readonly organization: "ORG";
48
+ readonly maintainer: "MTR";
49
+ readonly project: "PRJ";
50
+ readonly bucket: "BCT";
51
+ readonly table: "TBL";
52
+ readonly column: "COL";
53
+ readonly config: "CFG";
54
+ readonly component: "CMP";
55
+ readonly externalTable: "EX_TBL";
56
+ readonly externalColumn: "EX_COL";
57
+ };
58
+ type FQIDTypes = typeof FQID_TYPES;
59
+ type ParsedFQID = {
60
+ type?: (typeof FQID_TYPES)[keyof typeof FQID_TYPES];
61
+ organizationId?: string;
62
+ maintainerId?: string;
63
+ projectId?: string;
64
+ bucketId?: string;
65
+ tableId?: string;
66
+ componentId?: string;
67
+ configId?: string;
68
+ column?: string;
69
+ };
70
+ declare const parseFQID: (fqid?: string) => ParsedFQID | Record<string, never>;
71
+ type FQIDData = {
72
+ type: FQIDTypes['organization'];
73
+ data: {
74
+ organizationId: string;
75
+ };
76
+ } | {
77
+ type: FQIDTypes['maintainer'];
78
+ data: {
79
+ maintainerId: string;
80
+ };
81
+ } | {
82
+ type: FQIDTypes['project'];
83
+ data: {
84
+ projectId: string;
85
+ };
86
+ } | {
87
+ type: FQIDTypes['bucket'];
88
+ data: {
89
+ projectId: string;
90
+ bucketId: string;
91
+ };
92
+ } | {
93
+ type: FQIDTypes['table'];
94
+ data: {
95
+ projectId: string;
96
+ tableId: string;
97
+ };
98
+ } | {
99
+ type: FQIDTypes['column'];
100
+ data: {
101
+ projectId: string;
102
+ tableId: string;
103
+ column: string;
104
+ };
105
+ } | {
106
+ type: FQIDTypes['component'];
107
+ data: {
108
+ projectId: string;
109
+ componentId: string;
110
+ };
111
+ } | {
112
+ type: FQIDTypes['config'];
113
+ data: {
114
+ projectId: string;
115
+ componentId: string;
116
+ configId: string;
117
+ };
118
+ };
119
+ declare const constructFQID: ({ type, data }: FQIDData) => string;
120
+
121
+ declare const parseDevBranchId: (path: string) => number | null;
122
+ declare const parseCurrentDevBranchIdFromUrl: () => number | null;
123
+ type PrefixTagsOptions = {
124
+ hasStorageBranches?: boolean;
22
125
  };
126
+ declare const prefixTagsWithDevBranchId: (tags: string[], branchId?: number | string | null, options?: PrefixTagsOptions) => string[];
127
+ declare const removeBranchFromUrl: (url: string) => string;
23
128
 
24
- export { createStorageSdk };
129
+ export { FQID_TYPES, type ParsedFQID, constructFQID, getBucketDisplayNameFromName, parse, parseCurrentDevBranchIdFromUrl, parseDevBranchId, parseFQID, prefixTagsWithDevBranchId, removeBranchFromUrl, tableIdParser, tableNameParsed };
@@ -1,24 +1,129 @@
1
- import { CreateTableAsyncBody, TableCreateJob, TableImportAsyncBody, TableImportJob, TableExportAsyncBody, TableExportJob } from '../../storage/types.js';
2
- import { c as createStorageClient } from '../../storageClient-YVWer22Y.js';
1
+ export { c as createStorageSdk } from '../../storageSdk-ZVmKQQSl.js';
2
+ import '../../storage/types.js';
3
3
  import '../../types-C7mpAfq-.js';
4
4
  import '../../types-DYMMsuU0.js';
5
+ import '../../storageClient-DrYOs4Xm.js';
5
6
  import '../../types-DgaMV8FF.js';
6
7
  import 'qs';
7
8
  import '../../createGenericFetchClient-DEakI3F1.js';
8
9
  import '../../createOpenapiFetchClient-_sm4bchL.js';
9
10
 
10
- type Options = {
11
- interval?: number;
12
- maxAttempts?: number;
13
- abortSignal?: AbortSignal;
11
+ declare function parse(tableId: string | null, options?: {
12
+ defaultStage?: string;
13
+ defaultBucket?: string;
14
+ }): {
15
+ tableId: string;
16
+ parts: {
17
+ stage: string;
18
+ bucket: string;
19
+ table: string;
20
+ };
21
+ setPart: (partNameToSet: string, value: string) => {
22
+ tableId: string;
23
+ parts: {
24
+ stage: string;
25
+ bucket: string;
26
+ table: string;
27
+ };
28
+ setPart: /*elided*/ any;
29
+ };
14
30
  };
15
- type StorageSdkOptions = {
16
- storageClient: ReturnType<typeof createStorageClient>;
31
+ declare const tableIdParser: {
32
+ parse: typeof parse;
17
33
  };
18
- declare const createStorageSdk: ({ storageClient }: StorageSdkOptions) => {
19
- createTable: (bucketId: string, body: CreateTableAsyncBody, options?: Options) => Promise<TableCreateJob>;
20
- importFromFile: (tableId: string, body: TableImportAsyncBody, options?: Options) => Promise<TableImportJob>;
21
- exportToFile: (tableId: string, body?: TableExportAsyncBody, options?: Options) => Promise<TableExportJob>;
34
+
35
+ type BucketDisplayNameOptions = {
36
+ disableLegacyBucketPrefix?: boolean;
37
+ };
38
+ declare const getBucketDisplayNameFromName: (bucketName: string, options?: BucketDisplayNameOptions) => string;
39
+ type TableNameParsedOptions = BucketDisplayNameOptions & {
40
+ storageBucket?: {
41
+ displayName?: string;
42
+ } | null;
43
+ };
44
+ declare const tableNameParsed: (tableId: string, options?: TableNameParsedOptions) => string;
45
+
46
+ declare const FQID_TYPES: {
47
+ readonly organization: "ORG";
48
+ readonly maintainer: "MTR";
49
+ readonly project: "PRJ";
50
+ readonly bucket: "BCT";
51
+ readonly table: "TBL";
52
+ readonly column: "COL";
53
+ readonly config: "CFG";
54
+ readonly component: "CMP";
55
+ readonly externalTable: "EX_TBL";
56
+ readonly externalColumn: "EX_COL";
57
+ };
58
+ type FQIDTypes = typeof FQID_TYPES;
59
+ type ParsedFQID = {
60
+ type?: (typeof FQID_TYPES)[keyof typeof FQID_TYPES];
61
+ organizationId?: string;
62
+ maintainerId?: string;
63
+ projectId?: string;
64
+ bucketId?: string;
65
+ tableId?: string;
66
+ componentId?: string;
67
+ configId?: string;
68
+ column?: string;
69
+ };
70
+ declare const parseFQID: (fqid?: string) => ParsedFQID | Record<string, never>;
71
+ type FQIDData = {
72
+ type: FQIDTypes['organization'];
73
+ data: {
74
+ organizationId: string;
75
+ };
76
+ } | {
77
+ type: FQIDTypes['maintainer'];
78
+ data: {
79
+ maintainerId: string;
80
+ };
81
+ } | {
82
+ type: FQIDTypes['project'];
83
+ data: {
84
+ projectId: string;
85
+ };
86
+ } | {
87
+ type: FQIDTypes['bucket'];
88
+ data: {
89
+ projectId: string;
90
+ bucketId: string;
91
+ };
92
+ } | {
93
+ type: FQIDTypes['table'];
94
+ data: {
95
+ projectId: string;
96
+ tableId: string;
97
+ };
98
+ } | {
99
+ type: FQIDTypes['column'];
100
+ data: {
101
+ projectId: string;
102
+ tableId: string;
103
+ column: string;
104
+ };
105
+ } | {
106
+ type: FQIDTypes['component'];
107
+ data: {
108
+ projectId: string;
109
+ componentId: string;
110
+ };
111
+ } | {
112
+ type: FQIDTypes['config'];
113
+ data: {
114
+ projectId: string;
115
+ componentId: string;
116
+ configId: string;
117
+ };
118
+ };
119
+ declare const constructFQID: ({ type, data }: FQIDData) => string;
120
+
121
+ declare const parseDevBranchId: (path: string) => number | null;
122
+ declare const parseCurrentDevBranchIdFromUrl: () => number | null;
123
+ type PrefixTagsOptions = {
124
+ hasStorageBranches?: boolean;
22
125
  };
126
+ declare const prefixTagsWithDevBranchId: (tags: string[], branchId?: number | string | null, options?: PrefixTagsOptions) => string[];
127
+ declare const removeBranchFromUrl: (url: string) => string;
23
128
 
24
- export { createStorageSdk };
129
+ export { FQID_TYPES, type ParsedFQID, constructFQID, getBucketDisplayNameFromName, parse, parseCurrentDevBranchIdFromUrl, parseDevBranchId, parseFQID, prefixTagsWithDevBranchId, removeBranchFromUrl, tableIdParser, tableNameParsed };
@@ -82,13 +82,180 @@ var createStorageSdk = ({ storageClient }) => {
82
82
  const job = await storageClient.tables.exportAsync(tableId, body, options?.abortSignal);
83
83
  return waitForJob(job, options);
84
84
  };
85
+ const getBucketListing = async (bucketId, signal) => storageClient.buckets.getListing(bucketId, signal);
86
+ const listBucketListings = async (signal) => storageClient.buckets.listListings(signal);
87
+ const createBucketListing = async (bucketId, input, options) => {
88
+ const job = await storageClient.buckets.createListing(bucketId, input, options?.abortSignal);
89
+ return waitForJob(job, options);
90
+ };
91
+ const updateBucketListing = async (bucketId, input, options) => {
92
+ const job = await storageClient.buckets.updateListing(bucketId, input, options?.abortSignal);
93
+ return waitForJob(job, options);
94
+ };
95
+ const deleteBucketListing = async (bucketId, options) => {
96
+ const job = await storageClient.buckets.deleteListing(bucketId, options?.abortSignal);
97
+ return waitForJob(job, options);
98
+ };
85
99
  return {
86
100
  createTable,
87
101
  importFromFile,
88
- exportToFile
102
+ exportToFile,
103
+ getBucketListing,
104
+ listBucketListings,
105
+ createBucketListing,
106
+ updateBucketListing,
107
+ deleteBucketListing
108
+ };
109
+ };
110
+
111
+ // src/sdks/storage/tableIdParser.ts
112
+ function parseTableId(tableId, defaultStage, defaultBucket) {
113
+ const parts = tableId.match(/^(in|out)?\.(.+)?\.(.+)?$/);
114
+ return {
115
+ stage: parts ? parts[1] || defaultStage : defaultStage,
116
+ bucket: parts ? parts[2] || defaultBucket : defaultBucket,
117
+ table: parts ? parts[3] || "" : ""
118
+ };
119
+ }
120
+ function parse(tableId, options = {}) {
121
+ const parts = parseTableId(
122
+ tableId || "",
123
+ options.defaultStage || "",
124
+ options.defaultBucket || ""
125
+ );
126
+ const { stage, bucket, table } = parts;
127
+ return {
128
+ tableId: `${stage}.${bucket}.${table}`,
129
+ parts,
130
+ setPart: (partNameToSet, value) => {
131
+ const result = ["stage", "bucket", "table"].reduce(
132
+ (memo, partName) => partName === partNameToSet ? `${memo}.${value}` : `${memo}.${parts[partName]}`,
133
+ ""
134
+ ).slice(1);
135
+ return parse(result);
136
+ }
89
137
  };
138
+ }
139
+ var tableIdParser = { parse };
140
+
141
+ // src/sdks/storage/tableName.ts
142
+ var stripLegacyBucketPrefix = (bucketName) => {
143
+ if (!bucketName.includes("c-")) {
144
+ return bucketName;
145
+ }
146
+ return bucketName.substring(bucketName.indexOf("c-") + "c-".length);
147
+ };
148
+ var getBucketDisplayNameFromName = (bucketName, options = {}) => {
149
+ if (!bucketName) return "";
150
+ return options.disableLegacyBucketPrefix ? bucketName : stripLegacyBucketPrefix(bucketName);
151
+ };
152
+ var tableNameParsed = (tableId, options = {}) => {
153
+ const { stage, bucket, table } = tableIdParser.parse(tableId).parts;
154
+ const bucketName = options.storageBucket?.displayName ?? getBucketDisplayNameFromName(bucket, options);
155
+ if (stage && bucketName && table) {
156
+ return `${bucketName} / ${table}`;
157
+ }
158
+ return tableId;
159
+ };
160
+
161
+ // src/sdks/storage/fqid.ts
162
+ var FQID_TYPES = {
163
+ organization: "ORG",
164
+ maintainer: "MTR",
165
+ project: "PRJ",
166
+ bucket: "BCT",
167
+ table: "TBL",
168
+ column: "COL",
169
+ config: "CFG",
170
+ component: "CMP",
171
+ externalTable: "EX_TBL",
172
+ externalColumn: "EX_COL"
173
+ };
174
+ var isFQIDType = (value) => {
175
+ return Object.values(FQID_TYPES).includes(value);
176
+ };
177
+ var parseFQID = (fqid) => {
178
+ if (!fqid?.trim()) return {};
179
+ const firstSegment = fqid.split(" ")[0] ?? "";
180
+ const [type, ...rest] = firstSegment.split("/");
181
+ if (!type || !isFQIDType(type)) return {};
182
+ switch (type) {
183
+ case "ORG":
184
+ return { type, organizationId: rest[0] };
185
+ case "MTR":
186
+ return { type, maintainerId: rest[0] };
187
+ case "PRJ":
188
+ return { type, projectId: rest[0] };
189
+ case "BCT":
190
+ return { type, projectId: rest[0], bucketId: rest[1] };
191
+ case "TBL":
192
+ return { type, projectId: rest[0], tableId: rest[1] };
193
+ case "COL":
194
+ return { type, projectId: rest[0], tableId: rest[1], column: rest[2] };
195
+ case "CMP":
196
+ return { type, projectId: rest[0], componentId: rest[1] };
197
+ case "CFG":
198
+ return { type, projectId: rest[0], componentId: rest[1], configId: rest[2] };
199
+ default:
200
+ return {};
201
+ }
202
+ };
203
+ var constructFQID = ({ type, data }) => {
204
+ switch (type) {
205
+ case FQID_TYPES.organization:
206
+ return `ORG/${data.organizationId}`;
207
+ case FQID_TYPES.maintainer:
208
+ return `MTR/${data.maintainerId}`;
209
+ case FQID_TYPES.project:
210
+ return `PRJ/${data.projectId}`;
211
+ case FQID_TYPES.bucket:
212
+ return `BCT/${data.projectId}/${data.bucketId}`;
213
+ case FQID_TYPES.table:
214
+ return `TBL/${data.projectId}/${data.tableId}`;
215
+ case FQID_TYPES.column:
216
+ return `COL/${data.projectId}/${data.tableId}/${data.column}`;
217
+ case FQID_TYPES.component:
218
+ return `CMP/${data.projectId}/${data.componentId}`;
219
+ case FQID_TYPES.config:
220
+ return `CFG/${data.projectId}/${data.componentId}/${data.configId}`;
221
+ }
222
+ };
223
+
224
+ // src/sdks/storage/devBranch.ts
225
+ var parseDevBranchId = (path) => {
226
+ const pathParts = path.split("/");
227
+ const branchKeywordIndex = pathParts.findIndex((pathPart) => pathPart === "branch");
228
+ if (branchKeywordIndex === -1) {
229
+ return null;
230
+ }
231
+ const branchId = pathParts[branchKeywordIndex + 1];
232
+ if (!branchId) {
233
+ return null;
234
+ }
235
+ const branchIdInt = parseInt(branchId, 10);
236
+ if (/^\d+$/.test(branchId) && branchIdInt > 0) {
237
+ return branchIdInt;
238
+ }
239
+ return null;
240
+ };
241
+ var parseCurrentDevBranchIdFromUrl = () => {
242
+ if (typeof location === "undefined") {
243
+ return null;
244
+ }
245
+ return parseDevBranchId(location.pathname);
246
+ };
247
+ var prefixTagsWithDevBranchId = (tags, branchId = null, options = {}) => {
248
+ if (!branchId || options.hasStorageBranches) {
249
+ return tags;
250
+ }
251
+ return tags.map((tag) => `${branchId}-${tag}`);
252
+ };
253
+ var removeBranchFromUrl = (url) => {
254
+ const partToRemove = "branch/\\d+/";
255
+ const regex = new RegExp(partToRemove, "g");
256
+ return url.replace(regex, "");
90
257
  };
91
258
 
92
- export { createStorageSdk };
259
+ export { FQID_TYPES, constructFQID, createStorageSdk, getBucketDisplayNameFromName, parse, parseCurrentDevBranchIdFromUrl, parseDevBranchId, parseFQID, prefixTagsWithDevBranchId, removeBranchFromUrl, tableIdParser, tableNameParsed };
93
260
  //# sourceMappingURL=index.js.map
94
261
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/createAbortError.ts","../../../src/utils/delay.ts","../../../src/utils/poll.ts","../../../src/sdks/storage/storageSdk.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const createAbortError = (reason?: string) => new DOMException(reason, 'AbortError');\n","import { createAbortError } from './createAbortError';\n\nexport const delay = (timeout: number, signal?: AbortSignal) =>\n new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(createAbortError(signal.reason));\n\n const timeoutId = setTimeout(resolve, timeout);\n\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timeoutId);\n reject(createAbortError(signal.reason));\n },\n { once: true },\n );\n });\n","import { createAbortError } from './createAbortError';\nimport { delay } from './delay';\n\ntype PollResult<T> = {\n data: T;\n callCount: number;\n};\n\ntype PollErrorType = 'PollPredicateError' | 'PollTimeoutError' | 'PollPollTimeoutError';\n\nconst message: Record<PollErrorType, string> = {\n PollPredicateError: 'Poll predicate failed',\n PollTimeoutError: 'Poll timeout exceeded',\n PollPollTimeoutError: 'Poll data failed condition',\n};\n\nexport class PollException<T> extends Error {\n result: PollResult<T>;\n\n constructor(type: PollErrorType, result: PollResult<T>) {\n super(type, { cause: message[type] });\n this.result = result;\n }\n}\n\ntype Options<T> = {\n pollFn: (abortSignal?: AbortSignal) => Promise<T>;\n isDone: (result: T) => boolean;\n isFailed?: (result: T) => boolean;\n interval: number;\n abortSignal?: AbortSignal;\n maxAttempts?: number;\n};\n\nexport const poll = async <T>({\n pollFn,\n interval,\n isDone,\n isFailed,\n abortSignal,\n maxAttempts = Infinity,\n}: Options<T>): Promise<PollResult<T>> => {\n if (abortSignal?.aborted) throw createAbortError(abortSignal.reason);\n if (interval < 1) throw new Error('Invalid poll interval');\n if (maxAttempts < 1) throw new Error('Invalid poll maxAttempts');\n\n let callCount = 0;\n\n while (true) {\n callCount++;\n const data = await pollFn(abortSignal);\n const result = { data, callCount };\n\n try {\n if (isDone(data)) return result;\n if (isFailed?.(data) ?? false) throw new PollException('PollPollTimeoutError', result);\n } catch (error) {\n if (error instanceof PollException) throw error;\n throw new PollException('PollPredicateError', result);\n }\n\n if (callCount >= maxAttempts) throw new PollException('PollTimeoutError', result);\n await delay(interval, abortSignal);\n }\n};\n","import type { createStorageClient } from '../../clients/storage';\nimport type { Job, JobOperation } from '../../clients/storage/jobs/types';\nimport type {\n CreateTableAsyncBody,\n TableExportAsyncBody,\n TableImportAsyncBody,\n} from '../../clients/storage/tables/types';\nimport { poll } from '../../utils/poll';\n\nconst DEFAULT_POLL_INTERVAL = 2000;\n\nconst JOB_TERMINAL_STATUSES = new Set(['success', 'warning', 'error', 'terminated', 'cancelled']);\n\ntype Options = {\n interval?: number;\n maxAttempts?: number;\n abortSignal?: AbortSignal;\n};\n\ntype StorageSdkOptions = {\n storageClient: ReturnType<typeof createStorageClient>;\n};\n\nexport const createStorageSdk = ({ storageClient }: StorageSdkOptions) => {\n const waitForJob = async <Operation extends JobOperation | string>(\n job: Job<Operation> & { operationName: Operation },\n options?: Options,\n ) => {\n const { data } = await poll({\n pollFn: (abortSignal) => storageClient.jobs.getJob<Operation>(job.id, abortSignal),\n isDone: (j) => JOB_TERMINAL_STATUSES.has(j.status),\n interval: options?.interval ?? DEFAULT_POLL_INTERVAL,\n maxAttempts: options?.maxAttempts,\n abortSignal: options?.abortSignal,\n });\n\n return data;\n };\n\n const createTable = async (bucketId: string, body: CreateTableAsyncBody, options?: Options) => {\n const job = await storageClient.tables.createTableAsync(bucketId, body, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n const importFromFile = async (tableId: string, body: TableImportAsyncBody, options?: Options) => {\n const job = await storageClient.tables.importAsync(tableId, body, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n const exportToFile = async (tableId: string, body?: TableExportAsyncBody, options?: Options) => {\n const job = await storageClient.tables.exportAsync(tableId, body, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n return {\n createTable,\n importFromFile,\n exportToFile,\n };\n};\n"]}
1
+ {"version":3,"sources":["../../../src/utils/createAbortError.ts","../../../src/utils/delay.ts","../../../src/utils/poll.ts","../../../src/sdks/storage/storageSdk.ts","../../../src/sdks/storage/tableIdParser.ts","../../../src/sdks/storage/tableName.ts","../../../src/sdks/storage/fqid.ts","../../../src/sdks/storage/devBranch.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const createAbortError = (reason?: string) => new DOMException(reason, 'AbortError');\n","import { createAbortError } from './createAbortError';\n\nexport const delay = (timeout: number, signal?: AbortSignal) =>\n new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(createAbortError(signal.reason));\n\n const timeoutId = setTimeout(resolve, timeout);\n\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timeoutId);\n reject(createAbortError(signal.reason));\n },\n { once: true },\n );\n });\n","import { createAbortError } from './createAbortError';\nimport { delay } from './delay';\n\ntype PollResult<T> = {\n data: T;\n callCount: number;\n};\n\ntype PollErrorType = 'PollPredicateError' | 'PollTimeoutError' | 'PollPollTimeoutError';\n\nconst message: Record<PollErrorType, string> = {\n PollPredicateError: 'Poll predicate failed',\n PollTimeoutError: 'Poll timeout exceeded',\n PollPollTimeoutError: 'Poll data failed condition',\n};\n\nexport class PollException<T> extends Error {\n result: PollResult<T>;\n\n constructor(type: PollErrorType, result: PollResult<T>) {\n super(type, { cause: message[type] });\n this.result = result;\n }\n}\n\ntype Options<T> = {\n pollFn: (abortSignal?: AbortSignal) => Promise<T>;\n isDone: (result: T) => boolean;\n isFailed?: (result: T) => boolean;\n interval: number;\n abortSignal?: AbortSignal;\n maxAttempts?: number;\n};\n\nexport const poll = async <T>({\n pollFn,\n interval,\n isDone,\n isFailed,\n abortSignal,\n maxAttempts = Infinity,\n}: Options<T>): Promise<PollResult<T>> => {\n if (abortSignal?.aborted) throw createAbortError(abortSignal.reason);\n if (interval < 1) throw new Error('Invalid poll interval');\n if (maxAttempts < 1) throw new Error('Invalid poll maxAttempts');\n\n let callCount = 0;\n\n while (true) {\n callCount++;\n const data = await pollFn(abortSignal);\n const result = { data, callCount };\n\n try {\n if (isDone(data)) return result;\n if (isFailed?.(data) ?? false) throw new PollException('PollPollTimeoutError', result);\n } catch (error) {\n if (error instanceof PollException) throw error;\n throw new PollException('PollPredicateError', result);\n }\n\n if (callCount >= maxAttempts) throw new PollException('PollTimeoutError', result);\n await delay(interval, abortSignal);\n }\n};\n","import type { createStorageClient } from '../../clients/storage';\nimport type {\n CreateBucketListingInput,\n UpdateBucketListingInput,\n} from '../../clients/storage/buckets/types';\nimport type { Job, JobOperation } from '../../clients/storage/jobs/types';\nimport type {\n CreateTableAsyncBody,\n TableExportAsyncBody,\n TableImportAsyncBody,\n} from '../../clients/storage/tables/types';\nimport { poll } from '../../utils/poll';\n\nconst DEFAULT_POLL_INTERVAL = 2000;\n\nconst JOB_TERMINAL_STATUSES = new Set(['success', 'warning', 'error', 'terminated', 'cancelled']);\n\ntype Options = {\n interval?: number;\n maxAttempts?: number;\n abortSignal?: AbortSignal;\n};\n\ntype StorageSdkOptions = {\n storageClient: ReturnType<typeof createStorageClient>;\n};\n\nexport const createStorageSdk = ({ storageClient }: StorageSdkOptions) => {\n const waitForJob = async <Operation extends JobOperation | string>(\n job: Job<Operation> & { operationName: Operation },\n options?: Options,\n ) => {\n const { data } = await poll({\n pollFn: (abortSignal) => storageClient.jobs.getJob<Operation>(job.id, abortSignal),\n isDone: (j) => JOB_TERMINAL_STATUSES.has(j.status),\n interval: options?.interval ?? DEFAULT_POLL_INTERVAL,\n maxAttempts: options?.maxAttempts,\n abortSignal: options?.abortSignal,\n });\n\n return data;\n };\n\n const createTable = async (bucketId: string, body: CreateTableAsyncBody, options?: Options) => {\n const job = await storageClient.tables.createTableAsync(bucketId, body, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n const importFromFile = async (tableId: string, body: TableImportAsyncBody, options?: Options) => {\n const job = await storageClient.tables.importAsync(tableId, body, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n const exportToFile = async (tableId: string, body?: TableExportAsyncBody, options?: Options) => {\n const job = await storageClient.tables.exportAsync(tableId, body, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n const getBucketListing = async (bucketId: string, signal?: AbortSignal) =>\n storageClient.buckets.getListing(bucketId, signal);\n\n const listBucketListings = async (signal?: AbortSignal) =>\n storageClient.buckets.listListings(signal);\n\n const createBucketListing = async (\n bucketId: string,\n input: CreateBucketListingInput,\n options?: Options,\n ) => {\n const job = await storageClient.buckets.createListing(bucketId, input, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n const updateBucketListing = async (\n bucketId: string,\n input: UpdateBucketListingInput,\n options?: Options,\n ) => {\n const job = await storageClient.buckets.updateListing(bucketId, input, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n const deleteBucketListing = async (bucketId: string, options?: Options) => {\n const job = await storageClient.buckets.deleteListing(bucketId, options?.abortSignal);\n return waitForJob(job, options);\n };\n\n return {\n createTable,\n importFromFile,\n exportToFile,\n getBucketListing,\n listBucketListings,\n createBucketListing,\n updateBucketListing,\n deleteBucketListing,\n };\n};\n","function parseTableId(tableId: string, defaultStage: string, defaultBucket: string) {\n const parts = tableId.match(/^(in|out)?\\.(.+)?\\.(.+)?$/);\n\n return {\n stage: parts ? parts[1] || defaultStage : defaultStage,\n bucket: parts ? parts[2] || defaultBucket : defaultBucket,\n table: parts ? parts[3] || '' : '',\n };\n}\n\nexport function parse(\n tableId: string | null,\n options: { defaultStage?: string; defaultBucket?: string } = {},\n) {\n const parts = parseTableId(\n tableId || '',\n options.defaultStage || '',\n options.defaultBucket || '',\n );\n\n const { stage, bucket, table } = parts;\n return {\n tableId: `${stage}.${bucket}.${table}`,\n parts,\n setPart: (partNameToSet: string, value: string) => {\n const result = (['stage', 'bucket', 'table'] as const)\n .reduce(\n (memo, partName) =>\n partName === partNameToSet ? `${memo}.${value}` : `${memo}.${parts[partName]}`,\n '',\n )\n .slice(1);\n return parse(result);\n },\n };\n}\n\nexport const tableIdParser = { parse };\n","import { tableIdParser } from './tableIdParser';\n\nconst stripLegacyBucketPrefix = (bucketName: string) => {\n if (!bucketName.includes('c-')) {\n return bucketName;\n }\n\n return bucketName.substring(bucketName.indexOf('c-') + 'c-'.length);\n};\n\ntype BucketDisplayNameOptions = {\n disableLegacyBucketPrefix?: boolean;\n};\n\nexport const getBucketDisplayNameFromName = (\n bucketName: string,\n options: BucketDisplayNameOptions = {},\n) => {\n if (!bucketName) return '';\n return options.disableLegacyBucketPrefix ? bucketName : stripLegacyBucketPrefix(bucketName);\n};\n\ntype TableNameParsedOptions = BucketDisplayNameOptions & {\n storageBucket?: { displayName?: string } | null;\n};\n\nexport const tableNameParsed = (tableId: string, options: TableNameParsedOptions = {}) => {\n const { stage, bucket, table } = tableIdParser.parse(tableId).parts;\n const bucketName =\n options.storageBucket?.displayName ?? getBucketDisplayNameFromName(bucket, options);\n\n if (stage && bucketName && table) {\n return `${bucketName} / ${table}`;\n }\n\n return tableId;\n};\n","export const FQID_TYPES = {\n organization: 'ORG',\n maintainer: 'MTR',\n project: 'PRJ',\n bucket: 'BCT',\n table: 'TBL',\n column: 'COL',\n config: 'CFG',\n component: 'CMP',\n externalTable: 'EX_TBL',\n externalColumn: 'EX_COL',\n} as const;\n\ntype FQIDTypes = typeof FQID_TYPES;\n\nexport type ParsedFQID = {\n type?: (typeof FQID_TYPES)[keyof typeof FQID_TYPES];\n organizationId?: string;\n maintainerId?: string;\n projectId?: string;\n bucketId?: string;\n tableId?: string;\n componentId?: string;\n configId?: string;\n column?: string;\n};\n\nconst isFQIDType = (value: string): value is FQIDTypes[keyof FQIDTypes] => {\n return Object.values(FQID_TYPES).includes(value as FQIDTypes[keyof FQIDTypes]);\n};\n\nconst parseFQID = (fqid?: string): ParsedFQID | Record<string, never> => {\n if (!fqid?.trim()) return {};\n\n const firstSegment = fqid.split(' ')[0] ?? '';\n const [type, ...rest] = firstSegment.split('/');\n\n if (!type || !isFQIDType(type)) return {};\n\n switch (type) {\n case 'ORG':\n return { type, organizationId: rest[0] };\n case 'MTR':\n return { type, maintainerId: rest[0] };\n case 'PRJ':\n return { type, projectId: rest[0] };\n case 'BCT':\n return { type, projectId: rest[0], bucketId: rest[1] };\n case 'TBL':\n return { type, projectId: rest[0], tableId: rest[1] };\n case 'COL':\n return { type, projectId: rest[0], tableId: rest[1], column: rest[2] };\n case 'CMP':\n return { type, projectId: rest[0], componentId: rest[1] };\n case 'CFG':\n return { type, projectId: rest[0], componentId: rest[1], configId: rest[2] };\n default:\n return {};\n }\n};\n\ntype FQIDData =\n | {\n type: FQIDTypes['organization'];\n data: { organizationId: string };\n }\n | {\n type: FQIDTypes['maintainer'];\n data: { maintainerId: string };\n }\n | {\n type: FQIDTypes['project'];\n data: { projectId: string };\n }\n | {\n type: FQIDTypes['bucket'];\n data: { projectId: string; bucketId: string };\n }\n | {\n type: FQIDTypes['table'];\n data: { projectId: string; tableId: string };\n }\n | {\n type: FQIDTypes['column'];\n data: { projectId: string; tableId: string; column: string };\n }\n | {\n type: FQIDTypes['component'];\n data: { projectId: string; componentId: string };\n }\n | {\n type: FQIDTypes['config'];\n data: { projectId: string; componentId: string; configId: string };\n };\n\nconst constructFQID = ({ type, data }: FQIDData) => {\n switch (type) {\n case FQID_TYPES.organization:\n return `ORG/${data.organizationId}`;\n case FQID_TYPES.maintainer:\n return `MTR/${data.maintainerId}`;\n case FQID_TYPES.project:\n return `PRJ/${data.projectId}`;\n case FQID_TYPES.bucket:\n return `BCT/${data.projectId}/${data.bucketId}`;\n case FQID_TYPES.table:\n return `TBL/${data.projectId}/${data.tableId}`;\n case FQID_TYPES.column:\n return `COL/${data.projectId}/${data.tableId}/${data.column}`;\n case FQID_TYPES.component:\n return `CMP/${data.projectId}/${data.componentId}`;\n case FQID_TYPES.config:\n return `CFG/${data.projectId}/${data.componentId}/${data.configId}`;\n }\n};\n\nexport { parseFQID, constructFQID };\n","export const parseDevBranchId = (path: string): number | null => {\n const pathParts = path.split('/');\n const branchKeywordIndex = pathParts.findIndex((pathPart) => pathPart === 'branch');\n if (branchKeywordIndex === -1) {\n return null;\n }\n const branchId = pathParts[branchKeywordIndex + 1];\n if (!branchId) {\n return null;\n }\n const branchIdInt = parseInt(branchId, 10);\n if (/^\\d+$/.test(branchId) && branchIdInt > 0) {\n return branchIdInt;\n }\n return null;\n};\n\nexport const parseCurrentDevBranchIdFromUrl = (): number | null => {\n if (typeof location === 'undefined') {\n return null;\n }\n return parseDevBranchId(location.pathname);\n};\n\ntype PrefixTagsOptions = {\n hasStorageBranches?: boolean;\n};\n\nexport const prefixTagsWithDevBranchId = (\n tags: string[],\n branchId: number | string | null = null,\n options: PrefixTagsOptions = {},\n): string[] => {\n if (!branchId || options.hasStorageBranches) {\n return tags;\n }\n\n return tags.map((tag) => `${branchId}-${tag}`);\n};\n\nexport const removeBranchFromUrl = (url: string): string => {\n const partToRemove = 'branch/\\\\d+/'; // This pattern matches \"branch/\" followed by one or more digits\n const regex = new RegExp(partToRemove, 'g');\n\n return url.replace(regex, '');\n};\n"]}
@@ -18,6 +18,12 @@ var ApiError = class extends Error {
18
18
  this.data = data;
19
19
  }
20
20
  };
21
+
22
+ // src/constants.ts
23
+ var HttpStatus = {
24
+ NO_CONTENT: 204};
25
+
26
+ // src/fetchClient/createFetchClient/utils.ts
21
27
  var HttpHeader = {
22
28
  CONTENT_TYPE: "content-type"};
23
29
  var HttpContentType = {
@@ -31,7 +37,7 @@ function removeUndefined(obj) {
31
37
  return objCopy;
32
38
  }
33
39
  var parseData = async (response) => {
34
- if (response.status === 204) return null;
40
+ if (response.status === HttpStatus.NO_CONTENT) return null;
35
41
  const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);
36
42
  if (contentType && contentType == HttpContentType.JSON) {
37
43
  return response.json();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/errors/ApiError.ts","../../src/fetchClient/createFetchClient/utils.ts","../../src/fetchClient/createFetchClient/createFetchClient.ts","../../src/fetchClient/createGenericFetchClient.ts","../../src/clients/status/statusClient.ts"],"names":["qs"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(response.statusText);\n this.response = response;\n this.request = request;\n this.data = data;\n }\n}\n","import type { IStringifyOptions } from 'qs';\nimport qs from 'qs';\n\nimport type { BodyParam, CreateFetchRequestFn, PathParam, ValidateStatusFn } from './types';\n\nexport const HttpHeader = {\n CONTENT_TYPE: 'content-type',\n CONTENT_DISPOSITION: 'content-disposition',\n};\n\nexport const HttpContentType = {\n JSON: 'application/json',\n TEXT_PLAIN: 'text/plain',\n FORM_DATA: 'multipart/form-data',\n TEXT_HTML: 'text/html',\n};\n\nexport const defaultValidateStatus: ValidateStatusFn = ({ response }) =>\n response.status >= 200 && response.status <= 299;\n\nfunction removeUndefined(obj: Record<string, string>) {\n const objCopy = { ...obj };\n for (const [key, value] of Object.entries(objCopy)) {\n if (value == null) delete objCopy[key];\n }\n return objCopy;\n}\n\nexport const parseData = async (response: Response) => {\n // HTTP 204 - no content\n if (response.status === 204) return null;\n\n // headers indicates that the content is JSON, so parse it.\n const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);\n if (contentType && contentType == HttpContentType.JSON) {\n return response.json();\n }\n\n // try JSON parsing on the text\n // If it fails, return the string. The headers does not have a content type.\n const text = await response.text();\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n};\n\n// Header instance serialize undefined value as `undefined`, we do not want that\nconst cleanHeadersInit = (headersInit: HeadersInit | undefined) => {\n if (Array.isArray(headersInit)) return headersInit;\n if (headersInit instanceof Headers) return headersInit;\n if (headersInit == null) return headersInit;\n\n return removeUndefined(headersInit);\n};\n\nconst createHeaders = (\n headersInitA: HeadersInit | undefined,\n headersInitB: HeadersInit | undefined,\n) => {\n const headersA = new Headers(cleanHeadersInit(headersInitA));\n const headersB = new Headers(cleanHeadersInit(headersInitB));\n\n headersB.forEach((value, key) => {\n headersA.set(key, value);\n });\n\n return headersA;\n};\n\nexport const createPath = (path: string, pathParam: PathParam = {}) =>\n path.replace(/\\{([^}]+)}/g, (_, key) => {\n if (!(key in pathParam))\n throw new Error(`Path parameter \"${key}\" is missing in the path \"${path}\"`);\n\n return encodeURIComponent(pathParam[key]!);\n });\n\nexport const createSearch = (\n query: Record<string, unknown>,\n options: Pick<IStringifyOptions, 'arrayFormat'> = {},\n) => {\n return qs.stringify(query, {\n encodeValuesOnly: true,\n skipNulls: true,\n ...options,\n });\n};\n\nexport const createBody = (body: BodyParam, headers: Headers) => {\n if (body == null) return null;\n if (body instanceof FormData) return body; // fetch automatically sets content-type header\n if (typeof body === 'string') return body; // fetch automatically sets content-type header\n\n const stringifyBody = JSON.stringify(body);\n const stringBody = stringifyBody === '{}' ? null : stringifyBody;\n if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);\n\n return stringBody;\n};\n\nexport const parseContentDispositionHeader = (contentDisposition?: string | null) => {\n // extract the type ('inline' or 'attachment'), default the type to 'unknown'\n const type = (() => {\n const typeMatch = contentDisposition?.match(/^\\s*(inline|attachment)\\s*;/i);\n return (typeMatch?.[1]?.toLowerCase() ?? 'unknown') as 'inline' | 'attachment' | 'unknown';\n })();\n\n // extract the filename, default the type to null\n const filename = (() => {\n const filenameMatch = contentDisposition?.match(/filename=\"([^\"]+)\"/i);\n if (filenameMatch) return filenameMatch[1];\n\n // If no filename=\"...\", check for encoded filename*=UTF-8''\n const encodedFilenameMatch = contentDisposition?.match(/filename\\*=(?:UTF-8'')?([^;]+)/i);\n if (encodedFilenameMatch?.[1]) return decodeURIComponent(encodedFilenameMatch[1]);\n\n // Check for unquoted filenames (rare but possible)\n const unquotedFilenameMatch = contentDisposition?.match(/filename=([^;]+)/i);\n return unquotedFilenameMatch?.[1] ?? null;\n })();\n\n // Return the parsed result\n return { type, filename };\n};\n\nexport const createFetchRequest: CreateFetchRequestFn = ({\n url,\n method,\n params,\n options = {},\n defaultOptions,\n}) => {\n const {\n baseUrl,\n validateStatus: defValidateStatus = defaultValidateStatus,\n headers: defaultHeaders,\n ...restDefaultOptions\n } = defaultOptions;\n const { validateStatus, queryArrayFormat, headers: endpointHeaders, ...restOptions } = options;\n\n const headers = createHeaders(defaultHeaders, endpointHeaders);\n const path = createPath(url, params.path);\n const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });\n const body = createBody(params.body, headers);\n\n const urlInstance = new URL(baseUrl + path);\n urlInstance.search = search;\n\n const request = new Request(urlInstance, {\n ...restDefaultOptions,\n ...restOptions,\n headers,\n method: method.toUpperCase(),\n body,\n });\n\n return { request, validateStatus: validateStatus ?? defValidateStatus };\n};\n","import { ApiError } from '../../errors';\n\nimport type {\n BaseFetchParams,\n CoreFetchFn,\n CreateFetchClientOptions,\n FetchClientOptions,\n FetchFn,\n HttpMethod,\n} from './types';\nimport { createFetchRequest, parseData } from './utils';\n\nexport type FetchClientError = TypeError | ApiError | SyntaxError | DOMException;\n\nexport const isApiError = (error: unknown): error is ApiError => error instanceof ApiError;\n\nexport const isAbortError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'AbortError';\n\nexport const isFetchClientError = (error: unknown): error is FetchClientError =>\n error instanceof TypeError || error instanceof SyntaxError || isApiError(error);\n\nconst createCoreFetch =\n (fetchFn: FetchFn): CoreFetchFn =>\n async ({ request, validateStatus }) => {\n const response = await fetchFn(request);\n const data = await parseData(response);\n\n const apiResponse = {\n request,\n response,\n data,\n };\n\n const boolOrError = validateStatus(apiResponse);\n if (isApiError(boolOrError)) throw boolOrError;\n if (!boolOrError) throw new ApiError(apiResponse);\n\n return apiResponse;\n };\n\nexport const createFetchClient = ({\n middlewares = [],\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const coreFetch = createCoreFetch(defaultOptions.fetchFn ?? fetch);\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions,\n options,\n });\n\n const methodMiddlewares = options?.middlewares ?? [];\n\n return methodMiddlewares.reduceRight(\n (next, middleware) => middleware(next),\n fetchWithMiddlewares,\n )(request);\n };\n\n return {\n get: createFetchMethod('get'),\n post: createFetchMethod('post'),\n put: createFetchMethod('put'),\n patch: createFetchMethod('patch'),\n delete: createFetchMethod('delete'),\n };\n};\n","import type {\n ApiResponse,\n BodyParam,\n CreateFetchClientOptions,\n FetchClientOptions,\n PathParam,\n QueryParam,\n} from './createFetchClient';\nimport { createFetchClient } from './createFetchClient';\n\ntype FetchParams<Path = PathParam, Query = QueryParam, Body = BodyParam> = {\n path?: Path;\n query?: Query;\n body?: Body;\n};\n\ntype FetchMethod = <Data, Path = PathParam, Query = QueryParam, Body = BodyParam>(\n url: string,\n params: FetchParams<Path, Query, Body>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<Data>>;\n\ntype FetchClient = {\n get: FetchMethod;\n post: FetchMethod;\n put: FetchMethod;\n patch: FetchMethod;\n delete: FetchMethod;\n};\n\nexport const createGenericFetchClient = (defaultOptions: CreateFetchClientOptions) =>\n createFetchClient(defaultOptions) as FetchClient;\n","import { createGenericFetchClient } from '../../fetchClient';\nimport type { ClientInitOptions } from '../types';\n\nimport type { StatusSummary } from './types';\n\nexport const createStatusClient = ({ baseUrl, middlewares }: ClientInitOptions) => {\n const client = createGenericFetchClient({\n baseUrl,\n middlewares,\n });\n\n const getSummary = async (signal?: AbortSignal) => {\n const { data } = await client.get<StatusSummary>('/summary.json', {}, { signal });\n return data;\n };\n\n return {\n getSummary,\n };\n};\n"]}
1
+ {"version":3,"sources":["../../src/errors/ApiError.ts","../../src/constants.ts","../../src/fetchClient/createFetchClient/utils.ts","../../src/fetchClient/createFetchClient/createFetchClient.ts","../../src/fetchClient/createGenericFetchClient.ts","../../src/clients/status/statusClient.ts"],"names":["qs"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(response.statusText);\n this.response = response;\n this.request = request;\n this.data = data;\n }\n}\n","export const KeboolaHttpHeader = {\n STORAGE_API_TOKEN: 'X-StorageApi-Token',\n MANAGEMENT_API_TOKEN: 'X-Kbc-Manageapitoken',\n STORAGE_API_URL: 'x-storageapi-url',\n};\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n} as const;\n\nexport const ENCRYPTED_VALUE_PREFIX = 'KBC::';\n","import type { IStringifyOptions } from 'qs';\nimport qs from 'qs';\n\nimport { HttpStatus } from '../../constants';\n\nimport type { BodyParam, CreateFetchRequestFn, PathParam, ValidateStatusFn } from './types';\n\nexport const HttpHeader = {\n CONTENT_TYPE: 'content-type',\n CONTENT_DISPOSITION: 'content-disposition',\n};\n\nexport const HttpContentType = {\n JSON: 'application/json',\n TEXT_PLAIN: 'text/plain',\n FORM_DATA: 'multipart/form-data',\n TEXT_HTML: 'text/html',\n};\n\nexport const defaultValidateStatus: ValidateStatusFn = ({ response }) =>\n response.status >= 200 && response.status <= 299;\n\nfunction removeUndefined(obj: Record<string, string>) {\n const objCopy = { ...obj };\n for (const [key, value] of Object.entries(objCopy)) {\n if (value == null) delete objCopy[key];\n }\n return objCopy;\n}\n\nexport const parseData = async (response: Response) => {\n if (response.status === HttpStatus.NO_CONTENT) return null;\n\n // headers indicates that the content is JSON, so parse it.\n const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);\n if (contentType && contentType == HttpContentType.JSON) {\n return response.json();\n }\n\n // try JSON parsing on the text\n // If it fails, return the string. The headers does not have a content type.\n const text = await response.text();\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n};\n\n// Header instance serialize undefined value as `undefined`, we do not want that\nconst cleanHeadersInit = (headersInit: HeadersInit | undefined) => {\n if (Array.isArray(headersInit)) return headersInit;\n if (headersInit instanceof Headers) return headersInit;\n if (headersInit == null) return headersInit;\n\n return removeUndefined(headersInit);\n};\n\nconst createHeaders = (\n headersInitA: HeadersInit | undefined,\n headersInitB: HeadersInit | undefined,\n) => {\n const headersA = new Headers(cleanHeadersInit(headersInitA));\n const headersB = new Headers(cleanHeadersInit(headersInitB));\n\n headersB.forEach((value, key) => {\n headersA.set(key, value);\n });\n\n return headersA;\n};\n\nexport const createPath = (path: string, pathParam: PathParam = {}) =>\n path.replace(/\\{([^}]+)}/g, (_, key) => {\n if (!(key in pathParam))\n throw new Error(`Path parameter \"${key}\" is missing in the path \"${path}\"`);\n\n return encodeURIComponent(pathParam[key]!);\n });\n\nexport const createSearch = (\n query: Record<string, unknown>,\n options: Pick<IStringifyOptions, 'arrayFormat'> = {},\n) => {\n return qs.stringify(query, {\n encodeValuesOnly: true,\n skipNulls: true,\n ...options,\n });\n};\n\nexport const createBody = (body: BodyParam, headers: Headers) => {\n if (body == null) return null;\n if (body instanceof FormData) return body; // fetch automatically sets content-type header\n if (typeof body === 'string') return body; // fetch automatically sets content-type header\n\n const stringifyBody = JSON.stringify(body);\n const stringBody = stringifyBody === '{}' ? null : stringifyBody;\n if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);\n\n return stringBody;\n};\n\nexport const parseContentDispositionHeader = (contentDisposition?: string | null) => {\n // extract the type ('inline' or 'attachment'), default the type to 'unknown'\n const type = (() => {\n const typeMatch = contentDisposition?.match(/^\\s*(inline|attachment)\\s*;/i);\n return (typeMatch?.[1]?.toLowerCase() ?? 'unknown') as 'inline' | 'attachment' | 'unknown';\n })();\n\n // extract the filename, default the type to null\n const filename = (() => {\n const filenameMatch = contentDisposition?.match(/filename=\"([^\"]+)\"/i);\n if (filenameMatch) return filenameMatch[1];\n\n // If no filename=\"...\", check for encoded filename*=UTF-8''\n const encodedFilenameMatch = contentDisposition?.match(/filename\\*=(?:UTF-8'')?([^;]+)/i);\n if (encodedFilenameMatch?.[1]) return decodeURIComponent(encodedFilenameMatch[1]);\n\n // Check for unquoted filenames (rare but possible)\n const unquotedFilenameMatch = contentDisposition?.match(/filename=([^;]+)/i);\n return unquotedFilenameMatch?.[1] ?? null;\n })();\n\n // Return the parsed result\n return { type, filename };\n};\n\nexport const createFetchRequest: CreateFetchRequestFn = ({\n url,\n method,\n params,\n options = {},\n defaultOptions,\n}) => {\n const {\n baseUrl,\n validateStatus: defValidateStatus = defaultValidateStatus,\n headers: defaultHeaders,\n ...restDefaultOptions\n } = defaultOptions;\n const { validateStatus, queryArrayFormat, headers: endpointHeaders, ...restOptions } = options;\n\n const headers = createHeaders(defaultHeaders, endpointHeaders);\n const path = createPath(url, params.path);\n const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });\n const body = createBody(params.body, headers);\n\n const urlInstance = new URL(baseUrl + path);\n urlInstance.search = search;\n\n const request = new Request(urlInstance, {\n ...restDefaultOptions,\n ...restOptions,\n headers,\n method: method.toUpperCase(),\n body,\n });\n\n return { request, validateStatus: validateStatus ?? defValidateStatus };\n};\n","import { ApiError } from '../../errors';\n\nimport type {\n BaseFetchParams,\n CoreFetchFn,\n CreateFetchClientOptions,\n FetchClientOptions,\n FetchFn,\n HttpMethod,\n} from './types';\nimport { createFetchRequest, parseData } from './utils';\n\nexport type FetchClientError = TypeError | ApiError | SyntaxError | DOMException;\n\nexport const isApiError = (error: unknown): error is ApiError => error instanceof ApiError;\n\nexport const isAbortError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'AbortError';\n\nexport const isFetchClientError = (error: unknown): error is FetchClientError =>\n error instanceof TypeError || error instanceof SyntaxError || isApiError(error);\n\nconst createCoreFetch =\n (fetchFn: FetchFn): CoreFetchFn =>\n async ({ request, validateStatus }) => {\n const response = await fetchFn(request);\n const data = await parseData(response);\n\n const apiResponse = {\n request,\n response,\n data,\n };\n\n const boolOrError = validateStatus(apiResponse);\n if (isApiError(boolOrError)) throw boolOrError;\n if (!boolOrError) throw new ApiError(apiResponse);\n\n return apiResponse;\n };\n\nexport const createFetchClient = ({\n middlewares = [],\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const coreFetch = createCoreFetch(defaultOptions.fetchFn ?? fetch);\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions,\n options,\n });\n\n const methodMiddlewares = options?.middlewares ?? [];\n\n return methodMiddlewares.reduceRight(\n (next, middleware) => middleware(next),\n fetchWithMiddlewares,\n )(request);\n };\n\n return {\n get: createFetchMethod('get'),\n post: createFetchMethod('post'),\n put: createFetchMethod('put'),\n patch: createFetchMethod('patch'),\n delete: createFetchMethod('delete'),\n };\n};\n","import type {\n ApiResponse,\n BodyParam,\n CreateFetchClientOptions,\n FetchClientOptions,\n PathParam,\n QueryParam,\n} from './createFetchClient';\nimport { createFetchClient } from './createFetchClient';\n\ntype FetchParams<Path = PathParam, Query = QueryParam, Body = BodyParam> = {\n path?: Path;\n query?: Query;\n body?: Body;\n};\n\ntype FetchMethod = <Data, Path = PathParam, Query = QueryParam, Body = BodyParam>(\n url: string,\n params: FetchParams<Path, Query, Body>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<Data>>;\n\ntype FetchClient = {\n get: FetchMethod;\n post: FetchMethod;\n put: FetchMethod;\n patch: FetchMethod;\n delete: FetchMethod;\n};\n\nexport const createGenericFetchClient = (defaultOptions: CreateFetchClientOptions) =>\n createFetchClient(defaultOptions) as FetchClient;\n","import { createGenericFetchClient } from '../../fetchClient';\nimport type { ClientInitOptions } from '../types';\n\nimport type { StatusSummary } from './types';\n\nexport const createStatusClient = ({ baseUrl, middlewares }: ClientInitOptions) => {\n const client = createGenericFetchClient({\n baseUrl,\n middlewares,\n });\n\n const getSummary = async (signal?: AbortSignal) => {\n const { data } = await client.get<StatusSummary>('/summary.json', {}, { signal });\n return data;\n };\n\n return {\n getSummary,\n };\n};\n"]}