quickbase-js 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -4
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/ticket.d.ts +71 -0
- package/dist/auth/ticket.d.ts.map +1 -0
- package/dist/auth/ticket.js +160 -0
- package/dist/auth/ticket.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +9 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/types.d.ts +17 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/quickbase.esm.js +6 -2
- package/dist/quickbase.esm.js.map +4 -4
- package/dist/quickbase.min.js +6 -2
- package/dist/quickbase.min.js.map +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,9 +14,9 @@ A TypeScript/JavaScript client for the QuickBase JSON RESTful API.
|
|
|
14
14
|
|
|
15
15
|
## API Reference
|
|
16
16
|
|
|
17
|
-
**[View
|
|
17
|
+
**[View Full API Documentation →](https://drewbradfordxyz.github.io/quickbase-js/)**
|
|
18
18
|
|
|
19
|
-
The SDK provides typed methods for all QuickBase API endpoints including Apps, Tables, Fields, Records, Reports, Users, and more. Each method includes JSDoc documentation with links to the official QuickBase API docs.
|
|
19
|
+
The SDK provides typed methods for all 59 QuickBase API endpoints including Apps, Tables, Fields, Records, Reports, Users, and more. Each method includes JSDoc documentation with links to the official QuickBase API docs.
|
|
20
20
|
|
|
21
21
|
## Installation
|
|
22
22
|
|
|
@@ -149,6 +149,46 @@ const client = createClient({
|
|
|
149
149
|
});
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
+
### Ticket Auth (Username/Password)
|
|
153
|
+
|
|
154
|
+
Ticket authentication lets users log in with their QuickBase email and password. Unlike user tokens, tickets properly attribute record changes (`createdBy`/`modifiedBy`) to the authenticated user.
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
const client = createClient({
|
|
158
|
+
realm: 'mycompany',
|
|
159
|
+
auth: {
|
|
160
|
+
type: 'ticket',
|
|
161
|
+
username: 'user@example.com',
|
|
162
|
+
password: 'password',
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Key behaviors:**
|
|
168
|
+
- Authentication happens lazily on the first API call
|
|
169
|
+
- Password is discarded from memory after authentication
|
|
170
|
+
- Tickets are valid for 12 hours by default (configurable up to ~6 months)
|
|
171
|
+
- When the ticket expires, an error is thrown — create a new client with fresh credentials
|
|
172
|
+
|
|
173
|
+
**With custom ticket validity:**
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
const client = createClient({
|
|
177
|
+
realm: 'mycompany',
|
|
178
|
+
auth: {
|
|
179
|
+
type: 'ticket',
|
|
180
|
+
username: 'user@example.com',
|
|
181
|
+
password: 'password',
|
|
182
|
+
hours: 24 * 7, // 1 week
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**When to use ticket auth:**
|
|
188
|
+
- Third-party services where users shouldn't share user tokens
|
|
189
|
+
- Proper audit trails with correct `createdBy`/`modifiedBy` attribution
|
|
190
|
+
- Session-based authentication flows
|
|
191
|
+
|
|
152
192
|
## Pagination
|
|
153
193
|
|
|
154
194
|
Paginated endpoints (`runQuery`, `runReport`, `getUsers`, etc.) return a `PaginatedRequest` that supports fluent pagination methods.
|
|
@@ -374,6 +414,108 @@ try {
|
|
|
374
414
|
}
|
|
375
415
|
```
|
|
376
416
|
|
|
417
|
+
## Rate Limiting
|
|
418
|
+
|
|
419
|
+
QuickBase enforces a rate limit of **100 requests per 10 seconds** per user token. This SDK follows [QuickBase's official rate limiting guidance](https://developer.quickbase.com/rateLimit) — relying on server-side `Retry-After` headers by default, with optional client-side throttling.
|
|
420
|
+
|
|
421
|
+
### How 429 Errors Are Handled
|
|
422
|
+
|
|
423
|
+
When the SDK receives a 429 (Too Many Requests) response, it automatically:
|
|
424
|
+
|
|
425
|
+
1. **Extracts rate limit info** from response headers (`Retry-After`, `cf-ray`, `qb-api-ray`)
|
|
426
|
+
2. **Calls the `onRateLimit` callback** if configured, allowing you to log or monitor
|
|
427
|
+
3. **Waits before retrying** - uses the `Retry-After` header if present, otherwise exponential backoff with jitter
|
|
428
|
+
4. **Retries the request** up to `maxAttempts` times (default: 3)
|
|
429
|
+
5. **Throws a `RateLimitError`** if all retries are exhausted
|
|
430
|
+
|
|
431
|
+
```
|
|
432
|
+
Request fails with 429
|
|
433
|
+
↓
|
|
434
|
+
Extract Retry-After header
|
|
435
|
+
↓
|
|
436
|
+
Call onRateLimit callback (if set)
|
|
437
|
+
↓
|
|
438
|
+
Wait (Retry-After or exponential backoff)
|
|
439
|
+
↓
|
|
440
|
+
Retry request (up to maxAttempts)
|
|
441
|
+
↓
|
|
442
|
+
Throw RateLimitError if exhausted
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Retry Configuration
|
|
446
|
+
|
|
447
|
+
```typescript
|
|
448
|
+
const client = createClient({
|
|
449
|
+
realm: 'mycompany',
|
|
450
|
+
auth: { type: 'user-token', userToken: 'token' },
|
|
451
|
+
rateLimit: {
|
|
452
|
+
retry: {
|
|
453
|
+
maxAttempts: 5, // Default: 3
|
|
454
|
+
initialDelayMs: 1000, // Default: 1000ms
|
|
455
|
+
maxDelayMs: 30000, // Default: 30000ms
|
|
456
|
+
multiplier: 2, // Default: 2
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
});
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
The backoff formula with jitter: `delay = initialDelayMs * (multiplier ^ attempt) ± 10%`
|
|
463
|
+
|
|
464
|
+
### Proactive Throttling
|
|
465
|
+
|
|
466
|
+
Prevent 429 errors entirely by throttling requests client-side using a sliding window algorithm:
|
|
467
|
+
|
|
468
|
+
```typescript
|
|
469
|
+
const client = createClient({
|
|
470
|
+
realm: 'mycompany',
|
|
471
|
+
auth: { type: 'user-token', userToken: 'token' },
|
|
472
|
+
rateLimit: {
|
|
473
|
+
proactiveThrottle: {
|
|
474
|
+
enabled: true,
|
|
475
|
+
requestsPer10Seconds: 100,
|
|
476
|
+
},
|
|
477
|
+
},
|
|
478
|
+
});
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
This tracks request timestamps and blocks new requests when the limit would be exceeded, waiting until the oldest request exits the 10-second window.
|
|
482
|
+
|
|
483
|
+
### Rate Limit Callback
|
|
484
|
+
|
|
485
|
+
Get notified when rate limited (called before retry):
|
|
486
|
+
|
|
487
|
+
```typescript
|
|
488
|
+
const client = createClient({
|
|
489
|
+
realm: 'mycompany',
|
|
490
|
+
auth: { type: 'user-token', userToken: 'token' },
|
|
491
|
+
rateLimit: {
|
|
492
|
+
onRateLimit: (info) => {
|
|
493
|
+
console.log(`Rate limited on ${info.requestUrl}`);
|
|
494
|
+
console.log(`Retry after: ${info.retryAfter} seconds`);
|
|
495
|
+
console.log(`Ray ID: ${info.qbApiRay}`);
|
|
496
|
+
console.log(`Attempt: ${info.attempt}`);
|
|
497
|
+
},
|
|
498
|
+
},
|
|
499
|
+
});
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### Handling RateLimitError
|
|
503
|
+
|
|
504
|
+
If retries are exhausted, a `RateLimitError` is thrown:
|
|
505
|
+
|
|
506
|
+
```typescript
|
|
507
|
+
import { RateLimitError } from 'quickbase-js';
|
|
508
|
+
|
|
509
|
+
try {
|
|
510
|
+
await client.getApp({ appId: 'bpqe82s1' });
|
|
511
|
+
} catch (error) {
|
|
512
|
+
if (error instanceof RateLimitError) {
|
|
513
|
+
console.log(`Rate limited after ${error.rateLimitInfo.attempt} attempts`);
|
|
514
|
+
console.log(`Retry after: ${error.retryAfter} seconds`);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
```
|
|
518
|
+
|
|
377
519
|
## Migration from v1
|
|
378
520
|
|
|
379
521
|
### Authentication
|
|
@@ -445,6 +587,22 @@ npm run typecheck
|
|
|
445
587
|
npm run spec:generate
|
|
446
588
|
```
|
|
447
589
|
|
|
590
|
+
### Updating the OpenAPI Spec
|
|
591
|
+
|
|
592
|
+
The `spec/` directory is a Git submodule pointing to [quickbase-spec](https://github.com/DrewBradfordXYZ/quickbase-spec). Each SDK pins to a specific commit, so spec updates are controlled:
|
|
593
|
+
|
|
594
|
+
```bash
|
|
595
|
+
# Update to latest spec
|
|
596
|
+
cd spec
|
|
597
|
+
git pull origin main
|
|
598
|
+
cd ..
|
|
599
|
+
git add spec
|
|
600
|
+
git commit -m "Update quickbase-spec submodule"
|
|
601
|
+
|
|
602
|
+
# Regenerate types
|
|
603
|
+
npm run spec:generate
|
|
604
|
+
```
|
|
605
|
+
|
|
448
606
|
### Spec Tools
|
|
449
607
|
|
|
450
608
|
```bash
|
|
@@ -461,14 +619,17 @@ npm run spec:generate # Generate TypeScript types
|
|
|
461
619
|
|
|
462
620
|
### Documentation
|
|
463
621
|
|
|
464
|
-
|
|
622
|
+
API documentation is auto-generated from source code and hosted at:
|
|
623
|
+
**https://drewbradfordxyz.github.io/quickbase-js/**
|
|
624
|
+
|
|
625
|
+
To generate docs locally:
|
|
465
626
|
|
|
466
627
|
```bash
|
|
467
628
|
npm run docs # Generate docs to ./docs
|
|
468
629
|
npm run docs:watch # Watch mode for development
|
|
469
630
|
```
|
|
470
631
|
|
|
471
|
-
|
|
632
|
+
Documentation is built with [TypeDoc](https://typedoc.org/) and auto-deployed to GitHub Pages on every push to main.
|
|
472
633
|
|
|
473
634
|
## License
|
|
474
635
|
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type { AuthStrategy, AuthContext, CachedToken } from './types.js';
|
|
|
5
5
|
export { UserTokenStrategy } from './user-token.js';
|
|
6
6
|
export { TempTokenStrategy } from './temp-token.js';
|
|
7
7
|
export { SsoTokenStrategy } from './sso-token.js';
|
|
8
|
+
export { TicketStrategy } from './ticket.js';
|
|
8
9
|
export { TokenCache } from './token-cache.js';
|
|
9
10
|
import type { AuthConfig } from '../core/types.js';
|
|
10
11
|
import type { AuthStrategy, AuthContext } from './types.js';
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAM5D;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,WAAW,GACnB,YAAY,CA0Bd"}
|
package/dist/auth/index.js
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
export { UserTokenStrategy } from './user-token.js';
|
|
5
5
|
export { TempTokenStrategy } from './temp-token.js';
|
|
6
6
|
export { SsoTokenStrategy } from './sso-token.js';
|
|
7
|
+
export { TicketStrategy } from './ticket.js'; // XML-API-TICKET: Remove if XML API discontinued
|
|
7
8
|
export { TokenCache } from './token-cache.js';
|
|
8
9
|
import { UserTokenStrategy } from './user-token.js';
|
|
9
10
|
import { TempTokenStrategy } from './temp-token.js';
|
|
10
11
|
import { SsoTokenStrategy } from './sso-token.js';
|
|
12
|
+
import { TicketStrategy } from './ticket.js'; // XML-API-TICKET: Remove if XML API discontinued
|
|
11
13
|
/**
|
|
12
14
|
* Factory function to create the appropriate auth strategy
|
|
13
15
|
*/
|
|
@@ -22,6 +24,9 @@ export function createAuthStrategy(authConfig, context) {
|
|
|
22
24
|
});
|
|
23
25
|
case 'sso':
|
|
24
26
|
return new SsoTokenStrategy(authConfig.samlToken, context);
|
|
27
|
+
// XML-API-TICKET: Remove this case if XML API is discontinued
|
|
28
|
+
case 'ticket':
|
|
29
|
+
return new TicketStrategy(authConfig.username, authConfig.password, { hours: authConfig.hours }, context);
|
|
25
30
|
default:
|
|
26
31
|
throw new Error(`Unknown auth type: ${authConfig.type}`);
|
|
27
32
|
}
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC,CAAC,iDAAiD;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC,CAAC,iDAAiD;AAE/F;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAsB,EACtB,OAAoB;IAEpB,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,YAAY;YACf,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE9D,KAAK,YAAY;YACf,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE;gBAC1D,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,eAAe,EAAE,UAAU,CAAC,eAAe;aAC5C,CAAC,CAAC;QAEL,KAAK,KAAK;YACR,OAAO,IAAI,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE7D,8DAA8D;QAC9D,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CACvB,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,QAAQ,EACnB,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,EAC3B,OAAO,CACR,CAAC;QAEJ;YACE,MAAM,IAAI,KAAK,CAAC,sBAAuB,UAA+B,CAAC,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket Authentication Strategy (XML API)
|
|
3
|
+
*
|
|
4
|
+
* Authenticates using username/password via the XML API_Authenticate endpoint.
|
|
5
|
+
* Unlike user tokens, tickets properly attribute record changes (createdBy/modifiedBy)
|
|
6
|
+
* to the authenticated user.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This uses the legacy QuickBase XML API (API_Authenticate).
|
|
9
|
+
* If QuickBase discontinues the XML API in the future, this file and related code
|
|
10
|
+
* can be safely removed.
|
|
11
|
+
*
|
|
12
|
+
* To find all related code, search for the marker: XML-API-TICKET
|
|
13
|
+
*
|
|
14
|
+
* Files to remove/update:
|
|
15
|
+
* - src/auth/ticket.ts (this file)
|
|
16
|
+
* - src/auth/index.ts (TicketStrategy export, createAuthStrategy case)
|
|
17
|
+
* - src/core/types.ts (TicketAuthConfig)
|
|
18
|
+
* - src/index.ts (exports)
|
|
19
|
+
* - tests/auth/ticket.test.ts
|
|
20
|
+
* - README.md: "Ticket Auth" section
|
|
21
|
+
*/
|
|
22
|
+
import type { AuthStrategy, AuthContext } from './types.js';
|
|
23
|
+
/**
|
|
24
|
+
* Options for ticket authentication
|
|
25
|
+
*/
|
|
26
|
+
export interface TicketAuthOptions {
|
|
27
|
+
/** Ticket validity in hours (default: 12, max: 4380 ~6 months) */
|
|
28
|
+
hours?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Ticket authentication strategy using XML API_Authenticate.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const client = createClient({
|
|
36
|
+
* realm: 'mycompany',
|
|
37
|
+
* auth: {
|
|
38
|
+
* type: 'ticket',
|
|
39
|
+
* username: 'user@example.com',
|
|
40
|
+
* password: 'password',
|
|
41
|
+
* },
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* XML-API-TICKET: Remove this class if XML API is discontinued.
|
|
46
|
+
*/
|
|
47
|
+
export declare class TicketStrategy implements AuthStrategy {
|
|
48
|
+
private readonly username;
|
|
49
|
+
private password;
|
|
50
|
+
private readonly hours;
|
|
51
|
+
private readonly realm;
|
|
52
|
+
private readonly fetchApi;
|
|
53
|
+
private readonly logger;
|
|
54
|
+
private ticket;
|
|
55
|
+
private userId;
|
|
56
|
+
private authenticated;
|
|
57
|
+
private pendingAuth;
|
|
58
|
+
constructor(username: string, password: string, options: TicketAuthOptions | undefined, context: AuthContext);
|
|
59
|
+
getToken(_dbid?: string): Promise<string>;
|
|
60
|
+
getAuthorizationHeader(token: string): string;
|
|
61
|
+
handleAuthError(_dbid?: string): Promise<boolean>;
|
|
62
|
+
invalidate(_dbid?: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get the authenticated user's ID (available after first API call)
|
|
65
|
+
*/
|
|
66
|
+
getUserId(): string | null;
|
|
67
|
+
private authenticate;
|
|
68
|
+
private parseXmlResponse;
|
|
69
|
+
private escapeXml;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=ticket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../src/auth/ticket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAW5D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAgC;gBAGjD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,OAAO,EAAE,WAAW;IAUhB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB/C,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASvD,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;YAIZ,YAAY;IAkD1B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,SAAS;CAQlB"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket Authentication Strategy (XML API)
|
|
3
|
+
*
|
|
4
|
+
* Authenticates using username/password via the XML API_Authenticate endpoint.
|
|
5
|
+
* Unlike user tokens, tickets properly attribute record changes (createdBy/modifiedBy)
|
|
6
|
+
* to the authenticated user.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This uses the legacy QuickBase XML API (API_Authenticate).
|
|
9
|
+
* If QuickBase discontinues the XML API in the future, this file and related code
|
|
10
|
+
* can be safely removed.
|
|
11
|
+
*
|
|
12
|
+
* To find all related code, search for the marker: XML-API-TICKET
|
|
13
|
+
*
|
|
14
|
+
* Files to remove/update:
|
|
15
|
+
* - src/auth/ticket.ts (this file)
|
|
16
|
+
* - src/auth/index.ts (TicketStrategy export, createAuthStrategy case)
|
|
17
|
+
* - src/core/types.ts (TicketAuthConfig)
|
|
18
|
+
* - src/index.ts (exports)
|
|
19
|
+
* - tests/auth/ticket.test.ts
|
|
20
|
+
* - README.md: "Ticket Auth" section
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Ticket authentication strategy using XML API_Authenticate.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const client = createClient({
|
|
28
|
+
* realm: 'mycompany',
|
|
29
|
+
* auth: {
|
|
30
|
+
* type: 'ticket',
|
|
31
|
+
* username: 'user@example.com',
|
|
32
|
+
* password: 'password',
|
|
33
|
+
* },
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* XML-API-TICKET: Remove this class if XML API is discontinued.
|
|
38
|
+
*/
|
|
39
|
+
export class TicketStrategy {
|
|
40
|
+
username;
|
|
41
|
+
password; // Cleared after first auth
|
|
42
|
+
hours;
|
|
43
|
+
realm;
|
|
44
|
+
fetchApi;
|
|
45
|
+
logger;
|
|
46
|
+
ticket = null;
|
|
47
|
+
userId = null;
|
|
48
|
+
authenticated = false;
|
|
49
|
+
pendingAuth = null;
|
|
50
|
+
constructor(username, password, options, context) {
|
|
51
|
+
this.username = username;
|
|
52
|
+
this.password = password;
|
|
53
|
+
this.hours = Math.min(Math.max(options?.hours ?? 12, 1), 4380);
|
|
54
|
+
this.realm = context.realm;
|
|
55
|
+
this.fetchApi = context.fetchApi;
|
|
56
|
+
this.logger = context.logger;
|
|
57
|
+
}
|
|
58
|
+
async getToken(_dbid) {
|
|
59
|
+
// Return cached ticket if available
|
|
60
|
+
if (this.ticket) {
|
|
61
|
+
return this.ticket;
|
|
62
|
+
}
|
|
63
|
+
// If already authenticated but no ticket, it expired
|
|
64
|
+
if (this.authenticated) {
|
|
65
|
+
throw new Error('Ticket expired; create a new client with fresh credentials');
|
|
66
|
+
}
|
|
67
|
+
// Dedupe concurrent auth requests
|
|
68
|
+
if (this.pendingAuth) {
|
|
69
|
+
return this.pendingAuth;
|
|
70
|
+
}
|
|
71
|
+
this.pendingAuth = this.authenticate();
|
|
72
|
+
try {
|
|
73
|
+
const ticket = await this.pendingAuth;
|
|
74
|
+
return ticket;
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
this.pendingAuth = null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
getAuthorizationHeader(token) {
|
|
81
|
+
return `QB-TICKET ${token}`;
|
|
82
|
+
}
|
|
83
|
+
async handleAuthError(_dbid) {
|
|
84
|
+
// Clear expired ticket
|
|
85
|
+
this.ticket = null;
|
|
86
|
+
// Can't refresh - password was cleared after initial auth
|
|
87
|
+
this.logger.debug('Ticket auth error - cannot refresh (password was cleared)');
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
invalidate(_dbid) {
|
|
91
|
+
this.ticket = null;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get the authenticated user's ID (available after first API call)
|
|
95
|
+
*/
|
|
96
|
+
getUserId() {
|
|
97
|
+
return this.userId;
|
|
98
|
+
}
|
|
99
|
+
async authenticate() {
|
|
100
|
+
if (!this.password) {
|
|
101
|
+
throw new Error('Ticket expired; create a new client with fresh credentials');
|
|
102
|
+
}
|
|
103
|
+
const url = `https://${this.realm}.quickbase.com/db/main`;
|
|
104
|
+
// Build XML request body
|
|
105
|
+
const xmlBody = `<qdbapi>
|
|
106
|
+
<username>${this.escapeXml(this.username)}</username>
|
|
107
|
+
<password>${this.escapeXml(this.password)}</password>
|
|
108
|
+
<hours>${this.hours}</hours>
|
|
109
|
+
</qdbapi>`;
|
|
110
|
+
this.logger.debug(`Authenticating via API_Authenticate for ${this.username}`);
|
|
111
|
+
const response = await this.fetchApi(url, {
|
|
112
|
+
method: 'POST',
|
|
113
|
+
headers: {
|
|
114
|
+
'Content-Type': 'application/xml',
|
|
115
|
+
'QUICKBASE-ACTION': 'API_Authenticate',
|
|
116
|
+
},
|
|
117
|
+
body: xmlBody,
|
|
118
|
+
});
|
|
119
|
+
const xmlText = await response.text();
|
|
120
|
+
const result = this.parseXmlResponse(xmlText);
|
|
121
|
+
if (result.errcode !== 0) {
|
|
122
|
+
const errMsg = result.errdetail || result.errtext || 'Unknown error';
|
|
123
|
+
throw new Error(`Authentication failed: ${errMsg} (code: ${result.errcode})`);
|
|
124
|
+
}
|
|
125
|
+
if (!result.ticket) {
|
|
126
|
+
throw new Error('No ticket returned from API_Authenticate');
|
|
127
|
+
}
|
|
128
|
+
// Store ticket and user ID
|
|
129
|
+
this.ticket = result.ticket;
|
|
130
|
+
this.userId = result.userid;
|
|
131
|
+
this.authenticated = true;
|
|
132
|
+
// Clear password from memory
|
|
133
|
+
this.password = null;
|
|
134
|
+
this.logger.debug(`Authenticated successfully, userId: ${this.userId}`);
|
|
135
|
+
return this.ticket;
|
|
136
|
+
}
|
|
137
|
+
parseXmlResponse(xml) {
|
|
138
|
+
// Simple XML parsing for the specific response format
|
|
139
|
+
const getTagContent = (tag) => {
|
|
140
|
+
const match = xml.match(new RegExp(`<${tag}>([^<]*)</${tag}>`));
|
|
141
|
+
return match?.[1] ?? '';
|
|
142
|
+
};
|
|
143
|
+
return {
|
|
144
|
+
ticket: getTagContent('ticket'),
|
|
145
|
+
userid: getTagContent('userid'),
|
|
146
|
+
errcode: parseInt(getTagContent('errcode'), 10) || 0,
|
|
147
|
+
errtext: getTagContent('errtext'),
|
|
148
|
+
errdetail: getTagContent('errdetail') || undefined,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
escapeXml(str) {
|
|
152
|
+
return str
|
|
153
|
+
.replace(/&/g, '&')
|
|
154
|
+
.replace(/</g, '<')
|
|
155
|
+
.replace(/>/g, '>')
|
|
156
|
+
.replace(/"/g, '"')
|
|
157
|
+
.replace(/'/g, ''');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=ticket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../src/auth/ticket.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAG/E;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,CA8BrE;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAG/E;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,CA8BrE;AA8GD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
package/dist/core/config.js
CHANGED
|
@@ -78,6 +78,15 @@ function validateAuthConfig(auth) {
|
|
|
78
78
|
throw new Error('SAML token is required for SSO auth');
|
|
79
79
|
}
|
|
80
80
|
break;
|
|
81
|
+
// XML-API-TICKET: Remove this case if XML API is discontinued
|
|
82
|
+
case 'ticket':
|
|
83
|
+
if (!auth.username) {
|
|
84
|
+
throw new Error('Username is required for ticket auth');
|
|
85
|
+
}
|
|
86
|
+
if (!auth.password) {
|
|
87
|
+
throw new Error('Password is required for ticket auth');
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
81
90
|
default:
|
|
82
91
|
throw new Error(`Unknown auth type: ${auth.type}`);
|
|
83
92
|
}
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Core module exports
|
|
3
3
|
*/
|
|
4
|
-
export type { QuickbaseConfig, AuthConfig, UserTokenAuthConfig, TempTokenAuthConfig, SsoTokenAuthConfig,
|
|
4
|
+
export type { QuickbaseConfig, AuthConfig, UserTokenAuthConfig, TempTokenAuthConfig, SsoTokenAuthConfig, TicketAuthConfig, // XML-API-TICKET: Remove if XML API discontinued
|
|
5
|
+
RateLimitConfig, RetryConfig, RequestContext, RateLimitInfo, PaginationMetadata, PaginatedResponse, FieldInfo, ResolvedConfig, } from './types.js';
|
|
5
6
|
export { DEFAULT_CONFIG } from './types.js';
|
|
6
7
|
export { QuickbaseError, RateLimitError, AuthenticationError, AuthorizationError, NotFoundError, ValidationError, TimeoutError, ServerError, parseErrorResponse, isRetryableError, } from './errors.js';
|
|
7
8
|
export { Logger, createLogger } from './logger.js';
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAAE,iDAAiD;AACnE,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface QuickbaseConfig {
|
|
|
21
21
|
/** Convert ISO date strings in responses to JavaScript Date objects (default: true) */
|
|
22
22
|
convertDates?: boolean;
|
|
23
23
|
}
|
|
24
|
-
export type AuthConfig = UserTokenAuthConfig | TempTokenAuthConfig | SsoTokenAuthConfig;
|
|
24
|
+
export type AuthConfig = UserTokenAuthConfig | TempTokenAuthConfig | SsoTokenAuthConfig | TicketAuthConfig;
|
|
25
25
|
export interface UserTokenAuthConfig {
|
|
26
26
|
type: 'user-token';
|
|
27
27
|
/** Your QuickBase user token */
|
|
@@ -44,6 +44,22 @@ export interface SsoTokenAuthConfig {
|
|
|
44
44
|
/** SAML token for SSO authentication */
|
|
45
45
|
samlToken: string;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Ticket authentication using username/password via XML API_Authenticate.
|
|
49
|
+
* Unlike user tokens, tickets properly attribute record changes (createdBy/modifiedBy)
|
|
50
|
+
* to the authenticated user.
|
|
51
|
+
*
|
|
52
|
+
* XML-API-TICKET: Remove this interface if XML API is discontinued.
|
|
53
|
+
*/
|
|
54
|
+
export interface TicketAuthConfig {
|
|
55
|
+
type: 'ticket';
|
|
56
|
+
/** QuickBase username (email address) */
|
|
57
|
+
username: string;
|
|
58
|
+
/** QuickBase password */
|
|
59
|
+
password: string;
|
|
60
|
+
/** Ticket validity in hours (default: 12, max: 4380 ~6 months) */
|
|
61
|
+
hours?: number;
|
|
62
|
+
}
|
|
47
63
|
export interface RateLimitConfig {
|
|
48
64
|
/**
|
|
49
65
|
* Client-side proactive throttling (optional)
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,IAAI,EAAE,UAAU,CAAC;IAEjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;IAExB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,uFAAuF;IACvF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAClB,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiMH,mCAAmC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE,8BAA8B;IACvC,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE;QACL,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,CAAC;KACd;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,KAAK;QACd,oBAAoB,EAAE,GAAG;KAC1B;IACD,mBAAmB,EAAE,MAAM,EAAE,yCAAyC;IACtE,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,IAAI;CACV,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,10 +19,12 @@
|
|
|
19
19
|
* console.log(app.name);
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
|
-
export type { QuickbaseConfig, AuthConfig, UserTokenAuthConfig, TempTokenAuthConfig, SsoTokenAuthConfig,
|
|
22
|
+
export type { QuickbaseConfig, AuthConfig, UserTokenAuthConfig, TempTokenAuthConfig, SsoTokenAuthConfig, TicketAuthConfig, // XML-API-TICKET: Remove if XML API discontinued
|
|
23
|
+
RateLimitConfig, RetryConfig, RateLimitInfo, PaginationMetadata, PaginatedResponse, FieldInfo, } from './core/index.js';
|
|
23
24
|
export { QuickbaseError, RateLimitError, AuthenticationError, AuthorizationError, NotFoundError, ValidationError, TimeoutError, ServerError, } from './core/index.js';
|
|
24
25
|
export type { AuthStrategy } from './auth/index.js';
|
|
25
|
-
export { UserTokenStrategy, TempTokenStrategy, SsoTokenStrategy,
|
|
26
|
+
export { UserTokenStrategy, TempTokenStrategy, SsoTokenStrategy, TicketStrategy, // XML-API-TICKET: Remove if XML API discontinued
|
|
27
|
+
createAuthStrategy, } from './auth/index.js';
|
|
26
28
|
export type { RequestOptions } from './client/index.js';
|
|
27
29
|
export { SlidingWindowThrottle, NoOpThrottle } from './client/index.js';
|
|
28
30
|
export type { QuickbaseAPI } from './generated/types.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,YAAY,EACV,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGxE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,mDAAmD;IACnD,OAAO,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE;QAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;QACpD,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjB,qCAAqC;IACrC,SAAS,EAAE,MAAM,cAAc,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CA6BrE;AAGD,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,YAAY,EACV,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAAE,iDAAiD;AACnE,eAAe,EACf,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAAE,iDAAiD;AACjE,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGxE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,mDAAmD;IACnD,OAAO,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE;QAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;QACpD,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjB,qCAAqC;IACrC,SAAS,EAAE,MAAM,cAAc,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CA6BrE;AAGD,eAAe,YAAY,CAAC"}
|