addigy 2.2.3 → 2.4.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/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Extension, IAddigyConfig, IAddigyInternalAuthObject, PPPCInput } from './types';
1
+ import { Extension, FilevaultRequest, IAddigyConfig, IAddigyInternalAuthObject, NotificationSettings, PPPCInput, SupportedOsVersions } from './types';
2
2
  export * from './types';
3
3
  declare enum AlertStatus {
4
4
  Acknowledged = "Acknowledged",
@@ -58,11 +58,16 @@ export declare class Addigy {
58
58
  allowedSystemExtensions?: Extension[];
59
59
  allowedSystemExtensionTypes?: Extension[];
60
60
  allowedTeamIdentifiers?: string[];
61
- }): Promise<object>;
61
+ }): Promise<any>;
62
+ createNotificationSettingsPolicy(authObject: IAddigyInternalAuthObject, name: string, notificationSettings: NotificationSettings[]): Promise<any>;
63
+ createCustomProfile(authObject: IAddigyInternalAuthObject, name: string, customProfileText: string, supportedOsVersions: SupportedOsVersions, payloadScope?: 'System' | 'User', is_profile_signed?: boolean): Promise<any>;
64
+ createMdmProfile(authObject: IAddigyInternalAuthObject, mdmProfile: any): Promise<any>;
65
+ createFilevaultPolicy(authObject: IAddigyInternalAuthObject, name: string, filevault: FilevaultRequest, payloadPriority?: number): Promise<any>;
62
66
  createPPPCPolicy(authObject: IAddigyInternalAuthObject, name: string, pppcPolicy: PPPCInput[]): Promise<any>;
63
67
  getMdmConfigurations(authObject: IAddigyInternalAuthObject): Promise<any[]>;
64
68
  getMdmConfigurationByName(authObject: IAddigyInternalAuthObject, name: string): Promise<any>;
65
69
  getFileVaultKeys(authObject: IAddigyInternalAuthObject): Promise<object[]>;
70
+ toSnakeCase(text: string): string;
66
71
  getApnsCerts(authObject: IAddigyInternalAuthObject, next?: string, previous?: string): Promise<object[]>;
67
72
  getAuthObject(): Promise<IAddigyInternalAuthObject>;
68
73
  getImpersonationAuthObject(authObject: IAddigyInternalAuthObject, orgId: string): Promise<IAddigyInternalAuthObject>;
package/index.js CHANGED
@@ -16,6 +16,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.Addigy = void 0;
17
17
  const got_1 = __importDefault(require("got"));
18
18
  const uuid_1 = require("uuid");
19
+ const plist_1 = __importDefault(require("@expo/plist"));
19
20
  __exportStar(require("./types"), exports);
20
21
  var AlertStatus;
21
22
  (function (AlertStatus) {
@@ -533,7 +534,7 @@ class Addigy {
533
534
  method: 'POST',
534
535
  json: postBody,
535
536
  });
536
- return res.body;
537
+ return JSON.parse(res.body);
537
538
  }
538
539
  catch (err) {
539
540
  throw err;
@@ -548,7 +549,7 @@ class Addigy {
548
549
  },
549
550
  method: 'DELETE',
550
551
  });
551
- return res.body;
552
+ return JSON.parse(res.body);
552
553
  }
553
554
  catch (err) {
554
555
  throw err;
@@ -613,7 +614,7 @@ class Addigy {
613
614
  method: 'POST',
614
615
  json: { payloads: [payload] },
615
616
  });
616
- return res.body;
617
+ return JSON.parse(res.body);
617
618
  }
618
619
  catch (err) {
619
620
  throw err;
@@ -660,7 +661,163 @@ class Addigy {
660
661
  method: 'POST',
661
662
  json: { payloads: [payload] },
662
663
  });
