@djangocfg/api 2.1.582 → 2.1.584

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 (69) hide show
  1. package/README.md +18 -0
  2. package/dist/OAuthTokenResponse-WEDM6IP5.mjs +19 -0
  3. package/dist/OAuthTokenResponse-WEDM6IP5.mjs.map +1 -0
  4. package/dist/OTPVerifyResponse-P5LDNM7H.mjs +20 -0
  5. package/dist/OTPVerifyResponse-P5LDNM7H.mjs.map +1 -0
  6. package/dist/PasswordLoginResponse-33B576NG.mjs +20 -0
  7. package/dist/PasswordLoginResponse-33B576NG.mjs.map +1 -0
  8. package/dist/auth.cjs +279 -103
  9. package/dist/auth.cjs.map +1 -1
  10. package/dist/auth.d.cts +14 -41
  11. package/dist/auth.d.ts +14 -41
  12. package/dist/auth.mjs +279 -101
  13. package/dist/auth.mjs.map +1 -1
  14. package/dist/clients.cjs +242 -54
  15. package/dist/clients.cjs.map +1 -1
  16. package/dist/clients.d.cts +13 -41
  17. package/dist/clients.d.ts +13 -41
  18. package/dist/clients.mjs +242 -54
  19. package/dist/clients.mjs.map +1 -1
  20. package/dist/hooks.cjs +242 -54
  21. package/dist/hooks.cjs.map +1 -1
  22. package/dist/hooks.mjs +242 -54
  23. package/dist/hooks.mjs.map +1 -1
  24. package/dist/index.cjs +247 -54
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +90 -63
  27. package/dist/index.d.ts +90 -63
  28. package/dist/index.mjs +247 -54
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/storage.cjs +268 -0
  31. package/dist/storage.cjs.map +1 -0
  32. package/dist/storage.d.cts +84 -0
  33. package/dist/storage.d.ts +84 -0
  34. package/dist/storage.mjs +247 -0
  35. package/dist/storage.mjs.map +1 -0
  36. package/package.json +8 -2
  37. package/src/__tests__/noStorageLiterals.test.ts +27 -0
  38. package/src/__tests__/storage.test.ts +134 -0
  39. package/src/__tests__/storageSsr.test.ts +14 -0
  40. package/src/_api/generated/_cfg_accounts/openapi.json +1 -28
  41. package/src/_api/generated/_cfg_accounts/schemas/OAuthCallbackRequestRequest.ts +0 -1
  42. package/src/_api/generated/_cfg_accounts/schemas/OAuthTokenResponse.ts +0 -1
  43. package/src/_api/generated/_cfg_accounts/schemas/OTPVerifyRequest.ts +0 -1
  44. package/src/_api/generated/_cfg_accounts/schemas/OTPVerifyResponse.ts +0 -1
  45. package/src/_api/generated/_cfg_accounts/schemas/PasswordLoginRequest.ts +0 -1
  46. package/src/_api/generated/_cfg_accounts/schemas/PasswordLoginResponse.ts +0 -1
  47. package/src/_api/generated/_cfg_totp/openapi.json +0 -5
  48. package/src/_api/generated/_cfg_totp/schemas/VerifyResponse.ts +0 -1
  49. package/src/_api/generated/helpers/auth.ts +28 -65
  50. package/src/_api/generated/helpers/index.ts +12 -0
  51. package/src/_api/generated/helpers/keys.ts +327 -0
  52. package/src/_api/generated/openapi.json +1 -33
  53. package/src/_api/generated/types.gen.ts +4 -59
  54. package/src/auth/__tests__/authRedirect.test.ts +1 -1
  55. package/src/auth/__tests__/passwordLogin.test.tsx +1 -3
  56. package/src/auth/__tests__/profileCache.test.ts +1 -1
  57. package/src/auth/context/AccountsContext.tsx +6 -8
  58. package/src/auth/context/AuthContext.tsx +3 -5
  59. package/src/auth/context/types.ts +1 -1
  60. package/src/auth/hooks/useAuthForm.ts +3 -5
  61. package/src/auth/hooks/useAuthFormState.ts +0 -4
  62. package/src/auth/hooks/useAuthRedirect.ts +3 -2
  63. package/src/auth/hooks/useGithubAuth.ts +14 -16
  64. package/src/auth/hooks/useLocalStorage.ts +7 -7
  65. package/src/auth/hooks/useProfileCache.ts +2 -1
  66. package/src/auth/hooks/useSessionStorage.ts +7 -7
  67. package/src/auth/hooks/useTwoFactorVerify.ts +2 -2
  68. package/src/auth/types/form.ts +0 -5
  69. package/src/storage.ts +21 -0
