@opexa/portal-sdk 0.59.48 → 0.59.50
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/{chunk-TFG2D5CR.js → chunk-6BZILZI4.js} +82 -46
- package/dist/chunk-6BZILZI4.js.map +1 -0
- package/dist/chunk-JTAO2DVT.js +208 -0
- package/dist/chunk-JTAO2DVT.js.map +1 -0
- package/dist/chunk-WVFSGB7Y.js +43 -0
- package/dist/chunk-WVFSGB7Y.js.map +1 -0
- package/dist/graphql-client-Czq2Pigo.d.cts +58 -0
- package/dist/graphql-client-Czq2Pigo.d.ts +58 -0
- package/dist/index.cjs +94 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -3
- package/dist/index.d.ts +6 -3
- package/dist/index.js +19 -204
- package/dist/index.js.map +1 -1
- package/dist/services/index.cjs +78 -4
- package/dist/services/index.cjs.map +1 -1
- package/dist/services/index.d.cts +5 -3
- package/dist/services/index.d.ts +5 -3
- package/dist/services/index.js +2 -1
- package/dist/{types-DF4cppjz.d.cts → types-BZVQCB0h.d.cts} +35 -57
- package/dist/{types-DF4cppjz.d.ts → types-GXwS5U3c.d.ts} +35 -57
- package/dist/utils/index.cjs +249 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +5 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-TFG2D5CR.js.map +0 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { callIfFn, statusCodeToOperationError } from './chunk-WVFSGB7Y.js';
|
|
2
|
+
|
|
3
|
+
// src/utils/is-plain-object.ts
|
|
4
|
+
function isPlainObject(value) {
|
|
5
|
+
return Object.prototype.toString.call(value) === "[object Object]" && Object(value) === value;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// src/utils/flatten.ts
|
|
9
|
+
function flatten(value) {
|
|
10
|
+
const result = [];
|
|
11
|
+
function fn(o, parentKeys = []) {
|
|
12
|
+
for (const k in o) {
|
|
13
|
+
const v = o[k];
|
|
14
|
+
if (isPlainObject(v)) {
|
|
15
|
+
fn(v, [...parentKeys, k]);
|
|
16
|
+
} else if (Array.isArray(v)) {
|
|
17
|
+
fn(arrayToObject(v), [...parentKeys, k]);
|
|
18
|
+
} else {
|
|
19
|
+
result.push({
|
|
20
|
+
key: [...parentKeys, k],
|
|
21
|
+
value: v
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
fn(value);
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
function arrayToObject(array) {
|
|
30
|
+
return array.reduce((o, v, i) => {
|
|
31
|
+
o[i] = v;
|
|
32
|
+
return o;
|
|
33
|
+
}, {});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// src/utils/graphql-client.ts
|
|
37
|
+
var GraphQLClient = class {
|
|
38
|
+
url;
|
|
39
|
+
config;
|
|
40
|
+
constructor(url, config = {}) {
|
|
41
|
+
this.url = url;
|
|
42
|
+
this.config = config;
|
|
43
|
+
}
|
|
44
|
+
async request(query, variables, userOptions) {
|
|
45
|
+
const config = callIfFn(this.config);
|
|
46
|
+
const options = mergeFetchOptions(
|
|
47
|
+
{
|
|
48
|
+
...config?.fetchOptions,
|
|
49
|
+
headers: new Headers(config?.fetchOptions?.headers)
|
|
50
|
+
},
|
|
51
|
+
userOptions
|
|
52
|
+
);
|
|
53
|
+
const body = JSON.stringify({
|
|
54
|
+
query,
|
|
55
|
+
variables
|
|
56
|
+
});
|
|
57
|
+
const headers = new Headers(options.headers);
|
|
58
|
+
headers.set("Content-Type", "application/json");
|
|
59
|
+
headers.set("Accept", "application/json");
|
|
60
|
+
const url = new URL(this.url);
|
|
61
|
+
const operationInfo = getOperationInfo(query);
|
|
62
|
+
if (operationInfo) {
|
|
63
|
+
url.searchParams.set(`_${operationInfo.type}`, operationInfo.name);
|
|
64
|
+
}
|
|
65
|
+
const req = await this.runMiddlewares(
|
|
66
|
+
new Request(url, {
|
|
67
|
+
...options,
|
|
68
|
+
body,
|
|
69
|
+
headers,
|
|
70
|
+
method: "POST"
|
|
71
|
+
}),
|
|
72
|
+
config?.middlewares ?? []
|
|
73
|
+
);
|
|
74
|
+
return await this.exec(req);
|
|
75
|
+
}
|
|
76
|
+
/** Single file upload */
|
|
77
|
+
async upload(query, variables, options) {
|
|
78
|
+
const cfg = callIfFn(this.config);
|
|
79
|
+
const opts = mergeFetchOptions(
|
|
80
|
+
{
|
|
81
|
+
...cfg?.fetchOptions,
|
|
82
|
+
headers: new Headers(cfg?.fetchOptions?.headers)
|
|
83
|
+
},
|
|
84
|
+
options
|
|
85
|
+
);
|
|
86
|
+
const body = this.createUploadBody(query, variables);
|
|
87
|
+
const headers = new Headers(opts.headers);
|
|
88
|
+
headers.delete("Content-Type");
|
|
89
|
+
const url = new URL(this.url);
|
|
90
|
+
const operationInfo = getOperationInfo(query);
|
|
91
|
+
if (operationInfo) {
|
|
92
|
+
url.searchParams.set(`_${operationInfo.type}`, operationInfo.name);
|
|
93
|
+
}
|
|
94
|
+
const req = await this.runMiddlewares(
|
|
95
|
+
new Request(url, {
|
|
96
|
+
...opts,
|
|
97
|
+
body,
|
|
98
|
+
headers,
|
|
99
|
+
method: "POST"
|
|
100
|
+
}),
|
|
101
|
+
cfg?.middlewares ?? []
|
|
102
|
+
);
|
|
103
|
+
return await this.exec(req);
|
|
104
|
+
}
|
|
105
|
+
async exec(request) {
|
|
106
|
+
const config = callIfFn(this.config);
|
|
107
|
+
const fetch_ = config.fetch ?? fetch;
|
|
108
|
+
try {
|
|
109
|
+
const res = await fetch_(request);
|
|
110
|
+
if (!res.ok) {
|
|
111
|
+
return { ok: false, error: statusCodeToOperationError(res.status) };
|
|
112
|
+
}
|
|
113
|
+
const json = await res.json();
|
|
114
|
+
const data = json.data;
|
|
115
|
+
const error = json.errors?.at(0);
|
|
116
|
+
if (error) {
|
|
117
|
+
if (error.extensions?.code === "FORBIDDEN" || error.extensions?.code === "ACCESS_TOKEN_EXPIRED") {
|
|
118
|
+
return {
|
|
119
|
+
ok: false,
|
|
120
|
+
error: statusCodeToOperationError(403, error.message)
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (error.extensions?.code === "UNAUTHORIZED") {
|
|
124
|
+
return {
|
|
125
|
+
ok: false,
|
|
126
|
+
error: statusCodeToOperationError(401, error.message)
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (error.extensions?.code === "BAD_USER_INPUT" || error.extensions?.code === "BAD_REQUEST") {
|
|
130
|
+
return {
|
|
131
|
+
ok: false,
|
|
132
|
+
error: statusCodeToOperationError(400, error.message)
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
ok: false,
|
|
137
|
+
error: statusCodeToOperationError(500, error.message)
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
ok: true,
|
|
142
|
+
data
|
|
143
|
+
};
|
|
144
|
+
} catch {
|
|
145
|
+
return {
|
|
146
|
+
ok: false,
|
|
147
|
+
error: statusCodeToOperationError(500)
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async runMiddlewares(req, middlewares) {
|
|
152
|
+
let result = req.clone();
|
|
153
|
+
for (const middleware of middlewares) {
|
|
154
|
+
result = await middleware(result);
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
createUploadBody(query, variables) {
|
|
159
|
+
const files = flatten(variables).filter(
|
|
160
|
+
(o) => o.value instanceof File || o.value instanceof Blob
|
|
161
|
+
);
|
|
162
|
+
const body = new FormData();
|
|
163
|
+
body.append(
|
|
164
|
+
"operations",
|
|
165
|
+
JSON.stringify({
|
|
166
|
+
query,
|
|
167
|
+
variables
|
|
168
|
+
})
|
|
169
|
+
);
|
|
170
|
+
const map = {};
|
|
171
|
+
files.forEach((o, i) => {
|
|
172
|
+
map[i.toString()] = [`variables.${o.key.join(".")}`];
|
|
173
|
+
});
|
|
174
|
+
body.append("map", JSON.stringify(map));
|
|
175
|
+
files.forEach((o, i) => {
|
|
176
|
+
body.append(i.toString(), o.value);
|
|
177
|
+
});
|
|
178
|
+
return body;
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
function getOperationInfo(query) {
|
|
182
|
+
const l = query.match(/(query|mutation)\s+(\w+)/);
|
|
183
|
+
if (!l) return null;
|
|
184
|
+
const k = l.at(1);
|
|
185
|
+
const v = l.at(2);
|
|
186
|
+
return k && v ? { type: k, name: v } : null;
|
|
187
|
+
}
|
|
188
|
+
function mergeFetchOptions(i, j) {
|
|
189
|
+
if (!i) return j ?? {};
|
|
190
|
+
if (!j) return i ?? {};
|
|
191
|
+
return {
|
|
192
|
+
...i,
|
|
193
|
+
...j,
|
|
194
|
+
headers: mergeHeaders(i.headers, j.headers)
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function mergeHeaders(i, j) {
|
|
198
|
+
if (!i) return j;
|
|
199
|
+
if (!j) return i;
|
|
200
|
+
const h = new Headers();
|
|
201
|
+
new Headers(i).forEach((v, k) => h.append(k, v));
|
|
202
|
+
new Headers(j).forEach((v, k) => h.append(k, v));
|
|
203
|
+
return h;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export { GraphQLClient, isPlainObject };
|
|
207
|
+
//# sourceMappingURL=chunk-JTAO2DVT.js.map
|
|
208
|
+
//# sourceMappingURL=chunk-JTAO2DVT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/is-plain-object.ts","../src/utils/flatten.ts","../src/utils/graphql-client.ts"],"names":[],"mappings":"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","file":"chunk-JTAO2DVT.js","sourcesContent":["export function isPlainObject(value: unknown): value is Record<string, any> {\r\n\treturn (\r\n\t\tObject.prototype.toString.call(value) === '[object Object]' &&\r\n\t\tObject(value) === value\r\n\t);\r\n}\r\n","import { isPlainObject } from './is-plain-object.js';\r\n\r\nexport function flatten(value: Record<string, any> | any[]) {\r\n\tconst result: {\r\n\t\tkey: string[];\r\n\t\tvalue: any;\r\n\t}[] = [];\r\n\r\n\tfunction fn(o: Record<string, any>, parentKeys: string[] = []) {\r\n\t\tfor (const k in o) {\r\n\t\t\tconst v = o[k];\r\n\r\n\t\t\tif (isPlainObject(v)) {\r\n\t\t\t\tfn(v, [...parentKeys, k]);\r\n\t\t\t} else if (Array.isArray(v)) {\r\n\t\t\t\tfn(arrayToObject(v), [...parentKeys, k]);\r\n\t\t\t} else {\r\n\t\t\t\tresult.push({\r\n\t\t\t\t\tkey: [...parentKeys, k],\r\n\t\t\t\t\tvalue: v,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfn(value);\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction arrayToObject(array: unknown[]) {\r\n\treturn array.reduce<Record<string, any>>((o, v, i) => {\r\n\t\to[i] = v;\r\n\t\treturn o;\r\n\t}, {});\r\n}\r\n","import type { GenericObject, OperationResult } from '../types/index.js';\r\nimport { callIfFn } from './call-if-fn.js';\r\nimport { flatten } from './flatten.js';\r\nimport { statusCodeToOperationError } from './status-code-to-operation-error.js';\r\n\r\ntype ModifiableKey =\r\n\t| 'mode'\r\n\t| 'cache'\r\n\t| 'signal'\r\n\t| 'headers'\r\n\t| 'integrity'\r\n\t| 'keepalive'\r\n\t| 'credentials';\r\n\r\ntype Modifiable = {\r\n\t[K in ModifiableKey]: Request[K];\r\n};\r\n\r\nexport interface ModifiedRequest\r\n\textends Readonly<Omit<Request, ModifiableKey>>,\r\n\t\tModifiable {}\r\n\r\nexport type GraphQLClientMiddleware = (\r\n\trequest: ModifiedRequest,\r\n) => ModifiedRequest | Promise<ModifiedRequest>;\r\n\r\nexport interface GraphQLClientFetchOptions\r\n\textends Omit<RequestInit, 'body' | 'method'> {}\r\n\r\nexport interface GraphQLClientConfig {\r\n\tfetch?: typeof globalThis.fetch | null;\r\n\tfetchOptions?: GraphQLClientFetchOptions;\r\n\tmiddlewares?: GraphQLClientMiddleware[];\r\n}\r\n\r\n/* ref: https://www.apollographql.com/docs/apollo-server/data/errors/#graphql_parse_failed */\r\ntype GraphQLErrorExtensionCode =\r\n\t| 'FORBIDDEN'\r\n\t| 'UNAUTHORIZED'\r\n\t| 'BAD_REQUEST'\r\n\t| 'BAD_USER_INPUT'\r\n\t| 'INTERNAL_SERVER_ERROR'\r\n\t| 'ACCESS_TOKEN_EXPIRED';\r\n\r\ninterface GraphQLErrorExtensions {\r\n\tcode: GraphQLErrorExtensionCode;\r\n\tstacktrace: string[];\r\n}\r\n\r\ninterface GraphQLErrorLocation {\r\n\tline: number;\r\n\tcolumn: number;\r\n}\r\n\r\ninterface GraphQLError {\r\n\tpath: string[];\r\n\tmessage?: string;\r\n\textensions?: GraphQLErrorExtensions;\r\n\tlocations: GraphQLErrorLocation[];\r\n}\r\n\r\ntype Getter<T> = () => T;\r\n\r\nexport class GraphQLClient {\r\n\tprivate url: string;\r\n\tprivate config: Getter<GraphQLClientConfig> | GraphQLClientConfig;\r\n\r\n\tconstructor(\r\n\t\turl: string,\r\n\t\tconfig: Getter<GraphQLClientConfig> | GraphQLClientConfig = {},\r\n\t) {\r\n\t\tthis.url = url;\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\tasync request<Data, Variables extends GenericObject = GenericObject>(\r\n\t\tquery: string,\r\n\t\tvariables?: Variables,\r\n\t\tuserOptions?: GraphQLClientFetchOptions,\r\n\t) {\r\n\t\tconst config = callIfFn(this.config);\r\n\t\tconst options = mergeFetchOptions(\r\n\t\t\t{\r\n\t\t\t\t...config?.fetchOptions,\r\n\t\t\t\theaders: new Headers(config?.fetchOptions?.headers),\r\n\t\t\t},\r\n\t\t\tuserOptions,\r\n\t\t);\r\n\r\n\t\tconst body = JSON.stringify({\r\n\t\t\tquery,\r\n\t\t\tvariables,\r\n\t\t});\r\n\r\n\t\tconst headers = new Headers(options.headers);\r\n\r\n\t\theaders.set('Content-Type', 'application/json');\r\n\t\theaders.set('Accept', 'application/json');\r\n\r\n\t\tconst url = new URL(this.url);\r\n\t\tconst operationInfo = getOperationInfo(query);\r\n\r\n\t\tif (operationInfo) {\r\n\t\t\turl.searchParams.set(`_${operationInfo.type}`, operationInfo.name);\r\n\t\t}\r\n\r\n\t\tconst req = await this.runMiddlewares(\r\n\t\t\tnew Request(url, {\r\n\t\t\t\t...options,\r\n\t\t\t\tbody,\r\n\t\t\t\theaders,\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t}),\r\n\t\t\tconfig?.middlewares ?? [],\r\n\t\t);\r\n\r\n\t\treturn await this.exec<Data>(req);\r\n\t}\r\n\r\n\t/** Single file upload */\r\n\tasync upload<Data, Variables extends GenericObject = GenericObject>(\r\n\t\tquery: string,\r\n\t\tvariables: Variables,\r\n\t\toptions?: GraphQLClientFetchOptions,\r\n\t) {\r\n\t\tconst cfg = callIfFn(this.config);\r\n\t\tconst opts = mergeFetchOptions(\r\n\t\t\t{\r\n\t\t\t\t...cfg?.fetchOptions,\r\n\t\t\t\theaders: new Headers(cfg?.fetchOptions?.headers),\r\n\t\t\t},\r\n\t\t\toptions,\r\n\t\t);\r\n\r\n\t\tconst body = this.createUploadBody(query, variables);\r\n\t\tconst headers = new Headers(opts.headers);\r\n\r\n\t\theaders.delete('Content-Type');\r\n\r\n\t\tconst url = new URL(this.url);\r\n\t\tconst operationInfo = getOperationInfo(query);\r\n\r\n\t\tif (operationInfo) {\r\n\t\t\turl.searchParams.set(`_${operationInfo.type}`, operationInfo.name);\r\n\t\t}\r\n\r\n\t\tconst req = await this.runMiddlewares(\r\n\t\t\tnew Request(url, {\r\n\t\t\t\t...opts,\r\n\t\t\t\tbody,\r\n\t\t\t\theaders,\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t}),\r\n\t\t\tcfg?.middlewares ?? [],\r\n\t\t);\r\n\r\n\t\treturn await this.exec<Data>(req);\r\n\t}\r\n\r\n\tprivate async exec<T>(request: Request): Promise<OperationResult<never, T>> {\r\n\t\tconst config = callIfFn(this.config);\r\n\r\n\t\tconst fetch_ = config.fetch ?? fetch;\r\n\r\n\t\ttry {\r\n\t\t\tconst res = await fetch_(request);\r\n\r\n\t\t\tif (!res.ok) {\r\n\t\t\t\treturn { ok: false, error: statusCodeToOperationError(res.status) };\r\n\t\t\t}\r\n\r\n\t\t\tconst json = await res.json();\r\n\t\t\tconst data = json.data;\r\n\t\t\tconst error = json.errors?.at(0) as GraphQLError | undefined;\r\n\r\n\t\t\tif (error) {\r\n\t\t\t\tif (\r\n\t\t\t\t\terror.extensions?.code === 'FORBIDDEN' ||\r\n\t\t\t\t\terror.extensions?.code === 'ACCESS_TOKEN_EXPIRED'\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tok: false,\r\n\t\t\t\t\t\terror: statusCodeToOperationError(403, error.message),\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (error.extensions?.code === 'UNAUTHORIZED') {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tok: false,\r\n\t\t\t\t\t\terror: statusCodeToOperationError(401, error.message),\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\terror.extensions?.code === 'BAD_USER_INPUT' ||\r\n\t\t\t\t\terror.extensions?.code === 'BAD_REQUEST'\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tok: false,\r\n\t\t\t\t\t\terror: statusCodeToOperationError(400, error.message),\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Fallback for unknown error codes */\r\n\t\t\t\treturn {\r\n\t\t\t\t\tok: false,\r\n\t\t\t\t\terror: statusCodeToOperationError(500, error.message),\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\tok: true,\r\n\t\t\t\tdata,\r\n\t\t\t};\r\n\t\t} catch {\r\n\t\t\treturn {\r\n\t\t\t\tok: false,\r\n\t\t\t\terror: statusCodeToOperationError(500),\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async runMiddlewares(\r\n\t\treq: ModifiedRequest,\r\n\t\tmiddlewares: GraphQLClientMiddleware[],\r\n\t): Promise<ModifiedRequest> {\r\n\t\tlet result = req.clone();\r\n\r\n\t\tfor (const middleware of middlewares) {\r\n\t\t\tresult = await middleware(result);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate createUploadBody<Variables extends GenericObject = GenericObject>(\r\n\t\tquery: string,\r\n\t\tvariables: Variables,\r\n\t) {\r\n\t\tconst files = flatten(variables).filter(\r\n\t\t\t(o) => o.value instanceof File || o.value instanceof Blob,\r\n\t\t);\r\n\r\n\t\tconst body = new FormData();\r\n\r\n\t\tbody.append(\r\n\t\t\t'operations',\r\n\t\t\tJSON.stringify({\r\n\t\t\t\tquery,\r\n\t\t\t\tvariables,\r\n\t\t\t}),\r\n\t\t);\r\n\r\n\t\tconst map: GenericObject = {};\r\n\r\n\t\tfiles.forEach((o, i) => {\r\n\t\t\tmap[i.toString()] = [`variables.${o.key.join('.')}`];\r\n\t\t});\r\n\r\n\t\tbody.append('map', JSON.stringify(map));\r\n\r\n\t\tfiles.forEach((o, i) => {\r\n\t\t\tbody.append(i.toString(), o.value);\r\n\t\t});\r\n\r\n\t\treturn body;\r\n\t}\r\n}\r\n\r\nfunction getOperationInfo(query: string) {\r\n\tconst l = query.match(/(query|mutation)\\s+(\\w+)/);\r\n\r\n\tif (!l) return null;\r\n\r\n\tconst k = l.at(1);\r\n\tconst v = l.at(2);\r\n\r\n\treturn k && v ? { type: k, name: v } : null;\r\n}\r\n\r\nfunction mergeFetchOptions(\r\n\ti: GraphQLClientFetchOptions | undefined,\r\n\tj: GraphQLClientFetchOptions | undefined,\r\n): GraphQLClientFetchOptions {\r\n\tif (!i) return j ?? {};\r\n\tif (!j) return i ?? {};\r\n\r\n\treturn {\r\n\t\t...i,\r\n\t\t...j,\r\n\r\n\t\theaders: mergeHeaders(i.headers, j.headers),\r\n\t};\r\n}\r\n\r\nfunction mergeHeaders(i: HeadersInit | undefined, j: HeadersInit | undefined) {\r\n\tif (!i) return j;\r\n\tif (!j) return i;\r\n\r\n\tconst h = new Headers();\r\n\r\n\tnew Headers(i).forEach((v, k) => h.append(k, v));\r\n\tnew Headers(j).forEach((v, k) => h.append(k, v));\r\n\r\n\treturn h;\r\n}\r\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// src/utils/gql.ts
|
|
2
|
+
function gql(strings, ...values) {
|
|
3
|
+
let result = "";
|
|
4
|
+
for (const [index, string] of strings.entries()) {
|
|
5
|
+
const value = values.at(index) ?? "";
|
|
6
|
+
result = `${result}${string}${value}`;
|
|
7
|
+
}
|
|
8
|
+
return result.trim();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// src/utils/status-code-to-operation-error.ts
|
|
12
|
+
function statusCodeToOperationError(value, message) {
|
|
13
|
+
const e = ERROR_MAP[value] ? ERROR_MAP[value] : ERROR_MAP[500];
|
|
14
|
+
return {
|
|
15
|
+
name: e.name,
|
|
16
|
+
message: message ?? e.message
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
var ERROR_MAP = {
|
|
20
|
+
400: { name: "HttpBadRequest", message: "Bad Request" },
|
|
21
|
+
401: { name: "HttpUnauthorized", message: "Unauthorized" },
|
|
22
|
+
403: { name: "HttpForbidden", message: "Forbidden" },
|
|
23
|
+
404: { name: "HttpNotFound", message: "Not Found" },
|
|
24
|
+
408: { name: "HttpRequestTimeout", message: "Request Timeout" },
|
|
25
|
+
429: { name: "HttpTooManyRequests", message: "Too Many Requests" },
|
|
26
|
+
500: { name: "HttpInternalServerError", message: "Internal Server Error" }
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/utils/call-if-fn.ts
|
|
30
|
+
function isFunction(value) {
|
|
31
|
+
return typeof value === "function";
|
|
32
|
+
}
|
|
33
|
+
function callIfFn(value, ...args) {
|
|
34
|
+
if (isFunction(value)) {
|
|
35
|
+
return value(...args);
|
|
36
|
+
} else {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { callIfFn, gql, statusCodeToOperationError };
|
|
42
|
+
//# sourceMappingURL=chunk-WVFSGB7Y.js.map
|
|
43
|
+
//# sourceMappingURL=chunk-WVFSGB7Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/gql.ts","../src/utils/status-code-to-operation-error.ts","../src/utils/call-if-fn.ts"],"names":[],"mappings":";AAAO,SAAS,GAAA,CAAI,YAAkC,MAAA,EAAmB;AACxE,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,MAAM,CAAA,IAAK,OAAA,CAAQ,SAAQ,EAAG;AAChD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,EAAA,CAAG,KAAK,CAAA,IAAK,EAAA;AAElC,IAAA,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,GAAG,KAAK,CAAA,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,OAAO,IAAA,EAAK;AACpB;;;ACRO,SAAS,0BAAA,CACf,OACA,OAAA,EAC4B;AAC5B,EAAA,MAAM,CAAA,GAAI,UAAU,KAAK,CAAA,GAAI,UAAU,KAAK,CAAA,GAAI,UAAU,GAAG,CAAA;AAE7D,EAAA,OAAO;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAA,EAAS,WAAW,CAAA,CAAE;AAAA,GACvB;AACD;AAEA,IAAM,SAAA,GAAuD;AAAA,EAC5D,GAAA,EAAK,EAAE,IAAA,EAAM,gBAAA,EAAkB,SAAS,aAAA,EAAc;AAAA,EACtD,GAAA,EAAK,EAAE,IAAA,EAAM,kBAAA,EAAoB,SAAS,cAAA,EAAe;AAAA,EACzD,GAAA,EAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAS,WAAA,EAAY;AAAA,EACnD,GAAA,EAAK,EAAE,IAAA,EAAM,cAAA,EAAgB,SAAS,WAAA,EAAY;AAAA,EAClD,GAAA,EAAK,EAAE,IAAA,EAAM,oBAAA,EAAsB,SAAS,iBAAA,EAAkB;AAAA,EAC9D,GAAA,EAAK,EAAE,IAAA,EAAM,qBAAA,EAAuB,SAAS,mBAAA,EAAoB;AAAA,EACjE,GAAA,EAAK,EAAE,IAAA,EAAM,yBAAA,EAA2B,SAAS,uBAAA;AAClD,CAAA;;;ACtBA,SAAS,WACR,KAAA,EACuC;AACvC,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA;AACzB;AAEO,SAAS,QAAA,CACf,UACG,IAAA,EACF;AACD,EAAA,IAAI,UAAA,CAAyB,KAAK,CAAA,EAAG;AACpC,IAAA,OAAO,KAAA,CAAM,GAAG,IAAI,CAAA;AAAA,EACrB,CAAA,MAAO;AACN,IAAA,OAAO,KAAA;AAAA,EACR;AACD","file":"chunk-WVFSGB7Y.js","sourcesContent":["export function gql(strings: TemplateStringsArray, ...values: unknown[]) {\r\n\tlet result = '';\r\n\r\n\tfor (const [index, string] of strings.entries()) {\r\n\t\tconst value = values.at(index) ?? '';\r\n\r\n\t\tresult = `${result}${string}${value}`;\r\n\t}\r\n\r\n\treturn result.trim();\r\n}\r\n","import type { HttpError, OperationError } from '../types/index.js';\r\n\r\nexport function statusCodeToOperationError(\r\n\tvalue: number,\r\n\tmessage?: string,\r\n): OperationError<HttpError> {\r\n\tconst e = ERROR_MAP[value] ? ERROR_MAP[value] : ERROR_MAP[500];\r\n\r\n\treturn {\r\n\t\tname: e.name,\r\n\t\tmessage: message ?? e.message,\r\n\t};\r\n}\r\n\r\nconst ERROR_MAP: Record<number, OperationError<HttpError>> = {\r\n\t400: { name: 'HttpBadRequest', message: 'Bad Request' },\r\n\t401: { name: 'HttpUnauthorized', message: 'Unauthorized' },\r\n\t403: { name: 'HttpForbidden', message: 'Forbidden' },\r\n\t404: { name: 'HttpNotFound', message: 'Not Found' },\r\n\t408: { name: 'HttpRequestTimeout', message: 'Request Timeout' },\r\n\t429: { name: 'HttpTooManyRequests', message: 'Too Many Requests' },\r\n\t500: { name: 'HttpInternalServerError', message: 'Internal Server Error' },\r\n};\r\n","function isFunction<Return, Args = never>(\r\n\tvalue: unknown | ((...args: Args[]) => Return),\r\n): value is (...args: Args[]) => Return {\r\n\treturn typeof value === 'function';\r\n}\r\n\r\nexport function callIfFn<Return, Args = never>(\r\n\tvalue: Return | ((...args: Args[]) => Return),\r\n\t...args: Args[]\r\n) {\r\n\tif (isFunction<Return, Args>(value)) {\r\n\t\treturn value(...args);\r\n\t} else {\r\n\t\treturn value;\r\n\t}\r\n}\r\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
type GenericObject = Record<string, any>;
|
|
2
|
+
type Assign<Target, Source> = Omit<Target, keyof Source> & Source;
|
|
3
|
+
type Alias<T> = T & {
|
|
4
|
+
_?: never;
|
|
5
|
+
};
|
|
6
|
+
type HttpError = /* 400 */ 'HttpBadRequest' | /* 401 */ 'HttpUnauthorized' | /* 403 */ 'HttpForbidden' | /* 404 */ 'HttpNotFound' | /* 408 */ 'HttpRequestTimeout' | /* 429 */ 'HttpTooManyRequests' | /* 500 */ 'HttpInternalServerError';
|
|
7
|
+
type OperationError<T extends string = string> = {
|
|
8
|
+
name: T;
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
type OperationResult<Error extends string = never, Data = never> = [
|
|
12
|
+
Data
|
|
13
|
+
] extends [never] ? {
|
|
14
|
+
ok: false;
|
|
15
|
+
data?: never;
|
|
16
|
+
error: [Error] extends [never] ? OperationError<HttpError | 'UnknownError'> : OperationError<Error> | OperationError<HttpError | 'UnknownError'>;
|
|
17
|
+
} | {
|
|
18
|
+
ok: true;
|
|
19
|
+
data?: never;
|
|
20
|
+
error?: never;
|
|
21
|
+
} : {
|
|
22
|
+
ok: false;
|
|
23
|
+
data?: never;
|
|
24
|
+
error: [Error] extends [never] ? OperationError<HttpError | 'UnknownError'> : OperationError<Error> | OperationError<HttpError | 'UnknownError'>;
|
|
25
|
+
} | {
|
|
26
|
+
ok: true;
|
|
27
|
+
data: Data;
|
|
28
|
+
error?: never;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
type ModifiableKey = 'mode' | 'cache' | 'signal' | 'headers' | 'integrity' | 'keepalive' | 'credentials';
|
|
32
|
+
type Modifiable = {
|
|
33
|
+
[K in ModifiableKey]: Request[K];
|
|
34
|
+
};
|
|
35
|
+
interface ModifiedRequest extends Readonly<Omit<Request, ModifiableKey>>, Modifiable {
|
|
36
|
+
}
|
|
37
|
+
type GraphQLClientMiddleware = (request: ModifiedRequest) => ModifiedRequest | Promise<ModifiedRequest>;
|
|
38
|
+
interface GraphQLClientFetchOptions extends Omit<RequestInit, 'body' | 'method'> {
|
|
39
|
+
}
|
|
40
|
+
interface GraphQLClientConfig {
|
|
41
|
+
fetch?: typeof globalThis.fetch | null;
|
|
42
|
+
fetchOptions?: GraphQLClientFetchOptions;
|
|
43
|
+
middlewares?: GraphQLClientMiddleware[];
|
|
44
|
+
}
|
|
45
|
+
type Getter<T> = () => T;
|
|
46
|
+
declare class GraphQLClient {
|
|
47
|
+
private url;
|
|
48
|
+
private config;
|
|
49
|
+
constructor(url: string, config?: Getter<GraphQLClientConfig> | GraphQLClientConfig);
|
|
50
|
+
request<Data, Variables extends GenericObject = GenericObject>(query: string, variables?: Variables, userOptions?: GraphQLClientFetchOptions): Promise<OperationResult<never, Data>>;
|
|
51
|
+
/** Single file upload */
|
|
52
|
+
upload<Data, Variables extends GenericObject = GenericObject>(query: string, variables: Variables, options?: GraphQLClientFetchOptions): Promise<OperationResult<never, Data>>;
|
|
53
|
+
private exec;
|
|
54
|
+
private runMiddlewares;
|
|
55
|
+
private createUploadBody;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { type Assign as A, type GraphQLClientMiddleware as G, type HttpError as H, type ModifiedRequest as M, type OperationError as O, type OperationResult as a, GraphQLClient as b, type Alias as c, type GraphQLClientFetchOptions as d, type GraphQLClientConfig as e };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
type GenericObject = Record<string, any>;
|
|
2
|
+
type Assign<Target, Source> = Omit<Target, keyof Source> & Source;
|
|
3
|
+
type Alias<T> = T & {
|
|
4
|
+
_?: never;
|
|
5
|
+
};
|
|
6
|
+
type HttpError = /* 400 */ 'HttpBadRequest' | /* 401 */ 'HttpUnauthorized' | /* 403 */ 'HttpForbidden' | /* 404 */ 'HttpNotFound' | /* 408 */ 'HttpRequestTimeout' | /* 429 */ 'HttpTooManyRequests' | /* 500 */ 'HttpInternalServerError';
|
|
7
|
+
type OperationError<T extends string = string> = {
|
|
8
|
+
name: T;
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
type OperationResult<Error extends string = never, Data = never> = [
|
|
12
|
+
Data
|
|
13
|
+
] extends [never] ? {
|
|
14
|
+
ok: false;
|
|
15
|
+
data?: never;
|
|
16
|
+
error: [Error] extends [never] ? OperationError<HttpError | 'UnknownError'> : OperationError<Error> | OperationError<HttpError | 'UnknownError'>;
|
|
17
|
+
} | {
|
|
18
|
+
ok: true;
|
|
19
|
+
data?: never;
|
|
20
|
+
error?: never;
|
|
21
|
+
} : {
|
|
22
|
+
ok: false;
|
|
23
|
+
data?: never;
|
|
24
|
+
error: [Error] extends [never] ? OperationError<HttpError | 'UnknownError'> : OperationError<Error> | OperationError<HttpError | 'UnknownError'>;
|
|
25
|
+
} | {
|
|
26
|
+
ok: true;
|
|
27
|
+
data: Data;
|
|
28
|
+
error?: never;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
type ModifiableKey = 'mode' | 'cache' | 'signal' | 'headers' | 'integrity' | 'keepalive' | 'credentials';
|
|
32
|
+
type Modifiable = {
|
|
33
|
+
[K in ModifiableKey]: Request[K];
|
|
34
|
+
};
|
|
35
|
+
interface ModifiedRequest extends Readonly<Omit<Request, ModifiableKey>>, Modifiable {
|
|
36
|
+
}
|
|
37
|
+
type GraphQLClientMiddleware = (request: ModifiedRequest) => ModifiedRequest | Promise<ModifiedRequest>;
|
|
38
|
+
interface GraphQLClientFetchOptions extends Omit<RequestInit, 'body' | 'method'> {
|
|
39
|
+
}
|
|
40
|
+
interface GraphQLClientConfig {
|
|
41
|
+
fetch?: typeof globalThis.fetch | null;
|
|
42
|
+
fetchOptions?: GraphQLClientFetchOptions;
|
|
43
|
+
middlewares?: GraphQLClientMiddleware[];
|
|
44
|
+
}
|
|
45
|
+
type Getter<T> = () => T;
|
|
46
|
+
declare class GraphQLClient {
|
|
47
|
+
private url;
|
|
48
|
+
private config;
|
|
49
|
+
constructor(url: string, config?: Getter<GraphQLClientConfig> | GraphQLClientConfig);
|
|
50
|
+
request<Data, Variables extends GenericObject = GenericObject>(query: string, variables?: Variables, userOptions?: GraphQLClientFetchOptions): Promise<OperationResult<never, Data>>;
|
|
51
|
+
/** Single file upload */
|
|
52
|
+
upload<Data, Variables extends GenericObject = GenericObject>(query: string, variables: Variables, options?: GraphQLClientFetchOptions): Promise<OperationResult<never, Data>>;
|
|
53
|
+
private exec;
|
|
54
|
+
private runMiddlewares;
|
|
55
|
+
private createUploadBody;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { type Assign as A, type GraphQLClientMiddleware as G, type HttpError as H, type ModifiedRequest as M, type OperationError as O, type OperationResult as a, GraphQLClient as b, type Alias as c, type GraphQLClientFetchOptions as d, type GraphQLClientConfig as e };
|
package/dist/index.cjs
CHANGED
|
@@ -1619,15 +1619,44 @@ var CASHBACKS_QUERY = gql`
|
|
|
1619
1619
|
}
|
|
1620
1620
|
`;
|
|
1621
1621
|
var PROMOS_AND_CASHBACKS_QUERY = gql`
|
|
1622
|
-
${
|
|
1623
|
-
${PROMO_FRAGMENT}
|
|
1622
|
+
${FILE_FRAGMENT}
|
|
1624
1623
|
|
|
1625
1624
|
query PromosAndCashbacks {
|
|
1626
1625
|
cashbacks {
|
|
1627
|
-
|
|
1626
|
+
id
|
|
1627
|
+
name
|
|
1628
|
+
banner {
|
|
1629
|
+
...FileFragment
|
|
1630
|
+
}
|
|
1631
|
+
minimumCashback
|
|
1632
|
+
maximumMonthlyCashback
|
|
1633
|
+
status
|
|
1634
|
+
description
|
|
1635
|
+
activationStartDateTime
|
|
1636
|
+
activationEndDateTime
|
|
1637
|
+
turnoverContributionPercentagePerGameProvider
|
|
1638
|
+
dateTimeCreated
|
|
1639
|
+
dateTimeLastUpdated
|
|
1628
1640
|
}
|
|
1629
1641
|
promos {
|
|
1630
|
-
|
|
1642
|
+
id
|
|
1643
|
+
type
|
|
1644
|
+
name
|
|
1645
|
+
banner {
|
|
1646
|
+
...FileFragment
|
|
1647
|
+
}
|
|
1648
|
+
status
|
|
1649
|
+
description
|
|
1650
|
+
maximumBonusAmount
|
|
1651
|
+
minimumBonusAmount
|
|
1652
|
+
maximumDepositAmount
|
|
1653
|
+
minimumDepositAmount
|
|
1654
|
+
depositBonusAmountPercentage
|
|
1655
|
+
activationStartDateTime
|
|
1656
|
+
turnoverRequirementContributionPercentagePerGameProvider
|
|
1657
|
+
activationEndDateTime
|
|
1658
|
+
dateTimeCreated
|
|
1659
|
+
dateTimeLastUpdated
|
|
1631
1660
|
}
|
|
1632
1661
|
}
|
|
1633
1662
|
`;
|
|
@@ -3276,6 +3305,34 @@ var WALLET_GAMES_QUERY = gql`
|
|
|
3276
3305
|
}
|
|
3277
3306
|
}
|
|
3278
3307
|
`;
|
|
3308
|
+
var PLATFORM_GAMES_QUERY = gql`
|
|
3309
|
+
query PlatformGames($first: Int, $after: Cursor, $filter: _GameFilterInput) {
|
|
3310
|
+
_games(first: $first, after: $after, filter: $filter) {
|
|
3311
|
+
totalCount
|
|
3312
|
+
pageInfo {
|
|
3313
|
+
hasNextPage
|
|
3314
|
+
endCursor
|
|
3315
|
+
}
|
|
3316
|
+
edges {
|
|
3317
|
+
cursor
|
|
3318
|
+
node {
|
|
3319
|
+
... on _Game {
|
|
3320
|
+
id
|
|
3321
|
+
reference
|
|
3322
|
+
name
|
|
3323
|
+
displayName
|
|
3324
|
+
type
|
|
3325
|
+
provider
|
|
3326
|
+
status
|
|
3327
|
+
hidden
|
|
3328
|
+
hasFreeBet
|
|
3329
|
+
hasJackpot
|
|
3330
|
+
}
|
|
3331
|
+
}
|
|
3332
|
+
}
|
|
3333
|
+
}
|
|
3334
|
+
}
|
|
3335
|
+
`;
|
|
3279
3336
|
var GOOGLE_CLIEND_ID_QUERY = gql`
|
|
3280
3337
|
query GoogleClientId {
|
|
3281
3338
|
googleClientId
|
|
@@ -6203,6 +6260,23 @@ var WalletService = class {
|
|
|
6203
6260
|
data: res.data.games
|
|
6204
6261
|
};
|
|
6205
6262
|
}
|
|
6263
|
+
async platformGames(variables) {
|
|
6264
|
+
const res = await this.client.request(PLATFORM_GAMES_QUERY, variables);
|
|
6265
|
+
if (!res.ok) return res;
|
|
6266
|
+
if (!res.data._games) {
|
|
6267
|
+
return {
|
|
6268
|
+
ok: false,
|
|
6269
|
+
error: {
|
|
6270
|
+
name: "UnknownError",
|
|
6271
|
+
message: "Something went wrong."
|
|
6272
|
+
}
|
|
6273
|
+
};
|
|
6274
|
+
}
|
|
6275
|
+
return {
|
|
6276
|
+
ok: true,
|
|
6277
|
+
data: res.data._games
|
|
6278
|
+
};
|
|
6279
|
+
}
|
|
6206
6280
|
async cabinetWithdrawal(variables) {
|
|
6207
6281
|
const res = await this.client.request(CABINET_WITHDRAWAL_QUERY, variables);
|
|
6208
6282
|
return res.ok ? { ok: res.ok, data: res.data.node } : res;
|
|
@@ -11079,6 +11153,22 @@ var Sdk = class {
|
|
|
11079
11153
|
}
|
|
11080
11154
|
};
|
|
11081
11155
|
}
|
|
11156
|
+
async platformGames(input) {
|
|
11157
|
+
const res = await this.walletService.platformGames(input);
|
|
11158
|
+
if (!res.ok) return res;
|
|
11159
|
+
return {
|
|
11160
|
+
ok: true,
|
|
11161
|
+
data: {
|
|
11162
|
+
platformGames: res.data.edges.map(({ cursor, node }) => ({
|
|
11163
|
+
...node,
|
|
11164
|
+
cursor
|
|
11165
|
+
})),
|
|
11166
|
+
totalCount: res.data.totalCount,
|
|
11167
|
+
hasNextPage: res.data.pageInfo.hasNextPage,
|
|
11168
|
+
endCursor: res.data.pageInfo.endCursor ?? void 0
|
|
11169
|
+
}
|
|
11170
|
+
};
|
|
11171
|
+
}
|
|
11082
11172
|
async games__next(input) {
|
|
11083
11173
|
const res = await this.cmsPortalService.games__next(input);
|
|
11084
11174
|
if (!res.ok) return res;
|