@expo/app-integrity 0.1.1 → 0.1.3

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 (57) hide show
  1. package/android/build.gradle +2 -2
  2. package/android/src/main/java/expo/modules/integrity/IntegrityModule.kt +2 -2
  3. package/build/AppIntegrity.d.ts +40 -3
  4. package/build/AppIntegrity.d.ts.map +1 -1
  5. package/build/AppIntegrity.js +47 -10
  6. package/build/AppIntegrity.js.map +1 -1
  7. package/build/ExpoAppIntegrity.types.d.ts +7 -3
  8. package/build/ExpoAppIntegrity.types.d.ts.map +1 -1
  9. package/build/ExpoAppIntegrity.types.js.map +1 -1
  10. package/expo-module.config.json +1 -1
  11. package/ios/IntegrityModule.swift +4 -0
  12. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3-sources.jar +0 -0
  13. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3-sources.jar.md5 +1 -0
  14. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3-sources.jar.sha1 +1 -0
  15. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3-sources.jar.sha256 +1 -0
  16. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3-sources.jar.sha512 +1 -0
  17. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.aar +0 -0
  18. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.aar.md5 +1 -0
  19. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.aar.sha1 +1 -0
  20. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.aar.sha256 +1 -0
  21. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.aar.sha512 +1 -0
  22. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/{0.1.1/expo.modules.integrity-0.1.1.module → 0.1.3/expo.modules.integrity-0.1.3.module} +22 -22
  23. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.module.md5 +1 -0
  24. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.module.sha1 +1 -0
  25. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.module.sha256 +1 -0
  26. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.module.sha512 +1 -0
  27. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/{0.1.1/expo.modules.integrity-0.1.1.pom → 0.1.3/expo.modules.integrity-0.1.3.pom} +1 -1
  28. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.pom.md5 +1 -0
  29. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.pom.sha1 +1 -0
  30. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.pom.sha256 +1 -0
  31. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.3/expo.modules.integrity-0.1.3.pom.sha512 +1 -0
  32. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml +4 -4
  33. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.md5 +1 -1
  34. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha1 +1 -1
  35. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha256 +1 -1
  36. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/maven-metadata.xml.sha512 +1 -1
  37. package/package.json +3 -3
  38. package/src/AppIntegrity.ts +48 -10
  39. package/src/ExpoAppIntegrity.types.ts +7 -3
  40. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1-sources.jar +0 -0
  41. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1-sources.jar.md5 +0 -1
  42. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1-sources.jar.sha1 +0 -1
  43. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1-sources.jar.sha256 +0 -1
  44. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1-sources.jar.sha512 +0 -1
  45. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.aar +0 -0
  46. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.aar.md5 +0 -1
  47. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.aar.sha1 +0 -1
  48. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.aar.sha256 +0 -1
  49. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.aar.sha512 +0 -1
  50. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.module.md5 +0 -1
  51. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.module.sha1 +0 -1
  52. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.module.sha256 +0 -1
  53. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.module.sha512 +0 -1
  54. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.pom.md5 +0 -1
  55. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.pom.sha1 +0 -1
  56. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.pom.sha256 +0 -1
  57. package/local-maven-repo/expo/modules/integrity/expo.modules.integrity/0.1.1/expo.modules.integrity-0.1.1.pom.sha512 +0 -1
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'expo.modules.integrity'
7
- version = '0.1.1'
7
+ version = '0.1.3'
8
8
 
9
9
  android {
10
10
  namespace 'expo.modules.integrity'
11
11
  defaultConfig {
12
12
  versionCode 1
13
- versionName "0.1.1"
13
+ versionName "0.1.3"
14
14
  }
15
15
  }
16
16
 
@@ -53,12 +53,12 @@ class IntegrityModule : Module() {
53
53
  }
54
54
  }
55
55
 
