payload-auth 1.6.0 → 1.6.1-canary.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 (143) hide show
  1. package/dist/better-auth/adapter/index.d.ts.map +1 -1
  2. package/dist/better-auth/adapter/index.js +30 -30
  3. package/dist/better-auth/adapter/transform/index.d.ts +8 -7
  4. package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
  5. package/dist/better-auth/adapter/transform/index.js +2 -2
  6. package/dist/better-auth/adapter/types.d.ts +5 -4
  7. package/dist/better-auth/adapter/types.d.ts.map +1 -1
  8. package/dist/better-auth/adapter/types.js +1 -1
  9. package/dist/better-auth/generated-types.d.ts +21 -0
  10. package/dist/better-auth/generated-types.d.ts.map +1 -1
  11. package/dist/better-auth/generated-types.js +1 -1
  12. package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +14 -17
  13. package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts.map +1 -1
  14. package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +51 -33
  15. package/dist/better-auth/plugin/helpers/get-collection.d.ts +11 -36
  16. package/dist/better-auth/plugin/helpers/get-collection.d.ts.map +1 -1
  17. package/dist/better-auth/plugin/helpers/get-collection.js +20 -53
  18. package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts.map +1 -1
  19. package/dist/better-auth/plugin/helpers/prepare-session-data.js +1 -1
  20. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +21 -0
  21. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts.map +1 -0
  22. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +62 -0
  23. package/dist/better-auth/plugin/index.d.ts +8 -1
  24. package/dist/better-auth/plugin/index.d.ts.map +1 -1
  25. package/dist/better-auth/plugin/index.js +67 -91
  26. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +13 -0
  27. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts.map +1 -0
  28. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +80 -0
  29. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +2 -2
  30. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts.map +1 -1
  31. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +6 -16
  32. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +2 -2
  33. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts.map +1 -1
  34. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +10 -12
  35. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +1 -1
  36. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts.map +1 -1
  37. package/dist/better-auth/plugin/lib/build-collections/api-keys.js +8 -11
  38. package/dist/better-auth/plugin/lib/build-collections/index.d.ts +3 -4
  39. package/dist/better-auth/plugin/lib/build-collections/index.d.ts.map +1 -1
  40. package/dist/better-auth/plugin/lib/build-collections/index.js +15 -28
  41. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +1 -1
  42. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts.map +1 -1
  43. package/dist/better-auth/plugin/lib/build-collections/invitations.js +8 -11
  44. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +1 -1
  45. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts.map +1 -1
  46. package/dist/better-auth/plugin/lib/build-collections/jwks.js +8 -11
  47. package/dist/better-auth/plugin/lib/build-collections/members.d.ts +1 -1
  48. package/dist/better-auth/plugin/lib/build-collections/members.d.ts.map +1 -1
  49. package/dist/better-auth/plugin/lib/build-collections/members.js +8 -10
  50. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +1 -1
  51. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts.map +1 -1
  52. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +8 -11
  53. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +1 -1
  54. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts.map +1 -1
  55. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +8 -11
  56. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +1 -1
  57. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts.map +1 -1
  58. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +7 -9
  59. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +1 -1
  60. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts.map +1 -1
  61. package/dist/better-auth/plugin/lib/build-collections/organizations.js +8 -10
  62. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +1 -1
  63. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts.map +1 -1
  64. package/dist/better-auth/plugin/lib/build-collections/passkeys.js +9 -11
  65. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +1 -1
  66. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts.map +1 -1
  67. package/dist/better-auth/plugin/lib/build-collections/sessions.js +7 -8
  68. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +1 -1
  69. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts.map +1 -1
  70. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +8 -10
  71. package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +1 -1
  72. package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts.map +1 -1
  73. package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +8 -10
  74. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +1 -1
  75. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts.map +1 -1
  76. package/dist/better-auth/plugin/lib/build-collections/teams.js +8 -11
  77. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +1 -1
  78. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts.map +1 -1
  79. package/dist/better-auth/plugin/lib/build-collections/two-factors.js +8 -11
  80. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -1
  81. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +4 -11
  82. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts.map +1 -1
  83. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +3 -8
  84. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts.map +1 -1
  85. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +5 -15
  86. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts.map +1 -1
  87. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +19 -22
  88. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +1 -1
  89. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -1
  90. package/dist/better-auth/plugin/lib/build-collections/users/index.js +9 -15
  91. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +6 -6
  92. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts.map +1 -1
  93. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +9 -17
  94. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +2 -2
  95. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts.map +1 -1
  96. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +1 -1
  97. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +1 -1
  98. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts.map +1 -1
  99. package/dist/better-auth/plugin/lib/build-collections/verifications.js +8 -11
  100. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +1 -1
  101. package/dist/better-auth/plugin/lib/init-better-auth.d.ts.map +1 -1
  102. package/dist/better-auth/plugin/lib/init-better-auth.js +3 -2
  103. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -2
  104. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts.map +1 -1
  105. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +4 -4
  106. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +3 -4
  107. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -1
  108. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +15 -15
  109. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -2
  110. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts.map +1 -1
  111. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +8 -8
  112. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -2
  113. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts.map +1 -1
  114. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +12 -12
  115. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -2
  116. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts.map +1 -1
  117. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +4 -4
  118. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -2
  119. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts.map +1 -1
  120. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +6 -6
  121. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +2 -2
  122. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts.map +1 -1
  123. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +4 -4
  124. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +3 -4
  125. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +1 -1
  126. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +4 -4
  127. package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +2 -2
  128. package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts.map +1 -1
  129. package/dist/better-auth/plugin/payload/components/passkeys/types.js +1 -1
  130. package/dist/better-auth/plugin/types.d.ts +6 -5
  131. package/dist/better-auth/plugin/types.d.ts.map +1 -1
  132. package/dist/better-auth/plugin/types.js +1 -1
  133. package/dist/better-auth/scripts/generate-types.js +15 -1
  134. package/package.json +1 -1
  135. package/dist/better-auth/plugin/helpers/get-collection-schema-map.d.ts +0 -16
  136. package/dist/better-auth/plugin/helpers/get-collection-schema-map.d.ts.map +0 -1
  137. package/dist/better-auth/plugin/helpers/get-collection-schema-map.js +0 -108
  138. package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts +0 -3
  139. package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts.map +0 -1
  140. package/dist/better-auth/plugin/helpers/get-requst-collection.js +0 -14
  141. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +0 -105
  142. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts.map +0 -1
  143. package/dist/better-auth/plugin/helpers/serialize-cookie.js +0 -186
