@carddb/browser 0.1.1 → 0.1.3
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/browser/index.js +159 -31
- package/dist/browser/index.js.map +1 -1
- package/package.json +3 -3
package/dist/browser/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";this.storage=r==="sessionStorage"?globalThis.sessionStorage:globalThis.localStorage,this.prefix=t.prefix??"carddb:";}get(t){try{let r=this.storage.getItem(this.prefix+t);if(!r)return null;let s=JSON.parse(r);return s.expiresAt!==null&&Date.now()>s.expiresAt?(this.storage.removeItem(this.prefix+t),null):s.value}catch{return this.storage.removeItem(this.prefix+t),null}}set(t,r,s){try{let i={value:r,expiresAt:s!==void 0?Date.now()+s*1e3:null};this.storage.setItem(this.prefix+t,JSON.stringify(i));}catch(i){console.warn("[CardDB] Failed to write to cache:",i);}}delete(t){this.storage.removeItem(this.prefix+t);}clear(){let t=[];for(let r=0;r<this.storage.length;r++){let s=this.storage.key(r);s&&s.startsWith(this.prefix)&&t.push(s);}for(let r of t)this.storage.removeItem(r);}has(t){return this.get(t)!==null}get size(){let t=0;for(let r=0;r<this.storage.length;r++){let s=this.storage.key(r);s&&s.startsWith(this.prefix)&&t++;}return t}cleanup(){let t=Date.now(),r=[];for(let s=0;s<this.storage.length;s++){let i=this.storage.key(s);if(i&&i.startsWith(this.prefix))try{let a=this.storage.getItem(i);if(a){let n=JSON.parse(a);n.expiresAt!==null&&t>n.expiresAt&&r.push(i);}}catch{r.push(i);}}for(let s of r)this.storage.removeItem(s);}};var
|
|
1
|
+
var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";this.storage=r==="sessionStorage"?globalThis.sessionStorage:globalThis.localStorage,this.prefix=t.prefix??"carddb:";}get(t){try{let r=this.storage.getItem(this.prefix+t);if(!r)return null;let s=JSON.parse(r);return s.expiresAt!==null&&Date.now()>s.expiresAt?(this.storage.removeItem(this.prefix+t),null):s.value}catch{return this.storage.removeItem(this.prefix+t),null}}set(t,r,s){try{let i={value:r,expiresAt:s!==void 0?Date.now()+s*1e3:null};this.storage.setItem(this.prefix+t,JSON.stringify(i));}catch(i){console.warn("[CardDB] Failed to write to cache:",i);}}delete(t){this.storage.removeItem(this.prefix+t);}clear(){let t=[];for(let r=0;r<this.storage.length;r++){let s=this.storage.key(r);s&&s.startsWith(this.prefix)&&t.push(s);}for(let r of t)this.storage.removeItem(r);}has(t){return this.get(t)!==null}get size(){let t=0;for(let r=0;r<this.storage.length;r++){let s=this.storage.key(r);s&&s.startsWith(this.prefix)&&t++;}return t}cleanup(){let t=Date.now(),r=[];for(let s=0;s<this.storage.length;s++){let i=this.storage.key(s);if(i&&i.startsWith(this.prefix))try{let a=this.storage.getItem(i);if(a){let n=JSON.parse(a);n.expiresAt!==null&&t>n.expiresAt&&r.push(i);}}catch{r.push(i);}}for(let s of r)this.storage.removeItem(s);}};var l=class L extends Error{response;constructor(t,r){super(t),this.name="CardDBError",this.response=r,Error.captureStackTrace&&Error.captureStackTrace(this,L);}},D=class extends l{constructor(e="Invalid or missing API key",t){super(e,t),this.name="AuthenticationError";}},b=class extends l{retryAfter;limit;remaining;resetAt;constructor(e="Rate limit exceeded",t={}){super(e,t.response),this.name="RateLimitError",this.retryAfter=t.retryAfter??null,this.limit=t.limit??null,this.remaining=t.remaining??null,this.resetAt=t.resetAt??null;}},ye=class extends l{constructor(e="Resource not found",t){super(e,t),this.name="NotFoundError";}},R=class extends l{errors;constructor(e="Validation error",t={}){super(e,t.response),this.name="ValidationError",this.errors=t.errors??[];}},x=class extends l{constructor(e,t){super(e,t),this.name="RestrictedError";}},B=class extends l{errors;constructor(e="GraphQL error",t={}){super(e,t.response),this.name="GraphQLError",this.errors=t.errors??[];}},k=class extends l{constructor(e="Connection error",t){super(e,t),this.name="ConnectionError";}},S=class extends k{constructor(e="Request timed out",t){super(e,t),this.name="TimeoutError";}},I=class extends l{status;constructor(e="Server error",t={}){super(e,t.response),this.name="ServerError",this.status=t.status??null;}},ge=class extends l{failures;partialResults;constructor(e="Some links could not be resolved",t={}){super(e,t.response),this.name="LinkResolutionError",this.failures=t.failures??[],this.partialResults=t.partialResults;}getFailuresForField(e){return this.failures.filter(t=>t.field===e)}hasFailuresForField(e){return this.failures.some(t=>t.field===e)}};function me(e){return {eq:e}}function ke(e){return {neq:e}}function we(e){return {gt:e}}function ve(e){return {gte:e}}function pe(e){return {lt:e}}function be(e){return {lte:e}}function $e(e){return {in:e}}function De(e){return {nin:e}}function Re(e){return {contains:e}}function xe(e){return {like:e}}function Se(e){return {ilike:e}}function Ie(){return {is_null:true}}function Ce(){return {is_null:false}}var M=class A{conditions=[];orGroups=[];where(t,r){if(typeof t=="string")this.conditions.push({[t]:r});else for(let[s,i]of Object.entries(t))this.conditions.push({[s]:i});return this}any(t){let r=new A;t(r);let s=r.getConditions();return s.length>0&&this.orGroups.push({$or:s}),this}whereLink(t,r){let s={};for(let[i,a]of Object.entries(r))s[i]=a;return this.conditions.push({[`${t}._link`]:s}),this}whereAny(t,r){let s={};for(let[i,a]of Object.entries(r))s[i]=a;return this.conditions.push({[`${t}._any`]:s}),this}getConditions(){return this.conditions}build(){let t=[...this.conditions,...this.orGroups];return t.length===0?{}:t.length===1?t[0]:{$and:t}}};function C(e){if(e!==void 0){if(typeof e=="function"){let t=new M;e(t);let r=t.build();return Object.keys(r).length>0?r:void 0}return Object.keys(e).length>0?e:void 0}}var w=`
|
|
2
2
|
id
|
|
3
3
|
name
|
|
4
4
|
slug
|
|
@@ -61,7 +61,7 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
61
61
|
key
|
|
62
62
|
name
|
|
63
63
|
}
|
|
64
|
-
`,
|
|
64
|
+
`,T=`
|
|
65
65
|
schema {
|
|
66
66
|
fields {
|
|
67
67
|
key
|
|
@@ -74,6 +74,7 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
74
74
|
isIdentifier
|
|
75
75
|
itemType
|
|
76
76
|
displayFormat
|
|
77
|
+
semanticType
|
|
77
78
|
allowedValues
|
|
78
79
|
nestedFields {
|
|
79
80
|
key
|
|
@@ -84,6 +85,7 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
84
85
|
filterable
|
|
85
86
|
searchable
|
|
86
87
|
itemType
|
|
88
|
+
semanticType
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
filterableFields
|
|
@@ -96,7 +98,7 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
96
98
|
targetDatasetId
|
|
97
99
|
}
|
|
98
100
|
}
|
|
99
|
-
`,
|
|
101
|
+
`,f=`
|
|
100
102
|
id
|
|
101
103
|
datasetId
|
|
102
104
|
data
|
|
@@ -109,11 +111,61 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
109
111
|
gameId
|
|
110
112
|
publisherId
|
|
111
113
|
}
|
|
112
|
-
`,
|
|
114
|
+
`,p=`
|
|
115
|
+
id
|
|
116
|
+
deckId
|
|
117
|
+
versionNumber
|
|
118
|
+
slug
|
|
119
|
+
identifier
|
|
120
|
+
title
|
|
121
|
+
description
|
|
122
|
+
formatKey
|
|
123
|
+
visibility
|
|
124
|
+
externalRef
|
|
125
|
+
sourceUrl
|
|
126
|
+
metadata
|
|
127
|
+
publishNote
|
|
128
|
+
computedDiff
|
|
129
|
+
publishedByAccountId
|
|
130
|
+
publishedByApiApplicationId
|
|
131
|
+
createdAt
|
|
132
|
+
entries {
|
|
133
|
+
id
|
|
134
|
+
datasetId
|
|
135
|
+
recordId
|
|
136
|
+
identifier
|
|
137
|
+
quantity
|
|
138
|
+
section
|
|
139
|
+
sortOrder
|
|
140
|
+
annotations
|
|
141
|
+
record {
|
|
142
|
+
${f}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
`,K=`
|
|
146
|
+
id
|
|
147
|
+
deckId
|
|
148
|
+
accountId
|
|
149
|
+
role
|
|
150
|
+
createdByAccountId
|
|
151
|
+
createdAt
|
|
152
|
+
updatedAt
|
|
153
|
+
`,q=`
|
|
154
|
+
id
|
|
155
|
+
deckId
|
|
156
|
+
label
|
|
157
|
+
expiresAt
|
|
158
|
+
revokedAt
|
|
159
|
+
lastUsedAt
|
|
160
|
+
createdAt
|
|
161
|
+
updatedAt
|
|
162
|
+
`,d=`
|
|
113
163
|
id
|
|
114
164
|
accountId
|
|
115
165
|
apiApplicationId
|
|
116
166
|
gameId
|
|
167
|
+
slug
|
|
168
|
+
identifier
|
|
117
169
|
title
|
|
118
170
|
description
|
|
119
171
|
formatKey
|
|
@@ -121,6 +173,11 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
121
173
|
externalRef
|
|
122
174
|
sourceUrl
|
|
123
175
|
metadata
|
|
176
|
+
latestPublishedVersion {
|
|
177
|
+
${p}
|
|
178
|
+
}
|
|
179
|
+
publishedAt
|
|
180
|
+
hasUnpublishedChanges
|
|
124
181
|
createdAt
|
|
125
182
|
updatedAt
|
|
126
183
|
game {
|
|
@@ -136,10 +193,10 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
136
193
|
sortOrder
|
|
137
194
|
annotations
|
|
138
195
|
record {
|
|
139
|
-
${
|
|
196
|
+
${f}
|
|
140
197
|
}
|
|
141
198
|
}
|
|
142
|
-
`,
|
|
199
|
+
`,_=`
|
|
143
200
|
resolvedLinks {
|
|
144
201
|
field
|
|
145
202
|
linkFieldKey
|
|
@@ -150,7 +207,7 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
150
207
|
data
|
|
151
208
|
}
|
|
152
209
|
}
|
|
153
|
-
`;function
|
|
210
|
+
`;function y(e){return `
|
|
154
211
|
totalCount
|
|
155
212
|
pageInfo {
|
|
156
213
|
hasNextPage
|
|
@@ -164,34 +221,34 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
164
221
|
${e}
|
|
165
222
|
}
|
|
166
223
|
}
|
|
167
|
-
`}var
|
|
224
|
+
`}var c={searchPublishers(e={}){let t={},r=[],s=[];e.search!==void 0&&(s.push("$search: String"),r.push("search: $search"),t.search=e.search),e.first!==void 0&&(s.push("$first: Int"),r.push("first: $first"),t.first=e.first),e.after!==void 0&&(s.push("$after: String"),r.push("after: $after"),t.after=e.after);let i=s.length>0?`(${s.join(", ")})`:"",a=r.length>0?`(${r.join(", ")})`:"";return {query:`
|
|
168
225
|
query SearchPublishers${i} {
|
|
169
226
|
searchPublishers${a} {
|
|
170
|
-
${
|
|
227
|
+
${y(w)}
|
|
171
228
|
}
|
|
172
229
|
}
|
|
173
230
|
`,variables:t}},fetchPublisherById(){return {query:`
|
|
174
231
|
query FetchPublisher($id: UUID!) {
|
|
175
232
|
fetchPublisher(id: $id) {
|
|
176
|
-
${
|
|
233
|
+
${w}
|
|
177
234
|
}
|
|
178
235
|
}
|
|
179
236
|
`}},fetchPublisherBySlug(){return {query:`
|
|
180
237
|
query FetchPublisher($slug: String!) {
|
|
181
238
|
fetchPublisher(slug: $slug) {
|
|
182
|
-
${
|
|
239
|
+
${w}
|
|
183
240
|
}
|
|
184
241
|
}
|
|
185
242
|
`}},fetchPublishers(){return {query:`
|
|
186
243
|
query FetchPublishers($slugs: [String!]!) {
|
|
187
244
|
fetchPublishers(slugs: $slugs) {
|
|
188
|
-
${
|
|
245
|
+
${w}
|
|
189
246
|
}
|
|
190
247
|
}
|
|
191
248
|
`}},searchGames(e={}){let t={},r=[],s=[];e.publisherSlug!==void 0&&(s.push("$publisherSlug: String"),r.push("publisherSlug: $publisherSlug"),t.publisherSlug=e.publisherSlug),e.search!==void 0&&(s.push("$search: String"),r.push("search: $search"),t.search=e.search),e.first!==void 0&&(s.push("$first: Int"),r.push("first: $first"),t.first=e.first),e.after!==void 0&&(s.push("$after: String"),r.push("after: $after"),t.after=e.after);let i=s.length>0?`(${s.join(", ")})`:"",a=r.length>0?`(${r.join(", ")})`:"";return {query:`
|
|
192
249
|
query SearchGames${i} {
|
|
193
250
|
searchGames${a} {
|
|
194
|
-
${
|
|
251
|
+
${y(m)}
|
|
195
252
|
}
|
|
196
253
|
}
|
|
197
254
|
`,variables:t}},fetchGameById(){return {query:`
|
|
@@ -215,21 +272,21 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
215
272
|
`}},searchDatasets(e={}){let t={},r=[],s=[];e.publisherSlug!==void 0&&(s.push("$publisherSlug: String"),r.push("publisherSlug: $publisherSlug"),t.publisherSlug=e.publisherSlug),e.gameKey!==void 0&&(s.push("$gameKey: String"),r.push("gameKey: $gameKey"),t.gameKey=e.gameKey),e.search!==void 0&&(s.push("$search: String"),r.push("search: $search"),t.search=e.search),e.purpose!==void 0&&(s.push("$purpose: DatasetPurpose"),r.push("purpose: $purpose"),t.purpose=e.purpose),e.first!==void 0&&(s.push("$first: Int"),r.push("first: $first"),t.first=e.first),e.after!==void 0&&(s.push("$after: String"),r.push("after: $after"),t.after=e.after);let i=s.length>0?`(${s.join(", ")})`:"",a=r.length>0?`(${r.join(", ")})`:"";return {query:`
|
|
216
273
|
query SearchDatasets${i} {
|
|
217
274
|
searchDatasets${a} {
|
|
218
|
-
${
|
|
275
|
+
${y(v)}
|
|
219
276
|
}
|
|
220
277
|
}
|
|
221
278
|
`,variables:t}},fetchDatasetById(){return {query:`
|
|
222
279
|
query FetchDataset($id: UUID!) {
|
|
223
280
|
fetchDataset(id: $id) {
|
|
224
281
|
${v}
|
|
225
|
-
${
|
|
282
|
+
${T}
|
|
226
283
|
}
|
|
227
284
|
}
|
|
228
285
|
`}},fetchDatasetByKeys(){return {query:`
|
|
229
286
|
query FetchDataset($publisherSlug: String!, $gameKey: String!, $datasetKey: String!) {
|
|
230
287
|
fetchDataset(publisherSlug: $publisherSlug, gameKey: $gameKey, datasetKey: $datasetKey) {
|
|
231
288
|
${v}
|
|
232
|
-
${
|
|
289
|
+
${T}
|
|
233
290
|
}
|
|
234
291
|
}
|
|
235
292
|
`}},fetchDatasets(){return {query:`
|
|
@@ -238,72 +295,143 @@ var $=class{storage;prefix;constructor(t={}){let r=t.storage??"localStorage";thi
|
|
|
238
295
|
${v}
|
|
239
296
|
}
|
|
240
297
|
}
|
|
241
|
-
`}},searchRecords(e){let t={publisherSlug:e.publisherSlug,gameKey:e.gameKey,datasetKey:e.datasetKey},r=["publisherSlug: $publisherSlug","gameKey: $gameKey","datasetKey: $datasetKey"],s=["$publisherSlug: String!","$gameKey: String!","$datasetKey: String!"];e.filter!==void 0&&(s.push("$filter: JSON"),r.push("filter: $filter"),t.filter=e.filter),e.search!==void 0&&(s.push("$search: String"),r.push("search: $search"),t.search=e.search),e.orderBy!==void 0&&(s.push("$orderBy: String"),r.push("orderBy: $orderBy"),t.orderBy=e.orderBy),e.resolveLinks!==void 0&&(s.push("$resolveLinks: [String!]"),r.push("resolveLinks: $resolveLinks"),t.resolveLinks=e.resolveLinks),e.first!==void 0&&(s.push("$first: Int"),r.push("first: $first"),t.first=e.first),e.after!==void 0&&(s.push("$after: String"),r.push("after: $after"),t.after=e.after),e.validateSchema!==void 0&&(s.push("$validateSchema: Boolean"),r.push("validateSchema: $validateSchema"),t.validateSchema=e.validateSchema);let a=e.resolveLinks&&e.resolveLinks.length>0?`${
|
|
242
|
-
${
|
|
298
|
+
`}},searchRecords(e){let t={publisherSlug:e.publisherSlug,gameKey:e.gameKey,datasetKey:e.datasetKey},r=["publisherSlug: $publisherSlug","gameKey: $gameKey","datasetKey: $datasetKey"],s=["$publisherSlug: String!","$gameKey: String!","$datasetKey: String!"];e.filter!==void 0&&(s.push("$filter: JSON"),r.push("filter: $filter"),t.filter=e.filter),e.search!==void 0&&(s.push("$search: String"),r.push("search: $search"),t.search=e.search),e.orderBy!==void 0&&(s.push("$orderBy: String"),r.push("orderBy: $orderBy"),t.orderBy=e.orderBy),e.resolveLinks!==void 0&&(s.push("$resolveLinks: [String!]"),r.push("resolveLinks: $resolveLinks"),t.resolveLinks=e.resolveLinks),e.first!==void 0&&(s.push("$first: Int"),r.push("first: $first"),t.first=e.first),e.after!==void 0&&(s.push("$after: String"),r.push("after: $after"),t.after=e.after),e.validateSchema!==void 0&&(s.push("$validateSchema: Boolean"),r.push("validateSchema: $validateSchema"),t.validateSchema=e.validateSchema);let a=e.resolveLinks&&e.resolveLinks.length>0?`${f}
|
|
299
|
+
${_}`:f;return {query:`
|
|
243
300
|
query SearchRecords(${s.join(", ")}) {
|
|
244
301
|
searchRecords(${r.join(", ")}) {
|
|
245
|
-
${
|
|
302
|
+
${y(a)}
|
|
246
303
|
}
|
|
247
304
|
}
|
|
248
305
|
`,variables:t}},fetchRecordById(){return {query:`
|
|
249
306
|
query FetchRecord($id: UUID!) {
|
|
250
307
|
fetchRecord(id: $id) {
|
|
251
|
-
${
|
|
308
|
+
${f}
|
|
252
309
|
}
|
|
253
310
|
}
|
|
254
311
|
`}},fetchRecordByIdentifier(){return {query:`
|
|
255
312
|
query FetchRecordByIdentifier($publisherSlug: String!, $gameKey: String!, $datasetKey: String!, $identifier: String!) {
|
|
256
313
|
fetchRecordByIdentifier(publisherSlug: $publisherSlug, gameKey: $gameKey, datasetKey: $datasetKey, identifier: $identifier) {
|
|
257
|
-
${
|
|
314
|
+
${f}
|
|
258
315
|
}
|
|
259
316
|
}
|
|
260
317
|
`}},fetchRecordsByIdentifier(){return {query:`
|
|
261
318
|
query FetchRecordsByIdentifier($publisherSlug: String!, $gameKey: String!, $datasetKey: String!, $identifiers: [String!]!) {
|
|
262
319
|
fetchRecordsByIdentifier(publisherSlug: $publisherSlug, gameKey: $gameKey, datasetKey: $datasetKey, identifiers: $identifiers) {
|
|
263
|
-
${
|
|
320
|
+
${f}
|
|
264
321
|
}
|
|
265
322
|
}
|
|
266
323
|
`}},fetchRecords(){return {query:`
|
|
267
324
|
query FetchRecords($ids: [UUID!]!) {
|
|
268
325
|
fetchRecords(ids: $ids) {
|
|
269
|
-
${
|
|
326
|
+
${f}
|
|
270
327
|
}
|
|
271
328
|
}
|
|
272
329
|
`}},listMyDecks(e={}){let t={},r=[],s=[];e.first!==void 0&&(s.push("$first: Int"),r.push("first: $first"),t.first=e.first),e.after!==void 0&&(s.push("$after: String"),r.push("after: $after"),t.after=e.after);let i=s.length>0?`(${s.join(", ")})`:"",a=r.length>0?`(${r.join(", ")})`:"";return {query:`
|
|
273
330
|
query MyDecks${i} {
|
|
274
331
|
myDecks${a} {
|
|
275
|
-
${
|
|
332
|
+
${y(d)}
|
|
276
333
|
}
|
|
277
334
|
}
|
|
278
335
|
`,variables:t}},fetchDeckById(){return {query:`
|
|
279
336
|
query FetchDeck($id: UUID!) {
|
|
280
337
|
fetchDeck(id: $id) {
|
|
281
|
-
${
|
|
338
|
+
${d}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
`}},myDeck(){return {query:`
|
|
342
|
+
query MyDeck($id: UUID!) {
|
|
343
|
+
myDeck(id: $id) {
|
|
344
|
+
${d}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
`}},fetchDeckBySlug(){return {query:`
|
|
348
|
+
query FetchDeckBySlug($publisherSlug: String!, $gameKey: String!, $slug: String!) {
|
|
349
|
+
fetchDeckBySlug(publisherSlug: $publisherSlug, gameKey: $gameKey, slug: $slug) {
|
|
350
|
+
${d}
|
|
282
351
|
}
|
|
283
352
|
}
|
|
284
353
|
`}},fetchDeckByExternalRef(){return {query:`
|
|
285
354
|
query FetchDeckByExternalRef($externalRef: String!) {
|
|
286
355
|
fetchDeckByExternalRef(externalRef: $externalRef) {
|
|
287
|
-
${
|
|
356
|
+
${d}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
`}},deckVersion(){return {query:`
|
|
360
|
+
query DeckVersion($id: UUID!) {
|
|
361
|
+
deckVersion(id: $id) {
|
|
362
|
+
${p}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
`}},deckVersions(e={}){let t={},r=["deckId: $deckId"],s=["$deckId: UUID!"];return e.first!==void 0&&(s.push("$first: Int"),r.push("first: $first"),t.first=e.first),e.after!==void 0&&(s.push("$after: String"),r.push("after: $after"),t.after=e.after),{query:`
|
|
366
|
+
query DeckVersions(${s.join(", ")}) {
|
|
367
|
+
deckVersions(${r.join(", ")}) {
|
|
368
|
+
${y(p)}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
`,variables:t}},deckPreview(){return {query:`
|
|
372
|
+
query DeckPreview($token: String!) {
|
|
373
|
+
deckPreview(token: $token) {
|
|
374
|
+
${d}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
`}},deckCollaborators(){return {query:`
|
|
378
|
+
query DeckCollaborators($deckId: UUID!) {
|
|
379
|
+
deckCollaborators(deckId: $deckId) {
|
|
380
|
+
${K}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
`}},deckPreviewTokens(){return {query:`
|
|
384
|
+
query DeckPreviewTokens($deckId: UUID!) {
|
|
385
|
+
deckPreviewTokens(deckId: $deckId) {
|
|
386
|
+
${q}
|
|
288
387
|
}
|
|
289
388
|
}
|
|
290
389
|
`}},createDeck(){return {query:`
|
|
291
390
|
mutation DeckCreate($input: DeckCreateInput!) {
|
|
292
391
|
deckCreate(input: $input) {
|
|
293
|
-
${
|
|
392
|
+
${d}
|
|
294
393
|
}
|
|
295
394
|
}
|
|
296
395
|
`}},updateDeck(){return {query:`
|
|
297
396
|
mutation DeckUpdate($id: UUID!, $input: DeckUpdateInput!) {
|
|
298
397
|
deckUpdate(id: $id, input: $input) {
|
|
299
|
-
${
|
|
398
|
+
${d}
|
|
300
399
|
}
|
|
301
400
|
}
|
|
302
401
|
`}},deleteDeck(){return {query:`
|
|
303
402
|
mutation DeckDelete($id: UUID!) {
|
|
304
403
|
deckDelete(id: $id)
|
|
305
404
|
}
|
|
306
|
-
`}},
|
|
405
|
+
`}},publishDeck(){return {query:`
|
|
406
|
+
mutation DeckPublish($id: UUID!, $input: DeckPublishInput!) {
|
|
407
|
+
deckPublish(id: $id, input: $input) {
|
|
408
|
+
${p}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
`}},upsertDeckCollaborator(){return {query:`
|
|
412
|
+
mutation DeckCollaboratorUpsert($deckId: UUID!, $accountId: UUID!, $role: DeckCollaboratorRole!) {
|
|
413
|
+
deckCollaboratorUpsert(deckId: $deckId, accountId: $accountId, role: $role) {
|
|
414
|
+
${K}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
`}},removeDeckCollaborator(){return {query:`
|
|
418
|
+
mutation DeckCollaboratorRemove($deckId: UUID!, $accountId: UUID!) {
|
|
419
|
+
deckCollaboratorRemove(deckId: $deckId, accountId: $accountId)
|
|
420
|
+
}
|
|
421
|
+
`}},createDeckPreviewToken(){return {query:`
|
|
422
|
+
mutation DeckPreviewTokenCreate($input: DeckPreviewTokenCreateInput!) {
|
|
423
|
+
deckPreviewTokenCreate(input: $input) {
|
|
424
|
+
token
|
|
425
|
+
previewToken {
|
|
426
|
+
${q}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
`}},revokeDeckPreviewToken(){return {query:`
|
|
431
|
+
mutation DeckPreviewTokenRevoke($id: UUID!) {
|
|
432
|
+
deckPreviewTokenRevoke(id: $id)
|
|
433
|
+
}
|
|
434
|
+
`}},deckCreateVariables(e){return {input:e}},deckUpdateVariables(e,t){return {id:e,input:t}},deckPublishVariables(e,t={}){return {id:e,input:t}},deckCollaboratorVariables(e,t,r){return r===void 0?{deckId:e,accountId:t}:{deckId:e,accountId:t,role:r}},deckPreviewTokenCreateVariables(e){return {input:e}},fetchMe(){return {query:`
|
|
307
435
|
query FetchMe {
|
|
308
436
|
fetchMe {
|
|
309
437
|
application {
|
|
@@ -325,6 +453,6 @@ ${N}`:d;return {query:`
|
|
|
325
453
|
}
|
|
326
454
|
}
|
|
327
455
|
}
|
|
328
|
-
`}}},l=class{totalCount;pageInfo;items;nextPageLoader;constructor(e,t={}){this.totalCount=e.totalCount,this.pageInfo=e.pageInfo,this.items=e.edges.map(r=>t.itemTransformer?t.itemTransformer(r.node):r.node),this.nextPageLoader=t.nextPageLoader;}get hasNextPage(){return this.pageInfo.hasNextPage}get hasPreviousPage(){return this.pageInfo.hasPreviousPage}get endCursor(){return this.pageInfo.endCursor}get startCursor(){return this.pageInfo.startCursor}get length(){return this.items.length}get isEmpty(){return this.items.length===0}get first(){return this.items[0]}get last(){return this.items[this.items.length-1]}async nextPage(){if(!this.hasNextPage)return null;if(!this.nextPageLoader)throw new Error("No next page loader configured");return this.endCursor?this.nextPageLoader(this.endCursor):null}async*[Symbol.asyncIterator](){let e=this;for(;e;){for(let t of e.items)yield t;if(!e.hasNextPage)break;e=await e.nextPage();}}async forEach(e){let t=0;for await(let r of this)await e(r,t++);}async map(e){let t=[],r=0;for await(let s of this)t.push(await e(s,r++));return t}async filter(e){let t=[],r=0;for await(let s of this)await e(s,r++)&&t.push(s);return t}async find(e){let t=0;for await(let r of this)if(await e(r,t++))return r}async take(e){let t=[];for await(let r of this){if(t.length>=e)break;t.push(r);}return t}async toArray(){let e=[];for await(let t of this)e.push(t);return e}async*batches(){let e=this;for(;e&&(e.items.length>0&&(yield e.items),!!e.hasNextPage);)e=await e.nextPage();}each(){return this}};var U="https://carddb.xtda.org/query",M=3e4,_=1e4,O=300,j=3,V=2,X=1e3,Q=3e4,J=class P{apiKey;endpoint;timeout;openTimeout;defaultPublisher;defaultGame;allowedPublishers;allowedGames;logger;logLevel;retryOnRateLimit;maxRetries;retryOnNetworkError;maxNetworkRetries;retryBaseDelay;retryMaxDelay;cache;cacheTtl;cacheTtls;constructor(t={}){this.apiKey=t.apiKey,this.endpoint=t.endpoint??U,this.timeout=t.timeout??M,this.openTimeout=t.openTimeout??_,this.defaultPublisher=t.defaultPublisher,this.defaultGame=t.defaultGame,this.allowedPublishers=t.allowedPublishers,this.allowedGames=t.allowedGames,this.logger=t.logger,this.logLevel=t.logLevel??"info",this.retryOnRateLimit=t.retryOnRateLimit??false,this.maxRetries=t.maxRetries??j,this.retryOnNetworkError=t.retryOnNetworkError??true,this.maxNetworkRetries=t.maxNetworkRetries??V,this.retryBaseDelay=t.retryBaseDelay??X,this.retryMaxDelay=t.retryMaxDelay??Q,this.cache=t.cache,this.cacheTtl=t.cacheTtl??O,this.cacheTtls=t.cacheTtls??{};}calculateRetryDelay(t){let r=this.retryBaseDelay*Math.pow(2,t),s=Math.min(r,this.retryMaxDelay),i=s*.25*(Math.random()*2-1);return Math.round(s+i)}cacheTtlFor(t){return this.cacheTtls[t]??this.cacheTtl}resolvePublisher(t){return t??this.defaultPublisher}resolveGame(t){return t??this.defaultGame}validatePublisher(t){if(this.allowedPublishers&&!this.allowedPublishers.includes(t))throw new x(`Publisher '${t}' is not in the allowed publishers list`)}validateGame(t,r){if(!this.allowedGames)return;let s=this.allowedGames[t];if(s&&!s.includes(r))throw new x(`Game '${r}' is not allowed for publisher '${t}'`)}validateAccess(t,r){t&&(this.validatePublisher(t),r&&this.validateGame(t,r));}shouldLog(t){let r={debug:0,info:1,warn:2,error:3};return r[t]>=r[this.logLevel]}merge(t){return new P({apiKey:t.apiKey??this.apiKey,endpoint:t.endpoint??this.endpoint,timeout:t.timeout??this.timeout,openTimeout:t.openTimeout??this.openTimeout,defaultPublisher:t.defaultPublisher??this.defaultPublisher,defaultGame:t.defaultGame??this.defaultGame,allowedPublishers:t.allowedPublishers??this.allowedPublishers,allowedGames:t.allowedGames??this.allowedGames,logger:t.logger??this.logger,logLevel:t.logLevel??this.logLevel,retryOnRateLimit:t.retryOnRateLimit??this.retryOnRateLimit,maxRetries:t.maxRetries??this.maxRetries,retryOnNetworkError:t.retryOnNetworkError??this.retryOnNetworkError,maxNetworkRetries:t.maxNetworkRetries??this.maxNetworkRetries,retryBaseDelay:t.retryBaseDelay??this.retryBaseDelay,retryMaxDelay:t.retryMaxDelay??this.retryMaxDelay,cache:t.cache??this.cache,cacheTtl:t.cacheTtl??this.cacheTtl,cacheTtls:t.cacheTtls??this.cacheTtls})}},q="0.1.0";function W(){if(typeof globalThis<"u"&&"Bun"in globalThis){let e=globalThis.Bun&&typeof globalThis.Bun=="object"&&globalThis.Bun.version;return {name:"bun",version:typeof e=="string"?e:"unknown"}}if(typeof globalThis<"u"&&"Deno"in globalThis){let e=globalThis.Deno&&typeof globalThis.Deno=="object"&&globalThis.Deno.version&&typeof globalThis.Deno.version=="object"&&globalThis.Deno.version.deno;return {name:"deno",version:typeof e=="string"?e:"unknown"}}return typeof process<"u"&&process.versions&&process.versions.node?{name:"node",version:process.versions.node}:typeof navigator<"u"&&navigator.userAgent?H(navigator.userAgent):{name:"unknown",version:"unknown"}}function H(e){let t=e.match(/Edg\/(\d+(?:\.\d+)*)/);if(t)return {name:"edge",version:t[1]};let r=e.match(/Chrome\/(\d+(?:\.\d+)*)/);if(r&&!e.includes("Edg/"))return {name:"chrome",version:r[1]};let s=e.match(/Firefox\/(\d+(?:\.\d+)*)/);if(s)return {name:"firefox",version:s[1]};let i=e.match(/Version\/(\d+(?:\.\d+)*).*Safari/);return i?{name:"safari",version:i[1]}:{name:"browser",version:"unknown"}}function Y(){let e=W();return `CardDB-SDK/js/${q} (${e.name}/${e.version})`}function Ne(){return q}var A=null;function z(){return A}var Z=class{config;constructor(e){this.config=e;}async execute(e,t={}){let r=this.extractOperationName(e),s=0,i=0;for(;;)try{let a=Date.now();this.logRequest(r,t);let n=await this.fetch(e,t),c=Date.now()-a,h=await this.handleResponse(n);return this.logResponse(r,c),h}catch(a){if(a instanceof b&&this.config.retryOnRateLimit&&s<this.config.maxRetries){s++;let n=a.retryAfter??60;this.logRateLimitRetry(r,s,n),await this.sleep(n*1e3);continue}if(this.isRetryableNetworkError(a)&&this.config.retryOnNetworkError&&i<this.config.maxNetworkRetries){let n=this.config.calculateRetryDelay(i);this.logNetworkRetry(r,i+1,n,a),i++,await this.sleep(n);continue}if(a instanceof D&&this.config.retryOnNetworkError&&i<this.config.maxNetworkRetries){let n=this.config.calculateRetryDelay(i);this.logNetworkRetry(r,i+1,n,a),i++,await this.sleep(n);continue}throw a}}isRetryableNetworkError(e){return e instanceof w||e instanceof S}async fetch(e,t){let r=new AbortController,s=setTimeout(()=>r.abort(),this.config.timeout);try{return await fetch(this.config.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","User-Agent":Y(),...this.config.apiKey?{"X-API-Key":this.config.apiKey}:{}},body:JSON.stringify({query:e,variables:t}),signal:r.signal})}catch(i){throw i instanceof Error?i.name==="AbortError"?(this.logError("Request timed out"),new S("Request timed out")):(this.logError(`Connection failed: ${i.message}`),new w(`Connection failed: ${i.message}`)):new w("Connection failed")}finally{clearTimeout(s);}}async handleResponse(e){switch(this.extractRateLimitInfo(e),e.status){case 200:return this.handleSuccessResponse(e);case 401:throw new R("Invalid or missing API key");case 429:return this.handleRateLimitResponse(e);default:if(e.status>=400&&e.status<500)return this.handleClientError(e);if(e.status>=500){let t=await this.parseBody(e);throw new D(`Server error (${e.status})`,{status:e.status,response:t})}throw new u(`Unexpected response status: ${e.status}`)}}async handleSuccessResponse(e){let t=await this.parseBody(e);return t.errors&&t.errors.length>0&&this.handleGraphQLErrors(t.errors,t),t.data??{}}handleGraphQLErrors(e,t){let r=e[0],s=r.message||"GraphQL error";switch(r.extensions?.code){case "UNAUTHENTICATED":throw new R(s,t);case "RATE_LIMITED":throw new b(s,{response:t});case "NOT_FOUND":throw new u(s,t);case "VALIDATION_ERROR":case "BAD_USER_INPUT":throw new k(s,{errors:e,response:t});default:throw new B(s,{errors:e,response:t})}}async handleRateLimitResponse(e){let t=parseInt(e.headers.get("Retry-After")??"60",10),r=parseInt(e.headers.get("X-RateLimit-Limit")??"",10)||null,s=parseInt(e.headers.get("X-RateLimit-Remaining")??"",10)||null,i=parseInt(e.headers.get("X-RateLimit-Reset")??"",10)||null,a=i?new Date(i*1e3):null,n=await this.parseBody(e);throw new b("Rate limit exceeded",{retryAfter:t,limit:r,remaining:s,resetAt:a,response:n})}async handleClientError(e){let t=await this.parseBody(e),r=t.errors?.[0]?.message??`Client error (${e.status})`;throw new k(r,{response:t})}async parseBody(e){try{return await e.json()}catch{return {raw:await e.text()}}}extractRateLimitInfo(e){let t=parseInt(e.headers.get("X-RateLimit-Limit")??"",10)||null,r=parseInt(e.headers.get("X-RateLimit-Remaining")??"",10)||null,s=parseInt(e.headers.get("X-RateLimit-Reset")??"",10)||null;A={limit:t,remaining:r,reset:s};}extractOperationName(e){let t=e.match(/(?:query|mutation)\s+(\w+)/);return t?t[1]:"Unknown"}sleep(e){return new Promise(t=>setTimeout(t,e))}logRequest(e,t){!this.config.logger||!this.config.shouldLog("debug")||this.config.logger.debug(`[CardDB] Executing ${e}`,{variables:t});}logResponse(e,t){!this.config.logger||!this.config.shouldLog("info")||this.config.logger.info(`[CardDB] ${e} completed in ${t}ms`);}logRateLimitRetry(e,t,r){!this.config.logger||!this.config.shouldLog("warn")||this.config.logger.warn(`[CardDB] Rate limited on ${e}, retry ${t}/${this.config.maxRetries} after ${r}s`);}logNetworkRetry(e,t,r,s){if(!this.config.logger||!this.config.shouldLog("warn"))return;let i=s instanceof Error?s.name:"Unknown";this.config.logger.warn(`[CardDB] ${i} on ${e}, retry ${t}/${this.config.maxNetworkRetries} after ${r}ms`);}logError(e){!this.config.logger||!this.config.shouldLog("error")||this.config.logger.error(`[CardDB] ${e}`);}};function ee(e,t,r){let s=Object.entries(r).filter(([,i])=>i!==void 0).sort(([i],[a])=>i.localeCompare(a)).map(([i,a])=>`${i}=${JSON.stringify(a)}`).join("&");return `carddb:${e}:${t}:${s}`}async function te(e,t){let r=e.get(t);return r}async function re(e,t,r,s){let i=e.set(t,r,s);i instanceof Promise&&await i;}var f=class{connection;config;constructor(e,t){this.connection=e,this.config=t;}resolvePublisher(e){let t=this.config.resolvePublisher(e);if(!t)throw new Error("publisher_slug is required (no default configured)");return t}resolveGame(e){let t=this.config.resolveGame(e);if(!t)throw new Error("game_key is required (no default configured)");return t}validateAccess(e,t){this.config.validateAccess(e,t);}async withCache(e,t,r,s){let i=r.cache??!!this.config.cache,a=this.config.cache;if(!i||!a)return s();let n=await te(a,e);if(n!==null)return n;let c=await s();if(c!=null){let h=this.config.cacheTtlFor(t);await re(a,e,c,h);}return c}cacheKey(e,t,r){return ee(e,t,r)}},se=class extends f{constructor(e,t){super(e,t);}async search(e={}){let{query:t,variables:r}=o.searchPublishers({search:e.search,first:e.first,after:e.after}),s=this.cacheKey("publishers","search",r),i=await this.withCache(s,"publishers",e,async()=>(await this.connection.execute(t,r)).searchPublishers);return new l(i,{nextPageLoader:async a=>this.search({...e,after:a})})}async get(e,t={}){let r=this.isUUID(e),s=this.cacheKey("publishers","get",{[r?"id":"slug"]:e});return this.withCache(s,"publishers",t,async()=>{if(r){let{query:i}=o.fetchPublisherById();return (await this.connection.execute(i,{id:e})).fetchPublisher??null}else {let{query:i}=o.fetchPublisherBySlug();return (await this.connection.execute(i,{slug:e})).fetchPublisher??null}})}async getMany(e,t={}){if(e.length===0)return [];let r=this.cacheKey("publishers","getMany",{slugs:e});return this.withCache(r,"publishers",t,async()=>{let{query:s}=o.fetchPublishers();return (await this.connection.execute(s,{slugs:e})).fetchPublishers??[]})}isUUID(e){return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}},ie=class extends f{constructor(e,t){super(e,t);}async search(e={}){let t=this.config.resolvePublisher(e.publisherSlug);t&&this.validateAccess(t);let{query:r,variables:s}=o.searchGames({publisherSlug:t,search:e.search,first:e.first,after:e.after}),i=this.cacheKey("games","search",s),a=await this.withCache(i,"games",e,async()=>(await this.connection.execute(r,s)).searchGames);return new l(a,{nextPageLoader:async n=>this.search({...e,after:n})})}async get(e,t,r){if(typeof t=="string"){let s=e,i=t,a=r??{};this.validateAccess(s,i);let n=this.cacheKey("games","getByKeys",{publisherSlug:s,gameKey:i});return this.withCache(n,"games",a,async()=>{let{query:c}=o.fetchGameByKeys();return (await this.connection.execute(c,{publisherSlug:s,gameKey:i})).fetchGame??null})}else {let s=e,i=t??{},a=this.cacheKey("games","get",{id:s});return this.withCache(a,"games",i,async()=>{let{query:n}=o.fetchGameById();return (await this.connection.execute(n,{id:s})).fetchGame??null})}}async getMany(e,t={}){if(e.length===0)return [];let r=this.cacheKey("games","getMany",{ids:e});return this.withCache(r,"games",t,async()=>{let{query:s}=o.fetchGames();return (await this.connection.execute(s,{ids:e})).fetchGames??[]})}},ae=class extends f{constructor(e,t){super(e,t);}async search(e={}){let t=this.config.resolvePublisher(e.publisherSlug),r=this.config.resolveGame(e.gameKey);t&&this.validateAccess(t,r);let{query:s,variables:i}=o.searchDatasets({publisherSlug:t,gameKey:r,search:e.search,purpose:e.purpose,first:e.first,after:e.after}),a=this.cacheKey("datasets","search",i),n=await this.withCache(a,"datasets",e,async()=>(await this.connection.execute(s,i)).searchDatasets);return new l(n,{nextPageLoader:async c=>this.search({...e,after:c})})}async get(e,t,r,s){if(typeof t=="string"&&typeof r=="string"){let i=e,a=t,n=s??{};this.validateAccess(i,a);let c=this.cacheKey("datasets","getByKeys",{publisherSlug:i,gameKey:a,datasetKey:r});return this.withCache(c,"datasets",n,async()=>{let{query:h}=o.fetchDatasetByKeys();return (await this.connection.execute(h,{publisherSlug:i,gameKey:a,datasetKey:r})).fetchDataset??null})}else {let i=e,a=t??{},n=this.cacheKey("datasets","get",{id:i});return this.withCache(n,"datasets",a,async()=>{let{query:c}=o.fetchDatasetById();return (await this.connection.execute(c,{id:i})).fetchDataset??null})}}async getMany(e,t={}){if(e.length===0)return [];let r=this.cacheKey("datasets","getMany",{ids:e});return this.withCache(r,"datasets",t,async()=>{let{query:s}=o.fetchDatasets();return (await this.connection.execute(s,{ids:e})).fetchDatasets??[]})}},ne=class extends f{constructor(e,t){super(e,t);}async fetch(e,t={}){let r=this.cacheKey("decks","fetch",{id:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=o.fetchDeckById();return (await this.connection.execute(s,{id:e})).fetchDeck??null})}async fetchByExternalRef(e,t={}){let r=this.cacheKey("decks","fetchByExternalRef",{externalRef:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=o.fetchDeckByExternalRef();return (await this.connection.execute(s,{externalRef:e})).fetchDeckByExternalRef??null})}async listMine(e={}){let{query:t,variables:r}=o.listMyDecks({first:e.first,after:e.after}),s=this.cacheKey("decks","listMine",r),i=await this.withCache(s,"decks",e,async()=>(await this.connection.execute(t,r)).myDecks);return new l(i,{nextPageLoader:async a=>this.listMine({...e,after:a})})}async create(e){let{query:t}=o.createDeck(),r=o.deckCreateVariables(e);return (await this.connection.execute(t,r)).deckCreate}async update(e,t){let{query:r}=o.updateDeck(),s=o.deckUpdateVariables(e,t);return (await this.connection.execute(r,s)).deckUpdate}async delete(e){let{query:t}=o.deleteDeck();return !!(await this.connection.execute(t,{id:e})).deckDelete}async hydrateEntries(e){if(e.entries.length===0)return [];let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let s=e.entries.map(c=>c.identifier),i=this.cacheKey("decks","hydrateEntries",{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifiers:s}),a=await this.withCache(i,"decks",e,async()=>{let{query:c}=o.fetchRecordsByIdentifier();return (await this.connection.execute(c,{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifiers:s})).fetchRecordsByIdentifier}),n=ce(a,s,e.identifierField);return e.entries.map(c=>({...c,record:n.get(c.identifier)??null}))}};function ce(e,t,r){let s=new Set(t),i=new Map;for(let a of e){let n=r?a.data[r]:Object.values(a.data).find(h=>s.has(String(h)));if(n==null)continue;let c=String(n);s.has(c)&&(i.set(c,a),s.delete(c));}return i}var oe=class extends f{constructor(e,t){super(e,t);}async search(e){let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let s=E(e.filter),{query:i,variables:a}=o.searchRecords({publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,filter:s,search:e.search,orderBy:e.orderBy,resolveLinks:e.resolveLinks,first:e.first,after:e.after,validateSchema:e.validateSchema}),n=this.cacheKey("records","search",a),c=await this.withCache(n,"records",e,async()=>(await this.connection.execute(i,a)).searchRecords);return new l(c,{nextPageLoader:async h=>this.search({...e,after:h})})}async get(e,t={}){let r=this.cacheKey("records","get",{id:e});return this.withCache(r,"records",t,async()=>{let{query:s}=o.fetchRecordById();return (await this.connection.execute(s,{id:e})).fetchRecord??null})}async getByIdentifier(e){let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let s=this.cacheKey("records","getByIdentifier",{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifier:e.identifier});return this.withCache(s,"records",e,async()=>{let{query:i}=o.fetchRecordByIdentifier();return (await this.connection.execute(i,{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifier:e.identifier})).fetchRecordByIdentifier??null})}async getManyByIdentifier(e){if(e.identifiers.length===0)return [];let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let s=this.cacheKey("records","getManyByIdentifier",{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifiers:e.identifiers});return this.withCache(s,"records",e,async()=>{let{query:i}=o.fetchRecordsByIdentifier();return (await this.connection.execute(i,{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifiers:e.identifiers})).fetchRecordsByIdentifier??[]})}async getMany(e,t={}){if(e.length===0)return [];let r=this.cacheKey("records","getMany",{ids:e});return this.withCache(r,"records",t,async()=>{let{query:s}=o.fetchRecords();return (await this.connection.execute(s,{ids:e})).fetchRecords??[]})}},he=class extends f{constructor(e,t){super(e,t);}async datasets(e={}){let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let{query:s,variables:i}=o.searchDatasets({publisherSlug:t,gameKey:r,search:e.search,purpose:"RULES",first:e.first,after:e.after}),a=this.cacheKey("rules","datasets",i),n=await this.withCache(a,"datasets",e,async()=>(await this.connection.execute(s,i)).searchDatasets);return new l(n,{nextPageLoader:async c=>this.datasets({...e,after:c})})}async list(e={}){return this.searchRuleRecords("rules",e)}async formats(e={}){return this.searchRuleRecords(e.datasetKey??"formats",e)}async searchRuleRecords(e,t){let r=this.resolvePublisher(t.publisherSlug),s=this.resolveGame(t.gameKey),i=t.datasetKey??e;this.validateAccess(r,s);let a=E(t.filter),{query:n,variables:c}=o.searchRecords({publisherSlug:r,gameKey:s,datasetKey:i,filter:a,search:t.search,orderBy:t.orderBy,resolveLinks:t.resolveLinks,first:t.first,after:t.after,validateSchema:t.validateSchema}),h=this.cacheKey("rules","records",c),I=await this.withCache(h,"records",t,async()=>(await this.connection.execute(n,c)).searchRecords);return new l(I,{nextPageLoader:async K=>this.searchRuleRecords(e,{...t,after:K})})}},Ue=class G{config;connection;publishers;games;datasets;records;decks;rules;constructor(t={}){this.config=new J(t),this.connection=new Z(this.config),this.publishers=new se(this.connection,this.config),this.games=new ie(this.connection,this.config),this.datasets=new ae(this.connection,this.config),this.records=new oe(this.connection,this.config),this.decks=new ne(this.connection,this.config),this.rules=new he(this.connection,this.config);}async me(){let{query:t}=o.fetchMe();return (await this.connection.execute(t)).fetchMe??null}getRateLimitInfo(){return z()}withConfig(t){let r=this.config.merge(t);return new G({apiKey:r.apiKey,endpoint:r.endpoint,timeout:r.timeout,openTimeout:r.openTimeout,defaultPublisher:r.defaultPublisher,defaultGame:r.defaultGame,allowedPublishers:r.allowedPublishers,allowedGames:r.allowedGames,logger:r.logger,logLevel:r.logLevel,retryOnRateLimit:r.retryOnRateLimit,maxRetries:r.maxRetries,retryOnNetworkError:r.retryOnNetworkError,maxNetworkRetries:r.maxNetworkRetries,retryBaseDelay:r.retryBaseDelay,retryMaxDelay:r.retryMaxDelay,cache:r.cache,cacheTtl:r.cacheTtl,cacheTtls:r.cacheTtls})}};
|
|
329
|
-
export{
|
|
456
|
+
`}}},h=class{totalCount;pageInfo;items;nextPageLoader;constructor(e,t={}){this.totalCount=e.totalCount,this.pageInfo=e.pageInfo,this.items=e.edges.map(r=>t.itemTransformer?t.itemTransformer(r.node):r.node),this.nextPageLoader=t.nextPageLoader;}get hasNextPage(){return this.pageInfo.hasNextPage}get hasPreviousPage(){return this.pageInfo.hasPreviousPage}get endCursor(){return this.pageInfo.endCursor}get startCursor(){return this.pageInfo.startCursor}get length(){return this.items.length}get isEmpty(){return this.items.length===0}get first(){return this.items[0]}get last(){return this.items[this.items.length-1]}async nextPage(){if(!this.hasNextPage)return null;if(!this.nextPageLoader)throw new Error("No next page loader configured");return this.endCursor?this.nextPageLoader(this.endCursor):null}async*[Symbol.asyncIterator](){let e=this;for(;e;){for(let t of e.items)yield t;if(!e.hasNextPage)break;e=await e.nextPage();}}async forEach(e){let t=0;for await(let r of this)await e(r,t++);}async map(e){let t=[],r=0;for await(let s of this)t.push(await e(s,r++));return t}async filter(e){let t=[],r=0;for await(let s of this)await e(s,r++)&&t.push(s);return t}async find(e){let t=0;for await(let r of this)if(await e(r,t++))return r}async take(e){let t=[];for await(let r of this){if(t.length>=e)break;t.push(r);}return t}async toArray(){let e=[];for await(let t of this)e.push(t);return e}async*batches(){let e=this;for(;e&&(e.items.length>0&&(yield e.items),!!e.hasNextPage);)e=await e.nextPage();}each(){return this}};var V="https://carddb.xtda.org/query",O=3e4,j=1e4,X=300,Q=3,J=2,W=1e3,H=3e4,Y=class U{apiKey;endpoint;timeout;openTimeout;defaultPublisher;defaultGame;allowedPublishers;allowedGames;logger;logLevel;retryOnRateLimit;maxRetries;retryOnNetworkError;maxNetworkRetries;retryBaseDelay;retryMaxDelay;cache;cacheTtl;cacheTtls;constructor(t={}){this.apiKey=t.apiKey,this.endpoint=t.endpoint??V,this.timeout=t.timeout??O,this.openTimeout=t.openTimeout??j,this.defaultPublisher=t.defaultPublisher,this.defaultGame=t.defaultGame,this.allowedPublishers=t.allowedPublishers,this.allowedGames=t.allowedGames,this.logger=t.logger,this.logLevel=t.logLevel??"info",this.retryOnRateLimit=t.retryOnRateLimit??false,this.maxRetries=t.maxRetries??Q,this.retryOnNetworkError=t.retryOnNetworkError??true,this.maxNetworkRetries=t.maxNetworkRetries??J,this.retryBaseDelay=t.retryBaseDelay??W,this.retryMaxDelay=t.retryMaxDelay??H,this.cache=t.cache,this.cacheTtl=t.cacheTtl??X,this.cacheTtls=t.cacheTtls??{};}calculateRetryDelay(t){let r=this.retryBaseDelay*Math.pow(2,t),s=Math.min(r,this.retryMaxDelay),i=s*.25*(Math.random()*2-1);return Math.round(s+i)}cacheTtlFor(t){return this.cacheTtls[t]??this.cacheTtl}resolvePublisher(t){return t??this.defaultPublisher}resolveGame(t){return t??this.defaultGame}validatePublisher(t){if(this.allowedPublishers&&!this.allowedPublishers.includes(t))throw new x(`Publisher '${t}' is not in the allowed publishers list`)}validateGame(t,r){if(!this.allowedGames)return;let s=this.allowedGames[t];if(s&&!s.includes(r))throw new x(`Game '${r}' is not allowed for publisher '${t}'`)}validateAccess(t,r){t&&(this.validatePublisher(t),r&&this.validateGame(t,r));}shouldLog(t){let r={debug:0,info:1,warn:2,error:3};return r[t]>=r[this.logLevel]}merge(t){return new U({apiKey:t.apiKey??this.apiKey,endpoint:t.endpoint??this.endpoint,timeout:t.timeout??this.timeout,openTimeout:t.openTimeout??this.openTimeout,defaultPublisher:t.defaultPublisher??this.defaultPublisher,defaultGame:t.defaultGame??this.defaultGame,allowedPublishers:t.allowedPublishers??this.allowedPublishers,allowedGames:t.allowedGames??this.allowedGames,logger:t.logger??this.logger,logLevel:t.logLevel??this.logLevel,retryOnRateLimit:t.retryOnRateLimit??this.retryOnRateLimit,maxRetries:t.maxRetries??this.maxRetries,retryOnNetworkError:t.retryOnNetworkError??this.retryOnNetworkError,maxNetworkRetries:t.maxNetworkRetries??this.maxNetworkRetries,retryBaseDelay:t.retryBaseDelay??this.retryBaseDelay,retryMaxDelay:t.retryMaxDelay??this.retryMaxDelay,cache:t.cache??this.cache,cacheTtl:t.cacheTtl??this.cacheTtl,cacheTtls:t.cacheTtls??this.cacheTtls})}},F="0.1.0";function z(){if(typeof globalThis<"u"&&"Bun"in globalThis){let e=globalThis.Bun&&typeof globalThis.Bun=="object"&&globalThis.Bun.version;return {name:"bun",version:typeof e=="string"?e:"unknown"}}if(typeof globalThis<"u"&&"Deno"in globalThis){let e=globalThis.Deno&&typeof globalThis.Deno=="object"&&globalThis.Deno.version&&typeof globalThis.Deno.version=="object"&&globalThis.Deno.version.deno;return {name:"deno",version:typeof e=="string"?e:"unknown"}}return typeof process<"u"&&process.versions&&process.versions.node?{name:"node",version:process.versions.node}:typeof navigator<"u"&&navigator.userAgent?Z(navigator.userAgent):{name:"unknown",version:"unknown"}}function Z(e){let t=e.match(/Edg\/(\d+(?:\.\d+)*)/);if(t)return {name:"edge",version:t[1]};let r=e.match(/Chrome\/(\d+(?:\.\d+)*)/);if(r&&!e.includes("Edg/"))return {name:"chrome",version:r[1]};let s=e.match(/Firefox\/(\d+(?:\.\d+)*)/);if(s)return {name:"firefox",version:s[1]};let i=e.match(/Version\/(\d+(?:\.\d+)*).*Safari/);return i?{name:"safari",version:i[1]}:{name:"browser",version:"unknown"}}function ee(){let e=z();return `CardDB-SDK/js/${F} (${e.name}/${e.version})`}function _e(){return F}var N=null;function te(){return N}var re=class{config;constructor(e){this.config=e;}async execute(e,t={}){let r=this.extractOperationName(e),s=0,i=0;for(;;)try{let a=Date.now();this.logRequest(r,t);let n=await this.fetch(e,t),o=Date.now()-a,u=await this.handleResponse(n);return this.logResponse(r,o),u}catch(a){if(a instanceof b&&this.config.retryOnRateLimit&&s<this.config.maxRetries){s++;let n=a.retryAfter??60;this.logRateLimitRetry(r,s,n),await this.sleep(n*1e3);continue}if(this.isRetryableNetworkError(a)&&this.config.retryOnNetworkError&&i<this.config.maxNetworkRetries){let n=this.config.calculateRetryDelay(i);this.logNetworkRetry(r,i+1,n,a),i++,await this.sleep(n);continue}if(a instanceof I&&this.config.retryOnNetworkError&&i<this.config.maxNetworkRetries){let n=this.config.calculateRetryDelay(i);this.logNetworkRetry(r,i+1,n,a),i++,await this.sleep(n);continue}throw a}}isRetryableNetworkError(e){return e instanceof k||e instanceof S}async fetch(e,t){let r=new AbortController,s=setTimeout(()=>r.abort(),this.config.timeout);try{return await fetch(this.config.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","User-Agent":ee(),...this.config.apiKey?{"X-API-Key":this.config.apiKey}:{}},body:JSON.stringify({query:e,variables:t}),signal:r.signal})}catch(i){throw i instanceof Error?i.name==="AbortError"?(this.logError("Request timed out"),new S("Request timed out")):(this.logError(`Connection failed: ${i.message}`),new k(`Connection failed: ${i.message}`)):new k("Connection failed")}finally{clearTimeout(s);}}async handleResponse(e){switch(this.extractRateLimitInfo(e),e.status){case 200:return this.handleSuccessResponse(e);case 401:throw new D("Invalid or missing API key");case 429:return this.handleRateLimitResponse(e);default:if(e.status>=400&&e.status<500)return this.handleClientError(e);if(e.status>=500){let t=await this.parseBody(e);throw new I(`Server error (${e.status})`,{status:e.status,response:t})}throw new l(`Unexpected response status: ${e.status}`)}}async handleSuccessResponse(e){let t=await this.parseBody(e);return t.errors&&t.errors.length>0&&this.handleGraphQLErrors(t.errors,t),t.data??{}}handleGraphQLErrors(e,t){let r=e[0],s=r.message||"GraphQL error";switch(r.extensions?.code){case "UNAUTHENTICATED":throw new D(s,t);case "RATE_LIMITED":throw new b(s,{response:t});case "NOT_FOUND":throw new l(s,t);case "VALIDATION_ERROR":case "BAD_USER_INPUT":throw new R(s,{errors:e,response:t});default:throw new B(s,{errors:e,response:t})}}async handleRateLimitResponse(e){let t=parseInt(e.headers.get("Retry-After")??"60",10),r=parseInt(e.headers.get("X-RateLimit-Limit")??"",10)||null,s=parseInt(e.headers.get("X-RateLimit-Remaining")??"",10)||null,i=parseInt(e.headers.get("X-RateLimit-Reset")??"",10)||null,a=i?new Date(i*1e3):null,n=await this.parseBody(e);throw new b("Rate limit exceeded",{retryAfter:t,limit:r,remaining:s,resetAt:a,response:n})}async handleClientError(e){let t=await this.parseBody(e),r=t.errors?.[0]?.message??`Client error (${e.status})`;throw new R(r,{response:t})}async parseBody(e){try{return await e.json()}catch{return {raw:await e.text()}}}extractRateLimitInfo(e){let t=parseInt(e.headers.get("X-RateLimit-Limit")??"",10)||null,r=parseInt(e.headers.get("X-RateLimit-Remaining")??"",10)||null,s=parseInt(e.headers.get("X-RateLimit-Reset")??"",10)||null;N={limit:t,remaining:r,reset:s};}extractOperationName(e){let t=e.match(/(?:query|mutation)\s+(\w+)/);return t?t[1]:"Unknown"}sleep(e){return new Promise(t=>setTimeout(t,e))}logRequest(e,t){!this.config.logger||!this.config.shouldLog("debug")||this.config.logger.debug(`[CardDB] Executing ${e}`,{variables:t});}logResponse(e,t){!this.config.logger||!this.config.shouldLog("info")||this.config.logger.info(`[CardDB] ${e} completed in ${t}ms`);}logRateLimitRetry(e,t,r){!this.config.logger||!this.config.shouldLog("warn")||this.config.logger.warn(`[CardDB] Rate limited on ${e}, retry ${t}/${this.config.maxRetries} after ${r}s`);}logNetworkRetry(e,t,r,s){if(!this.config.logger||!this.config.shouldLog("warn"))return;let i=s instanceof Error?s.name:"Unknown";this.config.logger.warn(`[CardDB] ${i} on ${e}, retry ${t}/${this.config.maxNetworkRetries} after ${r}ms`);}logError(e){!this.config.logger||!this.config.shouldLog("error")||this.config.logger.error(`[CardDB] ${e}`);}};function se(e,t,r){let s=Object.entries(r).filter(([,i])=>i!==void 0).sort(([i],[a])=>i.localeCompare(a)).map(([i,a])=>`${i}=${JSON.stringify(a)}`).join("&");return `carddb:${e}:${t}:${s}`}async function ie(e,t){let r=e.get(t);return r}async function ae(e,t,r,s){let i=e.set(t,r,s);i instanceof Promise&&await i;}var g=class{connection;config;constructor(e,t){this.connection=e,this.config=t;}resolvePublisher(e){let t=this.config.resolvePublisher(e);if(!t)throw new Error("publisher_slug is required (no default configured)");return t}resolveGame(e){let t=this.config.resolveGame(e);if(!t)throw new Error("game_key is required (no default configured)");return t}validateAccess(e,t){this.config.validateAccess(e,t);}async withCache(e,t,r,s){let i=r.cache??!!this.config.cache,a=this.config.cache;if(!i||!a)return s();let n=await ie(a,e);if(n!==null)return n;let o=await s();if(o!=null){let u=this.config.cacheTtlFor(t);await ae(a,e,o,u);}return o}cacheKey(e,t,r){return se(e,t,r)}},ne=class extends g{constructor(e,t){super(e,t);}async search(e={}){let{query:t,variables:r}=c.searchPublishers({search:e.search,first:e.first,after:e.after}),s=this.cacheKey("publishers","search",r),i=await this.withCache(s,"publishers",e,async()=>(await this.connection.execute(t,r)).searchPublishers);return new h(i,{nextPageLoader:async a=>this.search({...e,after:a})})}async get(e,t={}){let r=this.isUUID(e),s=this.cacheKey("publishers","get",{[r?"id":"slug"]:e});return this.withCache(s,"publishers",t,async()=>{if(r){let{query:i}=c.fetchPublisherById();return (await this.connection.execute(i,{id:e})).fetchPublisher??null}else {let{query:i}=c.fetchPublisherBySlug();return (await this.connection.execute(i,{slug:e})).fetchPublisher??null}})}async getMany(e,t={}){if(e.length===0)return [];let r=this.cacheKey("publishers","getMany",{slugs:e});return this.withCache(r,"publishers",t,async()=>{let{query:s}=c.fetchPublishers();return (await this.connection.execute(s,{slugs:e})).fetchPublishers??[]})}isUUID(e){return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}},ce=class extends g{constructor(e,t){super(e,t);}async search(e={}){let t=this.config.resolvePublisher(e.publisherSlug);t&&this.validateAccess(t);let{query:r,variables:s}=c.searchGames({publisherSlug:t,search:e.search,first:e.first,after:e.after}),i=this.cacheKey("games","search",s),a=await this.withCache(i,"games",e,async()=>(await this.connection.execute(r,s)).searchGames);return new h(a,{nextPageLoader:async n=>this.search({...e,after:n})})}async get(e,t,r){if(typeof t=="string"){let s=e,i=t,a=r??{};this.validateAccess(s,i);let n=this.cacheKey("games","getByKeys",{publisherSlug:s,gameKey:i});return this.withCache(n,"games",a,async()=>{let{query:o}=c.fetchGameByKeys();return (await this.connection.execute(o,{publisherSlug:s,gameKey:i})).fetchGame??null})}else {let s=e,i=t??{},a=this.cacheKey("games","get",{id:s});return this.withCache(a,"games",i,async()=>{let{query:n}=c.fetchGameById();return (await this.connection.execute(n,{id:s})).fetchGame??null})}}async getMany(e,t={}){if(e.length===0)return [];let r=this.cacheKey("games","getMany",{ids:e});return this.withCache(r,"games",t,async()=>{let{query:s}=c.fetchGames();return (await this.connection.execute(s,{ids:e})).fetchGames??[]})}},oe=class extends g{constructor(e,t){super(e,t);}async search(e={}){let t=this.config.resolvePublisher(e.publisherSlug),r=this.config.resolveGame(e.gameKey);t&&this.validateAccess(t,r);let{query:s,variables:i}=c.searchDatasets({publisherSlug:t,gameKey:r,search:e.search,purpose:e.purpose,first:e.first,after:e.after}),a=this.cacheKey("datasets","search",i),n=await this.withCache(a,"datasets",e,async()=>(await this.connection.execute(s,i)).searchDatasets);return new h(n,{nextPageLoader:async o=>this.search({...e,after:o})})}async get(e,t,r,s){if(typeof t=="string"&&typeof r=="string"){let i=e,a=t,n=s??{};this.validateAccess(i,a);let o=this.cacheKey("datasets","getByKeys",{publisherSlug:i,gameKey:a,datasetKey:r});return this.withCache(o,"datasets",n,async()=>{let{query:u}=c.fetchDatasetByKeys();return (await this.connection.execute(u,{publisherSlug:i,gameKey:a,datasetKey:r})).fetchDataset??null})}else {let i=e,a=t??{},n=this.cacheKey("datasets","get",{id:i});return this.withCache(n,"datasets",a,async()=>{let{query:o}=c.fetchDatasetById();return (await this.connection.execute(o,{id:i})).fetchDataset??null})}}async getMany(e,t={}){if(e.length===0)return [];let r=this.cacheKey("datasets","getMany",{ids:e});return this.withCache(r,"datasets",t,async()=>{let{query:s}=c.fetchDatasets();return (await this.connection.execute(s,{ids:e})).fetchDatasets??[]})}},ue=class extends g{constructor(e,t){super(e,t);}async fetch(e,t={}){let r=this.cacheKey("decks","fetch",{id:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=c.fetchDeckById();return (await this.connection.execute(s,{id:e})).fetchDeck??null})}async fetchMine(e,t={}){let r=this.cacheKey("decks","fetchMine",{id:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=c.myDeck();return (await this.connection.execute(s,{id:e})).myDeck??null})}async fetchBySlug(e,t,r,s={}){let i=this.cacheKey("decks","fetchBySlug",{publisherSlug:e,gameKey:t,slug:r});return this.withCache(i,"decks",s,async()=>{let{query:a}=c.fetchDeckBySlug();return (await this.connection.execute(a,{publisherSlug:e,gameKey:t,slug:r})).fetchDeckBySlug??null})}async fetchByExternalRef(e,t={}){let r=this.cacheKey("decks","fetchByExternalRef",{externalRef:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=c.fetchDeckByExternalRef();return (await this.connection.execute(s,{externalRef:e})).fetchDeckByExternalRef??null})}async listMine(e={}){let{query:t,variables:r}=c.listMyDecks({first:e.first,after:e.after}),s=this.cacheKey("decks","listMine",r),i=await this.withCache(s,"decks",e,async()=>(await this.connection.execute(t,r)).myDecks);return new h(i,{nextPageLoader:async a=>this.listMine({...e,after:a})})}async fetchVersion(e,t={}){let r=this.cacheKey("decks","fetchVersion",{id:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=c.deckVersion();return (await this.connection.execute(s,{id:e})).deckVersion??null})}async listVersions(e,t={}){let{query:r,variables:s}=c.deckVersions({first:t.first,after:t.after}),i={deckId:e,...s},a=this.cacheKey("decks","listVersions",i),n=await this.withCache(a,"decks",t,async()=>(await this.connection.execute(r,i)).deckVersions);return new h(n,{nextPageLoader:async o=>this.listVersions(e,{...t,after:o})})}async preview(e,t={}){let r=this.cacheKey("decks","preview",{token:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=c.deckPreview();return (await this.connection.execute(s,{token:e})).deckPreview??null})}async listCollaborators(e,t={}){let r=this.cacheKey("decks","listCollaborators",{deckId:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=c.deckCollaborators();return (await this.connection.execute(s,{deckId:e})).deckCollaborators})}async listPreviewTokens(e,t={}){let r=this.cacheKey("decks","listPreviewTokens",{deckId:e});return this.withCache(r,"decks",t,async()=>{let{query:s}=c.deckPreviewTokens();return (await this.connection.execute(s,{deckId:e})).deckPreviewTokens})}async create(e){let{query:t}=c.createDeck(),r=c.deckCreateVariables(e);return (await this.connection.execute(t,r)).deckCreate}async update(e,t){let{query:r}=c.updateDeck(),s=c.deckUpdateVariables(e,t);return (await this.connection.execute(r,s)).deckUpdate}async delete(e){let{query:t}=c.deleteDeck();return !!(await this.connection.execute(t,{id:e})).deckDelete}async publish(e,t={}){let{query:r}=c.publishDeck(),s=c.deckPublishVariables(e,t);return (await this.connection.execute(r,s)).deckPublish}async upsertCollaborator(e,t,r){let{query:s}=c.upsertDeckCollaborator(),i=c.deckCollaboratorVariables(e,t,r);return (await this.connection.execute(s,i)).deckCollaboratorUpsert}async removeCollaborator(e,t){let{query:r}=c.removeDeckCollaborator(),s=c.deckCollaboratorVariables(e,t);return !!(await this.connection.execute(r,s)).deckCollaboratorRemove}async createPreviewToken(e){let{query:t}=c.createDeckPreviewToken(),r=c.deckPreviewTokenCreateVariables(e);return (await this.connection.execute(t,r)).deckPreviewTokenCreate}async revokePreviewToken(e){let{query:t}=c.revokeDeckPreviewToken();return !!(await this.connection.execute(t,{id:e})).deckPreviewTokenRevoke}async hydrateEntries(e){if(e.entries.length===0)return [];let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let s=e.entries.map(o=>o.identifier),i=this.cacheKey("decks","hydrateEntries",{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifiers:s}),a=await this.withCache(i,"decks",e,async()=>{let{query:o}=c.fetchRecordsByIdentifier();return (await this.connection.execute(o,{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifiers:s})).fetchRecordsByIdentifier}),n=le(a,s,e.identifierField);return e.entries.map(o=>({...o,record:n.get(o.identifier)??null}))}};function le(e,t,r){let s=new Set(t),i=new Map;for(let a of e){let n=r?a.data[r]:Object.values(a.data).find(u=>s.has(String(u)));if(n==null)continue;let o=String(n);s.has(o)&&(i.set(o,a),s.delete(o));}return i}var he=class extends g{constructor(e,t){super(e,t);}async search(e){let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let s=C(e.filter),{query:i,variables:a}=c.searchRecords({publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,filter:s,search:e.search,orderBy:e.orderBy,resolveLinks:e.resolveLinks,first:e.first,after:e.after,validateSchema:e.validateSchema}),n=this.cacheKey("records","search",a),o=await this.withCache(n,"records",e,async()=>(await this.connection.execute(i,a)).searchRecords);return new h(o,{nextPageLoader:async u=>this.search({...e,after:u})})}async get(e,t={}){let r=this.cacheKey("records","get",{id:e});return this.withCache(r,"records",t,async()=>{let{query:s}=c.fetchRecordById();return (await this.connection.execute(s,{id:e})).fetchRecord??null})}async getByIdentifier(e){let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let s=this.cacheKey("records","getByIdentifier",{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifier:e.identifier});return this.withCache(s,"records",e,async()=>{let{query:i}=c.fetchRecordByIdentifier();return (await this.connection.execute(i,{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifier:e.identifier})).fetchRecordByIdentifier??null})}async getManyByIdentifier(e){if(e.identifiers.length===0)return [];let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let s=this.cacheKey("records","getManyByIdentifier",{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifiers:e.identifiers});return this.withCache(s,"records",e,async()=>{let{query:i}=c.fetchRecordsByIdentifier();return (await this.connection.execute(i,{publisherSlug:t,gameKey:r,datasetKey:e.datasetKey,identifiers:e.identifiers})).fetchRecordsByIdentifier??[]})}async getMany(e,t={}){if(e.length===0)return [];let r=this.cacheKey("records","getMany",{ids:e});return this.withCache(r,"records",t,async()=>{let{query:s}=c.fetchRecords();return (await this.connection.execute(s,{ids:e})).fetchRecords??[]})}},de=class extends g{constructor(e,t){super(e,t);}async datasets(e={}){let t=this.resolvePublisher(e.publisherSlug),r=this.resolveGame(e.gameKey);this.validateAccess(t,r);let{query:s,variables:i}=c.searchDatasets({publisherSlug:t,gameKey:r,search:e.search,purpose:"RULES",first:e.first,after:e.after}),a=this.cacheKey("rules","datasets",i),n=await this.withCache(a,"datasets",e,async()=>(await this.connection.execute(s,i)).searchDatasets);return new h(n,{nextPageLoader:async o=>this.datasets({...e,after:o})})}async list(e={}){return this.searchRuleRecords("rules",e)}async formats(e={}){return this.searchRuleRecords(e.datasetKey??"formats",e)}async searchRuleRecords(e,t){let r=this.resolvePublisher(t.publisherSlug),s=this.resolveGame(t.gameKey),i=t.datasetKey??e;this.validateAccess(r,s);let a=C(t.filter),{query:n,variables:o}=c.searchRecords({publisherSlug:r,gameKey:s,datasetKey:i,filter:a,search:t.search,orderBy:t.orderBy,resolveLinks:t.resolveLinks,first:t.first,after:t.after,validateSchema:t.validateSchema}),u=this.cacheKey("rules","records",o),E=await this.withCache(u,"records",t,async()=>(await this.connection.execute(n,o)).searchRecords);return new h(E,{nextPageLoader:async P=>this.searchRuleRecords(e,{...t,after:P})})}},Ve=class G{config;connection;publishers;games;datasets;records;decks;rules;constructor(t={}){this.config=new Y(t),this.connection=new re(this.config),this.publishers=new ne(this.connection,this.config),this.games=new ce(this.connection,this.config),this.datasets=new oe(this.connection,this.config),this.records=new he(this.connection,this.config),this.decks=new ue(this.connection,this.config),this.rules=new de(this.connection,this.config);}async me(){let{query:t}=c.fetchMe();return (await this.connection.execute(t)).fetchMe??null}getRateLimitInfo(){return te()}withConfig(t){let r=this.config.merge(t);return new G({apiKey:r.apiKey,endpoint:r.endpoint,timeout:r.timeout,openTimeout:r.openTimeout,defaultPublisher:r.defaultPublisher,defaultGame:r.defaultGame,allowedPublishers:r.allowedPublishers,allowedGames:r.allowedGames,logger:r.logger,logLevel:r.logLevel,retryOnRateLimit:r.retryOnRateLimit,maxRetries:r.maxRetries,retryOnNetworkError:r.retryOnNetworkError,maxNetworkRetries:r.maxNetworkRetries,retryBaseDelay:r.retryBaseDelay,retryMaxDelay:r.retryMaxDelay,cache:r.cache,cacheTtl:r.cacheTtl,cacheTtls:r.cacheTtls})}};
|
|
457
|
+
export{D as AuthenticationError,g as BaseResource,$ as BrowserCache,Ve as CardDBClient,l as CardDBError,h as Collection,Y as Configuration,re as Connection,k as ConnectionError,X as DEFAULT_CACHE_TTL,V as DEFAULT_ENDPOINT,J as DEFAULT_MAX_NETWORK_RETRIES,Q as DEFAULT_MAX_RETRIES,j as DEFAULT_OPEN_TIMEOUT,W as DEFAULT_RETRY_BASE_DELAY,H as DEFAULT_RETRY_MAX_DELAY,O as DEFAULT_TIMEOUT,oe as DatasetsResource,ue as DecksResource,M as FilterBuilder,ce as GamesResource,B as GraphQLError,ge as LinkResolutionError,ye as NotFoundError,ne as PublishersResource,c as QueryBuilder,b as RateLimitError,he as RecordsResource,x as RestrictedError,de as RulesResource,I as ServerError,S as TimeoutError,R as ValidationError,se as cacheKey,Re as contains,me as eq,te as getRateLimitInfo,_e as getSDKVersion,ee as getUserAgent,we as gt,ve as gte,Se as ilike,Ce as isNotNull,Ie as isNull,xe as like,pe as lt,be as lte,ke as neq,De as notWithin,ie as readCache,C as resolveFilter,$e as within,ae as writeCache};//# sourceMappingURL=index.js.map
|
|
330
458
|
//# sourceMappingURL=index.js.map
|