package/README.md CHANGED
@@ -102,6 +102,24 @@ valid, so the auth form cannot fix it, and redirecting would loop on the saved
102
102
  URL. Render a distinct "not authorised" state instead. `resolveGuardIsLoading`
103
103
  returns `false` once forbidden, so the preloader never spins on it.
104
104
 
105
+ ## Storage keys
106
+
107
+ Every browser-storage key is `cfg.<area>.<name>` (framework) or
108
+ `<owner>.<area>.<name>` (app). Use the registry, never a literal or raw `localStorage`:
109
+
110
+ ```ts
111
+ import { CFG_KEYS, cfgStorage, createStorage } from '@djangocfg/api/storage';
112
+
113
+ cfgStorage.read(CFG_KEYS.email.key);
114
+ cfgStorage.clearAll(); // sign-out: removes personal keys
115
+
116
+ const storage = createStorage('kino');
117
+ storage.writeJSON(storage.key('player', 'volume'), 0.4);
118
+ ```
119
+
120
+ Old key names are not migrated. Full rules, the key list and cross-tab behavior:
121
+ [`@docs/STORAGE_KEYS.md`](./@docs/STORAGE_KEYS.md).
122
+
105
123
  ## Token storage & DPoP
106
124
 
107
125
  The token lives in the shared `auth` store (localStorage by default, switchable
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import "./chunk-53YKWR6F.mjs";
3
+
4
+ // src/_api/generated/_cfg_accounts/schemas/OAuthTokenResponse.ts
5
+ import { z } from "zod";
6
+ var OAuthTokenResponseSchema = z.object({
7
+ requires_2fa: z.boolean().default(false).optional(),
8
+ session_id: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).nullable().optional(),
9
+ access: z.string().nullable().optional(),
10
+ refresh: z.string().nullable().optional(),
11
+ user: z.object({}).passthrough().nullable().optional(),
12
+ is_new_user: z.boolean().default(false).optional(),
13
+ is_new_connection: z.boolean().default(false).optional(),
14
+ should_prompt_2fa: z.boolean().optional()
15
+ });
16
+ export {
17
+ OAuthTokenResponseSchema
18
+ };
19
+ //# sourceMappingURL=OAuthTokenResponse-WEDM6IP5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_api/generated/_cfg_accounts/schemas/OAuthTokenResponse.ts"],"sourcesContent":["// AUTO-GENERATED by cmdop_server / devtools.generator.ts_extras\n// Source: OpenAPI 3.1 components.schemas\n// DO NOT EDIT — re-run `make gen-clients`.\n\nimport { z } from \"zod\";\n\nexport const OAuthTokenResponseSchema = z.object({\n requires_2fa: z.boolean().default(false).optional(),\n session_id: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).nullable().optional(),\n access: z.string().nullable().optional(),\n refresh: z.string().nullable().optional(),\n user: z.object({}).passthrough().nullable().optional(),\n is_new_user: z.boolean().default(false).optional(),\n is_new_connection: z.boolean().default(false).optional(),\n should_prompt_2fa: z.boolean().optional(),\n});\n\nexport type OAuthTokenResponse = z.infer<typeof OAuthTokenResponseSchema>;\n"],"mappings":";;;;AAIA,SAAS,SAAS;AAEX,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,cAAc,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EAClD,YAAY,EAAE,OAAO,EAAE,MAAM,iEAAiE,EAAE,SAAS,EAAE,SAAS;AAAA,EACpH,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,aAAa,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EACjD,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EACvD,mBAAmB,EAAE,QAAQ,EAAE,SAAS;AAC1C,CAAC;","names":[]}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import {
3
+ UserSchema
4
+ } from "./chunk-B22YGMM3.mjs";
5
+ import "./chunk-53YKWR6F.mjs";
6
+
7
+ // src/_api/generated/_cfg_accounts/schemas/OTPVerifyResponse.ts
8
+ import { z } from "zod";
9
+ var OTPVerifyResponseSchema = z.object({
10
+ requires_2fa: z.boolean().default(false).optional(),
11
+ session_id: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).nullable().optional(),
12
+ refresh: z.string().nullable().optional(),
13
+ access: z.string().nullable().optional(),
14
+ user: UserSchema.nullable().optional(),
15
+ should_prompt_2fa: z.boolean().optional()
16
+ });
17
+ export {
18
+ OTPVerifyResponseSchema
19
+ };
20
+ //# sourceMappingURL=OTPVerifyResponse-P5LDNM7H.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_api/generated/_cfg_accounts/schemas/OTPVerifyResponse.ts"],"sourcesContent":["// AUTO-GENERATED by cmdop_server / devtools.generator.ts_extras\n// Source: OpenAPI 3.1 components.schemas\n// DO NOT EDIT — re-run `make gen-clients`.\n\nimport { z } from \"zod\";\nimport { UserSchema } from \"./User\";\n\nexport const OTPVerifyResponseSchema = z.object({\n requires_2fa: z.boolean().default(false).optional(),\n session_id: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).nullable().optional(),\n refresh: z.string().nullable().optional(),\n access: z.string().nullable().optional(),\n user: UserSchema.nullable().optional(),\n should_prompt_2fa: z.boolean().optional(),\n});\n\nexport type OTPVerifyResponse = z.infer<typeof OTPVerifyResponseSchema>;\n"],"mappings":";;;;;;;AAIA,SAAS,SAAS;AAGX,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,cAAc,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EAClD,YAAY,EAAE,OAAO,EAAE,MAAM,iEAAiE,EAAE,SAAS,EAAE,SAAS;AAAA,EACpH,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,MAAM,WAAW,SAAS,EAAE,SAAS;AAAA,EACrC,mBAAmB,EAAE,QAAQ,EAAE,SAAS;AAC1C,CAAC;","names":[]}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import {
3
+ UserSchema
4
+ } from "./chunk-B22YGMM3.mjs";
5
+ import "./chunk-53YKWR6F.mjs";
6
+
7
+ // src/_api/generated/_cfg_accounts/schemas/PasswordLoginResponse.ts
8
+ import { z } from "zod";
9
+ var PasswordLoginResponseSchema = z.object({
10
+ requires_2fa: z.boolean().default(false).optional(),
11
+ session_id: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).nullable().optional(),
12
+ refresh: z.string().nullable().optional(),
13
+ access: z.string().nullable().optional(),
14
+ user: UserSchema.nullable().optional(),
15
+ should_prompt_2fa: z.boolean().optional()
16
+ });
17
+ export {
18
+ PasswordLoginResponseSchema
19
+ };
20
+ //# sourceMappingURL=PasswordLoginResponse-33B576NG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_api/generated/_cfg_accounts/schemas/PasswordLoginResponse.ts"],"sourcesContent":["// AUTO-GENERATED by cmdop_server / devtools.generator.ts_extras\n// Source: OpenAPI 3.1 components.schemas\n// DO NOT EDIT — re-run `make gen-clients`.\n\nimport { z } from \"zod\";\nimport { UserSchema } from \"./User\";\n\nexport const PasswordLoginResponseSchema = z.object({\n requires_2fa: z.boolean().default(false).optional(),\n session_id: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).nullable().optional(),\n refresh: z.string().nullable().optional(),\n access: z.string().nullable().optional(),\n user: UserSchema.nullable().optional(),\n should_prompt_2fa: z.boolean().optional(),\n});\n\nexport type PasswordLoginResponse = z.infer<typeof PasswordLoginResponseSchema>;\n"],"mappings":";;;;;;;AAIA,SAAS,SAAS;AAGX,IAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,cAAc,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,EAClD,YAAY,EAAE,OAAO,EAAE,MAAM,iEAAiE,EAAE,SAAS,EAAE,SAAS;AAAA,EACpH,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,MAAM,WAAW,SAAS,EAAE,SAAS;AAAA,EACrC,mBAAmB,EAAE,QAAQ,EAAE,SAAS;AAC1C,CAAC;","names":[]}