@cap-kit/people 8.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.
Files changed (42) hide show
  1. package/CapKitPeople.podspec +20 -0
  2. package/LICENSE +21 -0
  3. package/Package.swift +28 -0
  4. package/README.md +1177 -0
  5. package/android/build.gradle +101 -0
  6. package/android/src/main/AndroidManifest.xml +4 -0
  7. package/android/src/main/java/io/capkit/people/PeopleImpl.kt +1003 -0
  8. package/android/src/main/java/io/capkit/people/PeopleObserver.kt +80 -0
  9. package/android/src/main/java/io/capkit/people/PeoplePlugin.kt +766 -0
  10. package/android/src/main/java/io/capkit/people/config/PeopleConfig.kt +44 -0
  11. package/android/src/main/java/io/capkit/people/error/PeopleError.kt +90 -0
  12. package/android/src/main/java/io/capkit/people/error/PeopleErrorMessages.kt +39 -0
  13. package/android/src/main/java/io/capkit/people/logger/PeopleLogger.kt +85 -0
  14. package/android/src/main/java/io/capkit/people/models/ContactModels.kt +64 -0
  15. package/android/src/main/java/io/capkit/people/utils/PeopleUtils.kt +133 -0
  16. package/android/src/main/res/.gitkeep +0 -0
  17. package/dist/docs.json +1449 -0
  18. package/dist/esm/definitions.d.ts +775 -0
  19. package/dist/esm/definitions.js +31 -0
  20. package/dist/esm/definitions.js.map +1 -0
  21. package/dist/esm/index.d.ts +15 -0
  22. package/dist/esm/index.js +18 -0
  23. package/dist/esm/index.js.map +1 -0
  24. package/dist/esm/web.d.ts +120 -0
  25. package/dist/esm/web.js +252 -0
  26. package/dist/esm/web.js.map +1 -0
  27. package/dist/plugin.cjs +300 -0
  28. package/dist/plugin.cjs.map +1 -0
  29. package/dist/plugin.js +303 -0
  30. package/dist/plugin.js.map +1 -0
  31. package/ios/Sources/PeoplePlugin/PeopleImpl.swift +463 -0
  32. package/ios/Sources/PeoplePlugin/PeoplePlugin.swift +627 -0
  33. package/ios/Sources/PeoplePlugin/PrivacyInfo.xcprivacy +13 -0
  34. package/ios/Sources/PeoplePlugin/Utils/PeopleUtils.swift +120 -0
  35. package/ios/Sources/PeoplePlugin/Version.swift +16 -0
  36. package/ios/Sources/PeoplePlugin/config/PeopleConfig.swift +56 -0
  37. package/ios/Sources/PeoplePlugin/error/PeopleError.swift +89 -0
  38. package/ios/Sources/PeoplePlugin/error/PeopleErrorMessages.swift +25 -0
  39. package/ios/Sources/PeoplePlugin/logger/PeopleLogging.swift +69 -0
  40. package/ios/Sources/PeoplePlugin/models/ContactModels.swift +68 -0
  41. package/ios/Tests/PeoplePluginTests/PeoplePluginTests.swift +10 -0
  42. package/package.json +119 -0
