prostgles-server 4.2.586 → 4.2.588

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 (48) hide show
  1. package/dist/DBSchemaBuilder/getFunctionsTypescriptSchema.d.ts +1 -1
  2. package/dist/DBSchemaBuilder/getFunctionsTypescriptSchema.d.ts.map +1 -1
  3. package/dist/DBSchemaBuilder/getFunctionsTypescriptSchema.js +1 -1
  4. package/dist/DBSchemaBuilder/getFunctionsTypescriptSchema.js.map +1 -1
  5. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.d.ts.map +1 -1
  6. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.d.ts +2 -0
  7. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.d.ts.map +1 -0
  8. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.js +57 -0
  9. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.js.map +1 -0
  10. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.js +26 -14
  11. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.js.map +1 -1
  12. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.spec.d.ts +2 -0
  13. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.spec.d.ts.map +1 -0
  14. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.spec.js +18 -0
  15. package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.spec.js.map +1 -0
  16. package/dist/DBSchemaBuilder/resolveTypeToStructure.d.ts.map +1 -1
  17. package/dist/DBSchemaBuilder/resolveTypeToStructure.js +11 -4
  18. package/dist/DBSchemaBuilder/resolveTypeToStructure.js.map +1 -1
  19. package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
  20. package/dist/DboBuilder/DboBuilder.js +11 -7
  21. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  22. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts +1 -1
  23. package/dist/ProstglesTypes.d.ts +2 -2
  24. package/dist/ProstglesTypes.d.ts.map +1 -1
  25. package/dist/PublishParser/PublishParser.d.ts.map +1 -1
  26. package/dist/PublishParser/PublishParser.js +44 -5
  27. package/dist/PublishParser/PublishParser.js.map +1 -1
  28. package/dist/PublishParser/defineServerFunction.d.ts +34 -54
  29. package/dist/PublishParser/defineServerFunction.d.ts.map +1 -1
  30. package/dist/PublishParser/defineServerFunction.js +4 -31
  31. package/dist/PublishParser/defineServerFunction.js.map +1 -1
  32. package/dist/PublishParser/defineServerFunction.spec.js +12 -3
  33. package/dist/PublishParser/defineServerFunction.spec.js.map +1 -1
  34. package/dist/runClientRequest.d.ts.map +1 -1
  35. package/dist/runClientRequest.js +2 -1
  36. package/dist/runClientRequest.js.map +1 -1
  37. package/lib/DBSchemaBuilder/getFunctionsTypescriptSchema.ts +3 -3
  38. package/lib/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.ts +33 -0
  39. package/lib/DBSchemaBuilder/getServerFunctionReturnTypes.spec.ts +18 -0
  40. package/lib/DBSchemaBuilder/getServerFunctionReturnTypes.ts +38 -28
  41. package/lib/DBSchemaBuilder/resolveTypeToStructure.ts +9 -4
  42. package/lib/DboBuilder/DboBuilder.ts +13 -6
  43. package/lib/ProstglesTypes.ts +2 -2
  44. package/lib/PublishParser/PublishParser.ts +46 -6
  45. package/lib/PublishParser/defineServerFunction.spec.ts +16 -4
  46. package/lib/PublishParser/defineServerFunction.ts +81 -93
  47. package/lib/runClientRequest.ts +2 -1
  48. package/package.json +1 -1
@@ -1,64 +1,44 @@
1
- import type { JSONB, JSONBObjectTypeIfDefined, MaybePromise } from "prostgles-types";
1
+ import type { AnyObject, DBSchema, FullFilter, JSONB, JSONBObjectTypeIfDefined, MaybePromise, SQLHandler } from "prostgles-types";
2
2
  import type { SessionUser } from "../Auth/AuthTypes";
3
+ import type { DBOFullyTyped } from "../DBSchemaBuilder/DBSchemaBuilder";
4
+ import type { DB } from "../initProstgles";
3
5
  import type { PublishParams } from "./publishTypesAndUtils";
