mixpanel-react-native 3.0.0-beta.1 → 3.0.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/CHANGELOG.md +60 -57
- package/MixpanelReactNative.podspec +3 -3
- package/README.md +7 -1
- package/Samples/MixpanelExpo/package-lock.json +22551 -0
- package/Samples/MixpanelExpo/package.json +1 -1
- package/__tests__/index.test.js +16 -15
- package/docs/Mixpanel.html +32 -32
- package/docs/MixpanelGroup.html +7 -7
- package/docs/People.html +12 -12
- package/docs/index.html +3 -2
- package/docs/index.js.html +29 -16
- package/index.d.ts +29 -7
- package/index.js +28 -15
- package/javascript/mixpanel-core.js +4 -5
- package/javascript/mixpanel-main.js +4 -2
- package/javascript/mixpanel-persistent.js +52 -37
- package/javascript/mixpanel-storage.js +13 -20
- package/package.json +1 -1
- package/__tests__/persistent.test.js +0 -161
- package/logs/.b11bf985d66a037ca5688a574653f3bf76a28dfa-audit.json +0 -49
- package/logs/.c366df74eeb671df60a57a2075ae40a3dae2af25-audit.json +0 -49
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import uuid from "uuid";
|
|
2
|
-
|
|
3
|
-
describe("MixpanelPersistent", () => {
|
|
4
|
-
const token = "testToken";
|
|
5
|
-
let asyncStorageAdapterMock;
|
|
6
|
-
let MixpanelPersistent;
|
|
7
|
-
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
jest.isolateModules(() => {
|
|
10
|
-
jest.mock("uuid", () => ({
|
|
11
|
-
v4: jest.fn(() => "uuid-v4-mock"),
|
|
12
|
-
}));
|
|
13
|
-
|
|
14
|
-
MixpanelPersistent = require("mixpanel-react-native/javascript/mixpanel-persistent")
|
|
15
|
-
.MixpanelPersistent;
|
|
16
|
-
const AsyncStorageAdapter = require("mixpanel-react-native/javascript/mixpanel-storage")
|
|
17
|
-
.AsyncStorageAdapter;
|
|
18
|
-
asyncStorageAdapterMock = new AsyncStorageAdapter();
|
|
19
|
-
asyncStorageAdapterMock.getItem.mockResolvedValue(null);
|
|
20
|
-
asyncStorageAdapterMock.setItem.mockResolvedValue(undefined);
|
|
21
|
-
asyncStorageAdapterMock.removeItem.mockResolvedValue(undefined);
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it("loads and persists deviceId correctly", async () => {
|
|
26
|
-
const mixpanelPersistent = MixpanelPersistent.getInstance(
|
|
27
|
-
asyncStorageAdapterMock
|
|
28
|
-
);
|
|
29
|
-
await mixpanelPersistent.loadDeviceId(token);
|
|
30
|
-
|
|
31
|
-
expect(uuid.v4).toHaveBeenCalled();
|
|
32
|
-
mixpanelPersistent.updateDeviceId(token, "uuid-v4-mock");
|
|
33
|
-
mixpanelPersistent.persistDeviceId(token);
|
|
34
|
-
expect(asyncStorageAdapterMock.setItem).toHaveBeenCalledWith(
|
|
35
|
-
expect.any(String),
|
|
36
|
-
"uuid-v4-mock"
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
const deviceId = mixpanelPersistent.getDeviceId(token);
|
|
40
|
-
expect(deviceId).toEqual("uuid-v4-mock");
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it("loads and updates distinctId correctly", async () => {
|
|
44
|
-
const mixpanelPersistent = MixpanelPersistent.getInstance(
|
|
45
|
-
asyncStorageAdapterMock
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
await mixpanelPersistent.loadDeviceId(token);
|
|
49
|
-
mixpanelPersistent.updateDeviceId(token, "device-id-mock");
|
|
50
|
-
|
|
51
|
-
await mixpanelPersistent.loadDistinctId(token);
|
|
52
|
-
const distinctId = mixpanelPersistent.getDistinctId(token);
|
|
53
|
-
expect(distinctId).toEqual("$device:device-id-mock");
|
|
54
|
-
|
|
55
|
-
mixpanelPersistent.updateDistinctId(token, "distinct-id-updated");
|
|
56
|
-
await mixpanelPersistent.persistDistinctId(token);
|
|
57
|
-
|
|
58
|
-
expect(asyncStorageAdapterMock.setItem).toHaveBeenCalledWith(
|
|
59
|
-
expect.any(String),
|
|
60
|
-
"distinct-id-updated"
|
|
61
|
-
);
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it("loads and persists userId correctly", async () => {
|
|
65
|
-
const mixpanelPersistent = MixpanelPersistent.getInstance(
|
|
66
|
-
asyncStorageAdapterMock
|
|
67
|
-
);
|
|
68
|
-
const userId = "user-id-mock";
|
|
69
|
-
|
|
70
|
-
asyncStorageAdapterMock.getItem.mockResolvedValueOnce(userId);
|
|
71
|
-
|
|
72
|
-
await mixpanelPersistent.loadUserId(token);
|
|
73
|
-
expect(mixpanelPersistent.getUserId(token)).toEqual(userId);
|
|
74
|
-
|
|
75
|
-
const newUserId = "new-user-id";
|
|
76
|
-
mixpanelPersistent.updateUserId(token, newUserId);
|
|
77
|
-
await mixpanelPersistent.persistUserId(token);
|
|
78
|
-
|
|
79
|
-
expect(asyncStorageAdapterMock.setItem).toHaveBeenCalledWith(
|
|
80
|
-
expect.any(String),
|
|
81
|
-
newUserId
|
|
82
|
-
);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it("loads, updates, and persists super properties correctly", async () => {
|
|
86
|
-
const mixpanelPersistent = MixpanelPersistent.getInstance(
|
|
87
|
-
asyncStorageAdapterMock
|
|
88
|
-
);
|
|
89
|
-
const superProperties = { prop1: "value1", prop2: "value2" };
|
|
90
|
-
asyncStorageAdapterMock.getItem.mockResolvedValueOnce(
|
|
91
|
-
JSON.stringify(superProperties)
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
await mixpanelPersistent.loadSuperProperties(token);
|
|
95
|
-
|
|
96
|
-
expect(mixpanelPersistent.getSuperProperties(token)).toEqual(
|
|
97
|
-
superProperties
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
const updatedSuperProperties = { ...superProperties, prop3: "value3" };
|
|
101
|
-
mixpanelPersistent.updateSuperProperties(token, updatedSuperProperties);
|
|
102
|
-
await mixpanelPersistent.persistSuperProperties(token);
|
|
103
|
-
|
|
104
|
-
expect(asyncStorageAdapterMock.setItem).toHaveBeenCalledWith(
|
|
105
|
-
expect.any(String),
|
|
106
|
-
JSON.stringify(updatedSuperProperties)
|
|
107
|
-
);
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
it("loads, updates, and persists time events correctly", async () => {
|
|
111
|
-
const mixpanelPersistent = MixpanelPersistent.getInstance(
|
|
112
|
-
asyncStorageAdapterMock
|
|
113
|
-
);
|
|
114
|
-
const timeEvents = { event1: Date.now() };
|
|
115
|
-
|
|
116
|
-
asyncStorageAdapterMock.getItem.mockResolvedValueOnce(
|
|
117
|
-
JSON.stringify(timeEvents)
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
await mixpanelPersistent.loadTimeEvents(token);
|
|
121
|
-
|
|
122
|
-
expect(mixpanelPersistent.getTimeEvents(token)).toEqual(timeEvents);
|
|
123
|
-
|
|
124
|
-
const updatedTimeEvents = { ...timeEvents, event2: Date.now() };
|
|
125
|
-
mixpanelPersistent.updateTimeEvents(token, updatedTimeEvents);
|
|
126
|
-
await mixpanelPersistent.persistTimeEvents(token);
|
|
127
|
-
|
|
128
|
-
expect(asyncStorageAdapterMock.setItem).toHaveBeenCalledWith(
|
|
129
|
-
expect.any(String),
|
|
130
|
-
JSON.stringify(updatedTimeEvents)
|
|
131
|
-
);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it("loads, updates, and persists opt-out status correctly", async () => {
|
|
135
|
-
const mixpanelPersistent = MixpanelPersistent.getInstance(
|
|
136
|
-
asyncStorageAdapterMock
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
asyncStorageAdapterMock.getItem.mockResolvedValueOnce("true");
|
|
140
|
-
|
|
141
|
-
await mixpanelPersistent.loadOptOut(token);
|
|
142
|
-
expect(mixpanelPersistent.getOptedOut(token)).toBe(true);
|
|
143
|
-
|
|
144
|
-
mixpanelPersistent.updateOptedOut(token, false);
|
|
145
|
-
await mixpanelPersistent.persistOptedOut(token);
|
|
146
|
-
|
|
147
|
-
expect(asyncStorageAdapterMock.setItem).toHaveBeenCalledWith(
|
|
148
|
-
expect.any(String),
|
|
149
|
-
"false"
|
|
150
|
-
);
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it("resets identity and related data correctly", async () => {
|
|
154
|
-
const mixpanelPersistent = MixpanelPersistent.getInstance(
|
|
155
|
-
asyncStorageAdapterMock
|
|
156
|
-
);
|
|
157
|
-
|
|
158
|
-
await mixpanelPersistent.reset(token);
|
|
159
|
-
expect(asyncStorageAdapterMock.removeItem).toHaveBeenCalledTimes(5);
|
|
160
|
-
});
|
|
161
|
-
});
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"keep": {
|
|
3
|
-
"days": true,
|
|
4
|
-
"amount": 14
|
|
5
|
-
},
|
|
6
|
-
"auditLog": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/.b11bf985d66a037ca5688a574653f3bf76a28dfa-audit.json",
|
|
7
|
-
"files": [
|
|
8
|
-
{
|
|
9
|
-
"date": 1708031778058,
|
|
10
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/keplerCliNative-2024-02-15.log",
|
|
11
|
-
"hash": "07532e7603268809e06ca6c5a3157f95"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"date": 1708369794950,
|
|
15
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/keplerCliNative-2024-02-19.log",
|
|
16
|
-
"hash": "bf39dc72fcec172864c164cf355008c3"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"date": 1708589671798,
|
|
20
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/keplerCliNative-2024-02-22.log",
|
|
21
|
-
"hash": "9c67450d70a05cf38c86a324a06a0bae"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"date": 1708729198685,
|
|
25
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/keplerCliNative-2024-02-23.log",
|
|
26
|
-
"hash": "fcc68deaede843fa3054da7015219c86"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"date": 1708979065434,
|
|
30
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/keplerCliNative-2024-02-26.log",
|
|
31
|
-
"hash": "2f802970076a00366648363c19b8b75a"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"date": 1709043115268,
|
|
35
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/keplerCliNative-2024-02-27.log",
|
|
36
|
-
"hash": "efbf115b440548473f8e3c62c80e2f4a"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"date": 1709156035546,
|
|
40
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/keplerCliNative-2024-02-28.log",
|
|
41
|
-
"hash": "fc37ffff09dc4e1e2af0b1d0a3c5767e"
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
"date": 1709222274317,
|
|
45
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/keplerCliNative-2024-02-29.log",
|
|
46
|
-
"hash": "546199186d8c0087b39f1ddc2e84a088"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"keep": {
|
|
3
|
-
"days": true,
|
|
4
|
-
"amount": 14
|
|
5
|
-
},
|
|
6
|
-
"auditLog": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/.c366df74eeb671df60a57a2075ae40a3dae2af25-audit.json",
|
|
7
|
-
"files": [
|
|
8
|
-
{
|
|
9
|
-
"date": 1708031778055,
|
|
10
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/error-2024-02-15.log",
|
|
11
|
-
"hash": "92605562f5e88770140230df60700c47"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"date": 1708369794945,
|
|
15
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/error-2024-02-19.log",
|
|
16
|
-
"hash": "80e6705fde5119423369ea171056ddf3"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"date": 1708589671787,
|
|
20
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/error-2024-02-22.log",
|
|
21
|
-
"hash": "2b9570aca1dd8ae427021daf1ddb8c3b"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"date": 1708729198682,
|
|
25
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/error-2024-02-23.log",
|
|
26
|
-
"hash": "c7c592d1ecfa32a939af0e02fb99bbe7"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"date": 1708979065426,
|
|
30
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/error-2024-02-26.log",
|
|
31
|
-
"hash": "361e8d392ab3d6e7fe811fb693fae7ba"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"date": 1709043115264,
|
|
35
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/error-2024-02-27.log",
|
|
36
|
-
"hash": "5bee5e0250e1176ab4c6a71041229054"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"date": 1709156035378,
|
|
40
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/error-2024-02-28.log",
|
|
41
|
-
"hash": "079504a72e47e4ee908d8bb2c4f5debb"
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
"date": 1709222274311,
|
|
45
|
-
"name": "/Users/zihejia/Documents/Projects/Develop/mixpanel-react-native-original/logs/error-2024-02-29.log",
|
|
46
|
-
"hash": "084013dcbe1040f480161dba82d9e9c5"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
}
|