react-native-intune 0.1.0-alpha.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 (110) hide show
  1. package/LICENSE +27 -0
  2. package/NOTICE +49 -0
  3. package/README.md +164 -0
  4. package/RNIntune.podspec +69 -0
  5. package/android/build.gradle +152 -0
  6. package/android/consumer-rules.pro +28 -0
  7. package/android/src/main/AndroidManifest.xml +2 -0
  8. package/android/src/main/java/com/reactnativeintune/RNIntuneAuth.kt +330 -0
  9. package/android/src/main/java/com/reactnativeintune/RNIntuneAuthCallback.kt +195 -0
  10. package/android/src/main/java/com/reactnativeintune/RNIntuneConfig.kt +63 -0
  11. package/android/src/main/java/com/reactnativeintune/RNIntuneEventQueue.kt +50 -0
  12. package/android/src/main/java/com/reactnativeintune/RNIntuneModule.kt +752 -0
  13. package/android/src/main/java/com/reactnativeintune/RNIntuneMsalConfig.kt +78 -0
  14. package/android/src/main/java/com/reactnativeintune/RNIntuneNotifications.kt +187 -0
  15. package/android/src/main/java/com/reactnativeintune/RNIntunePackage.kt +33 -0
  16. package/android/src/main/java/com/reactnativeintune/RNIntunePolicy.kt +108 -0
  17. package/android/src/main/java/com/reactnativeintune/RNIntuneReset.kt +85 -0
  18. package/android/src/main/java/com/reactnativeintune/RNIntuneResetJournal.kt +140 -0
  19. package/app.plugin.js +10 -0
  20. package/ios/RNIntune.h +20 -0
  21. package/ios/RNIntune.mm +467 -0
  22. package/ios/RNIntuneAuth.h +121 -0
  23. package/ios/RNIntuneAuth.m +390 -0
  24. package/ios/RNIntuneCore.h +150 -0
  25. package/ios/RNIntuneCore.m +535 -0
  26. package/ios/RNIntuneDelegates.h +70 -0
  27. package/ios/RNIntuneDelegates.m +268 -0
  28. package/ios/RNIntunePendingRequests.h +57 -0
  29. package/ios/RNIntunePendingRequests.m +230 -0
  30. package/ios/RNIntunePlistGuard.h +37 -0
  31. package/ios/RNIntunePlistGuard.m +147 -0
  32. package/ios/RNIntunePolicy.h +25 -0
  33. package/ios/RNIntunePolicy.m +112 -0
  34. package/ios/RNIntuneReset.h +34 -0
  35. package/ios/RNIntuneReset.m +93 -0
  36. package/ios/RNIntuneResetJournal.h +69 -0
  37. package/ios/RNIntuneResetJournal.m +106 -0
  38. package/lib/module/NativeIntune.js +20 -0
  39. package/lib/module/NativeIntune.js.map +1 -0
  40. package/lib/module/api/auth.js +66 -0
  41. package/lib/module/api/auth.js.map +1 -0
  42. package/lib/module/api/enrollment.js +104 -0
  43. package/lib/module/api/enrollment.js.map +1 -0
  44. package/lib/module/api/events.js +50 -0
  45. package/lib/module/api/events.js.map +1 -0
  46. package/lib/module/api/lifecycle.js +73 -0
  47. package/lib/module/api/lifecycle.js.map +1 -0
  48. package/lib/module/api/policy.js +23 -0
  49. package/lib/module/api/policy.js.map +1 -0
  50. package/lib/module/api/tokenProvider.js +80 -0
  51. package/lib/module/api/tokenProvider.js.map +1 -0
  52. package/lib/module/index.js +82 -0
  53. package/lib/module/index.js.map +1 -0
  54. package/lib/module/internal/decode.js +153 -0
  55. package/lib/module/internal/decode.js.map +1 -0
  56. package/lib/module/internal/emitter.js +15 -0
  57. package/lib/module/internal/emitter.js.map +1 -0
  58. package/lib/module/internal/errors.js +32 -0
  59. package/lib/module/internal/errors.js.map +1 -0
  60. package/lib/module/package.json +1 -0
  61. package/lib/module/types.js +143 -0
  62. package/lib/module/types.js.map +1 -0
  63. package/lib/typescript/package.json +1 -0
  64. package/lib/typescript/src/NativeIntune.d.ts +120 -0
  65. package/lib/typescript/src/NativeIntune.d.ts.map +1 -0
  66. package/lib/typescript/src/api/auth.d.ts +37 -0
  67. package/lib/typescript/src/api/auth.d.ts.map +1 -0
  68. package/lib/typescript/src/api/enrollment.d.ts +54 -0
  69. package/lib/typescript/src/api/enrollment.d.ts.map +1 -0
  70. package/lib/typescript/src/api/events.d.ts +24 -0
  71. package/lib/typescript/src/api/events.d.ts.map +1 -0
  72. package/lib/typescript/src/api/lifecycle.d.ts +33 -0
  73. package/lib/typescript/src/api/lifecycle.d.ts.map +1 -0
  74. package/lib/typescript/src/api/policy.d.ts +14 -0
  75. package/lib/typescript/src/api/policy.d.ts.map +1 -0
  76. package/lib/typescript/src/api/tokenProvider.d.ts +18 -0
  77. package/lib/typescript/src/api/tokenProvider.d.ts.map +1 -0
  78. package/lib/typescript/src/index.d.ts +67 -0
  79. package/lib/typescript/src/index.d.ts.map +1 -0
  80. package/lib/typescript/src/internal/decode.d.ts +48 -0
  81. package/lib/typescript/src/internal/decode.d.ts.map +1 -0
  82. package/lib/typescript/src/internal/emitter.d.ts +11 -0
  83. package/lib/typescript/src/internal/emitter.d.ts.map +1 -0
  84. package/lib/typescript/src/internal/errors.d.ts +22 -0
  85. package/lib/typescript/src/internal/errors.d.ts.map +1 -0
  86. package/lib/typescript/src/types.d.ts +317 -0
  87. package/lib/typescript/src/types.d.ts.map +1 -0
  88. package/package.json +204 -0
  89. package/plugin/transforms.js +153 -0
  90. package/plugin/withIntune.js +320 -0
  91. package/scripts/cli.mjs +72 -0
  92. package/scripts/doctor.mjs +232 -0
  93. package/scripts/fetch-sdks.mjs +456 -0
  94. package/scripts/lib/checks.mjs +720 -0
  95. package/scripts/lib/project.mjs +196 -0
  96. package/scripts/setup.mjs +233 -0
  97. package/sdk-lock.json +27 -0
  98. package/sdk-versions.json +70 -0
  99. package/src/NativeIntune.ts +130 -0
  100. package/src/api/auth.ts +73 -0
  101. package/src/api/enrollment.ts +112 -0
  102. package/src/api/events.ts +87 -0
  103. package/src/api/lifecycle.ts +75 -0
  104. package/src/api/policy.ts +22 -0
  105. package/src/api/tokenProvider.ts +80 -0
  106. package/src/index.ts +127 -0
  107. package/src/internal/decode.ts +191 -0
  108. package/src/internal/emitter.ts +14 -0
  109. package/src/internal/errors.ts +43 -0
  110. package/src/types.ts +381 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeIntune","assertAccountId","toAuthAccount","toAuthResult","enroll","signIn","params","signInSilent","acquireToken","getAccounts","accounts","map","signOut","accountId","signInAndEnroll","auth","enrollment"],"sourceRoot":"../../../src","sources":["api/auth.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,YAAY,MAAM,oBAAiB;AAC1C,SAASC,eAAe,QAAQ,uBAAoB;AACpD,SAASC,aAAa,EAAEC,YAAY,QAAQ,uBAAoB;AAChE,SAASC,MAAM,QAAQ,iBAAc;AAUrC;AACA;AACA;AACA;AACA,OAAO,eAAeC,MAAMA,CAACC,MAAoB,GAAG,CAAC,CAAC,EAAuB;EAC3E,OAAOH,YAAY,CAAC,MAAMH,YAAY,CAACK,MAAM,CAACC,MAAM,CAAC,CAAC;AACxD;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeC,YAAYA,CAChCD,MAAoB,GAAG,CAAC,CAAC,EACJ;EACrB,OAAOH,YAAY,CAAC,MAAMH,YAAY,CAACO,YAAY,CAACD,MAAM,CAAC,CAAC;AAC9D;;AAEA;AACA,OAAO,eAAeE,YAAYA,CAChCF,MAA0B,EACL;EACrB,OAAOH,YAAY,CAAC,MAAMH,YAAY,CAACQ,YAAY,CAACF,MAAM,CAAC,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeG,WAAWA,CAAA,EAA2B;EAC1D,MAAMC,QAAQ,GAAG,MAAMV,YAAY,CAACS,WAAW,CAAC,CAAC;EACjD,OAAOC,QAAQ,CAACC,GAAG,CAACT,aAAa,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASU,OAAOA,CAACN,MAAqB,EAAiB;EAC5DL,eAAe,CAACK,MAAM,CAACO,SAAS,CAAC;EACjC,OAAOb,YAAY,CAACY,OAAO,CAACN,MAAM,CAAC;AACrC;;AAEA;AACA,OAAO,eAAeQ,eAAeA,CACnCR,MAAoB,GAAG,CAAC,CAAC,EACoC;EAC7D,MAAMS,IAAI,GAAG,MAAMV,MAAM,CAACC,MAAM,CAAC;EACjC,MAAMU,UAAU,GAAG,MAAMZ,MAAM,CAAC;IAAES,SAAS,EAAEE,IAAI,CAACF;EAAU,CAAC,CAAC;EAC9D,OAAO;IAAEE,IAAI;IAAEC;EAAW,CAAC;AAC7B","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Enrollment, state, and the reset sequence.