663
- return res.body;
664
+ return JSON.parse(res.body);
665
+ }
666
+ catch (err) {
667
+ throw err;
668
+ }
669
+ }
670
+ async createNotificationSettingsPolicy(authObject, name, notificationSettings) {
671
+ const groupUUID = uuid_1.v4();
672
+ const payload = {
673
+ addigy_payload_type: 'com.addigy.notifications.com.apple.notificationsettings',
674
+ payload_type: 'com.apple.notificationsettings',
675
+ payload_version: 1,
676
+ payload_identifier: `com.addigy.notifications.com.apple.notificationsettings.${groupUUID}`,
677
+ payload_uuid: uuid_1.v4(),
678
+ payload_group_id: groupUUID,
679
+ payload_display_name: name,
680
+ notification_settings: notificationSettings,
681
+ };
682
+ let res = await this._addigyRequest('https://app-prod.addigy.com/api/mdm/user/profiles/configurations', {
683
+ headers: {
684
+ Cookie: `auth_token=${authObject.authToken};`,
685
+ origin: 'https://app-prod.addigy.com',
686
+ },
687
+ method: 'POST',
688
+ json: { payloads: [payload] },
689
+ });
690
+ return JSON.parse(res.body);
691
+ }
692
+ async createCustomProfile(authObject, name, customProfileText, supportedOsVersions, payloadScope = 'System', is_profile_signed = false) {
693
+ const groupUUID = uuid_1.v4();
694
+ const customProfileJson = plist_1.default.parse(customProfileText);
695
+ const updateCustomProfileJson = Object.entries(customProfileJson).reduce((acc, [key, value]) => {
696
+ acc[this.toSnakeCase(key)] = value;
697
+ return acc;
698
+ }, {});
699
+ const customProfileBase64 = Buffer.from(customProfileText).toString('base64');
700
+ const payload = {
701
+ addigy_payload_type: 'com.addigy.custom.mdm.payload',
702
+ payload_type: 'custom',
703
+ payload_version: 1,
704
+ payload_identifier: `com.addigy.custom.mdm.payload.${groupUUID}`,
705
+ payload_uuid: `custom-profile-${uuid_1.v4()}`,
706
+ payload_group_id: groupUUID,
707
+ payload_display_name: name,
708
+ is_profile_signed,
709
+ profile_json_data: updateCustomProfileJson,
710
+ decoded_profile_content: customProfileText,
711
+ custom_profile_content: customProfileBase64,
712
+ supported_os_versions: supportedOsVersions,
713
+ payload_scope: payloadScope,
714
+ };
715
+ try {
716
+ let res = await this._addigyRequest('https://app-prod.addigy.com/api/mdm/user/profiles/configurations', {
717
+ headers: {
718
+ Cookie: `auth_token=${authObject.authToken};`,
719
+ origin: 'https://app-prod.addigy.com',
720
+ },
721
+ method: 'POST',
722
+ json: { payloads: [payload] },
723
+ });
724
+ return JSON.parse(res.body);
725
+ }
726
+ catch (err) {
727
+ throw err;
728
+ }
729
+ }
730
+ async createMdmProfile(authObject, mdmProfile) {
731
+ try {
732
+ let res = await this._addigyRequest('https://app-prod.addigy.com/api/mdm/user/profiles/configurations', {
733
+ headers: {
734
+ Cookie: `auth_token=${authObject.authToken};`,
735
+ origin: 'https://app-prod.addigy.com',
736
+ },
737
+ method: 'POST',
738
+ json: { payloads: mdmProfile },
739
+ });
740
+ return JSON.parse(res.body);
741
+ }
742
+ catch (err) {
743
+ throw err;
744
+ }
745
+ }
746
+ async createFilevaultPolicy(authObject, name, filevault, payloadPriority = 1) {
747
+ const groupUUID = uuid_1.v4();
748
+ const encryptCertPayloadUUID = uuid_1.v4();
749
+ const basePayload = {
750
+ payload_display_name: name,
751
+ payload_version: 1,
752
+ payload_group_id: groupUUID,
753
+ addigy_payload_version: 0,
754
+ payload_priority: payloadPriority,
755
+ };
756
+ const payloads = [
757
+ {
758
+ ...basePayload,
759
+ payload_type: 'com.apple.MCX.FileVault2',
760
+ addigy_payload_type: 'com.addigy.securityAndPrivacy.com.apple.MCX.FileVault2',
761
+ payload_identifier: `com.addigy.securityAndPrivacy.com.apple.MCX.FileVault2.${groupUUID}`,
762
+ payload_uuid: uuid_1.v4(),
763
+ enable: filevault.enable ? 'On' : 'Off',
764
+ defer: filevault.defer,
765
+ use_recovery_key: true,
766
+ show_recovery_key: filevault.showRecoveryKey === undefined ? null : filevault.showRecoveryKey,
767
+ defer_dont_ask_at_user_logout: filevault.deferDontAskAtUserLogout === undefined
768
+ ? null
769
+ : filevault.deferDontAskAtUserLogout,
770
+ defer_force_at_user_login_max_bypass_attempts: filevault.deferForceAtUserLoginMaxBypassAttempts === undefined
771
+ ? null
772
+ : filevault.deferForceAtUserLoginMaxBypassAttempts,
773
+ },
774
+ {
775
+ ...basePayload,
776
+ payload_type: 'com.apple.MCX',
777
+ addigy_payload_type: 'com.addigy.securityAndPrivacy.com.apple.MCX',
778
+ payload_identifier: `com.addigy.securityAndPrivacy.com.apple.MCX.${groupUUID} `,
779
+ payload_uuid: uuid_1.v4(),
780
+ destroy_fv_key_on_standby: filevault.destroyFvKeyOnStandby === undefined
781
+ ? null
782
+ : filevault.destroyFvKeyOnStandby,
783
+ dont_allow_fde_disable: true,
784
+ },
785
+ ];
786
+ if (filevault.escrowRecoveryKey)
787
+ payloads.push({
788
+ ...basePayload,
789
+ addigy_payload_type: 'com.addigy.securityAndPrivacy.com.apple.security.pkcs1',
790
+ payload_type: 'com.apple.security.pkcs1',
791
+ payload_identifier: `com.addigy.securityAndPrivacy.com.apple.security.pkcs1.${groupUUID}`,
792
+ payload_uuid: uuid_1.v4(),
793
+ is_from_security_profile: true,
794
+ }, {
795
+ ...basePayload,
796
+ addigy_payload_type: 'com.addigy.securityAndPrivacy.com.apple.security.FDERecoveryKeyEscrow',
797
+ payload_type: 'com.apple.security.FDERecoveryKeyEscrow',
798
+ payload_identifier: `com.addigy.securityAndPrivacy.com.apple.security.FDERecoveryKeyEscrow.${groupUUID}`,
799
+ payload_uuid: uuid_1.v4(),
800
+ encrypt_cert_payload_uuid: encryptCertPayloadUUID,
801
+ location: 'Key will be escrowed to an Addigy secure database.',
802
+ }, {
803
+ ...basePayload,
804
+ addigy_payload_type: 'com.addigy.securityAndPrivacy.com.apple.security.FDERecoveryRedirect',
805
+ payload_type: 'com.apple.security.FDERecoveryRedirect',
806
+ payload_identifier: `com.addigy.securityAndPrivacy.com.apple.security.FDERecoveryRedirect.${groupUUID}`,
807
+ payload_uuid: uuid_1.v4(),
808
+ encrypt_cert_payload_uuid: encryptCertPayloadUUID,
809
+ redirect_url: '',
810
+ });
811
+ try {
812
+ let res = await this._addigyRequest('https://app-prod.addigy.com/api/mdm/user/profiles/configurations', {
813
+ headers: {
814
+ Cookie: `auth_token=${authObject.authToken};`,
815
+ origin: 'https://app-prod.addigy.com',
816
+ },
817
+ method: 'POST',
818
+ json: { payloads },
819
+ });
820
+ return JSON.parse(res.body);
664
821
  }
665
822
  catch (err) {
666
823
  throw err;
@@ -738,7 +895,7 @@ class Addigy {
738
895
  method: 'POST',
739
896
  json: { payloads: [payload] },
740
897
  });
741
- return res.body;
898
+ return JSON.parse(res.body);
742
899
  }