6
+ type FunctionContextBase<S, SUser extends SessionUser> = Pick<PublishParams<S, SUser>, "tables" | "clientReq" | "clientInfo"> & {
7
+ dbo: DBOFullyTyped<S>;
8
+ user: S extends DBSchema ? S["users"]["columns"] extends AnyObject ? Required<S["users"]["columns"]> : SUser["user"] : SUser["user"];
9
+ };
10
+ export type RestrictedFunctionContext<S = void, SUser extends SessionUser = SessionUser> = FunctionContextBase<S, SUser>;
11
+ export type UnrestrictedFunctionContext<S = void, SUser extends SessionUser = SessionUser> = FunctionContextBase<S, SUser> & {
12
+ db: DB;
13
+ sql: SQLHandler;
14
+ };
15
+ export type ServerFunctionContext = RestrictedFunctionContext | UnrestrictedFunctionContext;
4
16
  export type ServerFunctionDefinition = {
5
- input?: Record<string, JSONB.FieldType> | undefined;
17
+ input?: Record<string, JSONB.FieldType>;
6
18
  description?: string;
7
- /**
8
- * undefined if not allowed
9
- */
10
- run: undefined | ((args: Record<string, unknown> | undefined) => MaybePromise<unknown>);
19
+ unrestrictedDbAccess?: true;
20
+ run: (...args: any[]) => MaybePromise<unknown>;
11
21
  };