56
- AsyncFunction(REQUEST_INTEGRITY_CHECK_METHOD_NAME) { challenge: String, promise: Promise ->
56
+ AsyncFunction(REQUEST_INTEGRITY_CHECK_METHOD_NAME) { requestHash: String, promise: Promise ->
57
57
  integrityTokenProvider?.let {
58
58
  val integrityTokenResponse: Task<StandardIntegrityToken> =
59
59
  it.request(
60
60
  StandardIntegrityTokenRequest.builder()
61
- .setRequestHash(challenge)
61
+ .setRequestHash(requestHash)
62
62
  .build()
63
63
  )
64
64
  integrityTokenResponse
@@ -1,6 +1,43 @@
1
+ /**
2
+ * A boolean value that indicates whether a particular device provides the [App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) service.
3
+ * Not all device types support the App Attest service, so check for support before using the service.
4
+ * @platform ios
5
+ */
6
+ export declare const isSupported: boolean;
7
+ /**
8
+ * Creates a new cryptographic key for use with the App Attest service.
9
+ * @return A Promise that is fulfilled with a string that contains the key identifier. The key itself is stored securely in the Secure Enclave.
10
+ * @platform ios
11
+ */
1
12
  export declare function generateKey(): Promise<string>;
2
- export declare function attestKey(key: string, challenge: string): Promise<string>;
3
- export declare function generateAssertion(key: string, json: string): Promise<string>;
4
- export declare function requestIntegrityCheck(challenge: string): Promise<string>;
13
+ /**
14
+ * Asks Apple to attest to the validity of a generated cryptographic key.
15
+ * @param keyId The identifier you received by calling the `generateKey` function.
16
+ * @param challenge A challenge string from your server.
17
+ * @return A Promise that is fulfilled with a string that contains the attestation data. A statement from Apple about the validity of the key associated with keyId. Send this to your server for processing.
18
+ * @platform ios
19
+ */
20
+ export declare function attestKey(keyId: string, challenge: string): Promise<string>;
21
+ /**
22
+ * Creates a block of data that demonstrates the legitimacy of an instance of your app running on a device.
23
+ * @param keyId The identifier you received by calling the `generateKey` function.
24
+ * @param challenge A string to be signed with the attested private key.
25
+ * @return A Promise that is fulfilled with a string that contains the assertion object. A data structure that you send to your server for processing.
26
+ * @platform ios
27
+ */
28
+ export declare function generateAssertion(keyId: string, challenge: string): Promise<string>;
29
+ /**
30
+ * Prepares the integrity token provider for the given cloud project number.
31
+ * @param cloudProjectNumber The cloud project number.
32
+ * @return A Promise that is fulfilled if the integrity token provider is prepared successfully.
33
+ * @platform android
34
+ */
5
35
  export declare function prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;
36
+ /**
37
+ * Requests an integrity verdict for the given request hash from Google Play.
38
+ * @param requestHash A string representing the request hash.
39
+ * @return A Promise that is fulfilled with a string that contains the integrity check result.
40
+ * @platform android
41
+ */
42
+ export declare function requestIntegrityCheck(requestHash: string): Promise<string>;
6
43
  //# sourceMappingURL=AppIntegrity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppIntegrity.d.ts","sourceRoot":"","sources":["../src/AppIntegrity.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,oBAKhC;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAK7D;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAKhE;AAED,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,mBAK5D;AAED,wBAAsB,6BAA6B,CAAC,kBAAkB,EAAE,MAAM,iBAK7E"}
1
+ {"version":3,"file":"AppIntegrity.d.ts","sourceRoot":"","sources":["../src/AppIntegrity.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,WAAW,SAA8D,CAAC;AAEvF;;;;GAIG;AACH,wBAAsB,WAAW,oBAKhC;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAK/D;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAKvE;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,kBAAkB,EAAE,MAAM,iBAK7E;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,mBAK9D"}
@@ -1,33 +1,70 @@
1
1
  import { Platform } from 'react-native';
2
2
  import ExpoAppIntegrity from './ExpoAppIntegrity';
3
+ /**
4
+ * A boolean value that indicates whether a particular device provides the [App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) service.
5
+ * Not all device types support the App Attest service, so check for support before using the service.
6
+ * @platform ios
7
+ */
8
+ export const isSupported = Platform.OS === 'ios' ? ExpoAppIntegrity.isSupported : true;
9
+ /**
10
+ * Creates a new cryptographic key for use with the App Attest service.
11
+ * @return A Promise that is fulfilled with a string that contains the key identifier. The key itself is stored securely in the Secure Enclave.
12
+ * @platform ios
13
+ */
3
14
  export async function generateKey() {
4
15
  if (Platform.OS !== 'ios') {
5
16
  throw new Error('generateAssertion is only available on iOS');
6
17
  }
7
18
  return ExpoAppIntegrity.generateKey();
8
19
  }
9
- export async function attestKey(key, challenge) {
20
+ /**
21
+ * Asks Apple to attest to the validity of a generated cryptographic key.
22
+ * @param keyId The identifier you received by calling the `generateKey` function.
23
+ * @param challenge A challenge string from your server.
24
+ * @return A Promise that is fulfilled with a string that contains the attestation data. A statement from Apple about the validity of the key associated with keyId. Send this to your server for processing.
25
+ * @platform ios
26
+ */
27
+ export async function attestKey(keyId, challenge) {
10
28
  if (Platform.OS !== 'ios') {
11
29
  throw new Error('generateAssertion is only available on iOS');
12
30
  }
13
- return ExpoAppIntegrity.attestKey(key, challenge);
31
+ return ExpoAppIntegrity.attestKey(keyId, challenge);
14
32
  }
15
- export async function generateAssertion(key, json) {
33
+ /**
34
+ * Creates a block of data that demonstrates the legitimacy of an instance of your app running on a device.
35
+ * @param keyId The identifier you received by calling the `generateKey` function.
36
+ * @param challenge A string to be signed with the attested private key.
37
+ * @return A Promise that is fulfilled with a string that contains the assertion object. A data structure that you send to your server for processing.
38
+ * @platform ios
39
+ */
40
+ export async function generateAssertion(keyId, challenge) {
16
41
  if (Platform.OS !== 'ios') {
17
42
  throw new Error('generateAssertion is only available on iOS');
18
43
  }
19
- return ExpoAppIntegrity.generateAssertion(key, json);
20
- }
21
- export async function requestIntegrityCheck(challenge) {
22
- if (Platform.OS !== 'android') {
23
- throw new Error('requestIntegrityCheck is only available on Android');
24
- }
25
- return ExpoAppIntegrity.requestIntegrityCheck(challenge);
44
+ return ExpoAppIntegrity.generateAssertion(keyId, challenge);
26
45
  }
46
+ /**
47
+ * Prepares the integrity token provider for the given cloud project number.
48
+ * @param cloudProjectNumber The cloud project number.
49
+ * @return A Promise that is fulfilled if the integrity token provider is prepared successfully.
50
+ * @platform android
51
+ */
27
52
  export async function prepareIntegrityTokenProvider(cloudProjectNumber) {
28
53
  if (Platform.OS !== 'android') {
29
54
  throw new Error('prepareIntegrityTokenProvider is only available on Android');
30
55
  }
31
56
  return ExpoAppIntegrity.prepareIntegrityTokenProvider(cloudProjectNumber);
32
57
  }
58
+ /**
59
+ * Requests an integrity verdict for the given request hash from Google Play.
60
+ * @param requestHash A string representing the request hash.
61
+ * @return A Promise that is fulfilled with a string that contains the integrity check result.
62
+ * @platform android
63
+ */
64
+ export async function requestIntegrityCheck(requestHash) {
65
+ if (Platform.OS !== 'android') {
66
+ throw new Error('requestIntegrityCheck is only available on Android');
67
+ }
68
+ return ExpoAppIntegrity.requestIntegrityCheck(requestHash);
69
+ }
33
70
  //# sourceMappingURL=AppIntegrity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppIntegrity.js","sourceRoot":"","sources":["../src/AppIntegrity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,SAAiB;IAC5D,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,IAAY;IAC/D,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IAC3D,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,kBAA0B;IAC5E,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,gBAAgB,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import { Platform } from 'react-native';\n\nimport ExpoAppIntegrity from './ExpoAppIntegrity';\n\nexport async function generateKey() {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.generateKey();\n}\n\nexport async function attestKey(key: string, challenge: string) {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.attestKey(key, challenge);\n}\n\nexport async function generateAssertion(key: string, json: string) {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.generateAssertion(key, json);\n}\n\nexport async function requestIntegrityCheck(challenge: string) {\n if (Platform.OS !== 'android') {\n throw new Error('requestIntegrityCheck is only available on Android');\n }\n return ExpoAppIntegrity.requestIntegrityCheck(challenge);\n}\n\nexport async function prepareIntegrityTokenProvider(cloudProjectNumber: string) {\n if (Platform.OS !== 'android') {\n throw new Error('prepareIntegrityTokenProvider is only available on Android');\n }\n return ExpoAppIntegrity.prepareIntegrityTokenProvider(cloudProjectNumber);\n}\n"]}
1
+ {"version":3,"file":"AppIntegrity.js","sourceRoot":"","sources":["../src/AppIntegrity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAEvF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,SAAiB;IAC9D,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAa,EAAE,SAAiB;IACtE,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,kBAA0B;IAC5E,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,gBAAgB,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,gBAAgB,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["import { Platform } from 'react-native';\n\nimport ExpoAppIntegrity from './ExpoAppIntegrity';\n\n/**\n * A boolean value that indicates whether a particular device provides the [App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) service.\n * Not all device types support the App Attest service, so check for support before using the service.\n * @platform ios\n */\nexport const isSupported = Platform.OS === 'ios' ? ExpoAppIntegrity.isSupported : true;\n\n/**\n * Creates a new cryptographic key for use with the App Attest service.\n * @return A Promise that is fulfilled with a string that contains the key identifier. The key itself is stored securely in the Secure Enclave.\n * @platform ios\n */\nexport async function generateKey() {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.generateKey();\n}\n\n/**\n * Asks Apple to attest to the validity of a generated cryptographic key.\n * @param keyId The identifier you received by calling the `generateKey` function.\n * @param challenge A challenge string from your server.\n * @return A Promise that is fulfilled with a string that contains the attestation data. A statement from Apple about the validity of the key associated with keyId. Send this to your server for processing.\n * @platform ios\n */\nexport async function attestKey(keyId: string, challenge: string) {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.attestKey(keyId, challenge);\n}\n\n/**\n * Creates a block of data that demonstrates the legitimacy of an instance of your app running on a device.\n * @param keyId The identifier you received by calling the `generateKey` function.\n * @param challenge A string to be signed with the attested private key.\n * @return A Promise that is fulfilled with a string that contains the assertion object. A data structure that you send to your server for processing.\n * @platform ios\n */\nexport async function generateAssertion(keyId: string, challenge: string) {\n if (Platform.OS !== 'ios') {\n throw new Error('generateAssertion is only available on iOS');\n }\n return ExpoAppIntegrity.generateAssertion(keyId, challenge);\n}\n\n/**\n * Prepares the integrity token provider for the given cloud project number.\n * @param cloudProjectNumber The cloud project number.\n * @return A Promise that is fulfilled if the integrity token provider is prepared successfully.\n * @platform android\n */\nexport async function prepareIntegrityTokenProvider(cloudProjectNumber: string) {\n if (Platform.OS !== 'android') {\n throw new Error('prepareIntegrityTokenProvider is only available on Android');\n }\n return ExpoAppIntegrity.prepareIntegrityTokenProvider(cloudProjectNumber);\n}\n\n/**\n * Requests an integrity verdict for the given request hash from Google Play.\n * @param requestHash A string representing the request hash.\n * @return A Promise that is fulfilled with a string that contains the integrity check result.\n * @platform android\n */\nexport async function requestIntegrityCheck(requestHash: string) {\n if (Platform.OS !== 'android') {\n throw new Error('requestIntegrityCheck is only available on Android');\n }\n return ExpoAppIntegrity.requestIntegrityCheck(requestHash);\n}\n"]}
@@ -1,9 +1,13 @@
1
1
  import { NativeModule } from 'expo-modules-core/types';
2
+ /**
3
+ * @hidden
4
+ */
2
5
  export interface ExpoAppIntegrityModule extends NativeModule {
6
+ isSupported: boolean;
3
7
  generateKey(): Promise<string>;
4
- attestKey(key: string, challenge: string): Promise<string>;
5
- generateAssertion(key: string, challenge: string): Promise<string>;
8
+ attestKey(keyId: string, challenge: string): Promise<string>;
9
+ generateAssertion(keyId: string, challenge: string): Promise<string>;
6
10
  prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;
7
- requestIntegrityCheck(challenge: string): Promise<string>;
11
+ requestIntegrityCheck(requestHash: string): Promise<string>;
8
12
  }
9
13
  //# sourceMappingURL=ExpoAppIntegrity.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoAppIntegrity.types.d.ts","sourceRoot":"","sources":["../src/ExpoAppIntegrity.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAE1D,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnE,6BAA6B,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3D"}
1
+ {"version":3,"file":"ExpoAppIntegrity.types.d.ts","sourceRoot":"","sources":["../src/ExpoAppIntegrity.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAE1D,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErE,6BAA6B,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoAppIntegrity.types.js","sourceRoot":"","sources":["../src/ExpoAppIntegrity.types.ts"],"names":[],"mappings":"","sourcesContent":["import { NativeModule } from 'expo-modules-core/types';\n\nexport interface ExpoAppIntegrityModule extends NativeModule {\n // iOS\n generateKey(): Promise<string>;\n attestKey(key: string, challenge: string): Promise<string>;\n generateAssertion(key: string, challenge: string): Promise<string>;\n // Android\n prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;\n requestIntegrityCheck(challenge: string): Promise<string>;\n}\n"]}
1
+ {"version":3,"file":"ExpoAppIntegrity.types.js","sourceRoot":"","sources":["../src/ExpoAppIntegrity.types.ts"],"names":[],"mappings":"","sourcesContent":["import { NativeModule } from 'expo-modules-core/types';\n\n/**\n * @hidden\n */\nexport interface ExpoAppIntegrityModule extends NativeModule {\n // iOS\n isSupported: boolean;\n generateKey(): Promise<string>;\n attestKey(keyId: string, challenge: string): Promise<string>;\n generateAssertion(keyId: string, challenge: string): Promise<string>;\n // Android\n prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;\n requestIntegrityCheck(requestHash: string): Promise<string>;\n}\n"]}
@@ -8,7 +8,7 @@
8
8
  "publication": {
9
9
  "groupId": "expo.modules.integrity",
10
10
  "artifactId": "expo.modules.integrity",
11
- "version": "0.1.1",
11
+ "version": "0.1.3",
12
12
  "repository": "local-maven-repo"
13
13
  }
14
14
  }
@@ -8,6 +8,10 @@ public class IntegrityModule: Module {
8
8
  public func definition() -> ModuleDefinition {
9
9
  Name("ExpoAppIntegrity")
10
10
 
11
+ Constant("isSupported") {
12
+ return service.isSupported
13
+ }
14
+
11
15
  AsyncFunction("generateKey") {
12
16
  do {
13
17
  return try await service.generateKey()
@@ -0,0 +1 @@
1
+ 9b7e44c18df40296e89ec111fd1093841c27a50d2dd6f9d8db9a0a7bf810eef7
@@ -0,0 +1 @@
1
+ e7f267cc0787ef413c398cffe83b2370eeb304fa1f19dca189e903c71b1946926f9814b0aef36ff36d7c82436e95c5e26230c47a97fc2bf79b4b5146978fe663
@@ -0,0 +1 @@
1
+ 1504a67967a5a7f458821dbcfad526e06811d23790072fb3ab6b10b8256ca95f
@@ -0,0 +1 @@
1
+ 1519441c49908bc66e3d6bc49813423baf462f5bd7dc8bc36fb7d7858cf458d38b09fb079984e045779ef12b0c0f49ac18decbf2c707b901d1395c6885e6547e
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.integrity",
5
5
  "module": "expo.modules.integrity",
6
- "version": "0.1.1",
6
+ "version": "0.1.3",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,13 +24,13 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.integrity-0.1.1.aar",
28
- "url": "expo.modules.integrity-0.1.1.aar",
29
- "size": 20821,
30
- "sha512": "74c3ee7bc037b9e76eec856e5db57dc29cb252ac10ae66648b6e685307222f809efd66fdcd6f278ccf17d9c88cd979bbdda20f161ea4e47367ee945aa0b98e0a",
31
- "sha256": "be66edac2decef6961291a2750f3e329480f870109b8734a49b7e20f8f70a814",
32
- "sha1": "b490cf3330352d01dbb9c0fbf6586ea6d9cedc94",
33
- "md5": "58fe1ba1e0b70a87d303b14892c68fd1"
27
+ "name": "expo.modules.integrity-0.1.3.aar",
28
+ "url": "expo.modules.integrity-0.1.3.aar",
29
+ "size": 20819,
30
+ "sha512": "1519441c49908bc66e3d6bc49813423baf462f5bd7dc8bc36fb7d7858cf458d38b09fb079984e045779ef12b0c0f49ac18decbf2c707b901d1395c6885e6547e",
31
+ "sha256": "1504a67967a5a7f458821dbcfad526e06811d23790072fb3ab6b10b8256ca95f",
32
+ "sha1": "537f4596016d0dece7c479a9e82381f6eb1206e5",
33
+ "md5": "8c5ac39271246962bad5f8914a5dd623"
34
34
  }
35
35
  ]
36
36
  },
@@ -60,13 +60,13 @@
60
60
  ],
61
61
  "files": [
62
62
  {
63
- "name": "expo.modules.integrity-0.1.1.aar",
64
- "url": "expo.modules.integrity-0.1.1.aar",
65
- "size": 20821,
66
- "sha512": "74c3ee7bc037b9e76eec856e5db57dc29cb252ac10ae66648b6e685307222f809efd66fdcd6f278ccf17d9c88cd979bbdda20f161ea4e47367ee945aa0b98e0a",
67
- "sha256": "be66edac2decef6961291a2750f3e329480f870109b8734a49b7e20f8f70a814",
68
- "sha1": "b490cf3330352d01dbb9c0fbf6586ea6d9cedc94",
69
- "md5": "58fe1ba1e0b70a87d303b14892c68fd1"
63
+ "name": "expo.modules.integrity-0.1.3.aar",
64
+ "url": "expo.modules.integrity-0.1.3.aar",
65
+ "size": 20819,
66
+ "sha512": "1519441c49908bc66e3d6bc49813423baf462f5bd7dc8bc36fb7d7858cf458d38b09fb079984e045779ef12b0c0f49ac18decbf2c707b901d1395c6885e6547e",
67
+ "sha256": "1504a67967a5a7f458821dbcfad526e06811d23790072fb3ab6b10b8256ca95f",
68
+ "sha1": "537f4596016d0dece7c479a9e82381f6eb1206e5",
69
+ "md5": "8c5ac39271246962bad5f8914a5dd623"
70
70
  }
71
71
  ]
72
72
  },
@@ -80,13 +80,13 @@
80
80
  },
81
81
  "files": [
82
82
  {
83
- "name": "expo.modules.integrity-0.1.1-sources.jar",
84
- "url": "expo.modules.integrity-0.1.1-sources.jar",
85
- "size": 3404,
86
- "sha512": "399b34f99e731da865ef0bf046c794f715fbb5a3ce529d4ec2ee076c329282c72b6f922fbc45e4c4c3a5579eb80b3b308f936d8ee71af19f9452841fc6f71663",
87
- "sha256": "ce8af27715e7bd42f77fb47a85a6368fbfb57f83fd3537020712fce41430ef14",
88
- "sha1": "47c3797099279b1b484bc0b6634c0f7027c33202",
89
- "md5": "7b4229a2cc3684a4e5077d6baaea0e8e"
83
+ "name": "expo.modules.integrity-0.1.3-sources.jar",
84
+ "url": "expo.modules.integrity-0.1.3-sources.jar",
85
+ "size": 3403,
86
+ "sha512": "e7f267cc0787ef413c398cffe83b2370eeb304fa1f19dca189e903c71b1946926f9814b0aef36ff36d7c82436e95c5e26230c47a97fc2bf79b4b5146978fe663",
87
+ "sha256": "9b7e44c18df40296e89ec111fd1093841c27a50d2dd6f9d8db9a0a7bf810eef7",
88
+ "sha1": "41cda41cb0b43ddb0bea3c5b5b283490346a62dc",
89
+ "md5": "594e9d7dac41e6c828b54d0afaf12267"
90
90
  }
91
91
  ]
92
92
  }
@@ -0,0 +1 @@
1
+ e5134a61e57fe108068f808fa8a7190f978d7de7c11afce42478b99ccf6bc90b
@@ -0,0 +1 @@
1
+ 3370d799a17619f3b0e13468ff821916eebc063fab58c4e43e43972f8cb0d6b3f5debc6c05b6c671eb1ba8962a8d6276f5846e8b6464c7556909cea5ea03d56e
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>expo.modules.integrity</groupId>
11
11
  <artifactId>expo.modules.integrity</artifactId>
12
- <version>0.1.1</version>
12
+ <version>0.1.3</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.integrity</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ 00a582346ccb3080d9796ff1d3987365575ccb16ad5aa3f5ac3cc24007b71e83
@@ -0,0 +1 @@
1
+ cca02489075a7f965c7cb032aff1515a94bd23ca44e1e52ea2579e42ea0db291d11bda0b06ba445affb4ff6f2937f7b9e266bb7f27a07ee96d79ea7337b96616
@@ -3,11 +3,11 @@
3
3
  <groupId>expo.modules.integrity</groupId>
4
4
  <artifactId>expo.modules.integrity</artifactId>
5
5
  <versioning>
6
- <latest>0.1.1</latest>
7
- <release>0.1.1</release>
6
+ <latest>0.1.3</latest>
7
+ <release>0.1.3</release>
8
8
  <versions>
9
- <version>0.1.1</version>
9
+ <version>0.1.3</version>
10
10
  </versions>
11
- <lastUpdated>20250817001230</lastUpdated>
11
+ <lastUpdated>20250825161906</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 324a8c2993c3c51f449f74c19d76647d
1
+ a66b44434c2f78f42e225dcfd212bc73
@@ -1 +1 @@
1
- 70c26598dc9642406c53fc828946da7c2ba92777
1
+ cbc6185d65bf85654f17093a6c9a3f1b331d4925
@@ -1 +1 @@
1
- 6c1e6688c1bb475989ee258896ae7706d121e47e696640d8a91e3f42f684aeab
1
+ ab5d05c9d016cb376c044bb3b7814136058af84ab7cc2a2112306094a6a6eb86
@@ -1 +1 @@
1
- 2846190813089604e47e100c00ca54f4bcd40ca53d36f04758f467e2339814d68d4cbf5e1a2c1c9e2caca109ef14ec48093f51b6196d5fdbce555271af2224ab
1
+ a3d948017272d1857b50a28b70d75ad785391298d9238f66f07fc8b32220c334a13d4622316e8a9f2731155d7257d52c81e54947c2f7cbd8b5c3b0dbc6dfd8c2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/app-integrity",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "A native module that helps assert app integrity on mobile platforms",
5
5
  "sideEffects": false,
6
6
  "main": "build/index.js",
@@ -37,11 +37,11 @@
37
37
  },
38
38
  "dependencies": {},
39
39
  "devDependencies": {
40
- "expo-module-scripts": "^5.0.2"
40
+ "expo-module-scripts": "^5.0.3"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "expo": "*",
44
44
  "react-native": "*"
45
45
  },
46
- "gitHead": "eaa9b645058cf2233fbb27bb21a19bc605c90a88"
46
+ "gitHead": "ef0b9ecf9645d3e93587d5ee5030dbfcbf735bbd"
47
47
  }
@@ -2,6 +2,18 @@ import { Platform } from 'react-native';
2
2
 
3
3
  import ExpoAppIntegrity from './ExpoAppIntegrity';
4
4
 
5
+ /**
6
+ * A boolean value that indicates whether a particular device provides the [App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) service.
7
+ * Not all device types support the App Attest service, so check for support before using the service.
8
+ * @platform ios
9
+ */
10
+ export const isSupported = Platform.OS === 'ios' ? ExpoAppIntegrity.isSupported : true;
11
+
12
+ /**
13
+ * Creates a new cryptographic key for use with the App Attest service.
14
+ * @return A Promise that is fulfilled with a string that contains the key identifier. The key itself is stored securely in the Secure Enclave.
15
+ * @platform ios
16
+ */
5
17
  export async function generateKey() {
6
18
  if (Platform.OS !== 'ios') {
7
19
  throw new Error('generateAssertion is only available on iOS');
@@ -9,30 +21,56 @@ export async function generateKey() {
9
21
  return ExpoAppIntegrity.generateKey();
10
22
  }
11
23
 
12
- export async function attestKey(key: string, challenge: string) {
24
+ /**
25
+ * Asks Apple to attest to the validity of a generated cryptographic key.
26
+ * @param keyId The identifier you received by calling the `generateKey` function.
27
+ * @param challenge A challenge string from your server.
28
+ * @return A Promise that is fulfilled with a string that contains the attestation data. A statement from Apple about the validity of the key associated with keyId. Send this to your server for processing.
29
+ * @platform ios
30
+ */
31
+ export async function attestKey(keyId: string, challenge: string) {
13
32
  if (Platform.OS !== 'ios') {
14
33
  throw new Error('generateAssertion is only available on iOS');
15
34
  }
16
- return ExpoAppIntegrity.attestKey(key, challenge);
35
+ return ExpoAppIntegrity.attestKey(keyId, challenge);
17
36
  }
18
37
 
19
- export async function generateAssertion(key: string, json: string) {
38
+ /**
39
+ * Creates a block of data that demonstrates the legitimacy of an instance of your app running on a device.
40
+ * @param keyId The identifier you received by calling the `generateKey` function.
41
+ * @param challenge A string to be signed with the attested private key.
42
+ * @return A Promise that is fulfilled with a string that contains the assertion object. A data structure that you send to your server for processing.
43
+ * @platform ios
44
+ */
45
+ export async function generateAssertion(keyId: string, challenge: string) {
20
46
  if (Platform.OS !== 'ios') {
21
47
  throw new Error('generateAssertion is only available on iOS');
22
48
  }
23
- return ExpoAppIntegrity.generateAssertion(key, json);
49
+ return ExpoAppIntegrity.generateAssertion(keyId, challenge);
24
50
  }
25
51
 
26
- export async function requestIntegrityCheck(challenge: string) {
52
+ /**
53
+ * Prepares the integrity token provider for the given cloud project number.
54
+ * @param cloudProjectNumber The cloud project number.
55
+ * @return A Promise that is fulfilled if the integrity token provider is prepared successfully.
56
+ * @platform android
57
+ */
58
+ export async function prepareIntegrityTokenProvider(cloudProjectNumber: string) {
27
59
  if (Platform.OS !== 'android') {
28
- throw new Error('requestIntegrityCheck is only available on Android');
60
+ throw new Error('prepareIntegrityTokenProvider is only available on Android');
29
61
  }
30
- return ExpoAppIntegrity.requestIntegrityCheck(challenge);
62
+ return ExpoAppIntegrity.prepareIntegrityTokenProvider(cloudProjectNumber);
31
63
  }
32
64
 
33
- export async function prepareIntegrityTokenProvider(cloudProjectNumber: string) {
65
+ /**
66
+ * Requests an integrity verdict for the given request hash from Google Play.
67
+ * @param requestHash A string representing the request hash.
68
+ * @return A Promise that is fulfilled with a string that contains the integrity check result.
69
+ * @platform android
70
+ */
71
+ export async function requestIntegrityCheck(requestHash: string) {
34
72
  if (Platform.OS !== 'android') {
35
- throw new Error('prepareIntegrityTokenProvider is only available on Android');
73
+ throw new Error('requestIntegrityCheck is only available on Android');
36
74
  }
37
- return ExpoAppIntegrity.prepareIntegrityTokenProvider(cloudProjectNumber);
75
+ return ExpoAppIntegrity.requestIntegrityCheck(requestHash);
38
76
  }
@@ -1,11 +1,15 @@
1
1
  import { NativeModule } from 'expo-modules-core/types';
2
2
 
3
+ /**
4
+ * @hidden
5
+ */
3
6
  export interface ExpoAppIntegrityModule extends NativeModule {
4
7
  // iOS
8
+ isSupported: boolean;
5
9
  generateKey(): Promise<string>;
6
- attestKey(key: string, challenge: string): Promise<string>;
7
- generateAssertion(key: string, challenge: string): Promise<string>;
10
+ attestKey(keyId: string, challenge: string): Promise<string>;
11
+ generateAssertion(keyId: string, challenge: string): Promise<string>;
8
12
  // Android
9
13
  prepareIntegrityTokenProvider(cloudProjectNumber: string): Promise<void>;
10
- requestIntegrityCheck(challenge: string): Promise<string>;
14
+ requestIntegrityCheck(requestHash: string): Promise<string>;
11
15
  }
@@ -1 +0,0 @@
1
- ce8af27715e7bd42f77fb47a85a6368fbfb57f83fd3537020712fce41430ef14
@@ -1 +0,0 @@
1
- 399b34f99e731da865ef0bf046c794f715fbb5a3ce529d4ec2ee076c329282c72b6f922fbc45e4c4c3a5579eb80b3b308f936d8ee71af19f9452841fc6f71663
@@ -1 +0,0 @@
1
- be66edac2decef6961291a2750f3e329480f870109b8734a49b7e20f8f70a814
@@ -1 +0,0 @@
1
- 74c3ee7bc037b9e76eec856e5db57dc29cb252ac10ae66648b6e685307222f809efd66fdcd6f278ccf17d9c88cd979bbdda20f161ea4e47367ee945aa0b98e0a
@@ -1 +0,0 @@
1
- 235becf552eee6c6fce40bcf802003ce22d6fac74d53415175d76cd215df8331
@@ -1 +0,0 @@
1
- 3be622e5571d1ac47e174bd6f1f8654ee1cd0e76695315883367f86587aadb305e972bb3fc77c14852aeaa461eb4ff9a2797f6292466bc915a2cff02032e1a31
@@ -1 +0,0 @@
1
- 8ee46fea5ffc5fb416c9e64aa7bbf3eba81fdbf23494c5fbe935143c1126e763
@@ -1 +0,0 @@
1
- 996f5e0ea877be1aaebecec26c269ab8193001deed6ceab0fc79ed53f11b511c0d6104b00d84a7b667307b7ab9cf6906f39db2918daf3b92cd603e49d2d07a83