@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.
- package/README.md +18 -1
- package/dist/ai/index.cjs +7 -1
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.js +7 -1
- package/dist/ai/index.js.map +1 -1
- package/dist/assets/index.cjs +7 -1
- package/dist/assets/index.cjs.map +1 -1
- package/dist/assets/index.js +7 -1
- package/dist/assets/index.js.map +1 -1
- package/dist/chat/index.cjs +3 -1
- package/dist/chat/index.cjs.map +1 -1
- package/dist/chat/index.d.cts +1 -1
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +3 -1
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/types.d.cts +1 -1
- package/dist/chat/types.d.ts +1 -1
- package/dist/constants/index.cjs +145 -0
- package/dist/constants/index.cjs.map +1 -0
- package/dist/constants/index.d.cts +28 -0
- package/dist/constants/index.d.ts +28 -0
- package/dist/constants/index.js +142 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/dataScience/index.cjs +7 -2
- package/dist/dataScience/index.cjs.map +1 -1
- package/dist/dataScience/index.js +7 -2
- package/dist/dataScience/index.js.map +1 -1
- package/dist/domain/permissions/index.cjs +13 -0
- package/dist/domain/permissions/index.cjs.map +1 -0
- package/dist/domain/permissions/index.d.cts +5 -0
- package/dist/domain/permissions/index.d.ts +5 -0
- package/dist/domain/permissions/index.js +11 -0
- package/dist/domain/permissions/index.js.map +1 -0
- package/dist/editor/index.cjs +7 -10
- package/dist/editor/index.cjs.map +1 -1
- package/dist/editor/index.d.cts +11 -19
- package/dist/editor/index.d.ts +11 -19
- package/dist/editor/index.js +7 -10
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/types.d.cts +1 -1
- package/dist/editor/types.d.ts +1 -1
- package/dist/encryption/index.cjs +7 -1
- package/dist/encryption/index.cjs.map +1 -1
- package/dist/encryption/index.js +7 -1
- package/dist/encryption/index.js.map +1 -1
- package/dist/import/index.cjs +7 -1
- package/dist/import/index.cjs.map +1 -1
- package/dist/import/index.js +7 -1
- package/dist/import/index.js.map +1 -1
- package/dist/index.cjs +308 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1085 -122
- package/dist/index.d.ts +1085 -122
- package/dist/index.js +308 -42
- package/dist/index.js.map +1 -1
- package/dist/management/index.cjs +40 -23
- package/dist/management/index.cjs.map +1 -1
- package/dist/management/index.d.cts +59 -23
- package/dist/management/index.d.ts +59 -23
- package/dist/management/index.js +40 -23
- package/dist/management/index.js.map +1 -1
- package/dist/management/types.d.cts +2 -2
- package/dist/management/types.d.ts +2 -2
- package/dist/metastore/index.cjs +7 -1
- package/dist/metastore/index.cjs.map +1 -1
- package/dist/metastore/index.js +7 -1
- package/dist/metastore/index.js.map +1 -1
- package/dist/oauth/index.cjs +234 -0
- package/dist/oauth/index.cjs.map +1 -0
- package/dist/oauth/index.d.cts +12 -0
- package/dist/oauth/index.d.ts +12 -0
- package/dist/oauth/index.js +228 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/types.cjs +4 -0
- package/dist/oauth/types.cjs.map +1 -0
- package/dist/oauth/types.d.cts +34 -0
- package/dist/oauth/types.d.ts +34 -0
- package/dist/oauth/types.js +3 -0
- package/dist/oauth/types.js.map +1 -0
- package/dist/queryService/index.cjs +7 -1
- package/dist/queryService/index.cjs.map +1 -1
- package/dist/queryService/index.js +7 -1
- package/dist/queryService/index.js.map +1 -1
- package/dist/queue/index.cjs +7 -1
- package/dist/queue/index.cjs.map +1 -1
- package/dist/queue/index.js +7 -1
- package/dist/queue/index.js.map +1 -1
- package/dist/sdk/configurations/index.cjs +14 -0
- package/dist/sdk/configurations/index.cjs.map +1 -0
- package/dist/sdk/configurations/index.d.cts +24 -0
- package/dist/sdk/configurations/index.d.ts +24 -0
- package/dist/sdk/configurations/index.js +11 -0
- package/dist/sdk/configurations/index.js.map +1 -0
- package/dist/sdk/storage/index.cjs +179 -1
- package/dist/sdk/storage/index.cjs.map +1 -1
- package/dist/sdk/storage/index.d.cts +118 -13
- package/dist/sdk/storage/index.d.ts +118 -13
- package/dist/sdk/storage/index.js +169 -2
- package/dist/sdk/storage/index.js.map +1 -1
- package/dist/status/index.cjs +7 -1
- package/dist/status/index.cjs.map +1 -1
- package/dist/status/index.js +7 -1
- package/dist/status/index.js.map +1 -1
- package/dist/storage/index.cjs +107 -9
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.cts +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js +107 -9
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/types.d.cts +2977 -1306
- package/dist/storage/types.d.ts +2977 -1306
- package/dist/{storageClient-DPLh_p0V.d.cts → storageClient-DSLTM3Cr.d.cts} +20 -1
- package/dist/{storageClient-YVWer22Y.d.ts → storageClient-DrYOs4Xm.d.ts} +20 -1
- package/dist/storageSdk-BBqAo0Vx.d.cts +143 -0
- package/dist/storageSdk-ZVmKQQSl.d.ts +143 -0
- package/dist/syncActions/index.cjs +7 -1
- package/dist/syncActions/index.cjs.map +1 -1
- package/dist/syncActions/index.js +7 -1
- package/dist/syncActions/index.js.map +1 -1
- package/dist/telemetry/index.cjs +7 -1
- package/dist/telemetry/index.cjs.map +1 -1
- package/dist/telemetry/index.js +7 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/{types-B7k8S4ki.d.ts → types-B--u7l2H.d.ts} +33 -118
- package/dist/{types-BeShtGlc.d.cts → types-BTcT8Q0T.d.cts} +15 -1
- package/dist/{types-BeShtGlc.d.ts → types-BTcT8Q0T.d.ts} +15 -1
- package/dist/{types-BNQK_jR_.d.cts → types-C0Owx2P7.d.cts} +33 -118
- package/dist/{types-DJ6nbNq5.d.cts → types-CNkgmuhe.d.cts} +1 -1
- package/dist/{types-BjrNNn5I.d.ts → types-DzwzVgyG.d.ts} +1 -1
- package/dist/vault/index.cjs +3 -1
- package/dist/vault/index.cjs.map +1 -1
- package/dist/vault/index.js +3 -1
- package/dist/vault/index.js.map +1 -1
- package/dist/verify/index.cjs +3 -1
- package/dist/verify/index.cjs.map +1 -1
- package/dist/verify/index.js +3 -1
- package/dist/verify/index.js.map +1 -1
- package/package.json +71 -5
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
type Provider = 'aws' | 'azure' | 'gcp';
|
|
2
|
+
type Continent = 'us' | 'europe';
|
|
3
|
+
type KeboolaStack = {
|
|
4
|
+
id: string;
|
|
5
|
+
host: string;
|
|
6
|
+
isSingleTenant?: boolean;
|
|
7
|
+
isTesting?: boolean;
|
|
8
|
+
isPayg?: boolean;
|
|
9
|
+
provider?: Provider;
|
|
10
|
+
continent?: Continent;
|
|
11
|
+
region?: string;
|
|
12
|
+
isCanary?: boolean;
|
|
13
|
+
};
|
|
14
|
+
declare const STACKS: Record<string, Readonly<KeboolaStack>>;
|
|
15
|
+
declare const URLS: {
|
|
16
|
+
readonly USER_DOCUMENTATION: "https://help.keboola.com";
|
|
17
|
+
readonly COMPONENTS: "https://components.keboola.com";
|
|
18
|
+
readonly DEVELOPERS_DOCUMENTATION: "https://developers.keboola.com";
|
|
19
|
+
readonly ACADEMY: "https://academy.keboola.com";
|
|
20
|
+
readonly SALES_CONTACT_FORM: "https://keboola.com/contact";
|
|
21
|
+
readonly SNOWFLAKE: "https://www.snowflake.com";
|
|
22
|
+
readonly SNOWFLAKE_DOCS: "https://docs.snowflake.com";
|
|
23
|
+
readonly MCP: "https://www.keboola.com/mcp";
|
|
24
|
+
readonly NODE_JS: "https://nodejs.org/en";
|
|
25
|
+
readonly CLAUDE_CONNECTORS: "https://claude.ai/customize/connectors";
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export { type Continent, type KeboolaStack, type Provider, STACKS, URLS };
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// src/constants/index.ts
|
|
2
|
+
var STACKS = {
|
|
3
|
+
NORTH_EUROPE_AZURE: {
|
|
4
|
+
id: "com-keboola-azure-north-europe",
|
|
5
|
+
region: "north-europe",
|
|
6
|
+
host: "connection.north-europe.azure.keboola.com",
|
|
7
|
+
provider: "azure",
|
|
8
|
+
continent: "europe",
|
|
9
|
+
isPayg: true
|
|
10
|
+
},
|
|
11
|
+
EU_CENTRAL_1_AWS: {
|
|
12
|
+
id: "kbc-eu-central-1",
|
|
13
|
+
region: "eu-central-1",
|
|
14
|
+
host: "connection.eu-central-1.keboola.com",
|
|
15
|
+
provider: "aws",
|
|
16
|
+
continent: "europe"
|
|
17
|
+
},
|
|
18
|
+
US_EAST_1_AWS: {
|
|
19
|
+
id: "kbc-us-east-1",
|
|
20
|
+
region: "us-east-1",
|
|
21
|
+
host: "connection.keboola.com",
|
|
22
|
+
provider: "aws",
|
|
23
|
+
continent: "us"
|
|
24
|
+
},
|
|
25
|
+
EUROPE_WEST3_GCP: {
|
|
26
|
+
id: "com-keboola-gcp-europe-west3",
|
|
27
|
+
region: "europe-west3",
|
|
28
|
+
host: "connection.europe-west3.gcp.keboola.com",
|
|
29
|
+
provider: "gcp",
|
|
30
|
+
continent: "europe"
|
|
31
|
+
},
|
|
32
|
+
US_EAST_4_GCP: {
|
|
33
|
+
id: "com-keboola-gcp-us-east4",
|
|
34
|
+
region: "us-east4",
|
|
35
|
+
host: "connection.us-east4.gcp.keboola.com",
|
|
36
|
+
provider: "gcp",
|
|
37
|
+
continent: "us",
|
|
38
|
+
isPayg: true
|
|
39
|
+
},
|
|
40
|
+
/* PRIVATE SINGLE TENANT STACKS
|
|
41
|
+
---------------------------- */
|
|
42
|
+
HCI: {
|
|
43
|
+
id: "cloud-keboola-hci",
|
|
44
|
+
host: "connection.hci.keboola.cloud",
|
|
45
|
+
isSingleTenant: true
|
|
46
|
+
},
|
|
47
|
+
CSAS_PROD: {
|
|
48
|
+
id: "cloud-keboola-cs",
|
|
49
|
+
host: "connection.cs.keboola.cloud",
|
|
50
|
+
isSingleTenant: true
|
|
51
|
+
},
|
|
52
|
+
CSAS_TEST: {
|
|
53
|
+
id: "cloud-keboola-cs-test",
|
|
54
|
+
host: "connection.cs-test.keboola.cloud",
|
|
55
|
+
isSingleTenant: true
|
|
56
|
+
},
|
|
57
|
+
INNOGY: {
|
|
58
|
+
id: "cloud-keboola-innogy-hub",
|
|
59
|
+
host: "connection.innogy-hub.keboola.cloud",
|
|
60
|
+
isSingleTenant: true
|
|
61
|
+
},
|
|
62
|
+
GROUPON: {
|
|
63
|
+
id: "cloud-keboola-groupon",
|
|
64
|
+
host: "connection.groupon.keboola.cloud",
|
|
65
|
+
isSingleTenant: true
|
|
66
|
+
},
|
|
67
|
+
CREDIT_INFO: {
|
|
68
|
+
id: "cloud-keboola-creditinfo",
|
|
69
|
+
host: "connection.creditinfo.keboola.cloud",
|
|
70
|
+
isSingleTenant: true
|
|
71
|
+
},
|
|
72
|
+
COATES: {
|
|
73
|
+
id: "cloud-keboola-coates",
|
|
74
|
+
host: "connection.coates.keboola.cloud",
|
|
75
|
+
isSingleTenant: true
|
|
76
|
+
},
|
|
77
|
+
SLSP: {
|
|
78
|
+
id: "cloud-keboola-slsp",
|
|
79
|
+
host: "connection.slsp.keboola.cloud",
|
|
80
|
+
isSingleTenant: true
|
|
81
|
+
},
|
|
82
|
+
HCKZ: {
|
|
83
|
+
id: "cloud-keboola-hckz",
|
|
84
|
+
host: "connection.hckz.keboola.cloud",
|
|
85
|
+
isSingleTenant: true
|
|
86
|
+
},
|
|
87
|
+
PASHA: {
|
|
88
|
+
id: "cloud-keboola-pasha",
|
|
89
|
+
host: "connection.pasha.keboola.cloud",
|
|
90
|
+
isSingleTenant: true
|
|
91
|
+
},
|
|
92
|
+
RBI: {
|
|
93
|
+
id: "cloud-keboola-rbi",
|
|
94
|
+
host: "connection.rbi.keboola.cloud",
|
|
95
|
+
isSingleTenant: true
|
|
96
|
+
},
|
|
97
|
+
NAH: {
|
|
98
|
+
id: "cloud-keboola-nah",
|
|
99
|
+
host: "connection.nah.keboola.cloud",
|
|
100
|
+
isSingleTenant: true,
|
|
101
|
+
provider: "azure",
|
|
102
|
+
continent: "us"
|
|
103
|
+
},
|
|
104
|
+
/* DEV STACKS
|
|
105
|
+
---------------------------- */
|
|
106
|
+
DEV_US_CENTRAL_1_GCP: {
|
|
107
|
+
id: "dev-keboola-gcp-us-central1",
|
|
108
|
+
host: "connection.us-central1.gcp.keboola.dev",
|
|
109
|
+
isTesting: true
|
|
110
|
+
},
|
|
111
|
+
DEV_EU_WEST_1_AWS: {
|
|
112
|
+
id: "dev-keboola-aws-eu-west-1",
|
|
113
|
+
host: "connection.eu-west-1.aws.keboola.dev",
|
|
114
|
+
isTesting: true
|
|
115
|
+
},
|
|
116
|
+
DEV_US_EAST_2_AZURE: {
|
|
117
|
+
id: "kbc-testing-azure-east-us-2",
|
|
118
|
+
host: "connection.east-us-2.azure.keboola-testing.com",
|
|
119
|
+
isTesting: true
|
|
120
|
+
},
|
|
121
|
+
DEV_KEBOOLA_CANARY_ORION: {
|
|
122
|
+
id: "dev-keboola-canary-orion",
|
|
123
|
+
host: "connection.canary-orion.keboola.dev",
|
|
124
|
+
isCanary: true
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
var URLS = {
|
|
128
|
+
USER_DOCUMENTATION: "https://help.keboola.com",
|
|
129
|
+
COMPONENTS: "https://components.keboola.com",
|
|
130
|
+
DEVELOPERS_DOCUMENTATION: "https://developers.keboola.com",
|
|
131
|
+
ACADEMY: "https://academy.keboola.com",
|
|
132
|
+
SALES_CONTACT_FORM: "https://keboola.com/contact",
|
|
133
|
+
SNOWFLAKE: "https://www.snowflake.com",
|
|
134
|
+
SNOWFLAKE_DOCS: "https://docs.snowflake.com",
|
|
135
|
+
MCP: "https://www.keboola.com/mcp",
|
|
136
|
+
NODE_JS: "https://nodejs.org/en",
|
|
137
|
+
CLAUDE_CONNECTORS: "https://claude.ai/customize/connectors"
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export { STACKS, URLS };
|
|
141
|
+
//# sourceMappingURL=index.js.map
|
|
142
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/constants/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export type Provider = 'aws' | 'azure' | 'gcp';\nexport type Continent = 'us' | 'europe';\n\nexport type KeboolaStack = {\n id: string;\n host: string;\n isSingleTenant?: boolean;\n isTesting?: boolean;\n isPayg?: boolean;\n provider?: Provider;\n continent?: Continent;\n region?: string;\n isCanary?: boolean;\n};\n\nexport const STACKS: Record<string, Readonly<KeboolaStack>> = {\n NORTH_EUROPE_AZURE: {\n id: 'com-keboola-azure-north-europe',\n region: 'north-europe',\n host: 'connection.north-europe.azure.keboola.com',\n provider: 'azure',\n continent: 'europe',\n isPayg: true,\n },\n EU_CENTRAL_1_AWS: {\n id: 'kbc-eu-central-1',\n region: 'eu-central-1',\n host: 'connection.eu-central-1.keboola.com',\n provider: 'aws',\n continent: 'europe',\n },\n US_EAST_1_AWS: {\n id: 'kbc-us-east-1',\n region: 'us-east-1',\n host: 'connection.keboola.com',\n provider: 'aws',\n continent: 'us',\n },\n EUROPE_WEST3_GCP: {\n id: 'com-keboola-gcp-europe-west3',\n region: 'europe-west3',\n host: 'connection.europe-west3.gcp.keboola.com',\n provider: 'gcp',\n continent: 'europe',\n },\n US_EAST_4_GCP: {\n id: 'com-keboola-gcp-us-east4',\n region: 'us-east4',\n host: 'connection.us-east4.gcp.keboola.com',\n provider: 'gcp',\n continent: 'us',\n isPayg: true,\n },\n\n /* PRIVATE SINGLE TENANT STACKS\n ---------------------------- */\n HCI: {\n id: 'cloud-keboola-hci',\n host: 'connection.hci.keboola.cloud',\n isSingleTenant: true,\n },\n CSAS_PROD: {\n id: 'cloud-keboola-cs',\n host: 'connection.cs.keboola.cloud',\n isSingleTenant: true,\n },\n CSAS_TEST: {\n id: 'cloud-keboola-cs-test',\n host: 'connection.cs-test.keboola.cloud',\n isSingleTenant: true,\n },\n INNOGY: {\n id: 'cloud-keboola-innogy-hub',\n host: 'connection.innogy-hub.keboola.cloud',\n isSingleTenant: true,\n },\n GROUPON: {\n id: 'cloud-keboola-groupon',\n host: 'connection.groupon.keboola.cloud',\n isSingleTenant: true,\n },\n CREDIT_INFO: {\n id: 'cloud-keboola-creditinfo',\n host: 'connection.creditinfo.keboola.cloud',\n isSingleTenant: true,\n },\n COATES: {\n id: 'cloud-keboola-coates',\n host: 'connection.coates.keboola.cloud',\n isSingleTenant: true,\n },\n SLSP: {\n id: 'cloud-keboola-slsp',\n host: 'connection.slsp.keboola.cloud',\n isSingleTenant: true,\n },\n HCKZ: {\n id: 'cloud-keboola-hckz',\n host: 'connection.hckz.keboola.cloud',\n isSingleTenant: true,\n },\n PASHA: {\n id: 'cloud-keboola-pasha',\n host: 'connection.pasha.keboola.cloud',\n isSingleTenant: true,\n },\n RBI: {\n id: 'cloud-keboola-rbi',\n host: 'connection.rbi.keboola.cloud',\n isSingleTenant: true,\n },\n NAH: {\n id: 'cloud-keboola-nah',\n host: 'connection.nah.keboola.cloud',\n isSingleTenant: true,\n provider: 'azure',\n continent: 'us',\n },\n\n /* DEV STACKS\n ---------------------------- */\n DEV_US_CENTRAL_1_GCP: {\n id: 'dev-keboola-gcp-us-central1',\n host: 'connection.us-central1.gcp.keboola.dev',\n isTesting: true,\n },\n DEV_EU_WEST_1_AWS: {\n id: 'dev-keboola-aws-eu-west-1',\n host: 'connection.eu-west-1.aws.keboola.dev',\n isTesting: true,\n },\n DEV_US_EAST_2_AZURE: {\n id: 'kbc-testing-azure-east-us-2',\n host: 'connection.east-us-2.azure.keboola-testing.com',\n isTesting: true,\n },\n DEV_KEBOOLA_CANARY_ORION: {\n id: 'dev-keboola-canary-orion',\n host: 'connection.canary-orion.keboola.dev',\n isCanary: true,\n },\n};\n\nexport const URLS = {\n USER_DOCUMENTATION: 'https://help.keboola.com',\n COMPONENTS: 'https://components.keboola.com',\n DEVELOPERS_DOCUMENTATION: 'https://developers.keboola.com',\n ACADEMY: 'https://academy.keboola.com',\n SALES_CONTACT_FORM: 'https://keboola.com/contact',\n SNOWFLAKE: 'https://www.snowflake.com',\n SNOWFLAKE_DOCS: 'https://docs.snowflake.com',\n MCP: 'https://www.keboola.com/mcp',\n NODE_JS: 'https://nodejs.org/en',\n CLAUDE_CONNECTORS: 'https://claude.ai/customize/connectors',\n} as const;\n"]}
|
|
@@ -30,6 +30,11 @@ var z__namespace = /*#__PURE__*/_interopNamespace(z);
|
|
|
30
30
|
var dayjs__default = /*#__PURE__*/_interopDefault(dayjs);
|
|
31
31
|
var utc__default = /*#__PURE__*/_interopDefault(utc);
|
|
32
32
|
|
|
33
|
+
// src/constants.ts
|
|
34
|
+
var HttpStatus = {
|
|
35
|
+
NO_CONTENT: 204,
|
|
36
|
+
BAD_REQUEST: 400};
|
|
37
|
+
|
|
33
38
|
// src/errors/ApiError.ts
|
|
34
39
|
var ApiError = class extends Error {
|
|
35
40
|
response;
|
|
@@ -57,7 +62,7 @@ function removeUndefined(obj) {
|
|
|
57
62
|
return objCopy;
|
|
58
63
|
}
|
|
59
64
|
var parseData = async (response) => {
|
|
60
|
-
if (response.status ===
|
|
65
|
+
if (response.status === HttpStatus.NO_CONTENT) return null;
|
|
61
66
|
const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);
|
|
62
67
|
if (contentType && contentType == HttpContentType.JSON) {
|
|
63
68
|
return response.json();
|
|
@@ -341,7 +346,7 @@ var createDataScienceClient = ({ baseUrl, middlewares }) => {
|
|
|
341
346
|
nextLogTimestamp
|
|
342
347
|
};
|
|
343
348
|
} catch (error) {
|
|
344
|
-
if (isApiError(error) && error.response.status ===
|
|
349
|
+
if (isApiError(error) && error.response.status === HttpStatus.BAD_REQUEST && TailError.safeParse(error.data).data?.context?.code === "apps.appNotRunning") {
|
|
345
350
|
return { entries: [], nextLogTimestamp: null };
|
|
346
351
|
}
|
|
347
352
|
throw error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors/ApiError.ts","../../src/fetchClient/createFetchClient/utils.ts","../../src/fetchClient/createFetchClient/createFetchClient.ts","../../src/fetchClient/createOpenapiFetchClient.ts","../../src/clients/dataScience/schemas.ts","../../src/clients/dataScience/utils.ts","../../src/clients/dataScience/dataScienceClient.ts"],"names":["qs","z","dayjs","utc"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAClC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EAEA,WAAA,CAAY,EAAE,QAAA,EAAU,OAAA,EAAS,MAAK,EAAgB;AACpD,IAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACzB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AACF,CAAA;ACRO,IAAM,UAAA,GAAa;AAAA,EACxB,YAAA,EAAc,cAAA;AAAA,EACd,mBAAA,EAAqB;AACvB,CAAA;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC7B,IAAA,EAAM,kBAIR,CAAA;AAEO,IAAM,qBAAA,GAA0C,CAAC,EAAE,QAAA,OACxD,QAAA,CAAS,MAAA,IAAU,GAAA,IAAO,QAAA,CAAS,MAAA,IAAU,GAAA;AAE/C,SAAS,gBAAgB,GAAA,EAA6B;AACpD,EAAA,MAAM,OAAA,GAAU,EAAE,GAAG,GAAA,EAAI;AACzB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,IAAI,KAAA,IAAS,IAAA,EAAM,OAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,SAAA,GAAY,OAAO,QAAA,KAAuB;AAErD,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK,OAAO,IAAA;AAGpC,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,WAAW,YAAY,CAAA;AAChE,EAAA,IAAI,WAAA,IAAe,WAAA,IAAe,eAAA,CAAgB,IAAA,EAAM;AACtD,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAIA,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAGA,IAAM,gBAAA,GAAmB,CAAC,WAAA,KAAyC;AACjE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG,OAAO,WAAA;AACvC,EAAA,IAAI,WAAA,YAAuB,SAAS,OAAO,WAAA;AAC3C,EAAA,IAAI,WAAA,IAAe,MAAM,OAAO,WAAA;AAEhC,EAAA,OAAO,gBAAgB,WAAW,CAAA;AACpC,CAAA;AAEA,IAAM,aAAA,GAAgB,CACpB,YAAA,EACA,YAAA,KACG;AACH,EAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAAQ,gBAAA,CAAiB,YAAY,CAAC,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAAQ,gBAAA,CAAiB,YAAY,CAAC,CAAA;AAE3D,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC/B,IAAA,QAAA,CAAS,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,EACzB,CAAC,CAAA;AAED,EAAA,OAAO,QAAA;AACT,CAAA;AAEO,IAAM,UAAA,GAAa,CAAC,IAAA,EAAc,SAAA,GAAuB,EAAC,KAC/D,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,CAAC,CAAA,EAAG,GAAA,KAAQ;AACtC,EAAA,IAAI,EAAE,GAAA,IAAO,SAAA,CAAA;AACX,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,GAAG,CAAA,0BAAA,EAA6B,IAAI,CAAA,CAAA,CAAG,CAAA;AAE5E,EAAA,OAAO,kBAAA,CAAmB,SAAA,CAAU,GAAG,CAAE,CAAA;AAC3C,CAAC,CAAA;AAEI,IAAM,YAAA,GAAe,CAC1B,KAAA,EACA,OAAA,GAAkD,EAAC,KAChD;AACH,EAAA,OAAOA,mBAAA,CAAG,UAAU,KAAA,EAAO;AAAA,IACzB,gBAAA,EAAkB,IAAA;AAAA,IAClB,SAAA,EAAW,IAAA;AAAA,IACX,GAAG;AAAA,GACJ,CAAA;AACH,CAAA;AAEO,IAAM,UAAA,GAAa,CAAC,IAAA,EAAiB,OAAA,KAAqB;AAC/D,EAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,IAAA;AACzB,EAAA,IAAI,IAAA,YAAgB,UAAU,OAAO,IAAA;AACrC,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,IAAA;AAErC,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACzC,EAAA,MAAM,UAAA,GAAa,aAAA,KAAkB,IAAA,GAAO,IAAA,GAAO,aAAA;AACnD,EAAA,IAAI,YAAY,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,YAAA,EAAc,gBAAgB,IAAI,CAAA;AAEzE,EAAA,OAAO,UAAA;AACT,CAAA;AAEO,IAAM,6BAAA,GAAgC,CAAC,kBAAA,KAAuC;AAEnF,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAM,SAAA,GAAY,kBAAA,EAAoB,KAAA,CAAM,8BAA8B,CAAA;AAC1E,IAAA,OAAQ,SAAA,GAAY,CAAC,CAAA,EAAG,WAAA,EAAY,IAAK,SAAA;AAAA,EAC3C,CAAA,GAAG;AAGH,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,MAAM,aAAA,GAAgB,kBAAA,EAAoB,KAAA,CAAM,qBAAqB,CAAA;AACrE,IAAA,IAAI,aAAA,EAAe,OAAO,aAAA,CAAc,CAAC,CAAA;AAGzC,IAAA,MAAM,oBAAA,GAAuB,kBAAA,EAAoB,KAAA,CAAM,iCAAiC,CAAA;AACxF,IAAA,IAAI,uBAAuB,CAAC,CAAA,SAAU,kBAAA,CAAmB,oBAAA,CAAqB,CAAC,CAAC,CAAA;AAGhF,IAAA,MAAM,qBAAA,GAAwB,kBAAA,EAAoB,KAAA,CAAM,mBAAmB,CAAA;AAC3E,IAAA,OAAO,qBAAA,GAAwB,CAAC,CAAA,IAAK,IAAA;AAAA,EACvC,CAAA,GAAG;AAGH,EAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAC1B,CAAA;AAEO,IAAM,qBAA2C,CAAC;AAAA,EACvD,GAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAU,EAAC;AAAA,EACX;AACF,CAAA,KAAM;AACJ,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,gBAAgB,iBAAA,GAAoB,qBAAA;AAAA,IACpC,OAAA,EAAS,cAAA;AAAA,IACT,GAAG;AAAA,GACL,GAAI,cAAA;AACJ,EAAA,MAAM,EAAE,cAAA,EAAgB,gBAAA,EAAkB,SAAS,eAAA,EAAiB,GAAG,aAAY,GAAI,OAAA;AAEvF,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,cAAA,EAAgB,eAAe,CAAA;AAC7D,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,GAAA,EAAK,MAAA,CAAO,IAAI,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,aAAa,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG,EAAE,WAAA,EAAa,gBAAA,EAAkB,CAAA;AACjF,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;AAE5C,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,OAAA,GAAU,IAAI,CAAA;AAC1C,EAAA,WAAA,CAAY,MAAA,GAAS,MAAA;AAErB,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,WAAA,EAAa;AAAA,IACvC,GAAG,kBAAA;AAAA,IACH,GAAG,WAAA;AAAA,IACH,OAAA;AAAA,IACA,MAAA,EAAQ,OAAO,WAAA,EAAY;AAAA,IAC3B;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,cAAA,IAAkB,iBAAA,EAAkB;AACxE,CAAA;;;ACjJO,IAAM,UAAA,GAAa,CAAC,KAAA,KAAsC,KAAA,YAAiB,QAAA;AAQlF,IAAM,kBACJ,CAAC,OAAA,KACD,OAAO,EAAE,OAAA,EAAS,gBAAe,KAAM;AACrC,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,OAAO,CAAA;AACtC,EAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,QAAQ,CAAA;AAErC,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,OAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,WAAA,GAAc,eAAe,WAAW,CAAA;AAC9C,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG,MAAM,WAAA;AACnC,EAAA,IAAI,CAAC,WAAA,EAAa,MAAM,IAAI,SAAS,WAAW,CAAA;AAEhD,EAAA,OAAO,WAAA;AACT,CAAA;AAEK,IAAM,oBAAoB,CAAC;AAAA,EAChC,cAAc,EAAC;AAAA,EACf,GAAG;AACL,CAAA,KAAgC;AAC9B,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,cAAA,CAAe,OAAA,IAAW,KAAK,CAAA;AACjE,EAAA,MAAM,uBAAuB,WAAA,CAAY,WAAA;AAAA,IACvC,CAAC,IAAA,EAAM,UAAA,KAAe,UAAA,CAAW,IAAI,CAAA;AAAA,IACrC;AAAA,GACF;AAEA,EAAA,MAAM,iBAAA,GACJ,CAAC,MAAA,KACD,OAAO,KAAa,MAAA,EAAyB,OAAA,GAA8B,EAAC,KAAM;AAChF,IAAA,MAAM,UAAU,kBAAA,CAAmB;AAAA,MACjC,GAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,iBAAA,GAAoB,OAAA,EAAS,WAAA,IAAe,EAAC;AAEnD,IAAA,OAAO,iBAAA,CAAkB,WAAA;AAAA,MACvB,CAAC,IAAA,EAAM,UAAA,KAAe,UAAA,CAAW,IAAI,CAAA;AAAA,MACrC;AAAA,MACA,OAAO,CAAA;AAAA,EACX,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,kBAAkB,KAAK,CAAA;AAAA,IAC5B,IAAA,EAAM,kBAAkB,MAAM,CAAA;AAAA,IAC9B,GAAA,EAAK,kBAAkB,KAAK,CAAA;AAAA,IAC5B,KAAA,EAAO,kBAAkB,OAAO,CAAA;AAAA,IAChC,MAAA,EAAQ,kBAAkB,QAAQ;AAAA,GACpC;AACF,CAAA;;;ACtCO,IAAM,wBAAA,GAA2B,CACtC,cAAA,KACG,iBAAA,CAAkB,cAAc,CAAA;ACvC9B,IAAM,YAAcC,YAAA,CAAA,MAAA,CAAO;AAAA,EAChC,SAAWA,YAAA,CAAA,MAAA,CAAO;AAAA,IAChB,MAAQA,YAAA,CAAA,MAAA;AAAO,GAChB;AACH,CAAC,CAAA;ACDDC,sBAAA,CAAM,OAAOC,oBAAG,CAAA;AAOhB,IAAM,mBAAA,GAAsB,gDAAA;AAC5B,IAAM,2BAAA,GAA8B,sDAAA;AAEpC,IAAM,aAAA,GAAgB,CAAC,IAAA,KAAkC;AACvD,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AAElC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,MAAM,OAAO,IAAA;AAE1D,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,MAAA;AAE/B,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,OAAO,OAAA,KAAY,UAAU,OAAO,IAAA;AAEzE,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAA2B;AACrD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,2BAA2B,CAAA;AACpD,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,EAAE,SAAA,EAAW,KAAA,CAAM,CAAC,CAAA,EAAI,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAA,EAAE;AAAA,EACtE;AACA,EAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAC1C,CAAA;AAEO,IAAM,eAAe,CAAC,IAAA,KAC3B,cAAc,IAAI,CAAA,IAAK,mBAAmB,IAAI,CAAA;AAEhD,IAAM,oBAAA,GAAuB,CAAC,GAAA,KAAkD;AAC9E,EAAA,IAAI,OAAO,GAAA,CAAI,OAAA,KAAY,QAAA,EAAU,OAAO,IAAA;AAC5C,EAAA,OAAO;AAAA,IACL,WAAW,OAAO,GAAA,CAAI,SAAA,KAAc,QAAA,GAAW,IAAI,SAAA,GAAY,IAAA;AAAA,IAC/D,SAAS,GAAA,CAAI;AAAA,GACf;AACF,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAE9D,IAAM,aAAA,GAAgB,CAAC,GAAA,KAA6B;AACzD,EAAA,IAAI,QAAQ,IAAA,IAAQ,GAAA,KAAQ,UAAa,GAAA,KAAQ,EAAA,SAAW,EAAC;AAE7D,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC3B,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,IAAA,KAAS,EAAA,GAAK,EAAC,GAAI,CAAC,YAAA,CAAa,IAAI,CAAC,CAAA;AAC3E,MAAA,IAAI,aAAA,CAAc,IAAI,CAAA,EAAG;AACvB,QAAA,MAAM,KAAA,GAAQ,qBAAqB,IAAI,CAAA;AACvC,QAAA,OAAO,KAAA,GAAQ,CAAC,KAAK,CAAA,GAAI,EAAC;AAAA,MAC5B;AACA,MAAA,OAAO,EAAC;AAAA,IACV,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,aAAA,CAAc,GAAG,CAAA,EAAG;AACtB,IAAA,MAAM,KAAA,GAAQ,qBAAqB,GAAG,CAAA;AACtC,IAAA,OAAO,KAAA,GAAQ,CAAC,KAAK,CAAA,GAAI,EAAC;AAAA,EAC5B;AAEA,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,EAAC;AAErC,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC5B,EAAA,MAAM,UAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,SAAS,EAAA,EAAI;AACjB,IAAA,OAAA,CAAQ,IAAA,CAAK,YAAA,CAAa,IAAI,CAAC,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,qBAAA,GAAwB,CAAC,IAAA,KAAkB;AACtD,EAAA,MAAM,OAAA,GAAU,cAAc,IAAI,CAAA;AAClC,EAAA,KAAA,IAAS,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC5C,IAAA,MAAM,KAAA,GAAQ,QAAQ,CAAC,CAAA;AACvB,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAI,KAAA,CAAM,SAAA,EAAW,OAAO,KAAA,CAAM,SAAA;AAGlC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,mBAAmB,CAAA;AACrD,IAAA,IAAI,KAAA,EAAO,OAAO,KAAA,CAAM,CAAC,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEO,IAAM,yBAAA,GAA4B,CAAC,SAAA,KAA6B;AACrE,EAAA,IAAI,SAAA,KAAc,MAAM,OAAO,IAAA;AAC/B,EAAA,OAAOD,sBAAA,CAAM,SAAS,CAAA,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA,CAAE,GAAA,EAAI,CAAE,MAAA,EAAO;AAC9D,CAAA;AAEO,IAAM,aAAA,GAAgB,CAAC,MAAA,KAAsB;AAClD,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,KAAA,EAAO,MAAA,CAAO,KAAA,KAAU,MAAA,CAAO,YAAY,UAAA,GAAa,SAAA;AAAA;AAAA,GAC1D;AACF,CAAA;;;AChFO,IAAM,uBAAA,GAA0B,CAAC,EAAE,OAAA,EAAS,aAAY,KAAyB;AACtF,EAAA,MAAM,SAAS,wBAAA,CAAgC;AAAA,IAC7C,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,OACjB,KAAA,EACA,KAAA,EACA,MAAA,KACG;AACH,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,IAAI,oBAAA,EAAsB,EAAE,IAAA,EAAM,EAAE,OAAM,EAAG,KAAA,EAAM,EAAG,EAAE,QAAQ,CAAA;AAE9F,IAAA,OAAO,IAAA,CAAK,IAAI,aAAa,CAAA;AAAA,EAC/B,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,OAChB,KAAA,EACA,KAAA,EACA,MAAA,KACG;AACH,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,GAAA;AAAA,MAC5B,4BAAA;AAAA,MACA,EAAE,IAAA,EAAM,EAAE,KAAA,EAAO,OAAM,EAAE;AAAA,MACzB,EAAE,MAAA;AAAO,KACX;AAEA,IAAA,OAAO,cAAc,IAAI,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,OACzB,EAAA,EACA,MAAA,KACG;AACH,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,MAAM,MAAA,CAAO,GAAA;AAAA,MACtC,6BAAA;AAAA,MACA,EAAE,IAAA,EAAM,EAAE,KAAA,EAAO,IAAG,EAAE;AAAA,MACtB,EAAE,MAAA;AAAO,KACX;AAEA,IAAA,MAAM,kBAAA,GAAqB,6BAAA;AAAA,MACzB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,mBAAmB;AAAA,KACrD;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU,oBAAoB,QAAA,IAAY;AAAA,KAC5C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,OACrB,EAAA,EACA,EAAE,OAAO,MAAA,EAAO,GAA+D,EAAC,KAC7E;AACH,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,GAAA;AAAA,QAC5B,yBAAA;AAAA,QACA;AAAA,UACE,KAAA;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,KAAA,EAAO;AAAA;AACT,SACF;AAAA,QACA;AAAA,UACE;AAAA;AACF,OACF;AAEA,MAAA,MAAM,IAAA,GAAO,IAAA,KAAS,EAAA,GAAK,IAAA,GAAO,IAAA;AAClC,MAAA,MAAM,gBAAA,GAAmB,sBAAsB,IAAI,CAAA;AACnD,MAAA,MAAM,gBAAA,GAAmB,0BAA0B,gBAAgB,CAAA;AAEnE,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,cAAc,IAAI,CAAA;AAAA,QAC3B;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IACE,UAAA,CAAW,KAAK,CAAA,IAChB,KAAA,CAAM,SAAS,MAAA,KAAW,GAAA,IAC1B,SAAA,CAAU,SAAA,CAAU,MAAM,IAAI,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,SAAS,oBAAA,EACxD;AACA,QAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAG,kBAAkB,IAAA,EAAK;AAAA,MAC/C;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,KAAA,EAAqB,MAAA,KAAyB;AACnE,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,GAAA,CAAI,OAAA,EAAS,EAAE,KAAA,EAAM,EAAG,EAAE,MAAA,EAAQ,CAAA;AAEhE,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,EAAgC,MAAA,KAAyB;AAC7E,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,OAAO,GAAA,CAAI,eAAA,EAAiB,EAAE,IAAA,EAAM,EAAE,KAAA,EAAM,EAAE,EAAG,EAAE,QAAQ,CAAA;AAElF,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,OAAO,IAAA,EAAyB,MAAA,KAAyB;AACzE,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,EAAE,IAAA,EAAK,EAAG,EAAE,MAAA,EAAQ,CAAA;AAEhE,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,OACf,KAAA,EACA,IAAA,EACA,MAAA,KACG;AACH,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,KAAA;AAAA,MAC5B,eAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM,EAAE,KAAA,EAAa;AAAA,QACrB;AAAA,OACF;AAAA,MACA,EAAE,MAAA;AAAO,KACX;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,OAAO,KAAA,EAAmC,MAAA,KAAyB;AACnF,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,eAAA,EAAiB,EAAE,IAAA,EAAM,EAAE,KAAA,EAAM,EAAE,EAAG,EAAE,MAAA,EAAQ,CAAA;AAAA,EACvE,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,OAAO,KAAA,EAAwC,MAAA,KAAyB;AAC7F,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,OAAO,GAAA,CAAI,wBAAA,EAA0B,EAAE,IAAA,EAAM,EAAE,KAAA,EAAM,EAAE,EAAG,EAAE,QAAQ,CAAA;AAE3F,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,OACvB,KAAA,EACA,MAAA,KACG;AACH,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,IAAA;AAAA,MAC5B,8BAAA;AAAA,MACA,EAAE,IAAA,EAAM,EAAE,KAAA,EAAM,EAAE;AAAA,MAClB,EAAE,MAAA;AAAO,KACX;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,MAAA,KAAyB;AAClD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,GAAA,CAAI,WAAA,EAAa,EAAC,EAAG,EAAE,MAAA,EAAQ,CAAA;AAE7D,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,OAAO,KAAA,EAAgC,MAAA,KAAyB;AACjF,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,OAAO,GAAA,CAAI,oBAAA,EAAsB,EAAE,IAAA,EAAM,EAAE,KAAA,EAAM,EAAE,EAAG,EAAE,QAAQ,CAAA;AAEvF,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,SAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF","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 {\n type ApiResponse,\n createFetchClient,\n type CreateFetchClientOptions,\n type FetchClientOptions,\n type HttpMethod,\n} from './createFetchClient';\nimport type { OpenapiParametersType, OpenapiReturnType } from './types';\n\ntype OpenapiPaths<Paths> = {\n [P in keyof Paths]: {\n [M in HttpMethod]?: unknown;\n };\n};\n\ntype PathsWithMethod<Paths extends OpenapiPaths<Paths>, PathnameMethod extends HttpMethod> = {\n [Pathname in keyof Paths]: Paths[Pathname] extends {\n [K in PathnameMethod]: any;\n }\n ? Pathname\n : never;\n}[keyof Paths];\n\ntype FetchMethod<Paths extends OpenapiPaths<Paths>, Method extends HttpMethod> = <\n Path extends PathsWithMethod<Paths, Method>,\n>(\n url: Path,\n params: OpenapiParametersType<Paths[Path][Method]>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<OpenapiReturnType<Paths[Path][Method]>>>;\n\ntype FetchClient<Paths extends OpenapiPaths<Paths>> = {\n get: FetchMethod<Paths, 'get'>;\n post: FetchMethod<Paths, 'post'>;\n put: FetchMethod<Paths, 'put'>;\n patch: FetchMethod<Paths, 'patch'>;\n delete: FetchMethod<Paths, 'delete'>;\n};\n\nexport const createOpenapiFetchClient = <Paths extends OpenapiPaths<Paths>>(\n defaultOptions: CreateFetchClientOptions,\n) => createFetchClient(defaultOptions) as FetchClient<Paths>;\n","import * as z from 'zod';\n\nexport const TailError = z.object({\n context: z.object({\n code: z.string(),\n }),\n});\n","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport type { RawAppRun } from './types';\n\ndayjs.extend(utc);\n\nexport type LogEntry = {\n timestamp: string | null;\n message: string;\n};\n\nconst ISO_TIMESTAMP_REGEX = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z/;\nconst LEADING_ISO_TIMESTAMP_REGEX = /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z)\\s?/;\n\nconst tryParseJsonl = (line: string): LogEntry | null => {\n if (!line.startsWith('{')) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return null;\n }\n\n if (typeof parsed !== 'object' || parsed === null) return null;\n\n const record = parsed as Record<string, unknown>;\n const { timestamp, message } = record;\n\n if (typeof timestamp !== 'string' || typeof message !== 'string') return null;\n\n return {\n timestamp,\n message,\n };\n};\n\nconst parsePlainTextLine = (line: string): LogEntry => {\n const match = line.match(LEADING_ISO_TIMESTAMP_REGEX);\n if (match) {\n return { timestamp: match[1]!, message: line.slice(match[0].length) };\n }\n return { timestamp: null, message: line };\n};\n\nexport const parseLogLine = (line: string): LogEntry =>\n tryParseJsonl(line) ?? parsePlainTextLine(line);\n\nconst toLogEntryFromObject = (raw: Record<string, unknown>): LogEntry | null => {\n if (typeof raw.message !== 'string') return null;\n return {\n timestamp: typeof raw.timestamp === 'string' ? raw.timestamp : null,\n message: raw.message,\n };\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const parseLogLines = (raw: unknown): LogEntry[] => {\n if (raw === null || raw === undefined || raw === '') return [];\n\n if (Array.isArray(raw)) {\n return raw.flatMap((item) => {\n if (typeof item === 'string') return item === '' ? [] : [parseLogLine(item)];\n if (isPlainObject(item)) {\n const entry = toLogEntryFromObject(item);\n return entry ? [entry] : [];\n }\n return [];\n });\n }\n\n if (isPlainObject(raw)) {\n const entry = toLogEntryFromObject(raw);\n return entry ? [entry] : [];\n }\n\n if (typeof raw !== 'string') return [];\n\n const lines = raw.split('\\n');\n const entries: LogEntry[] = [];\n for (const line of lines) {\n if (line === '') continue;\n entries.push(parseLogLine(line));\n }\n return entries;\n};\n\nexport const parseLastLogTimestamp = (logs: unknown) => {\n const entries = parseLogLines(logs);\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n if (!entry) continue;\n if (entry.timestamp) return entry.timestamp;\n\n // A plain-text line may carry a timestamp embedded mid-line (legacy format).\n const match = entry.message.match(ISO_TIMESTAMP_REGEX);\n if (match) return match[0];\n }\n return null;\n};\n\nexport const calculateNextLogTimestamp = (timestamp: string | null) => {\n if (timestamp === null) return null;\n return dayjs(timestamp).utc().add(1, 'second').utc().format();\n};\n\nexport const prepareAppRun = (appRun: RawAppRun) => {\n return {\n ...appRun,\n state: appRun.state ?? (appRun.stoppedAt ? 'finished' : 'running'), // fallback state for historic non migrated runs\n };\n};\n","import {\n createOpenapiFetchClient,\n HttpHeader,\n isApiError,\n parseContentDispositionHeader,\n} from '../../fetchClient';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport { TailError } from './schemas';\nimport type {\n CreateDataAppBody,\n DeleteDataAppPath,\n GetAppsQuery,\n GetDataAppLogsDownloadPath,\n GetDataAppLogsTailPath,\n GetDataAppLogsTailQuery,\n GetDataAppPasswordPath,\n GetDataAppPath,\n GetDataAppRunPath,\n GetDataAppRunsPath,\n GetDataAppRunsQuery,\n GetSandboxPath,\n PatchDataAppBody,\n PatchDataAppPath,\n ResetDataAppPasswordPath,\n} from './types';\nimport {\n calculateNextLogTimestamp,\n parseLastLogTimestamp,\n parseLogLines,\n prepareAppRun,\n} from './utils';\n\nexport const createDataScienceClient = ({ baseUrl, middlewares }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n });\n\n const getAppRuns = async (\n appId: GetDataAppRunsPath['appId'],\n query?: GetDataAppRunsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/apps/{appId}/runs', { path: { appId }, query }, { signal });\n\n return data.map(prepareAppRun);\n };\n\n const getAppRun = async (\n appId: GetDataAppRunPath['appId'],\n runId: GetDataAppRunPath['runId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/apps/{appId}/runs/{runId}',\n { path: { appId, runId } },\n { signal },\n );\n\n return prepareAppRun(data);\n };\n\n const getAppLogsDownload = async (\n id: GetDataAppLogsDownloadPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data, response } = await client.get(\n '/apps/{appId}/logs/download',\n { path: { appId: id } },\n { signal },\n );\n\n const contentDisposition = parseContentDispositionHeader(\n response.headers.get(HttpHeader.CONTENT_DISPOSITION),\n );\n\n return {\n logs: data,\n fileName: contentDisposition?.filename ?? 'logs.txt',\n };\n };\n\n const getAppLogsTail = async (\n id: GetDataAppLogsTailPath['appId'],\n { query, signal }: { query?: GetDataAppLogsTailQuery; signal?: AbortSignal } = {},\n ) => {\n try {\n const { data } = await client.get(\n '/apps/{appId}/logs/tail',\n {\n query,\n path: {\n appId: id,\n },\n },\n {\n signal,\n },\n );\n\n const logs = data === '' ? null : data;\n const lastLogTimestamp = parseLastLogTimestamp(logs);\n const nextLogTimestamp = calculateNextLogTimestamp(lastLogTimestamp);\n\n return {\n entries: parseLogLines(logs),\n nextLogTimestamp: nextLogTimestamp,\n };\n } catch (error) {\n if (\n isApiError(error) &&\n error.response.status === 400 &&\n TailError.safeParse(error.data).data?.context?.code === 'apps.appNotRunning'\n ) {\n return { entries: [], nextLogTimestamp: null };\n }\n throw error;\n }\n };\n\n const getApps = async (query: GetAppsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/apps', { query }, { signal });\n\n return data;\n };\n\n const getApp = async (appId: GetDataAppPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const createApp = async (body: CreateDataAppBody, signal?: AbortSignal) => {\n const { data } = await client.post('/apps', { body }, { signal });\n\n return data;\n };\n\n const patchApp = async (\n appId: PatchDataAppPath['appId'],\n body: PatchDataAppBody,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.patch(\n '/apps/{appId}',\n {\n path: { appId: appId },\n body: body,\n },\n { signal },\n );\n return data;\n };\n\n const deleteApp = async (appId: DeleteDataAppPath['appId'], signal?: AbortSignal) => {\n return client.delete('/apps/{appId}', { path: { appId } }, { signal });\n };\n\n const getAppPassword = async (appId: GetDataAppPasswordPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}/password', { path: { appId } }, { signal });\n\n return data;\n };\n\n const resetAppPassword = async (\n appId: ResetDataAppPasswordPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/reset-password',\n { path: { appId } },\n { signal },\n );\n\n return data;\n };\n\n const getRuntimes = async (signal?: AbortSignal) => {\n const { data } = await client.get('/runtimes', {}, { signal });\n\n return data;\n };\n\n const getSandbox = async (appId: GetSandboxPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/sandboxes/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n return {\n getAppRuns,\n getAppRun,\n getAppLogsDownload,\n getAppLogsTail,\n getApps,\n getApp,\n createApp,\n patchApp,\n deleteApp,\n getAppPassword,\n resetAppPassword,\n getRuntimes,\n getSandbox,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/constants.ts","../../src/errors/ApiError.ts","../../src/fetchClient/createFetchClient/utils.ts","../../src/fetchClient/createFetchClient/createFetchClient.ts","../../src/fetchClient/createOpenapiFetchClient.ts","../../src/clients/dataScience/schemas.ts","../../src/clients/dataScience/utils.ts","../../src/clients/dataScience/dataScienceClient.ts"],"names":["qs","z","dayjs","utc"],"mappings":"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","file":"index.cjs","sourcesContent":["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 { 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 { 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 {\n type ApiResponse,\n createFetchClient,\n type CreateFetchClientOptions,\n type FetchClientOptions,\n type HttpMethod,\n} from './createFetchClient';\nimport type { OpenapiParametersType, OpenapiReturnType } from './types';\n\ntype OpenapiPaths<Paths> = {\n [P in keyof Paths]: {\n [M in HttpMethod]?: unknown;\n };\n};\n\ntype PathsWithMethod<Paths extends OpenapiPaths<Paths>, PathnameMethod extends HttpMethod> = {\n [Pathname in keyof Paths]: Paths[Pathname] extends {\n [K in PathnameMethod]: any;\n }\n ? Pathname\n : never;\n}[keyof Paths];\n\ntype FetchMethod<Paths extends OpenapiPaths<Paths>, Method extends HttpMethod> = <\n Path extends PathsWithMethod<Paths, Method>,\n>(\n url: Path,\n params: OpenapiParametersType<Paths[Path][Method]>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<OpenapiReturnType<Paths[Path][Method]>>>;\n\ntype FetchClient<Paths extends OpenapiPaths<Paths>> = {\n get: FetchMethod<Paths, 'get'>;\n post: FetchMethod<Paths, 'post'>;\n put: FetchMethod<Paths, 'put'>;\n patch: FetchMethod<Paths, 'patch'>;\n delete: FetchMethod<Paths, 'delete'>;\n};\n\nexport const createOpenapiFetchClient = <Paths extends OpenapiPaths<Paths>>(\n defaultOptions: CreateFetchClientOptions,\n) => createFetchClient(defaultOptions) as FetchClient<Paths>;\n","import * as z from 'zod';\n\nexport const TailError = z.object({\n context: z.object({\n code: z.string(),\n }),\n});\n","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport type { RawAppRun } from './types';\n\ndayjs.extend(utc);\n\nexport type LogEntry = {\n timestamp: string | null;\n message: string;\n};\n\nconst ISO_TIMESTAMP_REGEX = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z/;\nconst LEADING_ISO_TIMESTAMP_REGEX = /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z)\\s?/;\n\nconst tryParseJsonl = (line: string): LogEntry | null => {\n if (!line.startsWith('{')) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return null;\n }\n\n if (typeof parsed !== 'object' || parsed === null) return null;\n\n const record = parsed as Record<string, unknown>;\n const { timestamp, message } = record;\n\n if (typeof timestamp !== 'string' || typeof message !== 'string') return null;\n\n return {\n timestamp,\n message,\n };\n};\n\nconst parsePlainTextLine = (line: string): LogEntry => {\n const match = line.match(LEADING_ISO_TIMESTAMP_REGEX);\n if (match) {\n return { timestamp: match[1]!, message: line.slice(match[0].length) };\n }\n return { timestamp: null, message: line };\n};\n\nexport const parseLogLine = (line: string): LogEntry =>\n tryParseJsonl(line) ?? parsePlainTextLine(line);\n\nconst toLogEntryFromObject = (raw: Record<string, unknown>): LogEntry | null => {\n if (typeof raw.message !== 'string') return null;\n return {\n timestamp: typeof raw.timestamp === 'string' ? raw.timestamp : null,\n message: raw.message,\n };\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const parseLogLines = (raw: unknown): LogEntry[] => {\n if (raw === null || raw === undefined || raw === '') return [];\n\n if (Array.isArray(raw)) {\n return raw.flatMap((item) => {\n if (typeof item === 'string') return item === '' ? [] : [parseLogLine(item)];\n if (isPlainObject(item)) {\n const entry = toLogEntryFromObject(item);\n return entry ? [entry] : [];\n }\n return [];\n });\n }\n\n if (isPlainObject(raw)) {\n const entry = toLogEntryFromObject(raw);\n return entry ? [entry] : [];\n }\n\n if (typeof raw !== 'string') return [];\n\n const lines = raw.split('\\n');\n const entries: LogEntry[] = [];\n for (const line of lines) {\n if (line === '') continue;\n entries.push(parseLogLine(line));\n }\n return entries;\n};\n\nexport const parseLastLogTimestamp = (logs: unknown) => {\n const entries = parseLogLines(logs);\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n if (!entry) continue;\n if (entry.timestamp) return entry.timestamp;\n\n // A plain-text line may carry a timestamp embedded mid-line (legacy format).\n const match = entry.message.match(ISO_TIMESTAMP_REGEX);\n if (match) return match[0];\n }\n return null;\n};\n\nexport const calculateNextLogTimestamp = (timestamp: string | null) => {\n if (timestamp === null) return null;\n return dayjs(timestamp).utc().add(1, 'second').utc().format();\n};\n\nexport const prepareAppRun = (appRun: RawAppRun) => {\n return {\n ...appRun,\n state: appRun.state ?? (appRun.stoppedAt ? 'finished' : 'running'), // fallback state for historic non migrated runs\n };\n};\n","import { HttpStatus } from '../../constants';\nimport {\n createOpenapiFetchClient,\n HttpHeader,\n isApiError,\n parseContentDispositionHeader,\n} from '../../fetchClient';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport { TailError } from './schemas';\nimport type {\n CreateDataAppBody,\n DeleteDataAppPath,\n GetAppsQuery,\n GetDataAppLogsDownloadPath,\n GetDataAppLogsTailPath,\n GetDataAppLogsTailQuery,\n GetDataAppPasswordPath,\n GetDataAppPath,\n GetDataAppRunPath,\n GetDataAppRunsPath,\n GetDataAppRunsQuery,\n GetSandboxPath,\n PatchDataAppBody,\n PatchDataAppPath,\n ResetDataAppPasswordPath,\n} from './types';\nimport {\n calculateNextLogTimestamp,\n parseLastLogTimestamp,\n parseLogLines,\n prepareAppRun,\n} from './utils';\n\nexport const createDataScienceClient = ({ baseUrl, middlewares }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n });\n\n const getAppRuns = async (\n appId: GetDataAppRunsPath['appId'],\n query?: GetDataAppRunsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/apps/{appId}/runs', { path: { appId }, query }, { signal });\n\n return data.map(prepareAppRun);\n };\n\n const getAppRun = async (\n appId: GetDataAppRunPath['appId'],\n runId: GetDataAppRunPath['runId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/apps/{appId}/runs/{runId}',\n { path: { appId, runId } },\n { signal },\n );\n\n return prepareAppRun(data);\n };\n\n const getAppLogsDownload = async (\n id: GetDataAppLogsDownloadPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data, response } = await client.get(\n '/apps/{appId}/logs/download',\n { path: { appId: id } },\n { signal },\n );\n\n const contentDisposition = parseContentDispositionHeader(\n response.headers.get(HttpHeader.CONTENT_DISPOSITION),\n );\n\n return {\n logs: data,\n fileName: contentDisposition?.filename ?? 'logs.txt',\n };\n };\n\n const getAppLogsTail = async (\n id: GetDataAppLogsTailPath['appId'],\n { query, signal }: { query?: GetDataAppLogsTailQuery; signal?: AbortSignal } = {},\n ) => {\n try {\n const { data } = await client.get(\n '/apps/{appId}/logs/tail',\n {\n query,\n path: {\n appId: id,\n },\n },\n {\n signal,\n },\n );\n\n const logs = data === '' ? null : data;\n const lastLogTimestamp = parseLastLogTimestamp(logs);\n const nextLogTimestamp = calculateNextLogTimestamp(lastLogTimestamp);\n\n return {\n entries: parseLogLines(logs),\n nextLogTimestamp: nextLogTimestamp,\n };\n } catch (error) {\n if (\n isApiError(error) &&\n error.response.status === HttpStatus.BAD_REQUEST &&\n TailError.safeParse(error.data).data?.context?.code === 'apps.appNotRunning'\n ) {\n return { entries: [], nextLogTimestamp: null };\n }\n throw error;\n }\n };\n\n const getApps = async (query: GetAppsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/apps', { query }, { signal });\n\n return data;\n };\n\n const getApp = async (appId: GetDataAppPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const createApp = async (body: CreateDataAppBody, signal?: AbortSignal) => {\n const { data } = await client.post('/apps', { body }, { signal });\n\n return data;\n };\n\n const patchApp = async (\n appId: PatchDataAppPath['appId'],\n body: PatchDataAppBody,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.patch(\n '/apps/{appId}',\n {\n path: { appId: appId },\n body: body,\n },\n { signal },\n );\n return data;\n };\n\n const deleteApp = async (appId: DeleteDataAppPath['appId'], signal?: AbortSignal) => {\n return client.delete('/apps/{appId}', { path: { appId } }, { signal });\n };\n\n const getAppPassword = async (appId: GetDataAppPasswordPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}/password', { path: { appId } }, { signal });\n\n return data;\n };\n\n const resetAppPassword = async (\n appId: ResetDataAppPasswordPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/reset-password',\n { path: { appId } },\n { signal },\n );\n\n return data;\n };\n\n const getRuntimes = async (signal?: AbortSignal) => {\n const { data } = await client.get('/runtimes', {}, { signal });\n\n return data;\n };\n\n const getSandbox = async (appId: GetSandboxPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/sandboxes/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n return {\n getAppRuns,\n getAppRun,\n getAppLogsDownload,\n getAppLogsTail,\n getApps,\n getApp,\n createApp,\n patchApp,\n deleteApp,\n getAppPassword,\n resetAppPassword,\n getRuntimes,\n getSandbox,\n };\n};\n"]}
|
|
@@ -3,6 +3,11 @@ import * as z from 'zod';
|
|
|
3
3
|
import dayjs from 'dayjs';
|
|
4
4
|
import utc from 'dayjs/plugin/utc';
|
|
5
5
|
|
|
6
|
+
// src/constants.ts
|
|
7
|
+
var HttpStatus = {
|
|
8
|
+
NO_CONTENT: 204,
|
|
9
|
+
BAD_REQUEST: 400};
|
|
10
|
+
|
|
6
11
|
// src/errors/ApiError.ts
|
|
7
12
|
var ApiError = class extends Error {
|
|
8
13
|
response;
|
|
@@ -30,7 +35,7 @@ function removeUndefined(obj) {
|
|
|
30
35
|
return objCopy;
|
|
31
36
|
}
|
|
32
37
|
var parseData = async (response) => {
|
|
33
|
-
if (response.status ===
|
|
38
|
+
if (response.status === HttpStatus.NO_CONTENT) return null;
|
|
34
39
|
const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);
|
|
35
40
|
if (contentType && contentType == HttpContentType.JSON) {
|
|
36
41
|
return response.json();
|
|
@@ -314,7 +319,7 @@ var createDataScienceClient = ({ baseUrl, middlewares }) => {
|
|
|
314
319
|
nextLogTimestamp
|
|
315
320
|
};
|
|
316
321
|
} catch (error) {
|
|
317
|
-
if (isApiError(error) && error.response.status ===
|
|
322
|
+
if (isApiError(error) && error.response.status === HttpStatus.BAD_REQUEST && TailError.safeParse(error.data).data?.context?.code === "apps.appNotRunning") {
|
|
318
323
|
return { entries: [], nextLogTimestamp: null };
|
|
319
324
|
}
|
|
320
325
|
throw error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors/ApiError.ts","../../src/fetchClient/createFetchClient/utils.ts","../../src/fetchClient/createFetchClient/createFetchClient.ts","../../src/fetchClient/createOpenapiFetchClient.ts","../../src/clients/dataScience/schemas.ts","../../src/clients/dataScience/utils.ts","../../src/clients/dataScience/dataScienceClient.ts"],"names":[],"mappings":"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","file":"index.js","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 {\n type ApiResponse,\n createFetchClient,\n type CreateFetchClientOptions,\n type FetchClientOptions,\n type HttpMethod,\n} from './createFetchClient';\nimport type { OpenapiParametersType, OpenapiReturnType } from './types';\n\ntype OpenapiPaths<Paths> = {\n [P in keyof Paths]: {\n [M in HttpMethod]?: unknown;\n };\n};\n\ntype PathsWithMethod<Paths extends OpenapiPaths<Paths>, PathnameMethod extends HttpMethod> = {\n [Pathname in keyof Paths]: Paths[Pathname] extends {\n [K in PathnameMethod]: any;\n }\n ? Pathname\n : never;\n}[keyof Paths];\n\ntype FetchMethod<Paths extends OpenapiPaths<Paths>, Method extends HttpMethod> = <\n Path extends PathsWithMethod<Paths, Method>,\n>(\n url: Path,\n params: OpenapiParametersType<Paths[Path][Method]>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<OpenapiReturnType<Paths[Path][Method]>>>;\n\ntype FetchClient<Paths extends OpenapiPaths<Paths>> = {\n get: FetchMethod<Paths, 'get'>;\n post: FetchMethod<Paths, 'post'>;\n put: FetchMethod<Paths, 'put'>;\n patch: FetchMethod<Paths, 'patch'>;\n delete: FetchMethod<Paths, 'delete'>;\n};\n\nexport const createOpenapiFetchClient = <Paths extends OpenapiPaths<Paths>>(\n defaultOptions: CreateFetchClientOptions,\n) => createFetchClient(defaultOptions) as FetchClient<Paths>;\n","import * as z from 'zod';\n\nexport const TailError = z.object({\n context: z.object({\n code: z.string(),\n }),\n});\n","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport type { RawAppRun } from './types';\n\ndayjs.extend(utc);\n\nexport type LogEntry = {\n timestamp: string | null;\n message: string;\n};\n\nconst ISO_TIMESTAMP_REGEX = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z/;\nconst LEADING_ISO_TIMESTAMP_REGEX = /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z)\\s?/;\n\nconst tryParseJsonl = (line: string): LogEntry | null => {\n if (!line.startsWith('{')) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return null;\n }\n\n if (typeof parsed !== 'object' || parsed === null) return null;\n\n const record = parsed as Record<string, unknown>;\n const { timestamp, message } = record;\n\n if (typeof timestamp !== 'string' || typeof message !== 'string') return null;\n\n return {\n timestamp,\n message,\n };\n};\n\nconst parsePlainTextLine = (line: string): LogEntry => {\n const match = line.match(LEADING_ISO_TIMESTAMP_REGEX);\n if (match) {\n return { timestamp: match[1]!, message: line.slice(match[0].length) };\n }\n return { timestamp: null, message: line };\n};\n\nexport const parseLogLine = (line: string): LogEntry =>\n tryParseJsonl(line) ?? parsePlainTextLine(line);\n\nconst toLogEntryFromObject = (raw: Record<string, unknown>): LogEntry | null => {\n if (typeof raw.message !== 'string') return null;\n return {\n timestamp: typeof raw.timestamp === 'string' ? raw.timestamp : null,\n message: raw.message,\n };\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const parseLogLines = (raw: unknown): LogEntry[] => {\n if (raw === null || raw === undefined || raw === '') return [];\n\n if (Array.isArray(raw)) {\n return raw.flatMap((item) => {\n if (typeof item === 'string') return item === '' ? [] : [parseLogLine(item)];\n if (isPlainObject(item)) {\n const entry = toLogEntryFromObject(item);\n return entry ? [entry] : [];\n }\n return [];\n });\n }\n\n if (isPlainObject(raw)) {\n const entry = toLogEntryFromObject(raw);\n return entry ? [entry] : [];\n }\n\n if (typeof raw !== 'string') return [];\n\n const lines = raw.split('\\n');\n const entries: LogEntry[] = [];\n for (const line of lines) {\n if (line === '') continue;\n entries.push(parseLogLine(line));\n }\n return entries;\n};\n\nexport const parseLastLogTimestamp = (logs: unknown) => {\n const entries = parseLogLines(logs);\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n if (!entry) continue;\n if (entry.timestamp) return entry.timestamp;\n\n // A plain-text line may carry a timestamp embedded mid-line (legacy format).\n const match = entry.message.match(ISO_TIMESTAMP_REGEX);\n if (match) return match[0];\n }\n return null;\n};\n\nexport const calculateNextLogTimestamp = (timestamp: string | null) => {\n if (timestamp === null) return null;\n return dayjs(timestamp).utc().add(1, 'second').utc().format();\n};\n\nexport const prepareAppRun = (appRun: RawAppRun) => {\n return {\n ...appRun,\n state: appRun.state ?? (appRun.stoppedAt ? 'finished' : 'running'), // fallback state for historic non migrated runs\n };\n};\n","import {\n createOpenapiFetchClient,\n HttpHeader,\n isApiError,\n parseContentDispositionHeader,\n} from '../../fetchClient';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport { TailError } from './schemas';\nimport type {\n CreateDataAppBody,\n DeleteDataAppPath,\n GetAppsQuery,\n GetDataAppLogsDownloadPath,\n GetDataAppLogsTailPath,\n GetDataAppLogsTailQuery,\n GetDataAppPasswordPath,\n GetDataAppPath,\n GetDataAppRunPath,\n GetDataAppRunsPath,\n GetDataAppRunsQuery,\n GetSandboxPath,\n PatchDataAppBody,\n PatchDataAppPath,\n ResetDataAppPasswordPath,\n} from './types';\nimport {\n calculateNextLogTimestamp,\n parseLastLogTimestamp,\n parseLogLines,\n prepareAppRun,\n} from './utils';\n\nexport const createDataScienceClient = ({ baseUrl, middlewares }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n });\n\n const getAppRuns = async (\n appId: GetDataAppRunsPath['appId'],\n query?: GetDataAppRunsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/apps/{appId}/runs', { path: { appId }, query }, { signal });\n\n return data.map(prepareAppRun);\n };\n\n const getAppRun = async (\n appId: GetDataAppRunPath['appId'],\n runId: GetDataAppRunPath['runId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/apps/{appId}/runs/{runId}',\n { path: { appId, runId } },\n { signal },\n );\n\n return prepareAppRun(data);\n };\n\n const getAppLogsDownload = async (\n id: GetDataAppLogsDownloadPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data, response } = await client.get(\n '/apps/{appId}/logs/download',\n { path: { appId: id } },\n { signal },\n );\n\n const contentDisposition = parseContentDispositionHeader(\n response.headers.get(HttpHeader.CONTENT_DISPOSITION),\n );\n\n return {\n logs: data,\n fileName: contentDisposition?.filename ?? 'logs.txt',\n };\n };\n\n const getAppLogsTail = async (\n id: GetDataAppLogsTailPath['appId'],\n { query, signal }: { query?: GetDataAppLogsTailQuery; signal?: AbortSignal } = {},\n ) => {\n try {\n const { data } = await client.get(\n '/apps/{appId}/logs/tail',\n {\n query,\n path: {\n appId: id,\n },\n },\n {\n signal,\n },\n );\n\n const logs = data === '' ? null : data;\n const lastLogTimestamp = parseLastLogTimestamp(logs);\n const nextLogTimestamp = calculateNextLogTimestamp(lastLogTimestamp);\n\n return {\n entries: parseLogLines(logs),\n nextLogTimestamp: nextLogTimestamp,\n };\n } catch (error) {\n if (\n isApiError(error) &&\n error.response.status === 400 &&\n TailError.safeParse(error.data).data?.context?.code === 'apps.appNotRunning'\n ) {\n return { entries: [], nextLogTimestamp: null };\n }\n throw error;\n }\n };\n\n const getApps = async (query: GetAppsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/apps', { query }, { signal });\n\n return data;\n };\n\n const getApp = async (appId: GetDataAppPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const createApp = async (body: CreateDataAppBody, signal?: AbortSignal) => {\n const { data } = await client.post('/apps', { body }, { signal });\n\n return data;\n };\n\n const patchApp = async (\n appId: PatchDataAppPath['appId'],\n body: PatchDataAppBody,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.patch(\n '/apps/{appId}',\n {\n path: { appId: appId },\n body: body,\n },\n { signal },\n );\n return data;\n };\n\n const deleteApp = async (appId: DeleteDataAppPath['appId'], signal?: AbortSignal) => {\n return client.delete('/apps/{appId}', { path: { appId } }, { signal });\n };\n\n const getAppPassword = async (appId: GetDataAppPasswordPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}/password', { path: { appId } }, { signal });\n\n return data;\n };\n\n const resetAppPassword = async (\n appId: ResetDataAppPasswordPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/reset-password',\n { path: { appId } },\n { signal },\n );\n\n return data;\n };\n\n const getRuntimes = async (signal?: AbortSignal) => {\n const { data } = await client.get('/runtimes', {}, { signal });\n\n return data;\n };\n\n const getSandbox = async (appId: GetSandboxPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/sandboxes/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n return {\n getAppRuns,\n getAppRun,\n getAppLogsDownload,\n getAppLogsTail,\n getApps,\n getApp,\n createApp,\n patchApp,\n deleteApp,\n getAppPassword,\n resetAppPassword,\n getRuntimes,\n getSandbox,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/constants.ts","../../src/errors/ApiError.ts","../../src/fetchClient/createFetchClient/utils.ts","../../src/fetchClient/createFetchClient/createFetchClient.ts","../../src/fetchClient/createOpenapiFetchClient.ts","../../src/clients/dataScience/schemas.ts","../../src/clients/dataScience/utils.ts","../../src/clients/dataScience/dataScienceClient.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["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 { 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 { 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 {\n type ApiResponse,\n createFetchClient,\n type CreateFetchClientOptions,\n type FetchClientOptions,\n type HttpMethod,\n} from './createFetchClient';\nimport type { OpenapiParametersType, OpenapiReturnType } from './types';\n\ntype OpenapiPaths<Paths> = {\n [P in keyof Paths]: {\n [M in HttpMethod]?: unknown;\n };\n};\n\ntype PathsWithMethod<Paths extends OpenapiPaths<Paths>, PathnameMethod extends HttpMethod> = {\n [Pathname in keyof Paths]: Paths[Pathname] extends {\n [K in PathnameMethod]: any;\n }\n ? Pathname\n : never;\n}[keyof Paths];\n\ntype FetchMethod<Paths extends OpenapiPaths<Paths>, Method extends HttpMethod> = <\n Path extends PathsWithMethod<Paths, Method>,\n>(\n url: Path,\n params: OpenapiParametersType<Paths[Path][Method]>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<OpenapiReturnType<Paths[Path][Method]>>>;\n\ntype FetchClient<Paths extends OpenapiPaths<Paths>> = {\n get: FetchMethod<Paths, 'get'>;\n post: FetchMethod<Paths, 'post'>;\n put: FetchMethod<Paths, 'put'>;\n patch: FetchMethod<Paths, 'patch'>;\n delete: FetchMethod<Paths, 'delete'>;\n};\n\nexport const createOpenapiFetchClient = <Paths extends OpenapiPaths<Paths>>(\n defaultOptions: CreateFetchClientOptions,\n) => createFetchClient(defaultOptions) as FetchClient<Paths>;\n","import * as z from 'zod';\n\nexport const TailError = z.object({\n context: z.object({\n code: z.string(),\n }),\n});\n","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport type { RawAppRun } from './types';\n\ndayjs.extend(utc);\n\nexport type LogEntry = {\n timestamp: string | null;\n message: string;\n};\n\nconst ISO_TIMESTAMP_REGEX = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z/;\nconst LEADING_ISO_TIMESTAMP_REGEX = /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z)\\s?/;\n\nconst tryParseJsonl = (line: string): LogEntry | null => {\n if (!line.startsWith('{')) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return null;\n }\n\n if (typeof parsed !== 'object' || parsed === null) return null;\n\n const record = parsed as Record<string, unknown>;\n const { timestamp, message } = record;\n\n if (typeof timestamp !== 'string' || typeof message !== 'string') return null;\n\n return {\n timestamp,\n message,\n };\n};\n\nconst parsePlainTextLine = (line: string): LogEntry => {\n const match = line.match(LEADING_ISO_TIMESTAMP_REGEX);\n if (match) {\n return { timestamp: match[1]!, message: line.slice(match[0].length) };\n }\n return { timestamp: null, message: line };\n};\n\nexport const parseLogLine = (line: string): LogEntry =>\n tryParseJsonl(line) ?? parsePlainTextLine(line);\n\nconst toLogEntryFromObject = (raw: Record<string, unknown>): LogEntry | null => {\n if (typeof raw.message !== 'string') return null;\n return {\n timestamp: typeof raw.timestamp === 'string' ? raw.timestamp : null,\n message: raw.message,\n };\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const parseLogLines = (raw: unknown): LogEntry[] => {\n if (raw === null || raw === undefined || raw === '') return [];\n\n if (Array.isArray(raw)) {\n return raw.flatMap((item) => {\n if (typeof item === 'string') return item === '' ? [] : [parseLogLine(item)];\n if (isPlainObject(item)) {\n const entry = toLogEntryFromObject(item);\n return entry ? [entry] : [];\n }\n return [];\n });\n }\n\n if (isPlainObject(raw)) {\n const entry = toLogEntryFromObject(raw);\n return entry ? [entry] : [];\n }\n\n if (typeof raw !== 'string') return [];\n\n const lines = raw.split('\\n');\n const entries: LogEntry[] = [];\n for (const line of lines) {\n if (line === '') continue;\n entries.push(parseLogLine(line));\n }\n return entries;\n};\n\nexport const parseLastLogTimestamp = (logs: unknown) => {\n const entries = parseLogLines(logs);\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n if (!entry) continue;\n if (entry.timestamp) return entry.timestamp;\n\n // A plain-text line may carry a timestamp embedded mid-line (legacy format).\n const match = entry.message.match(ISO_TIMESTAMP_REGEX);\n if (match) return match[0];\n }\n return null;\n};\n\nexport const calculateNextLogTimestamp = (timestamp: string | null) => {\n if (timestamp === null) return null;\n return dayjs(timestamp).utc().add(1, 'second').utc().format();\n};\n\nexport const prepareAppRun = (appRun: RawAppRun) => {\n return {\n ...appRun,\n state: appRun.state ?? (appRun.stoppedAt ? 'finished' : 'running'), // fallback state for historic non migrated runs\n };\n};\n","import { HttpStatus } from '../../constants';\nimport {\n createOpenapiFetchClient,\n HttpHeader,\n isApiError,\n parseContentDispositionHeader,\n} from '../../fetchClient';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport { TailError } from './schemas';\nimport type {\n CreateDataAppBody,\n DeleteDataAppPath,\n GetAppsQuery,\n GetDataAppLogsDownloadPath,\n GetDataAppLogsTailPath,\n GetDataAppLogsTailQuery,\n GetDataAppPasswordPath,\n GetDataAppPath,\n GetDataAppRunPath,\n GetDataAppRunsPath,\n GetDataAppRunsQuery,\n GetSandboxPath,\n PatchDataAppBody,\n PatchDataAppPath,\n ResetDataAppPasswordPath,\n} from './types';\nimport {\n calculateNextLogTimestamp,\n parseLastLogTimestamp,\n parseLogLines,\n prepareAppRun,\n} from './utils';\n\nexport const createDataScienceClient = ({ baseUrl, middlewares }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n });\n\n const getAppRuns = async (\n appId: GetDataAppRunsPath['appId'],\n query?: GetDataAppRunsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/apps/{appId}/runs', { path: { appId }, query }, { signal });\n\n return data.map(prepareAppRun);\n };\n\n const getAppRun = async (\n appId: GetDataAppRunPath['appId'],\n runId: GetDataAppRunPath['runId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/apps/{appId}/runs/{runId}',\n { path: { appId, runId } },\n { signal },\n );\n\n return prepareAppRun(data);\n };\n\n const getAppLogsDownload = async (\n id: GetDataAppLogsDownloadPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data, response } = await client.get(\n '/apps/{appId}/logs/download',\n { path: { appId: id } },\n { signal },\n );\n\n const contentDisposition = parseContentDispositionHeader(\n response.headers.get(HttpHeader.CONTENT_DISPOSITION),\n );\n\n return {\n logs: data,\n fileName: contentDisposition?.filename ?? 'logs.txt',\n };\n };\n\n const getAppLogsTail = async (\n id: GetDataAppLogsTailPath['appId'],\n { query, signal }: { query?: GetDataAppLogsTailQuery; signal?: AbortSignal } = {},\n ) => {\n try {\n const { data } = await client.get(\n '/apps/{appId}/logs/tail',\n {\n query,\n path: {\n appId: id,\n },\n },\n {\n signal,\n },\n );\n\n const logs = data === '' ? null : data;\n const lastLogTimestamp = parseLastLogTimestamp(logs);\n const nextLogTimestamp = calculateNextLogTimestamp(lastLogTimestamp);\n\n return {\n entries: parseLogLines(logs),\n nextLogTimestamp: nextLogTimestamp,\n };\n } catch (error) {\n if (\n isApiError(error) &&\n error.response.status === HttpStatus.BAD_REQUEST &&\n TailError.safeParse(error.data).data?.context?.code === 'apps.appNotRunning'\n ) {\n return { entries: [], nextLogTimestamp: null };\n }\n throw error;\n }\n };\n\n const getApps = async (query: GetAppsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/apps', { query }, { signal });\n\n return data;\n };\n\n const getApp = async (appId: GetDataAppPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const createApp = async (body: CreateDataAppBody, signal?: AbortSignal) => {\n const { data } = await client.post('/apps', { body }, { signal });\n\n return data;\n };\n\n const patchApp = async (\n appId: PatchDataAppPath['appId'],\n body: PatchDataAppBody,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.patch(\n '/apps/{appId}',\n {\n path: { appId: appId },\n body: body,\n },\n { signal },\n );\n return data;\n };\n\n const deleteApp = async (appId: DeleteDataAppPath['appId'], signal?: AbortSignal) => {\n return client.delete('/apps/{appId}', { path: { appId } }, { signal });\n };\n\n const getAppPassword = async (appId: GetDataAppPasswordPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}/password', { path: { appId } }, { signal });\n\n return data;\n };\n\n const resetAppPassword = async (\n appId: ResetDataAppPasswordPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/reset-password',\n { path: { appId } },\n { signal },\n );\n\n return data;\n };\n\n const getRuntimes = async (signal?: AbortSignal) => {\n const { data } = await client.get('/runtimes', {}, { signal });\n\n return data;\n };\n\n const getSandbox = async (appId: GetSandboxPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/sandboxes/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n return {\n getAppRuns,\n getAppRun,\n getAppLogsDownload,\n getAppLogsTail,\n getApps,\n getApp,\n createApp,\n patchApp,\n deleteApp,\n getAppPassword,\n resetAppPassword,\n getRuntimes,\n getSandbox,\n };\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/domain/permissions/errors.ts
|
|
4
|
+
var PermissionDeniedError = class extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "PermissionDeniedError";
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
exports.PermissionDeniedError = PermissionDeniedError;
|
|
12
|
+
//# sourceMappingURL=index.cjs.map
|
|
13
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/domain/permissions/errors.ts"],"names":[],"mappings":";;;AAAO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF","file":"index.cjs","sourcesContent":["export class PermissionDeniedError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'PermissionDeniedError';\n }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// src/domain/permissions/errors.ts
|
|
2
|
+
var PermissionDeniedError = class extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "PermissionDeniedError";
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export { PermissionDeniedError };
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/domain/permissions/errors.ts"],"names":[],"mappings":";AAAO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF","file":"index.js","sourcesContent":["export class PermissionDeniedError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'PermissionDeniedError';\n }\n}\n"]}
|