@wemush/wols 0.1.0 → 1.3.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/CHANGELOG.md +170 -0
- package/README.md +204 -31
- package/dist/cjs/compact-url.d.ts +150 -0
- package/dist/cjs/compact-url.d.ts.map +1 -0
- package/dist/cjs/compact-url.js +64 -0
- package/dist/cjs/compact-url.js.map +1 -1
- package/dist/cjs/crypto/decrypt.d.ts +110 -0
- package/dist/cjs/crypto/decrypt.d.ts.map +1 -0
- package/dist/cjs/crypto/decrypt.js +521 -90
- package/dist/cjs/crypto/decrypt.js.map +1 -1
- package/dist/cjs/crypto/encrypt.d.ts +132 -0
- package/dist/cjs/crypto/encrypt.d.ts.map +1 -0
- package/dist/cjs/crypto/encrypt.js +288 -105
- package/dist/cjs/crypto/encrypt.js.map +1 -1
- package/dist/cjs/crypto/index.d.ts +12 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +15 -2
- package/dist/cjs/crypto/index.js.map +1 -1
- package/dist/cjs/crypto/shared.d.ts +116 -0
- package/dist/cjs/crypto/shared.d.ts.map +1 -0
- package/dist/cjs/crypto/shared.js +238 -0
- package/dist/cjs/crypto/shared.js.map +1 -0
- package/dist/cjs/errors.d.ts +133 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +39 -1
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.d.ts +29 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +70 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/parser.d.ts +30 -0
- package/dist/cjs/parser.d.ts.map +1 -0
- package/dist/cjs/parser.js +3 -0
- package/dist/cjs/parser.js.map +1 -1
- package/dist/cjs/qr/generate.d.ts +62 -0
- package/dist/cjs/qr/generate.d.ts.map +1 -0
- package/dist/cjs/qr/index.d.ts +10 -0
- package/dist/cjs/qr/index.d.ts.map +1 -0
- package/dist/cjs/specimen.d.ts +96 -0
- package/dist/cjs/specimen.d.ts.map +1 -0
- package/dist/cjs/specimen.js +95 -9
- package/dist/cjs/specimen.js.map +1 -1
- package/dist/cjs/types.d.ts +735 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +327 -3
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/cuid.d.ts +46 -0
- package/dist/cjs/utils/cuid.d.ts.map +1 -0
- package/dist/cjs/utils/cuid.js +6 -4
- package/dist/cjs/utils/cuid.js.map +1 -1
- package/dist/cjs/utils/environment.d.ts +137 -0
- package/dist/cjs/utils/environment.d.ts.map +1 -0
- package/dist/cjs/utils/environment.js +206 -0
- package/dist/cjs/utils/environment.js.map +1 -0
- package/dist/cjs/utils/iso8601.d.ts +79 -0
- package/dist/cjs/utils/iso8601.d.ts.map +1 -0
- package/dist/cjs/utils/migration.d.ts +162 -0
- package/dist/cjs/utils/migration.d.ts.map +1 -0
- package/dist/cjs/utils/migration.js +248 -0
- package/dist/cjs/utils/migration.js.map +1 -0
- package/dist/cjs/validator.d.ts +25 -0
- package/dist/cjs/validator.d.ts.map +1 -0
- package/dist/cjs/validator.js +85 -21
- package/dist/cjs/validator.js.map +1 -1
- package/dist/esm/compact-url.js +62 -0
- package/dist/esm/compact-url.js.map +1 -1
- package/dist/esm/crypto/decrypt.js +517 -90
- package/dist/esm/crypto/decrypt.js.map +1 -1
- package/dist/esm/crypto/encrypt.js +284 -105
- package/dist/esm/crypto/encrypt.js.map +1 -1
- package/dist/esm/crypto/index.js +5 -3
- package/dist/esm/crypto/index.js.map +1 -1
- package/dist/esm/crypto/shared.js +222 -0
- package/dist/esm/crypto/shared.js.map +1 -0
- package/dist/esm/errors.js +37 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.js +26 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/parser.js +3 -0
- package/dist/esm/parser.js.map +1 -1
- package/dist/esm/specimen.js +95 -10
- package/dist/esm/specimen.js.map +1 -1
- package/dist/esm/types.js +317 -2
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/cuid.js +6 -4
- package/dist/esm/utils/cuid.js.map +1 -1
- package/dist/esm/utils/environment.js +193 -0
- package/dist/esm/utils/environment.js.map +1 -0
- package/dist/esm/utils/migration.js +237 -0
- package/dist/esm/utils/migration.js.map +1 -0
- package/dist/esm/validator.js +86 -22
- package/dist/esm/validator.js.map +1 -1
- package/dist/types/compact-url.d.ts +46 -0
- package/dist/types/compact-url.d.ts.map +1 -1
- package/dist/types/crypto/decrypt.d.ts +95 -18
- package/dist/types/crypto/decrypt.d.ts.map +1 -1
- package/dist/types/crypto/encrypt.d.ts +114 -14
- package/dist/types/crypto/encrypt.d.ts.map +1 -1
- package/dist/types/crypto/index.d.ts +5 -3
- package/dist/types/crypto/index.d.ts.map +1 -1
- package/dist/types/crypto/shared.d.ts +116 -0
- package/dist/types/crypto/shared.d.ts.map +1 -0
- package/dist/types/errors.d.ts +31 -1
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +15 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/parser.d.ts.map +1 -1
- package/dist/types/specimen.d.ts +29 -4
- package/dist/types/specimen.d.ts.map +1 -1
- package/dist/types/types.d.ts +483 -17
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/cuid.d.ts +5 -3
- package/dist/types/utils/cuid.d.ts.map +1 -1
- package/dist/types/utils/environment.d.ts +137 -0
- package/dist/types/utils/environment.d.ts.map +1 -0
- package/dist/types/utils/migration.d.ts +162 -0
- package/dist/types/utils/migration.d.ts.map +1 -0
- package/dist/types/validator.d.ts +1 -1
- package/dist/types/validator.d.ts.map +1 -1
- package/package.json +32 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../src/crypto/decrypt.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../src/crypto/decrypt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAY7C,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,MAAM,IAAI,GAAG,CAAC,KAA0B,EAAW,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAClF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAoB,EAAE,CACrD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA+B,CAAC,OAAO,KAAK,KAAK,CAAC;AAuBpG,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAU,CAAC;AAEtE;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,wBAAwB,oBAAoB,GAAG,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CACT,eAAe,CAAC,aAAa,EAAE,wDAAwD,CAAC,CACzF,CAAC;IACJ,CAAC;IACD,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,qFAAqF;QACrF,OAAO,IAAI,CACT,eAAe,CACb,kBAAkB,EAClB,iEAAiE,CAClE,CACF,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CACT,eAAe,CAAC,aAAa,EAAE,wDAAwD,CAAC,CACzF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CACT,eAAe,CAAC,mBAAmB,EAAE,cAAc,IAAI,0BAA0B,CAAC,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,IAAI,CACT,eAAe,CAAC,mBAAmB,EAAE,gDAAgD,EAAE;YACrF,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;SACvB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAsB;QAChC,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,CAAC;QACV,EAAE;QACF,EAAE,EAAE,UAAU,MAAM,EAAE;QACtB,GAAG;KACJ,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,CAAC,GAAG,GAAG,GAAoB,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACf,0EAA0E;QAC1E,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAC/D,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;IACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,cAAc,CAAC,KAAiC;IACvD,IAAI,GAAsB,CAAC;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC;QACnC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;IACpB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,GAAG,GAAG,KAAK,CAAC;IACd,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CACT,eAAe,CAAC,aAAa,EAAE,wDAAwD,CAAC,CACzF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,CACT,eAAe,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CACzF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,IAAI,CACT,eAAe,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAC7F,CAAC;IACJ,CAAC;IAED,IAAI,QAA4B,CAAC;IACjC,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvF,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,wBAAwB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,QAAQ;YACR,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,gDAAgD;AAChD,gFAAgF;AAEhF,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,cAAc,IAAI,0BAA0B,CAAC,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA0B;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,IAAI,6BAA6B,CAAC;IACnE,+EAA+E;IAC/E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,qBAAqB,IAAI,GAAG,GAAG,cAAc,EAAE,CAAC;QAClF,OAAO,IAAI,CACT,eAAe,CACb,mBAAmB,EACnB,yCAAyC,qBAAqB,OAAO,cAAc,SAAS,GAAG,EAAE,CAClG,CACF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,KAAkC,EAAE,GAAW;IACtE,mFAAmF;IACnF,MAAM,CAAC,GACL,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACf,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACnB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,2CAA2C,CAAC,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,CAAC,GAAG,qBAAqB,EAAE,CAAC;QAC9B,OAAO,IAAI,CACT,eAAe,CACb,yBAAyB,EACzB,0BAA0B,CAAC,4BAA4B,qBAAqB,EAAE,CAC/E,CACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACZ,OAAO,IAAI,CACT,eAAe,CACb,sBAAsB,EACtB,0BAA0B,CAAC,2BAA2B,GAAG,GAAG,EAC5D,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CACtC,CACF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,CAAe,EAAE,OAA0B;IAC1D,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,4CAA4C,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,GAAG,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAE/B,yDAAyD;IACzD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,OAAO,IAAI,CACT,eAAe,CACb,eAAe,EACf,iEAAiE;gBAC/D,4DAA4D,EAC9D,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CACF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,IAAI,CACT,eAAe,CAAC,sBAAsB,EAAE,mDAAmD,CAAC,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,IAAI,CACT,eAAe,CAAC,mBAAmB,EAAE,+CAA+C,EAAE;gBACpF,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;aAC9B,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACvD,OAAO,IAAI,CACT,eAAe,CAAC,sBAAsB,EAAE,6CAA6C,CAAC,CACvF,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,SAAS,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7C,IAAI,UAAU,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QACvC,OAAO,IAAI,CACT,eAAe,CACb,mBAAmB,EACnB,iBAAiB,UAAU,CAAC,MAAM,+BAA+B,cAAc,eAAe,CAC/F,CACF,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,SAAS,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7B,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,CACT,eAAe,CAAC,mBAAmB,EAAE,cAAc,SAAS,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC,CACxF,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CACT,eAAe,CAAC,aAAa,EAAE,2DAA2D,CAAC,CAC5F,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAChC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAC/E,GAAG,CACJ,CAAC;IACF,IAAI,SAAS,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7C,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QACvC,IAAI,GAAG,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,6CAA6C,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC/E,CAAC;AAED,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,6EAA6E;AAC7E,SAAS,YAAY,CAAC,QAAkB;IACtC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAC/B,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACjE,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAkB;IACzC,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACjE,OAAO,OAAO,QAAQ,KAAK,QAAQ;gBACjC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBAChD,CAAC,CAAC,QAAQ,CAAC;QACf,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CACrC,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,UAAU,CACpB,CAAC;QACF,OAAO,MAAM,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CACT,eAAe,CACb,aAAa,EACb,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7E,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,KAAK,UAAU,UAAU,CACvB,CAAe,EACf,OAA0B;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,SAAS,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,SAAS,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CACzB,QAAkB,EAClB,SAAoB,EACpB,GAA6B;IAE7B,IAAI,SAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CACrC,GAAG,KAAK,SAAS;YACf,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACtC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,EAC7D,SAAS,EACT,QAAQ,CAAC,UAAU,CACpB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CACT,eAAe,CACb,uBAAuB,EACvB,iFAAiF,CAClF,CACF,CAAC;IACJ,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,qEAAqE;QACrE,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,sCAAsC,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CACT,eAAe,CAAC,mBAAmB,EAAE,iDAAiD,CAAC,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAiC,EACjC,OAA0B;IAE1B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAEnC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAEnC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,UAAU,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpD,IAAI,QAAiB,CAAC;QACtB,IAAI,CAAC;YACH,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAA6B,EAAE,EAAE,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,qCAAqC,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,qEAAqE;YACrE,iCAAiC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7D,OAAO,IAAI,CACT,eAAe,CACb,aAAa,EACb,yBAAyB,KAAK,mBAAmB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAC7E,EAAE,UAAU,EAAE,QAAQ,EAAE,CACzB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8FAA8F;AAC9F,SAAS,cAAc,CAAC,IAAY,EAAE,IAAY;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAClC,OAAO,IAAI,CACT,eAAe,CACb,mBAAmB,EACnB,GAAG,IAAI,kCAAkC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAC/D,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,CAC7B,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAiC,EACjC,OAA0B;IAE1B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAqB,EACrB,OAA0B,EAC1B,OAAqB;IAErB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,oCAAoC,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,SAAS,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,SAAS,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAY,EAAE,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,mCAAmC,CAAC,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAUD,SAAS,WAAW,CAAC,KAAqB;IACxC,OAAO;QACL,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,SAAS,UAAU,CACjB,KAAqB,EACrB,OAAiC;IAEjC,IAAK,KAA2B,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACrE,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;QAC9B,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QACjC,OAAO,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACtC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAC1B,CAAC;QACD,OAAO,IAAI,CACT,eAAe,CACb,mBAAmB,EACnB,iGAAiG,CAClG,CACF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAuD,EACvD,OAA0B;IAE1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,4CAA4C,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAA0B,EAAW,EAAE,CACvE,IAAI,CACF,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE;QACjE,GAAG,KAAK,CAAC,OAAO;QAChB,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC,CACH,CAAC;IAEJ,MAAM,gBAAgB,GAAG,CAAC,CAAU,EAAW,EAAE,CAC/C,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAK,CAA6B,CAAC,SAAS,KAAK,IAAI,CAAC;IAE3F,kEAAkE;IAClE,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/F,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CACT,eAAe,CACb,mBAAmB,EACnB,wBAAwB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAC/E,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAC/B,CACF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7B,+DAA+D;IAC/D,MAAM,OAAO,GACX,EAAE,CAAC;IACL,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,IACE,OAAO,UAAU,KAAK,QAAQ;YAC9B,UAAU,KAAK,IAAI;YAClB,UAAsC,CAAC,SAAS,KAAK,IAAI,EAC1D,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,UAA4B,CAAC;QAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,SAAS,CAAC,QAAQ,CAAC;YAAE,OAAO,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,OAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,SAAS,CAAC,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,0DAA0D;IAC1D,MAAM,GAAG,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAChB,OAAO,IAAI,CACT,eAAe,CACb,sBAAsB,EACtB,kBAAkB,KAAK,6BAA6B,WAAW,CAAC,IAAI,mBAAmB;YACrF,4BAA4B,GAAG,GAAG,EACpC,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,CAC1C,CACF,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC1C,MAAM,MAAM,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;IACrD,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,SAAS,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/D,SAAS,GAAG,OAAO,CAAC;YACpB,IAAI,EAAE,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAY,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,UAAU,CACf,IAAI,EACJ,eAAe,CAAC,mBAAmB,EAAE,mCAAmC,CAAC,CAC1E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CACT,eAAe,CACb,mBAAmB,EACnB,2CAA2C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9F,CACF,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,147 +1,326 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WOLS Encryption Module
|
|
2
|
+
* WOLS Encryption Module (WOLS v1.3.0 encrypted format)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* AES-256-GCM via WebCrypto, so it runs in Node.js 20+, browsers, Deno and Bun.
|
|
5
|
+
*
|
|
6
|
+
* ## Wire format
|
|
7
|
+
*
|
|
8
|
+
* ```
|
|
9
|
+
* wemush://v1/encrypted/{id}?e={ciphertext}&iv={iv}&kdf={pbkdf2|raw}[&salt={salt}&i={iterations}]
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* - `e`: ciphertext with the 16-byte GCM tag appended
|
|
13
|
+
* - `iv`: fresh random 12-byte IV per encryption
|
|
14
|
+
* - All binary values are base64url without padding
|
|
15
|
+
*
|
|
16
|
+
* ## Keys
|
|
17
|
+
*
|
|
18
|
+
* | `key` value | `kdf` | Notes |
|
|
19
|
+
* |-------------|-------|-------|
|
|
20
|
+
* | `string` passphrase | `pbkdf2` | PBKDF2-HMAC-SHA256, fresh random 16-byte salt per label, ≥100,000 iterations |
|
|
21
|
+
* | 32-byte `Uint8Array` / `ArrayBuffer` | `raw` | Key shared out of band |
|
|
22
|
+
* | AES-GCM 256 `CryptoKey` | `raw` | Key shared out of band |
|
|
23
|
+
*
|
|
24
|
+
* Pre-1.3.0 releases derived passphrase keys with a fixed library-wide salt.
|
|
25
|
+
* That scheme is never generated any more; see `allowLegacy` on decryption.
|
|
6
26
|
*
|
|
7
27
|
* @module crypto/encrypt
|
|
8
28
|
*/
|
|
29
|
+
import { WolsEncryptionError, WolsErrorCode } from '../errors.js';
|
|
9
30
|
import { serializeSpecimen } from '../specimen.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
let
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
import { DEFAULT_PBKDF2_ITERATIONS, ENCRYPTED_URL_PREFIX, GCM_TAG_LENGTH, IV_LENGTH, LEGACY_PBKDF2_SALT, IDENTIFYING_FIELDS, MAX_ITERATIONS, fieldAad, MIN_GENERATE_ITERATIONS, SALT_LENGTH, assertWebCrypto, base64UrlDecode, base64UrlEncode, derivePassphraseKey, importAesKey, isPassphrase, isRawKey, randomBytes, resolveRawKey, } from './shared.js';
|
|
32
|
+
function encryptionError(message, code = WolsErrorCode.ENCRYPTION_ERROR) {
|
|
33
|
+
throw new WolsEncryptionError(code, message);
|
|
34
|
+
}
|
|
35
|
+
/** Generators MUST use 100,000 to 10,000,000 iterations (WOLS 1.3.0). */
|
|
36
|
+
function checkGenerateIterations(iterations) {
|
|
37
|
+
if (typeof iterations !== 'number' ||
|
|
38
|
+
!Number.isInteger(iterations) ||
|
|
39
|
+
iterations < MIN_GENERATE_ITERATIONS ||
|
|
40
|
+
iterations > MAX_ITERATIONS) {
|
|
41
|
+
return encryptionError(`PBKDF2 iterations must be an integer from ${MIN_GENERATE_ITERATIONS} to ` +
|
|
42
|
+
`${MAX_ITERATIONS}, got ${String(iterations)}`);
|
|
43
|
+
}
|
|
44
|
+
return iterations;
|
|
45
|
+
}
|
|
46
|
+
/** Decode canonical, unpadded base64url, or throw an encryption error naming the parameter. */
|
|
47
|
+
function canonicalBytes(name, value) {
|
|
48
|
+
let bytes;
|
|
49
|
+
if (typeof value === 'string' && !value.includes('=')) {
|
|
50
|
+
try {
|
|
51
|
+
bytes = base64UrlDecode(value);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
bytes = undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Re-encoding catches non-canonical spellings (non-zero trailing bits) that
|
|
58
|
+
// decode to the same bytes as a different string.
|
|
59
|
+
if (bytes === undefined || base64UrlEncode(bytes) !== value) {
|
|
60
|
+
return encryptionError(`${name} must be canonical base64url without padding`);
|
|
30
61
|
}
|
|
31
|
-
return
|
|
62
|
+
return bytes;
|
|
63
|
+
}
|
|
64
|
+
function bytesEqual(a, b) {
|
|
65
|
+
return a.length === b.length && a.every((byte, i) => byte === b[i]);
|
|
32
66
|
}
|
|
67
|
+
/** Identifying fields (WOLS 1.3.0) stay in cleartext so labels remain routable. */
|
|
68
|
+
const STRUCTURAL_FIELDS = new Set(IDENTIFYING_FIELDS);
|
|
33
69
|
/**
|
|
34
|
-
*
|
|
70
|
+
* Turn the caller's key into an AES key plus the parameters to record.
|
|
71
|
+
* A passphrase gets a fresh random salt for every call (one call = one label).
|
|
35
72
|
*/
|
|
36
|
-
async function
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
73
|
+
async function resolveEncryptionKey(options) {
|
|
74
|
+
const { key } = options;
|
|
75
|
+
if (isPassphrase(key)) {
|
|
76
|
+
const iterations = checkGenerateIterations(options.iterations ?? DEFAULT_PBKDF2_ITERATIONS);
|
|
77
|
+
const salt = randomBytes(SALT_LENGTH);
|
|
78
|
+
const keyBytes = await derivePassphraseKey(key, salt, iterations);
|
|
79
|
+
return {
|
|
80
|
+
cryptoKey: await importAesKey(keyBytes, 'encrypt'),
|
|
81
|
+
kdf: 'pbkdf2',
|
|
82
|
+
salt: base64UrlEncode(salt),
|
|
83
|
+
iterations,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (isRawKey(key)) {
|
|
87
|
+
const resolved = await resolveRawKey(key, 'encrypt');
|
|
88
|
+
if (typeof resolved === 'string') {
|
|
89
|
+
encryptionError(resolved, WolsErrorCode.INVALID_KEY);
|
|
90
|
+
}
|
|
91
|
+
return { cryptoKey: resolved, kdf: 'raw' };
|
|
92
|
+
}
|
|
93
|
+
return encryptionError('key must be a passphrase string, 32 raw key bytes, or an AES-GCM CryptoKey', WolsErrorCode.INVALID_KEY);
|
|
50
94
|
}
|
|
51
95
|
/**
|
|
52
|
-
*
|
|
96
|
+
* AES-256-GCM encrypt UTF-8 text with a fresh IV. The tag is appended by
|
|
97
|
+
* WebCrypto. `aad` is used for field-level values only; whole labels have none.
|
|
53
98
|
*/
|
|
54
|
-
function
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
crypto.
|
|
58
|
-
return {
|
|
99
|
+
async function seal(cryptoKey, text, aad) {
|
|
100
|
+
const iv = randomBytes(IV_LENGTH);
|
|
101
|
+
const params = aad === undefined ? { name: 'AES-GCM', iv } : { name: 'AES-GCM', iv, additionalData: aad };
|
|
102
|
+
const ciphertext = await crypto.subtle.encrypt(params, cryptoKey, new TextEncoder().encode(text));
|
|
103
|
+
return { payload: base64UrlEncode(ciphertext), iv: base64UrlEncode(iv) };
|
|
104
|
+
}
|
|
105
|
+
/** Split `wemush:{suffix}` into its suffix, enforcing a non-empty suffix. */
|
|
106
|
+
function idSuffix(id) {
|
|
107
|
+
if (typeof id !== 'string' || !id.startsWith('wemush:') || id.length === 'wemush:'.length) {
|
|
108
|
+
encryptionError(`Specimen id must be 'wemush:' followed by a non-empty suffix, got '${String(id)}'`);
|
|
109
|
+
}
|
|
110
|
+
return id.slice('wemush:'.length);
|
|
59
111
|
}
|
|
60
112
|
// =============================================================================
|
|
61
|
-
//
|
|
113
|
+
// URL SERIALIZATION
|
|
62
114
|
// =============================================================================
|
|
63
115
|
/**
|
|
64
|
-
*
|
|
116
|
+
* Build the encrypted-format URL for an encrypted specimen.
|
|
65
117
|
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
118
|
+
* Enforces the generator rules, so a hand-built object cannot produce a
|
|
119
|
+
* non-conformant label:
|
|
120
|
+
* - `payload` and `iv` are canonical unpadded base64url, the IV is 12 bytes,
|
|
121
|
+
* and the payload is at least the 16-byte GCM tag
|
|
122
|
+
* - `kdf` is present: `pbkdf2` needs 100,000 to 2^32-1 iterations and a salt
|
|
123
|
+
* of at least 16 bytes that is not the legacy library salt (compared as
|
|
124
|
+
* bytes); `raw` must not carry `salt` or `iterations`
|
|
69
125
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* import { encryptSpecimen } from '@wemush/wols/crypto';
|
|
126
|
+
* Labels with more than 10,000,000 iterations are valid but exceed the
|
|
127
|
+
* decoders' default `maxIterations`, so readers must raise it.
|
|
73
128
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* // Returns: { encrypted: true, payload: "...", iv: "...", algorithm: "AES-256-GCM" }
|
|
78
|
-
* ```
|
|
129
|
+
* @throws WolsEncryptionError when the object would produce a non-conformant
|
|
130
|
+
* label (including legacy payloads, which are never generated)
|
|
131
|
+
* @since 1.3.0
|
|
79
132
|
*/
|
|
133
|
+
export function toEncryptedUrl(encrypted) {
|
|
134
|
+
const suffix = idSuffix(encrypted.id);
|
|
135
|
+
if (encrypted.kdf !== 'pbkdf2' && encrypted.kdf !== 'raw') {
|
|
136
|
+
encryptionError('Encrypted URLs require kdf=pbkdf2 or kdf=raw; legacy payloads are not generated');
|
|
137
|
+
}
|
|
138
|
+
if (canonicalBytes('payload', encrypted.payload).length < GCM_TAG_LENGTH) {
|
|
139
|
+
encryptionError(`payload must include the ${GCM_TAG_LENGTH}-byte GCM tag`);
|
|
140
|
+
}
|
|
141
|
+
if (canonicalBytes('iv', encrypted.iv).length !== IV_LENGTH) {
|
|
142
|
+
encryptionError(`iv must be ${IV_LENGTH} bytes`);
|
|
143
|
+
}
|
|
144
|
+
const params = [`e=${encrypted.payload}`, `iv=${encrypted.iv}`, `kdf=${encrypted.kdf}`];
|
|
145
|
+
if (encrypted.kdf === 'pbkdf2') {
|
|
146
|
+
const { salt } = encrypted;
|
|
147
|
+
if (!salt || encrypted.iterations === undefined) {
|
|
148
|
+
encryptionError('kdf=pbkdf2 requires salt and iterations');
|
|
149
|
+
}
|
|
150
|
+
const iterations = checkGenerateIterations(encrypted.iterations);
|
|
151
|
+
const saltBytes = canonicalBytes('salt', salt);
|
|
152
|
+
if (saltBytes.length < SALT_LENGTH) {
|
|
153
|
+
encryptionError(`salt must be at least ${SALT_LENGTH} bytes, got ${saltBytes.length}`);
|
|
154
|
+
}
|
|
155
|
+
if (bytesEqual(saltBytes, LEGACY_PBKDF2_SALT)) {
|
|
156
|
+
encryptionError('The fixed pre-1.3.0 library salt must not be used to generate labels');
|
|
157
|
+
}
|
|
158
|
+
params.push(`salt=${salt}`, `i=${iterations}`);
|
|
159
|
+
}
|
|
160
|
+
else if (encrypted.salt !== undefined || encrypted.iterations !== undefined) {
|
|
161
|
+
encryptionError('kdf=raw labels must not carry salt or iterations');
|
|
162
|
+
}
|
|
163
|
+
if (encrypted.signature !== undefined) {
|
|
164
|
+
params.push(`sig=${encodeURIComponent(encrypted.signature)}`);
|
|
165
|
+
}
|
|
166
|
+
return `${ENCRYPTED_URL_PREFIX}${encodeURIComponent(suffix)}?${params.join('&')}`;
|
|
167
|
+
}
|
|
80
168
|
export async function encryptSpecimen(specimen, options) {
|
|
81
|
-
|
|
82
|
-
|
|
169
|
+
assertWebCrypto();
|
|
170
|
+
const { fields } = options;
|
|
83
171
|
if (fields !== undefined && fields.length > 0) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
172
|
+
// Deprecated 1.2.x path: same behavior as encryptFields(). A call that
|
|
173
|
+
// passes `fields` literally is typed FieldEncryptedSpecimen by the first
|
|
174
|
+
// overload; options typed as plain EncryptionOptions keep the 1.2.x
|
|
175
|
+
// signature for source compatibility, which is why the option is deprecated.
|
|
176
|
+
const fieldOptions = {
|
|
177
|
+
key: options.key,
|
|
178
|
+
fields: fields,
|
|
179
|
+
};
|
|
180
|
+
if (options.iterations !== undefined)
|
|
181
|
+
fieldOptions.iterations = options.iterations;
|
|
182
|
+
return encryptFields(specimen, fieldOptions);
|
|
183
|
+
}
|
|
184
|
+
const id = specimen.id;
|
|
185
|
+
idSuffix(id);
|
|
186
|
+
const resolved = await resolveEncryptionKey(options);
|
|
187
|
+
const sealed = await seal(resolved.cryptoKey, serializeSpecimen(specimen));
|
|
188
|
+
const result = {
|
|
97
189
|
encrypted: true,
|
|
98
|
-
payload: toBase64Url(ciphertext),
|
|
99
|
-
iv: toBase64Url(ivBuffer),
|
|
100
190
|
algorithm: 'AES-256-GCM',
|
|
191
|
+
payload: sealed.payload,
|
|
192
|
+
iv: sealed.iv,
|
|
193
|
+
kdf: resolved.kdf,
|
|
194
|
+
id,
|
|
101
195
|
};
|
|
196
|
+
if (resolved.salt !== undefined)
|
|
197
|
+
result.salt = resolved.salt;
|
|
198
|
+
if (resolved.iterations !== undefined)
|
|
199
|
+
result.iterations = resolved.iterations;
|
|
200
|
+
result.url = toEncryptedUrl(result);
|
|
201
|
+
return result;
|
|
102
202
|
}
|
|
103
203
|
/**
|
|
104
|
-
*
|
|
204
|
+
* Field-level encryption (WOLS v1.3.0): replace the value of each named field
|
|
205
|
+
* with an {@link EncryptedField} and leave the rest of the specimen in cleartext.
|
|
206
|
+
*
|
|
207
|
+
* One key (and, for passphrases, one random salt) per call; a fresh IV per field.
|
|
208
|
+
* Each value is bound to its label and field with AES-GCM additional data:
|
|
209
|
+
* the UTF-8 of `"{id}\n{field}"` (WOLS 1.3.0). A value moved to another field
|
|
210
|
+
* or copied into another label fails authentication. Restore with `decryptFields()`.
|
|
211
|
+
*
|
|
212
|
+
* The identifying fields (`@context`, `@type`, `id`, `version`, `type`,
|
|
213
|
+
* `species`) can't be encrypted.
|
|
214
|
+
*
|
|
215
|
+
* @param specimen - The specimen to partially encrypt
|
|
216
|
+
* @param options - `key`, `fields` (each must be present on the specimen), optional `iterations`
|
|
217
|
+
* @throws WolsEncryptionError when `fields` is empty, names a field the specimen
|
|
218
|
+
* does not have, or names a field twice; or for an unusable key
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```typescript
|
|
222
|
+
* const partial = await encryptFields(specimen, { key: passphrase, fields: ['strain'] });
|
|
223
|
+
* partial.species; // still cleartext
|
|
224
|
+
* partial.strain; // { encrypted: true, algorithm: 'AES-256-GCM', payload, iv, kdf: 'pbkdf2', salt, iterations }
|
|
225
|
+
* ```
|
|
105
226
|
*
|
|
106
|
-
*
|
|
227
|
+
* @since 1.3.0
|
|
107
228
|
*/
|
|
108
|
-
async function
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
//
|
|
229
|
+
export async function encryptFields(specimen, options) {
|
|
230
|
+
assertWebCrypto();
|
|
231
|
+
const { fields } = options;
|
|
232
|
+
if (!Array.isArray(fields) || fields.length === 0) {
|
|
233
|
+
encryptionError('encryptFields requires a non-empty fields array');
|
|
234
|
+
}
|
|
235
|
+
// The AAD binds every value to the label's full id, so the id must be usable.
|
|
236
|
+
idSuffix(specimen.id);
|
|
237
|
+
const seen = new Set();
|
|
115
238
|
for (const field of fields) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const plaintext = JSON.stringify(value);
|
|
119
|
-
const plaintextBytes = new TextEncoder().encode(plaintext);
|
|
120
|
-
const { iv, ivBuffer } = generateIV();
|
|
121
|
-
const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, cryptoKey, plaintextBytes);
|
|
122
|
-
result[field] = {
|
|
123
|
-
encrypted: true,
|
|
124
|
-
payload: toBase64Url(ciphertext),
|
|
125
|
-
iv: toBase64Url(ivBuffer),
|
|
126
|
-
algorithm: 'AES-256-GCM',
|
|
127
|
-
};
|
|
239
|
+
if (typeof field === 'string' && STRUCTURAL_FIELDS.has(field)) {
|
|
240
|
+
encryptionError(`Cannot encrypt field '${field}': it identifies the label and must stay in cleartext`);
|
|
128
241
|
}
|
|
242
|
+
if (typeof field !== 'string' || !Object.hasOwn(specimen, field)) {
|
|
243
|
+
encryptionError(`Cannot encrypt field '${String(field)}': the specimen has no such field. ` +
|
|
244
|
+
'Refusing to leave it unprotected.');
|
|
245
|
+
}
|
|
246
|
+
if (specimen[field] === undefined) {
|
|
247
|
+
encryptionError(`Cannot encrypt field '${field}': its value is undefined`);
|
|
248
|
+
}
|
|
249
|
+
if (seen.has(field)) {
|
|
250
|
+
encryptionError(`Field '${field}' is listed more than once`);
|
|
251
|
+
}
|
|
252
|
+
seen.add(field);
|
|
253
|
+
}
|
|
254
|
+
const keyOptions = { key: options.key };
|
|
255
|
+
if (options.iterations !== undefined)
|
|
256
|
+
keyOptions.iterations = options.iterations;
|
|
257
|
+
const resolved = await resolveEncryptionKey(keyOptions);
|
|
258
|
+
const result = { ...specimen };
|
|
259
|
+
for (const field of fields) {
|
|
260
|
+
// Fresh IV per field; AAD = "{id}\n{field}" (WOLS 1.3.0).
|
|
261
|
+
const sealed = await seal(resolved.cryptoKey, JSON.stringify(result[field]), fieldAad(specimen.id, field));
|
|
262
|
+
const encryptedField = {
|
|
263
|
+
encrypted: true,
|
|
264
|
+
algorithm: 'AES-256-GCM',
|
|
265
|
+
payload: sealed.payload,
|
|
266
|
+
iv: sealed.iv,
|
|
267
|
+
kdf: resolved.kdf,
|
|
268
|
+
};
|
|
269
|
+
if (resolved.salt !== undefined)
|
|
270
|
+
encryptedField.salt = resolved.salt;
|
|
271
|
+
if (resolved.iterations !== undefined)
|
|
272
|
+
encryptedField.iterations = resolved.iterations;
|
|
273
|
+
result[field] = encryptedField;
|
|
129
274
|
}
|
|
130
|
-
// Cast to EncryptedSpecimen for return type consistency
|
|
131
|
-
// In partial mode, this is actually a hybrid object
|
|
132
275
|
return result;
|
|
133
276
|
}
|
|
277
|
+
// =============================================================================
|
|
278
|
+
// TYPE GUARDS
|
|
279
|
+
// =============================================================================
|
|
280
|
+
function hasCipherShape(value) {
|
|
281
|
+
return (typeof value === 'object' &&
|
|
282
|
+
value !== null &&
|
|
283
|
+
value['encrypted'] === true &&
|
|
284
|
+
typeof value['payload'] === 'string' &&
|
|
285
|
+
typeof value['iv'] === 'string');
|
|
286
|
+
}
|
|
134
287
|
/**
|
|
135
|
-
*
|
|
288
|
+
* Whether a value is a field-level {@link EncryptedField}: an encrypted value
|
|
289
|
+
* with a `kdf` and no specimen `id` or `url`.
|
|
290
|
+
*
|
|
291
|
+
* The 1.3.0 shapes are told apart structurally: whole-label objects produced
|
|
292
|
+
* by `encryptSpecimen` and `parseEncryptedUrl` always carry `id`, and field
|
|
293
|
+
* values never do. Legacy (pre-1.3.0) values have no `kdf` and are reported
|
|
294
|
+
* as {@link isEncryptedSpecimen}, whether they were whole labels or fields.
|
|
295
|
+
* `decryptFields` handles legacy field values regardless (with `allowLegacy`).
|
|
296
|
+
*
|
|
297
|
+
* @since 1.3.0
|
|
298
|
+
*/
|
|
299
|
+
export function isEncryptedField(value) {
|
|
300
|
+
return (hasCipherShape(value) &&
|
|
301
|
+
(value['kdf'] === 'pbkdf2' || value['kdf'] === 'raw') &&
|
|
302
|
+
value['id'] === undefined &&
|
|
303
|
+
value['url'] === undefined);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Whether a value is a whole-label {@link EncryptedSpecimen} (v1.3.0 or legacy).
|
|
307
|
+
*
|
|
308
|
+
* @since 1.3.0
|
|
309
|
+
*/
|
|
310
|
+
export function isEncryptedSpecimen(value) {
|
|
311
|
+
return hasCipherShape(value) && !isEncryptedField(value);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Whether a value carries the `encrypted: true` marker: either a whole-label
|
|
315
|
+
* {@link EncryptedSpecimen} or a field-level {@link EncryptedField}. Use
|
|
316
|
+
* {@link isEncryptedSpecimen} or {@link isEncryptedField} to tell them apart.
|
|
317
|
+
*
|
|
318
|
+
* @since 1.3.0 Narrows to `EncryptedSpecimen | EncryptedField`
|
|
136
319
|
*/
|
|
137
320
|
export function isEncrypted(value) {
|
|
138
|
-
if (value === null || value === undefined) {
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
if (typeof value !== 'object') {
|
|
321
|
+
if (value === null || value === undefined || typeof value !== 'object') {
|
|
142
322
|
return false;
|
|
143
323
|
}
|
|
144
|
-
|
|
145
|
-
return obj['encrypted'] === true;
|
|
324
|
+
return value['encrypted'] === true;
|
|
146
325
|
}
|
|
147
326
|
//# sourceMappingURL=encrypt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../../src/crypto/encrypt.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../../src/crypto/encrypt.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/crypto/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WOLS Crypto Module
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* AES-256-GCM encryption and decryption for specimens in the WOLS v1.3.0
|
|
5
|
+
* encrypted format (`wemush://v1/encrypted/{id}?e=&iv=&kdf=...`).
|
|
5
6
|
*
|
|
6
7
|
* @module crypto
|
|
7
8
|
*/
|
|
8
|
-
export { encryptSpecimen, isEncrypted } from './encrypt.js';
|
|
9
|
-
export { decryptSpecimen } from './decrypt.js';
|
|
9
|
+
export { encryptSpecimen, encryptFields, isEncrypted, isEncryptedSpecimen, isEncryptedField, toEncryptedUrl, } from './encrypt.js';
|
|
10
|
+
export { decryptSpecimen, decryptPlaintext, decryptField, decryptFields, parseEncryptedUrl, } from './decrypt.js';
|
|
11
|
+
export { base64UrlEncode, base64UrlDecode, derivePassphraseKey } from './shared.js';
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,iBAAiB,GAElB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|