@tgoliveira/vault-core 0.1.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.
Files changed (138) hide show
  1. package/API_REFERENCE.md +36 -0
  2. package/ARCHITECTURE.md +32 -0
  3. package/LICENSE +21 -0
  4. package/MIGRATION_FROM_LIQSENSE.md +42 -0
  5. package/PASSKEY_PRF_ENVELOPES.md +9 -0
  6. package/PASSWORD_ENVELOPES.md +7 -0
  7. package/README.md +78 -0
  8. package/RECOVERY_PHRASE.md +9 -0
  9. package/SECURITY.md +31 -0
  10. package/dist/browser.d.ts +11 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +71 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/constants.d.ts +5 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +5 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/crypto/aad.d.ts +4 -0
  19. package/dist/crypto/aad.d.ts.map +1 -0
  20. package/dist/crypto/aad.js +23 -0
  21. package/dist/crypto/aad.js.map +1 -0
  22. package/dist/crypto/aes-gcm.d.ts +9 -0
  23. package/dist/crypto/aes-gcm.d.ts.map +1 -0
  24. package/dist/crypto/aes-gcm.js +58 -0
  25. package/dist/crypto/aes-gcm.js.map +1 -0
  26. package/dist/crypto/encoding.d.ts +6 -0
  27. package/dist/crypto/encoding.d.ts.map +1 -0
  28. package/dist/crypto/encoding.js +27 -0
  29. package/dist/crypto/encoding.js.map +1 -0
  30. package/dist/crypto/random.d.ts +2 -0
  31. package/dist/crypto/random.d.ts.map +1 -0
  32. package/dist/crypto/random.js +4 -0
  33. package/dist/crypto/random.js.map +1 -0
  34. package/dist/crypto/serialization.d.ts +3 -0
  35. package/dist/crypto/serialization.d.ts.map +1 -0
  36. package/dist/crypto/serialization.js +7 -0
  37. package/dist/crypto/serialization.js.map +1 -0
  38. package/dist/envelopes/passkey-prf.d.ts +21 -0
  39. package/dist/envelopes/passkey-prf.d.ts.map +1 -0
  40. package/dist/envelopes/passkey-prf.js +78 -0
  41. package/dist/envelopes/passkey-prf.js.map +1 -0
  42. package/dist/envelopes/password.d.ts +20 -0
  43. package/dist/envelopes/password.d.ts.map +1 -0
  44. package/dist/envelopes/password.js +41 -0
  45. package/dist/envelopes/password.js.map +1 -0
  46. package/dist/envelopes/recovery.d.ts +46 -0
  47. package/dist/envelopes/recovery.d.ts.map +1 -0
  48. package/dist/envelopes/recovery.js +167 -0
  49. package/dist/envelopes/recovery.js.map +1 -0
  50. package/dist/errors/vault-errors.d.ts +20 -0
  51. package/dist/errors/vault-errors.d.ts.map +1 -0
  52. package/dist/errors/vault-errors.js +37 -0
  53. package/dist/errors/vault-errors.js.map +1 -0
  54. package/dist/index.d.ts +21 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +20 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/kdf/argon2id.d.ts +24 -0
  59. package/dist/kdf/argon2id.d.ts.map +1 -0
  60. package/dist/kdf/argon2id.js +57 -0
  61. package/dist/kdf/argon2id.js.map +1 -0
  62. package/dist/kdf/params.d.ts +9 -0
  63. package/dist/kdf/params.d.ts.map +1 -0
  64. package/dist/kdf/params.js +8 -0
  65. package/dist/kdf/params.js.map +1 -0
  66. package/dist/keys/user-vault-key.d.ts +7 -0
  67. package/dist/keys/user-vault-key.d.ts.map +1 -0
  68. package/dist/keys/user-vault-key.js +15 -0
  69. package/dist/keys/user-vault-key.js.map +1 -0
  70. package/dist/payload/encrypted-payload.d.ts +5 -0
  71. package/dist/payload/encrypted-payload.d.ts.map +1 -0
  72. package/dist/payload/encrypted-payload.js +14 -0
  73. package/dist/payload/encrypted-payload.js.map +1 -0
  74. package/dist/profile.d.ts +21 -0
  75. package/dist/profile.d.ts.map +1 -0
  76. package/dist/profile.js +9 -0
  77. package/dist/profile.js.map +1 -0
  78. package/dist/react/index.d.ts +6 -0
  79. package/dist/react/index.d.ts.map +1 -0
  80. package/dist/react/index.js +6 -0
  81. package/dist/react/index.js.map +1 -0
  82. package/dist/react/session/use-vault-session.d.ts +11 -0
  83. package/dist/react/session/use-vault-session.d.ts.map +1 -0
  84. package/dist/react/session/use-vault-session.js +29 -0
  85. package/dist/react/session/use-vault-session.js.map +1 -0
  86. package/dist/react/session/use-vault-unlocked.d.ts +3 -0
  87. package/dist/react/session/use-vault-unlocked.d.ts.map +1 -0
  88. package/dist/react/session/use-vault-unlocked.js +9 -0
  89. package/dist/react/session/use-vault-unlocked.js.map +1 -0
  90. package/dist/react/session/vault-session-provider.d.ts +9 -0
  91. package/dist/react/session/vault-session-provider.d.ts.map +1 -0
  92. package/dist/react/session/vault-session-provider.js +16 -0
  93. package/dist/react/session/vault-session-provider.js.map +1 -0
  94. package/dist/react/status/resolve-vault-client-status.d.ts +8 -0
  95. package/dist/react/status/resolve-vault-client-status.d.ts.map +1 -0
  96. package/dist/react/status/resolve-vault-client-status.js +13 -0
  97. package/dist/react/status/resolve-vault-client-status.js.map +1 -0
  98. package/dist/react/status/use-vault-client-status.d.ts +3 -0
  99. package/dist/react/status/use-vault-client-status.d.ts.map +1 -0
  100. package/dist/react/status/use-vault-client-status.js +8 -0
  101. package/dist/react/status/use-vault-client-status.js.map +1 -0
  102. package/dist/recovery/kit.d.ts +16 -0
  103. package/dist/recovery/kit.d.ts.map +1 -0
  104. package/dist/recovery/kit.js +33 -0
  105. package/dist/recovery/kit.js.map +1 -0
  106. package/dist/session/auto-lock.d.ts +18 -0
  107. package/dist/session/auto-lock.d.ts.map +1 -0
  108. package/dist/session/auto-lock.js +86 -0
  109. package/dist/session/auto-lock.js.map +1 -0
  110. package/dist/session/memory-session.d.ts +8 -0
  111. package/dist/session/memory-session.d.ts.map +1 -0
  112. package/dist/session/memory-session.js +20 -0
  113. package/dist/session/memory-session.js.map +1 -0
  114. package/dist/testing/fixtures/liqsense-compat.d.ts +32 -0
  115. package/dist/testing/fixtures/liqsense-compat.d.ts.map +1 -0
  116. package/dist/testing/fixtures/liqsense-compat.js +31 -0
  117. package/dist/testing/fixtures/liqsense-compat.js.map +1 -0
  118. package/dist/testing/no-plaintext.d.ts +2 -0
  119. package/dist/testing/no-plaintext.d.ts.map +1 -0
  120. package/dist/testing/no-plaintext.js +2 -0
  121. package/dist/testing/no-plaintext.js.map +1 -0
  122. package/dist/testing.d.ts +2 -0
  123. package/dist/testing.d.ts.map +1 -0
  124. package/dist/testing.js +2 -0
  125. package/dist/testing.js.map +1 -0
  126. package/dist/validation/aad-assert.d.ts +5 -0
  127. package/dist/validation/aad-assert.d.ts.map +1 -0
  128. package/dist/validation/aad-assert.js +29 -0
  129. package/dist/validation/aad-assert.js.map +1 -0
  130. package/dist/validation/plaintext-reject.d.ts +23 -0
  131. package/dist/validation/plaintext-reject.d.ts.map +1 -0
  132. package/dist/validation/plaintext-reject.js +75 -0
  133. package/dist/validation/plaintext-reject.js.map +1 -0
  134. package/dist/validation/schemas.d.ts +203 -0
  135. package/dist/validation/schemas.d.ts.map +1 -0
  136. package/dist/validation/schemas.js +39 -0
  137. package/dist/validation/schemas.js.map +1 -0
  138. package/package.json +100 -0
