@osano/osano-cmp-react-native 0.19.0 → 0.19.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 (49) hide show
  1. package/lib/commonjs/ConsentManager.js +23 -0
  2. package/lib/commonjs/ConsentManager.js.map +1 -1
  3. package/lib/commonjs/iab/tcf/iab-storage-utils.js +53 -49
  4. package/lib/commonjs/iab/tcf/iab-storage-utils.js.map +1 -1
  5. package/lib/commonjs/iab/tcf/middleware.js +20 -23
  6. package/lib/commonjs/iab/tcf/middleware.js.map +1 -1
  7. package/lib/commonjs/iab/tcf/reducer.js +0 -22
  8. package/lib/commonjs/iab/tcf/reducer.js.map +1 -1
  9. package/lib/commonjs/index.js +16 -2
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/reducer.js +5 -1
  12. package/lib/commonjs/reducer.js.map +1 -1
  13. package/lib/commonjs/services/consent.js +178 -77
  14. package/lib/commonjs/services/consent.js.map +1 -1
  15. package/lib/module/ConsentManager.js +23 -0
  16. package/lib/module/ConsentManager.js.map +1 -1
  17. package/lib/module/iab/tcf/iab-storage-utils.js +53 -49
  18. package/lib/module/iab/tcf/iab-storage-utils.js.map +1 -1
  19. package/lib/module/iab/tcf/middleware.js +22 -25
  20. package/lib/module/iab/tcf/middleware.js.map +1 -1
  21. package/lib/module/iab/tcf/reducer.js +1 -23
  22. package/lib/module/iab/tcf/reducer.js.map +1 -1
  23. package/lib/module/index.js +17 -3
  24. package/lib/module/index.js.map +1 -1
  25. package/lib/module/reducer.js +5 -1
  26. package/lib/module/reducer.js.map +1 -1
  27. package/lib/module/services/consent.js +174 -75
  28. package/lib/module/services/consent.js.map +1 -1
  29. package/lib/typescript/src/ConsentManager.d.ts +11 -1
  30. package/lib/typescript/src/ConsentManager.d.ts.map +1 -1
  31. package/lib/typescript/src/iab/tcf/iab-storage-utils.d.ts +7 -7
  32. package/lib/typescript/src/iab/tcf/iab-storage-utils.d.ts.map +1 -1
  33. package/lib/typescript/src/iab/tcf/middleware.d.ts.map +1 -1
  34. package/lib/typescript/src/iab/tcf/reducer.d.ts +1 -0
  35. package/lib/typescript/src/iab/tcf/reducer.d.ts.map +1 -1
  36. package/lib/typescript/src/index.d.ts.map +1 -1
  37. package/lib/typescript/src/reducer.d.ts.map +1 -1
  38. package/lib/typescript/src/services/consent.d.ts +28 -0
  39. package/lib/typescript/src/services/consent.d.ts.map +1 -1
  40. package/package.json +4 -4
  41. package/src/ConsentManager.ts +24 -1
  42. package/src/iab/tcf/iab-storage-utils.ts +101 -56
  43. package/src/iab/tcf/middleware.ts +36 -32
  44. package/src/iab/tcf/reducer.ts +2 -29
  45. package/src/index.tsx +15 -1
  46. package/src/reducer.ts +4 -0
  47. package/src/services/consent.ts +220 -86
  48. package/src/types/consent-config.d.ts +5 -1
  49. package/src/types/store.d.ts +5 -0