743
900
  async getMdmConfigurations(authObject) {
744
901
  var _a;
@@ -780,6 +937,11 @@ class Addigy {
780
937
  throw err;
781
938
  }
782
939
  }
940
+ toSnakeCase(text) {
941
+ return text
942
+ .replace(/([^\p{L}\d]+|(?<=\p{L})(?=\d)|(?<=\d)(?=\p{L})|(?<=[\p{Ll}\d])(?=\p{Lu})|(?<=\p{Lu})(?=\p{Lu}\p{Ll})|(?<=[\p{L}\d])(?=\p{Lu}\p{Ll}))/gu, '_')
943
+ .toLowerCase();
944
+ }
783
945
  async getApnsCerts(authObject, next, previous) {
784
946
  let url = 'https://app-prod.addigy.com/api/apn/user/apn/list';
785
947
  if (next) {
@@ -798,7 +960,7 @@ class Addigy {
798
960
  },
799
961
  method: 'GET',
800
962
  });
801
- return JSON.parse(res.body).mdm_app_list;
963
+ return JSON.parse(res.body).items;
802
964
  }
803
965
  catch (err) {
804
966
  throw err;
package/package.json CHANGED
@@ -6,6 +6,7 @@
6
6
  }
7
7
  },
8
8
  "dependencies": {
9
+ "@expo/plist": "0.0.18",
9
10
  "form-data": "4.0.0",
10
11
  "got": "11.8.2",
11
12
  "uuid": "8.3.2"
@@ -13,20 +14,20 @@
13
14
  "description": "",
14
15
  "devDependencies": {
15
16
  "@pliancy/eslint-config-ts": "0.0.5",
16
- "@pliancy/semantic-release-config-npm": "^2.1.0",
17
+ "@pliancy/semantic-release-config-npm": "2.1.0",
17
18
  "@types/got": "9.6.11",
18
19
  "@types/jest": "26.0.23",
19
20
  "@types/node": "15.12.5",
20
21
  "@types/uuid": "8.3.0",
21
- "commitizen": "^4.2.4",
22
+ "commitizen": "4.2.4",
22
23
  "cpy-cli": "3.1.1",
23
24
  "cz-conventional-changelog": "3.3.0",
24
25
  "gh-pages": "3.2.3",
25
- "husky": "^7.0.1",
26
+ "husky": "7.0.1",
26
27
  "jest": "27.0.6",
27
- "npm-run-all": "^4.1.5",
28
+ "npm-run-all": "4.1.5",
28
29
  "open": "8.2.1",
29
- "pinst": "^2.1.6",
30
+ "pinst": "2.1.6",
30
31
  "rimraf": "3.0.2",
31
32
  "ts-jest": "27.0.3",
32
33
  "typedoc": "0.21.2",
@@ -58,7 +59,7 @@
58
59
  "tsc": "tsc -p tsconfig.build.json"
59
60
  },
60
61
  "types": "index.d.ts",
61
- "version": "2.2.3",
62
+ "version": "2.4.0",
62
63
  "volta": {
63
64
  "node": "14.17.1",
64
65
  "yarn": "1.22.10"
package/types.d.ts CHANGED
@@ -10,8 +10,8 @@ export interface IAddigyInternalAuthObject {
10
10
  emailAddress: string;
11
11
  }
12
12
  export interface Payload {
13
- addigy_payload_type: 'com.addigy.syspolicy.system-extension-policy.com.apple.system-extension-policy' | 'com.addigy.TCC.configuration-profile-policy.com.apple.TCC.configuration-profile-policy' | 'com.addigy.syspolicy.kernel-extension-policy.com.apple.syspolicy.kernel-extension-policy';
14
- payload_type: 'com.apple.system-extension-policy' | 'com.apple.syspolicy.kernel-extension-policy' | 'com.apple.TCC.configuration-profile-policy';
13
+ addigy_payload_type: 'com.addigy.syspolicy.system-extension-policy.com.apple.system-extension-policy' | 'com.addigy.TCC.configuration-profile-policy.com.apple.TCC.configuration-profile-policy' | 'com.addigy.syspolicy.kernel-extension-policy.com.apple.syspolicy.kernel-extension-policy' | 'com.addigy.notifications.com.apple.notificationsettings' | 'com.addigy.custom.mdm.payload' | 'com.addigy.securityAndPrivacy.com.apple.MCX.FileVault2' | 'com.addigy.securityAndPrivacy.com.apple.MCX' | 'com.addigy.securityAndPrivacy.com.apple.security.pkcs1' | 'com.addigy.securityAndPrivacy.com.apple.security.FDERecoveryKeyEscrow' | 'com.addigy.securityAndPrivacy.com.apple.security.FDERecoveryRedirect';
14
+ payload_type: 'com.apple.system-extension-policy' | 'com.apple.syspolicy.kernel-extension-policy' | 'com.apple.TCC.configuration-profile-policy' | 'com.apple.notificationsettings' | 'custom' | 'com.apple.MCX.FileVault2' | 'com.apple.MCX' | 'com.apple.security.pkcs1' | 'com.apple.security.FDERecoveryKeyEscrow' | 'com.apple.security.FDERecoveryRedirect';
15
15
  payload_version: number;
16
16
  payload_identifier: string;
17
17
  payload_uuid: string;
@@ -109,3 +109,66 @@ export interface Extension {
109
109
  teamIdentifier: string;
110
110
  bundleIdentifiers: string[];
111
111
  }
112
+ export interface NotificationSettings {
113
+ bundle_identifier: string;
114
+ notifications_enabled: boolean;
115
+ show_in_lock_screen: boolean;
116
+ show_in_notification_center: boolean;
117
+ sounds_enabled: boolean;
118
+ badges_enabled: boolean;
119
+ critical_alert_enabled: boolean;
120
+ preview_type?: any;
121
+ alert_type?: any;
122
+ }
123
+ export interface NotificationSettingsPayload extends Payload {
124
+ notification_settings: NotificationSettings[];
125
+ }
126
+ export interface CustomProfilePayload extends Payload {
127
+ is_profile_signed: boolean;
128
+ custom_profile_content: string;
129
+ decoded_profile_content: string;
130
+ supported_os_versions: SupportedOsVersions;
131
+ payload_scope: 'System' | 'User';
132
+ profile_json_data: CustomProfileJSONData[];
133
+ }
134
+ export interface CustomProfileJSONData {
135
+ payload_identifier: string;
136
+ payload_removal_disallowed: boolean;
137
+ payload_scope: string;
138
+ payload_type: string;
139
+ payload_uuid: string;
140
+ payload_organization: string;
141
+ payload_version: number;
142
+ payload_display_name: string;
143
+ payload_content: any[];
144
+ }
145
+ export interface SupportedOsVersions {
146
+ macOS?: string;
147
+ iOS?: string;
148
+ tvOS?: string;
149
+ }
150
+ export interface FilevaultPayload extends Payload {
151
+ enable?: 'On' | 'Off';
152
+ defer?: boolean;
153
+ use_recovery_key?: boolean;
154
+ show_recovery_key?: boolean | null;
155
+ defer_dont_ask_at_user_logout?: boolean | null;
156
+ defer_force_at_user_login_max_bypass_attempts?: number | null;
157
+ addigy_payload_version?: number;
158
+ destroy_fv_key_on_standby?: boolean | null;
159
+ dont_allow_fde_disable?: boolean;
160
+ is_from_security_profile?: boolean;
161
+ encrypt_cert_payload_uuid?: string;
162
+ location?: string;
163
+ payload_priority?: number;
164
+ redirect_url?: string;
165
+ }
166
+ export interface FilevaultRequest {
167
+ enable?: boolean;
168
+ defer?: boolean;
169
+ showRecoveryKey?: boolean;
170
+ destroyFvKeyOnStandby?: boolean;
171
+ escrowRecoveryKey?: boolean;
172
+ deferDontAskAtUserLogout?: boolean;
173
+ deferForceAtUserLoginMaxBypassAttempts?: -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
174
+ }