5
+ *
6
+ * The theme running through all three: **the SDK reports asynchronously and the process
7
+ * may not survive**. Nothing here resolves from a call returning, and nothing assumes
8
+ * the next line will run.
9
+ */
10
+
11
+ import NativeIntune from "../NativeIntune.js";
12
+ import { assertAccountId } from "../internal/errors.js";
13
+ import { toEnrollmentResult, toIntuneState } from "../internal/decode.js";
14
+ let resetHandler = null;
15
+
16
+ /**
17
+ * Clears the app's own local data during a reset. The module cannot do this for you — it
18
+ * does not know what you store or where.
19
+ *
20
+ * Registered rather than passed to `reset` because a reset can be *resumed* at launch
21
+ * from the journal, with no `reset` call in flight (SPEC §7).
22
+ */
23
+ export function setResetHandler(handler) {
24
+ resetHandler = handler;
25
+ }
26
+
27
+ /**
28
+ * Resolves with a result for every outcome including failures — a non-success status is
29
+ * data, not an exception. It only rejects for programming errors.
30
+ *
31
+ * Expect seconds, and a spinner: the promise settles when the SDK reports through its
32
+ * delegate or notification, not when the underlying call returns.
33
+ *
34
+ * Read SPEC §8 before branching on `status`. `NotLicensed` and `NotTargeted` must not
35
+ * block the user; `Failed` must.
36
+ */
37
+ export async function enroll(params) {
38
+ assertAccountId(params.accountId);
39
+ return toEnrollmentResult(
40
+ // '' rather than undefined: the Codegen spec has no optionals, so "not known" has to
41
+ // be a value the native side can recognise.
42
+ await NativeIntune.enroll({
43
+ accountId: params.accountId,
44
+ upn: params.upn ?? ''
45
+ }));
46
+ }
47
+
48
+ /**
49
+ * **iOS only.** Hands the whole sign-in to the SDK: it shows its own credential screen,
50
+ * signs the user in, and enrolls them. No MSAL on our side, which is why this works
51
+ * before the built-in auth layer exists.
52
+ *
53
+ * Rejects with `E_SDK_UNAVAILABLE` on Android — `registerAccountForMAM` there always
54
+ * needs a token supplied by the app, so there is nothing equivalent to call.
55
+ *
56
+ * Like `enroll`, it resolves with a result for every outcome including failures.
57
+ */
58
+ export async function enrollInteractive(params = {}) {
59
+ return toEnrollmentResult(await NativeIntune.enrollInteractive({
60
+ upn: params.upn ?? ''
61
+ }));
62
+ }
63
+
64
+ /**
65
+ * The reconciliation primitive, and the intended way to drive this module. Call it at
66
+ * launch, compare against what your backend says the state should be, act on the
67
+ * difference. It never rejects.
68
+ */
69
+ export async function getState() {
70
+ return toIntuneState(await NativeIntune.getState());
71
+ }
72
+
73
+ /**
74
+ * Unregisters, unenrolls, optionally wipes corporate data, and clears the runtime
75
+ * configuration.
76
+ *
77
+ * **The process is expected to terminate during this call on Android** (SPEC §7). Do not
78
+ * write code after `await reset(...)` that must run — put the continuation in the
79
+ * launch-time reconciliation and let the journal resume it.
80
+ */
81
+ export async function reset(params) {
82
+ // The order below is SPEC §7's, and it is not the intuitive one. The unregister has to
83
+ // happen before anything purges the account's tokens, and on Android the process is
84
+ // expected to die during it — so local cleanup cannot come first, and cannot be
85
+ // assumed to run at all. The journal carries the sequence across that death: if the
86
+ // native call never returns, the next launch sees `pendingReset` and calls reset()
87
+ // again with reason 'resume', landing back here.
88
+ const state = await getState().catch(() => null);
89
+ const accountId = state?.enrolledAccountId ?? null;
90
+ await NativeIntune.reset(params);
91
+
92
+ // Reached only if the process survived.
93
+ const handler = resetHandler;
94
+ if (handler !== null) {
95
+ // Deliberately not caught: if the app cannot clear its own data, the journal stays
96
+ // open and the reset is retried next launch rather than being marked done.
97
+ await handler({
98
+ reason: params.reason,
99
+ accountId
100
+ });
101
+ }
102
+ await NativeIntune.completeReset();
103
+ }
104
+ //# sourceMappingURL=enrollment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeIntune","assertAccountId","toEnrollmentResult","toIntuneState","resetHandler","setResetHandler","handler","enroll","params","accountId","upn","enrollInteractive","getState","reset","state","catch","enrolledAccountId","reason","completeReset"],"sourceRoot":"../../../src","sources":["api/enrollment.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,YAAY,MAAM,oBAAiB;AAC1C,SAASC,eAAe,QAAQ,uBAAoB;AACpD,SAASC,kBAAkB,EAAEC,aAAa,QAAQ,uBAAoB;AAUtE,IAAIC,YAAiC,GAAG,IAAI;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAACC,OAA4B,EAAQ;EAClEF,YAAY,GAAGE,OAAO;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,MAAMA,CAACC,MAAoB,EAA6B;EAC5EP,eAAe,CAACO,MAAM,CAACC,SAAS,CAAC;EACjC,OAAOP,kBAAkB;EACvB;EACA;EACA,MAAMF,YAAY,CAACO,MAAM,CAAC;IACxBE,SAAS,EAAED,MAAM,CAACC,SAAS;IAC3BC,GAAG,EAAEF,MAAM,CAACE,GAAG,IAAI;EACrB,CAAC,CACH,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,iBAAiBA,CACrCH,MAA+B,GAAG,CAAC,CAAC,EACT;EAC3B,OAAON,kBAAkB,CACvB,MAAMF,YAAY,CAACW,iBAAiB,CAAC;IAAED,GAAG,EAAEF,MAAM,CAACE,GAAG,IAAI;EAAG,CAAC,CAChE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeE,QAAQA,CAAA,EAAyB;EACrD,OAAOT,aAAa,CAAC,MAAMH,YAAY,CAACY,QAAQ,CAAC,CAAC,CAAC;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,KAAKA,CAACL,MAAmB,EAAiB;EAC9D;EACA;EACA;EACA;EACA;EACA;EACA,MAAMM,KAAK,GAAG,MAAMF,QAAQ,CAAC,CAAC,CAACG,KAAK,CAAC,MAAM,IAAI,CAAC;EAChD,MAAMN,SAAS,GAAGK,KAAK,EAAEE,iBAAiB,IAAI,IAAI;EAElD,MAAMhB,YAAY,CAACa,KAAK,CAACL,MAAM,CAAC;;EAEhC;EACA,MAAMF,OAAO,GAAGF,YAAY;EAC5B,IAAIE,OAAO,KAAK,IAAI,EAAE;IACpB;IACA;IACA,MAAMA,OAAO,CAAC;MAAEW,MAAM,EAAET,MAAM,CAACS,MAAM;MAAER;IAAU,CAAC,CAAC;EACrD;EAEA,MAAMT,YAAY,CAACkB,aAAa,CAAC,CAAC;AACpC","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Typed subscriptions.
5
+ *
6
+ * Every one of these can fire without the app having called anything: the SDK enrolls on
7
+ * its own retry schedule, an administrator can change policy, and a wipe is
8
+ * service-initiated. Subscribe at startup, not when you happen to be waiting (SPEC §4.4).
9
+ */
10
+
11
+ import { emitter } from "../internal/emitter.js";
12
+ import { nullableStr, toBrokerStatus, toEnrollmentResult, toPolicySnapshot, toRestartReason } from "../internal/decode.js";
13
+ function subscribe(event, decode, listener) {
14
+ return emitter.addListener(event, raw => listener(decode(raw)));
15
+ }
16
+
17
+ /** Also fires for the SDK's own background enrollment retries, which have no caller. */
18
+ export function onEnrollmentResult(listener) {
19
+ return subscribe('enrollmentResult', toEnrollmentResult, listener);
20
+ }
21
+
22
+ /** The terminal state of a reset. */
23
+ export function onUnenrollmentResult(listener) {
24
+ return subscribe('unenrollmentResult', toEnrollmentResult, listener);
25
+ }
26
+
27
+ /** An administrator changed policy — re-read whatever UI you gate on it. */
28
+ export function onPolicyChanged(listener) {
29
+ return subscribe('policyChanged', toPolicySnapshot, listener);
30
+ }
31
+
32
+ /** The user installed or removed Company Portal. */
33
+ export function onBrokerStatusChanged(listener) {
34
+ return subscribe('brokerStatusChanged', toBrokerStatus, listener);
35
+ }
36
+
37
+ /** **Service-initiated.** Can arrive with no prior app call at all. */
38
+ export function onWipeRequested(listener) {
39
+ return subscribe('wipeRequested', raw => ({
40
+ accountId: nullableStr(raw.accountId)
41
+ }), listener);
42
+ }
43
+
44
+ /** iOS, on first policy application. See `configure({ restartHandledByApp })`. */
45
+ export function onRestartRequired(listener) {
46
+ return subscribe('restartRequired', raw => ({
47
+ reason: toRestartReason(raw.reason)
48
+ }), listener);
49
+ }
50
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["emitter","nullableStr","toBrokerStatus","toEnrollmentResult","toPolicySnapshot","toRestartReason","subscribe","event","decode","listener","addListener","raw","onEnrollmentResult","onUnenrollmentResult","onPolicyChanged","onBrokerStatusChanged","onWipeRequested","accountId","onRestartRequired","reason"],"sourceRoot":"../../../src","sources":["api/events.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,OAAO,QAAQ,wBAAqB;AAC7C,SACEC,WAAW,EACXC,cAAc,EACdC,kBAAkB,EAClBC,gBAAgB,EAChBC,eAAe,QACV,uBAAoB;AAS3B,SAASC,SAASA,CAChBC,KAAQ,EACRC,MAAwC,EACxCC,QAA4C,EACvB;EACrB,OAAOT,OAAO,CAACU,WAAW,CAACH,KAAK,EAAGI,GAAW,IAAKF,QAAQ,CAACD,MAAM,CAACG,GAAG,CAAC,CAAC,CAAC;AAC3E;;AAEA;AACA,OAAO,SAASC,kBAAkBA,CAChCH,QAA4C,EACvB;EACrB,OAAOH,SAAS,CAAC,kBAAkB,EAAEH,kBAAkB,EAAEM,QAAQ,CAAC;AACpE;;AAEA;AACA,OAAO,SAASI,oBAAoBA,CAClCJ,QAA4C,EACvB;EACrB,OAAOH,SAAS,CAAC,oBAAoB,EAAEH,kBAAkB,EAAEM,QAAQ,CAAC;AACtE;;AAEA;AACA,OAAO,SAASK,eAAeA,CAC7BL,QAA0C,EACrB;EACrB,OAAOH,SAAS,CAAC,eAAe,EAAEF,gBAAgB,EAAEK,QAAQ,CAAC;AAC/D;;AAEA;AACA,OAAO,SAASM,qBAAqBA,CACnCN,QAAwC,EACnB;EACrB,OAAOH,SAAS,CAAC,qBAAqB,EAAEJ,cAAc,EAAEO,QAAQ,CAAC;AACnE;;AAEA;AACA,OAAO,SAASO,eAAeA,CAC7BP,QAAyD,EACpC;EACrB,OAAOH,SAAS,CACd,eAAe,EACdK,GAAG,KAAM;IACRM,SAAS,EAAEhB,WAAW,CAAEU,GAAG,CAA6BM,SAAS;EACnE,CAAC,CAAC,EACFR,QACF,CAAC;AACH;;AAEA;AACA,OAAO,SAASS,iBAAiBA,CAC/BT,QAA2C,EACtB;EACrB,OAAOH,SAAS,CACd,iBAAiB,EAChBK,GAAG,KAAM;IACRQ,MAAM,EAAEd,eAAe,CAAEM,GAAG,CAA6BQ,MAAM;EACjE,CAAC,CAAC,EACFV,QACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Setup, and the two questions worth asking before it: is the SDK usable at all, and is
5
+ * a broker present.
6
+ */
7
+
8
+ import NativeIntune from "../NativeIntune.js";
9
+ import { toBrokerStatus } from "../internal/decode.js";
10
+ import { FileProtectionLevel } from "../types.js";
11
+
12
+ /**
13
+ * Configures the SDK for one customer tenant. Every other method rejects with
14
+ * `E_NOT_CONFIGURED` until this resolves.
15
+ *
16
+ * Two things it will refuse rather than paper over:
17
+ *
18
+ * - a different `tenantId` than the active one — `E_RESET_REQUIRED`, because silently
19
+ * reconfiguring would leave the old tenant enrolled, and the iOS runtime overrides
20
+ * persist across restarts so the mismatch would survive a relaunch;
21
+ * - an `Info.plist` that disagrees with it — `E_PLIST_CONFLICT`, see SPEC §5.1.2.
22
+ */
23
+ export function configure(config) {
24
+ // Every optional becomes a concrete value here, so the native side never has to guess
25
+ // a default and the two platforms cannot drift apart on what the default was.
26
+ return NativeIntune.configure({
27
+ clientId: config.clientId,
28
+ tenantId: config.tenantId,
29
+ authority: config.authority,
30
+ redirectUri: config.redirectUri,
31
+ authMode: config.authMode ?? 'builtin',
32
+ verboseLogging: config.verboseLogging ?? false,
33
+ restartHandledByApp: config.restartHandledByApp ?? false,
34
+ maxFileProtectionLevel: config.maxFileProtectionLevel ?? FileProtectionLevel.Complete,
35
+ // Throws on integration bugs that would otherwise leave data unprotected, so it is
36
+ // on in development and must never ship enabled.
37
+ strictMode: config.strictMode ?? __DEV__,
38
+ keychainGroupOverride: config.keychainGroupOverride ?? '',
39
+ telemetryEnabled: config.telemetryEnabled ?? true,
40
+ // Flattened because Codegen takes no nested optionals. '' means "leave the SDK's
41
+ // own default alone", which is not the same as a colour.
42
+ brandingBackground: config.branding?.background ?? '',
43
+ brandingForeground: config.branding?.foreground ?? '',
44
+ brandingAccent: config.branding?.accent ?? '',
45
+ brandingSecondaryBackground: config.branding?.secondaryBackground ?? '',
46
+ brandingSecondaryForeground: config.branding?.secondaryForeground ?? ''
47
+ });
48
+ }
49
+
50
+ /**
51
+ * SDK linked and platform prerequisites met. Gate the whole Intune path on this so a
52
+ * misbuilt binary degrades instead of crashing.
53
+ */
54
+ export function isSupported() {
55
+ return NativeIntune.isSupported();
56
+ }
57
+
58
+ /**
59
+ * Answerable before `configure`, on purpose — the app needs it to decide whether to
60
+ * prompt for a broker install.
61
+ *
62
+ * A false negative here usually means a missing manifest entry rather than a missing
63
+ * app: `LSApplicationQueriesSchemes` on iOS, `<queries>` on Android 11+.
64
+ */
65
+ export async function getBrokerStatus() {
66
+ return toBrokerStatus(await NativeIntune.getBrokerStatus());
67
+ }
68
+
69
+ /** Rejects with `E_NOT_NEEDED` when a broker is already present. */
70
+ export function openBrokerInstall() {
71
+ return NativeIntune.openBrokerInstall();
72
+ }
73
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeIntune","toBrokerStatus","FileProtectionLevel","configure","config","clientId","tenantId","authority","redirectUri","authMode","verboseLogging","restartHandledByApp","maxFileProtectionLevel","Complete","strictMode","__DEV__","keychainGroupOverride","telemetryEnabled","brandingBackground","branding","background","brandingForeground","foreground","brandingAccent","accent","brandingSecondaryBackground","secondaryBackground","brandingSecondaryForeground","secondaryForeground","isSupported","getBrokerStatus","openBrokerInstall"],"sourceRoot":"../../../src","sources":["api/lifecycle.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,OAAOA,YAAY,MAAM,oBAAiB;AAC1C,SAASC,cAAc,QAAQ,uBAAoB;AACnD,SACEC,mBAAmB,QAGd,aAAU;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAACC,MAAoB,EAAiB;EAC7D;EACA;EACA,OAAOJ,YAAY,CAACG,SAAS,CAAC;IAC5BE,QAAQ,EAAED,MAAM,CAACC,QAAQ;IACzBC,QAAQ,EAAEF,MAAM,CAACE,QAAQ;IACzBC,SAAS,EAAEH,MAAM,CAACG,SAAS;IAC3BC,WAAW,EAAEJ,MAAM,CAACI,WAAW;IAC/BC,QAAQ,EAAEL,MAAM,CAACK,QAAQ,IAAI,SAAS;IACtCC,cAAc,EAAEN,MAAM,CAACM,cAAc,IAAI,KAAK;IAC9CC,mBAAmB,EAAEP,MAAM,CAACO,mBAAmB,IAAI,KAAK;IACxDC,sBAAsB,EACpBR,MAAM,CAACQ,sBAAsB,IAAIV,mBAAmB,CAACW,QAAQ;IAC/D;IACA;IACAC,UAAU,EAAEV,MAAM,CAACU,UAAU,IAAIC,OAAO;IACxCC,qBAAqB,EAAEZ,MAAM,CAACY,qBAAqB,IAAI,EAAE;IACzDC,gBAAgB,EAAEb,MAAM,CAACa,gBAAgB,IAAI,IAAI;IACjD;IACA;IACAC,kBAAkB,EAAEd,MAAM,CAACe,QAAQ,EAAEC,UAAU,IAAI,EAAE;IACrDC,kBAAkB,EAAEjB,MAAM,CAACe,QAAQ,EAAEG,UAAU,IAAI,EAAE;IACrDC,cAAc,EAAEnB,MAAM,CAACe,QAAQ,EAAEK,MAAM,IAAI,EAAE;IAC7CC,2BAA2B,EAAErB,MAAM,CAACe,QAAQ,EAAEO,mBAAmB,IAAI,EAAE;IACvEC,2BAA2B,EAAEvB,MAAM,CAACe,QAAQ,EAAES,mBAAmB,IAAI;EACvE,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAA,EAAqB;EAC9C,OAAO7B,YAAY,CAAC6B,WAAW,CAAC,CAAC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,eAAeA,CAAA,EAA0B;EAC7D,OAAO7B,cAAc,CAAC,MAAMD,YAAY,CAAC8B,eAAe,CAAC,CAAC,CAAC;AAC7D;;AAEA;AACA,OAAO,SAASC,iBAAiBA,CAAA,EAAkB;EACjD,OAAO/B,YAAY,CAAC+B,iBAAiB,CAAC,CAAC;AACzC","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Reading policy, and reading the module's own state for a support bundle.
5
+ */
6
+
7
+ import NativeIntune from "../NativeIntune.js";
8
+ import { strRecord, toPolicySnapshot } from "../internal/decode.js";
9
+ /**
10
+ * For adapting your own UI — hiding an export button, disabling a share sheet.
11
+ *
12
+ * **PIN prompts, screenshot blocking and encryption are enforced inside the SDK and
13
+ * never surface here.** Do not attempt to implement enforcement from these booleans.
14
+ */
15
+ export async function getPolicy() {
16
+ return toPolicySnapshot(await NativeIntune.getPolicy());
17
+ }
18
+
19
+ /** Safe to attach to a support ticket: no tokens, no UPNs. */
20
+ export async function getDiagnostics() {
21
+ return strRecord(await NativeIntune.getDiagnostics());
22
+ }
23
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeIntune","strRecord","toPolicySnapshot","getPolicy","getDiagnostics"],"sourceRoot":"../../../src","sources":["api/policy.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,OAAOA,YAAY,MAAM,oBAAiB;AAC1C,SAASC,SAAS,EAAEC,gBAAgB,QAAQ,uBAAoB;AAGhE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,SAASA,CAAA,EAA4B;EACzD,OAAOD,gBAAgB,CAAC,MAAMF,YAAY,CAACG,SAAS,CAAC,CAAC,CAAC;AACzD;;AAEA;AACA,OAAO,eAAeC,cAAcA,CAAA,EAAyB;EAC3D,OAAOH,SAAS,CAAC,MAAMD,YAAY,CAACI,cAAc,CAAC,CAAC,CAAC;AACvD","ignoreList":[]}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The MAM service token bridge (SPEC §13.4).
5
+ *
6
+ * The SDK asks for this token on a background thread, including on its own retry
7
+ * schedule when no JS call is in flight — which is why it is a registration rather than
8
+ * a callback parameter on `enroll`.
9
+ *
10
+ * The token never leaves the module: the provider's answer goes to native, native hands
11
+ * it to the SDK, and it is never logged or returned to JS (CLAUDE.md rule 9).
12
+ */
13
+
14
+ import NativeIntune from "../NativeIntune.js";
15
+ import { emitter } from "../internal/emitter.js";
16
+ import { str } from "../internal/decode.js";
17
+ let tokenProvider = null;
18
+
19
+ /**
20
+ * Registers the provider for `authMode: 'external'`. Return `null` from it to say
21
+ * "cannot get a token right now" — the SDK treats that as needing authorization rather
22
+ * than as a hard failure.
23
+ */
24
+ export function setTokenProvider(provider) {
25
+ tokenProvider = provider;
26
+ }
27
+
28
+ /**
29
+ * Subscribed at import time, not from `setTokenProvider`.
30
+ *
31
+ * If nothing answers, the SDK waits until the native timeout — 45s on iOS, and on
32
+ * Android that is a *held background thread*. Replying "no provider" immediately turns a
33
+ * stall into a fast, named failure.
34
+ */
35
+ emitter.addListener('tokenRequest', raw => {
36
+ const r = raw;
37
+ const requestId = str(r.requestId);
38
+ const request = {
39
+ resourceId: str(r.resourceId),
40
+ tenantId: str(r.tenantId),
41
+ authority: str(r.authority),
42
+ accountId: str(r.accountId)
43
+ };
44
+ const active = tokenProvider;
45
+ if (active === null) {
46
+ NativeIntune.rejectToken({
47
+ requestId,
48
+ reason: "No token provider is registered. In authMode 'external' the app must call " + 'setTokenProvider() before enrolling.'
49
+ });
50
+ return;
51
+ }
52
+ const respond = async () => {
53
+ try {
54
+ const token = await active(request);
55
+ if (typeof token === 'string' && token.length > 0) {
56
+ NativeIntune.resolveToken({
57
+ requestId,
58
+ token
59
+ });
60
+ } else {
61
+ NativeIntune.rejectToken({
62
+ requestId,
63
+ reason: 'token provider returned no token'
64
+ });
65
+ }
66
+ } catch (e) {
67
+ // The message reaches getDiagnostics and support logs, so pass the message and not
68
+ // the error object — a nested response body can carry a token.
69
+ NativeIntune.rejectToken({
70
+ requestId,
71
+ reason: e instanceof Error ? e.message : 'token provider threw'
72
+ });
73
+ }
74
+ };
75
+
76
+ // Nothing upstream can observe this promise: the SDK is waiting on the native side,
77
+ // and every path above already answers it.
78
+ respond().catch(() => {});
79
+ });
80
+ //# sourceMappingURL=tokenProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeIntune","emitter","str","tokenProvider","setTokenProvider","provider","addListener","raw","r","requestId","request","resourceId","tenantId","authority","accountId","active","rejectToken","reason","respond","token","length","resolveToken","e","Error","message","catch"],"sourceRoot":"../../../src","sources":["api/tokenProvider.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,YAAY,MAAM,oBAAiB;AAC1C,SAASC,OAAO,QAAQ,wBAAqB;AAC7C,SAASC,GAAG,QAAQ,uBAAoB;AAGxC,IAAIC,aAAmC,GAAG,IAAI;;AAE9C;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACC,QAA8B,EAAQ;EACrEF,aAAa,GAAGE,QAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACAJ,OAAO,CAACK,WAAW,CAAC,cAAc,EAAGC,GAAW,IAAK;EACnD,MAAMC,CAAC,GAAGD,GAA8B;EACxC,MAAME,SAAS,GAAGP,GAAG,CAACM,CAAC,CAACC,SAAS,CAAC;EAClC,MAAMC,OAAqB,GAAG;IAC5BC,UAAU,EAAET,GAAG,CAACM,CAAC,CAACG,UAAU,CAAC;IAC7BC,QAAQ,EAAEV,GAAG,CAACM,CAAC,CAACI,QAAQ,CAAC;IACzBC,SAAS,EAAEX,GAAG,CAACM,CAAC,CAACK,SAAS,CAAC;IAC3BC,SAAS,EAAEZ,GAAG,CAACM,CAAC,CAACM,SAAS;EAC5B,CAAC;EAED,MAAMC,MAAM,GAAGZ,aAAa;EAC5B,IAAIY,MAAM,KAAK,IAAI,EAAE;IACnBf,YAAY,CAACgB,WAAW,CAAC;MACvBP,SAAS;MACTQ,MAAM,EACJ,4EAA4E,GAC5E;IACJ,CAAC,CAAC;IACF;EACF;EAEA,MAAMC,OAAO,GAAG,MAAAA,CAAA,KAAY;IAC1B,IAAI;MACF,MAAMC,KAAK,GAAG,MAAMJ,MAAM,CAACL,OAAO,CAAC;MACnC,IAAI,OAAOS,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACC,MAAM,GAAG,CAAC,EAAE;QACjDpB,YAAY,CAACqB,YAAY,CAAC;UAAEZ,SAAS;UAAEU;QAAM,CAAC,CAAC;MACjD,CAAC,MAAM;QACLnB,YAAY,CAACgB,WAAW,CAAC;UACvBP,SAAS;UACTQ,MAAM,EAAE;QACV,CAAC,CAAC;MACJ;IACF,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV;MACA;MACAtB,YAAY,CAACgB,WAAW,CAAC;QACvBP,SAAS;QACTQ,MAAM,EAAEK,CAAC,YAAYC,KAAK,GAAGD,CAAC,CAACE,OAAO,GAAG;MAC3C,CAAC,CAAC;IACJ;EACF,CAAC;;EAED;EACA;EACAN,OAAO,CAAC,CAAC,CAACO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3B,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Public API for react-native-intune. See SPEC §13 for the reference — a method that
5
+ * exists here but not there does not exist, and the two change in the same commit.
6
+ *
7
+ * This file is deliberately only a surface. The work is one directory down:
8
+ *
9
+ * ```
10
+ * src/
11
+ * NativeIntune.ts Codegen spec — the only file Codegen reads, deliberately loose
12
+ * types.ts every public type and enum
13
+ * api/
14
+ * lifecycle.ts configure, isSupported, broker presence
15
+ * auth.ts sign-in, tokens for your own API (authMode 'builtin')
16
+ * enrollment.ts enroll, getState, reset
17
+ * policy.ts getPolicy, getDiagnostics
18
+ * events.ts subscriptions
19
+ * tokenProvider.ts the MAM service token bridge (authMode 'external')
20
+ * internal/
21
+ * decode.ts bridge Object -> typed, with deliberate fallbacks
22
+ * errors.ts IntuneError and the accountId guard
23
+ * emitter.ts the single NativeEventEmitter
24
+ * ```
25
+ *
26
+ * Both import styles work and neither is preferred:
27
+ *
28
+ * ```ts
29
+ * import Intune from 'react-native-intune'; Intune.configure(...)
30
+ * import { configure } from 'react-native-intune'; configure(...)
31
+ * ```
32
+ */
33
+
34
+ export * from "./types.js";
35
+ export { IntuneError } from "./internal/errors.js";
36
+ import { configure, getBrokerStatus, isSupported, openBrokerInstall } from "./api/lifecycle.js";
37
+ import { acquireToken, getAccounts, signIn, signInAndEnroll, signInSilent, signOut } from "./api/auth.js";
38
+ import { enroll, enrollInteractive, getState, reset, setResetHandler } from "./api/enrollment.js";
39
+ import { getDiagnostics, getPolicy } from "./api/policy.js";
40
+ import { onBrokerStatusChanged, onEnrollmentResult, onPolicyChanged, onRestartRequired, onUnenrollmentResult, onWipeRequested } from "./api/events.js";
41
+ import { setTokenProvider } from "./api/tokenProvider.js";
42
+ export {
43
+ // setup
44
+ configure, isSupported, getBrokerStatus, openBrokerInstall,
45
+ // auth — authMode 'builtin'
46
+ signIn, signInSilent, signInAndEnroll, acquireToken, getAccounts, signOut,
47
+ // enrollment and reset
48
+ enroll, enrollInteractive, getState, reset, setResetHandler,
49
+ // policy
50
+ getPolicy, getDiagnostics,
51
+ // token bridge — authMode 'external'
52
+ setTokenProvider,
53
+ // events
54
+ onEnrollmentResult, onUnenrollmentResult, onPolicyChanged, onWipeRequested, onRestartRequired, onBrokerStatusChanged };
55
+ const Intune = {
56
+ configure,
57
+ isSupported,
58
+ getBrokerStatus,
59
+ openBrokerInstall,
60
+ signIn,
61
+ signInSilent,
62
+ signInAndEnroll,
63
+ acquireToken,
64
+ getAccounts,
65
+ signOut,
66
+ enroll,
67
+ enrollInteractive,
68
+ getState,
69
+ reset,
70
+ setResetHandler,
71
+ getPolicy,
72
+ getDiagnostics,
73
+ setTokenProvider,
74
+ onEnrollmentResult,
75
+ onUnenrollmentResult,
76
+ onPolicyChanged,
77
+ onWipeRequested,
78
+ onRestartRequired,
79
+ onBrokerStatusChanged
80
+ };
81
+ export default Intune;
82
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["IntuneError","configure","getBrokerStatus","isSupported","openBrokerInstall","acquireToken","getAccounts","signIn","signInAndEnroll","signInSilent","signOut","enroll","enrollInteractive","getState","reset","setResetHandler","getDiagnostics","getPolicy","onBrokerStatusChanged","onEnrollmentResult","onPolicyChanged","onRestartRequired","onUnenrollmentResult","onWipeRequested","setTokenProvider","Intune"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,YAAS;AACvB,SAASA,WAAW,QAAQ,sBAAmB;AAE/C,SACEC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,iBAAiB,QACZ,oBAAiB;AACxB,SACEC,YAAY,EACZC,WAAW,EACXC,MAAM,EACNC,eAAe,EACfC,YAAY,EACZC,OAAO,QACF,eAAY;AACnB,SACEC,MAAM,EACNC,iBAAiB,EACjBC,QAAQ,EACRC,KAAK,EACLC,eAAe,QACV,qBAAkB;AACzB,SAASC,cAAc,EAAEC,SAAS,QAAQ,iBAAc;AACxD,SACEC,qBAAqB,EACrBC,kBAAkB,EAClBC,eAAe,EACfC,iBAAiB,EACjBC,oBAAoB,EACpBC,eAAe,QACV,iBAAc;AACrB,SAASC,gBAAgB,QAAQ,wBAAqB;AAEtD;AACE;AACAvB,SAAS,EACTE,WAAW,EACXD,eAAe,EACfE,iBAAiB;AACjB;AACAG,MAAM,EACNE,YAAY,EACZD,eAAe,EACfH,YAAY,EACZC,WAAW,EACXI,OAAO;AACP;AACAC,MAAM,EACNC,iBAAiB,EACjBC,QAAQ,EACRC,KAAK,EACLC,eAAe;AACf;AACAE,SAAS,EACTD,cAAc;AACd;AACAQ,gBAAgB;AAChB;AACAL,kBAAkB,EAClBG,oBAAoB,EACpBF,eAAe,EACfG,eAAe,EACfF,iBAAiB,EACjBH,qBAAqB;AAGvB,MAAMO,MAAM,GAAG;EACbxB,SAAS;EACTE,WAAW;EACXD,eAAe;EACfE,iBAAiB;EACjBG,MAAM;EACNE,YAAY;EACZD,eAAe;EACfH,YAAY;EACZC,WAAW;EACXI,OAAO;EACPC,MAAM;EACNC,iBAAiB;EACjBC,QAAQ;EACRC,KAAK;EACLC,eAAe;EACfE,SAAS;EACTD,cAAc;EACdQ,gBAAgB;EAChBL,kBAAkB;EAClBG,oBAAoB;EACpBF,eAAe;EACfG,eAAe;EACfF,iBAAiB;EACjBH;AACF,CAAU;AAEV,eAAeO,MAAM","ignoreList":[]}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Turning what the bridge hands us into the public types.
5
+ *
6
+ * Everything crossing the bridge is `Object` because Codegen accepts nothing richer, so
7
+ * this is where it becomes typed. Two rules hold throughout:
8
+ *
9
+ * - **A value we do not recognise never throws.** An SDK update that adds a status
10
+ * must not crash a shipped app, so unknown strings fall back rather than raise.
11
+ * - **A missing field gets a deliberate default**, chosen per field. For policy that
12
+ * means permissive, not `false`: reporting `false` would hide functionality nothing
13
+ * is restricting.
14
+ */
15
+
16
+ import { Platform } from 'react-native';
17
+ import { EnrollmentStatus, ResetStage } from "../types.js";
18
+
19
+ // ---------------------------------------------------------------- primitives
20
+
21
+ export function str(value, fallback = '') {
22
+ return typeof value === 'string' ? value : fallback;
23
+ }
24
+ export function nullableStr(value) {
25
+ return typeof value === 'string' && value.length > 0 ? value : null;
26
+ }
27
+
28
+ /**
29
+ * Accepts `0` and `1` as well as real booleans.
30
+ *
31
+ * Not laziness — defence against a genuine bridge nuance. In C, `a || b` has type `int`,
32
+ * so `@(someBool || otherBool)` on the native side boxes an NSNumber holding an integer
33
+ * and arrives here as the number `1`, not `true`. A strict check turns that into the
34
+ * `fallback`, which is how `brokerAvailable` came back `false` on a device that had a
35
+ * broker installed — a wrong answer, silently, in a public API field.
36
+ *
37
+ * The native side was fixed, but this stays: a wrong boolean is worse than a tolerant
38
+ * decoder, and nothing distinguishes "native sent 1" from "native sent true" in a way a
39
+ * consumer should care about. Anything that is neither still takes the fallback.
40
+ */
41
+ /**
42
+ * Narrows a restart reason, falling back to `unknown` rather than passing a raw string
43
+ * through. A reason a future SDK adds must not break a shipped app — the app still has a
44
+ * restart to perform either way.
45
+ */
46
+ export function toRestartReason(value) {
47
+ return value === 'policyAppliedFirstTime' ? value : 'unknown';
48
+ }
49
+ export function bool(value, fallback = false) {
50
+ if (typeof value === 'boolean') {
51
+ return value;
52
+ }
53
+ if (value === 1 || value === 0) {
54
+ return value === 1;
55
+ }
56
+ return fallback;
57
+ }
58
+ export function strArray(value) {
59
+ return Array.isArray(value) ? value.filter(v => typeof v === 'string') : [];
60
+ }
61
+ export function strRecord(value) {
62
+ if (typeof value !== 'object' || value === null) return {};
63
+ const out = {};
64
+ for (const [k, v] of Object.entries(value)) {
65
+ out[k] = typeof v === 'string' ? v : String(v);
66
+ }
67
+ return out;
68
+ }
69
+
70
+ // ---------------------------------------------------------------- enums
71
+
72
+ const ENROLLMENT_STATUSES = new Set(Object.values(EnrollmentStatus));
73
+ export function toEnrollmentStatus(value) {
74
+ return typeof value === 'string' && ENROLLMENT_STATUSES.has(value) ? value : EnrollmentStatus.Unknown;
75
+ }
76
+ const RESET_STAGES = new Set(Object.values(ResetStage));
77
+ const RESET_REASONS = new Set(['logout', 'tenant_changed', 'intune_disabled', 'remote_wipe', 'account_switch', 'support_reset', 'resume']);
78
+
79
+ /** Null rather than a guess: an unrecognised reason is not worth acting on. */
80
+ export function toResetReason(value) {
81
+ return typeof value === 'string' && RESET_REASONS.has(value) ? value : null;
82
+ }
83
+ export function toResetStage(value) {
84
+ return typeof value === 'string' && RESET_STAGES.has(value) ? value : null;
85
+ }
86
+
87
+ // ---------------------------------------------------------------- objects
88
+
89
+ export function toEnrollmentResult(raw) {
90
+ const r = raw;
91
+ return {
92
+ status: toEnrollmentStatus(r.status),
93
+ accountId: nullableStr(r.accountId),
94
+ nativeCode: str(r.nativeCode),
95
+ nativeMessage: str(r.nativeMessage),
96
+ restartRequired: bool(r.restartRequired)
97
+ };
98
+ }
99
+ export function toIntuneState(raw) {
100
+ const r = raw;
101
+ return {
102
+ configured: bool(r.configured),
103
+ configuredTenantId: nullableStr(r.configuredTenantId),
104
+ registeredAccountIds: strArray(r.registeredAccountIds),
105
+ enrolledAccountId: nullableStr(r.enrolledAccountId),
106
+ status: r.status == null ? null : toEnrollmentStatus(r.status),
107
+ pendingReset: toResetStage(r.pendingReset),
108
+ pendingResetReason: toResetReason(r.pendingResetReason)
109
+ };
110
+ }
111
+ export function toPolicySnapshot(raw) {
112
+ const r = raw;
113
+ return {
114
+ isManaged: bool(r.isManaged),
115
+ // Permissive defaults: an unmanaged app restricts nothing.
116
+ canSaveToLocal: bool(r.canSaveToLocal, true),
117
+ canSaveToPersonal: bool(r.canSaveToPersonal, true),
118
+ canOpenFromUnmanaged: bool(r.canOpenFromUnmanaged, true),
119
+ screenshotAllowed: bool(r.screenshotAllowed, true),
120
+ raw: strRecord(r.raw)
121
+ };
122
+ }
123
+ export function toBrokerStatus(raw) {
124
+ const r = raw;
125
+ return {
126
+ brokerAvailable: bool(r.brokerAvailable),
127
+ companyPortalInstalled: bool(r.companyPortalInstalled),
128
+ authenticatorInstalled: bool(r.authenticatorInstalled),
129
+ // Android cannot enroll without a broker; iOS can.
130
+ required: bool(r.required, Platform.OS === 'android')
131
+ };
132
+ }
133
+ export function toAuthResult(raw) {
134
+ const r = raw;
135
+ return {
136
+ accountId: str(r.accountId),
137
+ tenantId: str(r.tenantId),
138
+ username: str(r.username),
139
+ accessToken: str(r.accessToken),
140
+ idToken: nullableStr(r.idToken),
141
+ expiresOn: typeof r.expiresOn === 'number' ? r.expiresOn : 0,
142
+ scopes: strArray(r.scopes)
143
+ };
144
+ }
145
+ export function toAuthAccount(raw) {
146
+ const r = raw;
147
+ return {
148
+ accountId: str(r.accountId),
149
+ tenantId: str(r.tenantId),
150
+ username: str(r.username)
151
+ };
152
+ }
153
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","EnrollmentStatus","ResetStage","str","value","fallback","nullableStr","length","toRestartReason","bool","strArray","Array","isArray","filter","v","strRecord","out","k","Object","entries","String","ENROLLMENT_STATUSES","Set","values","toEnrollmentStatus","has","Unknown","RESET_STAGES","RESET_REASONS","toResetReason","toResetStage","toEnrollmentResult","raw","r","status","accountId","nativeCode","nativeMessage","restartRequired","toIntuneState","configured","configuredTenantId","registeredAccountIds","enrolledAccountId","pendingReset","pendingResetReason","toPolicySnapshot","isManaged","canSaveToLocal","canSaveToPersonal","canOpenFromUnmanaged","screenshotAllowed","toBrokerStatus","brokerAvailable","companyPortalInstalled","authenticatorInstalled","required","OS","toAuthResult","tenantId","username","accessToken","idToken","expiresOn","scopes","toAuthAccount"],"sourceRoot":"../../../src","sources":["internal/decode.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,SACEC,gBAAgB,EAChBC,UAAU,QASL,aAAU;;AAEjB;;AAEA,OAAO,SAASC,GAAGA,CAACC,KAAc,EAAEC,QAAQ,GAAG,EAAE,EAAU;EACzD,OAAO,OAAOD,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGC,QAAQ;AACrD;AAEA,OAAO,SAASC,WAAWA,CAACF,KAAc,EAAiB;EACzD,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACG,MAAM,GAAG,CAAC,GAAGH,KAAK,GAAG,IAAI;AACrE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,eAAeA,CAACJ,KAAc,EAAiB;EAC7D,OAAOA,KAAK,KAAK,wBAAwB,GAAGA,KAAK,GAAG,SAAS;AAC/D;AAEA,OAAO,SAASK,IAAIA,CAACL,KAAc,EAAEC,QAAQ,GAAG,KAAK,EAAW;EAC9D,IAAI,OAAOD,KAAK,KAAK,SAAS,EAAE;IAC9B,OAAOA,KAAK;EACd;EACA,IAAIA,KAAK,KAAK,CAAC,IAAIA,KAAK,KAAK,CAAC,EAAE;IAC9B,OAAOA,KAAK,KAAK,CAAC;EACpB;EACA,OAAOC,QAAQ;AACjB;AAEA,OAAO,SAASK,QAAQA,CAACN,KAAc,EAAY;EACjD,OAAOO,KAAK,CAACC,OAAO,CAACR,KAAK,CAAC,GACvBA,KAAK,CAACS,MAAM,CAAEC,CAAC,IAAkB,OAAOA,CAAC,KAAK,QAAQ,CAAC,GACvD,EAAE;AACR;AAEA,OAAO,SAASC,SAASA,CAACX,KAAc,EAA0B;EAChE,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC;EAC1D,MAAMY,GAA2B,GAAG,CAAC,CAAC;EACtC,KAAK,MAAM,CAACC,CAAC,EAAEH,CAAC,CAAC,IAAII,MAAM,CAACC,OAAO,CAACf,KAAgC,CAAC,EAAE;IACrEY,GAAG,CAACC,CAAC,CAAC,GAAG,OAAOH,CAAC,KAAK,QAAQ,GAAGA,CAAC,GAAGM,MAAM,CAACN,CAAC,CAAC;EAChD;EACA,OAAOE,GAAG;AACZ;;AAEA;;AAEA,MAAMK,mBAAmB,GAAG,IAAIC,GAAG,CAASJ,MAAM,CAACK,MAAM,CAACtB,gBAAgB,CAAC,CAAC;AAE5E,OAAO,SAASuB,kBAAkBA,CAACpB,KAAc,EAAoB;EACnE,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIiB,mBAAmB,CAACI,GAAG,CAACrB,KAAK,CAAC,GAC7DA,KAAK,GACNH,gBAAgB,CAACyB,OAAO;AAC9B;AAEA,MAAMC,YAAY,GAAG,IAAIL,GAAG,CAASJ,MAAM,CAACK,MAAM,CAACrB,UAAU,CAAC,CAAC;AAE/D,MAAM0B,aAAa,GAAG,IAAIN,GAAG,CAAS,CACpC,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,QAAQ,CACT,CAAC;;AAEF;AACA,OAAO,SAASO,aAAaA,CAACzB,KAAc,EAAsB;EAChE,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIwB,aAAa,CAACH,GAAG,CAACrB,KAAK,CAAC,GACvDA,KAAK,GACN,IAAI;AACV;AAEA,OAAO,SAAS0B,YAAYA,CAAC1B,KAAc,EAAqB;EAC9D,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIuB,YAAY,CAACF,GAAG,CAACrB,KAAK,CAAC,GACtDA,KAAK,GACN,IAAI;AACV;;AAEA;;AAEA,OAAO,SAAS2B,kBAAkBA,CAACC,GAAW,EAAoB;EAChE,MAAMC,CAAC,GAAGD,GAA8B;EACxC,OAAO;IACLE,MAAM,EAAEV,kBAAkB,CAACS,CAAC,CAACC,MAAM,CAAC;IACpCC,SAAS,EAAE7B,WAAW,CAAC2B,CAAC,CAACE,SAAS,CAAC;IACnCC,UAAU,EAAEjC,GAAG,CAAC8B,CAAC,CAACG,UAAU,CAAC;IAC7BC,aAAa,EAAElC,GAAG,CAAC8B,CAAC,CAACI,aAAa,CAAC;IACnCC,eAAe,EAAE7B,IAAI,CAACwB,CAAC,CAACK,eAAe;EACzC,CAAC;AACH;AAEA,OAAO,SAASC,aAAaA,CAACP,GAAW,EAAe;EACtD,MAAMC,CAAC,GAAGD,GAA8B;EACxC,OAAO;IACLQ,UAAU,EAAE/B,IAAI,CAACwB,CAAC,CAACO,UAAU,CAAC;IAC9BC,kBAAkB,EAAEnC,WAAW,CAAC2B,CAAC,CAACQ,kBAAkB,CAAC;IACrDC,oBAAoB,EAAEhC,QAAQ,CAACuB,CAAC,CAACS,oBAAoB,CAAC;IACtDC,iBAAiB,EAAErC,WAAW,CAAC2B,CAAC,CAACU,iBAAiB,CAAC;IACnDT,MAAM,EAAED,CAAC,CAACC,MAAM,IAAI,IAAI,GAAG,IAAI,GAAGV,kBAAkB,CAACS,CAAC,CAACC,MAAM,CAAC;IAC9DU,YAAY,EAAEd,YAAY,CAACG,CAAC,CAACW,YAAY,CAAC;IAC1CC,kBAAkB,EAAEhB,aAAa,CAACI,CAAC,CAACY,kBAAkB;EACxD,CAAC;AACH;AAEA,OAAO,SAASC,gBAAgBA,CAACd,GAAW,EAAkB;EAC5D,MAAMC,CAAC,GAAGD,GAA8B;EACxC,OAAO;IACLe,SAAS,EAAEtC,IAAI,CAACwB,CAAC,CAACc,SAAS,CAAC;IAC5B;IACAC,cAAc,EAAEvC,IAAI,CAACwB,CAAC,CAACe,cAAc,EAAE,IAAI,CAAC;IAC5CC,iBAAiB,EAAExC,IAAI,CAACwB,CAAC,CAACgB,iBAAiB,EAAE,IAAI,CAAC;IAClDC,oBAAoB,EAAEzC,IAAI,CAACwB,CAAC,CAACiB,oBAAoB,EAAE,IAAI,CAAC;IACxDC,iBAAiB,EAAE1C,IAAI,CAACwB,CAAC,CAACkB,iBAAiB,EAAE,IAAI,CAAC;IAClDnB,GAAG,EAAEjB,SAAS,CAACkB,CAAC,CAACD,GAAG;EACtB,CAAC;AACH;AAEA,OAAO,SAASoB,cAAcA,CAACpB,GAAW,EAAgB;EACxD,MAAMC,CAAC,GAAGD,GAA8B;EACxC,OAAO;IACLqB,eAAe,EAAE5C,IAAI,CAACwB,CAAC,CAACoB,eAAe,CAAC;IACxCC,sBAAsB,EAAE7C,IAAI,CAACwB,CAAC,CAACqB,sBAAsB,CAAC;IACtDC,sBAAsB,EAAE9C,IAAI,CAACwB,CAAC,CAACsB,sBAAsB,CAAC;IACtD;IACAC,QAAQ,EAAE/C,IAAI,CAACwB,CAAC,CAACuB,QAAQ,EAAExD,QAAQ,CAACyD,EAAE,KAAK,SAAS;EACtD,CAAC;AACH;AAEA,OAAO,SAASC,YAAYA,CAAC1B,GAAW,EAAc;EACpD,MAAMC,CAAC,GAAGD,GAA8B;EACxC,OAAO;IACLG,SAAS,EAAEhC,GAAG,CAAC8B,CAAC,CAACE,SAAS,CAAC;IAC3BwB,QAAQ,EAAExD,GAAG,CAAC8B,CAAC,CAAC0B,QAAQ,CAAC;IACzBC,QAAQ,EAAEzD,GAAG,CAAC8B,CAAC,CAAC2B,QAAQ,CAAC;IACzBC,WAAW,EAAE1D,GAAG,CAAC8B,CAAC,CAAC4B,WAAW,CAAC;IAC/BC,OAAO,EAAExD,WAAW,CAAC2B,CAAC,CAAC6B,OAAO,CAAC;IAC/BC,SAAS,EAAE,OAAO9B,CAAC,CAAC8B,SAAS,KAAK,QAAQ,GAAG9B,CAAC,CAAC8B,SAAS,GAAG,CAAC;IAC5DC,MAAM,EAAEtD,QAAQ,CAACuB,CAAC,CAAC+B,MAAM;EAC3B,CAAC;AACH;AAEA,OAAO,SAASC,aAAaA,CAACjC,GAAW,EAAe;EACtD,MAAMC,CAAC,GAAGD,GAA8B;EACxC,OAAO;IACLG,SAAS,EAAEhC,GAAG,CAAC8B,CAAC,CAACE,SAAS,CAAC;IAC3BwB,QAAQ,EAAExD,GAAG,CAAC8B,CAAC,CAAC0B,QAAQ,CAAC;IACzBC,QAAQ,EAAEzD,GAAG,CAAC8B,CAAC,CAAC2B,QAAQ;EAC1B,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The one emitter instance, constructed at import time.
5
+ *
6
+ * Import time and not on first use, deliberately: a service-initiated wipe can arrive
7
+ * before the app has called anything at all, and native queues events until JS
8
+ * subscribes. An emitter created lazily would miss the very events that matter most
9
+ * (SPEC §4.4).
10
+ */
11
+
12
+ import { NativeEventEmitter } from 'react-native';
13
+ import NativeIntune from "../NativeIntune.js";
14
+ export const emitter = new NativeEventEmitter(NativeIntune);
15
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeEventEmitter","NativeIntune","emitter"],"sourceRoot":"../../../src","sources":["internal/emitter.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,kBAAkB,QAAQ,cAAc;AAEjD,OAAOC,YAAY,MAAM,oBAAiB;AAE1C,OAAO,MAAMC,OAAO,GAAG,IAAIF,kBAAkB,CAACC,YAAY,CAAC","ignoreList":[]}