@@ -32,7 +32,7 @@ export declare class ConsentConfig extends EventEmitter {
32
32
  get enableDoNotSellDefault(): boolean;
33
33
  get doNotSellCategories(): string[];
34
34
  get forceManagePreferences(): boolean;
35
- get forceReconsent(): Date | undefined;
35
+ get forceReconsent(): number | undefined;
36
36
  get googleConsent(): boolean;
37
37
  get timeoutSeconds(): number;
38
38
  get storagePolicyHref(): string;
@@ -137,8 +137,18 @@ export declare class ConsentManager {
137
137
  private _overridePalette?;
138
138
  private _googleConsentModeCallback?;
139
139
  private _consentExpirationTestingSeconds?;
140
+ private _consentInvalidated;
141
+ private _consentPromptRequired;
140
142
  private _deviceId;
141
143
  get deviceId(): string;
144
+ /**
145
+ * True when the most recent load invalidated local consent data.
146
+ */
147
+ get consentInvalidated(): boolean;
148
+ set consentInvalidated(value: boolean);
149
+ /** False when fresh remote consent supersedes only the re-prompt. */
150
+ get consentPromptRequired(): boolean;
151
+ set consentPromptRequired(value: boolean);
142
152
  /**
143
153
  * The debug-only consent expiration testing window, in seconds, or
144
154
  * `undefined` when testing mode is disabled. Read by the consent service to
@@ -1 +1 @@
1
- {"version":3,"file":"ConsentManager.d.ts","sourceRoot":"","sources":["../../../src/ConsentManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConsentManager.d.ts","sourceRoot":"","sources":["../../../src/ConsentManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAGN,KAAK,mBAAmB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,OAAO,EAAE,EAAiB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,KAAK,EAEX,aAAa,EAEb,MAAM,EAEN,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACX,YAAY,EACZ,YAAY,EAEZ,gBAAgB,EAChB,QAAQ,EACR,MAAM,aAAa,CAAC;AASrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EAAE,YAAY,EAA0B,MAAM,sBAAsB,CAAC;AAE5E,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAK5C,eAAO,MAAM,cAAc,EAAE,MAyE5B,CAAC;AA6EF,qBAAa,aAAc,SAAQ,YAAY;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;gBAEd,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAOlD,IAAI;IAgCJ,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAE3B;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IACD,IAAI,QAAQ,IAAI,MAAM,CAErB;IACD,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,UAAU,IAAI,OAAO,CAExB;IACD,IAAI,UAAU,IAAI,mBAAmB,EAAE,CAKtC;IACD,IAAI,YAAY,IAAI,MAAM,CAMzB;IACD,IAAI,WAAW,IAAI,OAAO,CAEzB;IACD,IAAI,WAAW,IAAI,OAAO,CAEzB;IACD,IAAI,WAAW,IAAI,OAAO,CAEzB;IACD,IAAI,eAAe,IAAI,OAAO,CAE7B;IACD,IAAI,sBAAsB,IAAI,OAAO,CAEpC;IACD,IAAI,mBAAmB,IAAI,MAAM,EAAE,CAElC;IACD,IAAI,sBAAsB,IAAI,OAAO,CAEpC;IACD,IAAI,cAAc,IAAI,MAAM,GAAG,SAAS,CAEvC;IACD,IAAI,aAAa,IAAI,OAAO,CAE3B;IACD,IAAI,cAAc,IAAI,MAAM,CAE3B;IACD,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IACD,IAAI,cAAc,IAAI,MAAM,CAE3B;IACD,IAAI,eAAe,IAAI,MAAM,EAAE,EAAE,CAEhC;IACD,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IACD,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IACD,IAAI,eAAe,IAAI,OAAO,CAE7B;IACD,IAAI,cAAc,IAAI,OAAO,CAE5B;IACD,IAAI,IAAI,IAAI,IAAI,CAEf;IACD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAE3B;IACD,IAAI,aAAa,IAAI,OAAO,CAE3B;IACD,IAAI,IAAI,IAAI,MAAM,CAUjB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,OAAO,OAAO,EAMnC;IACD,IAAI,OAAO,IACR,KAAK,GACL,KAAK,GACL,OAAO,GACP,MAAM,GACN,MAAM,GACN,KAAK,GACL,OAAO,GACP,EAAE,GACF,SAAS,CAEX;IACD,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IACD,IAAI,QAAQ,IAAI,MAAM,CAErB;IACD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,EAQ3B;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,qBAAqB,CAAC,OAAO,EAAE,MAAM;IAIrC,IAAI,cAAc,YAEjB;IAED,IAAI,gBAAgB,YAEnB;IAED,IAAI,yBAAyB,YAE5B;IAED,IAAI,4BAA4B,YAE/B;IAED,IAAI,uBAAuB,YAE1B;IAED,IAAI,yBAAyB,YAE5B;IAED,IAAI,4BAA4B,YAE/B;IAED,IAAI,iBAAiB,YAEpB;IAED;;;;OAIG;IACH,OAAO,KAAK,aAAa,GAExB;IAED;;;;;OAKG;IACH,IAAI,8BAA8B,IAAI,OAAO,CAE5C;IAED;;;;;OAKG;IACH,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED;;;OAGG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAI7B;IAED;;;;OAIG;IACH,IAAI,oBAAoB,IAAI,MAAM,CAIjC;IAGD,OAAO,CAAC,WAAW,CAAC,CAAU;IAC9B,IAAI,UAAU,IAAI,OAAO,CAExB;IACD,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAMxC;IACD,OAAO,CAAC,cAAc,CAA+B;IACrD,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAEtC;IACD,IAAI,aAAa,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAE1C;IACD,OAAO,CAAC,YAAY,CAQlB;IACF,IAAI,WAAW,IAAI,OAAO,IAAI,CAAC,YAAY,CAE1C;IACD,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,EAEtD;IACD,IAAI,aAAa,IAAI,aAAa,GAAG,SAAS,CAgB7C;IACD,IAAI,YAAY,qDAOf;IACD,IAAI,aAAa,IAAI,mBAAmB,EAAE,CAIzC;IACD,IAAI,WAAW,IAAI,OAAO,CAOzB;IACD,sEAAsE;IACtE,IAAI,kBAAkB,IAAI,OAAO,CAMhC;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IACD,IAAI,sBAAsB,IAAI,mBAAmB,EAAE,CAElD;IAED,IAAI,iBAAiB,cAKpB;IAED,2BAA2B,CAC1B,gBAAgB,EAAE,MAAM,GAAG,MAAM,EACjC,KAAK,EAAE,QAAQ;IAShB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,QAAQ;IAOhE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,QAAQ;IAO9D,UAAU,CAAC,UAAU,GAAE,MAAM,GAAG,MAAU,GAAG,MAAM,GAAG,SAAS;IAQ/D,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC;IAMzD,YAAY;IAQZ,aAAa,CAAC,QAAQ,EAAE,MAAM;IAQ9B,IAAI,wBAAwB,YAE3B;IAED,IAAI,mCAAmC,YAItC;IAED,IAAI,gBAAgB,YAEnB;IAED,IAAI,iCAAiC,YASpC;IAED,IAAI,eAAe,YAIlB;IAED,6BAA6B,CAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GACf,MAAM;CAgCT;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,gBAAgB,CAAC,CAAU;IACnC,OAAO,CAAC,0BAA0B,CAAC,CAA4B;IAC/D,OAAO,CAAC,gCAAgC,CAAC,CAAS;IAClD,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,sBAAsB,CAAS;IAEvC,OAAO,CAAC,SAAS,CAAM;IACvB,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,IAAW,kBAAkB,IAAI,OAAO,CAEvC;IACD,IAAW,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAE3C;IAED,qEAAqE;IACrE,IAAW,qBAAqB,IAAI,OAAO,CAE1C;IACD,IAAW,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAE9C;IAED;;;;OAIG;IACH,IAAW,+BAA+B,IAAI,MAAM,GAAG,SAAS,CAE/D;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAElC;IACD,IAAW,QAAQ,IAAI,MAAM,CAE5B;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEhC;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,IAAW,UAAU,CAAC,KAAK,EAAE,MAAM,EAElC;IAED,IAAW,UAAU,IAAI,UAAU,CAElC;IAED,IAAW,MAAM,IAAI,aAAa,CAEjC;IAED;;;;OAIG;IACH,IAAW,YAAY,IAAI,MAAM,CAEhC;gBAEW,OAAO,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM;IAyHzD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,CAMd;IACH,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,8BAA8B,CAAC,CAAoB;IAC3D,OAAO,CAAC,8BAA8B,CAAC,CAAoB;IAC3D,IAAI,CAAC,IAAI,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;QACjC,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;QAC9C,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;QAC/B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;KAC/B;gBAhBQ,aAAa;oBACT,MAAM;kBACR,MAAM;gBACR,MAAM;kBACJ,mBAAmB,EAAE;;IA0IhC,IAAW,OAAO,IAAI,mBAAmB,EAAE,GAAG,SAAS,CAEtD;IAED,IAAW,OAAO,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAE1D;IAEM,UAAU,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO;IAIzD;;;;;OAKG;IACI,4BAA4B,CAClC,QAAQ,EAAE,yBAAyB,GACjC,IAAI;IAKP;;;;;;;;;;;;;;;OAeG;IACI,+BAA+B,CACrC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC9B,IAAI;IAkBP;;;;;OAKG;IACI,0BAA0B,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,IAAI;IAmC1E,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IACD,IAAW,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAExC;IAEM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,IAE/C,MAAM,QAAQ,MAAM,QAAQ,GAAG;CA2BxC"}
@@ -14,11 +14,11 @@ export interface IABConsentData {
14
14
  specialFeatureOptinsString: string;
15
15
  enableAdvertiserConsentMode?: boolean;
16
16
  }
17
- export declare const clearAllIABKeys: () => void;
18
- export declare const setAllIABKeys: (consentData: IABConsentData) => void;
19
- export declare const setCustomIABKey: (key: string, value: string) => void;
20
- export declare const setDefaultIABKey: (key: string, value: string) => void;
21
- export declare const setDefaultIABKeyAsInt: (key: string, value: number) => void;
22
- export declare const clearCustomIABKey: (key: string) => void;
23
- export declare const clearDefaultIABKey: (key: string) => void;
17
+ export declare const clearAllIABKeys: (additionalCustomKeys?: string[]) => Promise<void>;
18
+ export declare const setAllIABKeys: (consentData: IABConsentData) => Promise<void>;
19
+ export declare const setCustomIABKey: (key: string, value: string) => Promise<string>;
20
+ export declare const setDefaultIABKey: (key: string, value: string) => Promise<string>;
21
+ export declare const setDefaultIABKeyAsInt: (key: string, value: number) => Promise<number>;
22
+ export declare const clearCustomIABKey: (key: string) => Promise<void>;
23
+ export declare const clearDefaultIABKey: (key: string) => Promise<void>;
24
24
  //# sourceMappingURL=iab-storage-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"iab-storage-utils.d.ts","sourceRoot":"","sources":["../../../../../src/iab/tcf/iab-storage-utils.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,+BAA+B,EAAE,MAAM,CAAC;IACxC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gCAAgC,EAAE,MAAM,CAAC;IACzC,0BAA0B,EAAE,MAAM,CAAC;IACnC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,eAAe,QAAO,IAkBlC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,aAAa,cAAc,KAAG,IA8F3D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAE5D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAE7D,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAElE,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,IAE/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,IAEhD,CAAC"}
1
+ {"version":3,"file":"iab-storage-utils.d.ts","sourceRoot":"","sources":["../../../../../src/iab/tcf/iab-storage-utils.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,+BAA+B,EAAE,MAAM,CAAC;IACxC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gCAAgC,EAAE,MAAM,CAAC;IACzC,0BAA0B,EAAE,MAAM,CAAC;IACnC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACtC;AA6BD,eAAO,MAAM,eAAe,GAC3B,uBAAsB,MAAM,EAAO,KACjC,OAAO,CAAC,IAAI,CA2BZ,CAAC;AAEJ,eAAO,MAAM,aAAa,GAAI,aAAa,cAAc,KAAG,OAAO,CAAC,IAAI,CAwGvE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CAC7C,CAAC;AAE/B,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CACrC,CAAC;AAExC,eAAO,MAAM,qBAAqB,GACjC,KAAK,MAAM,EACX,OAAO,MAAM,KACX,OAAO,CAAC,MAAM,CAA8C,CAAC;AAEhE,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CACX,CAAC;AAElD,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../../src/iab/tcf/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAU,MAAM,SAAS,CAAC;AA0B5D,eAAO,MAAM,cAAc,EAAE,oBAmM5B,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../../src/iab/tcf/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAU,MAAM,SAAS,CAAC;AAgC5D,eAAO,MAAM,cAAc,EAAE,oBAiM5B,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -56,5 +56,6 @@ export default function makeReducer(initOptions: IabInitOptions): (state: OsanoS
56
56
  scrollToType: string;
57
57
  scrollToId: number;
58
58
  stack: string[];
59
+ consentInvalidated?: boolean;
59
60
  };
60
61
  //# sourceMappingURL=reducer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../../src/iab/tcf/reducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAoBjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIzC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;CAkBxB,CAAC;AAgDF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,WAAW,EAAE,cAAc,IAEtD,OAAO,UAAU,GAAG,QAAQ,EAAE,QAAQ,WAAW;;;;;;;;;;;cA9CT,CAAC;mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;EA8MrE"}
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../../src/iab/tcf/reducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAoBjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;CAkBxB,CAAC;AAgDF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,WAAW,EAAE,cAAc,IAEtD,OAAO,UAAU,GAAG,QAAQ,EAAE,QAAQ,WAAW;;;;;;;;;;;cA1CrD,CAAC;mBAEC,CAAD;;;;;;;;;;;;;;;;;;;;;;;;;EA+KL"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwD,MAAM,OAAO,CAAC;AA6B7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,YAAY,EACX,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,6BAA6B,CAAC;AAQrC,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAC1C,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAgQnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwD,MAAM,OAAO,CAAC;AA8B7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,YAAY,EACX,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,6BAA6B,CAAC;AAQrC,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAC1C,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CA6QnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../src/reducer.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAc,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAUzE,eAAO,MAAM,IAAI,GAAI,aAAa,UAAU,GAAG,GAAG,KAAG,UAqBpD,CAAC;AA2BF,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,UAAU,CAyQ1E"}
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../src/reducer.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAc,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAUzE,eAAO,MAAM,IAAI,GAAI,aAAa,UAAU,GAAG,GAAG,KAAG,UAqBpD,CAAC;AA2BF,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,UAAU,CA6Q1E"}
@@ -27,6 +27,34 @@ export type ConsentLookupResponseType = {
27
27
  export declare const storeConsent: (cmp: ConsentManager, consent?: ConsentCategoryType[], recordedRemotely?: boolean, consentDate?: string | Date) => Promise<ConsentCategoryType[]>;
28
28
  export declare const clearConsent: (cmp: ConsentManager) => Promise<ConsentCategoryType[]>;
29
29
  export declare const migrateConsentStorage: (cmp: ConsentManager) => Promise<ConsentCategoryType[] | null>;
30
+ /**
31
+ * Resolves the effective `forceReconsent` signal in whole seconds, validating
32
+ * before trusting it. The raw field ships over the network and is human-edited,
33
+ * so treat any malformed value as "no signal" (null) rather than invalidating
34
+ * every consent:
35
+ *
36
+ * - absent / null → null (no signal)
37
+ * - <= 0 → null (guards zero and negatives)
38
+ * - in the future → null (clock skew, or a value mistakenly stamped in
39
+ * milliseconds, which reads as ~1000× "now" ⇒ future)
40
+ *
41
+ * Failing toward *not* invalidating means the worst a bad value causes is a
42
+ * missed prompt, never a permanent lockout.
43
+ */
44
+ export declare const effectiveForceReconsentSeconds: (cmp: ConsentManager) => number | null;
45
+ /**
46
+ * True when a consent record predates the server's `forceReconsent` stamp.
47
+ * `timestamp` is the recorded-consent instant (stored as an ISO/ms string).
48
+ *
49
+ * Unit alignment is the subtle part: the signal is in SECONDS and the timestamp
50
+ * is in MILLISECONDS, so the signal is scaled up (`* 1000`). The boundary is
51
+ * strict `<` — consent recorded exactly at the stamp instant stays valid.
52
+ *
53
+ * A missing/unparseable timestamp fails closed (returns false), so first-run
54
+ * (no timestamp) is not wrongly invalidated. `storeConsent` always co-stamps,
55
+ * so a consented-but-timestampless record is unreachable here anyway.
56
+ */
57
+ export declare const predatesForceReconsent: (cmp: ConsentManager, timestamp: string | number | Date | null | undefined) => boolean;
30
58
  /**
31
59
  * Returns true when the locally stored consent has aged past its expiration
32
60
  * window (see {@link effectiveExpirationSeconds}).
@@ -1 +1 @@
1
- {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../../../src/services/consent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAEN,KAAK,mBAAmB,EAIxB,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAsBtD,MAAM,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACtB,CAAC;AAsDF,eAAO,MAAM,YAAY,GACxB,KAAK,cAAc,EACnB,UAAU,mBAAmB,EAAE,EAC/B,mBAAmB,OAAO,EAI1B,cAAc,MAAM,GAAG,IAAI,KACzB,OAAO,CAAC,mBAAmB,EAAE,CA6C/B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,KAAK,cAAc,mCAyBrD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GACjC,KAAK,cAAc,KACjB,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAsDtC,CAAC;AA0LF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC5B,KAAK,cAAc,KACjB,OAAO,CAAC,OAAO,CAOjB,CAAC;AAEF,eAAO,MAAM,aAAa,GACzB,KAAK,cAAc,EACnB,UAAU,mBAAmB,EAAE,mCAyB/B,CAAC;AAEF,wBAAgB,cAAc,CAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,CAqBR;AAED,eAAO,MAAM,YAAY,GAAU,KAAK,cAAc,mCAyGrD,CAAC;AAKF,eAAO,MAAM,eAAe,GAC3B,YAAY,MAAM,EAClB,UAAU,MAAM,KACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAYvB,CAAC;AAEF,eAAO,MAAM,WAAW,GACvB,YAAY,MAAM,EAClB,UAAU,MAAM,EAChB,QAAQ,MAAM,KACZ,OAAO,CAAC,IAAI,CAed,CAAC;AAEF,eAAO,MAAM,qBAAqB,GACjC,YAAY,MAAM,EAClB,UAAU,MAAM,KACd,OAAO,CAAC,IAAI,GAAG,IAAI,CAYrB,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,YAAY,MAAM,EAClB,UAAU,MAAM,KACd,OAAO,CAAC,OAAO,CAejB,CAAC;AAEF,eAAO,MAAM,aAAa,GACzB,YAAY,MAAM,EAClB,UAAU,MAAM,KACd,OAAO,CAAC,MAAM,GAAG,IAAI,CASvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GACjC,YAAY,MAAM,EAClB,UAAU,MAAM,KACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAUvB,CAAC;AAEF,eAAO,MAAM,WAAW,GACvB,YAAY,MAAM,EAClB,UAAU,MAAM,KACd,OAAO,CAAC,MAAM,CAkHhB,CAAC"}
1
+ {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../../../src/services/consent.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osano/osano-cmp-react-native",
3
- "version": "0.19.0",
3
+ "version": "0.19.1",
4
4
  "description": "Package and example for the react-native Osano CMP SDK",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -31,9 +31,9 @@
31
31
  ],
32
32
  "scripts": {
33
33
  "example": "yarn workspace osano-cmp-sdk-example",
34
- "test": "jest src/services/__tests__/consent.test.ts src/services/__tests__/gdprMappings.test.ts src/services/__tests__/fetchConfig.test.ts src/__tests__/index.test.tsx src/services/__tests__/google-consent-mode.test.ts src/__tests__/OsanoLogger.test.ts src/__tests__/constants.test.ts src/__tests__/doNotSell.test.ts src/__tests__/doNotSell.regression.test.ts src/__tests__/reducer.test.ts src/__tests__/selectors.test.ts src/__tests__/ConsentManager.test.ts src/__tests__/ConsentUiBuilder.test.tsx src/views/Drawer/__tests__/Drawer.ConsentCategories.test.tsx src/utils/__tests__/WebStorage.test.ts src/native/__tests__/OsanoCmp.test.ts",
35
- "test:legacy": "REACT_NATIVE_NEW_ARCH_ENABLED=false jest src/services/__tests__/consent.test.ts src/services/__tests__/gdprMappings.test.ts src/services/__tests__/fetchConfig.test.ts src/__tests__/index.test.tsx src/services/__tests__/google-consent-mode.test.ts src/__tests__/OsanoLogger.test.ts src/__tests__/constants.test.ts src/__tests__/doNotSell.test.ts src/__tests__/doNotSell.regression.test.ts src/__tests__/reducer.test.ts src/__tests__/selectors.test.ts src/__tests__/ConsentManager.test.ts src/__tests__/ConsentUiBuilder.test.tsx src/views/Drawer/__tests__/Drawer.ConsentCategories.test.tsx src/utils/__tests__/WebStorage.test.ts src/native/__tests__/OsanoCmp.test.ts",
36
- "test:newarch": "REACT_NATIVE_NEW_ARCH_ENABLED=true jest src/services/__tests__/consent.test.ts src/services/__tests__/gdprMappings.test.ts src/services/__tests__/fetchConfig.test.ts src/__tests__/index.test.tsx src/services/__tests__/google-consent-mode.test.ts src/__tests__/OsanoLogger.test.ts src/__tests__/constants.test.ts src/__tests__/doNotSell.test.ts src/__tests__/doNotSell.regression.test.ts src/__tests__/reducer.test.ts src/__tests__/selectors.test.ts src/__tests__/ConsentManager.test.ts src/__tests__/ConsentUiBuilder.test.tsx src/views/Drawer/__tests__/Drawer.ConsentCategories.test.tsx src/utils/__tests__/WebStorage.test.ts src/native/__tests__/OsanoCmp.test.ts",
34
+ "test": "jest src/services/__tests__/consent.test.ts src/iab/tcf/__tests__/middleware.v2.spec.js src/services/__tests__/gdprMappings.test.ts src/services/__tests__/fetchConfig.test.ts src/__tests__/index.test.tsx src/services/__tests__/google-consent-mode.test.ts src/__tests__/OsanoLogger.test.ts src/__tests__/constants.test.ts src/__tests__/doNotSell.test.ts src/__tests__/doNotSell.regression.test.ts src/__tests__/reducer.test.ts src/__tests__/selectors.test.ts src/__tests__/ConsentManager.test.ts src/__tests__/ConsentUiBuilder.test.tsx src/views/Drawer/__tests__/Drawer.ConsentCategories.test.tsx src/utils/__tests__/WebStorage.test.ts src/native/__tests__/OsanoCmp.test.ts",
35
+ "test:legacy": "REACT_NATIVE_NEW_ARCH_ENABLED=false jest src/services/__tests__/consent.test.ts src/iab/tcf/__tests__/middleware.v2.spec.js src/services/__tests__/gdprMappings.test.ts src/services/__tests__/fetchConfig.test.ts src/__tests__/index.test.tsx src/services/__tests__/google-consent-mode.test.ts src/__tests__/OsanoLogger.test.ts src/__tests__/constants.test.ts src/__tests__/doNotSell.test.ts src/__tests__/doNotSell.regression.test.ts src/__tests__/reducer.test.ts src/__tests__/selectors.test.ts src/__tests__/ConsentManager.test.ts src/__tests__/ConsentUiBuilder.test.tsx src/views/Drawer/__tests__/Drawer.ConsentCategories.test.tsx src/utils/__tests__/WebStorage.test.ts src/native/__tests__/OsanoCmp.test.ts",
36
+ "test:newarch": "REACT_NATIVE_NEW_ARCH_ENABLED=true jest src/services/__tests__/consent.test.ts src/iab/tcf/__tests__/middleware.v2.spec.js src/services/__tests__/gdprMappings.test.ts src/services/__tests__/fetchConfig.test.ts src/__tests__/index.test.tsx src/services/__tests__/google-consent-mode.test.ts src/__tests__/OsanoLogger.test.ts src/__tests__/constants.test.ts src/__tests__/doNotSell.test.ts src/__tests__/doNotSell.regression.test.ts src/__tests__/reducer.test.ts src/__tests__/selectors.test.ts src/__tests__/ConsentManager.test.ts src/__tests__/ConsentUiBuilder.test.tsx src/views/Drawer/__tests__/Drawer.ConsentCategories.test.tsx src/utils/__tests__/WebStorage.test.ts src/native/__tests__/OsanoCmp.test.ts",
37
37
  "test:google-consent-mode": "jest src/services/__tests__/google-consent-mode.test.ts",
38
38
  "typecheck": "tsc --noEmit",
39
39
  "lint": "eslint",
@@ -229,6 +229,7 @@ export class ConsentConfig extends EventEmitter {
229
229
  DEFAULT_CONFIG.palette,
230
230
  config.palette,
231
231
  ) as Palette;
232
+ delete this._config.forceReconsent;
232
233
  this._config = merge(this._config, config) as Config;
233
234
  this.emit('loadSuccess', this._config);
234
235
  })
@@ -291,7 +292,7 @@ export class ConsentConfig extends EventEmitter {
291
292
  get forceManagePreferences(): boolean {
292
293
  return this._config.forceManagePreferences;
293
294
  }
294
- get forceReconsent(): Date | undefined {
295
+ get forceReconsent(): number | undefined {
295
296
  return this._config.forceReconsent;
296
297
  }
297
298
  get googleConsent(): boolean {
@@ -707,12 +708,32 @@ export class ConsentManager {
707
708
  private _overridePalette?: Palette;
708
709
  private _googleConsentModeCallback?: GoogleConsentModeCallback;
709
710
  private _consentExpirationTestingSeconds?: number;
711
+ private _consentInvalidated = false;
712
+ private _consentPromptRequired = false;
710
713
 
711
714
  private _deviceId = '';
712
715
  public get deviceId(): string {
713
716
  return this._deviceId;
714
717
  }
715
718
 
719
+ /**
720
+ * True when the most recent load invalidated local consent data.
721
+ */
722
+ public get consentInvalidated(): boolean {
723
+ return this._consentInvalidated;
724
+ }
725
+ public set consentInvalidated(value: boolean) {
726
+ this._consentInvalidated = value;
727
+ }
728
+
729
+ /** False when fresh remote consent supersedes only the re-prompt. */
730
+ public get consentPromptRequired(): boolean {
731
+ return this._consentPromptRequired;
732
+ }
733
+ public set consentPromptRequired(value: boolean) {
734
+ this._consentPromptRequired = value;
735
+ }
736
+
716
737
  /**
717
738
  * The debug-only consent expiration testing window, in seconds, or
718
739
  * `undefined` when testing mode is disabled. Read by the consent service to
@@ -962,6 +983,8 @@ export class ConsentManager {
962
983
  resolveLoadConfig(
963
984
  new Promise((resolve, reject) => {
964
985
  this._cancelLoading = reject;
986
+ this._consentInvalidated = false;
987
+ this._consentPromptRequired = false;
965
988
  fetchConsent(this)
966
989
  .catch(() => {
967
990
  // Consent not found
@@ -29,27 +29,65 @@ export interface IABConsentData {
29
29
  enableAdvertiserConsentMode?: boolean;
30
30
  }
31
31
 
32
- export const clearAllIABKeys = (): void => {
33
- osanoLogger.info('🧹 Clearing all IAB consent keys...');
34
-
35
- Object.values(IABKeys.LEGACY).forEach((key) => {
36
- clearStorageFromDefault(key);
37
- });
38
-
39
- DEFAULT_STORAGE_KEYS.IABTCF.forEach((key) => {
40
- clearStorageFromDefault(key);
41
- });
42
-
43
- CUSTOM_STORAGE_KEYS.forEach((key) => {
44
- clearStorage(key);
45
- });
46
-
47
- osanoLogger.info(
48
- '✅ All IAB consent keys cleared from both custom and default storage',
32
+ let storageQueue = Promise.resolve();
33
+
34
+ const enqueueStorageOperation = <T>(
35
+ operation: () => Promise<T>,
36
+ ): Promise<T> => {
37
+ const result = storageQueue.then(operation, operation);
38
+ storageQueue = result.then(
39
+ () => undefined,
40
+ (error) => {
41
+ osanoLogger.error(
42
+ `IAB storage operation failed: ${String(error)}`,
43
+ error instanceof Error ? error : undefined,
44
+ );
45
+ },
49
46
  );
47
+ return result;
50
48
  };
51
49
 
52
- export const setAllIABKeys = (consentData: IABConsentData): void => {
50
+ const enqueueSetStorage = (key: string, value: string) =>
51
+ enqueueStorageOperation(() => setStorage(key, value));
52
+
53
+ const enqueueSetStorageToDefault = (key: string, value: string) =>
54
+ enqueueStorageOperation(() => setStorageToDefault(key, value));
55
+
56
+ const enqueueSetIntStorageToDefault = (key: string, value: number) =>
57
+ enqueueStorageOperation(() => setIntStorageToDefault(key, value));
58
+
59
+ export const clearAllIABKeys = (
60
+ additionalCustomKeys: string[] = [],
61
+ ): Promise<void> =>
62
+ enqueueStorageOperation(async () => {
63
+ osanoLogger.info('🧹 Clearing all IAB consent keys...');
64
+ const operations = [
65
+ ...Object.values(IABKeys.LEGACY).map((key) =>
66
+ clearStorageFromDefault(key),
67
+ ),
68
+ ...DEFAULT_STORAGE_KEYS.IABTCF.map((key) => clearStorageFromDefault(key)),
69
+ ...[...CUSTOM_STORAGE_KEYS, ...additionalCustomKeys].map((key) =>
70
+ clearStorage(key),
71
+ ),
72
+ ];
73
+ const failures = await Promise.all(
74
+ operations.map((operation) =>
75
+ operation.then(
76
+ () => ({ failed: false as const }),
77
+ (error: unknown) => ({ failed: true as const, error }),
78
+ ),
79
+ ),
80
+ );
81
+ const failure = failures.find((result) => result.failed);
82
+ if (failure?.failed) {
83
+ throw failure.error;
84
+ }
85
+ osanoLogger.info(
86
+ '✅ All IAB consent keys cleared from both custom and default storage',
87
+ );
88
+ });
89
+
90
+ export const setAllIABKeys = (consentData: IABConsentData): Promise<void> => {
53
91
  const {
54
92
  tcString,
55
93
  cmpId,
@@ -72,57 +110,66 @@ export const setAllIABKeys = (consentData: IABConsentData): void => {
72
110
  const subjectToGDPR = gdprApplies ? '1' : '0';
73
111
 
74
112
  // === Save to Custom Storage ===
75
- setStorage(IABKeys.IABTCF.CMP_SDK_ID, cmpId.toString());
76
- setStorage(IABKeys.IABTCF.CMP_SDK_VERSION, cmpVersion.toString());
77
- setStorage(IABKeys.IABTCF.POLICY_VERSION, policyVersion);
78
- setStorage(IABKeys.IABTCF.PUBLISHER_CC, publisherCC);
79
- setStorage(IABKeys.IABTCF.GDPR_APPLIES, subjectToGDPR);
80
- setStorage(
113
+ enqueueSetStorage(IABKeys.IABTCF.CMP_SDK_ID, cmpId.toString());
114
+ enqueueSetStorage(IABKeys.IABTCF.CMP_SDK_VERSION, cmpVersion.toString());
115
+ enqueueSetStorage(IABKeys.IABTCF.POLICY_VERSION, policyVersion);
116
+ enqueueSetStorage(IABKeys.IABTCF.PUBLISHER_CC, publisherCC);
117
+ enqueueSetStorage(IABKeys.IABTCF.GDPR_APPLIES, subjectToGDPR);
118
+ enqueueSetStorage(
81
119
  IABKeys.IABTCF.PURPOSE_ONE_TREATMENT,
82
120
  purposeOneTreatment ? '1' : '0',
83
121
  );
84
- setStorage(
122
+ enqueueSetStorage(
85
123
  IABKeys.IABTCF.USE_NON_STANDARD_TEXTS,
86
124
  useNonStandardStacks ? '1' : '0',
87
125
  );
88
- setStorage(IABKeys.IABTCF.VENDOR_CONSENTS, vendorConsentsString);
89
- setStorage(
126
+ enqueueSetStorage(IABKeys.IABTCF.VENDOR_CONSENTS, vendorConsentsString);
127
+ enqueueSetStorage(
90
128
  IABKeys.IABTCF.VENDOR_LEGITIMATE_INTERESTS,
91
129
  vendorLegitimateInterestsString,
92
130
  );
93
- setStorage(IABKeys.IABTCF.PURPOSE_CONSENTS, purposeConsentsString);
94
- setStorage(
131
+ enqueueSetStorage(IABKeys.IABTCF.PURPOSE_CONSENTS, purposeConsentsString);
132
+ enqueueSetStorage(
95
133
  IABKeys.IABTCF.PURPOSE_LEGITIMATE_INTERESTS,
96
134
  purposeLegitimateInterestsString,
97
135
  );
98
- setStorage(
136
+ enqueueSetStorage(
99
137
  IABKeys.IABTCF.SPECIAL_FEATURES_OPT_INS,
100
138
  specialFeatureOptinsString,
101
139
  );
102
140
 
103
141
  // === Save to Default Storage for AdMob Compatibility ===
104
142
 
105
- setStorageToDefault(IABKeys.LEGACY.CMP_PRESENT, 'true');
106
- setStorageToDefault(IABKeys.LEGACY.SUBJECT_TO_GDPR, subjectToGDPR);
107
- setStorageToDefault(IABKeys.LEGACY.CONSENT_STRING, tcString);
108
- setStorageToDefault(
143
+ enqueueSetStorageToDefault(IABKeys.LEGACY.CMP_PRESENT, 'true');
144
+ enqueueSetStorageToDefault(IABKeys.LEGACY.SUBJECT_TO_GDPR, subjectToGDPR);
145
+ enqueueSetStorageToDefault(IABKeys.LEGACY.CONSENT_STRING, tcString);
146
+ enqueueSetStorageToDefault(
109
147
  IABKeys.LEGACY.PARSED_PURPOSE_CONSENTS,
110
148
  purposeConsentsString,
111
149
  );
112
- setStorageToDefault(
150
+ enqueueSetStorageToDefault(
113
151
  IABKeys.LEGACY.PARSED_VENDOR_CONSENTS,
114
152
  vendorConsentsString,
115
153
  );
116
154
 
117
- setIntStorageToDefault(IABKeys.IABTCF.GDPR_APPLIES, gdprApplies ? 1 : 0);
118
- setStorageToDefault(IABKeys.IABTCF.TC_STRING, tcString);
119
- setStorageToDefault(IABKeys.IABTCF.PURPOSE_CONSENTS, purposeConsentsString);
120
- setStorageToDefault(IABKeys.IABTCF.VENDOR_CONSENTS, vendorConsentsString);
121
- setStorageToDefault(IABKeys.IABTCF.ADDTL_CONSENT, '');
155
+ enqueueSetIntStorageToDefault(
156
+ IABKeys.IABTCF.GDPR_APPLIES,
157
+ gdprApplies ? 1 : 0,
158
+ );
159
+ enqueueSetStorageToDefault(IABKeys.IABTCF.TC_STRING, tcString);
160
+ enqueueSetStorageToDefault(
161
+ IABKeys.IABTCF.PURPOSE_CONSENTS,
162
+ purposeConsentsString,
163
+ );
164
+ enqueueSetStorageToDefault(
165
+ IABKeys.IABTCF.VENDOR_CONSENTS,
166
+ vendorConsentsString,
167
+ );
168
+ enqueueSetStorageToDefault(IABKeys.IABTCF.ADDTL_CONSENT, '');
122
169
 
123
170
  // Handle Google Consent Mode integration
124
171
  if (enableAdvertiserConsentMode !== undefined) {
125
- setIntStorageToDefault(
172
+ enqueueSetIntStorageToDefault(
126
173
  IABKeys.IABTCF.ENABLE_ADVERTISER_CONSENT_MODE,
127
174
  enableAdvertiserConsentMode ? 1 : 0,
128
175
  );
@@ -143,24 +190,22 @@ export const setAllIABKeys = (consentData: IABConsentData): void => {
143
190
  osanoLogger.debug(
144
191
  `📊 Updated IAB keys: CMP=true, SubjectToGDPR=${subjectToGDPR}, PurposeConsents=${purposeConsentsString.length} chars, VendorConsents=${vendorConsentsString.length} chars`,
145
192
  );
193
+ return enqueueStorageOperation(() => Promise.resolve());
146
194
  };
147
195
 
148
- export const setCustomIABKey = (key: string, value: string): void => {
149
- setStorage(key, value);
150
- };
196
+ export const setCustomIABKey = (key: string, value: string): Promise<string> =>
197
+ enqueueSetStorage(key, value);
151
198
 
152
- export const setDefaultIABKey = (key: string, value: string): void => {
153
- setStorageToDefault(key, value);
154
- };
199
+ export const setDefaultIABKey = (key: string, value: string): Promise<string> =>
200
+ enqueueSetStorageToDefault(key, value);
155
201
 
156
- export const setDefaultIABKeyAsInt = (key: string, value: number): void => {
157
- setIntStorageToDefault(key, value);
158
- };
202
+ export const setDefaultIABKeyAsInt = (
203
+ key: string,
204
+ value: number,
205
+ ): Promise<number> => enqueueSetIntStorageToDefault(key, value);
159
206
 
160
- export const clearCustomIABKey = (key: string): void => {
161
- clearStorage(key);
162
- };
207
+ export const clearCustomIABKey = (key: string): Promise<void> =>
208
+ enqueueStorageOperation(() => clearStorage(key));
163
209
 
164
- export const clearDefaultIABKey = (key: string): void => {
165
- clearStorageFromDefault(key);
166
- };
210
+ export const clearDefaultIABKey = (key: string): Promise<void> =>
211
+ enqueueStorageOperation(() => clearStorageFromDefault(key));
@@ -8,8 +8,12 @@ import {
8
8
  setConsent,
9
9
  } from './actions';
10
10
  import { SET_CONSENT_DATA, setConsentData } from '../actions';
11
- import { clearAllIABKeys, setAllIABKeys } from './iab-storage-utils';
12
- import { clearStorage, getStorage, setStorage } from '../../native/OsanoCmp';
11
+ import {
12
+ clearAllIABKeys,
13
+ setAllIABKeys,
14
+ setCustomIABKey,
15
+ } from './iab-storage-utils';
16
+ import { clearStorage, getStorage } from '../../native/OsanoCmp';
13
17
  import { getConsentString, getPurposeIds } from './selectors';
14
18
  import {
15
19
  idRecordToBinaryString,
@@ -25,12 +29,18 @@ import { Platform } from 'react-native';
25
29
  import type { Store } from '../../hooks/useThunkReducer';
26
30
  import { osanoLogger } from '../../utils/OsanoLogger';
27
31
 
32
+ const TCF_GPP_SECTIONS = ['tcfeuv2', 'tcfcav1'];
33
+
28
34
  export const makeMiddleware: IabMiddlewareFactory = (
29
35
  initOptions: IabInitOptions,
30
36
  ) => {
31
37
  const { createConsentPayload, gppSection, version } = initOptions;
32
38
  const parseConsentString = makeParseConsentString(initOptions);
33
39
  const formatConsentString = makeFormatConsentString(initOptions);
40
+ const clearStoredTcfConsent = (configId: string) =>
41
+ clearAllIABKeys(
42
+ TCF_GPP_SECTIONS.map((section) => `${section}_${configId}`),
43
+ );
34
44
  return (store: Store<OsanoState & IabState, OsanoAction>) =>
35
45
  (next: (action: OsanoAction) => OsanoState & IabState) =>
36
46
  (action: OsanoAction) => {
@@ -64,6 +74,20 @@ export const makeMiddleware: IabMiddlewareFactory = (
64
74
  }
65
75
  store.dispatch(setConsent(payload));
66
76
  };
77
+ // Wipe instead of rehydrating a granted string. A localStorage-only
78
+ // path left IABTCF_* behind; OsanoCmp covers every platform.
79
+ if (newState.consentInvalidated) {
80
+ newState.iab.consentStrings = {
81
+ ...newState.iab.consentStrings,
82
+ [gppSection]: '',
83
+ };
84
+ store.dispatch(setConsentData(gppSection, ''));
85
+ clearStoredTcfConsent(configId).then(
86
+ () => resConsent(null),
87
+ () => resConsent(null),
88
+ );
89
+ break;
90
+ }
67
91
  switch (Platform.OS) {
68
92
  case 'ios':
69
93
  case 'android':
@@ -87,20 +111,12 @@ export const makeMiddleware: IabMiddlewareFactory = (
87
111
  break;
88
112
  }
89
113
  case CLEAR_CONSENT: {
90
- switch (Platform.OS) {
91
- case 'ios':
92
- case 'android':
93
- clearStorage(`${gppSection}_${configId}`);
94
-
95
- clearAllIABKeys();
96
- break;
97
- default:
98
- try {
99
- window.localStorage.removeItem(`${gppSection}_${configId}`);
100
- } catch {}
101
- break;
102
- }
114
+ newState.iab.consentStrings = {
115
+ ...newState.iab.consentStrings,
116
+ [gppSection]: '',
117
+ };
103
118
  store.dispatch(setConsentData(gppSection, ''));
119
+ clearStoredTcfConsent(configId).catch(() => {});
104
120
  break;
105
121
  }
106
122
  case SET_ALL_PURPOSE_CONSENT: {
@@ -147,22 +163,10 @@ export const makeMiddleware: IabMiddlewareFactory = (
147
163
  case SAVE_BEGIN: {
148
164
  if (config && configId) {
149
165
  const consentPayload = createConsentPayload(newState);
150
- switch (Platform.OS) {
151
- case 'ios':
152
- case 'android':
153
- try {
154
- setStorage(
155
- `${gppSection}_${configId}`,
156
- JSON.stringify(consentPayload),
157
- );
158
- } catch (err) {
159
- osanoLogger.error(
160
- `Failed to save consent to device storage: ${err}`,
161
- err instanceof Error ? err : undefined,
162
- );
163
- }
164
- break;
165
- }
166
+ setCustomIABKey(
167
+ `${gppSection}_${configId}`,
168
+ JSON.stringify(consentPayload),
169
+ );
166
170
  store.dispatch(
167
171
  setConsentData(gppSection, formatConsentString(config, newState)),
168
172
  );
@@ -183,7 +187,7 @@ export const makeMiddleware: IabMiddlewareFactory = (
183
187
  osanoLogger.info(`Setting new consent string -> ${value}`);
184
188
  const consent = parseConsentString(value);
185
189
 
186
- setStorage(storageKey, value);
190
+ setCustomIABKey(storageKey, value);
187
191
 
188
192
  const consentData = {
189
193
  tcString: value,
@@ -1,4 +1,4 @@
1
- import { CLEAR_CONSENT, RELOAD, SAVE_BEGIN, SET_CONFIG } from '../../actions';
1
+ import { CLEAR_CONSENT, RELOAD, SET_CONFIG } from '../../actions';
2
2
  import type { OsanoAction, OsanoState } from '../../types/store';
3
3
  import {
4
4
  SET_CONSENT,
@@ -21,8 +21,6 @@ import {
21
21
  import type { Config } from '../../types/consent-config';
22
22
  import type { IabInitOptions } from './types';
23
23
  import type { IabState } from '../types';
24
- import { Platform } from 'react-native';
25
- import { setStorage } from '../../native/OsanoCmp';
26
24
 
27
25
  export const initialState = {
28
26
  iab: {
@@ -91,7 +89,7 @@ const updateOptions = (
91
89
  };
92
90
 
93
91
  export default function makeReducer(initOptions: IabInitOptions) {
94
- const { createConsentPayload, gppSection, version } = initOptions;
92
+ const { createConsentPayload, version } = initOptions;
95
93
  return (state: OsanoState & IabState, action: OsanoAction) => {
96
94
  const { type, payload } = action;
97
95
  switch (type) {
@@ -135,31 +133,6 @@ export default function makeReducer(initOptions: IabInitOptions) {
135
133
  };
136
134
  }
137
135
 
138
- case SAVE_BEGIN: {
139
- const config = state.config;
140
- if (config?.configId && config.iabEnabled) {
141
- const consentPayload = createConsentPayload(state);
142
- switch (Platform.OS) {
143
- case 'ios':
144
- case 'android':
145
- setStorage(
146
- `${gppSection}_${config.configId}`,
147
- JSON.stringify(consentPayload),
148
- );
149
- break;
150
- default:
151
- try {
152
- window.localStorage.setItem(
153
- `${gppSection}_${config.configId}`,
154
- JSON.stringify(consentPayload),
155
- );
156
- } catch {}
157
- break;
158
- }
159
- }
160
- return state;
161
- }
162
-
163
136
  case CLEAR_CONSENT: {
164
137
  const consentPayload = createConsentPayload();
165
138
  return {