@@ -0,0 +1,300 @@
1
+ 'use strict';
2
+
3
+ var core = require('@capacitor/core');
4
+
5
+ /// <reference types="@capacitor/cli" />
6
+ /**
7
+ * Standardized error codes used by the People plugin.
8
+ *
9
+ * These codes are returned when a Promise is rejected and can be caught
10
+ * via try/catch blocks.
11
+ *
12
+ * @since 8.0.0
13
+ */
14
+ exports.PeopleErrorCode = void 0;
15
+ (function (PeopleErrorCode) {
16
+ /** The device does not have the requested hardware or the feature is not available on this platform. */
17
+ PeopleErrorCode["UNAVAILABLE"] = "UNAVAILABLE";
18
+ /** The user cancelled an interactive flow. */
19
+ PeopleErrorCode["CANCELLED"] = "CANCELLED";
20
+ /** The user denied the permission or the feature is disabled by the OS. */
21
+ PeopleErrorCode["PERMISSION_DENIED"] = "PERMISSION_DENIED";
22
+ /** The plugin failed to initialize or perform an operation. */
23
+ PeopleErrorCode["INIT_FAILED"] = "INIT_FAILED";
24
+ /** The input provided to the plugin method is invalid, missing, or malformed. */
25
+ PeopleErrorCode["INVALID_INPUT"] = "INVALID_INPUT";
26
+ /** The requested type is not valid or supported. */
27
+ PeopleErrorCode["UNKNOWN_TYPE"] = "UNKNOWN_TYPE";
28
+ /** The requested resource does not exist. */
29
+ PeopleErrorCode["NOT_FOUND"] = "NOT_FOUND";
30
+ /** The operation conflicts with the current state. */
31
+ PeopleErrorCode["CONFLICT"] = "CONFLICT";
32
+ /** The operation did not complete within the expected time. */
33
+ PeopleErrorCode["TIMEOUT"] = "TIMEOUT";
34
+ })(exports.PeopleErrorCode || (exports.PeopleErrorCode = {}));
35
+
36
+ /**
37
+ * @file index.ts
38
+ * Main entry point for the People Capacitor Plugin.
39
+ * This file handles the registration of the plugin with the Capacitor core runtime
40
+ * and exports all necessary types for consumers.
41
+ */
42
+ /**
43
+ * The People plugin instance.
44
+ * It automatically lazy-loads the web implementation if running in a browser environment.
45
+ * Use this instance to access all people functionality.
46
+ */
47
+ const People = core.registerPlugin('People', {
48
+ web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.PeopleWeb()),
49
+ });
50
+
51
+ /**
52
+ * Class representing the web implementation of the PeoplePlugin.
53
+ * This class extends the WebPlugin class and implements the PeoplePlugin interface.
54
+ * It provides a base implementation for web-based functionality of the plugin.
55
+ */
56
+ class PeopleWeb extends core.WebPlugin {
57
+ constructor() {
58
+ super();
59
+ }
60
+ // -----------------------------------------------------------------------------
61
+ // Capabilities
62
+ // -----------------------------------------------------------------------------
63
+ /**
64
+ * Retrieves the capabilities of the People plugin on the web platform.
65
+ *
66
+ * @returns A promise resolving to the PeopleCapabilities object.
67
+ */
68
+ async getCapabilities() {
69
+ return {
70
+ canRead: false, // Web cannot bulk read the address book
71
+ canWrite: false,
72
+ canObserve: false,
73
+ canManageGroups: false,
74
+ canPickContact: true, // Only the Zero-Permission picker is supported via Contact Picker API
75
+ };
76
+ }
77
+ // -----------------------------------------------------------------------------
78
+ // Permissions
79
+ // -----------------------------------------------------------------------------
80
+ /**
81
+ * Checks the permission status for the plugin.
82
+ *
83
+ * @returns A promise resolving to an object containing the permission states.
84
+ */
85
+ async checkPermissions() {
86
+ return { contacts: 'prompt' };
87
+ }
88
+ /**
89
+ * Requests the necessary permissions for the plugin.
90
+ *
91
+ * @returns A promise resolving to an object containing the updated permission states.
92
+ */
93
+ async requestPermissions() {
94
+ return { contacts: 'prompt' };
95
+ }
96
+ // -----------------------------------------------------------------------------
97
+ // Contact Picking
98
+ // -----------------------------------------------------------------------------
99
+ /**
100
+ * Launches the OS contact picker UI.
101
+ * On Web this uses the Contact Picker API if available.
102
+ * * Architectural rules:
103
+ * - Rejects with CANCELLED on user cancellation to match native behavior.
104
+ */
105
+ async pickContact(options) {
106
+ var _a, _b, _c, _d;
107
+ const contactsNavigator = navigator;
108
+ const props = (options === null || options === void 0 ? void 0 : options.projection) || ['name', 'phones', 'emails'];
109
+ const supportedProjection = new Set([
110
+ 'name',
111
+ 'organization',
112
+ 'birthday',
113
+ 'phones',
114
+ 'emails',
115
+ 'addresses',
116
+ 'urls',
117
+ 'note',
118
+ ]);
119
+ for (const field of props) {
120
+ if (!supportedProjection.has(field)) {
121
+ return Promise.reject({
122
+ message: `Unsupported projection field: ${field}`,
123
+ code: 'UNKNOWN_TYPE',
124
+ });
125
+ }
126
+ }
127
+ // Support for the modern Web Contact Picker API
128
+ if ((_a = contactsNavigator.contacts) === null || _a === void 0 ? void 0 : _a.select) {
129
+ try {
130
+ // Marshalling: Map plugin projections to Web API properties
131
+ const webProps = props.map((p) => {
132
+ if (p === 'phones')
133
+ return 'tel';
134
+ if (p === 'emails')
135
+ return 'email';
136
+ return p;
137
+ });
138
+ const contacts = await contactsNavigator.contacts.select(webProps, { multiple: false });
139
+ // Some browsers return an empty array instead of throwing on cancel; normalize to CANCELLED.
140
+ if (!contacts || contacts.length === 0) {
141
+ return Promise.reject({
142
+ message: 'User cancelled selection',
143
+ code: 'CANCELLED',
144
+ });
145
+ }
146
+ const raw = contacts[0];
147
+ return {
148
+ contact: {
149
+ id: 'web-ref',
150
+ name: { display: ((_b = raw.name) === null || _b === void 0 ? void 0 : _b[0]) || 'Unknown' },
151
+ phones: ((_c = raw.tel) === null || _c === void 0 ? void 0 : _c.map((t) => ({ number: t }))) || [],
152
+ emails: ((_d = raw.email) === null || _d === void 0 ? void 0 : _d.map((e) => ({ address: e }))) || [],
153
+ },
154
+ };
155
+ }
156
+ catch (e) {
157
+ const err = e;
158
+ // Map specific Web API cancellation to the standardized CANCELLED code
159
+ if (err.name === 'AbortError') {
160
+ return Promise.reject({
161
+ message: 'User cancelled selection',
162
+ code: 'CANCELLED',
163
+ });
164
+ }
165
+ throw this.unavailable(err.message || 'Web Contact Picker API failed');
166
+ }
167
+ }
168
+ throw this.unavailable('Native Contact Picker not available in this browser.');
169
+ }
170
+ // -----------------------------------------------------------------------------
171
+ // Directory Access (Not supported on Web)
172
+ // -----------------------------------------------------------------------------
173
+ /**
174
+ * Retrieves contacts from the system directory.
175
+ * @param _options - Options for retrieving contacts.
176
+ *
177
+ * @returns A promise resolving to the contacts result.
178
+ */
179
+ async getContacts() {
180
+ throw this.unimplemented('getContacts is not available on Web.');
181
+ }
182
+ /**
183
+ * Retrieves a single contact by ID.
184
+ * @param _options - Options containing the contact ID.
185
+ *
186
+ * @returns A promise resolving to the contact.
187
+ */
188
+ async getContact() {
189
+ throw this.unimplemented('getContact is not available on Web.');
190
+ }
191
+ /**
192
+ * Searches contacts in the system directory.
193
+ * @param _options - Options for searching contacts.
194
+ *
195
+ * @returns A promise resolving to the contacts result.
196
+ */
197
+ async searchPeople() {
198
+ throw this.unimplemented('searchPeople is not available on Web.');
199
+ }
200
+ // -----------------------------------------------------------------------------
201
+ // Group Management (Not supported on Web)
202
+ // -----------------------------------------------------------------------------
203
+ /**
204
+ * Lists all available contact groups.
205
+ * @returns A promise that is rejected because this feature is not available on Web.
206
+ */
207
+ async listGroups() {
208
+ throw this.unimplemented('listGroups is not available on Web.');
209
+ }
210
+ /**
211
+ * Creates a new contact group.
212
+ * @returns A promise that is rejected because this feature is not available on Web.
213
+ */
214
+ async createGroup(_options) {
215
+ throw this.unimplemented('createGroup is not available on Web.');
216
+ }
217
+ /**
218
+ * Deletes a contact group.
219
+ * @returns A promise that is rejected because this feature is not available on Web.
220
+ */
221
+ async deleteGroup(_options) {
222
+ throw this.unimplemented('deleteGroup is not available on Web.');
223
+ }
224
+ /**
225
+ * Adds contacts to a group.
226
+ * @returns A promise that is rejected because this feature is not available on Web.
227
+ */
228
+ async addPeopleToGroup(_options) {
229
+ throw this.unimplemented('addPeopleToGroup is not available on Web.');
230
+ }
231
+ /**
232
+ * Removes contacts from a group.
233
+ * @returns A promise that is rejected because this feature is not available on Web.
234
+ */
235
+ async removePeopleFromGroup(_options) {
236
+ throw this.unimplemented('removePeopleFromGroup is not available on Web.');
237
+ }
238
+ // -----------------------------------------------------------------------------
239
+ // CRUD (Not supported on Web)
240
+ // -----------------------------------------------------------------------------
241
+ /**
242
+ * Creates a new contact.
243
+ * @returns A promise that is rejected because this feature is not available on Web.
244
+ */
245
+ async createContact(_options) {
246
+ throw this.unimplemented('createContact is not available on Web.');
247
+ }
248
+ /**
249
+ * Updates an existing contact.
250
+ * @returns A promise that is rejected because this feature is not available on Web.
251
+ */
252
+ async updateContact(_options) {
253
+ throw this.unimplemented('updateContact is not available on Web.');
254
+ }
255
+ /**
256
+ * Deletes a contact.
257
+ * @returns A promise that is rejected because this feature is not available on Web.
258
+ */
259
+ async deleteContact(_options) {
260
+ throw this.unimplemented('deleteContact is not available on Web.');
261
+ }
262
+ /**
263
+ * Merges two contacts.
264
+ * @returns A promise that is rejected because this feature is not available on Web.
265
+ */
266
+ async mergeContacts(_options) {
267
+ throw this.unimplemented('mergeContacts is not available on Web.');
268
+ }
269
+ // -----------------------------------------------------------------------------
270
+ // Plugin Info
271
+ // -----------------------------------------------------------------------------
272
+ /**
273
+ * Returns the plugin version.
274
+ *
275
+ * On the Web, this value represents the JavaScript package version
276
+ * rather than a native implementation.
277
+ */
278
+ async getPluginVersion() {
279
+ return { version: 'web' };
280
+ }
281
+ // -----------------------------------------------------------------------------
282
+ // Listener Handling
283
+ // -----------------------------------------------------------------------------
284
+ /**
285
+ * Cleanup all listeners
286
+ *
287
+ * @returns A promise that resolves when all listeners are removed.
288
+ */
289
+ async removeAllListeners() {
290
+ super.removeAllListeners();
291
+ }
292
+ }
293
+
294
+ var web = /*#__PURE__*/Object.freeze({
295
+ __proto__: null,
296
+ PeopleWeb: PeopleWeb
297
+ });
298
+
299
+ exports.People = People;
300
+ //# sourceMappingURL=plugin.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.cjs","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["/// <reference types=\"@capacitor/cli\" />\n/**\n * Standardized error codes used by the People plugin.\n *\n * These codes are returned when a Promise is rejected and can be caught\n * via try/catch blocks.\n *\n * @since 8.0.0\n */\nexport var PeopleErrorCode;\n(function (PeopleErrorCode) {\n /** The device does not have the requested hardware or the feature is not available on this platform. */\n PeopleErrorCode[\"UNAVAILABLE\"] = \"UNAVAILABLE\";\n /** The user cancelled an interactive flow. */\n PeopleErrorCode[\"CANCELLED\"] = \"CANCELLED\";\n /** The user denied the permission or the feature is disabled by the OS. */\n PeopleErrorCode[\"PERMISSION_DENIED\"] = \"PERMISSION_DENIED\";\n /** The plugin failed to initialize or perform an operation. */\n PeopleErrorCode[\"INIT_FAILED\"] = \"INIT_FAILED\";\n /** The input provided to the plugin method is invalid, missing, or malformed. */\n PeopleErrorCode[\"INVALID_INPUT\"] = \"INVALID_INPUT\";\n /** The requested type is not valid or supported. */\n PeopleErrorCode[\"UNKNOWN_TYPE\"] = \"UNKNOWN_TYPE\";\n /** The requested resource does not exist. */\n PeopleErrorCode[\"NOT_FOUND\"] = \"NOT_FOUND\";\n /** The operation conflicts with the current state. */\n PeopleErrorCode[\"CONFLICT\"] = \"CONFLICT\";\n /** The operation did not complete within the expected time. */\n PeopleErrorCode[\"TIMEOUT\"] = \"TIMEOUT\";\n})(PeopleErrorCode || (PeopleErrorCode = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * @file index.ts\n * Main entry point for the People Capacitor Plugin.\n * This file handles the registration of the plugin with the Capacitor core runtime\n * and exports all necessary types for consumers.\n */\nimport { registerPlugin } from '@capacitor/core';\n/**\n * The People plugin instance.\n * It automatically lazy-loads the web implementation if running in a browser environment.\n * Use this instance to access all people functionality.\n */\nconst People = registerPlugin('People', {\n web: () => import('./web').then((m) => new m.PeopleWeb()),\n});\nexport * from './definitions';\nexport { People };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\n/**\n * Class representing the web implementation of the PeoplePlugin.\n * This class extends the WebPlugin class and implements the PeoplePlugin interface.\n * It provides a base implementation for web-based functionality of the plugin.\n */\nexport class PeopleWeb extends WebPlugin {\n constructor() {\n super();\n }\n // -----------------------------------------------------------------------------\n // Capabilities\n // -----------------------------------------------------------------------------\n /**\n * Retrieves the capabilities of the People plugin on the web platform.\n *\n * @returns A promise resolving to the PeopleCapabilities object.\n */\n async getCapabilities() {\n return {\n canRead: false, // Web cannot bulk read the address book\n canWrite: false,\n canObserve: false,\n canManageGroups: false,\n canPickContact: true, // Only the Zero-Permission picker is supported via Contact Picker API\n };\n }\n // -----------------------------------------------------------------------------\n // Permissions\n // -----------------------------------------------------------------------------\n /**\n * Checks the permission status for the plugin.\n *\n * @returns A promise resolving to an object containing the permission states.\n */\n async checkPermissions() {\n return { contacts: 'prompt' };\n }\n /**\n * Requests the necessary permissions for the plugin.\n *\n * @returns A promise resolving to an object containing the updated permission states.\n */\n async requestPermissions() {\n return { contacts: 'prompt' };\n }\n // -----------------------------------------------------------------------------\n // Contact Picking\n // -----------------------------------------------------------------------------\n /**\n * Launches the OS contact picker UI.\n * On Web this uses the Contact Picker API if available.\n * * Architectural rules:\n * - Rejects with CANCELLED on user cancellation to match native behavior.\n */\n async pickContact(options) {\n var _a, _b, _c, _d;\n const contactsNavigator = navigator;\n const props = (options === null || options === void 0 ? void 0 : options.projection) || ['name', 'phones', 'emails'];\n const supportedProjection = new Set([\n 'name',\n 'organization',\n 'birthday',\n 'phones',\n 'emails',\n 'addresses',\n 'urls',\n 'note',\n ]);\n for (const field of props) {\n if (!supportedProjection.has(field)) {\n return Promise.reject({\n message: `Unsupported projection field: ${field}`,\n code: 'UNKNOWN_TYPE',\n });\n }\n }\n // Support for the modern Web Contact Picker API\n if ((_a = contactsNavigator.contacts) === null || _a === void 0 ? void 0 : _a.select) {\n try {\n // Marshalling: Map plugin projections to Web API properties\n const webProps = props.map((p) => {\n if (p === 'phones')\n return 'tel';\n if (p === 'emails')\n return 'email';\n return p;\n });\n const contacts = await contactsNavigator.contacts.select(webProps, { multiple: false });\n // Some browsers return an empty array instead of throwing on cancel; normalize to CANCELLED.\n if (!contacts || contacts.length === 0) {\n return Promise.reject({\n message: 'User cancelled selection',\n code: 'CANCELLED',\n });\n }\n const raw = contacts[0];\n return {\n contact: {\n id: 'web-ref',\n name: { display: ((_b = raw.name) === null || _b === void 0 ? void 0 : _b[0]) || 'Unknown' },\n phones: ((_c = raw.tel) === null || _c === void 0 ? void 0 : _c.map((t) => ({ number: t }))) || [],\n emails: ((_d = raw.email) === null || _d === void 0 ? void 0 : _d.map((e) => ({ address: e }))) || [],\n },\n };\n }\n catch (e) {\n const err = e;\n // Map specific Web API cancellation to the standardized CANCELLED code\n if (err.name === 'AbortError') {\n return Promise.reject({\n message: 'User cancelled selection',\n code: 'CANCELLED',\n });\n }\n throw this.unavailable(err.message || 'Web Contact Picker API failed');\n }\n }\n throw this.unavailable('Native Contact Picker not available in this browser.');\n }\n // -----------------------------------------------------------------------------\n // Directory Access (Not supported on Web)\n // -----------------------------------------------------------------------------\n /**\n * Retrieves contacts from the system directory.\n * @param _options - Options for retrieving contacts.\n *\n * @returns A promise resolving to the contacts result.\n */\n async getContacts() {\n throw this.unimplemented('getContacts is not available on Web.');\n }\n /**\n * Retrieves a single contact by ID.\n * @param _options - Options containing the contact ID.\n *\n * @returns A promise resolving to the contact.\n */\n async getContact() {\n throw this.unimplemented('getContact is not available on Web.');\n }\n /**\n * Searches contacts in the system directory.\n * @param _options - Options for searching contacts.\n *\n * @returns A promise resolving to the contacts result.\n */\n async searchPeople() {\n throw this.unimplemented('searchPeople is not available on Web.');\n }\n // -----------------------------------------------------------------------------\n // Group Management (Not supported on Web)\n // -----------------------------------------------------------------------------\n /**\n * Lists all available contact groups.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async listGroups() {\n throw this.unimplemented('listGroups is not available on Web.');\n }\n /**\n * Creates a new contact group.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async createGroup(_options) {\n void _options;\n throw this.unimplemented('createGroup is not available on Web.');\n }\n /**\n * Deletes a contact group.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async deleteGroup(_options) {\n void _options;\n throw this.unimplemented('deleteGroup is not available on Web.');\n }\n /**\n * Adds contacts to a group.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async addPeopleToGroup(_options) {\n void _options;\n throw this.unimplemented('addPeopleToGroup is not available on Web.');\n }\n /**\n * Removes contacts from a group.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async removePeopleFromGroup(_options) {\n void _options;\n throw this.unimplemented('removePeopleFromGroup is not available on Web.');\n }\n // -----------------------------------------------------------------------------\n // CRUD (Not supported on Web)\n // -----------------------------------------------------------------------------\n /**\n * Creates a new contact.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async createContact(_options) {\n void _options;\n throw this.unimplemented('createContact is not available on Web.');\n }\n /**\n * Updates an existing contact.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async updateContact(_options) {\n void _options;\n throw this.unimplemented('updateContact is not available on Web.');\n }\n /**\n * Deletes a contact.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async deleteContact(_options) {\n void _options;\n throw this.unimplemented('deleteContact is not available on Web.');\n }\n /**\n * Merges two contacts.\n * @returns A promise that is rejected because this feature is not available on Web.\n */\n async mergeContacts(_options) {\n void _options;\n throw this.unimplemented('mergeContacts is not available on Web.');\n }\n // -----------------------------------------------------------------------------\n // Plugin Info\n // -----------------------------------------------------------------------------\n /**\n * Returns the plugin version.\n *\n * On the Web, this value represents the JavaScript package version\n * rather than a native implementation.\n */\n async getPluginVersion() {\n return { version: 'web' };\n }\n // -----------------------------------------------------------------------------\n // Listener Handling\n // -----------------------------------------------------------------------------\n /**\n * Cleanup all listeners\n *\n * @returns A promise that resolves when all listeners are removed.\n */\n async removeAllListeners() {\n super.removeAllListeners();\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["PeopleErrorCode","registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js ADDED
@@ -0,0 +1,303 @@
1
+ var capacitorPeople = (function (exports, core) {
2
+ 'use strict';
3
+
4
+ /// <reference types="@capacitor/cli" />
5
+ /**
6
+ * Standardized error codes used by the People plugin.
7
+ *
8
+ * These codes are returned when a Promise is rejected and can be caught
9
+ * via try/catch blocks.
10
+ *
11
+ * @since 8.0.0
12
+ */
13
+ exports.PeopleErrorCode = void 0;
14
+ (function (PeopleErrorCode) {
15
+ /** The device does not have the requested hardware or the feature is not available on this platform. */
16
+ PeopleErrorCode["UNAVAILABLE"] = "UNAVAILABLE";
17
+ /** The user cancelled an interactive flow. */
18
+ PeopleErrorCode["CANCELLED"] = "CANCELLED";
19
+ /** The user denied the permission or the feature is disabled by the OS. */
20
+ PeopleErrorCode["PERMISSION_DENIED"] = "PERMISSION_DENIED";
21
+ /** The plugin failed to initialize or perform an operation. */
22
+ PeopleErrorCode["INIT_FAILED"] = "INIT_FAILED";
23
+ /** The input provided to the plugin method is invalid, missing, or malformed. */
24
+ PeopleErrorCode["INVALID_INPUT"] = "INVALID_INPUT";
25
+ /** The requested type is not valid or supported. */
26
+ PeopleErrorCode["UNKNOWN_TYPE"] = "UNKNOWN_TYPE";
27
+ /** The requested resource does not exist. */
28
+ PeopleErrorCode["NOT_FOUND"] = "NOT_FOUND";
29
+ /** The operation conflicts with the current state. */
30
+ PeopleErrorCode["CONFLICT"] = "CONFLICT";
31
+ /** The operation did not complete within the expected time. */
32
+ PeopleErrorCode["TIMEOUT"] = "TIMEOUT";
33
+ })(exports.PeopleErrorCode || (exports.PeopleErrorCode = {}));
34
+
35
+ /**
36
+ * @file index.ts
37
+ * Main entry point for the People Capacitor Plugin.
38
+ * This file handles the registration of the plugin with the Capacitor core runtime
39
+ * and exports all necessary types for consumers.
40
+ */
41
+ /**
42
+ * The People plugin instance.
43
+ * It automatically lazy-loads the web implementation if running in a browser environment.
44
+ * Use this instance to access all people functionality.
45
+ */
46
+ const People = core.registerPlugin('People', {
47
+ web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.PeopleWeb()),
48
+ });
49
+
50
+ /**
51
+ * Class representing the web implementation of the PeoplePlugin.
52
+ * This class extends the WebPlugin class and implements the PeoplePlugin interface.
53
+ * It provides a base implementation for web-based functionality of the plugin.
54
+ */
55
+ class PeopleWeb extends core.WebPlugin {
56
+ constructor() {
57
+ super();
58
+ }
59
+ // -----------------------------------------------------------------------------
60
+ // Capabilities
61
+ // -----------------------------------------------------------------------------
62
+ /**
63
+ * Retrieves the capabilities of the People plugin on the web platform.
64
+ *
65
+ * @returns A promise resolving to the PeopleCapabilities object.
66
+ */
67
+ async getCapabilities() {
68
+ return {
69
+ canRead: false, // Web cannot bulk read the address book
70
+ canWrite: false,
71
+ canObserve: false,
72
+ canManageGroups: false,
73
+ canPickContact: true, // Only the Zero-Permission picker is supported via Contact Picker API
74
+ };
75
+ }
76
+ // -----------------------------------------------------------------------------
77
+ // Permissions
78
+ // -----------------------------------------------------------------------------
79
+ /**
80
+ * Checks the permission status for the plugin.
81
+ *
82
+ * @returns A promise resolving to an object containing the permission states.
83
+ */
84
+ async checkPermissions() {
85
+ return { contacts: 'prompt' };
86
+ }
87
+ /**
88
+ * Requests the necessary permissions for the plugin.
89
+ *
90
+ * @returns A promise resolving to an object containing the updated permission states.
91
+ */
92
+ async requestPermissions() {
93
+ return { contacts: 'prompt' };
94
+ }
95
+ // -----------------------------------------------------------------------------
96
+ // Contact Picking
97
+ // -----------------------------------------------------------------------------
98
+ /**
99
+ * Launches the OS contact picker UI.
100
+ * On Web this uses the Contact Picker API if available.
101
+ * * Architectural rules:
102
+ * - Rejects with CANCELLED on user cancellation to match native behavior.
103
+ */
104
+ async pickContact(options) {
105
+ var _a, _b, _c, _d;
106
+ const contactsNavigator = navigator;
107
+ const props = (options === null || options === void 0 ? void 0 : options.projection) || ['name', 'phones', 'emails'];
108
+ const supportedProjection = new Set([
109
+ 'name',
110
+ 'organization',
111
+ 'birthday',
112
+ 'phones',
113
+ 'emails',
114
+ 'addresses',
115
+ 'urls',
116
+ 'note',
117
+ ]);
118
+ for (const field of props) {
119
+ if (!supportedProjection.has(field)) {
120
+ return Promise.reject({
121
+ message: `Unsupported projection field: ${field}`,
122
+ code: 'UNKNOWN_TYPE',
123
+ });
124
+ }
125
+ }
126
+ // Support for the modern Web Contact Picker API
127
+ if ((_a = contactsNavigator.contacts) === null || _a === void 0 ? void 0 : _a.select) {
128
+ try {
129
+ // Marshalling: Map plugin projections to Web API properties
130
+ const webProps = props.map((p) => {
131
+ if (p === 'phones')
132
+ return 'tel';
133
+ if (p === 'emails')
134
+ return 'email';
135
+ return p;
136
+ });
137
+ const contacts = await contactsNavigator.contacts.select(webProps, { multiple: false });
138
+ // Some browsers return an empty array instead of throwing on cancel; normalize to CANCELLED.
139
+ if (!contacts || contacts.length === 0) {
140
+ return Promise.reject({
141
+ message: 'User cancelled selection',
142
+ code: 'CANCELLED',
143
+ });
144
+ }
145
+ const raw = contacts[0];
146
+ return {
147
+ contact: {
148
+ id: 'web-ref',
149
+ name: { display: ((_b = raw.name) === null || _b === void 0 ? void 0 : _b[0]) || 'Unknown' },
150
+ phones: ((_c = raw.tel) === null || _c === void 0 ? void 0 : _c.map((t) => ({ number: t }))) || [],
151
+ emails: ((_d = raw.email) === null || _d === void 0 ? void 0 : _d.map((e) => ({ address: e }))) || [],
152
+ },
153
+ };
154
+ }
155
+ catch (e) {
156
+ const err = e;
157
+ // Map specific Web API cancellation to the standardized CANCELLED code
158
+ if (err.name === 'AbortError') {
159
+ return Promise.reject({
160
+ message: 'User cancelled selection',
161
+ code: 'CANCELLED',
162
+ });
163
+ }
164
+ throw this.unavailable(err.message || 'Web Contact Picker API failed');
165
+ }
166
+ }
167
+ throw this.unavailable('Native Contact Picker not available in this browser.');
168
+ }
169
+ // -----------------------------------------------------------------------------
170
+ // Directory Access (Not supported on Web)
171
+ // -----------------------------------------------------------------------------
172
+ /**
173
+ * Retrieves contacts from the system directory.
174
+ * @param _options - Options for retrieving contacts.
175
+ *
176
+ * @returns A promise resolving to the contacts result.
177
+ */
178
+ async getContacts() {
179
+ throw this.unimplemented('getContacts is not available on Web.');
180
+ }
181
+ /**
182
+ * Retrieves a single contact by ID.
183
+ * @param _options - Options containing the contact ID.
184
+ *
185
+ * @returns A promise resolving to the contact.
186
+ */
187
+ async getContact() {
188
+ throw this.unimplemented('getContact is not available on Web.');
189
+ }
190
+ /**
191
+ * Searches contacts in the system directory.
192
+ * @param _options - Options for searching contacts.
193
+ *
194
+ * @returns A promise resolving to the contacts result.
195
+ */
196
+ async searchPeople() {
197
+ throw this.unimplemented('searchPeople is not available on Web.');
198
+ }
199
+ // -----------------------------------------------------------------------------
200
+ // Group Management (Not supported on Web)
201
+ // -----------------------------------------------------------------------------
202
+ /**
203
+ * Lists all available contact groups.
204
+ * @returns A promise that is rejected because this feature is not available on Web.
205
+ */
206
+ async listGroups() {
207
+ throw this.unimplemented('listGroups is not available on Web.');
208
+ }
209
+ /**
210
+ * Creates a new contact group.
211
+ * @returns A promise that is rejected because this feature is not available on Web.
212
+ */
213
+ async createGroup(_options) {
214
+ throw this.unimplemented('createGroup is not available on Web.');
215
+ }
216
+ /**
217
+ * Deletes a contact group.
218
+ * @returns A promise that is rejected because this feature is not available on Web.
219
+ */
220
+ async deleteGroup(_options) {
221
+ throw this.unimplemented('deleteGroup is not available on Web.');
222
+ }
223
+ /**
224
+ * Adds contacts to a group.
225
+ * @returns A promise that is rejected because this feature is not available on Web.
226
+ */
227
+ async addPeopleToGroup(_options) {
228
+ throw this.unimplemented('addPeopleToGroup is not available on Web.');
229
+ }
230
+ /**
231
+ * Removes contacts from a group.
232
+ * @returns A promise that is rejected because this feature is not available on Web.
233
+ */
234
+ async removePeopleFromGroup(_options) {
235
+ throw this.unimplemented('removePeopleFromGroup is not available on Web.');
236
+ }
237
+ // -----------------------------------------------------------------------------
238
+ // CRUD (Not supported on Web)
239
+ // -----------------------------------------------------------------------------
240
+ /**
241
+ * Creates a new contact.
242
+ * @returns A promise that is rejected because this feature is not available on Web.
243
+ */
244
+ async createContact(_options) {
245
+ throw this.unimplemented('createContact is not available on Web.');
246
+ }
247
+ /**
248
+ * Updates an existing contact.
249
+ * @returns A promise that is rejected because this feature is not available on Web.
250
+ */
251
+ async updateContact(_options) {
252
+ throw this.unimplemented('updateContact is not available on Web.');
253
+ }
254
+ /**
255
+ * Deletes a contact.
256
+ * @returns A promise that is rejected because this feature is not available on Web.
257
+ */
258
+ async deleteContact(_options) {
259
+ throw this.unimplemented('deleteContact is not available on Web.');
260
+ }
261
+ /**
262
+ * Merges two contacts.
263
+ * @returns A promise that is rejected because this feature is not available on Web.
264
+ */
265
+ async mergeContacts(_options) {
266
+ throw this.unimplemented('mergeContacts is not available on Web.');
267
+ }
268
+ // -----------------------------------------------------------------------------
269
+ // Plugin Info
270
+ // -----------------------------------------------------------------------------
271
+ /**
272
+ * Returns the plugin version.
273
+ *
274
+ * On the Web, this value represents the JavaScript package version
275
+ * rather than a native implementation.
276
+ */
277
+ async getPluginVersion() {
278
+ return { version: 'web' };
279
+ }
280
+ // -----------------------------------------------------------------------------
281
+ // Listener Handling
282
+ // -----------------------------------------------------------------------------
283
+ /**
284
+ * Cleanup all listeners
285
+ *
286
+ * @returns A promise that resolves when all listeners are removed.
287
+ */
288
+ async removeAllListeners() {
289
+ super.removeAllListeners();
290
+ }
291
+ }
292
+
293
+ var web = /*#__PURE__*/Object.freeze({
294
+ __proto__: null,
295
+ PeopleWeb: PeopleWeb
296
+ });
297
+
298
+ exports.People = People;
299
+
300
+ return exports;
301
+
302
+ })({}, capacitorExports);
303
+ //# sourceMappingURL=plugin.js.map