@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.
Files changed (149) hide show
  1. package/LICENSE +21 -0
  2. package/dist/TypesenseApi.d.ts +229 -0
  3. package/dist/TypesenseApi.js +423 -0
  4. package/dist/TypesenseApi.js.map +1 -0
  5. package/dist/actions/admin/getCollectionStats.d.ts +3 -0
  6. package/dist/actions/admin/getCollectionStats.js +8 -0
  7. package/dist/actions/admin/getCollectionStats.js.map +1 -0
  8. package/dist/actions/admin/health.d.ts +4 -0
  9. package/dist/actions/admin/health.js +22 -0
  10. package/dist/actions/admin/health.js.map +1 -0
  11. package/dist/actions/admin/metrics.d.ts +4 -0
  12. package/dist/actions/admin/metrics.js +11 -0
  13. package/dist/actions/admin/metrics.js.map +1 -0
  14. package/dist/actions/aliases/createOrUpdateAlias.d.ts +3 -0
  15. package/dist/actions/aliases/createOrUpdateAlias.js +10 -0
  16. package/dist/actions/aliases/createOrUpdateAlias.js.map +1 -0
  17. package/dist/actions/aliases/deleteAlias.d.ts +3 -0
  18. package/dist/actions/aliases/deleteAlias.js +7 -0
  19. package/dist/actions/aliases/deleteAlias.js.map +1 -0
  20. package/dist/actions/aliases/getAlias.d.ts +3 -0
  21. package/dist/actions/aliases/getAlias.js +7 -0
  22. package/dist/actions/aliases/getAlias.js.map +1 -0
  23. package/dist/actions/aliases/listAliases.d.ts +3 -0
  24. package/dist/actions/aliases/listAliases.js +7 -0
  25. package/dist/actions/aliases/listAliases.js.map +1 -0
  26. package/dist/actions/collections/createCollection.d.ts +3 -0
  27. package/dist/actions/collections/createCollection.js +18 -0
  28. package/dist/actions/collections/createCollection.js.map +1 -0
  29. package/dist/actions/collections/deleteCollection.d.ts +3 -0
  30. package/dist/actions/collections/deleteCollection.js +13 -0
  31. package/dist/actions/collections/deleteCollection.js.map +1 -0
  32. package/dist/actions/collections/getCollection.d.ts +3 -0
  33. package/dist/actions/collections/getCollection.js +11 -0
  34. package/dist/actions/collections/getCollection.js.map +1 -0
  35. package/dist/actions/collections/getOrCreateCollection.d.ts +3 -0
  36. package/dist/actions/collections/getOrCreateCollection.js +19 -0
  37. package/dist/actions/collections/getOrCreateCollection.js.map +1 -0
  38. package/dist/actions/collections/listCollections.d.ts +3 -0
  39. package/dist/actions/collections/listCollections.js +7 -0
  40. package/dist/actions/collections/listCollections.js.map +1 -0
  41. package/dist/actions/collections/updateCollection.d.ts +3 -0
  42. package/dist/actions/collections/updateCollection.js +14 -0
  43. package/dist/actions/collections/updateCollection.js.map +1 -0
  44. package/dist/actions/documents/clearCollection.d.ts +5 -0
  45. package/dist/actions/documents/clearCollection.js +11 -0
  46. package/dist/actions/documents/clearCollection.js.map +1 -0
  47. package/dist/actions/documents/deleteByFilter.d.ts +5 -0
  48. package/dist/actions/documents/deleteByFilter.js +15 -0
  49. package/dist/actions/documents/deleteByFilter.js.map +1 -0
  50. package/dist/actions/documents/deleteDocument.d.ts +3 -0
  51. package/dist/actions/documents/deleteDocument.js +14 -0
  52. package/dist/actions/documents/deleteDocument.js.map +1 -0
  53. package/dist/actions/documents/exportDocuments.d.ts +5 -0
  54. package/dist/actions/documents/exportDocuments.js +51 -0
  55. package/dist/actions/documents/exportDocuments.js.map +1 -0
  56. package/dist/actions/documents/getDocumentById.d.ts +3 -0
  57. package/dist/actions/documents/getDocumentById.js +12 -0
  58. package/dist/actions/documents/getDocumentById.js.map +1 -0
  59. package/dist/actions/documents/importDocuments.d.ts +4 -0
  60. package/dist/actions/documents/importDocuments.js +58 -0
  61. package/dist/actions/documents/importDocuments.js.map +1 -0
  62. package/dist/actions/documents/insertDocument.d.ts +3 -0
  63. package/dist/actions/documents/insertDocument.js +38 -0
  64. package/dist/actions/documents/insertDocument.js.map +1 -0
  65. package/dist/actions/documents/updateDocument.d.ts +5 -0
  66. package/dist/actions/documents/updateDocument.js +15 -0
  67. package/dist/actions/documents/updateDocument.js.map +1 -0
  68. package/dist/actions/documents/upsertDocument.d.ts +3 -0
  69. package/dist/actions/documents/upsertDocument.js +16 -0
  70. package/dist/actions/documents/upsertDocument.js.map +1 -0
  71. package/dist/actions/overrides/deleteOverride.d.ts +3 -0
  72. package/dist/actions/overrides/deleteOverride.js +8 -0
  73. package/dist/actions/overrides/deleteOverride.js.map +1 -0
  74. package/dist/actions/overrides/getOverride.d.ts +3 -0
  75. package/dist/actions/overrides/getOverride.js +8 -0
  76. package/dist/actions/overrides/getOverride.js.map +1 -0
  77. package/dist/actions/overrides/listOverrides.d.ts +5 -0
  78. package/dist/actions/overrides/listOverrides.js +8 -0
  79. package/dist/actions/overrides/listOverrides.js.map +1 -0
  80. package/dist/actions/overrides/upsertOverride.d.ts +3 -0
  81. package/dist/actions/overrides/upsertOverride.js +11 -0
  82. package/dist/actions/overrides/upsertOverride.js.map +1 -0
  83. package/dist/actions/presets/deletePreset.d.ts +3 -0
  84. package/dist/actions/presets/deletePreset.js +7 -0
  85. package/dist/actions/presets/deletePreset.js.map +1 -0
  86. package/dist/actions/presets/getPreset.d.ts +3 -0
  87. package/dist/actions/presets/getPreset.js +7 -0
  88. package/dist/actions/presets/getPreset.js.map +1 -0
  89. package/dist/actions/presets/listPresets.d.ts +5 -0
  90. package/dist/actions/presets/listPresets.js +7 -0
  91. package/dist/actions/presets/listPresets.js.map +1 -0
  92. package/dist/actions/presets/upsertPreset.d.ts +3 -0
  93. package/dist/actions/presets/upsertPreset.js +10 -0
  94. package/dist/actions/presets/upsertPreset.js.map +1 -0
  95. package/dist/actions/search/multiSearch.d.ts +3 -0
  96. package/dist/actions/search/multiSearch.js +10 -0
  97. package/dist/actions/search/multiSearch.js.map +1 -0
  98. package/dist/actions/search/search.d.ts +5 -0
  99. package/dist/actions/search/search.js +19 -0
  100. package/dist/actions/search/search.js.map +1 -0
  101. package/dist/actions/synonyms/deleteSynonym.d.ts +3 -0
  102. package/dist/actions/synonyms/deleteSynonym.js +8 -0
  103. package/dist/actions/synonyms/deleteSynonym.js.map +1 -0
  104. package/dist/actions/synonyms/getSynonym.d.ts +3 -0
  105. package/dist/actions/synonyms/getSynonym.js +8 -0
  106. package/dist/actions/synonyms/getSynonym.js.map +1 -0
  107. package/dist/actions/synonyms/listSynonyms.d.ts +5 -0
  108. package/dist/actions/synonyms/listSynonyms.js +8 -0
  109. package/dist/actions/synonyms/listSynonyms.js.map +1 -0
  110. package/dist/actions/synonyms/upsertSynonym.d.ts +3 -0
  111. package/dist/actions/synonyms/upsertSynonym.js +11 -0
  112. package/dist/actions/synonyms/upsertSynonym.js.map +1 -0
  113. package/dist/components/export-formatter.d.ts +16 -0
  114. package/dist/components/export-formatter.js +226 -0
  115. package/dist/components/export-formatter.js.map +1 -0
  116. package/dist/components/http-client.d.ts +50 -0
  117. package/dist/components/http-client.js +149 -0
  118. package/dist/components/http-client.js.map +1 -0
  119. package/dist/components/resilience-policy.d.ts +33 -0
  120. package/dist/components/resilience-policy.js +115 -0
  121. package/dist/components/resilience-policy.js.map +1 -0
  122. package/dist/components/schema-manager.d.ts +30 -0
  123. package/dist/components/schema-manager.js +227 -0
  124. package/dist/components/schema-manager.js.map +1 -0
  125. package/dist/components/typesense.filter-builder.d.ts +127 -0
  126. package/dist/components/typesense.filter-builder.js +216 -0
  127. package/dist/components/typesense.filter-builder.js.map +1 -0
  128. package/dist/examples/multitenancy-example.d.ts +4 -0
  129. package/dist/examples/multitenancy-example.js +182 -0
  130. package/dist/examples/multitenancy-example.js.map +1 -0
  131. package/dist/index.d.ts +10 -0
  132. package/dist/index.js +23 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/tests/const.d.ts +6 -0
  135. package/dist/tests/const.js +22 -0
  136. package/dist/tests/const.js.map +1 -0
  137. package/dist/tests/typesense.d.ts +2 -0
  138. package/dist/tests/typesense.js +24 -0
  139. package/dist/tests/typesense.js.map +1 -0
  140. package/dist/types.d.ts +16 -0
  141. package/dist/types.js +3 -0
  142. package/dist/types.js.map +1 -0
  143. package/dist/typesense.model.d.ts +455 -0
  144. package/dist/typesense.model.js +98 -0
  145. package/dist/typesense.model.js.map +1 -0
  146. package/dist/utils/tenant.d.ts +48 -0
  147. package/dist/utils/tenant.js +89 -0
  148. package/dist/utils/tenant.js.map +1 -0
  149. 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
+ }