12
- export declare const defineServerFunction: <TInput extends Record<string, JSONB.FieldType> | undefined = undefined>(args: {
22
+ type DefineFunctionArgs<TInput extends Record<string, JSONB.FieldType> | undefined, Context, Return> = {
13
23
  input?: TInput;
14
24
  description?: string;
15
- /**
16
- * undefined if not allowed
17
- */
18
- run: undefined | ((args: JSONBObjectTypeIfDefined<TInput>) => MaybePromise<unknown>);
19
- }) => ServerFunctionDefinition;
20
- export type ServerFunctionDefinitions<S = void, SUser extends SessionUser = SessionUser> = (
21
- /**
22
- * params will be undefined on first run to generate the definitions
23
- */
24
- params: undefined | PublishParams<S, SUser>) => MaybePromise<Record<string, ServerFunctionDefinition>>;
25
- export declare const createServerFunctionWithContext: <Context>(
26
- /**
27
- * undefined if not allowed
28
- */
29
- context: Context | undefined) => <Input extends Record<string, JSONB.FieldType> | undefined, Run extends (args: JSONBObjectTypeIfDefined<Input>, context: Context) => MaybePromise<any>>(args: {
30
- input?: Input;
31
- description?: string;
32
- run: Run;
33
- }) => {
34
- run: ((validatedArgs: any) => Run) | undefined;
35
- input?: Input;
36
- description?: string;
37
- };
38
- type InputOf<T> = T extends {
39
- input?: infer I;
40
- } ? I : undefined;
41
- type SafeInput<I> = I extends Record<string, JSONB.FieldType> ? I : undefined;
42
- type ServerFunctionArgsFrom<Context, Def> = {
43
- input?: InputOf<Def>;
44
- description?: string;
45
- run: (args: JSONBObjectTypeIfDefined<SafeInput<InputOf<Def>>>, context: Context) => MaybePromise<any>;
46
- };
47
- type ServerFunctionBlock<Context, Defs> = {
48
- [K in keyof Defs]: ServerFunctionArgsFrom<Context, Defs[K]>;
49
- };
50
- type WrappedDef<Context, Def> = Def extends ({
51
- input?: infer I;
52
- description?: infer D;
53
- run: (a: any, c: Context) => infer R;
54
- }) ? {
55
- input?: SafeInput<I>;
56
- description?: D extends string ? D : string | undefined;
57
- run: undefined | ((a: any) => R);
58
- } : never;
59
- type WrappedBlock<Context, Defs> = {
60
- [K in keyof Defs]: WrappedDef<Context, Defs[K]>;
25
+ run: (args: JSONBObjectTypeIfDefined<TInput>, context: Context) => MaybePromise<Return>;
61
26
  };
62
- export declare const createServerFunctionBlockWithContext: <Context>(context: Context | undefined) => <const Defs extends Record<string, any>>(defs: Defs & ServerFunctionBlock<Context, Defs>) => WrappedBlock<Context, Defs>;
27
+ export declare function defineFunction<TInput extends Record<string, JSONB.FieldType> | undefined = undefined, S = void, SUser extends SessionUser = SessionUser, Return = unknown>(args: DefineFunctionArgs<TInput, UnrestrictedFunctionContext<S, SUser>, Return> & {
28
+ unrestrictedDbAccess: true;
29
+ }): typeof args;
30
+ export declare function defineFunction<TInput extends Record<string, JSONB.FieldType> | undefined = undefined, S = void, SUser extends SessionUser = SessionUser, Return = unknown>(args: DefineFunctionArgs<TInput, RestrictedFunctionContext<S, SUser>, Return> & {
31
+ unrestrictedDbAccess?: undefined;
32
+ }): typeof args;
33
+ type UsersTableRow<S> = S extends DBSchema ? S extends {
34
+ users: {
35
+ columns: infer UserRow extends AnyObject;
36
+ };
37
+ } ? UserRow : AnyObject : AnyObject;
38
+ type ValidDbSchema<S> = S extends DBSchema ? S : void;
39
+ export type ServerFunctionDefinitions<S = void> = Record<string, {
40
+ userFilter: FullFilter<UsersTableRow<S>, ValidDbSchema<S>>;
41
+ functions: Record<string, ServerFunctionDefinition>;
42
+ }>;
63
43
  export {};
64
44
  //# sourceMappingURL=defineServerFunction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineServerFunction.d.ts","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defineServerFunction.d.ts","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.ts"],"names":[],"mappings":"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"}
@@ -1,34 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createServerFunctionBlockWithContext = exports.createServerFunctionWithContext = exports.defineServerFunction = void 0;
4
- const defineServerFunction = (args) => args;
5
- exports.defineServerFunction = defineServerFunction;
6
- const createServerFunctionWithContext = (
7
- /**
8
- * undefined if not allowed
9
- */
10
- context) => {
11
- return (args) => ({
12
- ...args,
13
- run: context === undefined ? undefined : ((validatedArgs) => {
14
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
15
- return args.run(validatedArgs, context);
16
- }),
17
- });
18
- };
19
- exports.createServerFunctionWithContext = createServerFunctionWithContext;
20
- const createServerFunctionBlockWithContext = (context) => {
21
- return (defs) => {
22
- const wrapped = {};
23
- for (const key in defs) {
24
- const def = defs[key];
25
- wrapped[key] = {
26
- ...def,
27
- run: context === undefined ? undefined : (args) => def.run(args, context),
28
- };
29
- }
30
- return wrapped;
31
- };
32
- };
33
- exports.createServerFunctionBlockWithContext = createServerFunctionBlockWithContext;
3
+ exports.defineFunction = defineFunction;
4
+ function defineFunction(args) {
5
+ return args;
6
+ }
34
7
  //# sourceMappingURL=defineServerFunction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineServerFunction.js","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.ts"],"names":[],"mappings":";;;AAaO,MAAM,oBAAoB,GAAG,CAElC,IAOD,EAAE,EAAE,CAAC,IAA2C,CAAC;AATrC,QAAA,oBAAoB,wBASiB;AAS3C,MAAM,+BAA+B,GAAG;AAC7C;;GAEG;AACH,OAA4B,EAC5B,EAAE;IACF,OAAO,CAGL,IAID,EAAE,EAAE,CACH,CAAC;QACC,GAAG,IAAI;QACP,GAAG,EACD,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAClC,CAAC,aAAkB,EAAE,EAAE;YACrB,iEAAiE;YACjE,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAQ,CAAC;QACjD,CAAC,CACF;KACJ,CAAoC,CAAC;AAC1C,CAAC,CAAC;AAxBW,QAAA,+BAA+B,mCAwB1C;AAuCK,MAAM,oCAAoC,GAAG,CAAU,OAA4B,EAAE,EAAE;IAC5F,OAAO,CACL,IAA+C,EAClB,EAAE;QAC/B,MAAM,OAAO,GAAG,EAAiC,CAAC;QAElD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG;gBACb,GAAG,GAAG;gBACN,GAAG,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;aAC/E,CAAC;QACJ,CAAC;QAED,OAAO,OAA0D,CAAC;IACpE,CAAC,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,oCAAoC,wCAgB/C"}
1
+ {"version":3,"file":"defineServerFunction.js","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.ts"],"names":[],"mappings":";;AA+EA,wCAEC;AAFD,SAAgB,cAAc,CAAC,IAAa;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -2,17 +2,26 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const node_test_1 = require("node:test");
4
4
  const defineServerFunction_1 = require("./defineServerFunction");
5
- void (0, node_test_1.describe)("defineServerFunction type test", async () => {
5
+ void (0, node_test_1.describe)("defineFunction type test", async () => {
6
6
  await (0, node_test_1.test)("Type test", () => {
7
- (0, defineServerFunction_1.defineServerFunction)({
7
+ (0, defineServerFunction_1.defineFunction)({
8
8
  input: { a: "number", b: "string" },
9
- run: (args) => {
9
+ run: (args, context) => {
10
10
  args.a + 5;
11
+ context.user.id;
12
+ //@ts-expect-error raw database access is denied by default
13
+ context.db.any("select 1");
11
14
  //@ts-expect-error
12
15
  if (args.zz) {
13
16
  }
14
17
  },
15
18
  });
19
+ (0, defineServerFunction_1.defineFunction)({
20
+ unrestrictedDbAccess: true,
21
+ run: (_args, context) => context.db.any("select 1"),
22
+ });
23
+ //@ts-expect-error run is required
24
+ (0, defineServerFunction_1.defineFunction)({ description: "invalid" });
16
25
  });
17
26
  });
18
27
  //# sourceMappingURL=defineServerFunction.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineServerFunction.spec.js","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.spec.ts"],"names":[],"mappings":";;AAAA,yCAA2C;AAC3C,iEAA8D;AAE9D,KAAK,IAAA,oBAAQ,EAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;IACzD,MAAM,IAAA,gBAAI,EAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,IAAA,2CAAoB,EAAC;YACnB,KAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE;YACnC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;gBACZ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEX,kBAAkB;gBAClB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"defineServerFunction.spec.js","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.spec.ts"],"names":[],"mappings":";;AAAA,yCAA2C;AAC3C,iEAAwD;AAExD,KAAK,IAAA,oBAAQ,EAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;IACnD,MAAM,IAAA,gBAAI,EAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,IAAA,qCAAc,EAAC;YACb,KAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE;YACnC,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBACrB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEhB,2DAA2D;gBAC3D,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAE3B,kBAAkB;gBAClB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,IAAA,qCAAc,EAAC;YACb,oBAAoB,EAAE,IAAI;YAC1B,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;SACpD,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAA,qCAAc,EAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runClientRequest.d.ts","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAML,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AA8B5E,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAUF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,SAAS,EACf,kBAAkB,IAAI,EACtB,WAAW,iBAAiB,EAC5B,OAAO,eAAe,GAAG,SAAS,8BAgInC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,SAAS,EACf,WAAW,iBAAiB;;;;;;;;EAa7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,SAAS,EACf,iBAAiB,UAAU,EAC3B,WAAW,iBAAiB,iBAqB7B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AACF,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,EACf,iBAAiB,UAAU,EAC3B,WAAW,iBAAiB,qBAuC7B,CAAC"}
1
+ {"version":3,"file":"runClientRequest.d.ts","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAML,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AA8B5E,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAUF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,SAAS,EACf,kBAAkB,IAAI,EACtB,WAAW,iBAAiB,EAC5B,OAAO,eAAe,GAAG,SAAS,8BAgInC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,SAAS,EACf,WAAW,iBAAiB;;;;;;;;EAa7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,SAAS,EACf,iBAAiB,UAAU,EAC3B,WAAW,iBAAiB,iBAqB7B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AACF,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,EACf,iBAAiB,UAAU,EAC3B,WAAW,iBAAiB,qBAwC7B,CAAC"}
@@ -167,7 +167,8 @@ const runClientMethod = async function (unvalidatedArgs, clientReq) {
167
167
  const message = error.startsWith(" ") ? "input" + error : error;
168
168
  throw message;
169
169
  }
170
- const res = await functionDefinition.run(input);
170
+ /** Allowed functions are wrapped with their request context by PublishParser. */
171
+ const res = await functionDefinition.run(input, undefined);
171
172
  return res;
172
173
  };
173
174
  exports.runClientMethod = runClientMethod;
@@ -1 +1 @@
1
- {"version":3,"file":"runClientRequest.js","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runClientRequest.js","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { getJSONBTSTypes, getObjectEntries, type JSONB } from "prostgles-types";
1
+ import { getJSONBTSTypes, type JSONB } from "prostgles-types";
2
2
  import type { TableSchema } from "../DboBuilder/DboBuilder";
3
3
  import type { ProstglesInitOptions } from "../ProstglesTypes";
4
4
  import { getServerFunctionReturnTypes } from "./getServerFunctionReturnTypes";
@@ -6,7 +6,7 @@ import { getServerFunctionReturnTypes } from "./getServerFunctionReturnTypes";
6
6
  export const getFunctionsTypescriptSchema = (
7
7
  { tsGeneratedTypesFunctionsPath }: Pick<ProstglesInitOptions, "tsGeneratedTypesFunctionsPath">,
8
8
  tablesOrViews: TableSchema[],
9
- resolvedFunctions: Record<
9
+ resolvedFunctions: Map<
10
10
  string,
11
11
  {
12
12
  input?: Record<string, JSONB.FieldType>;
@@ -18,7 +18,7 @@ export const getFunctionsTypescriptSchema = (
18
18
  !tsGeneratedTypesFunctionsPath ? undefined : (
19
19
  getServerFunctionReturnTypes(tsGeneratedTypesFunctionsPath)
20
20
  );
21
- const methodDefinitions = getObjectEntries(resolvedFunctions).map(
21
+ const methodDefinitions = Array.from(resolvedFunctions.entries()).map(
22
22
  ([name, functionDefinition]) => {
23
23
  const input = functionDefinition.input;
24
24
  const argumentTypes =
@@ -0,0 +1,33 @@
1
+ import prostgles, { defineFunction } from "..";
2
+
3
+ type RecursiveResult = {
4
+ value: string;
5
+ next?: RecursiveResult;
6
+ };
7
+
8
+ type FixtureSchema = {
9
+ orders: {
10
+ columns: { id: string };
11
+ };
12
+ };
13
+
14
+ void prostgles<FixtureSchema>({
15
+ dbConnection: "",
16
+ onReady: () => {},
17
+ functions: {
18
+ public: {
19
+ userFilter: { type: "public" },
20
+ functions: {
21
+ recursiveResult: defineFunction({
22
+ run: (): RecursiveResult => ({ value: "ok" }),
23
+ }),
24
+ scalarResult: defineFunction({
25
+ run: (_args, { dbo }) => {
26
+ void dbo.orders!.find!();
27
+ return 42;
28
+ },
29
+ }),
30
+ },
31
+ },
32
+ },
33
+ });
@@ -0,0 +1,18 @@
1
+ import assert from "node:assert";
2
+ import { resolve } from "node:path";
3
+ import { describe, test } from "node:test";
4
+ import { getServerFunctionReturnTypes } from "./getServerFunctionReturnTypes";
5
+ import type {} from "./getServerFunctionReturnTypes.fixture";
6
+
7
+ void describe("getServerFunctionReturnTypes", async () => {
8
+ await test("reads grouped functions and stops at recursive types", () => {
9
+ const fixturePath = resolve(
10
+ __dirname,
11
+ "../../lib/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.ts",
12
+ );
13
+ const result = getServerFunctionReturnTypes(fixturePath);
14
+
15
+ assert.equal(result.get("scalarResult"), "number");
16
+ assert.equal(result.get("recursiveResult"), "{ value: string; next?: unknown }");
17
+ });
18
+ });
@@ -45,34 +45,37 @@ export const getServerFunctionReturnTypes = (instancePath: string): Map<string,
45
45
 
46
46
  if (!recordType) return;
47
47
 
48
- for (const prop of checker.getPropertiesOfType(recordType)) {
49
- const propType = checker.getTypeOfSymbolAtLocation(
50
- prop,
51
- prop.valueDeclaration ?? prop.declarations![0]!,
52
- );
53
- const runReturnType = getRunReturnType(propType);
54
-
55
- /** Peel away any wrapping helper functions */
56
- let finalRunReturnType = runReturnType;
57
- while (
58
- finalRunReturnType &&
59
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
60
- finalRunReturnType.symbol?.valueDeclaration &&
61
- ts.isFunctionLike(finalRunReturnType.symbol.valueDeclaration)
62
- ) {
63
- finalRunReturnType = unwrapMaybePromise(
64
- checker.getReturnTypeOfSignature(finalRunReturnType.getCallSignatures()[0]!),
65
- );
66
- }
67
-
68
- if (finalRunReturnType) {
69
- const resolvedReturnType = resolveTypeToStructure(
70
- globalBuiltins,
71
- prop.getName(),
72
- checker,
73
- finalRunReturnType,
74
- );
75
- result.set(prop.getName(), resolvedReturnType);
48
+ for (const groupProp of checker.getPropertiesOfType(recordType)) {
49
+ const groupType = getSymbolType(groupProp);
50
+ const functionsProp = checker.getPropertyOfType(groupType, "functions");
51
+ if (!functionsProp) continue;
52
+
53
+ const functionsType = checker.getApparentType(getSymbolType(functionsProp));
54
+ for (const prop of checker.getPropertiesOfType(functionsType)) {
55
+ const runReturnType = getRunReturnType(getSymbolType(prop));
56
+
57
+ /** Peel away any wrapping helper functions */
58
+ let finalRunReturnType = runReturnType;
59
+ while (
60
+ finalRunReturnType &&
61
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
62
+ finalRunReturnType.symbol?.valueDeclaration &&
63
+ ts.isFunctionLike(finalRunReturnType.symbol.valueDeclaration)
64
+ ) {
65
+ finalRunReturnType = unwrapMaybePromise(
66
+ checker.getReturnTypeOfSignature(finalRunReturnType.getCallSignatures()[0]!),
67
+ );
68
+ }
69
+
70
+ if (finalRunReturnType) {
71
+ const resolvedReturnType = resolveTypeToStructure(
72
+ globalBuiltins,
73
+ prop.getName(),
74
+ checker,
75
+ finalRunReturnType,
76
+ );
77
+ result.set(prop.getName(), resolvedReturnType);
78
+ }
76
79
  }
77
80
  }
78
81
  }
@@ -97,6 +100,13 @@ export const getServerFunctionReturnTypes = (instancePath: string): Map<string,
97
100
  return checker.getApparentType(t);
98
101
  }
99
102
 
103
+ function getSymbolType(symbol: ts.Symbol) {
104
+ const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];
105
+ return declaration ?
106
+ checker.getTypeOfSymbolAtLocation(symbol, declaration)
107
+ : checker.getTypeOfSymbol(symbol);
108
+ }
109
+
100
110
  /** Extract `run` return type from ServerFunctionDefinition */
101
111
  function getRunReturnType(fnDefType: ts.Type) {
102
112
  const runSymbol = checker.getPropertyOfType(fnDefType, "run");
@@ -43,20 +43,25 @@ export const resolveTypeToStructure = (
43
43
  return type.intrinsicName === "true" ? "true" : "false";
44
44
  }
45
45
 
46
+ /** Recursive output types cannot be represented in the generated inline schema. */
47
+ if (parentTypes.includes(type)) return "unknown";
48
+
46
49
  // Handle union types
47
50
  if (type.isUnion()) {
48
51
  const parts = type.types.map((t) =>
49
- resolveTypeToStructure(globalBuiltIns, functionName, checker, t, parentTypes),
52
+ resolveTypeToStructure(globalBuiltIns, functionName, checker, t, nextParentTypes),
50
53
  );
51
54
  // Deduplicate
52
55
  const unique = [...new Set(parts)];
56
+ if (unique.includes("unknown")) return "unknown";
57
+ if (unique.includes("any")) return "any";
53
58
  return unique.length === 1 ? unique[0]! : `(${unique.join(" | ")})`;
54
59
  }
55
60
 
56
61
  // Handle intersection types
57
62
  if (type.isIntersection()) {
58
63
  const parts = type.types.map((t) =>
59
- resolveTypeToStructure(globalBuiltIns, functionName, checker, t, parentTypes),
64
+ resolveTypeToStructure(globalBuiltIns, functionName, checker, t, nextParentTypes),
60
65
  );
61
66
  return `(${parts.join(" & ")})`;
62
67
  }
@@ -97,7 +102,7 @@ export const resolveTypeToStructure = (
97
102
  const typeArgs = checker.getTypeArguments(type as ts.TypeReference);
98
103
  if (typeArgs.length > 0) {
99
104
  const resolvedArgs = typeArgs.map((t) =>
100
- resolveTypeToStructure(globalBuiltIns, functionName, checker, t, parentTypes),
105
+ resolveTypeToStructure(globalBuiltIns, functionName, checker, t, nextParentTypes),
101
106
  );
102
107
  return `${typeName}<${resolvedArgs.join(", ")}>`;
103
108
  }
@@ -158,7 +163,7 @@ export const resolveTypeToStructure = (
158
163
  functionName,
159
164
  checker,
160
165
  propType,
161
- parentTypes,
166
+ nextParentTypes,
162
167
  );
163
168
  const isOptional = prop.flags & ts.SymbolFlags.Optional;
164
169
  const propName = prop.getName();
@@ -260,13 +260,20 @@ export class DboBuilder {
260
260
  }
261
261
 
262
262
  const { functions } = this.prostgles.opts;
263
- let resolvedFunctions = {} as { [key: string]: ServerFunctionDefinition };
263
+ const resolvedFunctions = new Map<string, ServerFunctionDefinition>();
264
264
  if (functions) {
265
- try {
266
- resolvedFunctions = await functions(undefined);
267
- } catch (e) {
268
- console.error("Invalid functions:", e);
269
- throw e;
265
+ for (const group of Object.values(functions)) {
266
+ for (const [name, definition] of Object.entries(group.functions)) {
267
+ if (typeof definition.run !== "function") {
268
+ throw new Error(`Function ${JSON.stringify(name)} must define run`);
269
+ }
270
+ if (resolvedFunctions.has(name)) {
271
+ throw new Error(
272
+ `Function ${JSON.stringify(name)} is already defined. Function names must be unique across all groups`,
273
+ );
274
+ }
275
+ resolvedFunctions.set(name, definition);
276
+ }
270
277
  }
271
278
  }
272
279
 
@@ -6,11 +6,11 @@ import type {
6
6
  SessionUser,
7
7
  } from "./Auth/AuthTypes";
8
8
  import type { EventTriggerTagFilter } from "./Event_Trigger_Tags";
9
- import type { StorageClient } from "./StorageClient/StorageClientTypes";
10
9
  import type { DbConnection, OnReadyCallback } from "./initProstgles";
11
10
  import type { EventInfo } from "./Logging";
12
11
  import type { RestApiConfig } from "./RestApi";
13
12
  import type { OnSchemaChangeCallback } from "./SchemaWatch/SchemaWatch";
13
+ import type { StorageClient } from "./StorageClient/StorageClientTypes";
14
14
  import type { PGConstraint } from "./TableConfig/fetchTableConstraints";
15
15
  import type { TableConfig } from "./TableConfig/TableConfigTypes";
16
16
  import type { TableHooks } from "./TableHooks/TableHooks";
@@ -181,7 +181,7 @@ export type ProstglesInitOptions<S = void, SUser extends SessionUser = SessionUs
181
181
  /**
182
182
  * Server-side functions that can be invoked by the client
183
183
  */
184
- functions?: ServerFunctionDefinitions<S, SUser>;
184
+ functions?: ServerFunctionDefinitions<S>;
185
185
 
186
186
  /**
187
187
  * If true then will test all table methods on each socket connect.
@@ -67,15 +67,55 @@ export class PublishParser {
67
67
 
68
68
  async getAllowedFunctions(clientReq: AuthClientRequest, userData: AuthResultWithSID | undefined) {
69
69
  const publishParams = await this.getPublishParams(clientReq, userData);
70
- const allowedFunctions = await this.prostgles.opts.functions?.(publishParams);
71
- if (!allowedFunctions) {
70
+ const functionGroups = this.prostgles.opts.functions;
71
+ if (!functionGroups || !publishParams.user) {
72
72
  return;
73
73
  }
74
- const allowedFunctionsMap: Map<string, ServerFunctionDefinition> = new Map();
74
+ const user = publishParams.user;
75
+ const users = publishParams.dbo.users;
76
+ if (!users?.findOne) return;
77
+ const userId = user.id;
78
+ if (!userId || typeof userId !== "string") {
79
+ throw "User ID is missing or invalid";
80
+ }
81
+ const allowedFunctionsMap = new Map<string, ServerFunctionDefinition>();
82
+
83
+ for (const group of Object.values(functionGroups)) {
84
+ const matchingUser = await users.findOne({
85
+ $and: [group.userFilter, { id: userId }],
86
+ });
87
+ if (!matchingUser) continue;
75
88
 
76
- for (const [name, method] of Object.entries(allowedFunctions)) {
77
- if (method.run !== undefined) {
78
- allowedFunctionsMap.set(name, method);
89
+ for (const [name, method] of Object.entries(group.functions)) {
90
+ const existingMethod = allowedFunctionsMap.get(name);
91
+ if (existingMethod) {
92
+ throw `Duplicate function name detected: ${name}. Function names must be unique across all groups.`;
93
+ }
94
+
95
+ const runWithContext = async (args: Record<string, unknown> | undefined) => {
96
+ const ctx = await (async () => {
97
+ if (method.unrestrictedDbAccess) {
98
+ return {
99
+ ...publishParams,
100
+ db: publishParams.dbo,
101
+ _db: publishParams.db,
102
+ user,
103
+ };
104
+ }
105
+ const { clientDb, clientSql } = await publishParams.getClientDBHandlers(undefined);
106
+ const { db: _db, ...safeParams } = publishParams;
107
+ return {
108
+ ...safeParams,
109
+ db: clientDb,
110
+ dbo: clientDb,
111
+ sql: clientSql,
112
+ user,
113
+ };
114
+ })();
115
+
116
+ return method.run(args, ctx);
117
+ };
118
+ allowedFunctionsMap.set(name, { ...method, run: runWithContext });
79
119
  }
80
120
  }
81
121
  return allowedFunctionsMap;
@@ -1,17 +1,29 @@
1
1
  import { describe, test } from "node:test";
2
- import { defineServerFunction } from "./defineServerFunction";
2
+ import { defineFunction } from "./defineServerFunction";
3
3
 
4
- void describe("defineServerFunction type test", async () => {
4
+ void describe("defineFunction type test", async () => {
5
5
  await test("Type test", () => {
6
- defineServerFunction({
6
+ defineFunction({
7
7
  input: { a: "number", b: "string" },
8
- run: (args) => {
8
+ run: (args, context) => {
9
9
  args.a + 5;
10
+ context.user.id;
11
+
12
+ //@ts-expect-error raw database access is denied by default
13
+ context.db.any("select 1");
10
14
 
11
15
  //@ts-expect-error
12
16
  if (args.zz) {
13
17
  }
14
18
  },
15
19
  });
20
+
21
+ defineFunction({
22
+ unrestrictedDbAccess: true,
23
+ run: (_args, context) => context.db.any("select 1"),
24
+ });
25
+
26
+ //@ts-expect-error run is required
27
+ defineFunction({ description: "invalid" });
16
28
  });
17
29
  });