vc-cdp-rn-sdk 0.1.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.
@@ -0,0 +1,150 @@
1
+ export interface CdpRnConfig {
2
+ apiKey: string;
3
+ secretKey: string;
4
+ source: string;
5
+ serviceName: string;
6
+ baseUrl?: string;
7
+ isTest?: boolean;
8
+ debug?: boolean;
9
+ batchSize?: number;
10
+ batchInterval?: number;
11
+ enableEncryption?: boolean;
12
+ }
13
+ export interface UserTraits {
14
+ full_name?: string;
15
+ first_name?: string;
16
+ last_name?: string;
17
+ phone?: string;
18
+ email?: string;
19
+ idcard?: string;
20
+ old_idcard?: string;
21
+ gender?: 'M' | 'F' | 'O';
22
+ dob?: string;
23
+ address?: string;
24
+ marital_status?: string;
25
+ occupation?: string;
26
+ nationality?: string;
27
+ kyc_status?: string;
28
+ religion?: string;
29
+ mps_verified?: boolean;
30
+ zalo_id?: string;
31
+ tiktok_id?: string;
32
+ [key: string]: unknown;
33
+ }
34
+ export interface PlatformInfo {
35
+ device_type?: string;
36
+ brand?: string;
37
+ model?: string;
38
+ app_version?: string;
39
+ os_name?: string;
40
+ os_version?: string;
41
+ device_id?: string;
42
+ push_token?: string;
43
+ [key: string]: unknown;
44
+ }
45
+ export interface CampaignInfo {
46
+ utm_source?: string;
47
+ utm_medium?: string;
48
+ utm_campaign?: string;
49
+ utm_term?: string;
50
+ utm_content?: string;
51
+ [key: string]: unknown;
52
+ }
53
+ export interface ConsentInfo {
54
+ consent_type: string;
55
+ status: boolean;
56
+ consent_date?: string;
57
+ [key: string]: unknown;
58
+ }
59
+ export interface ScoreInfo {
60
+ score_type: string;
61
+ score_value: number;
62
+ score_date?: string;
63
+ [key: string]: unknown;
64
+ }
65
+ export interface ProductInfo {
66
+ product_code: string;
67
+ product_name?: string;
68
+ status?: string;
69
+ [key: string]: unknown;
70
+ }
71
+ export interface EventProperties {
72
+ [key: string]: unknown;
73
+ }
74
+ export interface EventContext {
75
+ locale?: string;
76
+ timezone?: string;
77
+ app?: {
78
+ version?: string;
79
+ build?: string;
80
+ };
81
+ [key: string]: unknown;
82
+ }
83
+ export interface CdpEvent {
84
+ event_id: string;
85
+ type: string;
86
+ event_name: string;
87
+ service_name: string;
88
+ user_id: string;
89
+ profile_id: string | null;
90
+ anonymous_id: string;
91
+ device_id: string;
92
+ session_id: string;
93
+ properties: EventProperties;
94
+ campaign: CampaignInfo;
95
+ context: EventContext;
96
+ platforms: PlatformInfo;
97
+ event_time: string;
98
+ }
99
+ export type PartyType = 'PERSON' | 'ORG';
100
+ export interface ProfilePayload {
101
+ type: string;
102
+ user_id: string;
103
+ session_id: string;
104
+ device_id: string;
105
+ party_type: PartyType;
106
+ service_name: string;
107
+ traits: string | UserTraits;
108
+ platforms: PlatformInfo;
109
+ campaign: CampaignInfo;
110
+ metadata: Record<string, unknown>;
111
+ profile_id?: string;
112
+ consents?: ConsentInfo[];
113
+ scores?: ScoreInfo[];
114
+ products?: ProductInfo[];
115
+ }
116
+ export interface ProfileUpdatePayload {
117
+ profile_id: string;
118
+ traits?: string | UserTraits;
119
+ consents?: ConsentInfo[];
120
+ scores?: ScoreInfo[];
121
+ products?: ProductInfo[];
122
+ metadata?: Record<string, unknown>;
123
+ }
124
+ export interface ProfileResponse {
125
+ code: number;
126
+ message: string;
127
+ transaction_id: string;
128
+ profile_id: string;
129
+ }
130
+ export interface ProfileData {
131
+ profile_id: string;
132
+ user_id?: string;
133
+ traits?: UserTraits;
134
+ platforms?: PlatformInfo;
135
+ consents?: ConsentInfo[];
136
+ scores?: ScoreInfo[];
137
+ products?: ProductInfo[];
138
+ created_at?: string;
139
+ updated_at?: string;
140
+ [key: string]: unknown;
141
+ }
142
+ export interface UserIdentities {
143
+ user_id: string | null;
144
+ profile_id: string | null;
145
+ anonymous_id: string;
146
+ device_id: string;
147
+ session_id: string;
148
+ [key: string]: unknown;
149
+ }
150
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Generate HMAC-SHA256 signature
3
+ * Formula: Base64(HMAC(SHA256(source + "|" + timestamp + "|" + payload)))
4
+ */
5
+ export declare function generateSignature(secretKey: string, source: string, timestamp: string, payload: string): string;
6
+ /**
7
+ * Encrypt PII traits using AES-256-CBC
8
+ * Formula: Base64(IV + AES_CBC_PKCS5(key, plaintext_traits_json))
9
+ * Key: SHA256(secretKey + timestamp) → 32 bytes
10
+ * IV: Random 16 bytes
11
+ *
12
+ * NOTE: CryptoJS with a WordArray key does NOT auto-prepend IV to output.
13
+ * We must manually prepend: iv.concat(encrypted.ciphertext) → Base64.
14
+ */
15
+ export declare function encryptTraits(secretKey: string, timestamp: string, traits: object): string;
16
+ export declare function generateUUID(): string;
17
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ/G;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsB1F;AAED,wBAAgB,YAAY,IAAI,MAAM,CAMrC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateSignature = generateSignature;
7
+ exports.encryptTraits = encryptTraits;
8
+ exports.generateUUID = generateUUID;
9
+ const crypto_js_1 = __importDefault(require("crypto-js"));
10
+ /**
11
+ * Generate HMAC-SHA256 signature
12
+ * Formula: Base64(HMAC(SHA256(source + "|" + timestamp + "|" + payload)))
13
+ */
14
+ function generateSignature(secretKey, source, timestamp, payload) {
15
+ try {
16
+ const message = `${source}|${timestamp}|${payload}`;
17
+ const hmac = crypto_js_1.default.HmacSHA256(message, secretKey);
18
+ return crypto_js_1.default.enc.Base64.stringify(hmac);
19
+ }
20
+ catch (_a) {
21
+ return '';
22
+ }
23
+ }
24
+ /**
25
+ * Encrypt PII traits using AES-256-CBC
26
+ * Formula: Base64(IV + AES_CBC_PKCS5(key, plaintext_traits_json))
27
+ * Key: SHA256(secretKey + timestamp) → 32 bytes
28
+ * IV: Random 16 bytes
29
+ *
30
+ * NOTE: CryptoJS with a WordArray key does NOT auto-prepend IV to output.
31
+ * We must manually prepend: iv.concat(encrypted.ciphertext) → Base64.
32
+ */
33
+ function encryptTraits(secretKey, timestamp, traits) {
34
+ try {
35
+ const traitsJson = JSON.stringify(traits);
36
+ // Key = SHA256(secretKey + timestamp) → 32-byte WordArray
37
+ const key = crypto_js_1.default.SHA256(secretKey + timestamp);
38
+ // Random 16-byte IV
39
+ const iv = crypto_js_1.default.lib.WordArray.random(16);
40
+ const encrypted = crypto_js_1.default.AES.encrypt(traitsJson, key, {
41
+ iv,
42
+ mode: crypto_js_1.default.mode.CBC,
43
+ padding: crypto_js_1.default.pad.Pkcs7,
44
+ });
45
+ // Prepend IV to ciphertext then Base64-encode: Base64(IV + ciphertext)
46
+ const combined = iv.clone().concat(encrypted.ciphertext);
47
+ return crypto_js_1.default.enc.Base64.stringify(combined);
48
+ }
49
+ catch (_a) {
50
+ return '';
51
+ }
52
+ }
53
+ function generateUUID() {
54
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
55
+ const r = (Math.random() * 16) | 0;
56
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
57
+ return v.toString(16);
58
+ });
59
+ }
60
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":";;;;;AAMA,8CAQC;AAWD,sCAsBC;AAED,oCAMC;AAvDD,0DAAiC;AAEjC;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,MAAc,EAAE,SAAiB,EAAE,OAAe;IACrG,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,MAAM,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,mBAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,mBAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAAC,SAAiB,EAAE,SAAiB,EAAE,MAAc;IAChF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE1C,0DAA0D;QAC1D,MAAM,GAAG,GAAG,mBAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAEnD,oBAAoB;QACpB,MAAM,EAAE,GAAG,mBAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,mBAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE;YACtD,EAAE;YACF,IAAI,EAAE,mBAAQ,CAAC,IAAI,CAAC,GAAG;YACvB,OAAO,EAAE,mBAAQ,CAAC,GAAG,CAAC,KAAK;SAC5B,CAAC,CAAC;QAEH,uEAAuE;QACvE,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzD,OAAO,mBAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,YAAY;IAC1B,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { PlatformInfo } from '../types';
2
+ export declare function collectDeviceInfo(): Promise<PlatformInfo>;
3
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/utils/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAYxC,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,CAAC,CA8C/D"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collectDeviceInfo = collectDeviceInfo;
4
+ // Lazy import to avoid hard dependency
5
+ function getDeviceInfo() {
6
+ try {
7
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
8
+ return require('react-native-device-info');
9
+ }
10
+ catch (_a) {
11
+ return null;
12
+ }
13
+ }
14
+ async function collectDeviceInfo() {
15
+ var _a, _b;
16
+ const DeviceInfo = getDeviceInfo();
17
+ if (!DeviceInfo) {
18
+ return {
19
+ device_type: 'mobile',
20
+ os_name: 'unknown',
21
+ };
22
+ }
23
+ try {
24
+ const [brand, model, systemVersion, appVersion, deviceType] = await Promise.all([
25
+ DeviceInfo.getBrand ? Promise.resolve(DeviceInfo.getBrand()) : Promise.resolve('Unknown'),
26
+ DeviceInfo.getModel ? Promise.resolve(DeviceInfo.getModel()) : Promise.resolve('Unknown'),
27
+ DeviceInfo.getSystemVersion ? Promise.resolve(DeviceInfo.getSystemVersion()) : Promise.resolve('Unknown'),
28
+ DeviceInfo.getVersion ? Promise.resolve(DeviceInfo.getVersion()) : Promise.resolve(''),
29
+ DeviceInfo.getDeviceType ? Promise.resolve(DeviceInfo.getDeviceType()) : Promise.resolve('Handset'),
30
+ ]);
31
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
32
+ const { Platform } = require('react-native');
33
+ const osName = Platform.OS === 'ios' ? 'iOS' : Platform.OS === 'android' ? 'Android' : Platform.OS;
34
+ const deviceTypeMap = {
35
+ Handset: 'mobile',
36
+ Tablet: 'tablet',
37
+ Tv: 'tv',
38
+ Desktop: 'desktop',
39
+ };
40
+ return {
41
+ device_type: (_a = deviceTypeMap[deviceType]) !== null && _a !== void 0 ? _a : 'mobile',
42
+ brand,
43
+ model,
44
+ app_version: appVersion,
45
+ os_name: osName,
46
+ os_version: systemVersion,
47
+ };
48
+ }
49
+ catch (_c) {
50
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
51
+ const { Platform } = require('react-native');
52
+ return {
53
+ device_type: 'mobile',
54
+ os_name: (_b = Platform.OS) !== null && _b !== void 0 ? _b : 'unknown',
55
+ };
56
+ }
57
+ }
58
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/utils/device.ts"],"names":[],"mappings":";;AAYA,8CA8CC;AAxDD,uCAAuC;AACvC,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,8DAA8D;QAC9D,OAAO,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC7C,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB;;IACrC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,WAAW,EAAE,QAAQ;YACrB,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9E,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YACzF,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YACzF,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YACzG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtF,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;SACpG,CAAC,CAAC;QAEH,8DAA8D;QAC9D,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAEnG,MAAM,aAAa,GAA2B;YAC5C,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,QAAQ;YAChB,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,SAAS;SACnB,CAAC;QAEF,OAAO;YACL,WAAW,EAAE,MAAA,aAAa,CAAC,UAAoB,CAAC,mCAAI,QAAQ;YAC5D,KAAK;YACL,KAAK;YACL,WAAW,EAAE,UAAU;YACvB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,aAAa;SAC1B,CAAC;IACJ,CAAC;IAAC,WAAM,CAAC;QACP,8DAA8D;QAC9D,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAC7C,OAAO;YACL,WAAW,EAAE,QAAQ;YACrB,OAAO,EAAE,MAAA,QAAQ,CAAC,EAAE,mCAAI,SAAS;SAClC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const Storage: {
2
+ get(key: string): Promise<string | null>;
3
+ set(key: string, value: string): Promise<void>;
4
+ remove(key: string): Promise<void>;
5
+ };
6
+ export declare const STORAGE_KEYS: {
7
+ readonly ANONYMOUS_ID: "cdp_anonymous_id";
8
+ readonly DEVICE_ID: "cdp_device_id";
9
+ readonly SESSION_ID: "cdp_session_id";
10
+ readonly PROFILE_ID: "cdp_profile_id";
11
+ };
12
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,OAAO;aACH,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;aAQ/B,MAAM,SAAS,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gBAQlC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOzC,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STORAGE_KEYS = exports.Storage = void 0;
4
+ // Lazy import to avoid hard dependency at module load time
5
+ let AsyncStorage = null;
6
+ function getStorage() {
7
+ if (!AsyncStorage) {
8
+ try {
9
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
10
+ AsyncStorage = require('@react-native-async-storage/async-storage').default;
11
+ }
12
+ catch (_a) {
13
+ throw new Error('[CDP RN SDK] @react-native-async-storage/async-storage is required. ' +
14
+ 'Install it with: npm install @react-native-async-storage/async-storage');
15
+ }
16
+ }
17
+ return AsyncStorage;
18
+ }
19
+ exports.Storage = {
20
+ async get(key) {
21
+ try {
22
+ return await getStorage().getItem(key);
23
+ }
24
+ catch (_a) {
25
+ return null;
26
+ }
27
+ },
28
+ async set(key, value) {
29
+ try {
30
+ await getStorage().setItem(key, value);
31
+ }
32
+ catch (_a) {
33
+ // silent fail
34
+ }
35
+ },
36
+ async remove(key) {
37
+ try {
38
+ await getStorage().removeItem(key);
39
+ }
40
+ catch (_a) {
41
+ // silent fail
42
+ }
43
+ },
44
+ };
45
+ exports.STORAGE_KEYS = {
46
+ ANONYMOUS_ID: 'cdp_anonymous_id',
47
+ DEVICE_ID: 'cdp_device_id',
48
+ SESSION_ID: 'cdp_session_id',
49
+ PROFILE_ID: 'cdp_profile_id',
50
+ };
51
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":";;;AAAA,2DAA2D;AAC3D,IAAI,YAAY,GAIL,IAAI,CAAC;AAEhB,SAAS,UAAU;IACjB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,8DAA8D;YAC9D,YAAY,GAAG,OAAO,CAAC,2CAA2C,CAAC,CAAC,OAAO,CAAC;QAC9E,CAAC;QAAC,WAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,sEAAsE;gBACtE,wEAAwE,CACzE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,YAAa,CAAC;AACvB,CAAC;AAEY,QAAA,OAAO,GAAG;IACrB,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,IAAI,CAAC;YACH,OAAO,MAAM,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,IAAI,CAAC;YACH,MAAM,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAAC,WAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC;YACH,MAAM,UAAU,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAAC,WAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;CACF,CAAC;AAEW,QAAA,YAAY,GAAG;IAC1B,YAAY,EAAE,kBAAkB;IAChC,SAAS,EAAE,eAAe;IAC1B,UAAU,EAAE,gBAAgB;IAC5B,UAAU,EAAE,gBAAgB;CACpB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "vc-cdp-rn-sdk",
3
+ "version": "0.1.0",
4
+ "description": "CDP SDK for React Native - Customer Data Platform tracking for iOS and Android",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "build:watch": "tsc --watch",
14
+ "test": "jest",
15
+ "lint": "eslint src --ext .ts"
16
+ },
17
+ "keywords": [
18
+ "cdp",
19
+ "analytics",
20
+ "tracking",
21
+ "react-native",
22
+ "ios",
23
+ "android",
24
+ "customer-data-platform"
25
+ ],
26
+ "author": "VietCredit",
27
+ "license": "MIT",
28
+ "peerDependencies": {
29
+ "@react-native-async-storage/async-storage": ">=1.17.0",
30
+ "react": ">=17.0.0",
31
+ "react-native": ">=0.68.0",
32
+ "react-native-device-info": ">=10.0.0"
33
+ },
34
+ "dependencies": {
35
+ "crypto-js": "^4.2.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/crypto-js": "^4.2.2",
39
+ "@types/jest": "^29.0.0",
40
+ "@types/react": "^18.0.0",
41
+ "@types/react-native": "^0.72.0",
42
+ "typescript": "^5.0.0"
43
+ },
44
+ "engines": {
45
+ "node": ">=16.0.0"
46
+ }
47
+ }