@transcend-io/mcp-server-preferences 0.4.13 → 0.5.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.
package/dist/cli.mjs
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { n as getPreferenceTools, t as PREFERENCE_OAUTH_SCOPES } from "./scopes-
|
|
3
|
-
import { TranscendGraphQLBase,
|
|
2
|
+
import { n as getPreferenceTools, t as PREFERENCE_OAUTH_SCOPES } from "./scopes-CuJmw6vE.mjs";
|
|
3
|
+
import { TranscendGraphQLBase, createMCPServer, createTranscendRestClient } from "@transcend-io/mcp-server-base";
|
|
4
4
|
//#endregion
|
|
5
5
|
//#region src/cli.ts
|
|
6
6
|
createMCPServer({
|
|
7
7
|
name: "transcend-mcp-preferences",
|
|
8
|
-
version: "0.
|
|
8
|
+
version: "0.5.0",
|
|
9
9
|
oauthScopes: PREFERENCE_OAUTH_SCOPES,
|
|
10
10
|
getTools: getPreferenceTools,
|
|
11
|
-
createClients: ({ auth, sombraUrl, graphqlUrl, dashboardUrl }) =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
createClients: ({ auth, sombraUrl, sombraCustomerKey, graphqlUrl, dashboardUrl }) => {
|
|
12
|
+
const graphql = new TranscendGraphQLBase(auth, graphqlUrl);
|
|
13
|
+
return {
|
|
14
|
+
rest: createTranscendRestClient(auth, graphql, {
|
|
15
|
+
sombraUrl,
|
|
16
|
+
sombraCustomerKey
|
|
17
|
+
}),
|
|
18
|
+
graphql,
|
|
19
|
+
dashboardUrl
|
|
20
|
+
};
|
|
21
|
+
}
|
|
16
22
|
});
|
|
17
23
|
//#endregion
|
|
18
24
|
export {};
|
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","names":["packageJson.version"],"sources":["../package.json","../src/cli.ts"],"sourcesContent":["","#!/usr/bin/env node\nimport {\n createMCPServer,\n
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":["packageJson.version"],"sources":["../package.json","../src/cli.ts"],"sourcesContent":["","#!/usr/bin/env node\nimport {\n createMCPServer,\n createTranscendRestClient,\n TranscendGraphQLBase,\n} from '@transcend-io/mcp-server-base';\n\nimport packageJson from '../package.json' with { type: 'json' };\nimport { PREFERENCE_OAUTH_SCOPES } from './scopes.js';\nimport { getPreferenceTools } from './tools/index.js';\n\ncreateMCPServer({\n name: 'transcend-mcp-preferences',\n version: packageJson.version,\n oauthScopes: PREFERENCE_OAUTH_SCOPES,\n getTools: getPreferenceTools,\n createClients: ({ auth, sombraUrl, sombraCustomerKey, graphqlUrl, dashboardUrl }) => {\n const graphql = new TranscendGraphQLBase(auth, graphqlUrl);\n return {\n rest: createTranscendRestClient(auth, graphql, { sombraUrl, sombraCustomerKey }),\n graphql,\n dashboardUrl,\n };\n },\n});\n"],"mappings":";;;;;ACWA,gBAAgB;CACd,MAAM;CACGA;CACT,aAAa;CACb,UAAU;CACV,gBAAgB,EAAE,MAAM,WAAW,mBAAmB,YAAY,mBAAmB;EACnF,MAAM,UAAU,IAAI,qBAAqB,MAAM,WAAW;AAC1D,SAAO;GACL,MAAM,0BAA0B,MAAM,SAAS;IAAE;IAAW;IAAmB,CAAC;GAChF;GACA;GACD;;CAEJ,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as UpsertPreferencesSchema, c as DeleteIdentifiersSchema, d as IdentifierSchema, f as QueryPreferencesSchema, i as UpsertPreferencesRecordSchema, l as DeletePreferencesSchema, n as getPreferenceTools, o as UpdateIdentifiersItemSchema, r as UpsertPreferencesPurposeSchema, s as UpdateIdentifiersSchema, t as PREFERENCE_OAUTH_SCOPES, u as AppendIdentifiersSchema } from "./scopes-
|
|
1
|
+
import { a as UpsertPreferencesSchema, c as DeleteIdentifiersSchema, d as IdentifierSchema, f as QueryPreferencesSchema, i as UpsertPreferencesRecordSchema, l as DeletePreferencesSchema, n as getPreferenceTools, o as UpdateIdentifiersItemSchema, r as UpsertPreferencesPurposeSchema, s as UpdateIdentifiersSchema, t as PREFERENCE_OAUTH_SCOPES, u as AppendIdentifiersSchema } from "./scopes-CuJmw6vE.mjs";
|
|
2
2
|
export { AppendIdentifiersSchema, DeleteIdentifiersSchema, DeletePreferencesSchema, IdentifierSchema, PREFERENCE_OAUTH_SCOPES, QueryPreferencesSchema, UpdateIdentifiersItemSchema, UpdateIdentifiersSchema, UpsertPreferencesPurposeSchema, UpsertPreferencesRecordSchema, UpsertPreferencesSchema, getPreferenceTools };
|
|
@@ -21,6 +21,7 @@ function createPreferencesQueryTool(clients) {
|
|
|
21
21
|
destructiveHint: false,
|
|
22
22
|
idempotentHint: true
|
|
23
23
|
},
|
|
24
|
+
requireSombra: true,
|
|
24
25
|
zodSchema: QueryPreferencesSchema,
|
|
25
26
|
handler: async ({ partition, identifiers }) => {
|
|
26
27
|
const result = await rest.queryPreferences({
|
|
@@ -54,6 +55,7 @@ function createPreferencesAppendIdentifiersTool(clients) {
|
|
|
54
55
|
destructiveHint: false,
|
|
55
56
|
idempotentHint: false
|
|
56
57
|
},
|
|
58
|
+
requireSombra: true,
|
|
57
59
|
zodSchema: AppendIdentifiersSchema,
|
|
58
60
|
handler: async ({ partition, userId, identifiers }) => {
|
|
59
61
|
return createToolResult(true, {
|
|
@@ -86,6 +88,7 @@ function createPreferencesDeleteTool(clients) {
|
|
|
86
88
|
destructiveHint: true,
|
|
87
89
|
idempotentHint: false
|
|
88
90
|
},
|
|
91
|
+
requireSombra: true,
|
|
89
92
|
zodSchema: DeletePreferencesSchema,
|
|
90
93
|
handler: async ({ partition, identifiers }) => {
|
|
91
94
|
const result = await rest.deletePreferences(partition, identifiers.map((id) => ({
|
|
@@ -119,6 +122,7 @@ function createPreferencesDeleteIdentifiersTool(clients) {
|
|
|
119
122
|
destructiveHint: true,
|
|
120
123
|
idempotentHint: false
|
|
121
124
|
},
|
|
125
|
+
requireSombra: true,
|
|
122
126
|
zodSchema: DeleteIdentifiersSchema,
|
|
123
127
|
handler: async ({ partition, userId, identifiers }) => {
|
|
124
128
|
return createToolResult(true, {
|
|
@@ -157,6 +161,7 @@ function createPreferencesUpdateIdentifiersTool(clients) {
|
|
|
157
161
|
destructiveHint: false,
|
|
158
162
|
idempotentHint: true
|
|
159
163
|
},
|
|
164
|
+
requireSombra: true,
|
|
160
165
|
zodSchema: UpdateIdentifiersSchema,
|
|
161
166
|
handler: async ({ partition, userId, identifiers }) => {
|
|
162
167
|
return createToolResult(true, {
|
|
@@ -200,6 +205,7 @@ function createPreferencesUpsertTool(clients) {
|
|
|
200
205
|
destructiveHint: false,
|
|
201
206
|
idempotentHint: true
|
|
202
207
|
},
|
|
208
|
+
requireSombra: true,
|
|
203
209
|
zodSchema: UpsertPreferencesSchema,
|
|
204
210
|
handler: async ({ partition, records }) => {
|
|
205
211
|
const result = await rest.upsertPreferences({
|
|
@@ -241,4 +247,4 @@ const PREFERENCE_OAUTH_SCOPES = [ScopeName.ViewPrivacyCenter, ScopeName.ManagePr
|
|
|
241
247
|
//#endregion
|
|
242
248
|
export { UpsertPreferencesSchema as a, DeleteIdentifiersSchema as c, IdentifierSchema as d, QueryPreferencesSchema as f, UpsertPreferencesRecordSchema as i, DeletePreferencesSchema as l, getPreferenceTools as n, UpdateIdentifiersItemSchema as o, UpsertPreferencesPurposeSchema as r, UpdateIdentifiersSchema as s, PREFERENCE_OAUTH_SCOPES as t, AppendIdentifiersSchema as u };
|
|
243
249
|
|
|
244
|
-
//# sourceMappingURL=scopes-
|
|
250
|
+
//# sourceMappingURL=scopes-CuJmw6vE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopes-CuJmw6vE.mjs","names":[],"sources":["../src/tools/preferences_query.ts","../src/tools/preferences_append_identifiers.ts","../src/tools/preferences_delete.ts","../src/tools/preferences_delete_identifiers.ts","../src/tools/preferences_update_identifiers.ts","../src/tools/preferences_upsert.ts","../src/tools/index.ts","../src/scopes.ts"],"sourcesContent":["import { createListResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const IdentifierSchema = z.object({\n value: z.string().describe('Identifier value'),\n type: z.string().optional().describe('Identifier type (optional)'),\n});\nexport type IdentifierInput = z.infer<typeof IdentifierSchema>;\n\nexport const QueryPreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to query'),\n});\nexport type QueryPreferencesInput = z.infer<typeof QueryPreferencesSchema>;\n\nexport function createPreferencesQueryTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_query',\n description: 'Query consent preferences for multiple users by their identifiers',\n category: 'Preference Management',\n readOnly: true,\n annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },\n requireSombra: true,\n zodSchema: QueryPreferencesSchema,\n handler: async ({ partition, identifiers }) => {\n const result = await rest.queryPreferences({\n partition,\n identifiers: identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n });\n\n return createListResult(result, {\n totalCount: result.length,\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const AppendIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to append identifiers to'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to append'),\n});\nexport type AppendIdentifiersInput = z.infer<typeof AppendIdentifiersSchema>;\n\nexport function createPreferencesAppendIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_append_identifiers',\n description: 'Append additional identifiers to an existing user preference record',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Appends identifiers to the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },\n requireSombra: true,\n zodSchema: AppendIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.appendIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersAdded: identifiers.length,\n message: 'Identifiers appended successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const DeletePreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to delete'),\n});\nexport type DeletePreferencesInput = z.infer<typeof DeletePreferencesSchema>;\n\nexport function createPreferencesDeleteTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_delete',\n description: 'Delete consent preferences for specified users',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Deletes preference data for the identifiers',\n annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },\n requireSombra: true,\n zodSchema: DeletePreferencesSchema,\n handler: async ({ partition, identifiers }) => {\n const result = await rest.deletePreferences(\n partition,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n message: `Successfully deleted ${result.count} preference records`,\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const DeleteIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to delete identifiers from'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to delete'),\n});\nexport type DeleteIdentifiersInput = z.infer<typeof DeleteIdentifiersSchema>;\n\nexport function createPreferencesDeleteIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_delete_identifiers',\n description: 'Delete specific identifiers from a user preference record',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Deletes identifiers from the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },\n requireSombra: true,\n zodSchema: DeleteIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.deleteIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersDeleted: identifiers.length,\n message: 'Identifiers deleted successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const UpdateIdentifiersItemSchema = z.object({\n oldValue: z.string().describe('Old identifier value'),\n newValue: z.string().describe('New identifier value'),\n type: z.string().optional().describe('Identifier type (optional)'),\n});\nexport type UpdateIdentifiersItemInput = z.infer<typeof UpdateIdentifiersItemSchema>;\n\nexport const UpdateIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to update identifiers for'),\n identifiers: z\n .array(UpdateIdentifiersItemSchema)\n .describe('Array of identifier update objects with old and new values'),\n});\nexport type UpdateIdentifiersInput = z.infer<typeof UpdateIdentifiersSchema>;\n\nexport function createPreferencesUpdateIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_update_identifiers',\n description: 'Update existing identifiers for a user (e.g., when email changes)',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Updates identifiers for the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },\n requireSombra: true,\n zodSchema: UpdateIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.updateIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n oldValue: id.oldValue,\n newValue: id.newValue,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersUpdated: identifiers.length,\n message: 'Identifiers updated successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const UpsertPreferencesPurposeSchema = z.object({\n purpose: z.string().describe('Purpose slug'),\n enabled: z.boolean().describe('Whether consent is granted'),\n});\nexport type UpsertPreferencesPurposeInput = z.infer<typeof UpsertPreferencesPurposeSchema>;\n\nexport const UpsertPreferencesRecordSchema = z.object({\n identifier: z.string().describe('User identifier'),\n identifierType: z.string().optional().describe('Identifier type (optional)'),\n purposes: z.array(UpsertPreferencesPurposeSchema).describe('Array of purpose consent settings'),\n confirmed: z.boolean().optional().describe('Whether consent was explicitly confirmed'),\n});\nexport type UpsertPreferencesRecordInput = z.infer<typeof UpsertPreferencesRecordSchema>;\n\nexport const UpsertPreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n records: z.array(UpsertPreferencesRecordSchema).describe('Array of preference records to upsert'),\n});\nexport type UpsertPreferencesInput = z.infer<typeof UpsertPreferencesSchema>;\n\nexport function createPreferencesUpsertTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_upsert',\n description: 'Batch upsert consent preference records for multiple users',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Creates or updates preference records for users',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },\n requireSombra: true,\n zodSchema: UpsertPreferencesSchema,\n handler: async ({ partition, records }) => {\n const result = await rest.upsertPreferences({\n partition,\n records: records.map((record) => ({\n identifier: record.identifier,\n identifierType: record.identifierType,\n purposes: record.purposes.map((p) => ({\n purpose: p.purpose,\n enabled: p.enabled,\n })),\n confirmed: record.confirmed,\n })),\n });\n\n return createToolResult(true, {\n ...result,\n recordsProcessed: records.length,\n message: `Successfully upserted ${result.count} preference records`,\n });\n },\n });\n}\n","import type { ToolDefinition, ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { createPreferencesAppendIdentifiersTool } from './preferences_append_identifiers.js';\nimport { createPreferencesDeleteTool } from './preferences_delete.js';\nimport { createPreferencesDeleteIdentifiersTool } from './preferences_delete_identifiers.js';\nimport { createPreferencesQueryTool } from './preferences_query.js';\nimport { createPreferencesUpdateIdentifiersTool } from './preferences_update_identifiers.js';\nimport { createPreferencesUpsertTool } from './preferences_upsert.js';\n\nexport function getPreferenceTools(clients: ToolClients): ToolDefinition[] {\n return [\n createPreferencesQueryTool(clients),\n createPreferencesUpsertTool(clients),\n createPreferencesDeleteTool(clients),\n createPreferencesAppendIdentifiersTool(clients),\n createPreferencesUpdateIdentifiersTool(clients),\n createPreferencesDeleteIdentifiersTool(clients),\n ];\n}\n","import { ScopeName } from '@transcend-io/privacy-types';\n\n/** OAuth scopes required for Preference MCP tools (offline_access added by base). */\nexport const PREFERENCE_OAUTH_SCOPES = [\n ScopeName.ViewPrivacyCenter,\n ScopeName.ManagePrivacyCenter,\n] as const;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@transcend-io/mcp-server-preferences",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Transcend MCP Server — Preference Management tools.",
|
|
5
5
|
"homepage": "https://github.com/transcend-io/tools/tree/main/packages/mcp/mcp-server-preferences",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
34
34
|
"zod": "^4.3.6",
|
|
35
|
-
"@transcend-io/mcp-server-base": "0.
|
|
35
|
+
"@transcend-io/mcp-server-base": "0.8.0",
|
|
36
36
|
"@transcend-io/privacy-types": "5.9.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scopes-Ck0_EcNu.mjs","names":[],"sources":["../src/tools/preferences_query.ts","../src/tools/preferences_append_identifiers.ts","../src/tools/preferences_delete.ts","../src/tools/preferences_delete_identifiers.ts","../src/tools/preferences_update_identifiers.ts","../src/tools/preferences_upsert.ts","../src/tools/index.ts","../src/scopes.ts"],"sourcesContent":["import { createListResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const IdentifierSchema = z.object({\n value: z.string().describe('Identifier value'),\n type: z.string().optional().describe('Identifier type (optional)'),\n});\nexport type IdentifierInput = z.infer<typeof IdentifierSchema>;\n\nexport const QueryPreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to query'),\n});\nexport type QueryPreferencesInput = z.infer<typeof QueryPreferencesSchema>;\n\nexport function createPreferencesQueryTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_query',\n description: 'Query consent preferences for multiple users by their identifiers',\n category: 'Preference Management',\n readOnly: true,\n annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },\n zodSchema: QueryPreferencesSchema,\n handler: async ({ partition, identifiers }) => {\n const result = await rest.queryPreferences({\n partition,\n identifiers: identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n });\n\n return createListResult(result, {\n totalCount: result.length,\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const AppendIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to append identifiers to'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to append'),\n});\nexport type AppendIdentifiersInput = z.infer<typeof AppendIdentifiersSchema>;\n\nexport function createPreferencesAppendIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_append_identifiers',\n description: 'Append additional identifiers to an existing user preference record',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Appends identifiers to the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },\n zodSchema: AppendIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.appendIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersAdded: identifiers.length,\n message: 'Identifiers appended successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const DeletePreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to delete'),\n});\nexport type DeletePreferencesInput = z.infer<typeof DeletePreferencesSchema>;\n\nexport function createPreferencesDeleteTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_delete',\n description: 'Delete consent preferences for specified users',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Deletes preference data for the identifiers',\n annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },\n zodSchema: DeletePreferencesSchema,\n handler: async ({ partition, identifiers }) => {\n const result = await rest.deletePreferences(\n partition,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n message: `Successfully deleted ${result.count} preference records`,\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const DeleteIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to delete identifiers from'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to delete'),\n});\nexport type DeleteIdentifiersInput = z.infer<typeof DeleteIdentifiersSchema>;\n\nexport function createPreferencesDeleteIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_delete_identifiers',\n description: 'Delete specific identifiers from a user preference record',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Deletes identifiers from the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },\n zodSchema: DeleteIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.deleteIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersDeleted: identifiers.length,\n message: 'Identifiers deleted successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const UpdateIdentifiersItemSchema = z.object({\n oldValue: z.string().describe('Old identifier value'),\n newValue: z.string().describe('New identifier value'),\n type: z.string().optional().describe('Identifier type (optional)'),\n});\nexport type UpdateIdentifiersItemInput = z.infer<typeof UpdateIdentifiersItemSchema>;\n\nexport const UpdateIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to update identifiers for'),\n identifiers: z\n .array(UpdateIdentifiersItemSchema)\n .describe('Array of identifier update objects with old and new values'),\n});\nexport type UpdateIdentifiersInput = z.infer<typeof UpdateIdentifiersSchema>;\n\nexport function createPreferencesUpdateIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_update_identifiers',\n description: 'Update existing identifiers for a user (e.g., when email changes)',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Updates identifiers for the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },\n zodSchema: UpdateIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.updateIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n oldValue: id.oldValue,\n newValue: id.newValue,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersUpdated: identifiers.length,\n message: 'Identifiers updated successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const UpsertPreferencesPurposeSchema = z.object({\n purpose: z.string().describe('Purpose slug'),\n enabled: z.boolean().describe('Whether consent is granted'),\n});\nexport type UpsertPreferencesPurposeInput = z.infer<typeof UpsertPreferencesPurposeSchema>;\n\nexport const UpsertPreferencesRecordSchema = z.object({\n identifier: z.string().describe('User identifier'),\n identifierType: z.string().optional().describe('Identifier type (optional)'),\n purposes: z.array(UpsertPreferencesPurposeSchema).describe('Array of purpose consent settings'),\n confirmed: z.boolean().optional().describe('Whether consent was explicitly confirmed'),\n});\nexport type UpsertPreferencesRecordInput = z.infer<typeof UpsertPreferencesRecordSchema>;\n\nexport const UpsertPreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n records: z.array(UpsertPreferencesRecordSchema).describe('Array of preference records to upsert'),\n});\nexport type UpsertPreferencesInput = z.infer<typeof UpsertPreferencesSchema>;\n\nexport function createPreferencesUpsertTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_upsert',\n description: 'Batch upsert consent preference records for multiple users',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Creates or updates preference records for users',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },\n zodSchema: UpsertPreferencesSchema,\n handler: async ({ partition, records }) => {\n const result = await rest.upsertPreferences({\n partition,\n records: records.map((record) => ({\n identifier: record.identifier,\n identifierType: record.identifierType,\n purposes: record.purposes.map((p) => ({\n purpose: p.purpose,\n enabled: p.enabled,\n })),\n confirmed: record.confirmed,\n })),\n });\n\n return createToolResult(true, {\n ...result,\n recordsProcessed: records.length,\n message: `Successfully upserted ${result.count} preference records`,\n });\n },\n });\n}\n","import type { ToolDefinition, ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { createPreferencesAppendIdentifiersTool } from './preferences_append_identifiers.js';\nimport { createPreferencesDeleteTool } from './preferences_delete.js';\nimport { createPreferencesDeleteIdentifiersTool } from './preferences_delete_identifiers.js';\nimport { createPreferencesQueryTool } from './preferences_query.js';\nimport { createPreferencesUpdateIdentifiersTool } from './preferences_update_identifiers.js';\nimport { createPreferencesUpsertTool } from './preferences_upsert.js';\n\nexport function getPreferenceTools(clients: ToolClients): ToolDefinition[] {\n return [\n createPreferencesQueryTool(clients),\n createPreferencesUpsertTool(clients),\n createPreferencesDeleteTool(clients),\n createPreferencesAppendIdentifiersTool(clients),\n createPreferencesUpdateIdentifiersTool(clients),\n createPreferencesDeleteIdentifiersTool(clients),\n ];\n}\n","import { ScopeName } from '@transcend-io/privacy-types';\n\n/** OAuth scopes required for Preference MCP tools (offline_access added by base). */\nexport const PREFERENCE_OAUTH_SCOPES = [\n ScopeName.ViewPrivacyCenter,\n ScopeName.ManagePrivacyCenter,\n] as const;\n"],"mappings":"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"}
|