@@ -1,108 +0,0 @@
1
- import { baModelFieldKeysToFieldNames, baModelKey } from "../constants";
2
- import { getAuthTables } from "better-auth/db";
3
- import { flattenAllFields } from "payload/shared";
4
- import { getDeafultCollectionSlug } from "./get-collection-slug";
5
- export function getDefaultCollectionSchemaMap(pluginOptions) {
6
- const tables = getAuthTables(pluginOptions.betterAuthOptions ?? {});
7
- const map = {};
8
- Object.entries(tables).forEach(([key, table])=>{
9
- const fieldNames = Object.entries(table.fields).map(([k, v])=>k);
10
- const typedKey = key;
11
- const value = {
12
- collectionSlug: getDeafultCollectionSlug({
13
- modelKey: typedKey,
14
- pluginOptions
15
- }),
16
- fields: fieldNames.reduce((acc, field)=>{
17
- if (typedKey in baModelFieldKeysToFieldNames && field in baModelFieldKeysToFieldNames[typedKey]) {
18
- const fieldMapping = baModelFieldKeysToFieldNames[typedKey];
19
- const typedField = field;
20
- acc[field] = fieldMapping[typedField] || field;
21
- } else {
22
- acc[field] = field;
23
- }
24
- return acc;
25
- }, {})
26
- };
27
- map[typedKey] = value;
28
- });
29
- // always add the role field to the user collection if not already present
30
- if (!map[baModelKey.user].fields.role) {
31
- map[baModelKey.user].fields.role = baModelFieldKeysToFieldNames.user.role;
32
- }
33
- return map;
34
- }
35
- /**
36
- * Builds a collection schema map by analyzing collection overrides and extracting
37
- * BetterAuth model keys and field mappings
38
- *
39
- * @param collectionOverrides - Collection override functions provided in plugin options
40
- * @returns A collection schema map with default values merged with any overrides
41
- */ export function buildCollectionSchemaMap(pluginOptions) {
42
- const collectionOverrides = {
43
- users: pluginOptions.users?.collectionOverrides,
44
- accounts: pluginOptions.accounts?.collectionOverrides,
45
- sessions: pluginOptions.sessions?.collectionOverrides,
46
- verifications: pluginOptions.verifications?.collectionOverrides,
47
- ...pluginOptions.pluginCollectionOverrides
48
- };
49
- const defaultCollectionSchemaMap = getDefaultCollectionSchemaMap(pluginOptions);
50
- if (!collectionOverrides || Object.keys(collectionOverrides).length === 0) {
51
- return {
52
- ...defaultCollectionSchemaMap
53
- };
54
- }
55
- const schemaMap = {
56
- ...defaultCollectionSchemaMap
57
- };
58
- Object.entries(collectionOverrides).forEach(([collectionSlug, overrideFunction])=>{
59
- if (!overrideFunction) return;
60
- const modifiedCollection = overrideFunction({
61
- collection: {
62
- slug: collectionSlug,
63
- fields: []
64
- }
65
- });
66
- const modelKey = assertModelKey(modifiedCollection);
67
- schemaMap[modelKey].collectionSlug = modifiedCollection.slug;
68
- const flattenedFields = flattenAllFields(modifiedCollection);
69
- if (flattenedFields && Array.isArray(flattenedFields)) {
70
- flattenedFields.forEach((field)=>{
71
- // we only want to process fields that have a betterAuthFieldKey
72
- // because its possible the user has added additional fields
73
- if (field.custom?.betterAuthFieldKey) {
74
- const fieldKey = assertFieldKey(field, modelKey, modifiedCollection.slug);
75
- schemaMap[modelKey].fields[fieldKey] = field.name;
76
- }
77
- });
78
- }
79
- });
80
- return schemaMap;
81
- }
82
- function assertFieldKey(field, modelKey, collectionSlug) {
83
- const fieldKey = field.custom?.betterAuthFieldKey;
84
- // Assert that fieldKey is a valid key in the baModelFieldKeysToFieldNames mapping
85
- if (!Object.values(baModelFieldKeysToFieldNames).some((fieldMap)=>Object.keys(fieldMap).includes(fieldKey))) {
86
- throw new Error(`Invalid custom.betterAuthFieldKey: ${fieldKey} for field ${field.name} in collection ${collectionSlug},
87
- must be one of ${Object.keys(baModelFieldKeysToFieldNames[modelKey]).join(', ')}`);
88
- }
89
- return fieldKey;
90
- }
91
- /**
92
- * Asserts that a collection has a valid BetterAuth model key and returns it
93
- *
94
- * @param collection - The collection to check for a BetterAuth model key
95
- * @returns The BetterAuth model key
96
- * @throws Error if the collection does not have a valid BetterAuth model key
97
- */ function assertModelKey(collection) {
98
- if (!collection.custom?.betterAuthModelKey) {
99
- throw new Error(`Collection ${collection.slug} is missing a betterAuthModelKey in its custom field`);
100
- }
101
- const modelKey = collection.custom.betterAuthModelKey;
102
- if (!Object.values(baModelKey).includes(modelKey)) {
103
- throw new Error(`Collection ${collection.slug} has an invalid betterAuthModelKey: ${modelKey}`);
104
- }
105
- return modelKey;
106
- }
107
-
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vaGVscGVycy9nZXQtY29sbGVjdGlvbi1zY2hlbWEtbWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJhTW9kZWxGaWVsZEtleXNUb0ZpZWxkTmFtZXMsIGJhTW9kZWxLZXkgfSBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBnZXRBdXRoVGFibGVzIH0gZnJvbSAnYmV0dGVyLWF1dGgvZGInXG5pbXBvcnQgeyBCZXR0ZXJBdXRoT3B0aW9ucyB9IGZyb20gJ2JldHRlci1hdXRoL3R5cGVzJ1xuaW1wb3J0IHsgYmFNb2RlbEtleVRvU2x1ZyB9IGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IEZsYXR0ZW5lZEZpZWxkIH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB7IGZsYXR0ZW5BbGxGaWVsZHMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCB7IENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHsgZ2V0RGVhZnVsdENvbGxlY3Rpb25TbHVnIH0gZnJvbSAnLi9nZXQtY29sbGVjdGlvbi1zbHVnJ1xuaW1wb3J0IHsgQmV0dGVyQXV0aFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblNjaGVtYU1hcCA9IFJlY29yZDxcbiAga2V5b2YgdHlwZW9mIGJhTW9kZWxLZXksXG4gIHtcbiAgICBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gICAgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIH1cbj5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRDb2xsZWN0aW9uU2NoZW1hTWFwKHBsdWdpbk9wdGlvbnM6IEJldHRlckF1dGhQbHVnaW5PcHRpb25zKTogQ29sbGVjdGlvblNjaGVtYU1hcCB7XG4gIGNvbnN0IHRhYmxlcyA9IGdldEF1dGhUYWJsZXMocGx1Z2luT3B0aW9ucy5iZXR0ZXJBdXRoT3B0aW9ucyA/PyB7fSlcbiAgY29uc3QgbWFwID0ge30gYXMgQ29sbGVjdGlvblNjaGVtYU1hcFxuICBPYmplY3QuZW50cmllcyh0YWJsZXMpLmZvckVhY2goKFtrZXksIHRhYmxlXSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBPYmplY3QuZW50cmllcyh0YWJsZS5maWVsZHMpLm1hcCgoW2ssIHZdKSA9PiBrKVxuICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5IGFzIGtleW9mIHR5cGVvZiBiYU1vZGVsS2V5VG9TbHVnXG4gICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICBjb2xsZWN0aW9uU2x1ZzogZ2V0RGVhZnVsdENvbGxlY3Rpb25TbHVnKHsgbW9kZWxLZXk6IHR5cGVkS2V5LCBwbHVnaW5PcHRpb25zIH0pLFxuICAgICAgZmllbGRzOiBmaWVsZE5hbWVzLnJlZHVjZShcbiAgICAgICAgKGFjYywgZmllbGQpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlZEtleSBpbiBiYU1vZGVsRmllbGRLZXlzVG9GaWVsZE5hbWVzICYmXG4gICAgICAgICAgICBmaWVsZCBpbiBiYU1vZGVsRmllbGRLZXlzVG9GaWVsZE5hbWVzW3R5cGVkS2V5IGFzIGtleW9mIHR5cGVvZiBiYU1vZGVsRmllbGRLZXlzVG9GaWVsZE5hbWVzXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRNYXBwaW5nID0gYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lc1t0eXBlZEtleSBhcyBrZXlvZiB0eXBlb2YgYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lc11cbiAgICAgICAgICAgIGNvbnN0IHR5cGVkRmllbGQgPSBmaWVsZCBhcyBrZXlvZiB0eXBlb2YgZmllbGRNYXBwaW5nXG4gICAgICAgICAgICBhY2NbZmllbGRdID0gZmllbGRNYXBwaW5nW3R5cGVkRmllbGRdIHx8IGZpZWxkXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1tmaWVsZF0gPSBmaWVsZFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAgIClcbiAgICB9XG5cbiAgICBtYXBbdHlwZWRLZXldID0gdmFsdWVcbiAgfSlcblxuICAvLyBhbHdheXMgYWRkIHRoZSByb2xlIGZpZWxkIHRvIHRoZSB1c2VyIGNvbGxlY3Rpb24gaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICBpZiAoIW1hcFtiYU1vZGVsS2V5LnVzZXJdLmZpZWxkcy5yb2xlKSB7XG4gICAgbWFwW2JhTW9kZWxLZXkudXNlcl0uZmllbGRzLnJvbGUgPSBiYU1vZGVsRmllbGRLZXlzVG9GaWVsZE5hbWVzLnVzZXIucm9sZVxuICB9XG5cbiAgcmV0dXJuIG1hcFxufVxuXG50eXBlIENvbGxlY3Rpb25PdmVycmlkZSA9ICgob3B0aW9uczogeyBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uQ29uZmlnIH0pID0+IENvbGxlY3Rpb25Db25maWcpIHwgdW5kZWZpbmVkXG5cbnR5cGUgQ29sbGVjdGlvbk92ZXJyaWRlcyA9IFJlY29yZDxzdHJpbmcsIENvbGxlY3Rpb25PdmVycmlkZT5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb2xsZWN0aW9uIHNjaGVtYSBtYXAgYnkgYW5hbHl6aW5nIGNvbGxlY3Rpb24gb3ZlcnJpZGVzIGFuZCBleHRyYWN0aW5nXG4gKiBCZXR0ZXJBdXRoIG1vZGVsIGtleXMgYW5kIGZpZWxkIG1hcHBpbmdzXG4gKlxuICogQHBhcmFtIGNvbGxlY3Rpb25PdmVycmlkZXMgLSBDb2xsZWN0aW9uIG92ZXJyaWRlIGZ1bmN0aW9ucyBwcm92aWRlZCBpbiBwbHVnaW4gb3B0aW9uc1xuICogQHJldHVybnMgQSBjb2xsZWN0aW9uIHNjaGVtYSBtYXAgd2l0aCBkZWZhdWx0IHZhbHVlcyBtZXJnZWQgd2l0aCBhbnkgb3ZlcnJpZGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENvbGxlY3Rpb25TY2hlbWFNYXAocGx1Z2luT3B0aW9uczogQmV0dGVyQXV0aFBsdWdpbk9wdGlvbnMpOiBDb2xsZWN0aW9uU2NoZW1hTWFwIHtcbiAgY29uc3QgY29sbGVjdGlvbk92ZXJyaWRlcyA9IHtcbiAgICB1c2VyczogcGx1Z2luT3B0aW9ucy51c2Vycz8uY29sbGVjdGlvbk92ZXJyaWRlcyxcbiAgICBhY2NvdW50czogcGx1Z2luT3B0aW9ucy5hY2NvdW50cz8uY29sbGVjdGlvbk92ZXJyaWRlcyxcbiAgICBzZXNzaW9uczogcGx1Z2luT3B0aW9ucy5zZXNzaW9ucz8uY29sbGVjdGlvbk92ZXJyaWRlcyxcbiAgICB2ZXJpZmljYXRpb25zOiBwbHVnaW5PcHRpb25zLnZlcmlmaWNhdGlvbnM/LmNvbGxlY3Rpb25PdmVycmlkZXMsXG4gICAgLi4ucGx1Z2luT3B0aW9ucy5wbHVnaW5Db2xsZWN0aW9uT3ZlcnJpZGVzXG4gIH1cblxuICBjb25zdCBkZWZhdWx0Q29sbGVjdGlvblNjaGVtYU1hcCA9IGdldERlZmF1bHRDb2xsZWN0aW9uU2NoZW1hTWFwKHBsdWdpbk9wdGlvbnMpXG5cbiAgaWYgKCFjb2xsZWN0aW9uT3ZlcnJpZGVzIHx8IE9iamVjdC5rZXlzKGNvbGxlY3Rpb25PdmVycmlkZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IC4uLmRlZmF1bHRDb2xsZWN0aW9uU2NoZW1hTWFwIH1cbiAgfVxuXG4gIGNvbnN0IHNjaGVtYU1hcCA9IHsgLi4uZGVmYXVsdENvbGxlY3Rpb25TY2hlbWFNYXAgfVxuXG4gIE9iamVjdC5lbnRyaWVzKGNvbGxlY3Rpb25PdmVycmlkZXMpLmZvckVhY2goKFtjb2xsZWN0aW9uU2x1Zywgb3ZlcnJpZGVGdW5jdGlvbl0pID0+IHtcbiAgICBpZiAoIW92ZXJyaWRlRnVuY3Rpb24pIHJldHVyblxuXG4gICAgY29uc3QgbW9kaWZpZWRDb2xsZWN0aW9uID0gb3ZlcnJpZGVGdW5jdGlvbih7XG4gICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgIHNsdWc6IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICBmaWVsZHM6IFtdXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCBtb2RlbEtleSA9IGFzc2VydE1vZGVsS2V5KG1vZGlmaWVkQ29sbGVjdGlvbilcbiAgICBzY2hlbWFNYXBbbW9kZWxLZXldLmNvbGxlY3Rpb25TbHVnID0gbW9kaWZpZWRDb2xsZWN0aW9uLnNsdWdcbiAgICBjb25zdCBmbGF0dGVuZWRGaWVsZHMgPSBmbGF0dGVuQWxsRmllbGRzKG1vZGlmaWVkQ29sbGVjdGlvbilcbiAgICBpZiAoZmxhdHRlbmVkRmllbGRzICYmIEFycmF5LmlzQXJyYXkoZmxhdHRlbmVkRmllbGRzKSkge1xuICAgICAgZmxhdHRlbmVkRmllbGRzLmZvckVhY2goKGZpZWxkOiBGbGF0dGVuZWRGaWVsZCkgPT4ge1xuICAgICAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gcHJvY2VzcyBmaWVsZHMgdGhhdCBoYXZlIGEgYmV0dGVyQXV0aEZpZWxkS2V5XG4gICAgICAgIC8vIGJlY2F1c2UgaXRzIHBvc3NpYmxlIHRoZSB1c2VyIGhhcyBhZGRlZCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgICAgICBpZiAoZmllbGQuY3VzdG9tPy5iZXR0ZXJBdXRoRmllbGRLZXkpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEtleSA9IGFzc2VydEZpZWxkS2V5KGZpZWxkLCBtb2RlbEtleSwgbW9kaWZpZWRDb2xsZWN0aW9uLnNsdWcpXG4gICAgICAgICAgc2NoZW1hTWFwW21vZGVsS2V5XS5maWVsZHNbZmllbGRLZXldID0gZmllbGQubmFtZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gc2NoZW1hTWFwXG59XG5cbmZ1bmN0aW9uIGFzc2VydEZpZWxkS2V5KGZpZWxkOiBGbGF0dGVuZWRGaWVsZCwgbW9kZWxLZXk6IGtleW9mIHR5cGVvZiBiYU1vZGVsS2V5LCBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nKSB7XG4gIGNvbnN0IGZpZWxkS2V5ID0gZmllbGQuY3VzdG9tPy5iZXR0ZXJBdXRoRmllbGRLZXkgYXMgc3RyaW5nXG5cbiAgLy8gQXNzZXJ0IHRoYXQgZmllbGRLZXkgaXMgYSB2YWxpZCBrZXkgaW4gdGhlIGJhTW9kZWxGaWVsZEtleXNUb0ZpZWxkTmFtZXMgbWFwcGluZ1xuICBpZiAoIU9iamVjdC52YWx1ZXMoYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lcykuc29tZSgoZmllbGRNYXApID0+IE9iamVjdC5rZXlzKGZpZWxkTWFwKS5pbmNsdWRlcyhmaWVsZEtleSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY3VzdG9tLmJldHRlckF1dGhGaWVsZEtleTogJHtmaWVsZEtleX0gZm9yIGZpZWxkICR7ZmllbGQubmFtZX0gaW4gY29sbGVjdGlvbiAke2NvbGxlY3Rpb25TbHVnfSwgXG4gICAgICAgIG11c3QgYmUgb25lIG9mICR7T2JqZWN0LmtleXMoYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lc1ttb2RlbEtleSBhcyBrZXlvZiB0eXBlb2YgYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lc10pLmpvaW4oJywgJyl9YFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBmaWVsZEtleVxufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCBhIGNvbGxlY3Rpb24gaGFzIGEgdmFsaWQgQmV0dGVyQXV0aCBtb2RlbCBrZXkgYW5kIHJldHVybnMgaXRcbiAqXG4gKiBAcGFyYW0gY29sbGVjdGlvbiAtIFRoZSBjb2xsZWN0aW9uIHRvIGNoZWNrIGZvciBhIEJldHRlckF1dGggbW9kZWwga2V5XG4gKiBAcmV0dXJucyBUaGUgQmV0dGVyQXV0aCBtb2RlbCBrZXlcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGNvbGxlY3Rpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIEJldHRlckF1dGggbW9kZWwga2V5XG4gKi9cbmZ1bmN0aW9uIGFzc2VydE1vZGVsS2V5KGNvbGxlY3Rpb246IENvbGxlY3Rpb25Db25maWcpOiBrZXlvZiB0eXBlb2YgYmFNb2RlbEtleSB7XG4gIGlmICghY29sbGVjdGlvbi5jdXN0b20/LmJldHRlckF1dGhNb2RlbEtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29sbGVjdGlvbiAke2NvbGxlY3Rpb24uc2x1Z30gaXMgbWlzc2luZyBhIGJldHRlckF1dGhNb2RlbEtleSBpbiBpdHMgY3VzdG9tIGZpZWxkYClcbiAgfVxuXG4gIGNvbnN0IG1vZGVsS2V5ID0gY29sbGVjdGlvbi5jdXN0b20uYmV0dGVyQXV0aE1vZGVsS2V5IGFzIGtleW9mIHR5cGVvZiBiYU1vZGVsS2V5XG5cbiAgaWYgKCFPYmplY3QudmFsdWVzKGJhTW9kZWxLZXkpLmluY2x1ZGVzKG1vZGVsS2V5IGFzIGFueSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbGxlY3Rpb24gJHtjb2xsZWN0aW9uLnNsdWd9IGhhcyBhbiBpbnZhbGlkIGJldHRlckF1dGhNb2RlbEtleTogJHttb2RlbEtleX1gKVxuICB9XG5cbiAgcmV0dXJuIG1vZGVsS2V5XG59XG4iXSwibmFtZXMiOlsiYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lcyIsImJhTW9kZWxLZXkiLCJnZXRBdXRoVGFibGVzIiwiZmxhdHRlbkFsbEZpZWxkcyIsImdldERlYWZ1bHRDb2xsZWN0aW9uU2x1ZyIsImdldERlZmF1bHRDb2xsZWN0aW9uU2NoZW1hTWFwIiwicGx1Z2luT3B0aW9ucyIsInRhYmxlcyIsImJldHRlckF1dGhPcHRpb25zIiwibWFwIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrZXkiLCJ0YWJsZSIsImZpZWxkTmFtZXMiLCJmaWVsZHMiLCJrIiwidiIsInR5cGVkS2V5IiwidmFsdWUiLCJjb2xsZWN0aW9uU2x1ZyIsIm1vZGVsS2V5IiwicmVkdWNlIiwiYWNjIiwiZmllbGQiLCJmaWVsZE1hcHBpbmciLCJ0eXBlZEZpZWxkIiwidXNlciIsInJvbGUiLCJidWlsZENvbGxlY3Rpb25TY2hlbWFNYXAiLCJjb2xsZWN0aW9uT3ZlcnJpZGVzIiwidXNlcnMiLCJhY2NvdW50cyIsInNlc3Npb25zIiwidmVyaWZpY2F0aW9ucyIsInBsdWdpbkNvbGxlY3Rpb25PdmVycmlkZXMiLCJkZWZhdWx0Q29sbGVjdGlvblNjaGVtYU1hcCIsImtleXMiLCJsZW5ndGgiLCJzY2hlbWFNYXAiLCJvdmVycmlkZUZ1bmN0aW9uIiwibW9kaWZpZWRDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsInNsdWciLCJhc3NlcnRNb2RlbEtleSIsImZsYXR0ZW5lZEZpZWxkcyIsIkFycmF5IiwiaXNBcnJheSIsImN1c3RvbSIsImJldHRlckF1dGhGaWVsZEtleSIsImZpZWxkS2V5IiwiYXNzZXJ0RmllbGRLZXkiLCJuYW1lIiwidmFsdWVzIiwic29tZSIsImZpZWxkTWFwIiwiaW5jbHVkZXMiLCJFcnJvciIsImpvaW4iLCJiZXR0ZXJBdXRoTW9kZWxLZXkiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLDRCQUE0QixFQUFFQyxVQUFVLFFBQVEsZUFBYztBQUN2RSxTQUFTQyxhQUFhLFFBQVEsaUJBQWdCO0FBSTlDLFNBQVNDLGdCQUFnQixRQUFRLGlCQUFnQjtBQUVqRCxTQUFTQyx3QkFBd0IsUUFBUSx3QkFBdUI7QUFXaEUsT0FBTyxTQUFTQyw4QkFBOEJDLGFBQXNDO0lBQ2xGLE1BQU1DLFNBQVNMLGNBQWNJLGNBQWNFLGlCQUFpQixJQUFJLENBQUM7SUFDakUsTUFBTUMsTUFBTSxDQUFDO0lBQ2JDLE9BQU9DLE9BQU8sQ0FBQ0osUUFBUUssT0FBTyxDQUFDLENBQUMsQ0FBQ0MsS0FBS0MsTUFBTTtRQUMxQyxNQUFNQyxhQUFhTCxPQUFPQyxPQUFPLENBQUNHLE1BQU1FLE1BQU0sRUFBRVAsR0FBRyxDQUFDLENBQUMsQ0FBQ1EsR0FBR0MsRUFBRSxHQUFLRDtRQUNoRSxNQUFNRSxXQUFXTjtRQUNqQixNQUFNTyxRQUFRO1lBQ1pDLGdCQUFnQmpCLHlCQUF5QjtnQkFBRWtCLFVBQVVIO2dCQUFVYjtZQUFjO1lBQzdFVSxRQUFRRCxXQUFXUSxNQUFNLENBQ3ZCLENBQUNDLEtBQUtDO2dCQUNKLElBQ0VO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
@@ -1,3 +0,0 @@
1
- import { type Collection, type PayloadRequest } from 'payload';
2
- export declare const getRequestCollection: (req: PayloadRequest) => Collection;
3
- //# sourceMappingURL=get-requst-collection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-requst-collection.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/plugin/helpers/get-requst-collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAExE,eAAO,MAAM,oBAAoB,GAAI,KAAK,cAAc,KAAG,UAc1D,CAAA"}
@@ -1,14 +0,0 @@
1
- import { APIError } from "payload";
2
- export const getRequestCollection = (req)=>{
3
- const collectionSlug = req.routeParams?.collection;
4
- if (typeof collectionSlug !== 'string') {
5
- throw new APIError(`No collection was specified`, 400);
6
- }
7
- const collection = req.payload.collections[collectionSlug];
8
- if (!collection) {
9
- throw new APIError(`Collection with the slug ${collectionSlug} was not found`, 404);
10
- }
11
- return collection;
12
- };
13
-
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vaGVscGVycy9nZXQtcmVxdXN0LWNvbGxlY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBJRXJyb3IsIHR5cGUgQ29sbGVjdGlvbiwgdHlwZSBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJ3BheWxvYWQnXG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1ZXN0Q29sbGVjdGlvbiA9IChyZXE6IFBheWxvYWRSZXF1ZXN0KTogQ29sbGVjdGlvbiA9PiB7XG4gIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gcmVxLnJvdXRlUGFyYW1zPy5jb2xsZWN0aW9uXG5cbiAgaWYgKHR5cGVvZiBjb2xsZWN0aW9uU2x1ZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgQVBJRXJyb3IoYE5vIGNvbGxlY3Rpb24gd2FzIHNwZWNpZmllZGAsIDQwMClcbiAgfVxuXG4gIGNvbnN0IGNvbGxlY3Rpb24gPSByZXEucGF5bG9hZC5jb2xsZWN0aW9uc1tjb2xsZWN0aW9uU2x1Z11cblxuICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgQVBJRXJyb3IoYENvbGxlY3Rpb24gd2l0aCB0aGUgc2x1ZyAke2NvbGxlY3Rpb25TbHVnfSB3YXMgbm90IGZvdW5kYCwgNDA0KVxuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb25cbn1cbiJdLCJuYW1lcyI6WyJBUElFcnJvciIsImdldFJlcXVlc3RDb2xsZWN0aW9uIiwicmVxIiwiY29sbGVjdGlvblNsdWciLCJyb3V0ZVBhcmFtcyIsImNvbGxlY3Rpb24iLCJwYXlsb2FkIiwiY29sbGVjdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsUUFBOEMsVUFBUztBQUV4RSxPQUFPLE1BQU1DLHVCQUF1QixDQUFDQztJQUNuQyxNQUFNQyxpQkFBaUJELElBQUlFLFdBQVcsRUFBRUM7SUFFeEMsSUFBSSxPQUFPRixtQkFBbUIsVUFBVTtRQUN0QyxNQUFNLElBQUlILFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO0lBQ3BEO0lBRUEsTUFBTUssYUFBYUgsSUFBSUksT0FBTyxDQUFDQyxXQUFXLENBQUNKLGVBQWU7SUFFMUQsSUFBSSxDQUFDRSxZQUFZO1FBQ2YsTUFBTSxJQUFJTCxTQUFTLENBQUMseUJBQXlCLEVBQUVHLGVBQWUsY0FBYyxDQUFDLEVBQUU7SUFDakY7SUFFQSxPQUFPRTtBQUNULEVBQUMifQ==
@@ -1,105 +0,0 @@
1
- type CookiePrefixOptions = 'host' | 'secure';
2
- type CookieOptions = {
3
- /**
4
- * Domain of the cookie
5
- *
6
- * The Domain attribute specifies which server can receive a cookie. If specified, cookies are
7
- * available on the specified server and its subdomains. If the it is not
8
- * specified, the cookies are available on the server that sets it but not on
9
- * its subdomains.
10
- *
11
- * @example
12
- * `domain: "example.com"`
13
- */
14
- domain?: string;
15
- /**
16
- * A lifetime of a cookie. Permanent cookies are deleted after the date specified in the
17
- * Expires attribute:
18
- *
19
- * Expires has been available for longer than Max-Age, however Max-Age is less error-prone, and
20
- * takes precedence when both are set. The rationale behind this is that when you set an
21
- * Expires date and time, they're relative to the client the cookie is being set on. If the
22
- * server is set to a different time, this could cause errors
23
- */
24
- expires?: Date;
25
- /**
26
- * Forbids JavaScript from accessing the cookie, for example, through the Document.cookie
27
- * property. Note that a cookie that has been created with HttpOnly will still be sent with
28
- * JavaScript-initiated requests, for example, when calling XMLHttpRequest.send() or fetch().
29
- * This mitigates attacks against cross-site scripting
30
- */
31
- httpOnly?: boolean;
32
- /**
33
- * Indicates the number of seconds until the cookie expires. A zero or negative number will
34
- * expire the cookie immediately. If both Expires and Max-Age are set, Max-Age has precedence.
35
- *
36
- * @example 604800 - 7 days
37
- */
38
- maxAge?: number;
39
- /**
40
- * Indicates the path that must exist in the requested URL for the browser to send the Cookie
41
- * header.
42
- *
43
- * @example
44
- * "/docs"
45
- * // -> the request paths /docs, /docs/, /docs/Web/, and /docs/Web/HTTP will all match. the request paths /, /fr/docs will not match.
46
- */
47
- path?: string;
48
- /**
49
- * Indicates that the cookie is sent to the server only when a request is made with the https:
50
- * scheme (except on localhost), and therefore, is more resistant to man-in-the-middle attacks.
51
- */
52
- secure?: boolean;
53
- /**
54
- * Controls whether or not a cookie is sent with cross-site requests, providing some protection
55
- * against cross-site request forgery attacks (CSRF).
56
- *
57
- * Strict - Means that the browser sends the cookie only for same-site requests, that is,
58
- * requests originating from the same site that set the cookie. If a request originates from a
59
- * different domain or scheme (even with the same domain), no cookies with the SameSite=Strict
60
- * attribute are sent.
61
- *
62
- * Lax - Means that the cookie is not sent on cross-site requests, such as on requests to load
63
- * images or frames, but is sent when a user is navigating to the origin site from an external
64
- * site (for example, when following a link). This is the default behavior if the SameSite
65
- * attribute is not specified.
66
- *
67
- * None - Means that the browser sends the cookie with both cross-site and same-site requests.
68
- * The Secure attribute must also be set when setting this value.
69
- */
70
- sameSite?: 'Strict' | 'Lax' | 'None' | 'strict' | 'lax' | 'none';
71
- /**
72
- * Indicates that the cookie should be stored using partitioned storage. Note that if this is
73
- * set, the Secure directive must also be set.
74
- *
75
- * @see https://developer.mozilla.org/en-US/docs/Web/Privacy/Privacy_sandbox/Partitioned_cookies
76
- */
77
- partitioned?: boolean;
78
- /**
79
- * Cooke Prefix
80
- *
81
- * - secure: `__Secure-` -> `__Secure-cookie-name`
82
- * - host: `__Host-` -> `__Host-cookie-name`
83
- *
84
- * `secure` must be set to true to use prefixes
85
- */
86
- prefix?: CookiePrefixOptions;
87
- };
88
- export declare const verifySignature: (base64Signature: string, value: string, secret: CryptoKey) => Promise<boolean>;
89
- export declare const signCookieValue: (value: string, secret: string | BufferSource) => Promise<string>;
90
- export declare const serializeCookie: (key: string, value: string, opt?: CookieOptions) => string;
91
- export declare const serializeSignedCookie: (key: string, value: string, secret: string, opt?: CookieOptions) => Promise<string>;
92
- export declare const getCookieKey: (key: string, prefix?: CookiePrefixOptions) => string | undefined;
93
- export declare function tryDecode(str: string): string;
94
- /**
95
- * Parse an HTTP Cookie header string and returning an object of all cookie
96
- * name-value pairs.
97
- *
98
- * Inspired by https://github.com/unjs/cookie-es/blob/main/src/cookie/parse.ts
99
- *
100
- * @param str the string representing a `Cookie` header value
101
- */
102
- export declare function parseCookies(str: string): Map<string, string>;
103
- export declare const getSignedCookie: (key: string, secret: string, headers: Headers, prefix?: CookiePrefixOptions) => Promise<string | false | null>;
104
- export {};
105
- //# sourceMappingURL=serialize-cookie.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialize-cookie.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/plugin/helpers/serialize-cookie.ts"],"names":[],"mappings":"AAEA,KAAK,mBAAmB,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE5C,KAAK,aAAa,GAAG;IACnB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,IAAI,CAAA;IACd;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;IAChE;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,iBAAiB,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,SAAS,KAAG,OAAO,CAAC,OAAO,CAWhH,CAAA;AAyFD,eAAO,MAAM,eAAe,GAAU,OAAO,MAAM,EAAE,QAAQ,MAAM,GAAG,YAAY,oBAMjF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,aAAa,WAG9E,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,aAAa,oBAG1G,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,SAAS,mBAAmB,uBAYrE,CAAA;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,UAMpC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,uBAqCvC;AAED,eAAO,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,SAAS,OAAO,EAAE,SAAS,mBAAmB,mCAuBhH,CAAA"}
@@ -1,186 +0,0 @@
1
- import { subtle } from "uncrypto";
2
- export const verifySignature = async (base64Signature, value, secret)=>{
3
- try {
4
- const signatureBinStr = atob(base64Signature);
5
- const signature = new Uint8Array(signatureBinStr.length);
6
- for(let i = 0, len = signatureBinStr.length; i < len; i++){
7
- signature[i] = signatureBinStr.charCodeAt(i);
8
- }
9
- return await subtle.verify(algorithm, secret, signature, new TextEncoder().encode(value));
10
- } catch (e) {
11
- return false;
12
- }
13
- };
14
- const _serialize = (key, value, opt = {})=>{
15
- let cookie;
16
- if (opt?.prefix === 'secure') {
17
- cookie = `${`__Secure-${key}`}=${value}`;
18
- } else if (opt?.prefix === 'host') {
19
- cookie = `${`__Host-${key}`}=${value}`;
20
- } else {
21
- cookie = `${key}=${value}`;
22
- }
23
- if (key.startsWith('__Secure-') && !opt.secure) {
24
- opt.secure = true;
25
- }
26
- if (key.startsWith('__Host-')) {
27
- if (!opt.secure) {
28
- opt.secure = true;
29
- }
30
- if (opt.path !== '/') {
31
- opt.path = '/';
32
- }
33
- if (opt.domain) {
34
- opt.domain = undefined;
35
- }
36
- }
37
- if (opt && typeof opt.maxAge === 'number' && opt.maxAge >= 0) {
38
- if (opt.maxAge > 34560000) {
39
- throw new Error('Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.');
40
- }
41
- cookie += `; Max-Age=${Math.floor(opt.maxAge)}`;
42
- }
43
- if (opt.domain && opt.prefix !== 'host') {
44
- cookie += `; Domain=${opt.domain}`;
45
- }
46
- if (opt.path) {
47
- cookie += `; Path=${opt.path}`;
48
- }
49
- if (opt.expires) {
50
- if (opt.expires.getTime() - Date.now() > 34560000_000) {
51
- throw new Error('Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.');
52
- }
53
- cookie += `; Expires=${opt.expires.toUTCString()}`;
54
- }
55
- if (opt.httpOnly) {
56
- cookie += '; HttpOnly';
57
- }
58
- if (opt.secure) {
59
- cookie += '; Secure';
60
- }
61
- if (opt.sameSite) {
62
- cookie += `; SameSite=${opt.sameSite.charAt(0).toUpperCase() + opt.sameSite.slice(1)}`;
63
- }
64
- if (opt.partitioned) {
65
- if (!opt.secure) {
66
- opt.secure = true;
67
- }
68
- cookie += '; Partitioned';
69
- }
70
- return cookie;
71
- };
72
- const algorithm = {
73
- name: 'HMAC',
74
- hash: 'SHA-256'
75
- };
76
- const getCryptoKey = async (secret)=>{
77
- const secretBuf = typeof secret === 'string' ? new TextEncoder().encode(secret) : secret;
78
- return await subtle.importKey('raw', secretBuf, algorithm, false, [
79
- 'sign',
80
- 'verify'
81
- ]);
82
- };
83
- const makeSignature = async (value, secret)=>{
84
- const key = await getCryptoKey(secret);
85
- const signature = await subtle.sign(algorithm.name, key, new TextEncoder().encode(value));
86
- // the returned base64 encoded signature will always be 44 characters long and end with one or two equal signs
87
- return btoa(String.fromCharCode(...new Uint8Array(signature)));
88
- };
89
- export const signCookieValue = async (value, secret)=>{
90
- const signature = await makeSignature(value, secret);
91
- value = `${value}.${signature}`;
92
- value = encodeURIComponent(value);
93
- value = decodeURIComponent(value);
94
- return value;
95
- };
96
- export const serializeCookie = (key, value, opt)=>{
97
- value = encodeURIComponent(value);
98
- return _serialize(key, value, opt);
99
- };
100
- export const serializeSignedCookie = async (key, value, secret, opt)=>{
101
- value = await signCookieValue(value, secret);
102
- return _serialize(key, value, opt);
103
- };
104
- export const getCookieKey = (key, prefix)=>{
105
- let finalKey = key;
106
- if (prefix) {
107
- if (prefix === 'secure') {
108
- finalKey = '__Secure-' + key;
109
- } else if (prefix === 'host') {
110
- finalKey = '__Host-' + key;
111
- } else {
112
- return undefined;
113
- }
114
- }
115
- return finalKey;
116
- };
117
- export function tryDecode(str) {
118
- try {
119
- return str.includes('%') ? decodeURIComponent(str) : str;
120
- } catch {
121
- return str;
122
- }
123
- }
124
- /**
125
- * Parse an HTTP Cookie header string and returning an object of all cookie
126
- * name-value pairs.
127
- *
128
- * Inspired by https://github.com/unjs/cookie-es/blob/main/src/cookie/parse.ts
129
- *
130
- * @param str the string representing a `Cookie` header value
131
- */ export function parseCookies(str) {
132
- if (typeof str !== 'string') {
133
- throw new TypeError('argument str must be a string');
134
- }
135
- const cookies = new Map();
136
- let index = 0;
137
- while(index < str.length){
138
- const eqIdx = str.indexOf('=', index);
139
- if (eqIdx === -1) {
140
- break;
141
- }
142
- let endIdx = str.indexOf(';', index);
143
- if (endIdx === -1) {
144
- endIdx = str.length;
145
- } else if (endIdx < eqIdx) {
146
- index = str.lastIndexOf(';', eqIdx - 1) + 1;
147
- continue;
148
- }
149
- const key = str.slice(index, eqIdx).trim();
150
- if (!cookies.has(key)) {
151
- let val = str.slice(eqIdx + 1, endIdx).trim();
152
- if (val.codePointAt(0) === 0x22) {
153
- val = val.slice(1, -1);
154
- }
155
- cookies.set(key, tryDecode(val));
156
- }
157
- index = endIdx + 1;
158
- }
159
- return cookies;
160
- }
161
- export const getSignedCookie = async (key, secret, headers, prefix)=>{
162
- const finalKey = getCookieKey(key, prefix);
163
- if (!finalKey) {
164
- return null;
165
- }
166
- const cookieHeader = headers.get('cookie');
167
- const parsedCookies = cookieHeader ? parseCookies(cookieHeader) : undefined;
168
- const value = parsedCookies?.get(finalKey);
169
- if (!value) {
170
- return null;
171
- }
172
- const signatureStartPos = value.lastIndexOf('.');
173
- if (signatureStartPos < 1) {
174
- return null;
175
- }
176
- const signedValue = value.substring(0, signatureStartPos);
177
- const signature = value.substring(signatureStartPos + 1);
178
- if (signature.length !== 44 || !signature.endsWith('=')) {
179
- return null;
180
- }
181
- const secretKey = await getCryptoKey(secret);
182
- const isVerified = await verifySignature(signature, signedValue, secretKey);
183
- return isVerified ? signedValue : false;
184
- };
185
-
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vaGVscGVycy9zZXJpYWxpemUtY29va2llLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN1YnRsZSB9IGZyb20gJ3VuY3J5cHRvJ1xuXG50eXBlIENvb2tpZVByZWZpeE9wdGlvbnMgPSAnaG9zdCcgfCAnc2VjdXJlJ1xuXG50eXBlIENvb2tpZU9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBEb21haW4gb2YgdGhlIGNvb2tpZVxuICAgKlxuICAgKiBUaGUgRG9tYWluIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hpY2ggc2VydmVyIGNhbiByZWNlaXZlIGEgY29va2llLiBJZiBzcGVjaWZpZWQsIGNvb2tpZXMgYXJlXG4gICAqIGF2YWlsYWJsZSBvbiB0aGUgc3BlY2lmaWVkIHNlcnZlciBhbmQgaXRzIHN1YmRvbWFpbnMuIElmIHRoZSBpdCBpcyBub3RcbiAgICogc3BlY2lmaWVkLCB0aGUgY29va2llcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIgdGhhdCBzZXRzIGl0IGJ1dCBub3Qgb25cbiAgICogaXRzIHN1YmRvbWFpbnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBkb21haW46IFwiZXhhbXBsZS5jb21cImBcbiAgICovXG4gIGRvbWFpbj86IHN0cmluZ1xuICAvKipcbiAgICogQSBsaWZldGltZSBvZiBhIGNvb2tpZS4gUGVybWFuZW50IGNvb2tpZXMgYXJlIGRlbGV0ZWQgYWZ0ZXIgdGhlIGRhdGUgc3BlY2lmaWVkIGluIHRoZVxuICAgKiBFeHBpcmVzIGF0dHJpYnV0ZTpcbiAgICpcbiAgICogRXhwaXJlcyBoYXMgYmVlbiBhdmFpbGFibGUgZm9yIGxvbmdlciB0aGFuIE1heC1BZ2UsIGhvd2V2ZXIgTWF4LUFnZSBpcyBsZXNzIGVycm9yLXByb25lLCBhbmRcbiAgICogdGFrZXMgcHJlY2VkZW5jZSB3aGVuIGJvdGggYXJlIHNldC4gVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0aGF0IHdoZW4geW91IHNldCBhblxuICAgKiBFeHBpcmVzIGRhdGUgYW5kIHRpbWUsIHRoZXkncmUgcmVsYXRpdmUgdG8gdGhlIGNsaWVudCB0aGUgY29va2llIGlzIGJlaW5nIHNldCBvbi4gSWYgdGhlXG4gICAqIHNlcnZlciBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdGltZSwgdGhpcyBjb3VsZCBjYXVzZSBlcnJvcnNcbiAgICovXG4gIGV4cGlyZXM/OiBEYXRlXG4gIC8qKlxuICAgKiBGb3JiaWRzIEphdmFTY3JpcHQgZnJvbSBhY2Nlc3NpbmcgdGhlIGNvb2tpZSwgZm9yIGV4YW1wbGUsIHRocm91Z2ggdGhlIERvY3VtZW50LmNvb2tpZVxuICAgKiBwcm9wZXJ0eS4gTm90ZSB0aGF0IGEgY29va2llIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIEh0dHBPbmx5IHdpbGwgc3RpbGwgYmUgc2VudCB3aXRoXG4gICAqIEphdmFTY3JpcHQtaW5pdGlhdGVkIHJlcXVlc3RzLCBmb3IgZXhhbXBsZSwgd2hlbiBjYWxsaW5nIFhNTEh0dHBSZXF1ZXN0LnNlbmQoKSBvciBmZXRjaCgpLlxuICAgKiBUaGlzIG1pdGlnYXRlcyBhdHRhY2tzIGFnYWluc3QgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmdcbiAgICovXG4gIGh0dHBPbmx5PzogYm9vbGVhblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgY29va2llIGV4cGlyZXMuIEEgemVybyBvciBuZWdhdGl2ZSBudW1iZXIgd2lsbFxuICAgKiBleHBpcmUgdGhlIGNvb2tpZSBpbW1lZGlhdGVseS4gSWYgYm90aCBFeHBpcmVzIGFuZCBNYXgtQWdlIGFyZSBzZXQsIE1heC1BZ2UgaGFzIHByZWNlZGVuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlIDYwNDgwMCAtIDcgZGF5c1xuICAgKi9cbiAgbWF4QWdlPzogbnVtYmVyXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHBhdGggdGhhdCBtdXN0IGV4aXN0IGluIHRoZSByZXF1ZXN0ZWQgVVJMIGZvciB0aGUgYnJvd3NlciB0byBzZW5kIHRoZSBDb29raWVcbiAgICogaGVhZGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBcIi9kb2NzXCJcbiAgICogLy8gLT4gdGhlIHJlcXVlc3QgcGF0aHMgL2RvY3MsIC9kb2NzLywgL2RvY3MvV2ViLywgYW5kIC9kb2NzL1dlYi9IVFRQIHdpbGwgYWxsIG1hdGNoLiB0aGUgcmVxdWVzdCBwYXRocyAvLCAvZnIvZG9jcyB3aWxsIG5vdCBtYXRjaC5cbiAgICovXG4gIHBhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBjb29raWUgaXMgc2VudCB0byB0aGUgc2VydmVyIG9ubHkgd2hlbiBhIHJlcXVlc3QgaXMgbWFkZSB3aXRoIHRoZSBodHRwczpcbiAgICogc2NoZW1lIChleGNlcHQgb24gbG9jYWxob3N0KSwgYW5kIHRoZXJlZm9yZSwgaXMgbW9yZSByZXNpc3RhbnQgdG8gbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcy5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IGEgY29va2llIGlzIHNlbnQgd2l0aCBjcm9zcy1zaXRlIHJlcXVlc3RzLCBwcm92aWRpbmcgc29tZSBwcm90ZWN0aW9uXG4gICAqIGFnYWluc3QgY3Jvc3Mtc2l0ZSByZXF1ZXN0IGZvcmdlcnkgYXR0YWNrcyAoQ1NSRikuXG4gICAqXG4gICAqIFN0cmljdCAtICBNZWFucyB0aGF0IHRoZSBicm93c2VyIHNlbmRzIHRoZSBjb29raWUgb25seSBmb3Igc2FtZS1zaXRlIHJlcXVlc3RzLCB0aGF0IGlzLFxuICAgKiByZXF1ZXN0cyBvcmlnaW5hdGluZyBmcm9tIHRoZSBzYW1lIHNpdGUgdGhhdCBzZXQgdGhlIGNvb2tpZS4gSWYgYSByZXF1ZXN0IG9yaWdpbmF0ZXMgZnJvbSBhXG4gICAqIGRpZmZlcmVudCBkb21haW4gb3Igc2NoZW1lIChldmVuIHdpdGggdGhlIHNhbWUgZG9tYWluKSwgbm8gY29va2llcyB3aXRoIHRoZSBTYW1lU2l0ZT1TdHJpY3RcbiAgICogYXR0cmlidXRlIGFyZSBzZW50LlxuICAgKlxuICAgKiBMYXggLSBNZWFucyB0aGF0IHRoZSBjb29raWUgaXMgbm90IHNlbnQgb24gY3Jvc3Mtc2l0ZSByZXF1ZXN0cywgc3VjaCBhcyBvbiByZXF1ZXN0cyB0byBsb2FkXG4gICAqIGltYWdlcyBvciBmcmFtZXMsIGJ1dCBpcyBzZW50IHdoZW4gYSB1c2VyIGlzIG5hdmlnYXRpbmcgdG8gdGhlIG9yaWdpbiBzaXRlIGZyb20gYW4gZXh0ZXJuYWxcbiAgICogc2l0ZSAoZm9yIGV4YW1wbGUsIHdoZW4gZm9sbG93aW5nIGEgbGluaykuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaWYgdGhlIFNhbWVTaXRlXG4gICAqIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBOb25lIC0gTWVhbnMgdGhhdCB0aGUgYnJvd3NlciBzZW5kcyB0aGUgY29va2llIHdpdGggYm90aCBjcm9zcy1zaXRlIGFuZCBzYW1lLXNpdGUgcmVxdWVzdHMuXG4gICAqIFRoZSBTZWN1cmUgYXR0cmlidXRlIG11c3QgYWxzbyBiZSBzZXQgd2hlbiBzZXR0aW5nIHRoaXMgdmFsdWUuXG4gICAqL1xuICBzYW1lU2l0ZT86ICdTdHJpY3QnIHwgJ0xheCcgfCAnTm9uZScgfCAnc3RyaWN0JyB8ICdsYXgnIHwgJ25vbmUnXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY29va2llIHNob3VsZCBiZSBzdG9yZWQgdXNpbmcgcGFydGl0aW9uZWQgc3RvcmFnZS4gTm90ZSB0aGF0IGlmIHRoaXMgaXNcbiAgICogc2V0LCB0aGUgU2VjdXJlIGRpcmVjdGl2ZSBtdXN0IGFsc28gYmUgc2V0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1ByaXZhY3kvUHJpdmFjeV9zYW5kYm94L1BhcnRpdGlvbmVkX2Nvb2tpZXNcbiAgICovXG4gIHBhcnRpdGlvbmVkPzogYm9vbGVhblxuICAvKipcbiAgICogQ29va2UgUHJlZml4XG4gICAqXG4gICAqIC0gc2VjdXJlOiBgX19TZWN1cmUtYCAtPiBgX19TZWN1cmUtY29va2llLW5hbWVgXG4gICAqIC0gaG9zdDogYF9fSG9zdC1gIC0+IGBfX0hvc3QtY29va2llLW5hbWVgXG4gICAqXG4gICAqIGBzZWN1cmVgIG11c3QgYmUgc2V0IHRvIHRydWUgdG8gdXNlIHByZWZpeGVzXG4gICAqL1xuICBwcmVmaXg/OiBDb29raWVQcmVmaXhPcHRpb25zXG59XG5cbmV4cG9ydCBjb25zdCB2ZXJpZnlTaWduYXR1cmUgPSBhc3luYyAoYmFzZTY0U2lnbmF0dXJlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNlY3JldDogQ3J5cHRvS2V5KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlQmluU3RyID0gYXRvYihiYXNlNjRTaWduYXR1cmUpXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlQmluU3RyLmxlbmd0aClcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2lnbmF0dXJlQmluU3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBzaWduYXR1cmVbaV0gPSBzaWduYXR1cmVCaW5TdHIuY2hhckNvZGVBdChpKVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VidGxlLnZlcmlmeShhbGdvcml0aG0sIHNlY3JldCwgc2lnbmF0dXJlLCBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuY29uc3QgX3NlcmlhbGl6ZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgb3B0OiBDb29raWVPcHRpb25zID0ge30pID0+IHtcbiAgbGV0IGNvb2tpZTogc3RyaW5nXG5cbiAgaWYgKG9wdD8ucHJlZml4ID09PSAnc2VjdXJlJykge1xuICAgIGNvb2tpZSA9IGAke2BfX1NlY3VyZS0ke2tleX1gfT0ke3ZhbHVlfWBcbiAgfSBlbHNlIGlmIChvcHQ/LnByZWZpeCA9PT0gJ2hvc3QnKSB7XG4gICAgY29va2llID0gYCR7YF9fSG9zdC0ke2tleX1gfT0ke3ZhbHVlfWBcbiAgfSBlbHNlIHtcbiAgICBjb29raWUgPSBgJHtrZXl9PSR7dmFsdWV9YFxuICB9XG5cbiAgaWYgKGtleS5zdGFydHNXaXRoKCdfX1NlY3VyZS0nKSAmJiAhb3B0LnNlY3VyZSkge1xuICAgIG9wdC5zZWN1cmUgPSB0cnVlXG4gIH1cblxuICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGlmICghb3B0LnNlY3VyZSkge1xuICAgICAgb3B0LnNlY3VyZSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAob3B0LnBhdGggIT09ICcvJykge1xuICAgICAgb3B0LnBhdGggPSAnLydcbiAgICB9XG5cbiAgICBpZiAob3B0LmRvbWFpbikge1xuICAgICAgb3B0LmRvbWFpbiA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHQgJiYgdHlwZW9mIG9wdC5tYXhBZ2UgPT09ICdudW1iZXInICYmIG9wdC5tYXhBZ2UgPj0gMCkge1xuICAgIGlmIChvcHQubWF4QWdlID4gMzQ1NjAwMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29va2llcyBNYXgtQWdlIFNIT1VMRCBOT1QgYmUgZ3JlYXRlciB0aGFuIDQwMCBkYXlzICgzNDU2MDAwMCBzZWNvbmRzKSBpbiBkdXJhdGlvbi4nKVxuICAgIH1cbiAgICBjb29raWUgKz0gYDsgTWF4LUFnZT0ke01hdGguZmxvb3Iob3B0Lm1heEFnZSl9YFxuICB9XG5cbiAgaWYgKG9wdC5kb21haW4gJiYgb3B0LnByZWZpeCAhPT0gJ2hvc3QnKSB7XG4gICAgY29va2llICs9IGA7IERvbWFpbj0ke29wdC5kb21haW59YFxuICB9XG5cbiAgaWYgKG9wdC5wYXRoKSB7XG4gICAgY29va2llICs9IGA7IFBhdGg9JHtvcHQucGF0aH1gXG4gIH1cblxuICBpZiAob3B0LmV4cGlyZXMpIHtcbiAgICBpZiAob3B0LmV4cGlyZXMuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSA+IDM0NTYwMDAwXzAwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb29raWVzIEV4cGlyZXMgU0hPVUxEIE5PVCBiZSBncmVhdGVyIHRoYW4gNDAwIGRheXMgKDM0NTYwMDAwIHNlY29uZHMpIGluIHRoZSBmdXR1cmUuJylcbiAgICB9XG4gICAgY29va2llICs9IGA7IEV4cGlyZXM9JHtvcHQuZXhwaXJlcy50b1VUQ1N0cmluZygpfWBcbiAgfVxuXG4gIGlmIChvcHQuaHR0cE9ubHkpIHtcbiAgICBjb29raWUgKz0gJzsgSHR0cE9ubHknXG4gIH1cblxuICBpZiAob3B0LnNlY3VyZSkge1xuICAgIGNvb2tpZSArPSAnOyBTZWN1cmUnXG4gIH1cblxuICBpZiAob3B0LnNhbWVTaXRlKSB7XG4gICAgY29va2llICs9IGA7IFNhbWVTaXRlPSR7b3B0LnNhbWVTaXRlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgb3B0LnNhbWVTaXRlLnNsaWNlKDEpfWBcbiAgfVxuXG4gIGlmIChvcHQucGFydGl0aW9uZWQpIHtcbiAgICBpZiAoIW9wdC5zZWN1cmUpIHtcbiAgICAgIG9wdC5zZWN1cmUgPSB0cnVlXG4gICAgfVxuICAgIGNvb2tpZSArPSAnOyBQYXJ0aXRpb25lZCdcbiAgfVxuXG4gIHJldHVybiBjb29raWVcbn1cblxuY29uc3QgYWxnb3JpdGhtID0geyBuYW1lOiAnSE1BQycsIGhhc2g6ICdTSEEtMjU2JyB9XG5cbmNvbnN0IGdldENyeXB0b0tleSA9IGFzeW5jIChzZWNyZXQ6IHN0cmluZyB8IEJ1ZmZlclNvdXJjZSkgPT4ge1xuICBjb25zdCBzZWNyZXRCdWYgPSB0eXBlb2Ygc2VjcmV0ID09PSAnc3RyaW5nJyA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzZWNyZXQpIDogc2VjcmV0XG4gIHJldHVybiBhd2FpdCBzdWJ0bGUuaW1wb3J0S2V5KCdyYXcnLCBzZWNyZXRCdWYsIGFsZ29yaXRobSwgZmFsc2UsIFsnc2lnbicsICd2ZXJpZnknXSlcbn1cblxuY29uc3QgbWFrZVNpZ25hdHVyZSA9IGFzeW5jICh2YWx1ZTogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyB8IEJ1ZmZlclNvdXJjZSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGtleSA9IGF3YWl0IGdldENyeXB0b0tleShzZWNyZXQpXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHN1YnRsZS5zaWduKGFsZ29yaXRobS5uYW1lLCBrZXksIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2YWx1ZSkpXG4gIC8vIHRoZSByZXR1cm5lZCBiYXNlNjQgZW5jb2RlZCBzaWduYXR1cmUgd2lsbCBhbHdheXMgYmUgNDQgY2hhcmFjdGVycyBsb25nIGFuZCBlbmQgd2l0aCBvbmUgb3IgdHdvIGVxdWFsIHNpZ25zXG4gIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ubmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSkpXG59XG5cbmV4cG9ydCBjb25zdCBzaWduQ29va2llVmFsdWUgPSBhc3luYyAodmFsdWU6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcgfCBCdWZmZXJTb3VyY2UpID0+IHtcbiAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgbWFrZVNpZ25hdHVyZSh2YWx1ZSwgc2VjcmV0KVxuICB2YWx1ZSA9IGAke3ZhbHVlfS4ke3NpZ25hdHVyZX1gXG4gIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKVxuICB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVDb29raWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdD86IENvb2tpZU9wdGlvbnMpID0+IHtcbiAgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXG4gIHJldHVybiBfc2VyaWFsaXplKGtleSwgdmFsdWUsIG9wdClcbn1cblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVNpZ25lZENvb2tpZSA9IGFzeW5jIChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcsIG9wdD86IENvb2tpZU9wdGlvbnMpID0+IHtcbiAgdmFsdWUgPSBhd2FpdCBzaWduQ29va2llVmFsdWUodmFsdWUsIHNlY3JldClcbiAgcmV0dXJuIF9zZXJpYWxpemUoa2V5LCB2YWx1ZSwgb3B0KVxufVxuXG5leHBvcnQgY29uc3QgZ2V0Q29va2llS2V5ID0gKGtleTogc3RyaW5nLCBwcmVmaXg/OiBDb29raWVQcmVmaXhPcHRpb25zKSA9PiB7XG4gIGxldCBmaW5hbEtleSA9IGtleVxuICBpZiAocHJlZml4KSB7XG4gICAgaWYgKHByZWZpeCA9PT0gJ3NlY3VyZScpIHtcbiAgICAgIGZpbmFsS2V5ID0gJ19fU2VjdXJlLScgKyBrZXlcbiAgICB9IGVsc2UgaWYgKHByZWZpeCA9PT0gJ2hvc3QnKSB7XG4gICAgICBmaW5hbEtleSA9ICdfX0hvc3QtJyArIGtleVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG4gIHJldHVybiBmaW5hbEtleVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5RGVjb2RlKHN0cjogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN0ci5pbmNsdWRlcygnJScpID8gZGVjb2RlVVJJQ29tcG9uZW50KHN0cikgOiBzdHJcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHN0clxuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYW4gSFRUUCBDb29raWUgaGVhZGVyIHN0cmluZyBhbmQgcmV0dXJuaW5nIGFuIG9iamVjdCBvZiBhbGwgY29va2llXG4gKiBuYW1lLXZhbHVlIHBhaXJzLlxuICpcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS91bmpzL2Nvb2tpZS1lcy9ibG9iL21haW4vc3JjL2Nvb2tpZS9wYXJzZS50c1xuICpcbiAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgYSBgQ29va2llYCBoZWFkZXIgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29va2llcyhzdHI6IHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzdHIgbXVzdCBiZSBhIHN0cmluZycpXG4gIH1cblxuICBjb25zdCBjb29raWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpXG5cbiAgbGV0IGluZGV4ID0gMFxuICB3aGlsZSAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgY29uc3QgZXFJZHggPSBzdHIuaW5kZXhPZignPScsIGluZGV4KVxuXG4gICAgaWYgKGVxSWR4ID09PSAtMSkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBsZXQgZW5kSWR4ID0gc3RyLmluZGV4T2YoJzsnLCBpbmRleClcblxuICAgIGlmIChlbmRJZHggPT09IC0xKSB7XG4gICAgICBlbmRJZHggPSBzdHIubGVuZ3RoXG4gICAgfSBlbHNlIGlmIChlbmRJZHggPCBlcUlkeCkge1xuICAgICAgaW5kZXggPSBzdHIubGFzdEluZGV4T2YoJzsnLCBlcUlkeCAtIDEpICsgMVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBzdHIuc2xpY2UoaW5kZXgsIGVxSWR4KS50cmltKClcbiAgICBpZiAoIWNvb2tpZXMuaGFzKGtleSkpIHtcbiAgICAgIGxldCB2YWwgPSBzdHIuc2xpY2UoZXFJZHggKyAxLCBlbmRJZHgpLnRyaW0oKVxuICAgICAgaWYgKHZhbC5jb2RlUG9pbnRBdCgwKSA9PT0gMHgyMikge1xuICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMSwgLTEpXG4gICAgICB9XG4gICAgICBjb29raWVzLnNldChrZXksIHRyeURlY29kZSh2YWwpKVxuICAgIH1cblxuICAgIGluZGV4ID0gZW5kSWR4ICsgMVxuICB9XG5cbiAgcmV0dXJuIGNvb2tpZXNcbn1cblxuZXhwb3J0IGNvbnN0IGdldFNpZ25lZENvb2tpZSA9IGFzeW5jIChrZXk6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcsIGhlYWRlcnM6IEhlYWRlcnMsIHByZWZpeD86IENvb2tpZVByZWZpeE9wdGlvbnMpID0+IHtcbiAgY29uc3QgZmluYWxLZXkgPSBnZXRDb29raWVLZXkoa2V5LCBwcmVmaXgpXG4gIGlmICghZmluYWxLZXkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGNvb2tpZUhlYWRlciA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBwYXJzZWRDb29raWVzID0gY29va2llSGVhZGVyID8gcGFyc2VDb29raWVzKGNvb2tpZUhlYWRlcikgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsdWUgPSBwYXJzZWRDb29raWVzPy5nZXQoZmluYWxLZXkpXG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHNpZ25hdHVyZVN0YXJ0UG9zID0gdmFsdWUubGFzdEluZGV4T2YoJy4nKVxuICBpZiAoc2lnbmF0dXJlU3RhcnRQb3MgPCAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBzaWduZWRWYWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBzaWduYXR1cmVTdGFydFBvcylcbiAgY29uc3Qgc2lnbmF0dXJlID0gdmFsdWUuc3Vic3RyaW5nKHNpZ25hdHVyZVN0YXJ0UG9zICsgMSlcbiAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDQ0IHx8ICFzaWduYXR1cmUuZW5kc1dpdGgoJz0nKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3Qgc2VjcmV0S2V5ID0gYXdhaXQgZ2V0Q3J5cHRvS2V5KHNlY3JldClcbiAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IHZlcmlmeVNpZ25hdHVyZShzaWduYXR1cmUsIHNpZ25lZFZhbHVlLCBzZWNyZXRLZXkpXG4gIHJldHVybiBpc1ZlcmlmaWVkID8gc2lnbmVkVmFsdWUgOiBmYWxzZVxufVxuIl0sIm5hbWVzIjpbInN1YnRsZSIsInZlcmlmeVNpZ25hdHVyZSIsImJhc2U2NFNpZ25hdHVyZSIsInZhbHVlIiwic2VjcmV0Iiwic2lnbmF0dXJlQmluU3RyIiwiYXRvYiIsInNpZ25hdHVyZSIsIlVpbnQ4QXJyYXkiLCJsZW5ndGgiLCJpIiwibGVuIiwiY2hhckNvZGVBdCIsInZlcmlmeSIsImFsZ29yaXRobSIsIlRleHRFbmNvZGVyIiwiZW5jb2RlIiwiZSIsIl9zZXJpYWxpemUiLCJrZXkiLCJvcHQiLCJjb29raWUiLCJwcmVmaXgiLCJzdGFydHNXaXRoIiwic2VjdXJlIiwicGF0aCIsImRvbWFpbiIsInVuZGVmaW5lZCIsIm1heEFnZSIsIkVycm9yIiwiTWF0aCIsImZsb29yIiwiZXhwaXJlcyIsImdldFRpbWUiLCJEYXRlIiwibm93IiwidG9VVENTdHJpbmciLCJodHRwT25seSIsInNhbWVTaXRlIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInBhcnRpdGlvbmVkIiwibmFtZSIsImhhc2giLCJnZXRDcnlwdG9LZXkiLCJzZWNyZXRCdWYiLCJpbXBvcnRLZXkiLCJtYWtlU2lnbmF0dXJlIiwic2lnbiIsImJ0b2EiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJzaWduQ29va2llVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemVDb29raWUiLCJzZXJpYWxpemVTaWduZWRDb29raWUiLCJnZXRDb29raWVLZXkiLCJmaW5hbEtleSIsInRyeURlY29kZSIsInN0ciIsImluY2x1ZGVzIiwicGFyc2VDb29raWVzIiwiVHlwZUVycm9yIiwiY29va2llcyIsIk1hcCIsImluZGV4IiwiZXFJZHgiLCJpbmRleE9mIiwiZW5kSWR4IiwibGFzdEluZGV4T2YiLCJ0cmltIiwiaGFzIiwidmFsIiwiY29kZVBvaW50QXQiLCJzZXQiLCJnZXRTaWduZWRDb29raWUiLCJoZWFkZXJzIiwiY29va2llSGVhZGVyIiwiZ2V0IiwicGFyc2VkQ29va2llcyIsInNpZ25hdHVyZVN0YXJ0UG9zIiwic2lnbmVkVmFsdWUiLCJzdWJzdHJpbmciLCJlbmRzV2l0aCIsInNlY3JldEtleSIsImlzVmVyaWZpZWQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxXQUFVO0FBMkZqQyxPQUFPLE1BQU1DLGtCQUFrQixPQUFPQyxpQkFBeUJDLE9BQWVDO0lBQzVFLElBQUk7UUFDRixNQUFNQyxrQkFBa0JDLEtBQUtKO1FBQzdCLE1BQU1LLFlBQVksSUFBSUMsV0FBV0gsZ0JBQWdCSSxNQUFNO1FBQ3ZELElBQUssSUFBSUMsSUFBSSxHQUFHQyxNQUFNTixnQkFBZ0JJLE1BQU0sRUFBRUMsSUFBSUMsS0FBS0QsSUFBSztZQUMxREgsU0FBUyxDQUFDRyxFQUFFLEdBQUdMLGdCQUFnQk8sVUFBVSxDQUFDRjtRQUM1QztRQUNBLE9BQU8sTUFBTVYsT0FBT2EsTUFBTSxDQUFDQyxXQUFXVixRQUFRRyxXQUFXLElBQUlRLGNBQWNDLE1BQU0sQ0FBQ2I7SUFDcEYsRUFBRSxPQUFPYyxHQUFHO1FBQ1YsT0FBTztJQUNUO0FBQ0YsRUFBQztBQUVELE1BQU1DLGFBQWEsQ0FBQ0MsS0FBYWhCLE9BQWVpQixNQUFxQixDQUFDLENBQUM7SUFDckUsSUFBSUM7SUFFSixJQUFJRCxLQUFLRSxXQUFXLFVBQVU7UUFDNUJELFNBQVMsR0FBRyxDQUFDLFNBQVMsRUFBRUYsS0FBSyxDQUFDLENBQUMsRUFBRWhCLE9BQU87SUFDMUMsT0FBTyxJQUFJaUIsS0FBS0UsV0FBVyxRQUFRO1FBQ2pDRCxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUVGLEtBQUssQ0FBQyxDQUFDLEVBQUVoQixPQUFPO0lBQ3hDLE9BQU87UUFDTGtCLFNBQVMsR0FBR0YsSUFBSSxDQUFDLEVBQUVoQixPQUFPO0lBQzVCO0lBRUEsSUFBSWdCLElBQUlJLFVB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