@ray-js/lock-sdk 1.0.0-beta-1

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.
Files changed (95) hide show
  1. package/lib/api/index.d.ts +5 -0
  2. package/lib/api/index.js +18 -0
  3. package/lib/api/linkage.d.ts +161 -0
  4. package/lib/api/linkage.js +74 -0
  5. package/lib/api/lock.d.ts +195 -0
  6. package/lib/api/lock.js +129 -0
  7. package/lib/api/log.d.ts +166 -0
  8. package/lib/api/log.js +44 -0
  9. package/lib/api/setting.d.ts +14 -0
  10. package/lib/api/setting.js +36 -0
  11. package/lib/api/temp.d.ts +211 -0
  12. package/lib/api/temp.js +130 -0
  13. package/lib/api/user.d.ts +154 -0
  14. package/lib/api/user.js +59 -0
  15. package/lib/api/video.d.ts +9 -0
  16. package/lib/api/video.js +17 -0
  17. package/lib/config/dp-code/index.d.ts +175 -0
  18. package/lib/config/dp-code/index.js +224 -0
  19. package/lib/config/dp-map/common.d.ts +102 -0
  20. package/lib/config/dp-map/common.js +120 -0
  21. package/lib/config/dp-map/normal.d.ts +6 -0
  22. package/lib/config/dp-map/normal.js +51 -0
  23. package/lib/config/dp-map/open.d.ts +21 -0
  24. package/lib/config/dp-map/open.js +62 -0
  25. package/lib/config/dp-map/unlock-method-big.d.ts +559 -0
  26. package/lib/config/dp-map/unlock-method-big.js +237 -0
  27. package/lib/config/dp-map/unlock-method.d.ts +551 -0
  28. package/lib/config/dp-map/unlock-method.js +231 -0
  29. package/lib/config/index.d.ts +46 -0
  30. package/lib/config/index.js +56 -0
  31. package/lib/constant.d.ts +101 -0
  32. package/lib/constant.js +136 -0
  33. package/lib/dp-interface.d.ts +7 -0
  34. package/lib/dp-interface.js +1 -0
  35. package/lib/event.d.ts +8 -0
  36. package/lib/event.js +9 -0
  37. package/lib/index.d.ts +25 -0
  38. package/lib/index.js +92 -0
  39. package/lib/interface.d.ts +807 -0
  40. package/lib/interface.js +1 -0
  41. package/lib/linkage.d.ts +26 -0
  42. package/lib/linkage.js +175 -0
  43. package/lib/log.d.ts +91 -0
  44. package/lib/log.js +314 -0
  45. package/lib/media.d.ts +43 -0
  46. package/lib/media.js +80 -0
  47. package/lib/open.d.ts +48 -0
  48. package/lib/open.js +247 -0
  49. package/lib/other.d.ts +36 -0
  50. package/lib/other.js +178 -0
  51. package/lib/parse/index.d.ts +6 -0
  52. package/lib/parse/index.js +22 -0
  53. package/lib/signal.d.ts +26 -0
  54. package/lib/signal.js +38 -0
  55. package/lib/sleep.d.ts +61 -0
  56. package/lib/sleep.js +121 -0
  57. package/lib/state.d.ts +54 -0
  58. package/lib/state.js +429 -0
  59. package/lib/sync/remote-serect-key.d.ts +5 -0
  60. package/lib/sync/remote-serect-key.js +60 -0
  61. package/lib/sync/t0.d.ts +5 -0
  62. package/lib/sync/t0.js +33 -0
  63. package/lib/sync/temp.d.ts +7 -0
  64. package/lib/sync/temp.js +88 -0
  65. package/lib/sync/unlock-mothod.d.ts +5 -0
  66. package/lib/sync/unlock-mothod.js +54 -0
  67. package/lib/temporary.d.ts +226 -0
  68. package/lib/temporary.js +637 -0
  69. package/lib/unlock-method.d.ts +269 -0
  70. package/lib/unlock-method.js +723 -0
  71. package/lib/user.d.ts +108 -0
  72. package/lib/user.js +361 -0
  73. package/lib/utils/base64-to-hex.d.ts +1 -0
  74. package/lib/utils/base64-to-hex.js +12 -0
  75. package/lib/utils/byte.d.ts +19 -0
  76. package/lib/utils/byte.js +74 -0
  77. package/lib/utils/constant.d.ts +11 -0
  78. package/lib/utils/constant.js +17 -0
  79. package/lib/utils/device.d.ts +207 -0
  80. package/lib/utils/device.js +353 -0
  81. package/lib/utils/errors.d.ts +2 -0
  82. package/lib/utils/errors.js +125 -0
  83. package/lib/utils/event.d.ts +23 -0
  84. package/lib/utils/event.js +144 -0
  85. package/lib/utils/hex-to-base64.d.ts +1 -0
  86. package/lib/utils/hex-to-base64.js +8 -0
  87. package/lib/utils/hex-to-bytes.d.ts +6 -0
  88. package/lib/utils/hex-to-bytes.js +16 -0
  89. package/lib/utils/index.d.ts +169 -0
  90. package/lib/utils/index.js +419 -0
  91. package/lib/utils/log.d.ts +5 -0
  92. package/lib/utils/log.js +78 -0
  93. package/lib/utils/publishDps.d.ts +11 -0
  94. package/lib/utils/publishDps.js +91 -0
  95. package/package.json +37 -0
