@goatlab/typesense 0.0.2
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/LICENSE +21 -0
- package/dist/TypesenseApi.d.ts +229 -0
- package/dist/TypesenseApi.js +423 -0
- package/dist/TypesenseApi.js.map +1 -0
- package/dist/actions/admin/getCollectionStats.d.ts +3 -0
- package/dist/actions/admin/getCollectionStats.js +8 -0
- package/dist/actions/admin/getCollectionStats.js.map +1 -0
- package/dist/actions/admin/health.d.ts +4 -0
- package/dist/actions/admin/health.js +22 -0
- package/dist/actions/admin/health.js.map +1 -0
- package/dist/actions/admin/metrics.d.ts +4 -0
- package/dist/actions/admin/metrics.js +11 -0
- package/dist/actions/admin/metrics.js.map +1 -0
- package/dist/actions/aliases/createOrUpdateAlias.d.ts +3 -0
- package/dist/actions/aliases/createOrUpdateAlias.js +10 -0
- package/dist/actions/aliases/createOrUpdateAlias.js.map +1 -0
- package/dist/actions/aliases/deleteAlias.d.ts +3 -0
- package/dist/actions/aliases/deleteAlias.js +7 -0
- package/dist/actions/aliases/deleteAlias.js.map +1 -0
- package/dist/actions/aliases/getAlias.d.ts +3 -0
- package/dist/actions/aliases/getAlias.js +7 -0
- package/dist/actions/aliases/getAlias.js.map +1 -0
- package/dist/actions/aliases/listAliases.d.ts +3 -0
- package/dist/actions/aliases/listAliases.js +7 -0
- package/dist/actions/aliases/listAliases.js.map +1 -0
- package/dist/actions/collections/createCollection.d.ts +3 -0
- package/dist/actions/collections/createCollection.js +18 -0
- package/dist/actions/collections/createCollection.js.map +1 -0
- package/dist/actions/collections/deleteCollection.d.ts +3 -0
- package/dist/actions/collections/deleteCollection.js +13 -0
- package/dist/actions/collections/deleteCollection.js.map +1 -0
- package/dist/actions/collections/getCollection.d.ts +3 -0
- package/dist/actions/collections/getCollection.js +11 -0
- package/dist/actions/collections/getCollection.js.map +1 -0
- package/dist/actions/collections/getOrCreateCollection.d.ts +3 -0
- package/dist/actions/collections/getOrCreateCollection.js +19 -0
- package/dist/actions/collections/getOrCreateCollection.js.map +1 -0
- package/dist/actions/collections/listCollections.d.ts +3 -0
- package/dist/actions/collections/listCollections.js +7 -0
- package/dist/actions/collections/listCollections.js.map +1 -0
- package/dist/actions/collections/updateCollection.d.ts +3 -0
- package/dist/actions/collections/updateCollection.js +14 -0
- package/dist/actions/collections/updateCollection.js.map +1 -0
- package/dist/actions/documents/clearCollection.d.ts +5 -0
- package/dist/actions/documents/clearCollection.js +11 -0
- package/dist/actions/documents/clearCollection.js.map +1 -0
- package/dist/actions/documents/deleteByFilter.d.ts +5 -0
- package/dist/actions/documents/deleteByFilter.js +15 -0
- package/dist/actions/documents/deleteByFilter.js.map +1 -0
- package/dist/actions/documents/deleteDocument.d.ts +3 -0
- package/dist/actions/documents/deleteDocument.js +14 -0
- package/dist/actions/documents/deleteDocument.js.map +1 -0
- package/dist/actions/documents/exportDocuments.d.ts +5 -0
- package/dist/actions/documents/exportDocuments.js +51 -0
- package/dist/actions/documents/exportDocuments.js.map +1 -0
- package/dist/actions/documents/getDocumentById.d.ts +3 -0
- package/dist/actions/documents/getDocumentById.js +12 -0
- package/dist/actions/documents/getDocumentById.js.map +1 -0
- package/dist/actions/documents/importDocuments.d.ts +4 -0
- package/dist/actions/documents/importDocuments.js +58 -0
- package/dist/actions/documents/importDocuments.js.map +1 -0
- package/dist/actions/documents/insertDocument.d.ts +3 -0
- package/dist/actions/documents/insertDocument.js +38 -0
- package/dist/actions/documents/insertDocument.js.map +1 -0
- package/dist/actions/documents/updateDocument.d.ts +5 -0
- package/dist/actions/documents/updateDocument.js +15 -0
- package/dist/actions/documents/updateDocument.js.map +1 -0
- package/dist/actions/documents/upsertDocument.d.ts +3 -0
- package/dist/actions/documents/upsertDocument.js +16 -0
- package/dist/actions/documents/upsertDocument.js.map +1 -0
- package/dist/actions/overrides/deleteOverride.d.ts +3 -0
- package/dist/actions/overrides/deleteOverride.js +8 -0
- package/dist/actions/overrides/deleteOverride.js.map +1 -0
- package/dist/actions/overrides/getOverride.d.ts +3 -0
- package/dist/actions/overrides/getOverride.js +8 -0
- package/dist/actions/overrides/getOverride.js.map +1 -0
- package/dist/actions/overrides/listOverrides.d.ts +5 -0
- package/dist/actions/overrides/listOverrides.js +8 -0
- package/dist/actions/overrides/listOverrides.js.map +1 -0
- package/dist/actions/overrides/upsertOverride.d.ts +3 -0
- package/dist/actions/overrides/upsertOverride.js +11 -0
- package/dist/actions/overrides/upsertOverride.js.map +1 -0
- package/dist/actions/presets/deletePreset.d.ts +3 -0
- package/dist/actions/presets/deletePreset.js +7 -0
- package/dist/actions/presets/deletePreset.js.map +1 -0
- package/dist/actions/presets/getPreset.d.ts +3 -0
- package/dist/actions/presets/getPreset.js +7 -0
- package/dist/actions/presets/getPreset.js.map +1 -0
- package/dist/actions/presets/listPresets.d.ts +5 -0
- package/dist/actions/presets/listPresets.js +7 -0
- package/dist/actions/presets/listPresets.js.map +1 -0
- package/dist/actions/presets/upsertPreset.d.ts +3 -0
- package/dist/actions/presets/upsertPreset.js +10 -0
- package/dist/actions/presets/upsertPreset.js.map +1 -0
- package/dist/actions/search/multiSearch.d.ts +3 -0
- package/dist/actions/search/multiSearch.js +10 -0
- package/dist/actions/search/multiSearch.js.map +1 -0
- package/dist/actions/search/search.d.ts +5 -0
- package/dist/actions/search/search.js +19 -0
- package/dist/actions/search/search.js.map +1 -0
- package/dist/actions/synonyms/deleteSynonym.d.ts +3 -0
- package/dist/actions/synonyms/deleteSynonym.js +8 -0
- package/dist/actions/synonyms/deleteSynonym.js.map +1 -0
- package/dist/actions/synonyms/getSynonym.d.ts +3 -0
- package/dist/actions/synonyms/getSynonym.js +8 -0
- package/dist/actions/synonyms/getSynonym.js.map +1 -0
- package/dist/actions/synonyms/listSynonyms.d.ts +5 -0
- package/dist/actions/synonyms/listSynonyms.js +8 -0
- package/dist/actions/synonyms/listSynonyms.js.map +1 -0
- package/dist/actions/synonyms/upsertSynonym.d.ts +3 -0
- package/dist/actions/synonyms/upsertSynonym.js +11 -0
- package/dist/actions/synonyms/upsertSynonym.js.map +1 -0
- package/dist/components/export-formatter.d.ts +16 -0
- package/dist/components/export-formatter.js +226 -0
- package/dist/components/export-formatter.js.map +1 -0
- package/dist/components/http-client.d.ts +50 -0
- package/dist/components/http-client.js +149 -0
- package/dist/components/http-client.js.map +1 -0
- package/dist/components/resilience-policy.d.ts +33 -0
- package/dist/components/resilience-policy.js +115 -0
- package/dist/components/resilience-policy.js.map +1 -0
- package/dist/components/schema-manager.d.ts +30 -0
- package/dist/components/schema-manager.js +227 -0
- package/dist/components/schema-manager.js.map +1 -0
- package/dist/components/typesense.filter-builder.d.ts +127 -0
- package/dist/components/typesense.filter-builder.js +216 -0
- package/dist/components/typesense.filter-builder.js.map +1 -0
- package/dist/examples/multitenancy-example.d.ts +4 -0
- package/dist/examples/multitenancy-example.js +182 -0
- package/dist/examples/multitenancy-example.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/tests/const.d.ts +6 -0
- package/dist/tests/const.js +22 -0
- package/dist/tests/const.js.map +1 -0
- package/dist/tests/typesense.d.ts +2 -0
- package/dist/tests/typesense.js +24 -0
- package/dist/tests/typesense.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/typesense.model.d.ts +455 -0
- package/dist/typesense.model.js +98 -0
- package/dist/typesense.model.js.map +1 -0
- package/dist/utils/tenant.d.ts +48 -0
- package/dist/utils/tenant.js +89 -0
- package/dist/utils/tenant.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tenant utility functions for multitenancy support
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sanitizeTenantId = sanitizeTenantId;
|
|
7
|
+
exports.createFQCN = createFQCN;
|
|
8
|
+
exports.parseFQCN = parseFQCN;
|
|
9
|
+
exports.isTenantCollection = isTenantCollection;
|
|
10
|
+
exports.filterCollectionsByTenant = filterCollectionsByTenant;
|
|
11
|
+
/**
|
|
12
|
+
* Validates and sanitizes a tenant ID for use in collection names
|
|
13
|
+
* - Enforces allowed characters: a-zA-Z0-9_-
|
|
14
|
+
* - Converts to lowercase to avoid case-sensitivity issues
|
|
15
|
+
* - Enforces max length of 128 characters
|
|
16
|
+
*
|
|
17
|
+
* @param tenantId - Raw tenant ID to validate
|
|
18
|
+
* @returns Sanitized tenant ID
|
|
19
|
+
* @throws Error if tenant ID is invalid
|
|
20
|
+
*/
|
|
21
|
+
function sanitizeTenantId(tenantId) {
|
|
22
|
+
if (!tenantId || typeof tenantId !== 'string') {
|
|
23
|
+
throw new Error('Tenant ID must be a non-empty string');
|
|
24
|
+
}
|
|
25
|
+
// Trim whitespace
|
|
26
|
+
const trimmed = tenantId.trim();
|
|
27
|
+
if (!trimmed) {
|
|
28
|
+
throw new Error('Tenant ID cannot be empty or whitespace only');
|
|
29
|
+
}
|
|
30
|
+
// Check allowed characters
|
|
31
|
+
const allowedPattern = /^[a-zA-Z0-9_\-]+$/;
|
|
32
|
+
if (!allowedPattern.test(trimmed)) {
|
|
33
|
+
throw new Error('Tenant ID can only contain alphanumeric characters, underscores, and hyphens');
|
|
34
|
+
}
|
|
35
|
+
// Check max length
|
|
36
|
+
if (trimmed.length > 128) {
|
|
37
|
+
throw new Error('Tenant ID cannot exceed 128 characters');
|
|
38
|
+
}
|
|
39
|
+
// Convert to lowercase
|
|
40
|
+
return trimmed.toLowerCase();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Creates a fully qualified collection name by prepending tenant ID
|
|
44
|
+
* Format: <tenantId>__<baseCollectionName>
|
|
45
|
+
*
|
|
46
|
+
* @param tenantId - Sanitized tenant ID
|
|
47
|
+
* @param baseCollectionName - Base collection name without tenant prefix
|
|
48
|
+
* @returns Fully qualified collection name
|
|
49
|
+
*/
|
|
50
|
+
function createFQCN(tenantId, baseCollectionName) {
|
|
51
|
+
return `${tenantId}__${baseCollectionName}`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Extracts tenant ID and base collection name from a fully qualified collection name
|
|
55
|
+
*
|
|
56
|
+
* @param fqcn - Fully qualified collection name
|
|
57
|
+
* @returns Object with tenantId and baseCollectionName, or null if not a tenant collection
|
|
58
|
+
*/
|
|
59
|
+
function parseFQCN(fqcn) {
|
|
60
|
+
const separatorIndex = fqcn.indexOf('__');
|
|
61
|
+
if (separatorIndex === -1 || separatorIndex === 0) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
tenantId: fqcn.substring(0, separatorIndex),
|
|
66
|
+
baseCollectionName: fqcn.substring(separatorIndex + 2)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Checks if a collection name is tenant-prefixed
|
|
71
|
+
*
|
|
72
|
+
* @param collectionName - Collection name to check
|
|
73
|
+
* @returns True if the collection has a tenant prefix
|
|
74
|
+
*/
|
|
75
|
+
function isTenantCollection(collectionName) {
|
|
76
|
+
return collectionName.includes('__') && !collectionName.startsWith('__');
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Filters collections by tenant ID
|
|
80
|
+
*
|
|
81
|
+
* @param collections - Array of collection names
|
|
82
|
+
* @param tenantId - Tenant ID to filter by
|
|
83
|
+
* @returns Collections belonging to the specified tenant
|
|
84
|
+
*/
|
|
85
|
+
function filterCollectionsByTenant(collections, tenantId) {
|
|
86
|
+
const prefix = `${tenantId}__`;
|
|
87
|
+
return collections.filter(name => name.startsWith(prefix));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=tenant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../src/utils/tenant.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAYH,4CA2BC;AAUD,gCAEC;AAQD,8BAWC;AAQD,gDAEC;AASD,8DAGC;AA1FD;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACzD,CAAC;IAED,kBAAkB;IAClB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;IAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IAED,2BAA2B;IAC3B,MAAM,cAAc,GAAG,mBAAmB,CAAA;IAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAA;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IAED,uBAAuB;IACvB,OAAO,OAAO,CAAC,WAAW,EAAE,CAAA;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,UAAU,CAAC,QAAgB,EAAE,kBAA0B;IACrE,OAAO,GAAG,QAAQ,KAAK,kBAAkB,EAAE,CAAA;AAC7C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY;IACpC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzC,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC;QAC3C,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;KACvD,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,cAAsB;IACvD,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,yBAAyB,CAAC,WAAqB,EAAE,QAAgB;IAC/E,MAAM,MAAM,GAAG,GAAG,QAAQ,IAAI,CAAA;IAC9B,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AAC5D,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"license": "MIT",
|
|
3
|
+
"main": "./dist/index.js",
|
|
4
|
+
"author": "ignacio.cabrera@goatlab.io",
|
|
5
|
+
"name": "@goatlab/typesense",
|
|
6
|
+
"version": "0.0.2",
|
|
7
|
+
"private": false,
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@goatlab/js-utils": "0.8.42",
|
|
14
|
+
"@goatlab/tsconfig": "0.0.15"
|
|
15
|
+
},
|
|
16
|
+
"description": "Metabase API wrapper for TypeScript and Node.js",
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@testcontainers/mysql": "^11.0.3",
|
|
19
|
+
"@types/node": "^18.15.9",
|
|
20
|
+
"@vitest/ui": "^3.2.4",
|
|
21
|
+
"dotenv-cli": "^7.1.0",
|
|
22
|
+
"eslint": "^8.36.0",
|
|
23
|
+
"happy-dom": "^18.0.1",
|
|
24
|
+
"prettier": "^2.8.7",
|
|
25
|
+
"pretty-quick": "^3.1.3",
|
|
26
|
+
"rimraf": "^5.0.1",
|
|
27
|
+
"testcontainers": "^11.3.1",
|
|
28
|
+
"ts-node": "^10.9.1",
|
|
29
|
+
"turbo": "^1.1.10",
|
|
30
|
+
"typescript": "^5.0.2",
|
|
31
|
+
"vitest": "^3.2.4"
|
|
32
|
+
},
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=14.16.0"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist"
|
|
38
|
+
],
|
|
39
|
+
"homepage": "https://docs.goatlab.io",
|
|
40
|
+
"keywords": [
|
|
41
|
+
"metabase",
|
|
42
|
+
"api",
|
|
43
|
+
"wrapper",
|
|
44
|
+
"typescript"
|
|
45
|
+
],
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "tsc",
|
|
48
|
+
"dev": "tsc --watch",
|
|
49
|
+
"format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"",
|
|
50
|
+
"lint": "eslint src --fix",
|
|
51
|
+
"prebuild": "rimraf dist",
|
|
52
|
+
"predev": "rimraf dist",
|
|
53
|
+
"prestart": "rimraf dist",
|
|
54
|
+
"serve": "tsc -w",
|
|
55
|
+
"test": "vitest run --reporter=verbose",
|
|
56
|
+
"test:ui": "vitest --ui",
|
|
57
|
+
"test:watch": "vitest",
|
|
58
|
+
"update:packages": "npm-check-updates -u && yarn"
|
|
59
|
+
}
|
|
60
|
+
}
|