quickbase-js 2.1.0 → 2.2.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.
Files changed (112) hide show
  1. package/README.md +674 -90
  2. package/bin/quickbase-js.js +54 -0
  3. package/dist/auth/index.d.ts.map +1 -1
  4. package/dist/auth/index.js +5 -1
  5. package/dist/auth/index.js.map +1 -1
  6. package/dist/auth/ticket.d.ts +13 -0
  7. package/dist/auth/ticket.d.ts.map +1 -1
  8. package/dist/auth/ticket.js +103 -3
  9. package/dist/auth/ticket.js.map +1 -1
  10. package/dist/cli/schema.d.ts +23 -0
  11. package/dist/cli/schema.d.ts.map +1 -0
  12. package/dist/cli/schema.js +425 -0
  13. package/dist/cli/schema.js.map +1 -0
  14. package/dist/client/request.d.ts +2 -1
  15. package/dist/client/request.d.ts.map +1 -1
  16. package/dist/client/request.js +165 -18
  17. package/dist/client/request.js.map +1 -1
  18. package/dist/core/config.d.ts.map +1 -1
  19. package/dist/core/config.js +3 -0
  20. package/dist/core/config.js.map +1 -1
  21. package/dist/core/errors.d.ts +17 -0
  22. package/dist/core/errors.d.ts.map +1 -1
  23. package/dist/core/errors.js +32 -0
  24. package/dist/core/errors.js.map +1 -1
  25. package/dist/core/index.d.ts +2 -2
  26. package/dist/core/index.d.ts.map +1 -1
  27. package/dist/core/index.js +1 -1
  28. package/dist/core/index.js.map +1 -1
  29. package/dist/core/schema.d.ts +37 -0
  30. package/dist/core/schema.d.ts.map +1 -0
  31. package/dist/core/schema.js +168 -0
  32. package/dist/core/schema.js.map +1 -0
  33. package/dist/core/transform.d.ts +36 -0
  34. package/dist/core/transform.d.ts.map +1 -0
  35. package/dist/core/transform.js +205 -0
  36. package/dist/core/transform.js.map +1 -0
  37. package/dist/core/types.d.ts +87 -0
  38. package/dist/core/types.d.ts.map +1 -1
  39. package/dist/core/types.js.map +1 -1
  40. package/dist/index.d.ts +11 -2
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +7 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/quickbase.esm.js +3 -3
  45. package/dist/quickbase.esm.js.map +4 -4
  46. package/dist/quickbase.min.js +3 -3
  47. package/dist/quickbase.min.js.map +4 -4
  48. package/dist/xml/codepages.d.ts +60 -0
  49. package/dist/xml/codepages.d.ts.map +1 -0
  50. package/dist/xml/codepages.js +88 -0
  51. package/dist/xml/codepages.js.map +1 -0
  52. package/dist/xml/dbvars.d.ts +39 -0
  53. package/dist/xml/dbvars.d.ts.map +1 -0
  54. package/dist/xml/dbvars.js +54 -0
  55. package/dist/xml/dbvars.js.map +1 -0
  56. package/dist/xml/errors.d.ts +64 -0
  57. package/dist/xml/errors.d.ts.map +1 -0
  58. package/dist/xml/errors.js +102 -0
  59. package/dist/xml/errors.js.map +1 -0
  60. package/dist/xml/fields.d.ts +45 -0
  61. package/dist/xml/fields.d.ts.map +1 -0
  62. package/dist/xml/fields.js +86 -0
  63. package/dist/xml/fields.js.map +1 -0
  64. package/dist/xml/groups.d.ts +196 -0
  65. package/dist/xml/groups.d.ts.map +1 -0
  66. package/dist/xml/groups.js +424 -0
  67. package/dist/xml/groups.js.map +1 -0
  68. package/dist/xml/html.d.ts +61 -0
  69. package/dist/xml/html.d.ts.map +1 -0
  70. package/dist/xml/html.js +110 -0
  71. package/dist/xml/html.js.map +1 -0
  72. package/dist/xml/index.d.ts +453 -0
  73. package/dist/xml/index.d.ts.map +1 -0
  74. package/dist/xml/index.js +741 -0
  75. package/dist/xml/index.js.map +1 -0
  76. package/dist/xml/metadata.d.ts +49 -0
  77. package/dist/xml/metadata.d.ts.map +1 -0
  78. package/dist/xml/metadata.js +84 -0
  79. package/dist/xml/metadata.js.map +1 -0
  80. package/dist/xml/records.d.ts +106 -0
  81. package/dist/xml/records.d.ts.map +1 -0
  82. package/dist/xml/records.js +220 -0
  83. package/dist/xml/records.js.map +1 -0
  84. package/dist/xml/request.d.ts +115 -0
  85. package/dist/xml/request.d.ts.map +1 -0
  86. package/dist/xml/request.js +167 -0
  87. package/dist/xml/request.js.map +1 -0
  88. package/dist/xml/roles.d.ts +117 -0
  89. package/dist/xml/roles.d.ts.map +1 -0
  90. package/dist/xml/roles.js +241 -0
  91. package/dist/xml/roles.js.map +1 -0
  92. package/dist/xml/schema.d.ts +94 -0
  93. package/dist/xml/schema.d.ts.map +1 -0
  94. package/dist/xml/schema.js +354 -0
  95. package/dist/xml/schema.js.map +1 -0
  96. package/dist/xml/transform.d.ts +154 -0
  97. package/dist/xml/transform.d.ts.map +1 -0
  98. package/dist/xml/transform.js +182 -0
  99. package/dist/xml/transform.js.map +1 -0
  100. package/dist/xml/types.d.ts +531 -0
  101. package/dist/xml/types.d.ts.map +1 -0
  102. package/dist/xml/types.js +22 -0
  103. package/dist/xml/types.js.map +1 -0
  104. package/dist/xml/users.d.ts +92 -0
  105. package/dist/xml/users.d.ts.map +1 -0
  106. package/dist/xml/users.js +166 -0
  107. package/dist/xml/users.js.map +1 -0
  108. package/dist/xml/webhooks.d.ts +98 -0
  109. package/dist/xml/webhooks.d.ts.map +1 -0
  110. package/dist/xml/webhooks.js +202 -0
  111. package/dist/xml/webhooks.js.map +1 -0
  112. package/package.json +6 -2
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Schema resolution and lookup utilities
3
+ */
4
+ /**
5
+ * Error thrown when an unknown table or field alias is used
6
+ */
7
+ export class SchemaError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = 'SchemaError';
11
+ }
12
+ }
13
+ /**
14
+ * Resolve a schema definition into lookup maps for efficient alias resolution
15
+ */
16
+ export function resolveSchema(schema) {
17
+ if (!schema)
18
+ return undefined;
19
+ const tableAliasToId = new Map();
20
+ const tableIdToAlias = new Map();
21
+ const fieldAliasToId = new Map();
22
+ const fieldIdToAlias = new Map();
23
+ for (const [tableAlias, tableSchema] of Object.entries(schema.tables)) {
24
+ const tableId = tableSchema.id;
25
+ // Table mappings
26
+ tableAliasToId.set(tableAlias, tableId);
27
+ tableIdToAlias.set(tableId, tableAlias);
28
+ // Field mappings for this table
29
+ const aliasToId = new Map();
30
+ const idToAlias = new Map();
31
+ for (const [fieldAlias, fieldId] of Object.entries(tableSchema.fields)) {
32
+ aliasToId.set(fieldAlias, fieldId);
33
+ idToAlias.set(fieldId, fieldAlias);
34
+ }
35
+ fieldAliasToId.set(tableId, aliasToId);
36
+ fieldIdToAlias.set(tableId, idToAlias);
37
+ }
38
+ return {
39
+ original: schema,
40
+ tableAliasToId,
41
+ tableIdToAlias,
42
+ fieldAliasToId,
43
+ fieldIdToAlias,
44
+ };
45
+ }
46
+ /**
47
+ * Resolve a table alias to its ID.
48
+ * If the input is already a table ID, returns it unchanged.
49
+ * Throws SchemaError if alias is not found.
50
+ */
51
+ export function resolveTableAlias(schema, tableRef) {
52
+ if (!schema)
53
+ return tableRef;
54
+ // Check if it's an alias
55
+ const tableId = schema.tableAliasToId.get(tableRef);
56
+ if (tableId)
57
+ return tableId;
58
+ // Check if it's already a table ID
59
+ if (schema.tableIdToAlias.has(tableRef))
60
+ return tableRef;
61
+ // Unknown alias - throw helpful error
62
+ const availableAliases = Array.from(schema.tableAliasToId.keys());
63
+ const suggestion = findSimilar(tableRef, availableAliases);
64
+ const suggestionText = suggestion ? ` Did you mean '${suggestion}'?` : '';
65
+ const availableText = availableAliases.length > 0
66
+ ? ` Available: ${availableAliases.join(', ')}`
67
+ : '';
68
+ throw new SchemaError(`Unknown table alias '${tableRef}'.${suggestionText}${availableText}`);
69
+ }
70
+ /**
71
+ * Resolve a field alias to its ID for a given table.
72
+ * If the input is already a field ID (number), returns it unchanged.
73
+ * Throws SchemaError if alias is not found.
74
+ */
75
+ export function resolveFieldAlias(schema, tableId, fieldRef) {
76
+ // If it's already a number, return as-is
77
+ if (typeof fieldRef === 'number')
78
+ return fieldRef;
79
+ // If no schema, try to parse as number or return as-is
80
+ if (!schema) {
81
+ const num = parseInt(fieldRef, 10);
82
+ if (!isNaN(num))
83
+ return num;
84
+ // Can't resolve without schema - pass through and let API handle it
85
+ return fieldRef;
86
+ }
87
+ // Look up the alias
88
+ const fieldMap = schema.fieldAliasToId.get(tableId);
89
+ if (fieldMap) {
90
+ const fieldId = fieldMap.get(fieldRef);
91
+ if (fieldId !== undefined)
92
+ return fieldId;
93
+ }
94
+ // Check if it's a numeric string (raw field ID)
95
+ const num = parseInt(fieldRef, 10);
96
+ if (!isNaN(num))
97
+ return num;
98
+ // Unknown alias - throw helpful error
99
+ const availableAliases = fieldMap ? Array.from(fieldMap.keys()) : [];
100
+ const suggestion = findSimilar(fieldRef, availableAliases);
101
+ const suggestionText = suggestion ? ` Did you mean '${suggestion}'?` : '';
102
+ // Get table alias for better error message
103
+ const tableAlias = schema.tableIdToAlias.get(tableId) || tableId;
104
+ throw new SchemaError(`Unknown field alias '${fieldRef}' in table '${tableAlias}'.${suggestionText}`);
105
+ }
106
+ /**
107
+ * Get the alias for a field ID, if defined in schema.
108
+ * Returns undefined if no alias is defined.
109
+ */
110
+ export function getFieldAlias(schema, tableId, fieldId) {
111
+ if (!schema)
112
+ return undefined;
113
+ const fieldMap = schema.fieldIdToAlias.get(tableId);
114
+ return fieldMap?.get(fieldId);
115
+ }
116
+ /**
117
+ * Get the alias for a table ID, if defined in schema.
118
+ * Returns undefined if no alias is defined.
119
+ */
120
+ export function getTableAlias(schema, tableId) {
121
+ if (!schema)
122
+ return undefined;
123
+ return schema.tableIdToAlias.get(tableId);
124
+ }
125
+ /**
126
+ * Find a similar string from a list (for "did you mean" suggestions)
127
+ * Uses simple Levenshtein distance
128
+ */
129
+ function findSimilar(input, candidates, maxDistance = 3) {
130
+ const inputLower = input.toLowerCase();
131
+ let bestMatch;
132
+ let bestDistance = maxDistance + 1;
133
+ for (const candidate of candidates) {
134
+ const distance = levenshteinDistance(inputLower, candidate.toLowerCase());
135
+ if (distance < bestDistance) {
136
+ bestDistance = distance;
137
+ bestMatch = candidate;
138
+ }
139
+ }
140
+ return bestDistance <= maxDistance ? bestMatch : undefined;
141
+ }
142
+ /**
143
+ * Calculate Levenshtein distance between two strings
144
+ */
145
+ function levenshteinDistance(a, b) {
146
+ if (a.length === 0)
147
+ return b.length;
148
+ if (b.length === 0)
149
+ return a.length;
150
+ // Create matrix with proper initialization
151
+ const matrix = Array.from({ length: b.length + 1 }, (_, i) => Array.from({ length: a.length + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)));
152
+ // Fill in the rest
153
+ for (let i = 1; i <= b.length; i++) {
154
+ for (let j = 1; j <= a.length; j++) {
155
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
156
+ matrix[i][j] = matrix[i - 1][j - 1];
157
+ }
158
+ else {
159
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
160
+ matrix[i][j - 1] + 1, // insertion
161
+ matrix[i - 1][j] + 1 // deletion
162
+ );
163
+ }
164
+ }
165
+ }
166
+ return matrix[b.length][a.length];
167
+ }
168
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Request and response transformation utilities for schema aliases
3
+ */
4
+ import type { ResolvedSchema } from './types.js';
5
+ /**
6
+ * Context for request transformation
7
+ */
8
+ export interface RequestTransformContext {
9
+ schema?: ResolvedSchema;
10
+ /** The resolved table ID (after alias resolution) */
11
+ tableId?: string;
12
+ }
13
+ /**
14
+ * Transform a request body, resolving table and field aliases to IDs.
15
+ * Handles: from, to, select, sortBy, groupBy, where, data
16
+ */
17
+ export declare function transformRequest<T extends Record<string, unknown>>(body: T, ctx: RequestTransformContext): T;
18
+ /**
19
+ * Context for response transformation
20
+ */
21
+ export interface ResponseTransformContext {
22
+ schema?: ResolvedSchema;
23
+ /** The table ID for field alias lookups */
24
+ tableId?: string;
25
+ }
26
+ /**
27
+ * Transform a response, converting field IDs to aliases and unwrapping values.
28
+ * Handles nested data arrays (for runQuery, upsert responses).
29
+ */
30
+ export declare function transformResponse<T>(response: T, ctx: ResponseTransformContext): T;
31
+ /**
32
+ * Extract the table ID from a request body.
33
+ * Looks for 'from' or 'to' fields and resolves any aliases.
34
+ */
35
+ export declare function extractTableIdFromRequest(body: Record<string, unknown> | undefined, schema?: ResolvedSchema): string | undefined;
36
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/core/transform.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAWjD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,IAAI,EAAE,CAAC,EACP,GAAG,EAAE,uBAAuB,GAC3B,CAAC,CAyDH;AAqFD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,wBAAwB,GAC5B,CAAC,CAiBH;AAmED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,GAAG,SAAS,CAcpB"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Request and response transformation utilities for schema aliases
3
+ */
4
+ import { resolveTableAlias, resolveFieldAlias, getFieldAlias, } from './schema.js';
5
+ /**
6
+ * Transform a request body, resolving table and field aliases to IDs.
7
+ * Handles: from, to, select, sortBy, groupBy, where, data
8
+ */
9
+ export function transformRequest(body, ctx) {
10
+ // Work with a plain object to avoid TypeScript index signature issues
11
+ const result = { ...body };
12
+ let tableId = ctx.tableId;
13
+ // Schema-dependent transforms (alias resolution)
14
+ if (ctx.schema) {
15
+ // Resolve table references (from, to)
16
+ if ('from' in result && typeof result.from === 'string') {
17
+ tableId = resolveTableAlias(ctx.schema, result.from);
18
+ result.from = tableId;
19
+ }
20
+ if ('to' in result && typeof result.to === 'string') {
21
+ tableId = resolveTableAlias(ctx.schema, result.to);
22
+ result.to = tableId;
23
+ }
24
+ // Resolve field aliases (requires tableId)
25
+ if (tableId) {
26
+ // Resolve select array
27
+ if ('select' in result && Array.isArray(result.select)) {
28
+ result.select = result.select.map((field) => resolveFieldAlias(ctx.schema, tableId, field));
29
+ }
30
+ // Resolve sortBy array
31
+ if ('sortBy' in result && Array.isArray(result.sortBy)) {
32
+ result.sortBy = result.sortBy.map((sort) => ({
33
+ ...sort,
34
+ fieldId: resolveFieldAlias(ctx.schema, tableId, sort.fieldId),
35
+ }));
36
+ }
37
+ // Resolve groupBy array
38
+ if ('groupBy' in result && Array.isArray(result.groupBy)) {
39
+ result.groupBy = result.groupBy.map((group) => ({
40
+ ...group,
41
+ fieldId: resolveFieldAlias(ctx.schema, tableId, group.fieldId),
42
+ }));
43
+ }
44
+ // Resolve where clause (string replacement)
45
+ if ('where' in result && typeof result.where === 'string') {
46
+ result.where = transformWhereClause(result.where, ctx.schema, tableId);
47
+ }
48
+ }
49
+ }
50
+ // Auto-wrap data values (always runs, no schema required)
51
+ if ('data' in result && Array.isArray(result.data)) {
52
+ result.data = result.data.map((record) => wrapRecordValues(record, ctx.schema, tableId));
53
+ }
54
+ return result;
55
+ }
56
+ /**
57
+ * Wrap record values and optionally resolve field aliases.
58
+ * Always wraps plain values in { value: X } format.
59
+ * Resolves field aliases to IDs if schema is provided.
60
+ */
61
+ function wrapRecordValues(record, schema, tableId) {
62
+ const result = {};
63
+ for (const [key, value] of Object.entries(record)) {
64
+ // Resolve field alias if schema is available
65
+ let outputKey = key;
66
+ if (schema && tableId) {
67
+ try {
68
+ const fieldId = resolveFieldAlias(schema, tableId, key);
69
+ outputKey = String(fieldId);
70
+ }
71
+ catch {
72
+ // Not an alias, keep original key
73
+ }
74
+ }
75
+ // Always auto-wrap values
76
+ result[outputKey] = wrapFieldValue(value);
77
+ }
78
+ return result;
79
+ }
80
+ /**
81
+ * Transform a where clause, replacing field aliases with IDs.
82
+ * QuickBase where syntax: {fieldId.operator.value}
83
+ * Example: {'status'.EX.'Active'} -> {7.EX.'Active'}
84
+ */
85
+ function transformWhereClause(where, schema, tableId) {
86
+ // Match patterns like {'fieldAlias' or {fieldAlias. at the start of conditions
87
+ // The pattern captures the field reference between { and .
88
+ return where.replace(/\{['"]?([^.'"\}]+)['"]?\./g, (match, fieldRef) => {
89
+ try {
90
+ const fieldId = resolveFieldAlias(schema, tableId, fieldRef);
91
+ return `{${fieldId}.`;
92
+ }
93
+ catch {
94
+ // If alias not found, keep original (might be a raw ID)
95
+ return match;
96
+ }
97
+ });
98
+ }
99
+ /**
100
+ * Wrap a value in QuickBase's { value: X } format if not already wrapped.
101
+ * Handles plain values, arrays, and already-wrapped values.
102
+ */
103
+ function wrapFieldValue(value) {
104
+ // Already wrapped - return as-is
105
+ if (isWrappedValue(value)) {
106
+ return value;
107
+ }
108
+ // Wrap plain value
109
+ return { value };
110
+ }
111
+ /**
112
+ * Check if a value is already wrapped in { value: X } format.
113
+ */
114
+ function isWrappedValue(value) {
115
+ if (value === null || value === undefined)
116
+ return false;
117
+ if (typeof value !== 'object' || Array.isArray(value))
118
+ return false;
119
+ const obj = value;
120
+ return 'value' in obj;
121
+ }
122
+ /**
123
+ * Transform a response, converting field IDs to aliases and unwrapping values.
124
+ * Handles nested data arrays (for runQuery, upsert responses).
125
+ */
126
+ export function transformResponse(response, ctx) {
127
+ if (!response || typeof response !== 'object')
128
+ return response;
129
+ const result = { ...response };
130
+ // Handle data array (runQuery, upsert responses)
131
+ if ('data' in result && Array.isArray(result.data) && ctx.tableId) {
132
+ result.data = result.data.map((record) => transformRecordForResponse(record, ctx.schema, ctx.tableId));
133
+ }
134
+ return result;
135
+ }
136
+ /**
137
+ * Transform a single record from the response.
138
+ * - Converts field ID keys to aliases (if schema defined)
139
+ * - Unwraps { value: X } to just X
140
+ * - Unknown fields keep their numeric key but still get unwrapped
141
+ */
142
+ function transformRecordForResponse(record, schema, tableId) {
143
+ const result = {};
144
+ for (const [key, value] of Object.entries(record)) {
145
+ // Determine the output key (alias or original)
146
+ let outputKey = key;
147
+ const fieldId = parseInt(key, 10);
148
+ if (!isNaN(fieldId) && schema) {
149
+ const alias = getFieldAlias(schema, tableId, fieldId);
150
+ if (alias) {
151
+ outputKey = alias;
152
+ }
153
+ }
154
+ // Unwrap { value: X } -> X
155
+ const unwrappedValue = unwrapFieldValue(value);
156
+ result[outputKey] = unwrappedValue;
157
+ }
158
+ return result;
159
+ }
160
+ /**
161
+ * Unwrap a field value from QuickBase's { value: X } format.
162
+ * Also handles arrays of values.
163
+ */
164
+ function unwrapFieldValue(value) {
165
+ if (value === null || value === undefined)
166
+ return value;
167
+ if (typeof value === 'object' && !Array.isArray(value)) {
168
+ const obj = value;
169
+ // Check if it's a { value: X } wrapper
170
+ if ('value' in obj && Object.keys(obj).length === 1) {
171
+ // Recursively unwrap in case value is an array of wrapped values
172
+ return unwrapFieldValue(obj.value);
173
+ }
174
+ // Check if it's a { value: X, ...metadata } wrapper (preserve just value)
175
+ if ('value' in obj) {
176
+ return unwrapFieldValue(obj.value);
177
+ }
178
+ }
179
+ // Handle array of { value: X } objects
180
+ if (Array.isArray(value)) {
181
+ return value.map(unwrapFieldValue);
182
+ }
183
+ return value;
184
+ }
185
+ // =============================================================================
186
+ // Table ID Extraction
187
+ // =============================================================================
188
+ /**
189
+ * Extract the table ID from a request body.
190
+ * Looks for 'from' or 'to' fields and resolves any aliases.
191
+ */
192
+ export function extractTableIdFromRequest(body, schema) {
193
+ if (!body)
194
+ return undefined;
195
+ // Check 'from' (runQuery, deleteRecords)
196
+ if ('from' in body && typeof body.from === 'string') {
197
+ return schema ? resolveTableAlias(schema, body.from) : body.from;
198
+ }
199
+ // Check 'to' (upsert)
200
+ if ('to' in body && typeof body.to === 'string') {
201
+ return schema ? resolveTableAlias(schema, body.to) : body.to;
202
+ }
203
+ return undefined;
204
+ }
205
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/core/transform.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,85 @@ export interface QuickbaseConfig {
20
20
  autoPaginate?: boolean;
21
21
  /** Convert ISO date strings in responses to JavaScript Date objects (default: true) */
22
22
  convertDates?: boolean;
23
+ /**
24
+ * Schema aliases for tables and fields.
25
+ * Allows using readable names instead of QuickBase IDs in queries.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * schema: {
30
+ * tables: {
31
+ * projects: {
32
+ * id: 'bqw3ryzab',
33
+ * fields: {
34
+ * name: 6,
35
+ * status: 7,
36
+ * dueDate: 12,
37
+ * }
38
+ * }
39
+ * }
40
+ * }
41
+ * ```
42
+ */
43
+ schema?: Schema;
44
+ /**
45
+ * Read-only mode prevents any write operations.
46
+ * Uses defense-in-depth with two layers:
47
+ * 1. Explicit blocklist of known write endpoints
48
+ * 2. HTTP method check (blocks POST/PUT/DELETE/PATCH unless allowlisted)
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const qb = createClient({
53
+ * realm: 'myrealm',
54
+ * auth: { type: 'user-token', userToken: '...' },
55
+ * readOnly: true,
56
+ * });
57
+ * // qb.runQuery() works
58
+ * // qb.upsert() throws ReadOnlyError
59
+ * ```
60
+ */
61
+ readOnly?: boolean;
62
+ }
63
+ /**
64
+ * Field alias mapping: alias name -> field ID
65
+ * @example { name: 6, status: 7, dueDate: 12 }
66
+ */
67
+ export interface FieldSchema {
68
+ [alias: string]: number;
69
+ }
70
+ /**
71
+ * Table schema with ID and field mappings
72
+ * @example { id: 'bqw3ryzab', fields: { name: 6, status: 7 } }
73
+ */
74
+ export interface TableSchema {
75
+ /** QuickBase table ID (dbid) */
76
+ id: string;
77
+ /** Field alias mappings */
78
+ fields: FieldSchema;
79
+ }
80
+ /**
81
+ * Complete schema definition with table aliases
82
+ */
83
+ export interface Schema {
84
+ tables: {
85
+ [alias: string]: TableSchema;
86
+ };
87
+ }
88
+ /**
89
+ * Resolved schema with bidirectional lookup maps for efficient alias resolution
90
+ */
91
+ export interface ResolvedSchema {
92
+ /** Original schema definition */
93
+ original: Schema;
94
+ /** Table alias -> table ID */
95
+ tableAliasToId: Map<string, string>;
96
+ /** Table ID -> table alias */
97
+ tableIdToAlias: Map<string, string>;
98
+ /** Table ID -> (field alias -> field ID) */
99
+ fieldAliasToId: Map<string, Map<string, number>>;
100
+ /** Table ID -> (field ID -> field alias) */
101
+ fieldIdToAlias: Map<string, Map<number, string>>;
23
102
  }
24
103
  export type AuthConfig = UserTokenAuthConfig | TempTokenAuthConfig | SsoTokenAuthConfig | TicketAuthConfig;
25
104
  export interface UserTokenAuthConfig {
@@ -59,6 +138,10 @@ export interface TicketAuthConfig {
59
138
  password: string;
60
139
  /** Ticket validity in hours (default: 12, max: 4380 ~6 months) */
61
140
  hours?: number;
141
+ /** Callback invoked when ticket expires - use to show login UI */
142
+ onExpired?: () => void;
143
+ /** Persist ticket to storage for session survival (default: none) */
144
+ persist?: 'sessionStorage' | 'localStorage';
62
145
  }
63
146
  export interface RateLimitConfig {
64
147
  /**
@@ -147,6 +230,10 @@ export interface ResolvedConfig {
147
230
  onRateLimit?: (info: RateLimitInfo) => void;
148
231
  autoPaginate: boolean;
149
232
  convertDates: boolean;
233
+ /** Resolved schema with lookup maps (undefined if no schema provided) */
234
+ schema?: ResolvedSchema;
235
+ /** Read-only mode - blocks all write operations */
236
+ readOnly: boolean;
150
237
  }
151
238
  /** Default configuration values */
152
239
  export declare const DEFAULT_CONFIG: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsSH,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
@@ -20,11 +20,13 @@
20
20
  * ```
21
21
  */
22
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';
24
- export { QuickbaseError, RateLimitError, AuthenticationError, AuthorizationError, NotFoundError, ValidationError, TimeoutError, ServerError, } from './core/index.js';
23
+ RateLimitConfig, RetryConfig, RateLimitInfo, PaginationMetadata, PaginatedResponse, FieldInfo, Schema, TableSchema, FieldSchema, ResolvedSchema, } from './core/index.js';
24
+ export { SchemaError } from './core/schema.js';
25
+ export { QuickbaseError, RateLimitError, AuthenticationError, AuthorizationError, NotFoundError, ValidationError, TimeoutError, ServerError, ReadOnlyError, } from './core/index.js';
25
26
  export type { AuthStrategy } from './auth/index.js';
26
27
  export { UserTokenStrategy, TempTokenStrategy, SsoTokenStrategy, TicketStrategy, // XML-API-TICKET: Remove if XML API discontinued
27
28
  createAuthStrategy, } from './auth/index.js';
29
+ import type { AuthStrategy } from './auth/index.js';
28
30
  export type { RequestOptions } from './client/index.js';
29
31
  export { SlidingWindowThrottle, NoOpThrottle } from './client/index.js';
30
32
  export type { QuickbaseAPI } from './generated/types.js';
@@ -46,6 +48,11 @@ export interface QuickbaseClient extends QuickbaseAPI {
46
48
  }) => Promise<T>;
47
49
  /** Get the resolved configuration */
48
50
  getConfig: () => ResolvedConfig;
51
+ /**
52
+ * Get the auth strategy for advanced usage (e.g., XML API client).
53
+ * XML-API: Used by createXmlClient() to access authentication.
54
+ */
55
+ getAuthStrategy: () => AuthStrategy;
49
56
  }
50
57
  /**
51
58
  * Create a QuickBase client
@@ -87,5 +94,7 @@ export interface QuickbaseClient extends QuickbaseAPI {
87
94
  * ```
88
95
  */
89
96
  export declare function createClient(config: QuickbaseConfig): QuickbaseClient;
97
+ export { createXmlClient, XmlClient, XmlError, XmlErrorCode, isUnauthorized as isXmlUnauthorized, isNotFound as isXmlNotFound, isInvalidTicket as isXmlInvalidTicket, isXmlWriteAction, } from './xml/index.js';
98
+ export type { XmlCaller, XmlClientOptions, XmlExecutor, Role, RoleAccess, UserRole, RoleMember, UserWithRoles, Group, GroupUser, GroupManager, Subgroup, UserInfo, SchemaField, SchemaQuery, SchemaVariable, SchemaChildTable, SchemaOriginal, SchemaTable, DatabaseInfo, DBInfo, RecordField, PageType, WebhookTrigger, WebhookOptions, GetRoleInfoResult, UserRolesResult, GetUserRoleResult, GetSchemaResult, GrantedDBsResult, FindDBByNameResult, GetUsersInGroupResult, CreateGroupResult, GetGroupRoleResult, ProvisionUserResult, AddReplaceDBPageResult, FieldAddChoicesResult, FieldRemoveChoicesResult, DoQueryCountResult, GetRecordInfoResult, GrantedGroupsResult, GrantedDBsForGroupResult, GetAppDTMInfoResult, GetAncestorInfoResult, ImportFromCSVResult, CopyMasterDetailResult, WebhookResult, } from './xml/index.js';
90
99
  export default createClient;
91
100
  //# sourceMappingURL=index.d.ts.map
@@ -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,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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -19,7 +19,9 @@
19
19
  * console.log(app.name);
20
20
  * ```
21
21
  */
22
- export { QuickbaseError, RateLimitError, AuthenticationError, AuthorizationError, NotFoundError, ValidationError, TimeoutError, ServerError, } from './core/index.js';
22
+ // Schema utilities
23
+ export { SchemaError } from './core/schema.js';
24
+ export { QuickbaseError, RateLimitError, AuthenticationError, AuthorizationError, NotFoundError, ValidationError, TimeoutError, ServerError, ReadOnlyError, } from './core/index.js';
23
25
  export { UserTokenStrategy, TempTokenStrategy, SsoTokenStrategy, TicketStrategy, // XML-API-TICKET: Remove if XML API discontinued
24
26
  createAuthStrategy, } from './auth/index.js';
25
27
  export { SlidingWindowThrottle, NoOpThrottle } from './client/index.js';
@@ -93,8 +95,12 @@ export function createClient(config) {
93
95
  ...apiMethods,
94
96
  request: executor.execute,
95
97
  getConfig: () => resolvedConfig,
98
+ // XML-API: Expose auth strategy for XML client
99
+ getAuthStrategy: () => auth,
96
100
  };
97
101
  }
102
+ // XML-API: XML API exports - remove when QuickBase discontinues XML API
103
+ export { createXmlClient, XmlClient, XmlError, XmlErrorCode, isUnauthorized as isXmlUnauthorized, isNotFound as isXmlNotFound, isInvalidTicket as isXmlInvalidTicket, isXmlWriteAction, } from './xml/index.js';
98
104
  // Default export
99
105
  export default createClient;
100
106
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAkBH,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAAE,iDAAiD;AACjE,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIxE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAmBzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,cAAc,CAAC,KAAK;QAC3B,OAAO,EAAE,cAAc,CAAC,OAAO;QAC/B,QAAQ,EAAE,cAAc,CAAC,QAAQ;QACjC,MAAM;KACP,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAkB,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,qBAAqB,CAAC;QACrC,MAAM,EAAE,cAAc;QACtB,IAAI;QACJ,QAAQ;QACR,MAAM;KACP,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAEnF,OAAO;QACL,GAAG,UAAU;QACb,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc;KAChC,CAAC;AACJ,CAAC;AAED,iBAAiB;AACjB,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAuBH,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EAAE,iDAAiD;AACjE,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIxE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAyBzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,cAAc,CAAC,KAAK;QAC3B,OAAO,EAAE,cAAc,CAAC,OAAO;QAC/B,QAAQ,EAAE,cAAc,CAAC,QAAQ;QACjC,MAAM;KACP,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAkB,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,qBAAqB,CAAC;QACrC,MAAM,EAAE,cAAc;QACtB,IAAI;QACJ,QAAQ;QACR,MAAM;KACP,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAEnF,OAAO;QACL,GAAG,UAAU;QACb,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc;QAC/B,+CAA+C;QAC/C,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI;KAC5B,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,OAAO,EACL,eAAe,EACf,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,IAAI,iBAAiB,EACnC,UAAU,IAAI,aAAa,EAC3B,eAAe,IAAI,kBAAkB,EACrC,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AA4DxB,iBAAiB;AACjB,eAAe,YAAY,CAAC"}