@segment/action-destinations 3.444.1-staging-c9adcc1d0.0 → 3.444.1-staging-c3ff91cb8.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/destinations/aws-kinesis/index.js +2 -1
- package/dist/destinations/aws-kinesis/index.js.map +1 -1
- package/dist/destinations/aws-kinesis/utils.d.ts +0 -6
- package/dist/destinations/aws-kinesis/utils.js +3 -36
- package/dist/destinations/aws-kinesis/utils.js.map +1 -1
- package/dist/destinations/memora/index.js +2 -4
- package/dist/destinations/memora/index.js.map +1 -1
- package/dist/destinations/memora/upsertProfile/generated-types.d.ts +8 -0
- package/dist/destinations/memora/upsertProfile/generated-types.js.map +1 -0
- package/dist/destinations/memora/upsertProfile/index.js +280 -0
- package/dist/destinations/memora/upsertProfile/index.js.map +1 -0
- package/dist/lib/AWS/sts.js +1 -1
- package/dist/lib/AWS/sts.js.map +1 -1
- package/package.json +2 -2
- package/dist/destinations/memora/profileSync/generated-types.d.ts +0 -8
- package/dist/destinations/memora/profileSync/generated-types.js.map +0 -1
- package/dist/destinations/memora/profileSync/index.js +0 -126
- package/dist/destinations/memora/profileSync/index.js.map +0 -1
- package/dist/destinations/memora/traitsSync/generated-types.d.ts +0 -9
- package/dist/destinations/memora/traitsSync/generated-types.js +0 -3
- package/dist/destinations/memora/traitsSync/generated-types.js.map +0 -1
- package/dist/destinations/memora/traitsSync/index.d.ts +0 -5
- package/dist/destinations/memora/traitsSync/index.js +0 -144
- package/dist/destinations/memora/traitsSync/index.js.map +0 -1
- /package/dist/destinations/memora/{profileSync → upsertProfile}/generated-types.js +0 -0
- /package/dist/destinations/memora/{profileSync → upsertProfile}/index.d.ts +0 -0
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const actions_core_1 = require("@segment/actions-core");
|
|
7
|
+
const sts_1 = require("../../lib/AWS/sts");
|
|
7
8
|
const utils_1 = require("./utils");
|
|
8
9
|
const actions_shared_1 = require("@segment/actions-shared");
|
|
9
10
|
const send_1 = __importDefault(require("./send"));
|
|
@@ -32,7 +33,7 @@ const destination = {
|
|
|
32
33
|
if (!(0, utils_1.validateIamRoleArnFormat)(iamRoleArn)) {
|
|
33
34
|
throw new actions_core_1.IntegrationError('The provided IAM Role ARN format is not valid', 'INVALID_IAM_ROLE_ARN_FORMAT', 400);
|
|
34
35
|
}
|
|
35
|
-
await (0,
|
|
36
|
+
await (0, sts_1.assumeRole)(iamRoleArn, iamExternalId, actions_shared_1.APP_AWS_REGION);
|
|
36
37
|
}
|
|
37
38
|
},
|
|
38
39
|
actions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/aws-kinesis/index.ts"],"names":[],"mappings":";;;;;AAEA,wDAAwD;AACxD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/aws-kinesis/index.ts"],"names":[],"mappings":";;;;;AAEA,wDAAwD;AACxD,2CAA8C;AAC9C,mCAAkD;AAClD,4DAAwD;AAExD,kDAAyB;AAEzB,MAAM,WAAW,GAAoC;IACnD,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,OAAO;IAEb,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE;YACN,UAAU,EAAE;gBACV,KAAK,EAAE,cAAc;gBACrB,WAAW,EAAE,gEAAgE;gBAC7E,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,iBAAiB;gBACxB,WAAW,EACT,kKAAkK;gBACpK,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;aACf;SACF;QACD,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC5C,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAA;YAC9C,IAAI,CAAC,IAAA,gCAAwB,EAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,+BAAgB,CAAC,+CAA+C,EAAE,6BAA6B,EAAE,GAAG,CAAC,CAAA;YACjH,CAAC;YAED,MAAM,IAAA,gBAAU,EAAC,UAAU,EAAE,aAAa,EAAE,+BAAc,CAAC,CAAA;QAC7D,CAAC;KACF;IAED,OAAO,EAAE;QACP,IAAI,EAAJ,cAAI;KACL;CACF,CAAA;AAED,kBAAe,WAAW,CAAA"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import type { Settings } from './generated-types';
|
|
2
2
|
import type { Payload } from './send/generated-types';
|
|
3
3
|
import { Logger, StatsContext } from '@segment/actions-core/destination-kit';
|
|
4
|
-
export type AWSCredentials = {
|
|
5
|
-
accessKeyId: string;
|
|
6
|
-
secretAccessKey: string;
|
|
7
|
-
sessionToken: string;
|
|
8
|
-
};
|
|
9
4
|
export declare const validateIamRoleArnFormat: (arn: string) => boolean;
|
|
10
5
|
export declare const send: (settings: Settings, payloads: Payload[], _statsContext: StatsContext | undefined, logger: Logger | undefined) => Promise<void>;
|
|
11
|
-
export declare const assumeRole: (roleArn: string, externalId: string, region: string) => Promise<AWSCredentials>;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.send = exports.validateIamRoleArnFormat = void 0;
|
|
4
4
|
const client_kinesis_1 = require("@aws-sdk/client-kinesis");
|
|
5
|
+
const sts_1 = require("../../lib/AWS/sts");
|
|
5
6
|
const actions_shared_1 = require("@segment/actions-shared");
|
|
6
7
|
const node_http_handler_1 = require("@smithy/node-http-handler");
|
|
7
|
-
const client_sts_1 = require("@aws-sdk/client-sts");
|
|
8
8
|
const actions_core_1 = require("@segment/actions-core");
|
|
9
|
-
const uuid_1 = require("@lukeed/uuid");
|
|
10
9
|
const KINESIS_COMMAND_TIMEOUT_MS = 5000;
|
|
11
10
|
const validateIamRoleArnFormat = (arn) => {
|
|
12
11
|
const iamRoleArnRegex = /^arn:aws:iam::\d{12}:role\/[A-Za-z0-9+=,.@_\-/]+$/;
|
|
@@ -25,7 +24,7 @@ const transformPayloads = (payloads) => {
|
|
|
25
24
|
}));
|
|
26
25
|
};
|
|
27
26
|
const createKinesisClient = async (iamRoleArn, iamExternalId, awsRegion) => {
|
|
28
|
-
const credentials = await (0,
|
|
27
|
+
const credentials = await (0, sts_1.assumeRole)(iamRoleArn, iamExternalId, actions_shared_1.APP_AWS_REGION);
|
|
29
28
|
return new client_kinesis_1.KinesisClient({
|
|
30
29
|
region: awsRegion,
|
|
31
30
|
credentials: credentials,
|
|
@@ -54,36 +53,4 @@ const send = async (settings, payloads, _statsContext, logger) => {
|
|
|
54
53
|
}
|
|
55
54
|
};
|
|
56
55
|
exports.send = send;
|
|
57
|
-
const assumeRole = async (roleArn, externalId, region) => {
|
|
58
|
-
const intermediaryARN = process.env.AMAZON_S3_ACTIONS_ROLE_ADDRESS;
|
|
59
|
-
const intermediaryExternalId = process.env.AMAZON_S3_ACTIONS_EXTERNAL_ID;
|
|
60
|
-
if (!intermediaryARN || !intermediaryExternalId) {
|
|
61
|
-
throw new actions_core_1.IntegrationError('Intermediary role ARN or external ID is not set in environment variables', actions_core_1.ErrorCodes.INVALID_AUTHENTICATION, 500);
|
|
62
|
-
}
|
|
63
|
-
const intermediaryCreds = await getSTSCredentials(intermediaryARN, intermediaryExternalId, region);
|
|
64
|
-
return getSTSCredentials(roleArn, externalId, region, intermediaryCreds);
|
|
65
|
-
};
|
|
66
|
-
exports.assumeRole = assumeRole;
|
|
67
|
-
const getSTSCredentials = async (roleId, externalId, region, credentials) => {
|
|
68
|
-
const options = { credentials, region: region };
|
|
69
|
-
const stsClient = new client_sts_1.STSClient(options);
|
|
70
|
-
const roleSessionName = (0, uuid_1.v4)();
|
|
71
|
-
const command = new client_sts_1.AssumeRoleCommand({
|
|
72
|
-
RoleArn: roleId,
|
|
73
|
-
RoleSessionName: roleSessionName,
|
|
74
|
-
ExternalId: externalId
|
|
75
|
-
});
|
|
76
|
-
const result = await stsClient.send(command);
|
|
77
|
-
if (!result.Credentials ||
|
|
78
|
-
!result.Credentials.AccessKeyId ||
|
|
79
|
-
!result.Credentials.SecretAccessKey ||
|
|
80
|
-
!result.Credentials.SessionToken) {
|
|
81
|
-
throw new actions_core_1.IntegrationError('Failed to assume role', actions_core_1.ErrorCodes.INVALID_AUTHENTICATION, 403);
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
accessKeyId: result.Credentials.AccessKeyId,
|
|
85
|
-
secretAccessKey: result.Credentials.SecretAccessKey,
|
|
86
|
-
sessionToken: result.Credentials.SessionToken
|
|
87
|
-
};
|
|
88
|
-
};
|
|
89
56
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/destinations/aws-kinesis/utils.ts"],"names":[],"mappings":";;;AAGA,4DAAkG;AAClG,4DAAwD;AACxD,iEAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/destinations/aws-kinesis/utils.ts"],"names":[],"mappings":";;;AAGA,4DAAkG;AAClG,2CAA8C;AAC9C,4DAAwD;AACxD,iEAA2D;AAC3D,wDAAwD;AAExD,MAAM,0BAA0B,GAAG,IAAI,CAAA;AAEhC,MAAM,wBAAwB,GAAG,CAAC,GAAW,EAAW,EAAE;IAC/D,MAAM,eAAe,GAAG,mDAAmD,CAAA;IAC3E,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAClC,CAAC,CAAA;AAHY,QAAA,wBAAwB,4BAGpC;AAED,MAAM,oBAAoB,GAAG,CAAC,YAAoB,EAAQ,EAAE;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,+BAAgB,CACxB,mEAAmE,EACnE,uBAAuB,EACvB,GAAG,CACJ,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,QAAmB,EAA4B,EAAE;IAC1E,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,KAAK,EAC/B,UAAkB,EAClB,aAAqB,EACrB,SAAiB,EACO,EAAE;IAC1B,MAAM,WAAW,GAAG,MAAM,IAAA,gBAAU,EAAC,UAAU,EAAE,aAAa,EAAE,+BAAc,CAAC,CAAA;IAC/E,OAAO,IAAI,8BAAa,CAAC;QACvB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,WAAW;QACxB,cAAc,EAAE,IAAI,mCAAe,CAAC;YAClC,cAAc,EAAE,0BAA0B;SAC3C,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA;AAEM,MAAM,IAAI,GAAG,KAAK,EACvB,QAAkB,EAClB,QAAmB,EACnB,aAAuC,EACvC,MAA0B,EACX,EAAE;IACjB,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAA;IAC9C,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC3D,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAClC,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,CAAA;QAC9E,MAAM,OAAO,GAAG,IAAI,kCAAiB,CAAC;YACpC,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAA;QACvD,MAAM,KAAK,CAAA;IACb,CAAC;AAMH,CAAC,CAAA;AA7BY,QAAA,IAAI,QA6BhB"}
|
|
@@ -3,8 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const traitsSync_1 = __importDefault(require("./traitsSync"));
|
|
6
|
+
const upsertProfile_1 = __importDefault(require("./upsertProfile"));
|
|
8
7
|
const API_VERSION = 'v1';
|
|
9
8
|
const destination = {
|
|
10
9
|
name: 'Memora',
|
|
@@ -69,8 +68,7 @@ const destination = {
|
|
|
69
68
|
return true;
|
|
70
69
|
},
|
|
71
70
|
actions: {
|
|
72
|
-
|
|
73
|
-
traitsSync: traitsSync_1.default
|
|
71
|
+
upsertProfile: upsertProfile_1.default
|
|
74
72
|
}
|
|
75
73
|
};
|
|
76
74
|
exports.default = destination;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/memora/index.ts"],"names":[],"mappings":";;;;;AAGA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destinations/memora/index.ts"],"names":[],"mappings":";;;;;AAGA,oEAA2C;AAE3C,MAAM,WAAW,GAAG,IAAI,CAAA;AAExB,MAAM,WAAW,GAAoC;IACnD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,OAAO;IAEb,cAAc,EAAE;QACd,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE;YACN,GAAG,EAAE;gBACH,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,8BAA8B;gBAC3C,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,wBAAwB;aAClC;YACD,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY;gBACnB,WAAW,EACT,+GAA+G;gBACjH,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,8EAA8E;gBAC3F,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;aACf;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,mBAAmB;gBAC1B,WAAW,EAAE,4DAA4D;gBACzE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAElD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAE9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,IAAI,WAAW,aAAa,QAAQ,CAAC,SAAS,gBAAgB,EAAE;oBACvG,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,aAAa,EAAE,UAAU,QAAQ,CAAC,OAAO,EAAE;wBAC3C,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;qBAChF;oBACD,IAAI,EAAE;wBACJ,QAAQ,EAAE,EAAE;qBACb;iBACF,CAAC,CAAA;gBAGF,OAAO,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAA;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAEf,MAAM,SAAS,GAAG,KAA0C,CAAA;gBAC5D,IAAI,SAAS,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;oBACvC,OAAO,IAAI,CAAA;gBACb,CAAC;gBAED,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;KACF;IAED,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAIvE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,EAAE;QACP,aAAa,EAAb,uBAAa;KACd;CACF,CAAA;AAED,kBAAe,WAAW,CAAA;AAE1B,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/memora/upsertProfile/generated-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const actions_core_1 = require("@segment/actions-core");
|
|
4
|
+
const API_VERSION = 'v1';
|
|
5
|
+
const action = {
|
|
6
|
+
title: 'Upsert Profile',
|
|
7
|
+
description: 'Create or update Memora profiles using the bulk upsert API. If a profile already exists, its traits are merged (new keys added, existing keys overwritten). Supports batching up to 1000 profiles.',
|
|
8
|
+
defaultSubscription: 'type = "identify"',
|
|
9
|
+
fields: {
|
|
10
|
+
contact: {
|
|
11
|
+
label: 'Contact Information',
|
|
12
|
+
description: 'Contact information object containing email, firstName, lastName, and phone fields that will be placed in the Contact trait group in the Memora API call.',
|
|
13
|
+
type: 'object',
|
|
14
|
+
dynamic: true,
|
|
15
|
+
additionalProperties: true,
|
|
16
|
+
defaultObjectUI: 'keyvalue',
|
|
17
|
+
default: {
|
|
18
|
+
email: { '@path': '$.properties.email' },
|
|
19
|
+
firstName: { '@path': '$.traits.first_name' },
|
|
20
|
+
lastName: { '@path': '$.traits.last_name' },
|
|
21
|
+
phone: { '@path': '$.traits.phone' }
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
traitGroups: {
|
|
25
|
+
label: 'Trait Groups',
|
|
26
|
+
description: 'Additional trait groups to merge into the Memora profile. Keys should match trait group names and values should be objects of traits for that group.',
|
|
27
|
+
type: 'object',
|
|
28
|
+
required: false,
|
|
29
|
+
dynamic: true,
|
|
30
|
+
additionalProperties: true,
|
|
31
|
+
defaultObjectUI: 'keyvalue'
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
dynamicFields: {
|
|
35
|
+
contact: {
|
|
36
|
+
__keys__: async (request, { settings }) => {
|
|
37
|
+
return fetchTraitFields(request, settings, 'Contact');
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
traitGroups: {
|
|
41
|
+
__keys__: async (request, { settings }) => {
|
|
42
|
+
return fetchTraitGroups(request, settings);
|
|
43
|
+
},
|
|
44
|
+
__values__: async (request, { settings, dynamicFieldContext }) => {
|
|
45
|
+
const traitGroup = dynamicFieldContext?.selectedKey;
|
|
46
|
+
if (!traitGroup) {
|
|
47
|
+
return { choices: [] };
|
|
48
|
+
}
|
|
49
|
+
return fetchTraitFields(request, settings, traitGroup);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
perform: async (request, { payload, settings }) => {
|
|
54
|
+
const serviceId = settings.serviceId;
|
|
55
|
+
if (!serviceId) {
|
|
56
|
+
throw new actions_core_1.IntegrationError('Service ID is required', 'MISSING_REQUIRED_FIELD', 400);
|
|
57
|
+
}
|
|
58
|
+
const traitGroups = buildTraitGroups(payload);
|
|
59
|
+
if (Object.keys(traitGroups).length === 0) {
|
|
60
|
+
throw new actions_core_1.IntegrationError('Profile must contain at least one trait group or contact field', 'EMPTY_PROFILE', 400);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const baseUrl = normalizeBaseUrl(settings.url);
|
|
64
|
+
const response = await request(`${baseUrl}/${API_VERSION}/Services/${serviceId}/Profiles/Bulk`, {
|
|
65
|
+
method: 'PUT',
|
|
66
|
+
headers: {
|
|
67
|
+
'Content-Type': 'application/json',
|
|
68
|
+
Authorization: `Bearer ${settings.api_key}`,
|
|
69
|
+
...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
|
|
70
|
+
},
|
|
71
|
+
json: {
|
|
72
|
+
profiles: [
|
|
73
|
+
{
|
|
74
|
+
traits: traitGroups
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
if (response.status !== 202) {
|
|
80
|
+
throw new actions_core_1.IntegrationError(`Unexpected response status: ${response.status}`, 'API_ERROR', response.status);
|
|
81
|
+
}
|
|
82
|
+
return response;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
if (error instanceof actions_core_1.IntegrationError) {
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
handleMemoraApiError(error);
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
performBatch: async (request, { payload: payloads, settings }) => {
|
|
92
|
+
const serviceId = settings.serviceId;
|
|
93
|
+
if (!serviceId) {
|
|
94
|
+
throw new actions_core_1.IntegrationError('Service ID is required', 'MISSING_REQUIRED_FIELD', 400);
|
|
95
|
+
}
|
|
96
|
+
if (!payloads || payloads.length === 0) {
|
|
97
|
+
throw new actions_core_1.IntegrationError('No profiles provided for batch sync', 'EMPTY_BATCH', 400);
|
|
98
|
+
}
|
|
99
|
+
if (payloads.length > 1000) {
|
|
100
|
+
throw new actions_core_1.IntegrationError('Batch size cannot exceed 1000 profiles', 'BATCH_SIZE_EXCEEDED', 400);
|
|
101
|
+
}
|
|
102
|
+
const profiles = payloads.map((payload, index) => {
|
|
103
|
+
const traitGroups = buildTraitGroups(payload);
|
|
104
|
+
if (Object.keys(traitGroups).length === 0) {
|
|
105
|
+
throw new actions_core_1.IntegrationError(`Profile at index ${index} must contain at least one trait group or contact field`, 'EMPTY_PROFILE', 400);
|
|
106
|
+
}
|
|
107
|
+
return { traits: traitGroups };
|
|
108
|
+
});
|
|
109
|
+
try {
|
|
110
|
+
const baseUrl = normalizeBaseUrl(settings.url);
|
|
111
|
+
const response = await request(`${baseUrl}/${API_VERSION}/Services/${serviceId}/Profiles/Bulk`, {
|
|
112
|
+
method: 'PUT',
|
|
113
|
+
headers: {
|
|
114
|
+
'Content-Type': 'application/json',
|
|
115
|
+
Authorization: `Bearer ${settings.api_key}`,
|
|
116
|
+
...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
|
|
117
|
+
},
|
|
118
|
+
json: {
|
|
119
|
+
profiles
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
if (response.status !== 202) {
|
|
123
|
+
throw new actions_core_1.IntegrationError(`Unexpected response status: ${response.status}`, 'API_ERROR', response.status);
|
|
124
|
+
}
|
|
125
|
+
return response;
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (error instanceof actions_core_1.IntegrationError) {
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
handleMemoraApiError(error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
function buildTraitGroups(payload) {
|
|
136
|
+
const traitGroups = {};
|
|
137
|
+
if (payload.traitGroups && typeof payload.traitGroups === 'object' && !Array.isArray(payload.traitGroups)) {
|
|
138
|
+
for (const [groupName, groupValue] of Object.entries(payload.traitGroups)) {
|
|
139
|
+
if (!groupValue || typeof groupValue !== 'object' || Array.isArray(groupValue)) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const cleanedGroup = cleanObject(groupValue);
|
|
143
|
+
if (Object.keys(cleanedGroup).length > 0) {
|
|
144
|
+
traitGroups[groupName] = cleanedGroup;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (payload.contact && typeof payload.contact === 'object') {
|
|
149
|
+
const contact = cleanObject(payload.contact);
|
|
150
|
+
if (Object.keys(contact).length > 0) {
|
|
151
|
+
traitGroups.Contact = {
|
|
152
|
+
...(traitGroups.Contact ?? {}),
|
|
153
|
+
...contact
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return traitGroups;
|
|
158
|
+
}
|
|
159
|
+
function cleanObject(input) {
|
|
160
|
+
if (!input || typeof input !== 'object') {
|
|
161
|
+
return {};
|
|
162
|
+
}
|
|
163
|
+
const value = input;
|
|
164
|
+
const cleaned = {};
|
|
165
|
+
for (const [key, fieldValue] of Object.entries(value)) {
|
|
166
|
+
if (fieldValue === undefined || fieldValue === null) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (Array.isArray(fieldValue)) {
|
|
170
|
+
if (fieldValue.length > 0) {
|
|
171
|
+
cleaned[key] = fieldValue;
|
|
172
|
+
}
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (typeof fieldValue === 'object') {
|
|
176
|
+
const nested = cleanObject(fieldValue);
|
|
177
|
+
if (Object.keys(nested).length > 0) {
|
|
178
|
+
cleaned[key] = nested;
|
|
179
|
+
}
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
cleaned[key] = fieldValue;
|
|
183
|
+
}
|
|
184
|
+
return cleaned;
|
|
185
|
+
}
|
|
186
|
+
function handleMemoraApiError(error) {
|
|
187
|
+
const httpError = error;
|
|
188
|
+
if (httpError.response) {
|
|
189
|
+
const status = httpError.response.status;
|
|
190
|
+
const data = httpError.response.data;
|
|
191
|
+
switch (status) {
|
|
192
|
+
case 400:
|
|
193
|
+
throw new actions_core_1.IntegrationError(data?.message || 'Bad Request - Invalid request data', 'INVALID_REQUEST_DATA', 400);
|
|
194
|
+
case 404:
|
|
195
|
+
throw new actions_core_1.IntegrationError(data?.message || 'Profile or service not found', 'SERVICE_NOT_FOUND', 404);
|
|
196
|
+
case 429: {
|
|
197
|
+
const retryAfter = httpError.response.headers?.['retry-after'];
|
|
198
|
+
const message = retryAfter ? `Rate limit exceeded. Retry after ${retryAfter} seconds` : 'Rate limit exceeded';
|
|
199
|
+
throw new actions_core_1.RetryableError(data?.message || message);
|
|
200
|
+
}
|
|
201
|
+
case 500:
|
|
202
|
+
throw new actions_core_1.RetryableError(data?.message || 'Internal server error');
|
|
203
|
+
case 503:
|
|
204
|
+
throw new actions_core_1.RetryableError(data?.message || 'Service unavailable');
|
|
205
|
+
default:
|
|
206
|
+
throw new actions_core_1.IntegrationError(data?.message || `HTTP ${status} error`, 'API_ERROR', status);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
throw new actions_core_1.RetryableError(httpError.message || 'Network error occurred');
|
|
210
|
+
}
|
|
211
|
+
async function fetchTraitFields(request, settings, traitGroup) {
|
|
212
|
+
try {
|
|
213
|
+
const baseUrl = normalizeBaseUrl(settings.url);
|
|
214
|
+
const response = await request(`${baseUrl}/${API_VERSION}/Services/${settings.serviceId}/Profiles/traits-schema?traitGroups=${traitGroup}`, {
|
|
215
|
+
method: 'GET',
|
|
216
|
+
headers: {
|
|
217
|
+
Authorization: `Bearer ${settings.api_key}`,
|
|
218
|
+
...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
|
|
219
|
+
},
|
|
220
|
+
skipResponseCloning: true
|
|
221
|
+
});
|
|
222
|
+
const traits = response?.data?.traits || [];
|
|
223
|
+
const choices = traits.map((trait) => ({
|
|
224
|
+
label: trait.name || trait.key || '',
|
|
225
|
+
value: trait.key || trait.name || ''
|
|
226
|
+
}));
|
|
227
|
+
return {
|
|
228
|
+
choices,
|
|
229
|
+
nextPage: response?.data?.meta?.nextPageToken
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
return {
|
|
234
|
+
choices: [],
|
|
235
|
+
error: {
|
|
236
|
+
message: 'Unable to fetch trait fields. You can still manually enter trait names.',
|
|
237
|
+
code: 'FETCH_ERROR'
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async function fetchTraitGroups(request, settings) {
|
|
243
|
+
try {
|
|
244
|
+
const baseUrl = normalizeBaseUrl(settings.url);
|
|
245
|
+
const response = await request(`${baseUrl}/${API_VERSION}/Services/${settings.serviceId}/trait-groups`, {
|
|
246
|
+
method: 'GET',
|
|
247
|
+
headers: {
|
|
248
|
+
Authorization: `Bearer ${settings.api_key}`,
|
|
249
|
+
...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
|
|
250
|
+
},
|
|
251
|
+
skipResponseCloning: true
|
|
252
|
+
});
|
|
253
|
+
const traitGroups = response?.data?.traitGroups || [];
|
|
254
|
+
const choices = traitGroups.map((group) => ({
|
|
255
|
+
label: group.name || '',
|
|
256
|
+
value: group.name || ''
|
|
257
|
+
}));
|
|
258
|
+
return {
|
|
259
|
+
choices,
|
|
260
|
+
nextPage: response?.data?.meta?.nextPageToken
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
return {
|
|
265
|
+
choices: [
|
|
266
|
+
{ label: 'Contact', value: 'Contact' },
|
|
267
|
+
{ label: 'Custom', value: 'Custom' }
|
|
268
|
+
],
|
|
269
|
+
error: {
|
|
270
|
+
message: 'Unable to fetch trait groups. Showing default options.',
|
|
271
|
+
code: 'FETCH_ERROR'
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
exports.default = action;
|
|
277
|
+
function normalizeBaseUrl(url) {
|
|
278
|
+
return url.replace(/\/+$/, '');
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/memora/upsertProfile/index.ts"],"names":[],"mappings":";;AAGA,wDAAwE;AAExE,MAAM,WAAW,GAAG,IAAI,CAAA;AAExB,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,gBAAgB;IACvB,WAAW,EACT,oMAAoM;IACtM,mBAAmB,EAAE,mBAAmB;IACxC,MAAM,EAAE;QACN,OAAO,EAAE;YACP,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EACT,2JAA2J;YAC7J,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,UAAU;YAC3B,OAAO,EAAE;gBACP,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;gBACxC,SAAS,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE;gBAC7C,QAAQ,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;gBAC3C,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;aACrC;SACF;QACD,WAAW,EAAE;YACX,KAAK,EAAE,cAAc;YACrB,WAAW,EACT,sJAAsJ;YACxJ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,IAAI;YACb,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,UAAU;SAC5B;KACF;IACD,aAAa,EAAE;QACb,OAAO,EAAE;YACP,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACxC,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;YACvD,CAAC;SACF;QACD,WAAW,EAAE;YACX,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACxC,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YAC5C,CAAC;YACD,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,EAAE;gBAC/D,MAAM,UAAU,GAAG,mBAAmB,EAAE,WAAW,CAAA;gBACnD,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;gBACxB,CAAC;gBACD,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;YACxD,CAAC;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAEhD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,+BAAgB,CAAC,wBAAwB,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAA;QACrF,CAAC;QAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,+BAAgB,CAAC,gEAAgE,EAAE,eAAe,EAAE,GAAG,CAAC,CAAA;QACpH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;YAE9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,IAAI,WAAW,aAAa,SAAS,gBAAgB,EAAE;gBAC9F,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,QAAQ,CAAC,OAAO,EAAE;oBAC3C,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;iBAChF;gBACD,IAAI,EAAE;oBACJ,QAAQ,EAAE;wBACR;4BACE,MAAM,EAAE,WAAW;yBACpB;qBACF;iBACF;aACF,CAAC,CAAA;YAGF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,+BAAgB,CAAC,+BAA+B,QAAQ,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC5G,CAAC;YAED,OAAO,QAAQ,CAAA;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAI,KAAK,YAAY,+BAAgB,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAA;YACb,CAAC;YACD,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/D,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,+BAAgB,CAAC,wBAAwB,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAA;QACrF,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,+BAAgB,CAAC,qCAAqC,EAAE,aAAa,EAAE,GAAG,CAAC,CAAA;QACvF,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,+BAAgB,CAAC,wCAAwC,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAA;QAClG,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAC/C,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,+BAAgB,CACxB,oBAAoB,KAAK,yDAAyD,EAClF,eAAe,EACf,GAAG,CACJ,CAAA;YACH,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;YAE9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,IAAI,WAAW,aAAa,SAAS,gBAAgB,EAAE;gBAC9F,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,QAAQ,CAAC,OAAO,EAAE;oBAC3C,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;iBAChF;gBACD,IAAI,EAAE;oBACJ,QAAQ;iBACT;aACF,CAAC,CAAA;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,+BAAgB,CAAC,+BAA+B,QAAQ,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC5G,CAAC;YAED,OAAO,QAAQ,CAAA;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,+BAAgB,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAA;YACb,CAAC;YACD,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;CACF,CAAA;AAGD,SAAS,gBAAgB,CAAC,OAAgB;IACxC,MAAM,WAAW,GAA4C,EAAE,CAAA;IAE/D,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1G,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/E,SAAQ;YACV,CAAC;YAED,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;YAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,WAAW,CAAC,SAAS,CAAC,GAAG,YAAY,CAAA;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,WAAW,CAAC,OAAO,GAAG;gBACpB,GAAG,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC9B,GAAG,OAAO;aACX,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,KAAK,GAAG,KAAgC,CAAA;IAC9C,MAAM,OAAO,GAA4B,EAAE,CAAA;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACpD,SAAQ;QACV,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA;YAC3B,CAAC;YACD,SAAQ;QACV,CAAC;QAED,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;YACvB,CAAC;YACD,SAAQ;QACV,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA;IAC3B,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAGD,SAAS,oBAAoB,CAAC,KAAc;IAC1C,MAAM,SAAS,GAAG,KAGjB,CAAA;IAED,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAA;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAA;QAEpC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,GAAG;gBACN,MAAM,IAAI,+BAAgB,CAAC,IAAI,EAAE,OAAO,IAAI,oCAAoC,EAAE,sBAAsB,EAAE,GAAG,CAAC,CAAA;YAChH,KAAK,GAAG;gBACN,MAAM,IAAI,+BAAgB,CAAC,IAAI,EAAE,OAAO,IAAI,8BAA8B,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAA;YACvG,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,CAAA;gBAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,oCAAoC,UAAU,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAA;gBAC7G,MAAM,IAAI,6BAAc,CAAC,IAAI,EAAE,OAAO,IAAI,OAAO,CAAC,CAAA;YACpD,CAAC;YACD,KAAK,GAAG;gBACN,MAAM,IAAI,6BAAc,CAAC,IAAI,EAAE,OAAO,IAAI,uBAAuB,CAAC,CAAA;YACpE,KAAK,GAAG;gBACN,MAAM,IAAI,6BAAc,CAAC,IAAI,EAAE,OAAO,IAAI,qBAAqB,CAAC,CAAA;YAClE;gBACE,MAAM,IAAI,+BAAgB,CAAC,IAAI,EAAE,OAAO,IAAI,QAAQ,MAAM,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAGD,MAAM,IAAI,6BAAc,CAAC,SAAS,CAAC,OAAO,IAAI,wBAAwB,CAAC,CAAA;AACzE,CAAC;AAYD,KAAK,UAAU,gBAAgB,CAC7B,OAA+E,EAC/E,QAAkB,EAClB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAI9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,GAAG,OAAO,IAAI,WAAW,aAAa,QAAQ,CAAC,SAAS,uCAAuC,UAAU,EAAE,EAC3G;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,QAAQ,CAAC,OAAO,EAAE;gBAC3C,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;aAChF;YACD,mBAAmB,EAAE,IAAI;SAC1B,CACF,CAAA;QAED,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;YACjD,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE;YACpC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE;SACrC,CAAC,CAAC,CAAA;QAEH,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa;SAC9C,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,OAAO;YACL,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,OAAO,EAAE,yEAAyE;gBAClF,IAAI,EAAE,aAAa;aACpB;SACF,CAAA;IACH,CAAC;AACH,CAAC;AAGD,KAAK,UAAU,gBAAgB,CAC7B,OAA+E,EAC/E,QAAkB;IAElB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAG9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,GAAG,OAAO,IAAI,WAAW,aAAa,QAAQ,CAAC,SAAS,eAAe,EACvE;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,QAAQ,CAAC,OAAO,EAAE;gBAC3C,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,oBAAoB,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;aAChF;YACD,mBAAmB,EAAE,IAAI;SAC1B,CACF,CAAA;QAED,MAAM,WAAW,GAAG,QAAQ,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;QACrD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;YACtD,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACvB,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;SACxB,CAAC,CAAC,CAAA;QAEH,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa;SAC9C,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACtC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;aACrC;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,wDAAwD;gBACjE,IAAI,EAAE,aAAa;aACpB;SACF,CAAA;IACH,CAAC;AACH,CAAC;AAED,kBAAe,MAAM,CAAA;AAErB,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAChC,CAAC"}
|
package/dist/lib/AWS/sts.js
CHANGED
|
@@ -61,7 +61,7 @@ const assumeRole = async (roleArn, externalId, region) => {
|
|
|
61
61
|
const intermediaryARN = process.env.AMAZON_S3_ACTIONS_ROLE_ADDRESS;
|
|
62
62
|
const intermediaryExternalId = process.env.AMAZON_S3_ACTIONS_EXTERNAL_ID;
|
|
63
63
|
if (!intermediaryARN || !intermediaryExternalId) {
|
|
64
|
-
throw new actions_core_1.IntegrationError(
|
|
64
|
+
throw new actions_core_1.IntegrationError(`Intermediary role ARN or external ID is not set in environment variables ${intermediaryARN}, ${intermediaryExternalId}`, actions_core_1.ErrorCodes.INVALID_AUTHENTICATION, 500);
|
|
65
65
|
}
|
|
66
66
|
const intermediaryCreds = await getSTSCredentials(intermediaryARN, intermediaryExternalId, region);
|
|
67
67
|
return getSTSCredentials(roleArn, externalId, region, intermediaryCreds);
|
package/dist/lib/AWS/sts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sts.js","sourceRoot":"","sources":["../../../src/lib/AWS/sts.ts"],"names":[],"mappings":";;;AA+GA,4DAqBC;AApID,2BAAiC;AAEjC,oDAAkE;AAClE,wDAAoE;AACpE,uCAA2C;AA4C3C,MAAM,mBAAmB,GAAwB;IAC/C,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;CACxE,CAAA;AAED,SAAS,QAAQ;IACf,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,IAAI,qDAAqD,CAAA;IACrG,OAAO,IAAA,iBAAY,EAAC,aAAa,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC;AAGD,KAAK,UAAU,uBAAuB,CAAC,OAAsB,EAAE,QAAgB;IAC7E,MAAM,cAAc,GAAG,MAAM,OAAO,CAClC,8FAA8F,EAC9F;QACE,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,QAAQ,EAAE;SACpC;KACF,CACF,CAAA;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,4BAA4B,CAAC,CAAA;IAE1F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAsB,EACtB,UAAkB,EAClB,KAAa;IAEb,MAAM,WAAW,GAAG,MAAM,OAAO,CAC/B,uCAAuC;QACrC,kCAAkC;QAClC,uBAAuB;QACvB,2CAA2C;QAC3C,YAAY,UAAU,EAAE;QACxB,qBAAqB,KAAK,EAAE;QAC5B,qBAAqB,EACvB;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,YAAY,EAAE,kCAAkC;YAChD,MAAM,EAAE,kBAAkB;SAC3B;KACF,CACF,CAAA;IAED,OAAO;QACL,WAAW,EACT,WAAW,CAAC,IAAI,CAAC,iCAAiC,CAAC,+BAA+B,CAAC,WAAW,CAAC,WAAW;QAC5G,eAAe,EACb,WAAW,CAAC,IAAI,CAAC,iCAAiC,CAAC,+BAA+B,CAAC,WAAW,CAAC,eAAe;QAChH,YAAY,EACV,WAAW,CAAC,IAAI,CAAC,iCAAiC,CAAC,+BAA+B,CAAC,WAAW,CAAC,YAAY;KAC9G,CAAA;AACH,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAAC,OAAsB;IAGnE,IAAI,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7C,OAAO,mBAAmB,CAAC,WAAW,CAAA;IACxC,CAAC;IAGD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAGxB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAEjG,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;IAI3E,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAA;IAClD,mBAAmB,CAAC,WAAW,GAAG,WAAW,CAAA;IAE7C,OAAO,WAAW,CAAA;AACpB,CAAC;AAEM,MAAM,UAAU,GAAG,KAAK,EAAE,OAAe,EAAE,UAAkB,EAAE,MAAc,EAA2B,EAAE;IAC/G,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"sts.js","sourceRoot":"","sources":["../../../src/lib/AWS/sts.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@segment/action-destinations",
|
|
3
3
|
"description": "Destination Actions engine and definitions.",
|
|
4
|
-
"version": "3.444.1-staging-
|
|
4
|
+
"version": "3.444.1-staging-c3ff91cb8.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/segmentio/action-destinations",
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"__tests__/__helpers__/"
|
|
93
93
|
]
|
|
94
94
|
},
|
|
95
|
-
"gitHead": "
|
|
95
|
+
"gitHead": "81b1facd1b05a6b1664329a353d57cbee7bcfa2f"
|
|
96
96
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/memora/profileSync/generated-types.ts"],"names":[],"mappings":""}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const actions_core_1 = require("@segment/actions-core");
|
|
4
|
-
const API_VERSION = 'v1';
|
|
5
|
-
const action = {
|
|
6
|
-
title: 'Profile Sync',
|
|
7
|
-
description: 'Create a new profile and optionally set initial traits. Synchronously resolves identity and either creates a new profile ID or retrieves the associated canonical profile ID.',
|
|
8
|
-
defaultSubscription: 'type = "identify"',
|
|
9
|
-
fields: {
|
|
10
|
-
contact: {
|
|
11
|
-
label: 'Contact Information',
|
|
12
|
-
description: 'Contact information object containing email, firstName, lastName, and phone fields that will be placed in traits.contact in the Memora API call.',
|
|
13
|
-
type: 'object',
|
|
14
|
-
properties: {
|
|
15
|
-
email: {
|
|
16
|
-
label: 'Email',
|
|
17
|
-
description: 'User email address',
|
|
18
|
-
type: 'string',
|
|
19
|
-
format: 'email'
|
|
20
|
-
},
|
|
21
|
-
firstName: {
|
|
22
|
-
label: 'First Name',
|
|
23
|
-
description: 'User first name',
|
|
24
|
-
type: 'string'
|
|
25
|
-
},
|
|
26
|
-
lastName: {
|
|
27
|
-
label: 'Last Name',
|
|
28
|
-
description: 'User last name',
|
|
29
|
-
type: 'string'
|
|
30
|
-
},
|
|
31
|
-
phone: {
|
|
32
|
-
label: 'Phone',
|
|
33
|
-
description: 'User phone number',
|
|
34
|
-
type: 'string'
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
default: {
|
|
38
|
-
email: { '@path': '$.properties.email' },
|
|
39
|
-
firstName: { '@path': '$.traits.first_name' },
|
|
40
|
-
lastName: { '@path': '$.traits.last_name' },
|
|
41
|
-
phone: {
|
|
42
|
-
'@path': '$.traits.phone'
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
perform: async (request, { payload, settings }) => {
|
|
48
|
-
const serviceId = settings.serviceId;
|
|
49
|
-
if (!serviceId) {
|
|
50
|
-
throw new actions_core_1.IntegrationError('Service ID is required', 'MISSING_REQUIRED_FIELD', 400);
|
|
51
|
-
}
|
|
52
|
-
const traitsPayload = buildMemoraProfilePayload(payload);
|
|
53
|
-
if (!traitsPayload.traits || Object.keys(traitsPayload.traits).length === 0) {
|
|
54
|
-
throw new actions_core_1.IntegrationError('Profile must contain at least one trait', 'EMPTY_PROFILE', 400);
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
const baseUrl = normalizeBaseUrl(settings.url);
|
|
58
|
-
const response = await request(`${baseUrl}/${API_VERSION}/Services/${serviceId}/Profiles`, {
|
|
59
|
-
method: 'POST',
|
|
60
|
-
headers: {
|
|
61
|
-
'Content-Type': 'application/json',
|
|
62
|
-
Authorization: `Bearer ${settings.api_key}`,
|
|
63
|
-
...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
|
|
64
|
-
},
|
|
65
|
-
json: traitsPayload
|
|
66
|
-
});
|
|
67
|
-
if (response.status !== 201) {
|
|
68
|
-
throw new actions_core_1.IntegrationError(`Unexpected response status: ${response.status}`, 'API_ERROR', response.status);
|
|
69
|
-
}
|
|
70
|
-
return response;
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
if (error instanceof actions_core_1.IntegrationError) {
|
|
74
|
-
throw error;
|
|
75
|
-
}
|
|
76
|
-
handleMemoryApiError(error);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
function buildMemoraProfilePayload(payload) {
|
|
81
|
-
const traits = {};
|
|
82
|
-
if (payload.contact && typeof payload.contact === 'object') {
|
|
83
|
-
const contact = {};
|
|
84
|
-
const contactData = payload.contact;
|
|
85
|
-
if (contactData.email)
|
|
86
|
-
contact.email = contactData.email;
|
|
87
|
-
if (contactData.firstName)
|
|
88
|
-
contact.firstName = contactData.firstName;
|
|
89
|
-
if (contactData.lastName)
|
|
90
|
-
contact.lastName = contactData.lastName;
|
|
91
|
-
if (contactData.phone)
|
|
92
|
-
contact.phone = contactData.phone;
|
|
93
|
-
if (Object.keys(contact).length > 0) {
|
|
94
|
-
traits.Contact = contact;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return { traits };
|
|
98
|
-
}
|
|
99
|
-
function handleMemoryApiError(error) {
|
|
100
|
-
const httpError = error;
|
|
101
|
-
if (httpError.response) {
|
|
102
|
-
const status = httpError.response.status;
|
|
103
|
-
const data = httpError.response.data;
|
|
104
|
-
switch (status) {
|
|
105
|
-
case 400:
|
|
106
|
-
throw new actions_core_1.IntegrationError(data?.message || 'Bad Request - Invalid request data', 'INVALID_REQUEST_DATA', 400);
|
|
107
|
-
case 404:
|
|
108
|
-
throw new actions_core_1.IntegrationError(data?.message || 'Profile service not found', 'SERVICE_NOT_FOUND', 404);
|
|
109
|
-
case 429: {
|
|
110
|
-
throw new actions_core_1.RetryableError(data?.message || 'Rate limit exceeded');
|
|
111
|
-
}
|
|
112
|
-
case 500:
|
|
113
|
-
throw new actions_core_1.RetryableError(data?.message || 'Internal server error');
|
|
114
|
-
case 503:
|
|
115
|
-
throw new actions_core_1.RetryableError(data?.message || 'Service unavailable');
|
|
116
|
-
default:
|
|
117
|
-
throw new actions_core_1.IntegrationError(data?.message || `HTTP ${status} error`, 'API_ERROR', status);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
throw new actions_core_1.RetryableError(httpError.message || 'Network error occurred');
|
|
121
|
-
}
|
|
122
|
-
exports.default = action;
|
|
123
|
-
function normalizeBaseUrl(url) {
|
|
124
|
-
return url.replace(/\/+$/, '');
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/memora/profileSync/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../../../../src/destinations/memora/traitsSync/generated-types.ts"],"names":[],"mappings":""}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const actions_core_1 = require("@segment/actions-core");
|
|
4
|
-
const API_VERSION = 'v1';
|
|
5
|
-
const action = {
|
|
6
|
-
title: 'Traits Sync',
|
|
7
|
-
description: 'Merge traits into an existing Memora profile using PATCH API. Only the traits provided are added or updated; unspecified traits remain unchanged.',
|
|
8
|
-
defaultSubscription: 'type = "track" or type = "identify"',
|
|
9
|
-
fields: {
|
|
10
|
-
profileId: {
|
|
11
|
-
label: 'Profile ID',
|
|
12
|
-
description: 'Unique identifier for the profile using Twilio Type ID (TTID) format. If not provided, will attempt to use userId or anonymousId.',
|
|
13
|
-
type: 'string',
|
|
14
|
-
default: {
|
|
15
|
-
'@if': {
|
|
16
|
-
exists: { '@path': '$.userId' },
|
|
17
|
-
then: { '@path': '$.userId' },
|
|
18
|
-
else: { '@path': '$.anonymousId' }
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
contact: {
|
|
23
|
-
label: 'Contact Information',
|
|
24
|
-
description: 'Contact information object containing email, firstName, lastName, and phone fields that will be placed in traits.Contact in the Memora API call.',
|
|
25
|
-
type: 'object',
|
|
26
|
-
properties: {
|
|
27
|
-
email: {
|
|
28
|
-
label: 'Email',
|
|
29
|
-
description: 'User email address',
|
|
30
|
-
type: 'string',
|
|
31
|
-
format: 'email'
|
|
32
|
-
},
|
|
33
|
-
firstName: {
|
|
34
|
-
label: 'First Name',
|
|
35
|
-
description: 'User first name',
|
|
36
|
-
type: 'string'
|
|
37
|
-
},
|
|
38
|
-
lastName: {
|
|
39
|
-
label: 'Last Name',
|
|
40
|
-
description: 'User last name',
|
|
41
|
-
type: 'string'
|
|
42
|
-
},
|
|
43
|
-
phone: {
|
|
44
|
-
label: 'Phone',
|
|
45
|
-
description: 'User phone number',
|
|
46
|
-
type: 'string'
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
default: {
|
|
50
|
-
email: { '@path': '$.properties.email' },
|
|
51
|
-
firstName: { '@path': '$.properties.first_name' },
|
|
52
|
-
lastName: { '@path': '$.properties.last_name' },
|
|
53
|
-
phone: { '@path': '$.properties.phone' }
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
perform: async (request, { payload, settings }) => {
|
|
58
|
-
console.log('perform called');
|
|
59
|
-
const serviceId = settings.serviceId;
|
|
60
|
-
if (!serviceId) {
|
|
61
|
-
throw new actions_core_1.IntegrationError('Service ID is required', 'MISSING_REQUIRED_FIELD', 400);
|
|
62
|
-
}
|
|
63
|
-
if (!payload.profileId) {
|
|
64
|
-
throw new actions_core_1.IntegrationError('Profile ID is required for traits sync', 'MISSING_REQUIRED_FIELD', 400);
|
|
65
|
-
}
|
|
66
|
-
const traitsPayload = buildMemoraTraitsPayload(payload);
|
|
67
|
-
if (!traitsPayload.traits.Contact || Object.keys(traitsPayload.traits.Contact).length === 0) {
|
|
68
|
-
throw new actions_core_1.IntegrationError('Contact information must be provided', 'EMPTY_CONTACT', 400);
|
|
69
|
-
}
|
|
70
|
-
try {
|
|
71
|
-
const baseUrl = normalizeBaseUrl(settings.url);
|
|
72
|
-
const response = await request(`${baseUrl}/${API_VERSION}/Services/${serviceId}/Profiles/${payload.profileId}`, {
|
|
73
|
-
method: 'PATCH',
|
|
74
|
-
headers: {
|
|
75
|
-
'Content-Type': 'application/json',
|
|
76
|
-
Authorization: `Bearer ${settings.api_key}`,
|
|
77
|
-
...(settings.twilioAccount && { 'X-Pre-Auth-Context': settings.twilioAccount })
|
|
78
|
-
},
|
|
79
|
-
json: traitsPayload
|
|
80
|
-
});
|
|
81
|
-
if (response.status !== 201) {
|
|
82
|
-
throw new actions_core_1.IntegrationError(`Unexpected response status: ${response.status}`, 'API_ERROR', response.status);
|
|
83
|
-
}
|
|
84
|
-
return response;
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
if (error instanceof actions_core_1.IntegrationError) {
|
|
88
|
-
throw error;
|
|
89
|
-
}
|
|
90
|
-
handleMemoraApiError(error);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
function buildMemoraTraitsPayload(payload) {
|
|
95
|
-
const traitsPayload = {
|
|
96
|
-
traits: {
|
|
97
|
-
Contact: {}
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
if (payload.contact && typeof payload.contact === 'object') {
|
|
101
|
-
const contactData = payload.contact;
|
|
102
|
-
const contact = {};
|
|
103
|
-
if (contactData.email)
|
|
104
|
-
contact.email = contactData.email;
|
|
105
|
-
if (contactData.firstName)
|
|
106
|
-
contact.firstName = contactData.firstName;
|
|
107
|
-
if (contactData.lastName)
|
|
108
|
-
contact.lastName = contactData.lastName;
|
|
109
|
-
if (contactData.phone)
|
|
110
|
-
contact.phone = contactData.phone;
|
|
111
|
-
traitsPayload.traits.Contact = contact;
|
|
112
|
-
}
|
|
113
|
-
return traitsPayload;
|
|
114
|
-
}
|
|
115
|
-
function handleMemoraApiError(error) {
|
|
116
|
-
const httpError = error;
|
|
117
|
-
if (httpError.response) {
|
|
118
|
-
const status = httpError.response.status;
|
|
119
|
-
const data = httpError.response.data;
|
|
120
|
-
switch (status) {
|
|
121
|
-
case 400:
|
|
122
|
-
throw new actions_core_1.IntegrationError(data?.message || 'Bad Request - Invalid trait data', 'INVALID_REQUEST_DATA', 400);
|
|
123
|
-
case 404:
|
|
124
|
-
throw new actions_core_1.IntegrationError(data?.message || 'Profile not found', 'PROFILE_NOT_FOUND', 404);
|
|
125
|
-
case 429: {
|
|
126
|
-
const retryAfter = httpError.response.headers?.['retry-after'];
|
|
127
|
-
const message = retryAfter ? `Rate limit exceeded. Retry after ${retryAfter} seconds` : 'Rate limit exceeded';
|
|
128
|
-
throw new actions_core_1.RetryableError(data?.message || message);
|
|
129
|
-
}
|
|
130
|
-
case 500:
|
|
131
|
-
throw new actions_core_1.RetryableError(data?.message || 'Internal server error');
|
|
132
|
-
case 503:
|
|
133
|
-
throw new actions_core_1.RetryableError(data?.message || 'Service unavailable');
|
|
134
|
-
default:
|
|
135
|
-
throw new actions_core_1.IntegrationError(data?.message || `HTTP ${status} error`, 'API_ERROR', status);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
throw new actions_core_1.RetryableError(httpError.message || 'Network error occurred');
|
|
139
|
-
}
|
|
140
|
-
exports.default = action;
|
|
141
|
-
function normalizeBaseUrl(url) {
|
|
142
|
-
return url.replace(/\/+$/, '');
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/destinations/memora/traitsSync/index.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|