@ganju/utils 0.0.16 → 0.0.17

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 (57) hide show
  1. package/dist/constants.d.ts +3 -0
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +12 -1
  4. package/dist/customCodeToken.d.ts +11 -0
  5. package/dist/customCodeToken.d.ts.map +1 -1
  6. package/dist/customCodeToken.js +41 -1
  7. package/dist/data.d.ts +4 -0
  8. package/dist/data.d.ts.map +1 -1
  9. package/dist/data.js +26 -1
  10. package/dist/dataApi.d.ts +68 -1
  11. package/dist/dataApi.d.ts.map +1 -1
  12. package/dist/dataApi.js +45 -1
  13. package/dist/dataCompiler.d.ts.map +1 -1
  14. package/dist/dataCompiler.js +5 -1
  15. package/dist/dataCsv.d.ts +20 -0
  16. package/dist/dataCsv.d.ts.map +1 -0
  17. package/dist/dataCsv.js +102 -0
  18. package/dist/dataEngine.d.ts.map +1 -1
  19. package/dist/dataEngine.js +24 -4
  20. package/dist/dataImport.d.ts +2 -0
  21. package/dist/dataImport.d.ts.map +1 -1
  22. package/dist/dataImport.js +4 -1
  23. package/dist/dataQueries.d.ts +73 -0
  24. package/dist/dataQueries.d.ts.map +1 -0
  25. package/dist/dataQueries.js +513 -0
  26. package/dist/dataRpc.d.ts +19 -0
  27. package/dist/dataRpc.d.ts.map +1 -1
  28. package/dist/dataTools.d.ts +40 -0
  29. package/dist/dataTools.d.ts.map +1 -0
  30. package/dist/dataTools.js +280 -0
  31. package/dist/dataTypes.d.ts +2 -0
  32. package/dist/dataTypes.d.ts.map +1 -1
  33. package/dist/index.d.ts +86 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +2 -0
  36. package/dist/schema.d.ts +91 -0
  37. package/dist/schema.d.ts.map +1 -1
  38. package/dist/schema.js +65 -1
  39. package/dist/sdkConstants.d.ts +1 -0
  40. package/dist/sdkConstants.d.ts.map +1 -1
  41. package/dist/sdkConstants.js +2 -1
  42. package/package.json +1 -1
  43. package/src/constants.ts +13 -1
  44. package/src/customCodeToken.ts +74 -0
  45. package/src/data.ts +34 -0
  46. package/src/dataApi.ts +53 -2
  47. package/src/dataCompiler.ts +5 -1
  48. package/src/dataCsv.ts +99 -0
  49. package/src/dataEngine.ts +24 -4
  50. package/src/dataImport.ts +3 -0
  51. package/src/dataQueries.ts +730 -0
  52. package/src/dataRpc.ts +11 -0
  53. package/src/dataTools.ts +338 -0
  54. package/src/dataTypes.ts +6 -0
  55. package/src/index.ts +9 -1
  56. package/src/schema.ts +69 -1
  57. package/src/sdkConstants.ts +1 -0
