@domoinc/ryuu-proxy 5.0.1 → 5.1.0-beta.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/dist/index.d.ts CHANGED
@@ -1,13 +1,25 @@
1
- import { Request, Response, NextFunction } from 'express';
2
- import { IncomingMessage } from 'http';
1
+ import type { Request, Response, NextFunction } from 'express';
2
+ import type { IncomingMessage } from 'http';
3
+ import type { RyuuClient, Manifest } from 'ryuu-client';
3
4
  import busboy from 'busboy';
4
- import { ProxyOptions } from './lib/models';
5
- export declare class Proxy {
6
- private transport;
7
- private agent;
8
- constructor(config: ProxyOptions);
9
- private onError;
10
- express: () => (req: Request, res: Response, next: NextFunction) => void | Promise<any> | busboy.Busboy;
11
- stream: (req: IncomingMessage) => Promise<any> | undefined;
5
+ export interface ProxyConfig {
6
+ client: RyuuClient;
7
+ manifest: Manifest;
8
+ domainUrl: string;
9
+ oauthTokens?: {
10
+ access: string;
11
+ refresh: string;
12
+ };
12
13
  }
14
+ declare function isDomoRequest(url: string | undefined): boolean;
15
+ export declare function createProxy(config: ProxyConfig): {
16
+ express: () => (req: Request, res: Response, next: NextFunction) => void | busboy.Busboy;
17
+ stream: (req: IncomingMessage) => Promise<globalThis.Response> | undefined;
18
+ isDomoRequest: typeof isDomoRequest;
19
+ };
20
+ export declare function getOauthTokens(instance: string, proxyId: string, scopes?: string[]): {
21
+ access: string;
22
+ refresh: string;
23
+ } | undefined;
24
+ export type { Manifest, RyuuClient } from 'ryuu-client';
13
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,qBAAa,KAAK;IAChB,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,KAAK,CAAsC;gBAEvC,MAAM,EAAE,YAAY;IAkBhC,OAAO,CAAC,OAAO,CASb;IAEF,OAAO,SAAU,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,yCA4C9D;IAEF,MAAM,GAAI,KAAK,eAAe,8BAW5B;CACH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,MAAM,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAUD,iBAAS,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGvD;AAwGD,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW;oBAoBnC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;kBA0DpC,eAAe;;EAMrC;AAGD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAQjD;AAGD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,123 +1,171 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
1
+ import * as path from 'path';
2
+ import * as os from 'os';
3
+ import { createWriteStream } from 'fs';
4
+ import { readFile } from 'node:fs/promises';
5
+ import { Readable } from 'node:stream';
6
+ import Configstore from 'configstore';
7
+ import busboy from 'busboy';
8
+ const DOMO_PATTERNS = [
9
+ /^\/domo\/.+\/v\d/,
10
+ /^\/data\/v\d\/.+/,
11
+ /^\/sql\/v\d\/.+/,
12
+ /^\/dql\/v\d\/.+/,
13
+ /^\/api\/.+/,
14
+ ];
15
+ function isDomoRequest(url) {
16
+ if (!url)
17
+ return false;
18
+ return DOMO_PATTERNS.some((p) => p.test(url));
19
+ }
20
+ function isMultiPart(headers) {
21
+ return Object.entries(headers).some(([key, value]) => key.toLowerCase() === 'content-type' &&
22
+ value !== undefined &&
23
+ value.toString().toLowerCase().includes('multipart'));
24
+ }
25
+ function buildHeaders(req, domainUrl, oauthTokens) {
26
+ const hostname = domainUrl.replace('https://', '');
27
+ // Determine which headers to filter
28
+ const filters = isMultiPart(req.headers)
29
+ ? ['content-type', 'content-length', 'cookie']
30
+ : ['cookie'];
31
+ const filtered = Object.keys(req.headers).reduce((acc, key) => {
32
+ if (!filters.includes(key.toLowerCase())) {
33
+ acc[key] = req.headers[key];
34
+ }
35
+ return acc;
36
+ }, {});
37
+ // Fix referer
38
+ const referer = req.headers.referer ?? 'https://0.0.0.0:3000';
39
+ const fixedReferer = referer.includes('?')
40
+ ? referer
41
+ : `${referer}?userId=27&customer=dev&locale=en-US&platform=desktop`;
42
+ // Build cookie header
43
+ let cookie;
44
+ const existing = req.headers.cookie;
45
+ const existingStr = Array.isArray(existing)
46
+ ? existing.join('; ')
47
+ : existing;
48
+ const tokenStr = oauthTokens
49
+ ? `_daatv1=${oauthTokens.access}; _dartv1=${oauthTokens.refresh}`
50
+ : undefined;
51
+ if (existingStr && tokenStr) {
52
+ cookie = `${existingStr}; ${tokenStr}`;
7
53
  }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
54
+ else {
55
+ cookie = existingStr ?? tokenStr;
56
+ }
57
+ return {
58
+ ...filtered,
59
+ referer: fixedReferer,
60
+ host: hostname,
61
+ ...(cookie ? { cookie } : {}),
33
62
  };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.Proxy = void 0;
40
- const path = __importStar(require("path"));
41
- const os = __importStar(require("os"));
42
- const form_data_1 = __importDefault(require("form-data"));
43
- const fs_1 = require("fs");
44
- const https_proxy_agent_1 = require("https-proxy-agent");
45
- const dotenv = __importStar(require("dotenv"));
46
- const busboy_1 = __importDefault(require("busboy"));
47
- const Transport_1 = __importDefault(require("./lib/Transport"));
48
- class Proxy {
49
- constructor(config) {
50
- this.onError = (err, res) => {
51
- const status = err.response?.data?.statusCode !== undefined ? err.response.data.statusCode : 500;
52
- const msg = err.response?.data?.statusMessage !== undefined ? err.response.data.statusMessage : (err.message ?? err);
53
- res.status(status).send(msg);
54
- };
55
- this.express = () => (req, res, next) => {
56
- if (this.transport.isDomoRequest(req.url)) {
57
- if (this.transport.isMultiPartRequest(req.headers)) {
58
- const bb = (0, busboy_1.default)({ headers: req.headers });
59
- let filePath;
60
- let fieldName;
61
- bb.on('file', (fieldname, filestream, fileMetadata) => {
62
- filePath = path.join(os.tmpdir(), path.basename(fileMetadata.filename));
63
- fieldName = fieldname;
64
- filestream.pipe((0, fs_1.createWriteStream)(filePath));
65
- });
66
- bb.on('finish', () => {
67
- this.transport
68
- .buildBasic(req)
69
- .then((options) => {
70
- const form = new form_data_1.default();
71
- form.append(fieldName, (0, fs_1.createReadStream)(filePath));
72
- return this.transport.request({
73
- ...options,
74
- headers: { ...options.headers, ...form.getHeaders() },
75
- data: form,
76
- });
77
- })
78
- .then((rawRequest) => rawRequest.data.pipe(res))
79
- .catch((err) => this.onError(err, res));
63
+ }
64
+ function parseBody(req) {
65
+ const exprReq = req;
66
+ if (typeof exprReq.body !== 'undefined') {
67
+ return Promise.resolve(typeof exprReq.body === 'string'
68
+ ? exprReq.body
69
+ : JSON.stringify(exprReq.body));
70
+ }
71
+ return new Promise((resolve) => {
72
+ const chunks = [];
73
+ req.on('data', (chunk) => chunks.push(chunk));
74
+ req.on('end', () => {
75
+ const raw = Buffer.concat(chunks).toString();
76
+ resolve(raw || undefined);
77
+ });
78
+ req.on('error', () => resolve(undefined));
79
+ });
80
+ }
81
+ function pipeResponse(upstream, res) {
82
+ res.status(upstream.status);
83
+ upstream.headers.forEach((value, key) => {
84
+ if (!['transfer-encoding', 'connection', 'keep-alive', 'content-encoding', 'content-length'].includes(key.toLowerCase())) {
85
+ res.setHeader(key, value);
86
+ }
87
+ });
88
+ if (upstream.body) {
89
+ Readable.fromWeb(upstream.body).pipe(res);
90
+ }
91
+ else {
92
+ res.end();
93
+ }
94
+ }
95
+ export function createProxy(config) {
96
+ const { client, domainUrl, oauthTokens } = config;
97
+ async function proxyRequest(req, headersOnly) {
98
+ const headers = buildHeaders(req, domainUrl, oauthTokens);
99
+ const url = `${domainUrl}${req.url ?? ''}`;
100
+ const body = headersOnly ? undefined : await parseBody(req);
101
+ return client.request(url, {
102
+ method: req.method,
103
+ headers: headers,
104
+ body,
105
+ rawResponse: true,
106
+ });
107
+ }
108
+ function express() {
109
+ return (req, res, next) => {
110
+ if (!isDomoRequest(req.url))
111
+ return next();
112
+ if (isMultiPart(req.headers)) {
113
+ const bb = busboy({ headers: req.headers });
114
+ let filePath;
115
+ let fieldName;
116
+ let fileMimeType;
117
+ bb.on('file', (fieldname, filestream, fileMetadata) => {
118
+ filePath = path.join(os.tmpdir(), path.basename(fileMetadata.filename));
119
+ fieldName = fieldname;
120
+ fileMimeType = fileMetadata.mimeType;
121
+ filestream.pipe(createWriteStream(filePath));
122
+ });
123
+ bb.on('finish', () => {
124
+ (async () => {
125
+ const headers = buildHeaders(req, domainUrl, oauthTokens);
126
+ const url = `${domainUrl}${req.url ?? ''}`;
127
+ const fileBuffer = await readFile(filePath);
128
+ const filename = path.basename(filePath);
129
+ const form = new FormData();
130
+ form.append(fieldName, new Blob([fileBuffer], { type: fileMimeType }), filename);
131
+ const response = await client.request(url, {
132
+ method: req.method,
133
+ headers: headers,
134
+ body: form,
135
+ rawResponse: true,
136
+ });
137
+ pipeResponse(response, res);
138
+ })().catch((err) => {
139
+ const status = err.status ?? err.statusCode ?? 500;
140
+ res.status(status).send(err.message ?? 'Unknown error');
80
141
  });
81
- return req.pipe(bb);
82
- }
83
- return this.transport
84
- .build(req)
85
- .then((options) => this.transport.request({
86
- ...options,
87
- httpsAgent: this.agent,
88
- }))
89
- .then((rawRequest) => rawRequest.data.pipe(res))
90
- .catch((err) => this.onError(err, res));
91
- }
92
- return next();
93
- };
94
- this.stream = (req) => {
95
- if (this.transport.isDomoRequest(req.url)) {
96
- return this.transport
97
- .build(req)
98
- .then(this.transport.request)
99
- .catch((err) => {
100
- // Re-throw the error so callers can handle it
101
- throw err;
102
142
  });
143
+ return req.pipe(bb);
103
144
  }
104
- return undefined;
145
+ proxyRequest(req)
146
+ .then((response) => pipeResponse(response, res))
147
+ .catch((err) => {
148
+ const status = err.status ?? err.statusCode ?? 500;
149
+ res.status(status).send(err.message ?? 'Unknown error');
150
+ });
105
151
  };
106
- this.transport = new Transport_1.default(config);
107
- dotenv.config({ path: `${process.cwd()}/.env` });
108
- const proxyHost = process.env.REACT_APP_PROXY_HOST ?? process.env.PROXY_HOST;
109
- const proxyPort = process.env.REACT_APP_PROXY_PORT ?? process.env.PROXY_PORT;
110
- const proxyUsername = process.env.REACT_APP_PROXY_USERNAME ?? process.env.PROXY_USERNAME;
111
- const proxyPassword = process.env.REACT_APP_PROXY_PASSWORD ?? process.env.PROXY_PASSWORD;
112
- if (proxyHost !== undefined && proxyPort !== undefined) {
113
- if (proxyUsername !== undefined && proxyPassword !== undefined) {
114
- this.agent = new https_proxy_agent_1.HttpsProxyAgent(`http://${proxyUsername}:${proxyPassword}@${proxyHost}:${proxyPort}`);
115
- }
116
- else {
117
- this.agent = new https_proxy_agent_1.HttpsProxyAgent(`http://${proxyHost}:${proxyPort}`);
118
- }
119
- }
120
152
  }
153
+ function stream(req) {
154
+ if (!isDomoRequest(req.url))
155
+ return undefined;
156
+ return proxyRequest(req);
157
+ }
158
+ return { express, stream, isDomoRequest };
159
+ }
160
+ // Helper: resolve OAuth tokens from configstore for a given proxyId
161
+ export function getOauthTokens(instance, proxyId, scopes) {
162
+ const configstore = new Configstore(`/ryuu/${instance}`);
163
+ const allScopes = scopes ? ['domoapps', ...scopes] : ['domoapps'];
164
+ const key = `${proxyId}-${allScopes.join('-')}`;
165
+ const access = configstore.get(`${key}-accessToken`);
166
+ const refresh = configstore.get(`${key}-refreshToken`);
167
+ if (access && refresh)
168
+ return { access, refresh };
169
+ return undefined;
121
170
  }
122
- exports.Proxy = Proxy;
123
171
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DomoException = void 0;
4
- class DomoException extends Error {
1
+ export class DomoException extends Error {
2
+ statusCode;
3
+ url;
4
+ error;
5
+ proxy;
5
6
  constructor(err, url) {
6
7
  const message = 'Ensure the app has been published at least once (manifest.json should have an Id) ' +
7
8
  'and you are working with an active session by running: `domo login`';
@@ -13,5 +14,4 @@ class DomoException extends Error {
13
14
  this.url = url;
14
15
  }
15
16
  }
16
- exports.DomoException = DomoException;
17
17
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAc,SAAQ,KAAK;IAStC,YAAY,GAA2E,EAAE,GAAW;QAClG,MAAM,OAAO,GACX,oFAAoF;YACpF,qEAAqE,CAAC;QAExE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC;QAEjE,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC;QACxC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF;AAvBD,sCAuBC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,UAAU,CAAS;IAEnB,GAAG,CAAS;IAEZ,KAAK,CAAS;IAEd,KAAK,CAAS;IAEd,YAAY,GAA2E,EAAE,GAAW;QAClG,MAAM,OAAO,GACX,oFAAoF;YACpF,qEAAqE,CAAC;QAExE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC;QAEjE,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC;QACxC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF"}
package/package.json CHANGED
@@ -1,7 +1,14 @@
1
1
  {
2
2
  "name": "@domoinc/ryuu-proxy",
3
- "version": "5.0.1",
3
+ "version": "5.1.0-beta.1",
4
4
  "description": "a middleware that provides a proxy for local domo app development",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
+ }
11
+ },
5
12
  "main": "./dist/index.js",
6
13
  "types": "./dist/index.d.ts",
7
14
  "author": "AppTeam6 <Squad.AppTeam6@domo.com>",
@@ -19,66 +26,32 @@
19
26
  ],
20
27
  "devDependencies": {
21
28
  "@types/busboy": "^1.5.4",
22
- "@types/chai": "^4.3.20",
23
29
  "@types/configstore": "^6.0.2",
24
30
  "@types/express": "^4.17.24",
25
- "@types/fs-extra": "^11.0.4",
26
- "@types/mocha": "^10.0.10",
27
- "@types/node": "^18.19.130",
28
- "@types/sinon": "^17.0.4",
29
- "@types/tough-cookie": "^4.0.5",
30
- "@typescript-eslint/eslint-plugin": "^7.0.0",
31
- "@typescript-eslint/parser": "^7.0.0",
32
- "chai": "^4.5.0",
33
- "eslint": "^8.57.0",
34
- "eslint-config-airbnb-base": "^15.0.0",
35
- "eslint-config-airbnb-typescript": "^18.0.0",
36
- "eslint-config-prettier": "^10.1.8",
37
- "eslint-plugin-import": "^2.31.0",
38
- "eslint-plugin-prettier": "^5.5.4",
39
- "mocha": "^10.8.2",
31
+ "@types/node": "^22.13.0",
40
32
  "mock-req": "^0.2.0",
41
- "nyc": "^17.1.0",
42
33
  "prettier": "^3.6.2",
43
- "sinon": "^17.0.2",
44
- "standard-version": "^9.5.0",
45
- "ts-node": "^10.9.2",
46
- "typescript": "^5.9.3"
34
+ "typescript": "^5.9.3",
35
+ "vitest": "^3.1.0"
47
36
  },
48
37
  "dependencies": {
49
- "axios": "^1.13.0",
50
- "axios-cookiejar-support": "^6.0.4",
51
38
  "busboy": "^1.6.0",
52
39
  "configstore": "^7.1.0",
53
- "dotenv": "^16.6.1",
54
- "form-data": "^4.0.4",
55
- "fs-extra": "^11.3.2",
56
- "glob": "^10.4.5",
57
- "https-proxy-agent": "^7.0.6",
58
- "ryuu-client": "^4.4.4",
59
- "tough-cookie": "^5.0.0"
40
+ "ryuu-client": "^5.0.0-beta.1"
60
41
  },
61
42
  "peerDependencies": {
62
- "express": "^4.17.0 || ^5.0.0",
63
- "ryuu": "^4.2.5"
43
+ "express": "^4.17.0 || ^5.0.0"
64
44
  },
65
45
  "scripts": {
66
- "lint": "eslint src --ext .ts",
67
- "lint:fix": "eslint src --ext .ts --fix",
68
46
  "format": "prettier --write src/**/*.ts",
69
47
  "format:check": "prettier --check src/**/*.ts",
70
- "test": "TS_NODE_PROJECT=tsconfig.test.json mocha && rm -rf test",
71
- "test:coverage": "nyc --reporter=text --reporter=html --reporter=json-summary --require ts-node/register --extension .ts mocha 'src/**/*.spec.ts' && rm -rf test",
72
- "test:coverage:open": "nyc --reporter=text --reporter=html --reporter=json-summary --require ts-node/register --extension .ts mocha 'src/**/*.spec.ts' && rm -rf test && open coverage/index.html",
73
- "tdd": "mocha --watch",
48
+ "test": "vitest run",
49
+ "test:watch": "vitest",
50
+ "test:coverage": "vitest run --coverage",
74
51
  "build": "rm -rf ./dist && tsc",
75
- "release:alpha": "pnpm run build && pnpm publish --tag alpha",
76
- "release:beta": "pnpm run build && pnpm publish --tag beta",
52
+ "release:alpha": "pnpm run build && pnpm publish --tag alpha --no-git-checks",
53
+ "release:beta": "pnpm run build && pnpm publish --tag beta --no-git-checks",
77
54
  "release:production": "pnpm run build && pnpm publish",
78
- "start": "pnpm run build -- -w",
79
- "clean": "rm -rf node_modules pnpm-lock.yaml && pnpm install",
80
- "bump:alpha": "pnpm run build && pnpm run bump -- --prerelease alpha",
81
- "bump:beta": "pnpm run build && pnpm run bump -- --prerelease beta",
82
- "bump": "standard-version"
55
+ "clean": "rm -rf node_modules pnpm-lock.yaml && pnpm install"
83
56
  }
84
57
  }
@@ -1,31 +0,0 @@
1
- import Domo = require('ryuu-client');
2
- import { AxiosRequestConfig } from 'axios';
3
- import { IncomingMessage, IncomingHttpHeaders } from 'http';
4
- import { Manifest } from 'ryuu-client/lib/models';
5
- import { ProxyOptions, OauthToken } from '../models';
6
- export default class Transport {
7
- private manifest;
8
- private clientPromise;
9
- private domainPromise;
10
- private proxyId;
11
- private oauthTokenPromise;
12
- private cookieJar;
13
- constructor({ manifest }: ProxyOptions);
14
- request: (options: AxiosRequestConfig) => Promise<any>;
15
- getEnv(instance: string): string;
16
- isDomoRequest(url: string | undefined): boolean;
17
- isMultiPartRequest(headers: IncomingHttpHeaders): boolean;
18
- getManifest(): Manifest;
19
- getDomainPromise(): Promise<{
20
- url: string;
21
- }>;
22
- getLastLogin(): Promise<Domo>;
23
- getScopedOauthTokens(): Promise<OauthToken | undefined>;
24
- build(req: IncomingMessage): Promise<AxiosRequestConfig>;
25
- buildBasic(req: IncomingMessage): Promise<AxiosRequestConfig>;
26
- private prepareHeaders;
27
- private prepareCookies;
28
- private parseBody;
29
- private verifyLogin;
30
- }
31
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/Transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,GAAG,QAAQ,aAAa,CAAC,CAAC;AACrC,OAAc,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAK5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGrD,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,aAAa,CAA2B;IAEhD,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,iBAAiB,CAAkC;IAE3D,OAAO,CAAC,SAAS,CAAY;gBAEjB,EAAE,QAAQ,EAAE,EAAE,YAAY;IA0BtC,OAAO,GAAI,SAAS,kBAAkB,KAAG,OAAO,CAAC,GAAG,CAAC,CAC2B;IAEhF,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAUhC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAmB/C,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO;IASzD,WAAW,IAAI,QAAQ;IAIvB,gBAAgB,IAAI,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAI5C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C7B,oBAAoB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAQvD,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAexD,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkB7D,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,WAAW;CAOpB"}
@@ -1,250 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const Domo = require("ryuu-client");
40
- const axios_1 = __importDefault(require("axios"));
41
- const axios_cookiejar_support_1 = require("axios-cookiejar-support");
42
- const tough_cookie_1 = require("tough-cookie");
43
- const dotenv = __importStar(require("dotenv"));
44
- const utils_1 = require("../utils");
45
- const constants_1 = require("../constants");
46
- class Transport {
47
- constructor({ manifest }) {
48
- this.request = (options) => this.clientPromise.then((client) => client.processRequestRaw(options));
49
- this.manifest = manifest;
50
- this.clientPromise = this.getLastLogin();
51
- this.proxyId = (0, utils_1.getProxyId)(manifest);
52
- this.domainPromise = this.clientPromise.then(async (client) => client.getDomoappsData({ ...this.manifest }, this.proxyId));
53
- this.oauthTokenPromise = this.getScopedOauthTokens();
54
- // Add error handlers to prevent unhandled promise rejections
55
- // These will be caught by the actual consumers when they use the promises
56
- this.clientPromise.catch(() => {
57
- // Silently catch - error will be handled when promise is actually used
58
- });
59
- this.domainPromise.catch(() => {
60
- // Silently catch - error will be handled when promise is actually used
61
- });
62
- this.oauthTokenPromise.catch(() => {
63
- // Silently catch - error will be handled when promise is actually used
64
- });
65
- // Initialize cookie jar once and reuse it for all requests to persist auth cookies
66
- (0, axios_cookiejar_support_1.wrapper)(axios_1.default);
67
- this.cookieJar = new tough_cookie_1.CookieJar();
68
- }
69
- getEnv(instance) {
70
- const regexp = /([-_\w]+)\.(.*)/;
71
- const int = 2;
72
- const match = instance.match(regexp);
73
- if (!match) {
74
- throw new Error(`Invalid instance format: ${instance}`);
75
- }
76
- return match[int];
77
- }
78
- isDomoRequest(url) {
79
- if (!url) {
80
- return false;
81
- }
82
- const domoPattern = /^\/domo\/.+\/v\d/;
83
- const dataPattern = /^\/data\/v\d\/.+/;
84
- const sqlQueryPattern = /^\/sql\/v\d\/.+/;
85
- const dqlPattern = /^\/dql\/v\d\/.+/;
86
- const apiPattern = /^\/api\/.+/;
87
- return (domoPattern.test(url) ||
88
- dataPattern.test(url) ||
89
- sqlQueryPattern.test(url) ||
90
- dqlPattern.test(url) ||
91
- apiPattern.test(url));
92
- }
93
- isMultiPartRequest(headers) {
94
- return Object.entries(headers).some(([header, value]) => header.toLowerCase() === 'content-type' &&
95
- value !== undefined &&
96
- value.toString().toLowerCase().includes('multipart'));
97
- }
98
- getManifest() {
99
- return this.manifest;
100
- }
101
- getDomainPromise() {
102
- return this.domainPromise;
103
- }
104
- getLastLogin() {
105
- return (0, utils_1.getMostRecentLogin)()
106
- .then(this.verifyLogin)
107
- .then((recentLogin) => {
108
- dotenv.config({ path: `${process.cwd()}/.env` });
109
- const proxyHost = process.env.REACT_APP_PROXY_HOST ?? process.env.PROXY_HOST;
110
- const proxyPort = process.env.REACT_APP_PROXY_PORT ?? process.env.PROXY_PORT;
111
- const proxyUsername = process.env.REACT_APP_PROXY_USERNAME ?? process.env.PROXY_USERNAME;
112
- const proxyPassword = process.env.REACT_APP_PROXY_PASSWORD ?? process.env.PROXY_PASSWORD;
113
- if (proxyHost !== undefined && proxyPort !== undefined) {
114
- if (proxyUsername !== undefined && proxyPassword !== undefined) {
115
- return new Domo(recentLogin.instance, recentLogin.refreshToken, constants_1.CLIENT_ID, {
116
- host: proxyHost,
117
- port: proxyPort,
118
- auth: `${proxyUsername}:${proxyPassword}`,
119
- }, recentLogin.devToken);
120
- }
121
- return new Domo(recentLogin.instance, recentLogin.refreshToken, constants_1.CLIENT_ID, {
122
- host: proxyHost,
123
- port: proxyPort,
124
- }, recentLogin.devToken);
125
- }
126
- return new Domo(recentLogin.instance, recentLogin.refreshToken, constants_1.CLIENT_ID, {}, recentLogin.devToken);
127
- });
128
- }
129
- getScopedOauthTokens() {
130
- if ((0, utils_1.isOauthEnabled)(this.manifest)) {
131
- return (0, utils_1.getOauthTokens)(this.proxyId, this.manifest.scopes);
132
- }
133
- return Promise.resolve(undefined);
134
- }
135
- build(req) {
136
- let options;
137
- return this.buildBasic(req)
138
- .then((basicOptions) => {
139
- options = basicOptions;
140
- options.transformResponse = [];
141
- options.responseType = 'stream';
142
- return this.parseBody(req);
143
- })
144
- .then((data) => ({
145
- ...options,
146
- data,
147
- }));
148
- }
149
- buildBasic(req) {
150
- let api;
151
- let hostname;
152
- return this.domainPromise
153
- .then((domain) => {
154
- api = `${domain.url}${req.url ?? ''}`;
155
- hostname = domain.url;
156
- return this.prepareHeaders(req.headers, this.proxyId, hostname);
157
- })
158
- .then((headers) => ({
159
- jar: this.cookieJar,
160
- headers,
161
- url: api,
162
- responseType: 'stream',
163
- method: req.method,
164
- }));
165
- }
166
- prepareHeaders(headers, _context, host) {
167
- const hostname = host.replace('https://', '');
168
- return this.oauthTokenPromise.then((tokens) => {
169
- const refererValue = headers.referer ?? 'https://0.0.0.0:3000';
170
- const referer = refererValue.indexOf('?') >= 0
171
- ? `${refererValue}`
172
- : `${refererValue}?userId=27&customer=dev&locale=en-US&platform=desktop`;
173
- const cookieHeader = this.prepareCookies(headers, tokens);
174
- const filters = this.isMultiPartRequest(headers)
175
- ? ['content-type', 'content-length', 'cookie']
176
- : ['cookie'];
177
- const filteredHeaders = Object.keys(headers).reduce((newHeaders, key) => {
178
- if (!filters.includes(key.toLowerCase())) {
179
- return { ...newHeaders, [key]: headers[key] };
180
- }
181
- return newHeaders;
182
- }, {});
183
- return {
184
- ...filteredHeaders,
185
- ...cookieHeader,
186
- referer,
187
- host: hostname,
188
- };
189
- });
190
- }
191
- prepareCookies(headers, tokens) {
192
- const existingCookie = Object.keys(headers).reduce((newHeaders, key) => {
193
- if (key.toLowerCase() === 'cookie') {
194
- const cookieValue = headers[key];
195
- // handle if cookie is an array
196
- if (Array.isArray(cookieValue)) {
197
- return { ...newHeaders, cookie: cookieValue.join('; ') };
198
- }
199
- if (cookieValue !== undefined) {
200
- return { ...newHeaders, cookie: cookieValue };
201
- }
202
- }
203
- return newHeaders;
204
- }, {});
205
- const tokenCookie = tokens !== undefined ? { cookie: `_daatv1=${tokens.access}; _dartv1=${tokens.refresh}` } : {};
206
- if (existingCookie.cookie !== undefined && tokenCookie.cookie !== undefined) {
207
- return {
208
- cookie: `${existingCookie.cookie}; ${tokenCookie.cookie}`,
209
- };
210
- }
211
- if (existingCookie.cookie === undefined) {
212
- return tokenCookie;
213
- }
214
- return existingCookie;
215
- }
216
- parseBody(req) {
217
- // if body-parser was used before this middleware the "body" attribute will be set
218
- const exprReq = req;
219
- if (typeof exprReq.body !== 'undefined') {
220
- if (typeof exprReq.body === 'string') {
221
- return Promise.resolve(exprReq.body);
222
- }
223
- return Promise.resolve(JSON.stringify(exprReq.body));
224
- }
225
- return new Promise((resolve) => {
226
- const body = [];
227
- try {
228
- req.on('data', (chunk) => body.push(chunk));
229
- req.on('end', () => {
230
- const raw = Buffer.concat(body).toString();
231
- resolve(raw);
232
- });
233
- req.on('error', () => {
234
- resolve(undefined);
235
- });
236
- }
237
- catch (e) {
238
- resolve(undefined);
239
- }
240
- });
241
- }
242
- verifyLogin(login) {
243
- if (!login.refreshToken) {
244
- throw new Error('Not authenticated. Please login using "domo login"');
245
- }
246
- return login;
247
- }
248
- }
249
- exports.default = Transport;
250
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/Transport/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare const CLIENT_ID = "domo:internal:devstudio";
2
- export declare const OAUTH_ENABLED = "oAuthEnabled";
3
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,4BAA4B,CAAC;AACnD,eAAO,MAAM,aAAa,iBAAiB,CAAC"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OAUTH_ENABLED = exports.CLIENT_ID = void 0;
4
- exports.CLIENT_ID = 'domo:internal:devstudio';
5
- exports.OAUTH_ENABLED = 'oAuthEnabled';
6
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,yBAAyB,CAAC;AACtC,QAAA,aAAa,GAAG,cAAc,CAAC"}
@@ -1,9 +0,0 @@
1
- export type { Manifest } from 'ryuu-client/lib/models';
2
- export interface ProxyOptions {
3
- manifest: import('ryuu-client/lib/models').Manifest;
4
- }
5
- export interface OauthToken {
6
- access: string;
7
- refresh: string;
8
- }
9
- //# sourceMappingURL=models.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/lib/models.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,wBAAwB,EAAE,QAAQ,CAAC;CACrD;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=models.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/lib/models.ts"],"names":[],"mappings":""}
@@ -1,7 +0,0 @@
1
- import { Manifest } from 'ryuu-client/lib/models';
2
- import { OauthToken } from '../models';
3
- export declare function getMostRecentLogin(): Promise<any>;
4
- export declare const isOauthEnabled: (manifest: Manifest) => boolean;
5
- export declare const getProxyId: (manifest: Manifest) => string;
6
- export declare function getOauthTokens(proxyId: string, scopes: string[] | undefined): Promise<OauthToken>;
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,wBAAgB,kBAAkB,iBAWjC;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,QAAQ,KAAG,OAEsB,CAAC;AAE3E,eAAO,MAAM,UAAU,GAAI,UAAU,QAAQ,KAAG,MAA+C,CAAC;AAEhG,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAejG"}
@@ -1,79 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.getProxyId = exports.isOauthEnabled = void 0;
40
- exports.getMostRecentLogin = getMostRecentLogin;
41
- exports.getOauthTokens = getOauthTokens;
42
- const Domo = require("ryuu-client");
43
- const glob_1 = require("glob");
44
- const fs = __importStar(require("fs-extra"));
45
- const configstore_1 = __importDefault(require("configstore"));
46
- const constants_1 = require("../constants");
47
- function getMostRecentLogin() {
48
- const home = Domo.getHomeDir();
49
- const logins = (0, glob_1.globSync)(`${home}/ryuu/*.json`);
50
- if (logins.length === 0)
51
- return Promise.resolve({});
52
- const recent = logins.reduce((prev, next) => (fs.statSync(prev).mtime > fs.statSync(next).mtime ? prev : next));
53
- const loginData = fs.readJsonSync(recent);
54
- const configstore = new configstore_1.default(`/ryuu/${loginData.instance}`);
55
- loginData.refreshToken = configstore.get('refreshToken');
56
- loginData.devToken = configstore.get('devToken');
57
- return Promise.resolve(loginData);
58
- }
59
- const isOauthEnabled = (manifest) => Object.keys(manifest).includes(constants_1.OAUTH_ENABLED) &&
60
- manifest[constants_1.OAUTH_ENABLED] === true;
61
- exports.isOauthEnabled = isOauthEnabled;
62
- const getProxyId = (manifest) => manifest.proxyId ?? Domo.createUUID();
63
- exports.getProxyId = getProxyId;
64
- function getOauthTokens(proxyId, scopes) {
65
- return getMostRecentLogin()
66
- .then((loginData) => {
67
- const configstore = new configstore_1.default(`/ryuu/${loginData.instance}`);
68
- const allScopes = scopes !== undefined ? ['domoapps', ...scopes] : ['domoapps'];
69
- return Promise.all([
70
- configstore.get(`${proxyId}-${allScopes.join('-')}-accessToken`),
71
- configstore.get(`${proxyId}-${allScopes.join('-')}-refreshToken`),
72
- ]);
73
- })
74
- .then((tokens) => ({
75
- access: tokens[0],
76
- refresh: tokens[1],
77
- }));
78
- }
79
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,gDAWC;AAQD,wCAeC;AA3CD,oCAAqC;AACrC,+BAAgC;AAChC,6CAA+B;AAC/B,8DAAsC;AAGtC,4CAA6C;AAG7C,SAAgB,kBAAkB;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAA,eAAQ,EAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChH,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,qBAAW,CAAC,SAAS,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,SAAS,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzD,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC;AAEM,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAW,EAAE,CAC5D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,yBAAa,CAAC;IAC5C,QAA+C,CAAC,yBAAa,CAAC,KAAK,IAAI,CAAC;AAF9D,QAAA,cAAc,kBAEgD;AAEpE,MAAM,UAAU,GAAG,CAAC,QAAkB,EAAU,EAAE,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;AAAnF,QAAA,UAAU,cAAyE;AAEhG,SAAgB,cAAc,CAAC,OAAe,EAAE,MAA4B;IAC1E,OAAO,kBAAkB,EAAE;SACxB,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QAClB,MAAM,WAAW,GAAG,IAAI,qBAAW,CAAC,SAAS,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAEhF,OAAO,OAAO,CAAC,GAAG,CAAC;YACjB,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAW;YAC1E,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAW;SAC5E,CAAC,CAAC;IACL,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,MAAwB,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;KACnB,CAAC,CAAC,CAAC;AACR,CAAC"}