@@ -0,0 +1,154 @@
1
+ import { CurrentUser } from "../interface";
2
+ /**
3
+ * 获取当前登录用户信息
4
+ * @param deviceId
5
+ * @returns
6
+ */
7
+ export declare const getCurrentUserInfo: (deviceId: string) => Promise<CurrentUser>;
8
+ interface UserTimeScheduleParams {
9
+ devId: string;
10
+ userId: string;
11
+ timeScheduleInfo: {
12
+ permanent: boolean;
13
+ userTimeSet: string;
14
+ effectiveTime: number;
15
+ expiredTime: number;
16
+ scheduleDetails: {
17
+ allDay: boolean;
18
+ effectiveTime: number;
19
+ invalidTime: number;
20
+ workingDay: number;
21
+ }[];
22
+ };
23
+ }
24
+ export declare const updateUserTimeSchedule: (params: UserTimeScheduleParams) => Promise<unknown>;
25
+ interface AddNormalUserParams {
26
+ devId: string;
27
+ name: string;
28
+ }
29
+ export declare const addNormalUser: (params: AddNormalUserParams) => Promise<unknown>;
30
+ interface RemoveNormalUserParams {
31
+ devId: string;
32
+ userId: string;
33
+ shouldDeleteUnlockInfo: boolean;
34
+ issueDp: boolean;
35
+ }
36
+ export declare const removeNormalUser: (params: RemoveNormalUserParams) => Promise<unknown>;
37
+ interface getUserListParams {
38
+ devId: string;
39
+ dpCodes: string;
40
+ keyword?: string;
41
+ offset: number;
42
+ limit: number;
43
+ }
44
+ export interface UserListItem {
45
+ /**
46
+ * 用户id
47
+ */
48
+ userId: string;
49
+ /**
50
+ * 锁端用户id
51
+ */
52
+ lockUserId: number;
53
+ /**
54
+ * 用户头像
55
+ */
56
+ avatarUrl: string;
57
+ backHomeNotifyAttr: number;
58
+ effectiveFlag: number;
59
+ /**
60
+ * 昵称
61
+ */
62
+ nickName: string;
63
+ /**
64
+ * 是否支持离线开锁
65
+ */
66
+ offlineUnlock: boolean;
67
+ /**
68
+ * 生效时间配置
69
+ */
70
+ timeScheduleInfo: {
71
+ effectiveTime: number;
72
+ expiredTime: number;
73
+ /**
74
+ * 是否永久有效
75
+ */
76
+ permanent: boolean;
77
+ /**
78
+ * 重复配置
79
+ */
80
+ scheduleDetails: {
81
+ allDay: boolean;
82
+ effectiveTime: number;
83
+ invalidTime: number;
84
+ timeZoneId: string;
85
+ workingDay: number;
86
+ }[];
87
+ };
88
+ /**
89
+ * 开锁方式列表
90
+ */
91
+ unlockDetail: {
92
+ /**
93
+ * 本类开锁方式的数量
94
+ */
95
+ count: number;
96
+ /**
97
+ * 对应的开锁方式dp code
98
+ */
99
+ dpCode: string;
100
+ /**
101
+ * 对应的开锁方式dp id
102
+ */
103
+ dpId: number;
104
+ /**
105
+ * 本类开锁方式详细列表
106
+ */
107
+ unlockList: {
108
+ unlockId: string;
109
+ opModeId: number;
110
+ unlockName: string;
111
+ unlockAttr: number;
112
+ admin: boolean;
113
+ allocateFlag: number;
114
+ photoUnlock: boolean;
115
+ }[];
116
+ }[];
117
+ /**
118
+ * 用户账号
119
+ */
120
+ userContact: string;
121
+ userType: 10 | 20 | 30 | 40 | 50;
122
+ userListType: "panel_user" | "group_user";
123
+ }
124
+ /**
125
+ * 获取用户列表
126
+ * @param params
127
+ * @returns
128
+ */
129
+ export declare const getUserList: (params: getUserListParams) => Promise<{
130
+ admin: UserListItem[];
131
+ user: UserListItem[];
132
+ hasNext: boolean;
133
+ }>;
134
+ interface GetUserDetailParams {
135
+ devId: string;
136
+ userId: string;
137
+ }
138
+ interface UserDetail {
139
+ allOpenType: number[];
140
+ avatarUrl: string;
141
+ lockUserId: number;
142
+ nickName: string;
143
+ phase: number;
144
+ productAttribute: number;
145
+ status: number;
146
+ supportOpenType: number[];
147
+ uid: string;
148
+ userContact: string;
149
+ userId: string;
150
+ userTimeSet: string;
151
+ userType: number;
152
+ }
153
+ export declare const getUserDetail: (params: GetUserDetailParams) => Promise<UserDetail>;
154
+ export {};
@@ -0,0 +1,59 @@
1
+ import { THING } from "../utils/constant";
2
+ import { requestCloud } from "../utils/device";
3
+
4
+ /**
5
+ * 获取当前登录用户信息
6
+ * @param deviceId
7
+ * @returns
8
+ */
9
+ export const getCurrentUserInfo = deviceId => {
10
+ return requestCloud({
11
+ api: `${THING}.m.device.member.get`,
12
+ version: "3.0",
13
+ data: {
14
+ devId: deviceId,
15
+ dpIds: ""
16
+ }
17
+ });
18
+ };
19
+ export const updateUserTimeSchedule = params => {
20
+ return requestCloud({
21
+ api: `${THING}.m.device.user.time.schedule.update`,
22
+ version: "1.0",
23
+ data: params
24
+ });
25
+ };
26
+ export const addNormalUser = async params => {
27
+ return requestCloud({
28
+ api: "m.smart.scale.history.user.add",
29
+ version: "1.0",
30
+ data: params
31
+ });
32
+ };
33
+ export const removeNormalUser = async params => {
34
+ return requestCloud({
35
+ api: "m.smart.scale.history.user.delete",
36
+ version: "2.0",
37
+ data: params
38
+ });
39
+ };
40
+ /**
41
+ * 获取用户列表
42
+ * @param params
43
+ * @returns
44
+ */
45
+ export const getUserList = params => {
46
+ return requestCloud({
47
+ api: "m.lock.member.family.panel.all.list",
48
+ version: "1.0",
49
+ data: params
50
+ });
51
+ };
52
+ // 注意此 api 与 getUserList 中返回的数据有区别,建议只在 SDK 内部使用
53
+ export const getUserDetail = params => {
54
+ return requestCloud({
55
+ api: `${THING}.m.device.member.detail`,
56
+ version: "4.0",
57
+ data: params
58
+ });
59
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 获取设备的旋转角度
3
+ * @param deviceId
4
+ * @returns
5
+ */
6
+ export declare const getRotateInfo: (deviceId: string) => Promise<{
7
+ angle: number;
8
+ actualAngle: number;
9
+ }>;
@@ -0,0 +1,17 @@
1
+ import { THING } from "../utils/constant";
2
+ import { requestCloud } from "../utils/device";
3
+
4
+ /**
5
+ * 获取设备的旋转角度
6
+ * @param deviceId
7
+ * @returns
8
+ */
9
+ export const getRotateInfo = deviceId => {
10
+ return requestCloud({
11
+ api: `${THING}.m.device.lock.media.rotate.get`,
12
+ version: "1.0",
13
+ data: {
14
+ devId: deviceId
15
+ }
16
+ });
17
+ };
@@ -0,0 +1,175 @@
1
+ /**
2
+ * 门锁支持的 DP
3
+ */
4
+ declare const dpCodes: {
5
+ /**
6
+ * 远程开程 dp
7
+ */
8
+ remoteNoDpKey: string;
9
+ /**
10
+ * 密钥配置
11
+ */
12
+ remoteNoPdSetkey: string;
13
+ /**
14
+ * 同步开锁方式 dp
15
+ */
16
+ synchMethodW: string;
17
+ synchMethod: string;
18
+ /**
19
+ * 解锁方式管理 dp
20
+ */
21
+ unlockMethodCreateW: string;
22
+ unlockMethodCreate: string;
23
+ unlockMethodDelW: string;
24
+ unlockMethodDel: string;
25
+ unlockMethodEditW: string;
26
+ unlockMethodEdit: string;
27
+ tempPwdCreateW: string;
28
+ tempPwdCreate: string;
29
+ tempPwdDelW: string;
30
+ tempPwdDel: string;
31
+ tempPwdEditW: string;
32
+ tempPwdEdit: string;
33
+ /**
34
+ * 普通密码解锁 61
35
+ */
36
+ unlockPassword: string;
37
+ /**
38
+ * 指纹解锁 63
39
+ */
40
+ unlockFingerprint: string;
41
+ /**
42
+ * 指静脉解锁 67
43
+ */
44
+ unlockFingerVein: string;
45
+ /**
46
+ * 掌静脉解锁 66
47
+ */
48
+ unlockHand: string;
49
+ /**
50
+ * 动态密码解锁 90
51
+ */
52
+ unlockDynamic: string;
53
+ /**
54
+ * 钥匙解锁 71
55
+ */
56
+ unlockKey: string;
57
+ /**
58
+ * 卡片解锁 64
59
+ */
60
+ unlockCard: string;
61
+ /**
62
+ * 人脸解锁 65
63
+ */
64
+ unlockFace: string;
65
+ /**
66
+ * 临时密码解锁记录上报 69
67
+ */
68
+ unlockTemporary: string;
69
+ /**
70
+ * 离线密码解锁上报 89
71
+ */
72
+ unlockOfflinePd: string;
73
+ /**
74
+ * 清空离线密码 88
75
+ */
76
+ unlockOfflineClear: string;
77
+ /**
78
+ * 清空单个离线密码 87
79
+ */
80
+ unlockOfflineClearSingle: string;
81
+ /**
82
+ * 远程手机解锁 72
83
+ */
84
+ unlockPhoneRemote: string;
85
+ /**
86
+ * 远程语音解锁 73
87
+ */
88
+ unlockVoiceRemote: string;
89
+ /**
90
+ * 关锁记录 62
91
+ */
92
+ lockRecord: string;
93
+ /**
94
+ * 蓝牙开锁 76
95
+ */
96
+ unlockBle: string;
97
+ /**
98
+ * 蓝牙模块开启开关
99
+ */
100
+ bleControl: string;
101
+ /**
102
+ * 虹膜开锁 68
103
+ */
104
+ unlockEye: string;
105
+ /**
106
+ * 组合开锁 70
107
+ */
108
+ unlockDoubleKit: string;
109
+ /**
110
+ * 大容量组合开锁 74
111
+ */
112
+ unlockDoubleKitW: string;
113
+ /**
114
+ * 门从内侧打开 52
115
+ */
116
+ openInside: string;
117
+ /**
118
+ * 设备操作记录 58
119
+ */
120
+ lockLocalRecord: string;
121
+ /**
122
+ * 设备本地开锁 75
123
+ */
124
+ deviceUnlock: string;
125
+ /**
126
+ * 告警提醒 59
127
+ */
128
+ alarmReminder: string;
129
+ /**
130
+ * 告警 60
131
+ */
132
+ alarmLock: string;
133
+ /**
134
+ * 门铃 53
135
+ */
136
+ doorbell: string;
137
+ /**
138
+ * 劫持告警 98
139
+ */
140
+ hijack: string;
141
+ /**
142
+ * 家人呼叫 99
143
+ */
144
+ familyCall: string;
145
+ /**
146
+ * 短信通知
147
+ */
148
+ message: string;
149
+ /**
150
+ * T0 时间
151
+ */
152
+ passwordOfflineTime: string;
153
+ /**
154
+ * 休眠状态
155
+ */
156
+ linkMode: string;
157
+ wirelessWwake: string;
158
+ dormantTimeSet: string;
159
+ dormantSwitch: string;
160
+ onlineSwitch: string;
161
+ /**
162
+ * aov
163
+ */
164
+ recordModeAovSwitch: string;
165
+ /**
166
+ * sd 卡支持
167
+ */
168
+ sdStatus: string;
169
+ /**
170
+ * 同步或更新信息
171
+ */
172
+ updataInfo: string;
173
+ };
174
+ export declare const latLogDpCodes: string[];
175
+ export default dpCodes;
@@ -0,0 +1,224 @@
1
+ /**
2
+ * 门锁支持的 DP
3
+ */
4
+ const dpCodes = {
5
+ /**
6
+ * 远程开程 dp
7
+ */
8
+ remoteNoDpKey: "remote_no_dp_key",
9
+ /**
10
+ * 密钥配置
11
+ */
12
+ remoteNoPdSetkey: "remote_no_pd_setkey",
13
+ /**
14
+ * 同步开锁方式 dp
15
+ */
16
+ synchMethodW: "synch_method_w",
17
+ synchMethod: "synch_method",
18
+ /**
19
+ * 解锁方式管理 dp
20
+ */
21
+ unlockMethodCreateW: "unlock_method_create_w",
22
+ unlockMethodCreate: "unlock_method_create",
23
+ unlockMethodDelW: "unlock_method_delete_w",
24
+ unlockMethodDel: "unlock_method_delete",
25
+ unlockMethodEditW: "unlock_method_modify_w",
26
+ unlockMethodEdit: "unlock_method_modify",
27
+ // 临时密码操作dp
28
+ tempPwdCreateW: "temporary_password_create_w",
29
+ tempPwdCreate: "temporary_password_creat",
30
+ tempPwdDelW: "temporary_password_delete_w",
31
+ tempPwdDel: "temporary_password_delete",
32
+ tempPwdEditW: "temporary_password_modify_w",
33
+ tempPwdEdit: "temporary_password_modify",
34
+ // 解锁记录dp
35
+ /**
36
+ * 普通密码解锁 61
37
+ */
38
+ unlockPassword: "unlock_password",
39
+ /**
40
+ * 指纹解锁 63
41
+ */
42
+ unlockFingerprint: "unlock_fingerprint",
43
+ /**
44
+ * 指静脉解锁 67
45
+ */
46
+ unlockFingerVein: "unlock_finger_vein",
47
+ /**
48
+ * 掌静脉解锁 66
49
+ */
50
+ unlockHand: "unlock_hand",
51
+ /**
52
+ * 动态密码解锁 90
53
+ */
54
+ unlockDynamic: "unlock_dynamic",
55
+ /**
56
+ * 钥匙解锁 71
57
+ */
58
+ unlockKey: "unlock_key",
59
+ /**
60
+ * 卡片解锁 64
61
+ */
62
+ unlockCard: "unlock_card",
63
+ /**
64
+ * 人脸解锁 65
65
+ */
66
+ unlockFace: "unlock_face",
67
+ /**
68
+ * 临时密码解锁记录上报 69
69
+ */
70
+ unlockTemporary: "unlock_temporary",
71
+ /**
72
+ * 离线密码解锁上报 89
73
+ */
74
+ unlockOfflinePd: "unlock_offline_pd",
75
+ /**
76
+ * 清空离线密码 88
77
+ */
78
+ unlockOfflineClear: "unlock_offline_clear",
79
+ /**
80
+ * 清空单个离线密码 87
81
+ */
82
+ unlockOfflineClearSingle: "unlock_offline_clear_single",
83
+ /**
84
+ * 远程手机解锁 72
85
+ */
86
+ unlockPhoneRemote: "unlock_phone_remote",
87
+ /**
88
+ * 远程语音解锁 73
89
+ */
90
+ unlockVoiceRemote: "unlock_voice_remote",
91
+ /**
92
+ * 关锁记录 62
93
+ */
94
+ lockRecord: "lock_record",
95
+ /**
96
+ * 蓝牙开锁 76
97
+ */
98
+ unlockBle: "unlock_ble",
99
+ /**
100
+ * 蓝牙模块开启开关
101
+ */
102
+ bleControl: 'ble_control',
103
+ /**
104
+ * 虹膜开锁 68
105
+ */
106
+ unlockEye: "unlock_eye",
107
+ /**
108
+ * 组合开锁 70
109
+ */
110
+ unlockDoubleKit: "unlock_double_kit",
111
+ /**
112
+ * 大容量组合开锁 74
113
+ */
114
+ unlockDoubleKitW: "unlock_double_kit_w",
115
+ /**
116
+ * 门从内侧打开 52
117
+ */
118
+ openInside: "open_inside",
119
+ /**
120
+ * 设备操作记录 58
121
+ */
122
+ lockLocalRecord: "lock_local_record",
123
+ /**
124
+ * 设备本地开锁 75
125
+ */
126
+ deviceUnlock: "device_unlock",
127
+ // 告警 相关
128
+ /**
129
+ * 告警提醒 59
130
+ */
131
+ alarmReminder: "alarm_reminder",
132
+ /**
133
+ * 告警 60
134
+ */
135
+ alarmLock: "alarm_lock",
136
+ /**
137
+ * 门铃 53
138
+ */
139
+ doorbell: "doorbell",
140
+ /**
141
+ * 劫持告警 98
142
+ */
143
+ hijack: "hijack",
144
+ /**
145
+ * 家人呼叫 99
146
+ */
147
+ familyCall: "family_call",
148
+ /**
149
+ * 短信通知
150
+ */
151
+ message: "message",
152
+ /**
153
+ * T0 时间
154
+ */
155
+ passwordOfflineTime: "password_offline_time",
156
+ /**
157
+ * 休眠状态
158
+ */
159
+ linkMode: "link_mode",
160
+ wirelessWwake: "wireless_awake",
161
+ dormantTimeSet: "dormant_time_set",
162
+ dormantSwitch: "dormant_switch",
163
+ onlineSwitch: "online_switch",
164
+ /**
165
+ * aov
166
+ */
167
+ recordModeAovSwitch: "record_mode_aov_switch",
168
+ /**
169
+ * sd 卡支持
170
+ */
171
+ sdStatus: "sd_status",
172
+ /**
173
+ * 同步或更新信息
174
+ */
175
+ updataInfo: 'updata_info'
176
+ };
177
+ // 最近一条开门记录数据集合,当收到这些上报时,则刷新数据
178
+ export const latLogDpCodes = [dpCodes.unlockPassword,
179
+ // 61 普通密码解锁
180
+ dpCodes.lockRecord,
181
+ // 62 关锁
182
+ dpCodes.unlockFingerprint,
183
+ // 63
184
+ dpCodes.unlockCard,
185
+ // 64
186
+ dpCodes.unlockFace,
187
+ // 65
188
+ dpCodes.unlockHand,
189
+ // 66
190
+ dpCodes.unlockFingerVein,
191
+ // 67
192
+ dpCodes.unlockBle,
193
+ // 76
194
+ dpCodes.unlockEye,
195
+ // 68
196
+ dpCodes.unlockTemporary,
197
+ // 69
198
+ dpCodes.unlockDoubleKit,
199
+ // 70组合开锁
200
+ dpCodes.unlockDoubleKitW,
201
+ // 74大量组合开锁
202
+ dpCodes.unlockKey,
203
+ // 71
204
+ dpCodes.unlockPhoneRemote,
205
+ // 72
206
+ dpCodes.unlockVoiceRemote,
207
+ // 73
208
+ dpCodes.unlockOfflinePd,
209
+ // 89
210
+ dpCodes.unlockDynamic,
211
+ //90
212
+ dpCodes.alarmLock,
213
+ // 60
214
+ dpCodes.doorbell,
215
+ // 53
216
+ dpCodes.hijack,
217
+ // 98
218
+ dpCodes.unlockOfflineClear,
219
+ // 88
220
+ dpCodes.unlockOfflineClearSingle,
221
+ // 87
222
+ dpCodes.familyCall // 99
223
+ ];
224
+ export default dpCodes;