@@ -650,6 +650,7 @@ export declare const constants: {
650
650
  CUSTOM_CODE_BROKER_PATH_RESOURCES_CREATE: string;
651
651
  CUSTOM_CODE_BROKER_PATH_RESOURCES_DELETE: string;
652
652
  CUSTOM_CODE_BROKER_PATH_SEND_FILE: string;
653
+ CUSTOM_CODE_BROKER_PATH_DATA: string;
653
654
  CUSTOM_CODE_OUTBOUND_PARAM_ARTIFACT_ID: "artifactId";
654
655
  CUSTOM_CODE_OUTBOUND_PARAM_ALLOWED_HOSTS: "allowedHosts";
655
656
  CUSTOM_CODE_PLATFORM_HOSTS: string[];
@@ -692,6 +693,8 @@ export declare const constants: {
692
693
  MCP_CHANNEL_PLATFORM_HEADER: string;
693
694
  MCP_CHANNEL_CONVERSATION_HEADER: string;
694
695
  MCP_CHANNEL_CLIENT_USER_AGENT: string;
696
+ MCP_CHANNEL_PARTICIPANT_HEADER: string;
697
+ MCP_CHANNEL_TIME_ZONE_HEADER: string;
695
698
  MCP_SESSION_HEADER: string;
696
699
  MCP_REQUEST_METHOD_INITIALIZE: "initialize";
697
700
  MCP_REQUEST_METHOD_PING: "ping";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
package/dist/constants.js CHANGED
@@ -1344,7 +1344,10 @@ const RESERVED_TOOL_NAME_PREFIXES = [
1344
1344
  'slack-',
1345
1345
  CALENDAR_TOOL_KEY_PREFIX,
1346
1346
  CALCOM_TOOL_KEY_PREFIX,
1347
- WEB_TOOL_KEY_PREFIX
1347
+ WEB_TOOL_KEY_PREFIX,
1348
+ // data-describe, data-query, data-write and data-admin, registered for a
1349
+ // project with a database.
1350
+ 'data-'
1348
1351
  ];
1349
1352
  // The keys that don't belong to a prefixed group: the RAG core the channel
1350
1353
  // runner intercepts by name, the smoke-test tool, the three proxied definition
@@ -1597,6 +1600,11 @@ const MCP_CHANNEL_PLATFORM_HEADER = 'x-ganju-channel-platform';
1597
1600
  // the chat it ran in.
1598
1601
  const MCP_CHANNEL_CONVERSATION_HEADER = 'x-ganju-channel-conversation-id';
1599
1602
  const MCP_CHANNEL_CLIENT_USER_AGENT = 'ganju-channel/0.0.1';
1603
+ // The participant a channel turn is for: customer-scoped tables fill and
1604
+ // filter their rows with it. Trusted only on the channel's own auth paths.
1605
+ const MCP_CHANNEL_PARTICIPANT_HEADER = 'x-ganju-channel-participant-id';
1606
+ // The zone the channel resolves dates in; the data tools answer in it.
1607
+ const MCP_CHANNEL_TIME_ZONE_HEADER = 'x-ganju-channel-time-zone';
1600
1608
  const JWKS_KV_KEY = 'jwks:v1';
1601
1609
  const JWKS_TTL_SECONDS = 600;
1602
1610
  // Standard OIDC scopes the better-auth oauthProvider honors for user OAuth
@@ -2697,6 +2705,7 @@ exports.constants = {
2697
2705
  CUSTOM_CODE_BROKER_PATH_RESOURCES_CREATE: sdkConstants_1.CUSTOM_CODE_BROKER_PATH_RESOURCES_CREATE,
2698
2706
  CUSTOM_CODE_BROKER_PATH_RESOURCES_DELETE: sdkConstants_1.CUSTOM_CODE_BROKER_PATH_RESOURCES_DELETE,
2699
2707
  CUSTOM_CODE_BROKER_PATH_SEND_FILE: sdkConstants_1.CUSTOM_CODE_BROKER_PATH_SEND_FILE,
2708
+ CUSTOM_CODE_BROKER_PATH_DATA: sdkConstants_1.CUSTOM_CODE_BROKER_PATH_DATA,
2700
2709
  CUSTOM_CODE_OUTBOUND_PARAM_ARTIFACT_ID,
2701
2710
  CUSTOM_CODE_OUTBOUND_PARAM_ALLOWED_HOSTS,
2702
2711
  CUSTOM_CODE_PLATFORM_HOSTS,
@@ -2739,6 +2748,8 @@ exports.constants = {
2739
2748
  MCP_CHANNEL_PLATFORM_HEADER,
2740
2749
  MCP_CHANNEL_CONVERSATION_HEADER,
2741
2750
  MCP_CHANNEL_CLIENT_USER_AGENT,
2751
+ MCP_CHANNEL_PARTICIPANT_HEADER,
2752
+ MCP_CHANNEL_TIME_ZONE_HEADER,
2742
2753
  MCP_SESSION_HEADER,
2743
2754
  MCP_REQUEST_METHOD_INITIALIZE,
2744
2755
  MCP_REQUEST_METHOD_PING,
@@ -23,6 +23,17 @@ export declare const mintCustomCodeToken: (payload: Omit<CustomCodeTokenPayload,
23
23
  * failed.
24
24
  */
25
25
  export declare const verifyCustomCodeToken: (token: string, secret: string, now?: number) => Promise<CustomCodeTokenPayload | null>;
26
+ export interface CustomCodeCallPayload {
27
+ v: string;
28
+ artifactId: string;
29
+ versionId: string;
30
+ tool: string;
31
+ exp: number;
32
+ }
33
+ export declare const mintCustomCodeCallToken: (payload: Omit<CustomCodeCallPayload, "v" | "exp"> & {
34
+ ttlMs: number;
35
+ }, secret: string, issuedAt?: number) => Promise<string>;
36
+ export declare const verifyCustomCodeCallToken: (token: string, secret: string, now?: number) => Promise<CustomCodeCallPayload | null>;
26
37
  /**
27
38
  * The legacy dispatch-namespace script name for an artifact: `artifact_<id>`.
28
39
  *
@@ -1 +1 @@
1
- {"version":3,"file":"customCodeToken.d.ts","sourceRoot":"","sources":["../src/customCodeToken.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,sBAAsB;IAGrC,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IAGnB,SAAS,EAAE,MAAM,CAAC;IAIlB,GAAG,EAAE,MAAM,CAAC;IAOZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA0BD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,IAAI,CAAC,sBAAsB,EAAE,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,QAAQ,MAAM,EACd,WAAU,MAAmB,KAC5B,OAAO,CAAC,MAAM,CAmBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,MAAM,MAAM,KACX,OAAO,CAAC,sBAAsB,GAAG,IAAI,CA+DvC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,GAAI,YAAY,MAAM,KAAG,MACE,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GAAI,YAAY,MAAM,KAAG,MACoB,CAAC;AAEtF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAAI,YAAY,MAAM,KAAG,MACR,CAAC;AAEnD;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,GAAI,YAAY,MAAM,KAAG,MACR,CAAC"}
1
+ {"version":3,"file":"customCodeToken.d.ts","sourceRoot":"","sources":["../src/customCodeToken.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,sBAAsB;IAGrC,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IAGnB,SAAS,EAAE,MAAM,CAAC;IAIlB,GAAG,EAAE,MAAM,CAAC;IAOZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA0BD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,IAAI,CAAC,sBAAsB,EAAE,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,QAAQ,MAAM,EACd,WAAU,MAAmB,KAC5B,OAAO,CAAC,MAAM,CAmBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,MAAM,MAAM,KACX,OAAO,CAAC,sBAAsB,GAAG,IAAI,CA+DvC,CAAC;AAWF,MAAM,WAAW,qBAAqB;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAID,eAAO,MAAM,uBAAuB,GAClC,SAAS,IAAI,CAAC,qBAAqB,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACrE,QAAQ,MAAM,EACd,WAAU,MAAmB,KAC5B,OAAO,CAAC,MAAM,CAahB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,MAAK,MAAmB,KACvB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CA8BtC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,GAAI,YAAY,MAAM,KAAG,MACE,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GAAI,YAAY,MAAM,KAAG,MACoB,CAAC;AAEtF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAAI,YAAY,MAAM,KAAG,MACR,CAAC;AAEnD;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,GAAI,YAAY,MAAM,KAAG,MACR,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.customCodePreviewUploadName = exports.customCodeUploadName = exports.customCodePreviewScriptName = exports.customCodeScriptName = exports.verifyCustomCodeToken = exports.mintCustomCodeToken = void 0;
3
+ exports.customCodePreviewUploadName = exports.customCodeUploadName = exports.customCodePreviewScriptName = exports.customCodeScriptName = exports.verifyCustomCodeCallToken = exports.mintCustomCodeCallToken = exports.verifyCustomCodeToken = exports.mintCustomCodeToken = void 0;
4
4
  const base64_1 = require("./base64");
5
5
  const constants_1 = require("./constants");
6
6
  const encoder = new TextEncoder();
@@ -96,6 +96,46 @@ const verifyCustomCodeToken = async (token, secret, now) => {
96
96
  };
97
97
  };
98
98
  exports.verifyCustomCodeToken = verifyCustomCodeToken;
99
+ const callSecret = (secret) => `${secret}:call`;
100
+ const mintCustomCodeCallToken = async (payload, secret, issuedAt = Date.now()) => {
101
+ const body = {
102
+ v: constants_1.constants.CUSTOM_CODE_TOKEN_VERSION,
103
+ artifactId: payload.artifactId,
104
+ versionId: payload.versionId,
105
+ tool: payload.tool,
106
+ exp: Math.ceil((issuedAt + payload.ttlMs) / 1000)
107
+ };
108
+ const encodedPayload = (0, base64_1.toBase64Url)((0, base64_1.bytesToBase64)(encoder.encode(JSON.stringify(body))));
109
+ const signature = await signPayload(encodedPayload, callSecret(secret));
110
+ return `${encodedPayload}.${signature}`;
111
+ };
112
+ exports.mintCustomCodeCallToken = mintCustomCodeCallToken;
113
+ const verifyCustomCodeCallToken = async (token, secret, now = Date.now()) => {
114
+ const separator = token.lastIndexOf('.');
115
+ if (separator <= 0)
116
+ return null;
117
+ const encodedPayload = token.slice(0, separator);
118
+ try {
119
+ const key = await importKey(callSecret(secret));
120
+ const valid = await crypto.subtle.verify('HMAC', key, new Uint8Array((0, base64_1.base64ToBytes)((0, base64_1.fromBase64Url)(token.slice(separator + 1)))), encoder.encode(encodedPayload));
121
+ if (!valid)
122
+ return null;
123
+ const candidate = JSON.parse(new TextDecoder().decode((0, base64_1.base64ToBytes)((0, base64_1.fromBase64Url)(encodedPayload))));
124
+ if (candidate.v !== constants_1.constants.CUSTOM_CODE_TOKEN_VERSION ||
125
+ typeof candidate.artifactId !== 'string' ||
126
+ typeof candidate.versionId !== 'string' ||
127
+ typeof candidate.tool !== 'string' ||
128
+ typeof candidate.exp !== 'number' ||
129
+ candidate.exp * 1000 <= now) {
130
+ return null;
131
+ }
132
+ return candidate;
133
+ }
134
+ catch {
135
+ return null;
136
+ }
137
+ };
138
+ exports.verifyCustomCodeCallToken = verifyCustomCodeCallToken;
99
139
  /**
100
140
  * The legacy dispatch-namespace script name for an artifact: `artifact_<id>`.
101
141
  *
package/dist/data.d.ts CHANGED
@@ -5,5 +5,9 @@ export { chunkRows, rowsPerInsert, ftsMatch, keysetCondition, encodeCursor, deco
5
5
  export type { SqlValue, KeysetCursor, SortKey } from './dataCompiler';
6
6
  export { INTERNAL_MIGRATIONS, INTERNAL_SCHEMA_VERSION, hasInternalTables, getMeta, setMeta, migrateInternal, loadSchema, toTableInput, normaliseColumn, translateSqliteError, describe, query, write, rowHistory, pruneHistory, deleteImpact, createTable, updateTable, dropTable, addColumn, updateColumn, dropColumn, columnChangeNeedsRebuild, dropColumnNeedsRebuild, readTableCopy, clearFailedTableCopy, copyTableStep, writeReachesCopy, assertActor, assertWritable, exportRows } from './dataEngine';
7
7
  export type { SqlRow, SqlRunner } from './dataEngine';
8
+ export { DATA_QUERY_PARAM_TYPES, DATA_MAX_QUERIES, DATA_MAX_QUERY_SQL, DATA_MAX_QUERY_PARAMS, DATA_DEFAULT_QUERY_ROWS, compileQuerySql, checkQueryPlan, listQueries, queriesFor, saveQuery, dropQuery, runQuery } from './dataQueries';
9
+ export type { DataQuery, DataQueryInput, DataQueryParam, DataQueryParamType } from './dataQueries';
8
10
  export type { ProjectDatabaseRpc, DatabaseInfo, ExportFile, ExportFormat, ExportState, RestoreResult } from './dataRpc';
11
+ export { DATA_TOOL_DESCRIBE, DATA_TOOL_QUERY, DATA_TOOL_WRITE, DATA_TOOL_ADMIN, DATA_TOOL_NAMES, DATA_TOOL_TITLES, DATA_TOOL_MAX_LIMIT, DATA_ADMIN_ACTIONS, hasDataToolTables, dataToolDefinitions, dataAdminToolDefinition } from './dataTools';
12
+ export type { DataToolDefinition, DataAdminAction } from './dataTools';
9
13
  //# sourceMappingURL=data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,KAAK,EACN,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,eAAe,EACf,UAAU,EACV,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,KAAK,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,EACV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACd,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,KAAK,EACN,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,eAAe,EACf,UAAU,EACV,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,KAAK,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,EACV,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACT,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,kBAAkB,EACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
package/dist/data.js CHANGED
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.writeReachesCopy = exports.copyTableStep = exports.clearFailedTableCopy = exports.readTableCopy = exports.dropColumnNeedsRebuild = exports.columnChangeNeedsRebuild = exports.dropColumn = exports.updateColumn = exports.addColumn = exports.dropTable = exports.updateTable = exports.createTable = exports.deleteImpact = exports.pruneHistory = exports.rowHistory = exports.write = exports.query = exports.describe = exports.translateSqliteError = exports.normaliseColumn = exports.toTableInput = exports.loadSchema = exports.migrateInternal = exports.setMeta = exports.getMeta = exports.hasInternalTables = exports.INTERNAL_SCHEMA_VERSION = exports.INTERNAL_MIGRATIONS = exports.zoned = exports.tidyArgs = exports.isSensitiveWrite = exports.decodeCursor = exports.encodeCursor = exports.keysetCondition = exports.ftsMatch = exports.rowsPerInsert = exports.chunkRows = exports.sqlLiteral = exports.searchableColumns = exports.ftsTableName = exports.ftsCreateSql = exports.desiredTriggers = exports.desiredIndexes = exports.columnDefinitionSql = exports.createTableSql = exports.isValidIdentifier = exports.identifierIssue = exports.DATA_HIDDEN_COLUMNS = exports.DATA_SYSTEM_COLUMNS = exports.DATA_IDENTIFIER_PATTERN = void 0;
18
- exports.exportRows = exports.assertWritable = exports.assertActor = void 0;
18
+ exports.dataAdminToolDefinition = exports.dataToolDefinitions = exports.hasDataToolTables = exports.DATA_ADMIN_ACTIONS = exports.DATA_TOOL_MAX_LIMIT = exports.DATA_TOOL_TITLES = exports.DATA_TOOL_NAMES = exports.DATA_TOOL_ADMIN = exports.DATA_TOOL_WRITE = exports.DATA_TOOL_QUERY = exports.DATA_TOOL_DESCRIBE = exports.runQuery = exports.dropQuery = exports.saveQuery = exports.queriesFor = exports.listQueries = exports.checkQueryPlan = exports.compileQuerySql = exports.DATA_DEFAULT_QUERY_ROWS = exports.DATA_MAX_QUERY_PARAMS = exports.DATA_MAX_QUERY_SQL = exports.DATA_MAX_QUERIES = exports.DATA_QUERY_PARAM_TYPES = exports.exportRows = exports.assertWritable = exports.assertActor = void 0;
19
19
  // Entry point for `@ganju/utils/data`: everything a project's database and
20
20
  // its callers share, without pulling in the rest of the package.
21
21
  __exportStar(require("./dataTypes"), exports);
@@ -76,3 +76,28 @@ Object.defineProperty(exports, "writeReachesCopy", { enumerable: true, get: func
76
76
  Object.defineProperty(exports, "assertActor", { enumerable: true, get: function () { return dataEngine_1.assertActor; } });
77
77
  Object.defineProperty(exports, "assertWritable", { enumerable: true, get: function () { return dataEngine_1.assertWritable; } });
78
78
  Object.defineProperty(exports, "exportRows", { enumerable: true, get: function () { return dataEngine_1.exportRows; } });
79
+ var dataQueries_1 = require("./dataQueries");
80
+ Object.defineProperty(exports, "DATA_QUERY_PARAM_TYPES", { enumerable: true, get: function () { return dataQueries_1.DATA_QUERY_PARAM_TYPES; } });
81
+ Object.defineProperty(exports, "DATA_MAX_QUERIES", { enumerable: true, get: function () { return dataQueries_1.DATA_MAX_QUERIES; } });
82
+ Object.defineProperty(exports, "DATA_MAX_QUERY_SQL", { enumerable: true, get: function () { return dataQueries_1.DATA_MAX_QUERY_SQL; } });
83
+ Object.defineProperty(exports, "DATA_MAX_QUERY_PARAMS", { enumerable: true, get: function () { return dataQueries_1.DATA_MAX_QUERY_PARAMS; } });
84
+ Object.defineProperty(exports, "DATA_DEFAULT_QUERY_ROWS", { enumerable: true, get: function () { return dataQueries_1.DATA_DEFAULT_QUERY_ROWS; } });
85
+ Object.defineProperty(exports, "compileQuerySql", { enumerable: true, get: function () { return dataQueries_1.compileQuerySql; } });
86
+ Object.defineProperty(exports, "checkQueryPlan", { enumerable: true, get: function () { return dataQueries_1.checkQueryPlan; } });
87
+ Object.defineProperty(exports, "listQueries", { enumerable: true, get: function () { return dataQueries_1.listQueries; } });
88
+ Object.defineProperty(exports, "queriesFor", { enumerable: true, get: function () { return dataQueries_1.queriesFor; } });
89
+ Object.defineProperty(exports, "saveQuery", { enumerable: true, get: function () { return dataQueries_1.saveQuery; } });
90
+ Object.defineProperty(exports, "dropQuery", { enumerable: true, get: function () { return dataQueries_1.dropQuery; } });
91
+ Object.defineProperty(exports, "runQuery", { enumerable: true, get: function () { return dataQueries_1.runQuery; } });
92
+ var dataTools_1 = require("./dataTools");
93
+ Object.defineProperty(exports, "DATA_TOOL_DESCRIBE", { enumerable: true, get: function () { return dataTools_1.DATA_TOOL_DESCRIBE; } });
94
+ Object.defineProperty(exports, "DATA_TOOL_QUERY", { enumerable: true, get: function () { return dataTools_1.DATA_TOOL_QUERY; } });
95
+ Object.defineProperty(exports, "DATA_TOOL_WRITE", { enumerable: true, get: function () { return dataTools_1.DATA_TOOL_WRITE; } });
96
+ Object.defineProperty(exports, "DATA_TOOL_ADMIN", { enumerable: true, get: function () { return dataTools_1.DATA_TOOL_ADMIN; } });
97
+ Object.defineProperty(exports, "DATA_TOOL_NAMES", { enumerable: true, get: function () { return dataTools_1.DATA_TOOL_NAMES; } });
98
+ Object.defineProperty(exports, "DATA_TOOL_TITLES", { enumerable: true, get: function () { return dataTools_1.DATA_TOOL_TITLES; } });
99
+ Object.defineProperty(exports, "DATA_TOOL_MAX_LIMIT", { enumerable: true, get: function () { return dataTools_1.DATA_TOOL_MAX_LIMIT; } });
100
+ Object.defineProperty(exports, "DATA_ADMIN_ACTIONS", { enumerable: true, get: function () { return dataTools_1.DATA_ADMIN_ACTIONS; } });
101
+ Object.defineProperty(exports, "hasDataToolTables", { enumerable: true, get: function () { return dataTools_1.hasDataToolTables; } });
102
+ Object.defineProperty(exports, "dataToolDefinitions", { enumerable: true, get: function () { return dataTools_1.dataToolDefinitions; } });
103
+ Object.defineProperty(exports, "dataAdminToolDefinition", { enumerable: true, get: function () { return dataTools_1.dataAdminToolDefinition; } });
package/dist/dataApi.d.ts CHANGED
@@ -6,7 +6,7 @@ export interface DataApiRoute {
6
6
  path: string;
7
7
  summary: string;
8
8
  description?: string;
9
- tag: 'Database' | 'Tables' | 'Rows' | 'History and export';
9
+ tag: 'Database' | 'Tables' | 'Rows' | 'Queries' | 'History and export';
10
10
  body?: z.ZodType;
11
11
  query?: z.ZodObject;
12
12
  returns: string;
@@ -35,6 +35,17 @@ export declare const DATA_API_ROUTES: {
35
35
  readonly returns: "{ database }";
36
36
  readonly status: 201;
37
37
  };
38
+ readonly updateDatabase: {
39
+ readonly method: "patch";
40
+ readonly path: "";
41
+ readonly tag: "Database";
42
+ readonly summary: "Change the database's settings";
43
+ readonly description: "`timeZone`, an IANA zone such as `America/Bogota`, or null for UTC. Datetimes come back in it for callers that send no `timeZone` of their own: the assistant, functions and scripts. Datetimes without an offset are read in it too.";
44
+ readonly body: z.ZodObject<{
45
+ timeZone: z.ZodNullable<z.ZodString>;
46
+ }, z.core.$strict>;
47
+ readonly returns: "{ database }";
48
+ };
38
49
  readonly remove: {
39
50
  readonly method: "delete";
40
51
  readonly path: "";
@@ -396,6 +407,62 @@ export declare const DATA_API_ROUTES: {
396
407
  }, z.core.$strict>;
397
408
  readonly returns: "{ results }";
398
409
  };
410
+ readonly listQueries: {
411
+ readonly method: "get";
412
+ readonly path: "/query";
413
+ readonly tag: "Queries";
414
+ readonly summary: "Named queries";
415
+ readonly description: "Each with its SQL, parameters, the tables it reads and its plan (`SCAN orders` means it reads the whole table).";
416
+ readonly returns: "{ queries }";
417
+ };
418
+ readonly saveQuery: {
419
+ readonly method: "post";
420
+ readonly path: "/query";
421
+ readonly tag: "Queries";
422
+ readonly summary: "Save a named query";
423
+ readonly description: "One `SELECT` (or `WITH … SELECT`) with named parameters such as `:from`, each declared in `params` with its type. It is compiled, never run, and refused unless it only reads this database's tables. Saving under an existing name replaces it. `assistant: true` lets channel bots run it from data-query.";
424
+ readonly body: z.ZodObject<{
425
+ name: z.ZodString;
426
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
427
+ sql: z.ZodString;
428
+ params: z.ZodOptional<z.ZodArray<z.ZodObject<{
429
+ name: z.ZodString;
430
+ type: z.ZodEnum<{
431
+ boolean: "boolean";
432
+ text: "text";
433
+ integer: "integer";
434
+ decimal: "decimal";
435
+ date: "date";
436
+ datetime: "datetime";
437
+ }>;
438
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
439
+ required: z.ZodOptional<z.ZodBoolean>;
440
+ }, z.core.$strict>>>;
441
+ assistant: z.ZodOptional<z.ZodBoolean>;
442
+ }, z.core.$strict>;
443
+ readonly returns: "{ query }";
444
+ readonly status: 201;
445
+ };
446
+ readonly dropQuery: {
447
+ readonly method: "delete";
448
+ readonly path: "/query/:name";
449
+ readonly tag: "Queries";
450
+ readonly summary: "Delete a named query";
451
+ readonly returns: "{ dropped }";
452
+ };
453
+ readonly runQuery: {
454
+ readonly method: "post";
455
+ readonly path: "/query/:name/run";
456
+ readonly tag: "Queries";
457
+ readonly summary: "Run a named query";
458
+ readonly description: "With its `params`, up to `limit` rows (100 by default, 500 at most) and 1 MB; `truncated` says it stopped early. A query that would scan a table over 200,000 rows is refused.";
459
+ readonly body: z.ZodObject<{
460
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
461
+ limit: z.ZodOptional<z.ZodNumber>;
462
+ timeZone: z.ZodOptional<z.ZodString>;
463
+ }, z.core.$strict>;
464
+ readonly returns: "{ query, rows, truncated? }";
465
+ };
399
466
  readonly startExport: {
400
467
  readonly method: "post";
401
468
  readonly path: "/export";
@@ -1 +1 @@
1
- {"version":3,"file":"dataApi.d.ts","sourceRoot":"","sources":["../src/dataApi.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,aAAa,mEACwC,CAAC;AAEnE,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,oBAAoB,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IAEpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IAEnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAyBD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmPqB,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,eAAe,CAAC;AAmB1D;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4G5C,CAAC"}
1
+ {"version":3,"file":"dataApi.d.ts","sourceRoot":"","sources":["../src/dataApi.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,aAAa,mEACwC,CAAC;AAEnE,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,oBAAoB,CAAC;IACvE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IAEpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IAEnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA4BD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkSqB,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,eAAe,CAAC;AAmB1D;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6G5C,CAAC"}
package/dist/dataApi.js CHANGED
@@ -7,7 +7,7 @@ exports.dataOpenApi = exports.DATA_API_ROUTES = exports.DATA_API_BASE = void 0;
7
7
  const zod_1 = require("zod");
8
8
  const schema_1 = require("./schema");
9
9
  exports.DATA_API_BASE = '/organization/:organizationId/project/:projectId/artifact/data';
10
- const { DATA_DATABASE_CREATE, DATA_DATABASE_DELETE, DATA_TABLE_INPUT, DATA_TABLE_PATCH, DATA_COLUMN_INPUT, DATA_COLUMN_PATCH, DATA_TABLE_DROP_BODY, DATA_ROW_LIST_QUERY, DATA_ROW_GET_QUERY, DATA_ROW_CREATE_BODY, DATA_ROW_UPDATE_BODY, DATA_ROW_DELETE_BODY, DATA_DELETE_PREVIEW_BODY, DATA_WRITE_BODY, DATA_ROW_HISTORY_QUERY, DATA_RESTORE_POINT_BODY, DATA_EXPORT_BODY, DATA_EXPORT_QUERY, DATA_EXPORT_FILE_QUERY, DATA_CHANGE_LIST_QUERY } = schema_1.Schema;
10
+ const { DATA_DATABASE_CREATE, DATA_DATABASE_DELETE, DATA_DATABASE_PATCH, DATA_TABLE_INPUT, DATA_TABLE_PATCH, DATA_COLUMN_INPUT, DATA_COLUMN_PATCH, DATA_TABLE_DROP_BODY, DATA_ROW_LIST_QUERY, DATA_ROW_GET_QUERY, DATA_ROW_CREATE_BODY, DATA_ROW_UPDATE_BODY, DATA_ROW_DELETE_BODY, DATA_DELETE_PREVIEW_BODY, DATA_WRITE_BODY, DATA_ROW_HISTORY_QUERY, DATA_RESTORE_POINT_BODY, DATA_EXPORT_BODY, DATA_EXPORT_QUERY, DATA_EXPORT_FILE_QUERY, DATA_CHANGE_LIST_QUERY, DATA_QUERY_INPUT, DATA_QUERY_RUN_BODY } = schema_1.Schema;
11
11
  exports.DATA_API_ROUTES = {
12
12
  getDatabase: {
13
13
  method: 'get',
@@ -27,6 +27,15 @@ exports.DATA_API_ROUTES = {
27
27
  returns: '{ database }',
28
28
  status: 201
29
29
  },
30
+ updateDatabase: {
31
+ method: 'patch',
32
+ path: '',
33
+ tag: 'Database',
34
+ summary: "Change the database's settings",
35
+ description: '`timeZone`, an IANA zone such as `America/Bogota`, or null for UTC. Datetimes come back in it for callers that send no `timeZone` of their own: the assistant, functions and scripts. Datetimes without an offset are read in it too.',
36
+ body: DATA_DATABASE_PATCH,
37
+ returns: '{ database }'
38
+ },
30
39
  remove: {
31
40
  method: 'delete',
32
41
  path: '',
@@ -199,6 +208,40 @@ exports.DATA_API_ROUTES = {
199
208
  body: DATA_WRITE_BODY,
200
209
  returns: '{ results }'
201
210
  },
211
+ listQueries: {
212
+ method: 'get',
213
+ path: '/query',
214
+ tag: 'Queries',
215
+ summary: 'Named queries',
216
+ description: 'Each with its SQL, parameters, the tables it reads and its plan (`SCAN orders` means it reads the whole table).',
217
+ returns: '{ queries }'
218
+ },
219
+ saveQuery: {
220
+ method: 'post',
221
+ path: '/query',
222
+ tag: 'Queries',
223
+ summary: 'Save a named query',
224
+ description: "One `SELECT` (or `WITH … SELECT`) with named parameters such as `:from`, each declared in `params` with its type. It is compiled, never run, and refused unless it only reads this database's tables. Saving under an existing name replaces it. `assistant: true` lets channel bots run it from data-query.",
225
+ body: DATA_QUERY_INPUT,
226
+ returns: '{ query }',
227
+ status: 201
228
+ },
229
+ dropQuery: {
230
+ method: 'delete',
231
+ path: '/query/:name',
232
+ tag: 'Queries',
233
+ summary: 'Delete a named query',
234
+ returns: '{ dropped }'
235
+ },
236
+ runQuery: {
237
+ method: 'post',
238
+ path: '/query/:name/run',
239
+ tag: 'Queries',
240
+ summary: 'Run a named query',
241
+ description: 'With its `params`, up to `limit` rows (100 by default, 500 at most) and 1 MB; `truncated` says it stopped early. A query that would scan a table over 200,000 rows is refused.',
242
+ body: DATA_QUERY_RUN_BODY,
243
+ returns: '{ query, rows, truncated? }'
244
+ },
202
245
  startExport: {
203
246
  method: 'post',
204
247
  path: '/export',
@@ -323,6 +366,7 @@ const dataOpenApi = (serverUrl) => {
323
366
  { name: 'Database' },
324
367
  { name: 'Tables' },
325
368
  { name: 'Rows' },
369
+ { name: 'Queries' },
326
370
  { name: 'History and export' }
327
371
  ],
328
372
  paths,
@@ -1 +1 @@
1
- {"version":3,"file":"dataCompiler.d.ts","sourceRoot":"","sources":["../src/dataCompiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataCompiler.d.ts","sourceRoot":"","sources":["../src/dataCompiler.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,11 @@ const unknownColumn = (table, name) => new dataTypes_1.DataError(`Unknown column
43
43
  ].join(', ')}.`, 'invalid');
44
44
  exports.unknownColumn = unknownColumn;
45
45
  // Access
46
- const accessOf = (caller, table) => caller.restricted ? table.access : 'full';
46
+ const accessOf = (caller, table) => caller.tables && !caller.tables.includes(table.name)
47
+ ? 'none'
48
+ : caller.restricted
49
+ ? table.access
50
+ : 'full';
47
51
  exports.accessOf = accessOf;
48
52
  const visibleTables = (schema, caller) => schema.tables.filter(table => dataTypes_1.DATA_ACCESS_RANK[(0, exports.accessOf)(caller, table)] >= 1);
49
53
  exports.visibleTables = visibleTables;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Reading a CSV file into rows of text, with no parser package behind it:
3
+ * the CLI's import and the owner's data-admin tool read files the same way.
4
+ *
5
+ * RFC 4180 plus the two things spreadsheets actually write: a byte-order mark
6
+ * in front, and `;` between fields where the decimal mark is a comma (Excel in
7
+ * Spanish). The separator is read from the header line, so the same file
8
+ * exported from either locale imports the same way.
9
+ *
10
+ * Every cell comes back as text. Deciding what "28.000" means is the shared
11
+ * import code's job, so the CLI and the dashboard decide it the same way.
12
+ */
13
+ export interface ParsedCsv {
14
+ headers: string[];
15
+ rows: string[][];
16
+ lines: number[];
17
+ }
18
+ export declare const detectSeparator: (text: string) => string;
19
+ export declare const parseCsv: (input: string, separator?: string) => ParsedCsv;
20
+ //# sourceMappingURL=dataCsv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataCsv.d.ts","sourceRoot":"","sources":["../src/dataCsv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IAGjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAKD,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MAc9C,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,YAAY,MAAM,KAAG,SA0D5D,CAAC"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * Reading a CSV file into rows of text, with no parser package behind it:
4
+ * the CLI's import and the owner's data-admin tool read files the same way.
5
+ *
6
+ * RFC 4180 plus the two things spreadsheets actually write: a byte-order mark
7
+ * in front, and `;` between fields where the decimal mark is a comma (Excel in
8
+ * Spanish). The separator is read from the header line, so the same file
9
+ * exported from either locale imports the same way.
10
+ *
11
+ * Every cell comes back as text. Deciding what "28.000" means is the shared
12
+ * import code's job, so the CLI and the dashboard decide it the same way.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.parseCsv = exports.detectSeparator = void 0;
16
+ const SEPARATORS = [',', ';', '\t'];
17
+ // The separator that appears most in the first line, outside quotes.
18
+ const detectSeparator = (text) => {
19
+ const counts = new Map(SEPARATORS.map(s => [s, 0]));
20
+ let quoted = false;
21
+ for (const char of text) {
22
+ if (char === '"')
23
+ quoted = !quoted;
24
+ else if (!quoted && (char === '\n' || char === '\r'))
25
+ break;
26
+ else if (!quoted && counts.has(char))
27
+ counts.set(char, counts.get(char) + 1);
28
+ }
29
+ let best = ',';
30
+ for (const [separator, count] of counts) {
31
+ if (count > counts.get(best))
32
+ best = separator;
33
+ }
34
+ return best;
35
+ };
36
+ exports.detectSeparator = detectSeparator;
37
+ const parseCsv = (input, separator) => {
38
+ const text = input.charCodeAt(0) === 0xfeff ? input.slice(1) : input;
39
+ const sep = separator ?? (0, exports.detectSeparator)(text);
40
+ const records = [];
41
+ let cells = [];
42
+ let cell = '';
43
+ let quoted = false;
44
+ let line = 1;
45
+ let startLine = 1;
46
+ const endCell = () => {
47
+ cells.push(cell);
48
+ cell = '';
49
+ };
50
+ const endRecord = () => {
51
+ endCell();
52
+ // A blank line, or one of nothing but separators, is not a row.
53
+ if (cells.some(c => c.trim() !== '')) {
54
+ records.push({ cells, line: startLine });
55
+ }
56
+ cells = [];
57
+ };
58
+ for (let i = 0; i < text.length; i++) {
59
+ const char = text[i];
60
+ if (quoted) {
61
+ if (char === '"') {
62
+ if (text[i + 1] === '"') {
63
+ cell += '"';
64
+ i++;
65
+ }
66
+ else
67
+ quoted = false;
68
+ }
69
+ else {
70
+ if (char === '\n')
71
+ line++;
72
+ cell += char;
73
+ }
74
+ continue;
75
+ }
76
+ if (char === '"' && cell === '') {
77
+ quoted = true;
78
+ }
79
+ else if (char === sep) {
80
+ endCell();
81
+ }
82
+ else if (char === '\n' || char === '\r') {
83
+ if (char === '\r' && text[i + 1] === '\n')
84
+ i++;
85
+ endRecord();
86
+ line++;
87
+ startLine = line;
88
+ }
89
+ else {
90
+ cell += char;
91
+ }
92
+ }
93
+ if (cell !== '' || cells.length)
94
+ endRecord();
95
+ const [header, ...body] = records;
96
+ return {
97
+ headers: (header?.cells ?? []).map(h => h.trim()),
98
+ rows: body.map(r => r.cells),
99
+ lines: body.map(r => r.line)
100
+ };
101
+ };
102
+ exports.parseCsv = parseCsv;
@@ -1 +1 @@
1
- {"version":3,"file":"dataEngine.d.ts","sourceRoot":"","sources":["../src/dataEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataEngine.d.ts","sourceRoot":"","sources":["../src/dataEngine.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,22 @@ exports.INTERNAL_MIGRATIONS = [
75
75
  WHERE c.table_id = _ganju_tables.id AND c.type = 'text'
76
76
  ORDER BY c.position, c.id LIMIT 1
77
77
  ) WHERE display_column_id IS NULL AND created_at < '2026-10-24T00:00:00Z'`
78
+ ],
79
+ // Named queries: the owner's SELECTs, run by name. `tables` and `plan` are
80
+ // what the check found when each was saved.
81
+ [
82
+ `CREATE TABLE IF NOT EXISTS _ganju_queries (
83
+ name TEXT PRIMARY KEY,
84
+ description TEXT,
85
+ sql TEXT NOT NULL,
86
+ params TEXT NOT NULL DEFAULT '[]',
87
+ assistant INTEGER NOT NULL DEFAULT 0,
88
+ tables TEXT NOT NULL DEFAULT '[]',
89
+ plan TEXT NOT NULL DEFAULT '[]',
90
+ created_at TEXT NOT NULL DEFAULT (${dataDdl_1.DATA_NOW_SQL}),
91
+ updated_at TEXT NOT NULL DEFAULT (${dataDdl_1.DATA_NOW_SQL}),
92
+ updated_by TEXT
93
+ ) WITHOUT ROWID`
78
94
  ]
79
95
  ];
80
96
  exports.INTERNAL_SCHEMA_VERSION = exports.INTERNAL_MIGRATIONS.length;
@@ -158,7 +174,8 @@ const loadSchema = (runner) => {
158
174
  position: Number(c.position)
159
175
  };
160
176
  })
161
- }))
177
+ })),
178
+ timeZone: (0, exports.getMeta)(runner, 'time_zone')
162
179
  };
163
180
  };
164
181
  exports.loadSchema = loadSchema;
@@ -977,9 +994,10 @@ const insertValues = (table, values, results, index, timeZone) => {
977
994
  // A bot may only point a relation at a row it could read: none in a table
978
995
  // hidden from it, and only its own customer's in a scoped one. Otherwise it
979
996
  // could link an order to another customer and read their name back as the
980
- // label.
997
+ // label. A caller held to some tables (a function's `data.tables`) may not
998
+ // point outside them either.
981
999
  const assertRelationsVisible = (runner, schema, caller, table, values) => {
982
- if (!caller.restricted)
1000
+ if (!caller.restricted && !caller.tables)
983
1001
  return;
984
1002
  for (const [name, value] of values) {
985
1003
  if (value === null)
@@ -991,7 +1009,9 @@ const assertRelationsVisible = (runner, schema, caller, table, values) => {
991
1009
  if (!target)
992
1010
  continue;
993
1011
  if (!(0, dataCompiler_1.canRead)(caller, target)) {
994
- throw new dataTypes_1.DataError(`${table.name}.${name} points at a table the assistant can't use.`, 'forbidden');
1012
+ throw new dataTypes_1.DataError(caller.restricted
1013
+ ? `${table.name}.${name} points at a table the assistant can't use.`
1014
+ : `${table.name}.${name} points at ${target.name}, which isn't one of this caller's tables.`, 'forbidden');
995
1015
  }
996
1016
  if (!(0, dataCompiler_1.isScoped)(caller, target))
997
1017
  continue;