@memberjunction/server 5.35.0 → 5.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,8 @@ import { RunQueryResultType } from './QueryResolver.js';
8
8
  declare class AdhocQueryInput {
9
9
  SQL: string;
10
10
  TimeoutSeconds?: number;
11
+ MaxRows?: number;
12
+ StartRow?: number;
11
13
  }
12
14
  /**
13
15
  * Resolver for executing ad-hoc (unsaved) SQL queries.
@@ -1 +1 @@
1
- {"version":3,"file":"AdhocQueryResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;GAGG;AACH,cACM,eAAe;IAEjB,GAAG,EAAE,MAAM,CAAC;IAGZ,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,qBACa,kBAAmB,SAAQ,YAAY;IAE1C,iBAAiB,CACkB,KAAK,EAAE,eAAe,EACpD,OAAO,EAAE,UAAU,GAC3B,OAAO,CAAC,kBAAkB,CAAC;IAgF9B,OAAO,CAAC,gBAAgB;CAc3B"}
1
+ {"version":3,"file":"AdhocQueryResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;GAGG;AACH,cACM,eAAe;IAEjB,GAAG,EAAE,MAAM,CAAC;IAGZ,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,qBACa,kBAAmB,SAAQ,YAAY;IAE1C,iBAAiB,CACkB,KAAK,EAAE,eAAe,EACpD,OAAO,EAAE,UAAU,GAC3B,OAAO,CAAC,kBAAkB,CAAC;IAwH9B,OAAO,CAAC,gBAAgB;CAc3B"}
@@ -13,7 +13,8 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
13
  import { Arg, Ctx, Query, Resolver, Field, Int, InputType } from 'type-graphql';
14
14
  import { LogError } from '@memberjunction/core';
15
15
  import { SQLExpressionValidator } from '@memberjunction/global';
16
- import { GetReadOnlyDataSource } from '../util.js';
16
+ import { RenderPipeline } from '@memberjunction/generic-database-provider';
17
+ import { GetReadOnlyDataSource, GetReadOnlyProvider } from '../util.js';
17
18
  import { ResolverBase } from '../generic/ResolverBase.js';
18
19
  import { RunQueryResultType } from './QueryResolver.js';
19
20
  import sql from 'mssql';
@@ -31,6 +32,14 @@ __decorate([
31
32
  Field(() => Int, { nullable: true, description: 'Query timeout in seconds. Defaults to 30.' }),
32
33
  __metadata("design:type", Number)
33
34
  ], AdhocQueryInput.prototype, "TimeoutSeconds", void 0);
35
+ __decorate([
36
+ Field(() => Int, { nullable: true, description: 'Maximum number of rows to return; applied at the database via the render pipeline.' }),
37
+ __metadata("design:type", Number)
38
+ ], AdhocQueryInput.prototype, "MaxRows", void 0);
39
+ __decorate([
40
+ Field(() => Int, { nullable: true, description: 'Zero-based offset for pagination. When > 0, the row cap switches to OFFSET/FETCH pagination.' }),
41
+ __metadata("design:type", Number)
42
+ ], AdhocQueryInput.prototype, "StartRow", void 0);
34
43
  AdhocQueryInput = __decorate([
35
44
  InputType()
36
45
  ], AdhocQueryInput);
@@ -63,24 +72,63 @@ let AdhocQueryResolver = class AdhocQueryResolver extends ResolverBase {
63
72
  catch {
64
73
  return this.buildErrorResult('No read-only data source available for ad-hoc query execution');
65
74
  }
66
- // 3. Execute with timeout
75
+ // 3. Resolve platform from the read-only provider for the render pipeline.
76
+ let platform = 'sqlserver';
77
+ try {
78
+ const provider = GetReadOnlyProvider(context.providers, { allowFallbackToReadWrite: false });
79
+ if (provider?.PlatformKey)
80
+ platform = provider.PlatformKey;
81
+ }
82
+ catch {
83
+ // Provider not configured — keep the default platform.
84
+ }
85
+ const contextUser = context.userPayload?.userRecord;
86
+ // 4. Route the SQL through RenderPipeline so composition tokens
87
+ // resolve, comments and templates are processed, and the row cap
88
+ // is applied at the database (via TOP / LIMIT / OFFSET-FETCH).
89
+ const startRow = input.StartRow ?? 0;
90
+ const maxRows = input.MaxRows;
91
+ const usePaging = maxRows != null &&
92
+ Number.isInteger(maxRows) &&
93
+ maxRows > 0 &&
94
+ Number.isInteger(startRow) &&
95
+ startRow > 0;
96
+ let executableSql;
97
+ try {
98
+ const rendered = RenderPipeline.Run(input.SQL, {
99
+ Platform: platform,
100
+ ContextUser: contextUser,
101
+ ...(usePaging
102
+ ? { Paging: { StartRow: startRow, MaxRows: maxRows } }
103
+ : maxRows != null && maxRows > 0
104
+ ? { MaxRows: maxRows }
105
+ : {}),
106
+ });
107
+ executableSql = rendered.FinalSQL;
108
+ }
109
+ catch (renderErr) {
110
+ const renderMsg = renderErr instanceof Error ? renderErr.message : String(renderErr);
111
+ return this.buildErrorResult(`Ad-hoc query rendering failed: ${renderMsg}`);
112
+ }
113
+ // 5. Execute with timeout
67
114
  const timeoutMs = (input.TimeoutSeconds ?? 30) * 1000;
68
115
  const request = new sql.Request(readOnlyDS);
69
116
  const result = await Promise.race([
70
- request.query(input.SQL),
117
+ request.query(executableSql),
71
118
  new Promise((_, reject) => setTimeout(() => reject(new Error('Query timeout exceeded')), timeoutMs))
72
119
  ]);
73
120
  const executionTimeMs = Date.now() - startTime;
74
- // 4. Return as RunQueryResultType
121
+ // 6. Return as RunQueryResultType
122
+ const recordset = result.recordset ?? [];
75
123
  return {
76
124
  QueryID: '',
77
125
  QueryName: 'Ad-Hoc Query',
78
126
  Success: true,
79
- Results: JSON.stringify(result.recordset ?? []),
80
- RowCount: result.recordset?.length ?? 0,
81
- TotalRowCount: result.recordset?.length ?? 0,
82
- PageNumber: undefined,
83
- PageSize: undefined,
127
+ Results: JSON.stringify(recordset),
128
+ RowCount: recordset.length,
129
+ TotalRowCount: recordset.length,
130
+ PageNumber: maxRows != null && maxRows > 0 ? Math.floor(startRow / maxRows) + 1 : undefined,
131
+ PageSize: maxRows ?? undefined,
84
132
  ExecutionTime: executionTimeMs,
85
133
  ErrorMessage: ''
86
134
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AdhocQueryResolver.js","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdhocQueryResolver.js","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAoB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,GAAG,MAAM,OAAO,CAAC;AAExB;;;GAGG;AAEH,IAAM,eAAe,GAArB,MAAM,eAAe;CAYpB,CAAA;AAVG;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,iEAAiE,EAAE,CAAC;;4CAC5F;AAGZ;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC;;uDACvE;AAGxB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oFAAoF,EAAE,CAAC;;gDACvH;AAGjB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,8FAA8F,EAAE,CAAC;;iDAChI;AAXhB,eAAe;IADpB,SAAS,EAAE;GACN,eAAe,CAYpB;AAED;;;;;;;;;;GAUG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,YAAY;IAE1C,AAAN,KAAK,CAAC,iBAAiB,CACkB,KAAsB,EACpD,OAAmB;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACD,yDAAyD;YACzD,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,CAAC;YAClD,MAAM,UAAU,GAAG,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;YAC9E,CAAC;YAED,2DAA2D;YAC3D,IAAI,UAA8B,CAAC;YACnC,IAAI,CAAC;gBACD,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,CAAC;YACjG,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,+DAA+D,CAAC,CAAC;YAClG,CAAC;YAED,2EAA2E;YAC3E,IAAI,QAAQ,GAAqB,WAAW,CAAC;YAC7C,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC7F,IAAI,QAAQ,EAAE,WAAW;oBAAE,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACL,uDAAuD;YAC3D,CAAC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC;YAEpD,gEAAgE;YAChE,iEAAiE;YACjE,+DAA+D;YAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,SAAS,GACX,OAAO,IAAI,IAAI;gBACf,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;gBACzB,OAAO,GAAG,CAAC;gBACX,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC1B,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,aAAqB,CAAC;YAC1B,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC3C,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,WAAW;oBACxB,GAAG,CAAC,SAAS;wBACT,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAQ,EAAE,EAAE;wBACvD,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC;4BAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;4BACtB,CAAC,CAAC,EAAE,CAAC;iBAChB,CAAC,CAAC;gBACH,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACtC,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACrF,OAAO,IAAI,CAAC,gBAAgB,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,0BAA0B;YAC1B,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YACtD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;gBAC5B,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC7B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,SAAS,CAAC,CAC3E;aACJ,CAAC,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE/C,kCAAkC;YAClC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAEzC,OAAO;gBACH,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBAClC,QAAQ,EAAE,SAAS,CAAC,MAAM;gBAC1B,aAAa,EAAE,SAAS,CAAC,MAAM;gBAC/B,UAAU,EAAE,OAAO,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3F,QAAQ,EAAE,OAAO,IAAI,SAAS;gBAC9B,aAAa,EAAE,eAAe;gBAC9B,YAAY,EAAE,EAAE;aACnB,CAAC;QACN,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC/C,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEtE,iBAAiB;YACjB,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvE,OAAO;oBACH,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE,cAAc;oBACzB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,CAAC;oBACX,aAAa,EAAE,CAAC;oBAChB,UAAU,EAAE,SAAS;oBACrB,QAAQ,EAAE,SAAS;oBACnB,aAAa,EAAE,eAAe;oBAC9B,YAAY,EAAE,4BAA4B,KAAK,CAAC,cAAc,IAAI,EAAE,iBAAiB;iBACxF,CAAC;YACN,CAAC;YAED,QAAQ,CAAC,kCAAkC,YAAY,EAAE,CAAC,CAAC;YAC3D,OAAO;gBACH,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,CAAC;gBACX,aAAa,EAAE,CAAC;gBAChB,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,SAAS;gBACnB,aAAa,EAAE,eAAe;gBAC9B,YAAY,EAAE,2BAA2B,YAAY,EAAE;aAC1D,CAAC;QACN,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,YAAoB;QACzC,OAAO;YACH,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,YAAY;SAC7B,CAAC;IACN,CAAC;CACJ,CAAA;AAzIS;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC;IAE3B,WAAA,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,CAAA;IACnC,WAAA,GAAG,EAAE,CAAA;;qCADsC,eAAe;;2DAwH9D;AA3HQ,kBAAkB;IAD9B,QAAQ,EAAE;GACE,kBAAkB,CA2I9B"}
@@ -0,0 +1,175 @@
1
+ import type { ApplyResult as CoreApplyResult, ListDelta as CoreListDelta, ListDeltaWarning as CoreListDeltaWarning, ListShareSummary, ListSource as CoreListSource, SetOpKind, SharePermissionLevel } from '@memberjunction/lists-base';
2
+ import { ResolverBase } from '../generic/ResolverBase.js';
3
+ import { AppContext } from '../types.js';
4
+ /**
5
+ * Discriminated source descriptor as a flat input. GraphQL does not support
6
+ * tagged unions in inputs, so we encode the discriminator in `Kind` and
7
+ * the variant-specific payload in optional fields. Runtime validation
8
+ * enforces the right field-presence per kind.
9
+ */
10
+ export declare class ListSourceInput {
11
+ Kind: 'list' | 'view' | 'adhoc';
12
+ ListID?: string;
13
+ ViewID?: string;
14
+ EntityName?: string;
15
+ ExtraFilter?: string;
16
+ }
17
+ export declare class MaterializeOptionsInput {
18
+ ListName: string;
19
+ CategoryId?: string;
20
+ Description?: string;
21
+ RememberLineage: boolean;
22
+ UseSnapshot: boolean;
23
+ RefreshMode: 'Additive' | 'Sync';
24
+ }
25
+ export declare class ListDeltaCountsType {
26
+ Add: number;
27
+ Remove: number;
28
+ Unchanged: number;
29
+ SourceTotal: number;
30
+ TargetTotal: number;
31
+ }
32
+ export declare class ListDeltaWarningType {
33
+ Code: string;
34
+ Message: string;
35
+ /** Structured payload, JSON-stringified for GraphQL-over-the-wire portability. */
36
+ DetailsJSON?: string;
37
+ }
38
+ export declare class ListDeltaType {
39
+ TargetListId?: string | null;
40
+ EntityName: string;
41
+ ToAdd: string[];
42
+ ToRemove: string[];
43
+ Unchanged: string[];
44
+ Counts: ListDeltaCountsType;
45
+ Warnings: ListDeltaWarningType[];
46
+ DeltaToken: string;
47
+ }
48
+ export declare class ApplyListResultType {
49
+ Success: boolean;
50
+ ResultCode: string;
51
+ Message: string;
52
+ CreatedListId?: string;
53
+ TargetListId?: string;
54
+ AddedCount?: number;
55
+ RemovedCount?: number;
56
+ FailedCount?: number;
57
+ Errors?: string[];
58
+ }
59
+ export declare class ComputeDeltaInput {
60
+ Target: string;
61
+ Source: ListSourceInput;
62
+ Mode: 'Additive' | 'Sync';
63
+ }
64
+ export declare class ApplyDeltaInput {
65
+ TargetListId: string;
66
+ EntityName: string;
67
+ ToAdd: string[];
68
+ ToRemove: string[];
69
+ Unchanged: string[];
70
+ AddCount: number;
71
+ RemoveCount: number;
72
+ UnchangedCount: number;
73
+ SourceTotal: number;
74
+ TargetTotal: number;
75
+ DeltaToken: string;
76
+ ConfirmDrops: boolean;
77
+ }
78
+ export declare class ShareTargetInput {
79
+ Kind: 'user' | 'role';
80
+ UserID?: string;
81
+ RoleID?: string;
82
+ }
83
+ export declare class ShareListInput {
84
+ ListID: string;
85
+ Target: ShareTargetInput;
86
+ PermissionLevel: SharePermissionLevel;
87
+ }
88
+ export declare class InviteToListInput {
89
+ ListID: string;
90
+ Email: string;
91
+ Role: 'Editor' | 'Viewer';
92
+ TtlHours?: number;
93
+ }
94
+ export declare class ShareTargetType {
95
+ Kind: 'user' | 'role';
96
+ UserID?: string;
97
+ RoleID?: string;
98
+ }
99
+ export declare class ListShareSummaryType {
100
+ PermissionID: string;
101
+ ListID: string;
102
+ Target: ShareTargetType;
103
+ PermissionLevel: SharePermissionLevel;
104
+ Status: string;
105
+ SharedByUserID?: string;
106
+ CreatedAt: Date;
107
+ }
108
+ export declare class SharedListSummaryType {
109
+ ListID: string;
110
+ ListName: string;
111
+ PermissionLevel: SharePermissionLevel;
112
+ SharedByUserID?: string;
113
+ SharedAt: Date;
114
+ }
115
+ export declare class ShareResultType {
116
+ Success: boolean;
117
+ ResultCode: string;
118
+ Message: string;
119
+ PermissionID?: string;
120
+ }
121
+ export declare class InviteResultType {
122
+ Success: boolean;
123
+ ResultCode: string;
124
+ Message: string;
125
+ InvitationID?: string;
126
+ Token?: string;
127
+ ExpiresAt?: Date;
128
+ }
129
+ export declare class AcceptInvitationResultType {
130
+ Success: boolean;
131
+ ResultCode: string;
132
+ Message: string;
133
+ PermissionID?: string;
134
+ ListID?: string;
135
+ }
136
+ export declare class ComposeListsInput {
137
+ Op: SetOpKind;
138
+ Inputs: ListSourceInput[];
139
+ Target?: ListSourceInput;
140
+ }
141
+ export declare function toCoreSource(input: ListSourceInput): CoreListSource;
142
+ export declare function fromCoreDelta(delta: CoreListDelta): ListDeltaType;
143
+ export declare function fromCoreWarning(w: CoreListDeltaWarning): ListDeltaWarningType;
144
+ export declare function fromCoreApplyResult(r: CoreApplyResult): ApplyListResultType;
145
+ /** Convert a `ListShareSummary` from the core into the GraphQL DTO. */
146
+ export declare function fromCoreShareSummary(s: ListShareSummary): ListShareSummaryType;
147
+ /** Guard for required-when-Kind-X fields on discriminated inputs. */
148
+ export declare function requireField<T>(value: T | undefined, name: string): T;
149
+ /** Three failure helpers — one per output type — keep the try/catch
150
+ * sites in the resolver methods tiny. */
151
+ export declare function shareUnexpected(e: unknown, op: string): ShareResultType;
152
+ export declare function inviteUnexpected(e: unknown, op: string): InviteResultType;
153
+ export declare function acceptInvitationUnexpected(e: unknown, op: string): AcceptInvitationResultType;
154
+ export declare function rebuildDeltaFromInput(input: ApplyDeltaInput): CoreListDelta;
155
+ export declare class ListOperationsResolver extends ResolverBase {
156
+ PreviewListDelta(input: ComputeDeltaInput, ctx: AppContext): Promise<ListDeltaType>;
157
+ ApplyListDelta(input: ApplyDeltaInput, ctx: AppContext): Promise<ApplyListResultType>;
158
+ MaterializeListFromView(viewId: string, options: MaterializeOptionsInput, ctx: AppContext): Promise<ApplyListResultType>;
159
+ AddViewResultsToList(viewId: string, listId: string, ctx: AppContext): Promise<ApplyListResultType>;
160
+ RefreshListFromSource(listId: string, mode: 'Additive' | 'Sync', confirmDrops: boolean, ctx: AppContext): Promise<ApplyListResultType>;
161
+ ComposeLists(input: ComposeListsInput, ctx: AppContext): Promise<ListDeltaType>;
162
+ ShareList(input: ShareListInput, ctx: AppContext): Promise<ShareResultType>;
163
+ UnshareList(permissionId: string, ctx: AppContext): Promise<ShareResultType>;
164
+ InviteToList(input: InviteToListInput, ctx: AppContext): Promise<InviteResultType>;
165
+ AcceptListInvitation(token: string, ctx: AppContext): Promise<AcceptInvitationResultType>;
166
+ RevokeListInvitation(invitationId: string, ctx: AppContext): Promise<ShareResultType>;
167
+ ListSharesForList(listId: string, ctx: AppContext): Promise<ListShareSummaryType[]>;
168
+ ListsSharedWithMe(ctx: AppContext): Promise<SharedListSummaryType[]>;
169
+ private buildSharing;
170
+ private buildOps;
171
+ private requireUser;
172
+ private unexpectedFailure;
173
+ }
174
+ export default ListOperationsResolver;
175
+ //# sourceMappingURL=ListOperationsResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListOperationsResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/ListOperationsResolver.ts"],"names":[],"mappings":"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"}