@@ -0,0 +1,2 @@
1
+ export * from "../validation/plaintext-reject.js";
2
+ //# sourceMappingURL=no-plaintext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-plaintext.js","sourceRoot":"","sources":["../../src/testing/no-plaintext.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./validation/plaintext-reject.js";
2
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./validation/plaintext-reject.js";
2
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { EncryptedVaultPayload } from "./schemas.js";
2
+ import type { VaultCryptoProfile } from "../profile.js";
3
+ export declare function assertVaultKeyAad(userId: string, payload: EncryptedVaultPayload, profile: VaultCryptoProfile): void;
4
+ export declare function assertVaultPayloadAad(userId: string, payload: EncryptedVaultPayload, profile: VaultCryptoProfile): void;
5
+ //# sourceMappingURL=aad-assert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aad-assert.d.ts","sourceRoot":"","sources":["../../src/validation/aad-assert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAaN;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAaN"}
@@ -0,0 +1,29 @@
1
+ export function assertVaultKeyAad(userId, payload, profile) {
2
+ if (payload.aad.userId !== userId) {
3
+ throw new Error("Vault key AAD userId mismatch");
4
+ }
5
+ if (payload.aad.resourceId !== userId) {
6
+ throw new Error("Vault key AAD resourceId mismatch");
7
+ }
8
+ if (payload.aad.field !== "vault_key") {
9
+ throw new Error("Vault key AAD field mismatch");
10
+ }
11
+ if (payload.aad.context && payload.aad.context !== profile.aadContextEnvelope) {
12
+ throw new Error("Vault key AAD context mismatch");
13
+ }
14
+ }
15
+ export function assertVaultPayloadAad(userId, payload, profile) {
16
+ if (payload.aad.userId !== userId) {
17
+ throw new Error("Vault payload AAD userId mismatch");
18
+ }
19
+ if (payload.aad.resourceId !== userId) {
20
+ throw new Error("Vault payload AAD resourceId mismatch");
21
+ }
22
+ if (payload.aad.field !== "vault_payload") {
23
+ throw new Error("Vault payload AAD field mismatch");
24
+ }
25
+ if (payload.aad.context && payload.aad.context !== profile.aadContextVault) {
26
+ throw new Error("Vault payload AAD context mismatch");
27
+ }
28
+ }
29
+ //# sourceMappingURL=aad-assert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aad-assert.js","sourceRoot":"","sources":["../../src/validation/aad-assert.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,OAA8B,EAC9B,OAA2B;IAE3B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,OAA8B,EAC9B,OAA2B;IAE3B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ export declare const PLAINTEXT_FORBIDDEN_VAULT_FIELDS: readonly ["vaultPassword", "confirmVaultPassword", "password", "recoveryPhrase", "recoveryWords", "userVaultKey", "prfOutput", "decryptedPayload", "displayName", "walletLabel", "strategyNote", "subscriptionToken", "title", "body", "content", "message"];
2
+ export type PlaintextForbiddenField = (typeof PLAINTEXT_FORBIDDEN_VAULT_FIELDS)[number];
3
+ export declare function rejectVaultPlaintextFields(body: Record<string, unknown>): string | null;
4
+ export declare function assertNoVaultPlaintextFields(body: Record<string, unknown>): void;
5
+ export declare function validateNoPlaintextLeak(data: unknown): {
6
+ ok: boolean;
7
+ found: string[];
8
+ };
9
+ export declare function scanForSentinels(data: unknown, sentinels?: readonly string[]): string[];
10
+ export declare function containsSentinel(value: string, sentinels?: readonly string[]): boolean;
11
+ export declare const SENTINEL_VAULT_PASSWORD = "SENTINEL_VAULT_PASSWORD_DO_NOT_STORE";
12
+ export declare const SENTINEL_RECOVERY_PHRASE = "SENTINEL_RECOVERY_PHRASE_DO_NOT_STORE";
13
+ export declare const SENTINEL_12_WORD_RECOVERY_PHRASE = "SENTINEL_12_WORD_RECOVERY_PHRASE_DO_NOT_STORE";
14
+ export declare const SENTINEL_24_WORD_RECOVERY_PHRASE = "SENTINEL_24_WORD_RECOVERY_PHRASE_DO_NOT_STORE";
15
+ export declare const SENTINEL_PRIVATE_LABEL = "SENTINEL_PRIVATE_LABEL_DO_NOT_STORE";
16
+ export declare const SENTINEL_STRATEGY_NOTE = "SENTINEL_STRATEGY_NOTE_DO_NOT_STORE";
17
+ export declare const SENTINEL_SUBSCRIPTION_TOKEN = "SENTINEL_SUBSCRIPTION_TOKEN_DO_NOT_STORE";
18
+ export declare const SENTINEL_MANAGEMENT_TOKEN = "SENTINEL_MANAGEMENT_TOKEN_DO_NOT_STORE";
19
+ export declare const SENTINEL_PRIVATE_NOTE = "SENTINEL_PRIVATE_NOTE_DO_NOT_STORE";
20
+ export declare const SENTINEL_USER_VAULT_KEY = "SENTINEL_USER_VAULT_KEY_DO_NOT_STORE";
21
+ export declare const SENTINEL_PRF_OUTPUT = "SENTINEL_PRF_OUTPUT_DO_NOT_STORE";
22
+ export declare const ALL_SENTINELS: readonly ["SENTINEL_VAULT_PASSWORD_DO_NOT_STORE", "SENTINEL_RECOVERY_PHRASE_DO_NOT_STORE", "SENTINEL_12_WORD_RECOVERY_PHRASE_DO_NOT_STORE", "SENTINEL_24_WORD_RECOVERY_PHRASE_DO_NOT_STORE", "SENTINEL_PRIVATE_LABEL_DO_NOT_STORE", "SENTINEL_STRATEGY_NOTE_DO_NOT_STORE", "SENTINEL_SUBSCRIPTION_TOKEN_DO_NOT_STORE", "SENTINEL_MANAGEMENT_TOKEN_DO_NOT_STORE", "SENTINEL_PRIVATE_NOTE_DO_NOT_STORE", "SENTINEL_USER_VAULT_KEY_DO_NOT_STORE", "SENTINEL_PRF_OUTPUT_DO_NOT_STORE"];
23
+ //# sourceMappingURL=plaintext-reject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plaintext-reject.d.ts","sourceRoot":"","sources":["../../src/validation/plaintext-reject.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gCAAgC,8PAiBnC,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAC;AAExF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAOvF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKhF;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAGvF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,GAAE,SAAS,MAAM,EAAkB,GAAG,MAAM,EAAE,CAWtG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,MAAM,EAAkB,GAAG,OAAO,CAErG;AAED,eAAO,MAAM,uBAAuB,yCAAyC,CAAC;AAC9E,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAChF,eAAO,MAAM,gCAAgC,kDACI,CAAC;AAClD,eAAO,MAAM,gCAAgC,kDACI,CAAC;AAClD,eAAO,MAAM,sBAAsB,wCAAwC,CAAC;AAC5E,eAAO,MAAM,sBAAsB,wCAAwC,CAAC;AAC5E,eAAO,MAAM,2BAA2B,6CAA6C,CAAC;AACtF,eAAO,MAAM,yBAAyB,2CAA2C,CAAC;AAClF,eAAO,MAAM,qBAAqB,uCAAuC,CAAC;AAC1E,eAAO,MAAM,uBAAuB,yCAAyC,CAAC;AAC9E,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAEtE,eAAO,MAAM,aAAa,odAYhB,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { VaultPlaintextRejectionError } from "../errors/vault-errors.js";
2
+ export const PLAINTEXT_FORBIDDEN_VAULT_FIELDS = [
3
+ "vaultPassword",
4
+ "confirmVaultPassword",
5
+ "password",
6
+ "recoveryPhrase",
7
+ "recoveryWords",
8
+ "userVaultKey",
9
+ "prfOutput",
10
+ "decryptedPayload",
11
+ "displayName",
12
+ "walletLabel",
13
+ "strategyNote",
14
+ "subscriptionToken",
15
+ "title",
16
+ "body",
17
+ "content",
18
+ "message",
19
+ ];
20
+ export function rejectVaultPlaintextFields(body) {
21
+ for (const field of PLAINTEXT_FORBIDDEN_VAULT_FIELDS) {
22
+ if (field in body && body[field] !== undefined) {
23
+ return `Plaintext field '${field}' is not allowed`;
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ export function assertNoVaultPlaintextFields(body) {
29
+ const error = rejectVaultPlaintextFields(body);
30
+ if (error) {
31
+ throw new VaultPlaintextRejectionError(error);
32
+ }
33
+ }
34
+ export function validateNoPlaintextLeak(data) {
35
+ const found = scanForSentinels(data);
36
+ return { ok: found.length === 0, found };
37
+ }
38
+ export function scanForSentinels(data, sentinels = ALL_SENTINELS) {
39
+ const found = [];
40
+ const json = JSON.stringify(data);
41
+ for (const sentinel of sentinels) {
42
+ if (json.includes(sentinel)) {
43
+ found.push(sentinel);
44
+ }
45
+ }
46
+ return found;
47
+ }
48
+ export function containsSentinel(value, sentinels = ALL_SENTINELS) {
49
+ return sentinels.some((sentinel) => value.includes(sentinel));
50
+ }
51
+ export const SENTINEL_VAULT_PASSWORD = "SENTINEL_VAULT_PASSWORD_DO_NOT_STORE";
52
+ export const SENTINEL_RECOVERY_PHRASE = "SENTINEL_RECOVERY_PHRASE_DO_NOT_STORE";
53
+ export const SENTINEL_12_WORD_RECOVERY_PHRASE = "SENTINEL_12_WORD_RECOVERY_PHRASE_DO_NOT_STORE";
54
+ export const SENTINEL_24_WORD_RECOVERY_PHRASE = "SENTINEL_24_WORD_RECOVERY_PHRASE_DO_NOT_STORE";
55
+ export const SENTINEL_PRIVATE_LABEL = "SENTINEL_PRIVATE_LABEL_DO_NOT_STORE";
56
+ export const SENTINEL_STRATEGY_NOTE = "SENTINEL_STRATEGY_NOTE_DO_NOT_STORE";
57
+ export const SENTINEL_SUBSCRIPTION_TOKEN = "SENTINEL_SUBSCRIPTION_TOKEN_DO_NOT_STORE";
58
+ export const SENTINEL_MANAGEMENT_TOKEN = "SENTINEL_MANAGEMENT_TOKEN_DO_NOT_STORE";
59
+ export const SENTINEL_PRIVATE_NOTE = "SENTINEL_PRIVATE_NOTE_DO_NOT_STORE";
60
+ export const SENTINEL_USER_VAULT_KEY = "SENTINEL_USER_VAULT_KEY_DO_NOT_STORE";
61
+ export const SENTINEL_PRF_OUTPUT = "SENTINEL_PRF_OUTPUT_DO_NOT_STORE";
62
+ export const ALL_SENTINELS = [
63
+ SENTINEL_VAULT_PASSWORD,
64
+ SENTINEL_RECOVERY_PHRASE,
65
+ SENTINEL_12_WORD_RECOVERY_PHRASE,
66
+ SENTINEL_24_WORD_RECOVERY_PHRASE,
67
+ SENTINEL_PRIVATE_LABEL,
68
+ SENTINEL_STRATEGY_NOTE,
69
+ SENTINEL_SUBSCRIPTION_TOKEN,
70
+ SENTINEL_MANAGEMENT_TOKEN,
71
+ SENTINEL_PRIVATE_NOTE,
72
+ SENTINEL_USER_VAULT_KEY,
73
+ SENTINEL_PRF_OUTPUT,
74
+ ];
75
+ //# sourceMappingURL=plaintext-reject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plaintext-reject.js","sourceRoot":"","sources":["../../src/validation/plaintext-reject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAEzE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,eAAe;IACf,sBAAsB;IACtB,UAAU;IACV,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,WAAW;IACX,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,cAAc;IACd,mBAAmB;IACnB,OAAO;IACP,MAAM;IACN,SAAS;IACT,SAAS;CACD,CAAC;AAIX,MAAM,UAAU,0BAA0B,CAAC,IAA6B;IACtE,KAAK,MAAM,KAAK,IAAI,gCAAgC,EAAE,CAAC;QACrD,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/C,OAAO,oBAAoB,KAAK,kBAAkB,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAA6B;IACxE,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAa,EAAE,YAA+B,aAAa;IAC1F,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,YAA+B,aAAa;IAC1F,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,sCAAsC,CAAC;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,uCAAuC,CAAC;AAChF,MAAM,CAAC,MAAM,gCAAgC,GAC3C,+CAA+C,CAAC;AAClD,MAAM,CAAC,MAAM,gCAAgC,GAC3C,+CAA+C,CAAC;AAClD,MAAM,CAAC,MAAM,sBAAsB,GAAG,qCAAqC,CAAC;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,qCAAqC,CAAC;AAC5E,MAAM,CAAC,MAAM,2BAA2B,GAAG,0CAA0C,CAAC;AACtF,MAAM,CAAC,MAAM,yBAAyB,GAAG,wCAAwC,CAAC;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAAG,sCAAsC,CAAC;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAEtE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,uBAAuB;IACvB,wBAAwB;IACxB,gCAAgC;IAChC,gCAAgC;IAChC,sBAAsB;IACtB,sBAAsB;IACtB,2BAA2B;IAC3B,yBAAyB;IACzB,qBAAqB;IACrB,uBAAuB;IACvB,mBAAmB;CACX,CAAC"}
@@ -0,0 +1,203 @@
1
+ import { z } from "zod";
2
+ export declare const encryptedPayloadSchema: z.ZodObject<{
3
+ version: z.ZodLiteral<"enc-v1">;
4
+ alg: z.ZodLiteral<"AES-GCM">;
5
+ iv: z.ZodString;
6
+ ciphertext: z.ZodString;
7
+ aad: z.ZodObject<{
8
+ userId: z.ZodString;
9
+ resourceId: z.ZodString;
10
+ field: z.ZodEnum<{
11
+ vault_key: "vault_key";
12
+ vault_payload: "vault_payload";
13
+ vault_index: "vault_index";
14
+ }>;
15
+ context: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strip>;
17
+ }, z.core.$strip>;
18
+ export type EncryptedVaultPayload = z.infer<typeof encryptedPayloadSchema>;
19
+ /** @deprecated Use EncryptedVaultPayload */
20
+ export type EncryptedPayload = EncryptedVaultPayload;
21
+ export declare const argon2idKdfMetadataSchema: z.ZodObject<{
22
+ kdf: z.ZodLiteral<"argon2id">;
23
+ version: z.ZodLiteral<"kdf-v1">;
24
+ salt: z.ZodString;
25
+ memory: z.ZodNumber;
26
+ iterations: z.ZodNumber;
27
+ parallelism: z.ZodNumber;
28
+ }, z.core.$strip>;
29
+ export type Argon2idKdfMetadata = z.infer<typeof argon2idKdfMetadataSchema>;
30
+ export declare const kdfMetadataSchema: z.ZodObject<{
31
+ kdf: z.ZodLiteral<"argon2id">;
32
+ version: z.ZodLiteral<"kdf-v1">;
33
+ salt: z.ZodString;
34
+ memory: z.ZodNumber;
35
+ iterations: z.ZodNumber;
36
+ parallelism: z.ZodNumber;
37
+ }, z.core.$strip>;
38
+ export type KdfMetadata = Argon2idKdfMetadata;
39
+ export type VaultEnvelopeMethod = "password" | "recovery_phrase" | "passkey_prf";
40
+ export declare const storedEnvelopeSchema: z.ZodObject<{
41
+ method: z.ZodEnum<{
42
+ password: "password";
43
+ recovery_phrase: "recovery_phrase";
44
+ passkey_prf: "passkey_prf";
45
+ }>;
46
+ encryptedVaultKey: z.ZodObject<{
47
+ version: z.ZodLiteral<"enc-v1">;
48
+ alg: z.ZodLiteral<"AES-GCM">;
49
+ iv: z.ZodString;
50
+ ciphertext: z.ZodString;
51
+ aad: z.ZodObject<{
52
+ userId: z.ZodString;
53
+ resourceId: z.ZodString;
54
+ field: z.ZodEnum<{
55
+ vault_key: "vault_key";
56
+ vault_payload: "vault_payload";
57
+ vault_index: "vault_index";
58
+ }>;
59
+ context: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strip>;
61
+ }, z.core.$strip>;
62
+ kdfMetadata: z.ZodNullable<z.ZodObject<{
63
+ kdf: z.ZodLiteral<"argon2id">;
64
+ version: z.ZodLiteral<"kdf-v1">;
65
+ salt: z.ZodString;
66
+ memory: z.ZodNumber;
67
+ iterations: z.ZodNumber;
68
+ parallelism: z.ZodNumber;
69
+ }, z.core.$strip>>;
70
+ publicMetadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
71
+ }, z.core.$strip>;
72
+ export type VaultEnvelope = z.infer<typeof storedEnvelopeSchema>;
73
+ /** @deprecated Use VaultEnvelope */
74
+ export type StoredEnvelope = VaultEnvelope;
75
+ export type PasswordEnvelope = VaultEnvelope & {
76
+ method: "password";
77
+ kdfMetadata: Argon2idKdfMetadata;
78
+ };
79
+ export type RecoveryPhraseEnvelope = VaultEnvelope & {
80
+ method: "recovery_phrase";
81
+ kdfMetadata: Argon2idKdfMetadata;
82
+ };
83
+ export type PasskeyPrfEnvelope = VaultEnvelope & {
84
+ method: "passkey_prf";
85
+ kdfMetadata: null;
86
+ };
87
+ export { VAULT_CRYPTO_VERSION } from "../constants.js";
88
+ export declare const vaultSetupEnvelopeFieldsSchema: z.ZodObject<{
89
+ cryptoVersion: z.ZodLiteral<"vault-v1">;
90
+ encryptedBlob: z.ZodObject<{
91
+ version: z.ZodLiteral<"enc-v1">;
92
+ alg: z.ZodLiteral<"AES-GCM">;
93
+ iv: z.ZodString;
94
+ ciphertext: z.ZodString;
95
+ aad: z.ZodObject<{
96
+ userId: z.ZodString;
97
+ resourceId: z.ZodString;
98
+ field: z.ZodEnum<{
99
+ vault_key: "vault_key";
100
+ vault_payload: "vault_payload";
101
+ vault_index: "vault_index";
102
+ }>;
103
+ context: z.ZodOptional<z.ZodString>;
104
+ }, z.core.$strip>;
105
+ }, z.core.$strip>;
106
+ passwordEnvelope: z.ZodObject<{
107
+ method: z.ZodEnum<{
108
+ password: "password";
109
+ recovery_phrase: "recovery_phrase";
110
+ passkey_prf: "passkey_prf";
111
+ }>;
112
+ encryptedVaultKey: z.ZodObject<{
113
+ version: z.ZodLiteral<"enc-v1">;
114
+ alg: z.ZodLiteral<"AES-GCM">;
115
+ iv: z.ZodString;
116
+ ciphertext: z.ZodString;
117
+ aad: z.ZodObject<{
118
+ userId: z.ZodString;
119
+ resourceId: z.ZodString;
120
+ field: z.ZodEnum<{
121
+ vault_key: "vault_key";
122
+ vault_payload: "vault_payload";
123
+ vault_index: "vault_index";
124
+ }>;
125
+ context: z.ZodOptional<z.ZodString>;
126
+ }, z.core.$strip>;
127
+ }, z.core.$strip>;
128
+ kdfMetadata: z.ZodNullable<z.ZodObject<{
129
+ kdf: z.ZodLiteral<"argon2id">;
130
+ version: z.ZodLiteral<"kdf-v1">;
131
+ salt: z.ZodString;
132
+ memory: z.ZodNumber;
133
+ iterations: z.ZodNumber;
134
+ parallelism: z.ZodNumber;
135
+ }, z.core.$strip>>;
136
+ publicMetadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
137
+ }, z.core.$strip>;
138
+ recoveryEnvelope: z.ZodObject<{
139
+ method: z.ZodEnum<{
140
+ password: "password";
141
+ recovery_phrase: "recovery_phrase";
142
+ passkey_prf: "passkey_prf";
143
+ }>;
144
+ encryptedVaultKey: z.ZodObject<{
145
+ version: z.ZodLiteral<"enc-v1">;
146
+ alg: z.ZodLiteral<"AES-GCM">;
147
+ iv: z.ZodString;
148
+ ciphertext: z.ZodString;
149
+ aad: z.ZodObject<{
150
+ userId: z.ZodString;
151
+ resourceId: z.ZodString;
152
+ field: z.ZodEnum<{
153
+ vault_key: "vault_key";
154
+ vault_payload: "vault_payload";
155
+ vault_index: "vault_index";
156
+ }>;
157
+ context: z.ZodOptional<z.ZodString>;
158
+ }, z.core.$strip>;
159
+ }, z.core.$strip>;
160
+ kdfMetadata: z.ZodNullable<z.ZodObject<{
161
+ kdf: z.ZodLiteral<"argon2id">;
162
+ version: z.ZodLiteral<"kdf-v1">;
163
+ salt: z.ZodString;
164
+ memory: z.ZodNumber;
165
+ iterations: z.ZodNumber;
166
+ parallelism: z.ZodNumber;
167
+ }, z.core.$strip>>;
168
+ publicMetadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
169
+ }, z.core.$strip>;
170
+ passkeyPrfEnvelope: z.ZodOptional<z.ZodNullable<z.ZodObject<{
171
+ method: z.ZodEnum<{
172
+ password: "password";
173
+ recovery_phrase: "recovery_phrase";
174
+ passkey_prf: "passkey_prf";
175
+ }>;
176
+ encryptedVaultKey: z.ZodObject<{
177
+ version: z.ZodLiteral<"enc-v1">;
178
+ alg: z.ZodLiteral<"AES-GCM">;
179
+ iv: z.ZodString;
180
+ ciphertext: z.ZodString;
181
+ aad: z.ZodObject<{
182
+ userId: z.ZodString;
183
+ resourceId: z.ZodString;
184
+ field: z.ZodEnum<{
185
+ vault_key: "vault_key";
186
+ vault_payload: "vault_payload";
187
+ vault_index: "vault_index";
188
+ }>;
189
+ context: z.ZodOptional<z.ZodString>;
190
+ }, z.core.$strip>;
191
+ }, z.core.$strip>;
192
+ kdfMetadata: z.ZodNullable<z.ZodObject<{
193
+ kdf: z.ZodLiteral<"argon2id">;
194
+ version: z.ZodLiteral<"kdf-v1">;
195
+ salt: z.ZodString;
196
+ memory: z.ZodNumber;
197
+ iterations: z.ZodNumber;
198
+ parallelism: z.ZodNumber;
199
+ }, z.core.$strip>>;
200
+ publicMetadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
201
+ }, z.core.$strip>>>;
202
+ }, z.core.$strip>;
203
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/validation/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;iBAWjC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC3E,4CAA4C;AAC5C,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAErD,eAAO,MAAM,yBAAyB;;;;;;;iBAOpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,iBAAiB;;;;;;;iBAA4B,CAAC;AAC3D,MAAM,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAE9C,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,CAAC;AAEjF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK/B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACjE,oCAAoC;AACpC,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG;IACnD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,IAAI,CAAC;CACnB,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMzC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { ENCRYPTION_ALG, ENCRYPTION_VERSION } from "../constants.js";
3
+ const aadFieldSchema = z.enum(["vault_key", "vault_payload", "vault_index"]);
4
+ export const encryptedPayloadSchema = z.object({
5
+ version: z.literal(ENCRYPTION_VERSION),
6
+ alg: z.literal(ENCRYPTION_ALG),
7
+ iv: z.string().min(1),
8
+ ciphertext: z.string().min(1),
9
+ aad: z.object({
10
+ userId: z.string().uuid(),
11
+ resourceId: z.string().uuid(),
12
+ field: aadFieldSchema,
13
+ context: z.string().optional(),
14
+ }),
15
+ });
16
+ export const argon2idKdfMetadataSchema = z.object({
17
+ kdf: z.literal("argon2id"),
18
+ version: z.literal("kdf-v1"),
19
+ salt: z.string().min(1),
20
+ memory: z.number().int().positive(),
21
+ iterations: z.number().int().positive(),
22
+ parallelism: z.number().int().positive(),
23
+ });
24
+ export const kdfMetadataSchema = argon2idKdfMetadataSchema;
25
+ export const storedEnvelopeSchema = z.object({
26
+ method: z.enum(["password", "recovery_phrase", "passkey_prf"]),
27
+ encryptedVaultKey: encryptedPayloadSchema,
28
+ kdfMetadata: kdfMetadataSchema.nullable(),
29
+ publicMetadata: z.record(z.string(), z.unknown()).optional(),
30
+ });
31
+ export { VAULT_CRYPTO_VERSION } from "../constants.js";
32
+ export const vaultSetupEnvelopeFieldsSchema = z.object({
33
+ cryptoVersion: z.literal("vault-v1"),
34
+ encryptedBlob: encryptedPayloadSchema,
35
+ passwordEnvelope: storedEnvelopeSchema,
36
+ recoveryEnvelope: storedEnvelopeSchema,
37
+ passkeyPrfEnvelope: storedEnvelopeSchema.nullable().optional(),
38
+ });
39
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/validation/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErE,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACtC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC9B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;QACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;QAC7B,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;CACH,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAK3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;IAC9D,iBAAiB,EAAE,sBAAsB;IACzC,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACzC,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC;AAqBH,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IACpC,aAAa,EAAE,sBAAsB;IACrC,gBAAgB,EAAE,oBAAoB;IACtC,gBAAgB,EAAE,oBAAoB;IACtC,kBAAkB,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC/D,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,100 @@
1
+ {
2
+ "name": "@tgoliveira/vault-core",
3
+ "version": "0.1.0",
4
+ "description": "Framework-independent vault crypto primitives with optional React session helpers",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/tgoliveira11/vault-core.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/tgoliveira11/vault-core/issues"
12
+ },
13
+ "homepage": "https://github.com/tgoliveira11/vault-core#readme",
14
+ "keywords": [
15
+ "vault",
16
+ "encryption",
17
+ "aes-gcm",
18
+ "argon2id",
19
+ "recovery-phrase",
20
+ "bip39",
21
+ "passkey-prf",
22
+ "webcrypto",
23
+ "zero-knowledge",
24
+ "client-side-encryption"
25
+ ],
26
+ "license": "MIT",
27
+ "main": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/index.js"
33
+ },
34
+ "./browser": {
35
+ "types": "./dist/browser.d.ts",
36
+ "import": "./dist/browser.js"
37
+ },
38
+ "./testing": {
39
+ "types": "./dist/testing.d.ts",
40
+ "import": "./dist/testing.js"
41
+ },
42
+ "./react": {
43
+ "types": "./dist/react/index.d.ts",
44
+ "import": "./dist/react/index.js"
45
+ }
46
+ },
47
+ "files": [
48
+ "dist",
49
+ "README.md",
50
+ "LICENSE",
51
+ "SECURITY.md",
52
+ "ARCHITECTURE.md",
53
+ "RECOVERY_PHRASE.md",
54
+ "PASSWORD_ENVELOPES.md",
55
+ "PASSKEY_PRF_ENVELOPES.md",
56
+ "MIGRATION_FROM_LIQSENSE.md",
57
+ "API_REFERENCE.md"
58
+ ],
59
+ "publishConfig": {
60
+ "access": "public"
61
+ },
62
+ "scripts": {
63
+ "build": "tsc -p tsconfig.json",
64
+ "typecheck": "tsc -p tsconfig.json --noEmit",
65
+ "test": "vitest run",
66
+ "test:watch": "vitest",
67
+ "validate": "npm run typecheck && npm run test && npm run build",
68
+ "prepublishOnly": "npm run validate",
69
+ "prepare": "npm run build"
70
+ },
71
+ "engines": {
72
+ "node": ">=20"
73
+ },
74
+ "peerDependencies": {
75
+ "react": ">=18"
76
+ },
77
+ "peerDependenciesMeta": {
78
+ "react": {
79
+ "optional": true
80
+ }
81
+ },
82
+ "dependencies": {
83
+ "@scure/bip39": "^2.2.0",
84
+ "hash-wasm": "^4.12.0",
85
+ "zod": "^4.4.3"
86
+ },
87
+ "devDependencies": {
88
+ "@testing-library/react": "^16.3.2",
89
+ "@types/node": "^20",
90
+ "@types/react": "^19",
91
+ "@types/react-dom": "^19",
92
+ "@vitejs/plugin-react": "^6.0.2",
93
+ "jsdom": "^29.1.1",
94
+ "react": "^19.2.4",
95
+ "react-dom": "^19.2.4",
96
+ "typescript": "^5",
97
+ "vitest": "^4.1.9"
98
+ },
99
+ "private": false
100
+ }