@milkinteractive/react-native-age-range 1.0.5 → 1.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.
- package/README.md +125 -0
- package/ios/StoreAgeSignalsNativeModules.mm +37 -10
- package/ios/StoreAgeSignalsNativeModules.swift +202 -11
- package/lib/commonjs/index.js +207 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +204 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +138 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.tsx +245 -1
package/lib/commonjs/index.js
CHANGED
|
@@ -4,9 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getAndroidPlayAgeRangeStatus = getAndroidPlayAgeRangeStatus;
|
|
7
|
+
exports.getIOSKnownCommunicationHandles = getIOSKnownCommunicationHandles;
|
|
7
8
|
exports.isAndroidEligibleForAgeFeatures = isAndroidEligibleForAgeFeatures;
|
|
8
9
|
exports.isIOSEligibleForAgeFeatures = isIOSEligibleForAgeFeatures;
|
|
10
|
+
exports.requestIOSCommunicationPermission = requestIOSCommunicationPermission;
|
|
9
11
|
exports.requestIOSDeclaredAgeRange = requestIOSDeclaredAgeRange;
|
|
12
|
+
exports.requestIOSSignificantChangeApproval = requestIOSSignificantChangeApproval;
|
|
10
13
|
var _reactNative = require("react-native");
|
|
11
14
|
const LINKING_ERROR = `The package '@milkinteractive/react-native-age-range' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
|
|
12
15
|
ios: "- You have run 'pod install'\n",
|
|
@@ -49,6 +52,45 @@ const StoreAgeSignalsNativeModules = _reactNative.NativeModules.StoreAgeSignalsN
|
|
|
49
52
|
|
|
50
53
|
// Eligibility Result
|
|
51
54
|
|
|
55
|
+
// ========== PERMISSIONKIT TYPES (iOS 26+) ==========
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Status of significant change approval request.
|
|
59
|
+
* - approved: Parent/guardian approved the change
|
|
60
|
+
* - denied: Parent/guardian denied the change
|
|
61
|
+
* - pending: Request has been sent, awaiting response
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Result of significant change approval request.
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Handle type for communication contacts.
|
|
70
|
+
* - phoneNumber: Phone number identifier
|
|
71
|
+
* - email: Email address identifier
|
|
72
|
+
* - custom: Custom identifier (username, handle, etc.)
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Contact information for communication permission request.
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Communication actions that can be requested.
|
|
81
|
+
* - message: Text/chat messaging
|
|
82
|
+
* - call: Voice calls
|
|
83
|
+
* - video: Video calls
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Result of communication permission request.
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Result of known handles check.
|
|
92
|
+
*/
|
|
93
|
+
|
|
52
94
|
/**
|
|
53
95
|
* Retrieves the age range declaration status from Google Play's Age Signals API.
|
|
54
96
|
* @platform android
|
|
@@ -64,12 +106,16 @@ function getAndroidPlayAgeRangeStatus(config) {
|
|
|
64
106
|
return StoreAgeSignalsNativeModules.getAndroidPlayAgeRangeStatus(config || {});
|
|
65
107
|
}
|
|
66
108
|
|
|
109
|
+
// Minimum iOS version required for DeclaredAgeRange API
|
|
110
|
+
const IOS_MIN_VERSION_DECLARED_AGE_RANGE = 26.0;
|
|
111
|
+
|
|
67
112
|
/**
|
|
68
113
|
* Requests age range declaration from iOS Declared Age Range API.
|
|
69
114
|
* @platform ios
|
|
70
115
|
* @param firstThresholdAge First age threshold (required, e.g., 13)
|
|
71
116
|
* @param secondThresholdAge Second age threshold (optional, e.g., 17)
|
|
72
117
|
* @param thirdThresholdAge Third age threshold (optional, e.g., 21)
|
|
118
|
+
* @remarks Requires iOS 26.0+. Returns error on older iOS versions.
|
|
73
119
|
*/
|
|
74
120
|
function requestIOSDeclaredAgeRange(firstThresholdAge, secondThresholdAge, thirdThresholdAge) {
|
|
75
121
|
if (_reactNative.Platform.OS !== 'ios') {
|
|
@@ -82,15 +128,31 @@ function requestIOSDeclaredAgeRange(firstThresholdAge, secondThresholdAge, third
|
|
|
82
128
|
error: 'This method is only available on iOS'
|
|
83
129
|
});
|
|
84
130
|
}
|
|
131
|
+
|
|
132
|
+
// Early return for iOS versions below 26 to prevent native bridge errors
|
|
133
|
+
const iosVersion = parseFloat(String(_reactNative.Platform.Version));
|
|
134
|
+
if (iosVersion < IOS_MIN_VERSION_DECLARED_AGE_RANGE) {
|
|
135
|
+
return Promise.resolve({
|
|
136
|
+
status: null,
|
|
137
|
+
lowerBound: null,
|
|
138
|
+
upperBound: null,
|
|
139
|
+
ageRangeDeclaration: null,
|
|
140
|
+
parentalControls: null,
|
|
141
|
+
error: `Requires iOS ${IOS_MIN_VERSION_DECLARED_AGE_RANGE}.0+. Current version: iOS ${iosVersion}`
|
|
142
|
+
});
|
|
143
|
+
}
|
|
85
144
|
return StoreAgeSignalsNativeModules.requestIOSDeclaredAgeRange(firstThresholdAge, secondThresholdAge ?? null, thirdThresholdAge ?? null);
|
|
86
145
|
}
|
|
87
146
|
|
|
147
|
+
// Minimum iOS version required for isEligibleForAgeFeatures API
|
|
148
|
+
const IOS_MIN_VERSION_ELIGIBLE_CHECK = 26.2;
|
|
149
|
+
|
|
88
150
|
/**
|
|
89
151
|
* Checks if the current user is eligible for age verification features on iOS.
|
|
90
152
|
* This determines if age checks need to be applied (e.g., user is in an applicable region like Texas).
|
|
91
153
|
* @platform ios
|
|
92
154
|
* @returns Promise<DeclaredAgeEligibilityResult> - Object containing isEligible boolean and error string
|
|
93
|
-
* @remarks Requires iOS 26.
|
|
155
|
+
* @remarks Requires iOS 26.2+. Returns isEligible: false with error message if not available.
|
|
94
156
|
*/
|
|
95
157
|
function isIOSEligibleForAgeFeatures() {
|
|
96
158
|
if (_reactNative.Platform.OS !== 'ios') {
|
|
@@ -99,6 +161,15 @@ function isIOSEligibleForAgeFeatures() {
|
|
|
99
161
|
error: 'This method is only available on iOS'
|
|
100
162
|
});
|
|
101
163
|
}
|
|
164
|
+
|
|
165
|
+
// Early return for iOS versions below 26 to prevent native bridge errors
|
|
166
|
+
const iosVersion = parseFloat(String(_reactNative.Platform.Version));
|
|
167
|
+
if (iosVersion < IOS_MIN_VERSION_ELIGIBLE_CHECK) {
|
|
168
|
+
return Promise.resolve({
|
|
169
|
+
isEligible: false,
|
|
170
|
+
error: `Requires iOS ${IOS_MIN_VERSION_ELIGIBLE_CHECK}.0+. Current version: iOS ${iosVersion}`
|
|
171
|
+
});
|
|
172
|
+
}
|
|
102
173
|
return StoreAgeSignalsNativeModules.isEligibleForAgeFeatures();
|
|
103
174
|
}
|
|
104
175
|
|
|
@@ -118,4 +189,139 @@ function isAndroidEligibleForAgeFeatures() {
|
|
|
118
189
|
}
|
|
119
190
|
return StoreAgeSignalsNativeModules.isEligibleForAgeFeatures();
|
|
120
191
|
}
|
|
192
|
+
|
|
193
|
+
// ========== PERMISSIONKIT FUNCTIONS (iOS 26.2+) ==========
|
|
194
|
+
|
|
195
|
+
// Minimum iOS version required for PermissionKit APIs
|
|
196
|
+
const IOS_MIN_VERSION_PERMISSIONKIT = 26.2;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Requests parental approval for significant app changes (iOS PermissionKit).
|
|
200
|
+
*
|
|
201
|
+
* Use this when `parentalControls.significantAppChangeApprovalRequired` is `true`
|
|
202
|
+
* from the `requestIOSDeclaredAgeRange()` response.
|
|
203
|
+
*
|
|
204
|
+
* This shows a system dialog to request parental consent for significant app updates.
|
|
205
|
+
* The parent/guardian will receive a notification via Messages.
|
|
206
|
+
*
|
|
207
|
+
* @platform ios
|
|
208
|
+
* @requires iOS 26.2+
|
|
209
|
+
* @returns Promise<SignificantChangeResult> - Contains status ('pending', 'approved', 'denied') and error
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```typescript
|
|
213
|
+
* const ageResult = await requestIOSDeclaredAgeRange(13, 17, 21);
|
|
214
|
+
* if (ageResult.parentalControls?.significantAppChangeApprovalRequired) {
|
|
215
|
+
* const result = await requestIOSSignificantChangeApproval();
|
|
216
|
+
* if (result.status === 'pending') {
|
|
217
|
+
* // Request sent, await parent response
|
|
218
|
+
* }
|
|
219
|
+
* }
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
|
|
223
|
+
function requestIOSSignificantChangeApproval() {
|
|
224
|
+
if (_reactNative.Platform.OS !== 'ios') {
|
|
225
|
+
return Promise.resolve({
|
|
226
|
+
status: null,
|
|
227
|
+
error: 'This method is only available on iOS'
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
const iosVersion = parseFloat(String(_reactNative.Platform.Version));
|
|
231
|
+
if (iosVersion < IOS_MIN_VERSION_PERMISSIONKIT) {
|
|
232
|
+
return Promise.resolve({
|
|
233
|
+
status: null,
|
|
234
|
+
error: `Requires iOS ${IOS_MIN_VERSION_PERMISSIONKIT}+. Current version: iOS ${iosVersion}`
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
return StoreAgeSignalsNativeModules.requestSignificantChangeApproval();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Requests permission for a child to communicate with specified contacts (iOS PermissionKit).
|
|
242
|
+
*
|
|
243
|
+
* Use this when `parentalControls.communicationLimits` is `true`
|
|
244
|
+
* from the `requestIOSDeclaredAgeRange()` response.
|
|
245
|
+
*
|
|
246
|
+
* This shows a system dialog requesting the parent/guardian to approve
|
|
247
|
+
* communication with the specified contacts. The request is sent via Messages.
|
|
248
|
+
*
|
|
249
|
+
* @platform ios
|
|
250
|
+
* @requires iOS 26.2+
|
|
251
|
+
* @param contacts - Array of contacts to request permission for
|
|
252
|
+
* @param actions - Optional array of communication actions (defaults to ['message'])
|
|
253
|
+
* @returns Promise<CommunicationPermissionResult> - Contains granted boolean and error
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* ```typescript
|
|
257
|
+
* const ageResult = await requestIOSDeclaredAgeRange(13, 17, 21);
|
|
258
|
+
* if (ageResult.parentalControls?.communicationLimits) {
|
|
259
|
+
* const result = await requestIOSCommunicationPermission(
|
|
260
|
+
* [{ handle: 'friend@example.com', handleKind: 'email', displayName: 'School Friend' }],
|
|
261
|
+
* ['message', 'call']
|
|
262
|
+
* );
|
|
263
|
+
* }
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
function requestIOSCommunicationPermission(contacts, actions) {
|
|
267
|
+
if (_reactNative.Platform.OS !== 'ios') {
|
|
268
|
+
return Promise.resolve({
|
|
269
|
+
granted: false,
|
|
270
|
+
error: 'This method is only available on iOS'
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
const iosVersion = parseFloat(String(_reactNative.Platform.Version));
|
|
274
|
+
if (iosVersion < IOS_MIN_VERSION_PERMISSIONKIT) {
|
|
275
|
+
return Promise.resolve({
|
|
276
|
+
granted: false,
|
|
277
|
+
error: `Requires iOS ${IOS_MIN_VERSION_PERMISSIONKIT}+. Current version: iOS ${iosVersion}`
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
return StoreAgeSignalsNativeModules.requestCommunicationPermission(contacts, actions || ['message']);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Checks which handles are recognized by the system (known contacts) (iOS PermissionKit).
|
|
285
|
+
*
|
|
286
|
+
* Use this to determine which contacts are already approved before showing
|
|
287
|
+
* a communication permission request.
|
|
288
|
+
*
|
|
289
|
+
* @platform ios
|
|
290
|
+
* @requires iOS 26.2+
|
|
291
|
+
* @param handles - Array of handles to check
|
|
292
|
+
* @returns Promise<KnownHandlesResult> - Contains array of known handle values and error
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* ```typescript
|
|
296
|
+
* const result = await getIOSKnownCommunicationHandles([
|
|
297
|
+
* { handle: 'user@example.com', handleKind: 'email' },
|
|
298
|
+
* { handle: 'gamer123', handleKind: 'custom' }
|
|
299
|
+
* ]);
|
|
300
|
+
*
|
|
301
|
+
* const unknownContacts = handles.filter(
|
|
302
|
+
* h => !result.knownHandles.includes(h.handle)
|
|
303
|
+
* );
|
|
304
|
+
*
|
|
305
|
+
* if (unknownContacts.length > 0) {
|
|
306
|
+
* // Request permission for unknown contacts
|
|
307
|
+
* await requestIOSCommunicationPermission(unknownContacts);
|
|
308
|
+
* }
|
|
309
|
+
* ```
|
|
310
|
+
*/
|
|
311
|
+
function getIOSKnownCommunicationHandles(handles) {
|
|
312
|
+
if (_reactNative.Platform.OS !== 'ios') {
|
|
313
|
+
return Promise.resolve({
|
|
314
|
+
knownHandles: [],
|
|
315
|
+
error: 'This method is only available on iOS'
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
const iosVersion = parseFloat(String(_reactNative.Platform.Version));
|
|
319
|
+
if (iosVersion < IOS_MIN_VERSION_PERMISSIONKIT) {
|
|
320
|
+
return Promise.resolve({
|
|
321
|
+
knownHandles: [],
|
|
322
|
+
error: `Requires iOS ${IOS_MIN_VERSION_PERMISSIONKIT}+. Current version: iOS ${iosVersion}`
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
return StoreAgeSignalsNativeModules.getKnownCommunicationHandles(handles);
|
|
326
|
+
}
|
|
121
327
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","StoreAgeSignalsNativeModules","NativeModules","Proxy","get","Error","getAndroidPlayAgeRangeStatus","config","OS","Promise","resolve","installId","userStatus","error","requestIOSDeclaredAgeRange","firstThresholdAge","secondThresholdAge","thirdThresholdAge","status","lowerBound","upperBound","ageRangeDeclaration","parentalControls","isIOSEligibleForAgeFeatures","isEligible","isEligibleForAgeFeatures","isAndroidEligibleForAgeFeatures"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","StoreAgeSignalsNativeModules","NativeModules","Proxy","get","Error","getAndroidPlayAgeRangeStatus","config","OS","Promise","resolve","installId","userStatus","error","IOS_MIN_VERSION_DECLARED_AGE_RANGE","requestIOSDeclaredAgeRange","firstThresholdAge","secondThresholdAge","thirdThresholdAge","status","lowerBound","upperBound","ageRangeDeclaration","parentalControls","iosVersion","parseFloat","String","Version","IOS_MIN_VERSION_ELIGIBLE_CHECK","isIOSEligibleForAgeFeatures","isEligible","isEligibleForAgeFeatures","isAndroidEligibleForAgeFeatures","IOS_MIN_VERSION_PERMISSIONKIT","requestIOSSignificantChangeApproval","requestSignificantChangeApproval","requestIOSCommunicationPermission","contacts","actions","granted","requestCommunicationPermission","getIOSKnownCommunicationHandles","handles","knownHandles","getKnownCommunicationHandles"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -42,6 +42,45 @@ const StoreAgeSignalsNativeModules = NativeModules.StoreAgeSignalsNativeModules
|
|
|
42
42
|
|
|
43
43
|
// Eligibility Result
|
|
44
44
|
|
|
45
|
+
// ========== PERMISSIONKIT TYPES (iOS 26+) ==========
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Status of significant change approval request.
|
|
49
|
+
* - approved: Parent/guardian approved the change
|
|
50
|
+
* - denied: Parent/guardian denied the change
|
|
51
|
+
* - pending: Request has been sent, awaiting response
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Result of significant change approval request.
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Handle type for communication contacts.
|
|
60
|
+
* - phoneNumber: Phone number identifier
|
|
61
|
+
* - email: Email address identifier
|
|
62
|
+
* - custom: Custom identifier (username, handle, etc.)
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Contact information for communication permission request.
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Communication actions that can be requested.
|
|
71
|
+
* - message: Text/chat messaging
|
|
72
|
+
* - call: Voice calls
|
|
73
|
+
* - video: Video calls
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Result of communication permission request.
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Result of known handles check.
|
|
82
|
+
*/
|
|
83
|
+
|
|
45
84
|
/**
|
|
46
85
|
* Retrieves the age range declaration status from Google Play's Age Signals API.
|
|
47
86
|
* @platform android
|
|
@@ -57,12 +96,16 @@ export function getAndroidPlayAgeRangeStatus(config) {
|
|
|
57
96
|
return StoreAgeSignalsNativeModules.getAndroidPlayAgeRangeStatus(config || {});
|
|
58
97
|
}
|
|
59
98
|
|
|
99
|
+
// Minimum iOS version required for DeclaredAgeRange API
|
|
100
|
+
const IOS_MIN_VERSION_DECLARED_AGE_RANGE = 26.0;
|
|
101
|
+
|
|
60
102
|
/**
|
|
61
103
|
* Requests age range declaration from iOS Declared Age Range API.
|
|
62
104
|
* @platform ios
|
|
63
105
|
* @param firstThresholdAge First age threshold (required, e.g., 13)
|
|
64
106
|
* @param secondThresholdAge Second age threshold (optional, e.g., 17)
|
|
65
107
|
* @param thirdThresholdAge Third age threshold (optional, e.g., 21)
|
|
108
|
+
* @remarks Requires iOS 26.0+. Returns error on older iOS versions.
|
|
66
109
|
*/
|
|
67
110
|
export function requestIOSDeclaredAgeRange(firstThresholdAge, secondThresholdAge, thirdThresholdAge) {
|
|
68
111
|
if (Platform.OS !== 'ios') {
|
|
@@ -75,15 +118,31 @@ export function requestIOSDeclaredAgeRange(firstThresholdAge, secondThresholdAge
|
|
|
75
118
|
error: 'This method is only available on iOS'
|
|
76
119
|
});
|
|
77
120
|
}
|
|
121
|
+
|
|
122
|
+
// Early return for iOS versions below 26 to prevent native bridge errors
|
|
123
|
+
const iosVersion = parseFloat(String(Platform.Version));
|
|
124
|
+
if (iosVersion < IOS_MIN_VERSION_DECLARED_AGE_RANGE) {
|
|
125
|
+
return Promise.resolve({
|
|
126
|
+
status: null,
|
|
127
|
+
lowerBound: null,
|
|
128
|
+
upperBound: null,
|
|
129
|
+
ageRangeDeclaration: null,
|
|
130
|
+
parentalControls: null,
|
|
131
|
+
error: `Requires iOS ${IOS_MIN_VERSION_DECLARED_AGE_RANGE}.0+. Current version: iOS ${iosVersion}`
|
|
132
|
+
});
|
|
133
|
+
}
|
|
78
134
|
return StoreAgeSignalsNativeModules.requestIOSDeclaredAgeRange(firstThresholdAge, secondThresholdAge ?? null, thirdThresholdAge ?? null);
|
|
79
135
|
}
|
|
80
136
|
|
|
137
|
+
// Minimum iOS version required for isEligibleForAgeFeatures API
|
|
138
|
+
const IOS_MIN_VERSION_ELIGIBLE_CHECK = 26.2;
|
|
139
|
+
|
|
81
140
|
/**
|
|
82
141
|
* Checks if the current user is eligible for age verification features on iOS.
|
|
83
142
|
* This determines if age checks need to be applied (e.g., user is in an applicable region like Texas).
|
|
84
143
|
* @platform ios
|
|
85
144
|
* @returns Promise<DeclaredAgeEligibilityResult> - Object containing isEligible boolean and error string
|
|
86
|
-
* @remarks Requires iOS 26.
|
|
145
|
+
* @remarks Requires iOS 26.2+. Returns isEligible: false with error message if not available.
|
|
87
146
|
*/
|
|
88
147
|
export function isIOSEligibleForAgeFeatures() {
|
|
89
148
|
if (Platform.OS !== 'ios') {
|
|
@@ -92,6 +151,15 @@ export function isIOSEligibleForAgeFeatures() {
|
|
|
92
151
|
error: 'This method is only available on iOS'
|
|
93
152
|
});
|
|
94
153
|
}
|
|
154
|
+
|
|
155
|
+
// Early return for iOS versions below 26 to prevent native bridge errors
|
|
156
|
+
const iosVersion = parseFloat(String(Platform.Version));
|
|
157
|
+
if (iosVersion < IOS_MIN_VERSION_ELIGIBLE_CHECK) {
|
|
158
|
+
return Promise.resolve({
|
|
159
|
+
isEligible: false,
|
|
160
|
+
error: `Requires iOS ${IOS_MIN_VERSION_ELIGIBLE_CHECK}.0+. Current version: iOS ${iosVersion}`
|
|
161
|
+
});
|
|
162
|
+
}
|
|
95
163
|
return StoreAgeSignalsNativeModules.isEligibleForAgeFeatures();
|
|
96
164
|
}
|
|
97
165
|
|
|
@@ -111,4 +179,139 @@ export function isAndroidEligibleForAgeFeatures() {
|
|
|
111
179
|
}
|
|
112
180
|
return StoreAgeSignalsNativeModules.isEligibleForAgeFeatures();
|
|
113
181
|
}
|
|
182
|
+
|
|
183
|
+
// ========== PERMISSIONKIT FUNCTIONS (iOS 26.2+) ==========
|
|
184
|
+
|
|
185
|
+
// Minimum iOS version required for PermissionKit APIs
|
|
186
|
+
const IOS_MIN_VERSION_PERMISSIONKIT = 26.2;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Requests parental approval for significant app changes (iOS PermissionKit).
|
|
190
|
+
*
|
|
191
|
+
* Use this when `parentalControls.significantAppChangeApprovalRequired` is `true`
|
|
192
|
+
* from the `requestIOSDeclaredAgeRange()` response.
|
|
193
|
+
*
|
|
194
|
+
* This shows a system dialog to request parental consent for significant app updates.
|
|
195
|
+
* The parent/guardian will receive a notification via Messages.
|
|
196
|
+
*
|
|
197
|
+
* @platform ios
|
|
198
|
+
* @requires iOS 26.2+
|
|
199
|
+
* @returns Promise<SignificantChangeResult> - Contains status ('pending', 'approved', 'denied') and error
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```typescript
|
|
203
|
+
* const ageResult = await requestIOSDeclaredAgeRange(13, 17, 21);
|
|
204
|
+
* if (ageResult.parentalControls?.significantAppChangeApprovalRequired) {
|
|
205
|
+
* const result = await requestIOSSignificantChangeApproval();
|
|
206
|
+
* if (result.status === 'pending') {
|
|
207
|
+
* // Request sent, await parent response
|
|
208
|
+
* }
|
|
209
|
+
* }
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
|
|
213
|
+
export function requestIOSSignificantChangeApproval() {
|
|
214
|
+
if (Platform.OS !== 'ios') {
|
|
215
|
+
return Promise.resolve({
|
|
216
|
+
status: null,
|
|
217
|
+
error: 'This method is only available on iOS'
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
const iosVersion = parseFloat(String(Platform.Version));
|
|
221
|
+
if (iosVersion < IOS_MIN_VERSION_PERMISSIONKIT) {
|
|
222
|
+
return Promise.resolve({
|
|
223
|
+
status: null,
|
|
224
|
+
error: `Requires iOS ${IOS_MIN_VERSION_PERMISSIONKIT}+. Current version: iOS ${iosVersion}`
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return StoreAgeSignalsNativeModules.requestSignificantChangeApproval();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Requests permission for a child to communicate with specified contacts (iOS PermissionKit).
|
|
232
|
+
*
|
|
233
|
+
* Use this when `parentalControls.communicationLimits` is `true`
|
|
234
|
+
* from the `requestIOSDeclaredAgeRange()` response.
|
|
235
|
+
*
|
|
236
|
+
* This shows a system dialog requesting the parent/guardian to approve
|
|
237
|
+
* communication with the specified contacts. The request is sent via Messages.
|
|
238
|
+
*
|
|
239
|
+
* @platform ios
|
|
240
|
+
* @requires iOS 26.2+
|
|
241
|
+
* @param contacts - Array of contacts to request permission for
|
|
242
|
+
* @param actions - Optional array of communication actions (defaults to ['message'])
|
|
243
|
+
* @returns Promise<CommunicationPermissionResult> - Contains granted boolean and error
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* ```typescript
|
|
247
|
+
* const ageResult = await requestIOSDeclaredAgeRange(13, 17, 21);
|
|
248
|
+
* if (ageResult.parentalControls?.communicationLimits) {
|
|
249
|
+
* const result = await requestIOSCommunicationPermission(
|
|
250
|
+
* [{ handle: 'friend@example.com', handleKind: 'email', displayName: 'School Friend' }],
|
|
251
|
+
* ['message', 'call']
|
|
252
|
+
* );
|
|
253
|
+
* }
|
|
254
|
+
* ```
|
|
255
|
+
*/
|
|
256
|
+
export function requestIOSCommunicationPermission(contacts, actions) {
|
|
257
|
+
if (Platform.OS !== 'ios') {
|
|
258
|
+
return Promise.resolve({
|
|
259
|
+
granted: false,
|
|
260
|
+
error: 'This method is only available on iOS'
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
const iosVersion = parseFloat(String(Platform.Version));
|
|
264
|
+
if (iosVersion < IOS_MIN_VERSION_PERMISSIONKIT) {
|
|
265
|
+
return Promise.resolve({
|
|
266
|
+
granted: false,
|
|
267
|
+
error: `Requires iOS ${IOS_MIN_VERSION_PERMISSIONKIT}+. Current version: iOS ${iosVersion}`
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
return StoreAgeSignalsNativeModules.requestCommunicationPermission(contacts, actions || ['message']);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Checks which handles are recognized by the system (known contacts) (iOS PermissionKit).
|
|
275
|
+
*
|
|
276
|
+
* Use this to determine which contacts are already approved before showing
|
|
277
|
+
* a communication permission request.
|
|
278
|
+
*
|
|
279
|
+
* @platform ios
|
|
280
|
+
* @requires iOS 26.2+
|
|
281
|
+
* @param handles - Array of handles to check
|
|
282
|
+
* @returns Promise<KnownHandlesResult> - Contains array of known handle values and error
|
|
283
|
+
*
|
|
284
|
+
* @example
|
|
285
|
+
* ```typescript
|
|
286
|
+
* const result = await getIOSKnownCommunicationHandles([
|
|
287
|
+
* { handle: 'user@example.com', handleKind: 'email' },
|
|
288
|
+
* { handle: 'gamer123', handleKind: 'custom' }
|
|
289
|
+
* ]);
|
|
290
|
+
*
|
|
291
|
+
* const unknownContacts = handles.filter(
|
|
292
|
+
* h => !result.knownHandles.includes(h.handle)
|
|
293
|
+
* );
|
|
294
|
+
*
|
|
295
|
+
* if (unknownContacts.length > 0) {
|
|
296
|
+
* // Request permission for unknown contacts
|
|
297
|
+
* await requestIOSCommunicationPermission(unknownContacts);
|
|
298
|
+
* }
|
|
299
|
+
* ```
|
|
300
|
+
*/
|
|
301
|
+
export function getIOSKnownCommunicationHandles(handles) {
|
|
302
|
+
if (Platform.OS !== 'ios') {
|
|
303
|
+
return Promise.resolve({
|
|
304
|
+
knownHandles: [],
|
|
305
|
+
error: 'This method is only available on iOS'
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
const iosVersion = parseFloat(String(Platform.Version));
|
|
309
|
+
if (iosVersion < IOS_MIN_VERSION_PERMISSIONKIT) {
|
|
310
|
+
return Promise.resolve({
|
|
311
|
+
knownHandles: [],
|
|
312
|
+
error: `Requires iOS ${IOS_MIN_VERSION_PERMISSIONKIT}+. Current version: iOS ${iosVersion}`
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return StoreAgeSignalsNativeModules.getKnownCommunicationHandles(handles);
|
|
316
|
+
}
|
|
114
317
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","StoreAgeSignalsNativeModules","Proxy","get","Error","getAndroidPlayAgeRangeStatus","config","OS","Promise","resolve","installId","userStatus","error","requestIOSDeclaredAgeRange","firstThresholdAge","secondThresholdAge","thirdThresholdAge","status","lowerBound","upperBound","ageRangeDeclaration","parentalControls","isIOSEligibleForAgeFeatures","isEligible","isEligibleForAgeFeatures","isAndroidEligibleForAgeFeatures"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,kGAAkG,GAClGD,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,4BAA4B,GAAGN,aAAa,CAACM,4BAA4B,GAC3EN,aAAa,CAACM,4BAA4B,GAC1C,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;;AA2BA;;
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","StoreAgeSignalsNativeModules","Proxy","get","Error","getAndroidPlayAgeRangeStatus","config","OS","Promise","resolve","installId","userStatus","error","IOS_MIN_VERSION_DECLARED_AGE_RANGE","requestIOSDeclaredAgeRange","firstThresholdAge","secondThresholdAge","thirdThresholdAge","status","lowerBound","upperBound","ageRangeDeclaration","parentalControls","iosVersion","parseFloat","String","Version","IOS_MIN_VERSION_ELIGIBLE_CHECK","isIOSEligibleForAgeFeatures","isEligible","isEligibleForAgeFeatures","isAndroidEligibleForAgeFeatures","IOS_MIN_VERSION_PERMISSIONKIT","requestIOSSignificantChangeApproval","requestSignificantChangeApproval","requestIOSCommunicationPermission","contacts","actions","granted","requestCommunicationPermission","getIOSKnownCommunicationHandles","handles","knownHandles","getKnownCommunicationHandles"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|