@authhero/aws-adapter 0.36.13 → 0.36.15

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 (50) hide show
  1. package/dist/aws-adapter.cjs +1 -0
  2. package/dist/aws-adapter.d.ts +393 -0
  3. package/dist/aws-adapter.mjs +2882 -0
  4. package/dist/tsconfig.types.tsbuildinfo +1 -0
  5. package/dist/types/adapters/actionExecutions.d.ts +9 -0
  6. package/dist/types/adapters/actionVersions.d.ts +8 -0
  7. package/dist/types/adapters/actions.d.ts +9 -0
  8. package/dist/types/adapters/authenticationMethods.d.ts +3 -0
  9. package/dist/types/adapters/branding.d.ts +3 -0
  10. package/dist/types/adapters/clientConnections.d.ts +3 -0
  11. package/dist/types/adapters/clientGrants.d.ts +3 -0
  12. package/dist/types/adapters/clientRegistrationTokens.d.ts +3 -0
  13. package/dist/types/adapters/clients.d.ts +3 -0
  14. package/dist/types/adapters/codes.d.ts +3 -0
  15. package/dist/types/adapters/connections.d.ts +3 -0
  16. package/dist/types/adapters/customDomains.d.ts +3 -0
  17. package/dist/types/adapters/customText.d.ts +3 -0
  18. package/dist/types/adapters/emailProviders.d.ts +3 -0
  19. package/dist/types/adapters/emailTemplates.d.ts +3 -0
  20. package/dist/types/adapters/flows.d.ts +3 -0
  21. package/dist/types/adapters/forms.d.ts +3 -0
  22. package/dist/types/adapters/hookCode.d.ts +3 -0
  23. package/dist/types/adapters/hooks.d.ts +3 -0
  24. package/dist/types/adapters/invites.d.ts +3 -0
  25. package/dist/types/adapters/keys.d.ts +3 -0
  26. package/dist/types/adapters/loginSessions.d.ts +3 -0
  27. package/dist/types/adapters/logs.d.ts +3 -0
  28. package/dist/types/adapters/organizationConnections.d.ts +3 -0
  29. package/dist/types/adapters/organizations.d.ts +3 -0
  30. package/dist/types/adapters/passwords.d.ts +3 -0
  31. package/dist/types/adapters/promptSettings.d.ts +3 -0
  32. package/dist/types/adapters/proxyData.d.ts +3 -0
  33. package/dist/types/adapters/proxyRoutes.d.ts +3 -0
  34. package/dist/types/adapters/refreshTokens.d.ts +3 -0
  35. package/dist/types/adapters/resourceServers.d.ts +3 -0
  36. package/dist/types/adapters/rolePermissions.d.ts +3 -0
  37. package/dist/types/adapters/roles.d.ts +3 -0
  38. package/dist/types/adapters/sessions.d.ts +3 -0
  39. package/dist/types/adapters/tenants.d.ts +3 -0
  40. package/dist/types/adapters/themes.d.ts +3 -0
  41. package/dist/types/adapters/universalLoginTemplates.d.ts +3 -0
  42. package/dist/types/adapters/userOrganizations.d.ts +3 -0
  43. package/dist/types/adapters/userPermissions.d.ts +3 -0
  44. package/dist/types/adapters/userRoles.d.ts +3 -0
  45. package/dist/types/adapters/users.d.ts +3 -0
  46. package/dist/types/index.d.ts +61 -0
  47. package/dist/types/keys.d.ts +202 -0
  48. package/dist/types/types.d.ts +27 -0
  49. package/dist/types/utils.d.ts +69 -0
  50. package/package.json +4 -3
@@ -0,0 +1 @@
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@authhero/adapter-interfaces"),t=require("@aws-sdk/lib-dynamodb");function n(){let e=e=>{throw Error(`Actions are not implemented in the AWS DynamoDB adapter (called ${e}). Use a SQL-backed adapter (kysely) for tenants that require actions.`)};return{create:()=>e(`create`),get:()=>e(`get`),list:()=>e(`list`),update:()=>e(`update`),remove:()=>e(`remove`)}}function r(){let e=e=>{throw Error(`Action executions are not implemented in the AWS DynamoDB adapter (called ${e}). Use a SQL-backed adapter (kysely) for tenants that require actions.`)};return{create:()=>e(`create`),get:()=>e(`get`)}}function i(){let e=e=>{throw Error(`Action versions are not implemented in the AWS DynamoDB adapter (called ${e}). Use a SQL-backed adapter (kysely) for tenants that require actions.`)};return{create:()=>e(`create`),get:()=>e(`get`),list:()=>e(`list`),removeForAction:()=>e(`removeForAction`)}}var a=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`,o=(e=21)=>{let t=``,n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=a[n[e]&63];return t},s={pk:e=>`TENANT#${e}`,sk:()=>`TENANT`,gsi1pk:()=>`TENANTS`,gsi1sk:e=>`TENANT#${e}`},c={pk:e=>`TENANT#${e}`,sk:e=>`USER#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#EMAIL#${t.toLowerCase()}`,gsi1sk:()=>`USER`,gsi2pk:(e,t)=>`TENANT#${e}#CONNECTION#${t}`,gsi2sk:e=>`USER#${e}`},l={pk:e=>`TENANT#${e}`,sk:e=>`SESSION#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#USER#${t}`,gsi1sk:e=>`SESSION#${e}`},u={pk:e=>`TENANT#${e}`,sk:e=>`LOGIN_SESSION#${e}`},d={pk:e=>`TENANT#${e}`,sk:e=>`CLIENT#${e}`},f={pk:e=>`TENANT#${e}`,sk:e=>`CLIENT_GRANT#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#CLIENT#${t}`,gsi1sk:e=>`CLIENT_GRANT#${e}`},p={pk:e=>`TENANT#${e}`,sk:e=>`CONNECTION#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#CONNECTION_NAME#${t}`,gsi1sk:()=>`CONNECTION`},m={pk:e=>`TENANT#${e}`,sk:(e,t)=>`CODE#${e}#${t}`,skPrefixByCodeId:e=>`CODE#${e}#`},h={pk:(e,t)=>`TENANT#${e}#USER#${t}`,sk:e=>`PASSWORD#${e}`,skPrefix:()=>`PASSWORD#`},g={pk:e=>`TENANT#${e}`,sk:()=>`BRANDING`},_={pk:e=>`TENANT#${e}`,sk:()=>`UNIVERSAL_LOGIN_TEMPLATE`},v={pk:e=>`TENANT#${e}`,sk:e=>`THEME#${e}`},y={pk:e=>`TENANT#${e}`,sk:e=>`HOOK#${e}`},b={pk:()=>`KEYS`,sk:e=>`KEY#${e}`},x={pk:e=>`TENANT#${e}`,sk:e=>`CUSTOM_DOMAIN#${e}`,gsi1pk:e=>`DOMAIN#${e}`,gsi1sk:()=>`CUSTOM_DOMAIN`},S={pk:e=>`TENANT#${e}`,sk:e=>`PROXY_ROUTE#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#CUSTOM_DOMAIN#${t}`,gsi1sk:e=>`PROXY_ROUTE#${e}`},C={pk:e=>`TENANT#${e}`,sk:e=>`LOG#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#LOG#${t}`,gsi1sk:e=>`LOG#${e}`},w={pk:e=>`TENANT#${e}`,sk:()=>`EMAIL_PROVIDER`},T={pk:e=>`TENANT#${e}`,sk:e=>`EMAIL_TEMPLATE#${e}`,skPrefix:()=>`EMAIL_TEMPLATE#`},E={pk:e=>`TENANT#${e}`,sk:()=>`PROMPT_SETTINGS`},D={pk:e=>`TENANT#${e}`,sk:e=>`REFRESH_TOKEN#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#USER#${t}`,gsi1sk:e=>`REFRESH_TOKEN#${e}`,gsi2pk:(e,t)=>`TENANT#${e}#RT_LOOKUP#${t}`,gsi2sk:()=>`REFRESH_TOKEN`},O={pk:e=>`TENANT#${e}`,sk:e=>`FORM#${e}`},k={pk:e=>`TENANT#${e}`,sk:e=>`FLOW#${e}`},A={pk:e=>`TENANT#${e}`,sk:e=>`RESOURCE_SERVER#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#RESOURCE_SERVER_ID#${t}`,gsi1sk:()=>`RESOURCE_SERVER`},j={pk:e=>`TENANT#${e}`,sk:e=>`ROLE#${e}`},M={pk:(e,t)=>`TENANT#${e}#ROLE#${t}`,sk:(e,t)=>`PERMISSION#${e}#${t}`,skPrefix:()=>`PERMISSION#`},N={pk:(e,t,n)=>n?`TENANT#${e}#ORG#${n}#USER#${t}`:`TENANT#${e}#USER#${t}`,sk:(e,t)=>`USER_PERMISSION#${e}#${t}`,skPrefix:()=>`USER_PERMISSION#`},P={pk:(e,t,n)=>n?`TENANT#${e}#ORG#${n}#USER#${t}`:`TENANT#${e}#USER#${t}`,sk:e=>`USER_ROLE#${e}`,skPrefix:()=>`USER_ROLE#`},F={pk:e=>`TENANT#${e}`,sk:e=>`ORGANIZATION#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#ORG_NAME#${t}`,gsi1sk:()=>`ORGANIZATION`},I={pk:e=>`TENANT#${e}`,sk:e=>`USER_ORG#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#USER#${t}`,gsi1sk:e=>`USER_ORG#${e}`,gsi2pk:(e,t)=>`TENANT#${e}#ORG#${t}`,gsi2sk:e=>`USER_ORG#${e}`},L={pk:(e,t)=>`TENANT#${e}#ORG#${t}`,sk:e=>`ORG_CONNECTION#${e}`,skPrefix:()=>`ORG_CONNECTION#`},R={pk:e=>`TENANT#${e}`,sk:e=>`INVITE#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#ORG#${t}`,gsi1sk:e=>`INVITE#${e}`},ee={pk:()=>`LEGACY_CLIENTS`,sk:e=>`LEGACY_CLIENT#${e}`},z={pk:(e,t)=>`TENANT#${e}#CLIENT#${t}`,sk:(e,t)=>`CLIENT_CONNECTION#${String(t).padStart(5,`0`)}#${e}`,skPrefix:()=>`CLIENT_CONNECTION#`,gsi1pk:(e,t)=>`TENANT#${e}#CONNECTION#${t}`,gsi1sk:e=>`CLIENT_CONNECTION#${e}`},B={pk:e=>`TENANT#${e}`,sk:e=>`AUTHENTICATION_METHOD#${e}`,gsi1pk:(e,t)=>`TENANT#${e}#USER#${t}`,gsi1sk:e=>`AUTHENTICATION_METHOD#${e}`,gsi1skPrefix:()=>`AUTHENTICATION_METHOD#`},V={pk:e=>`TENANT#${e}`,sk:e=>`CLIENT_REGISTRATION_TOKEN#${e}`,skPrefix:()=>`CLIENT_REGISTRATION_TOKEN#`,gsi1pk:(e,t)=>`TENANT#${e}#CRT_HASH#${t}`,gsi1sk:()=>`CLIENT_REGISTRATION_TOKEN`,gsi2pk:(e,t)=>`TENANT#${e}#CLIENT#${t}`,gsi2sk:e=>`CLIENT_REGISTRATION_TOKEN#${e}`},H={pk:e=>`TENANT#${e}`,sk:(e,t)=>`CUSTOM_TEXT#${e}#${t}`,skPrefix:()=>`CUSTOM_TEXT#`};async function te(e,n){let r=n.map(t=>{if(t.type===`put`&&t.item)return{Put:{TableName:e.tableName,Item:t.item,ConditionExpression:t.conditionExpression}};if(t.type===`delete`&&t.pk&&t.sk)return{Delete:{TableName:e.tableName,Key:{PK:t.pk,SK:t.sk}}};throw Error(`Invalid transaction operation`)});await e.client.send(new t.TransactWriteCommand({TransactItems:r}))}async function U(e,n,r){return(await e.client.send(new t.GetCommand({TableName:e.tableName,Key:{PK:n,SK:r}}))).Item||null}async function W(e,n,r){await e.client.send(new t.PutCommand({TableName:e.tableName,Item:n,ConditionExpression:r?.conditionExpression}))}async function G(e,n,r){return await e.client.send(new t.DeleteCommand({TableName:e.tableName,Key:{PK:n,SK:r}})),!0}async function K(e,n,r){let{skPrefix:i,skValue:a,indexName:o,limit:s,startKey:c,scanIndexForward:l=!0}=r||{},u=o?`${o}PK = :pk`:`PK = :pk`,d={":pk":n};if(i){let e=o?`${o}SK`:`SK`;u+=` AND begins_with(${e}, :skPrefix)`,d[`:skPrefix`]=i}else if(a){let e=o?`${o}SK`:`SK`;u+=` AND ${e} = :sk`,d[`:sk`]=a}let f=await e.client.send(new t.QueryCommand({TableName:e.tableName,IndexName:o,KeyConditionExpression:u,ExpressionAttributeValues:d,Limit:s,ExclusiveStartKey:c,ScanIndexForward:l}));return{items:f.Items||[],lastKey:f.LastEvaluatedKey}}async function q(e,n,r={},i){let{page:a,per_page:o,include_totals:s=!1,from:c,take:l}=r,{skPrefix:u,indexName:d,scanIndexForward:f=!0}=i||{},p=l||o||50,m=c===void 0?(a||0)*p:parseInt(c,10),h=d?`${d}PK = :pk`:`PK = :pk`,g={":pk":n};if(u){let e=d?`${d}SK`:`SK`;h+=` AND begins_with(${e}, :skPrefix)`,g[`:skPrefix`]=u}let _=[],v,y=0,b=m+p;for(;y<b;){let n=await e.client.send(new t.QueryCommand({TableName:e.tableName,IndexName:d,KeyConditionExpression:h,ExpressionAttributeValues:g,Limit:Math.min(b-y,1e3),ExclusiveStartKey:v,ScanIndexForward:f})),r=n.Items||[];if(_=_.concat(r),y+=r.length,v=n.LastEvaluatedKey,!v)break}let x=_.slice(m,m+p),S=_.length;if(s&&v){let n=v;for(;n;){let r=await e.client.send(new t.QueryCommand({TableName:e.tableName,IndexName:d,KeyConditionExpression:h,ExpressionAttributeValues:g,Select:`COUNT`,ExclusiveStartKey:n}));S+=r.Count||0,n=r.LastEvaluatedKey}}return{items:x,start:m,limit:p,length:x.length,total:s?S:void 0}}async function J(e,n,r,i){let a=Object.entries(i).filter(([,e])=>e!==void 0);if(a.length===0)return!0;let o=`SET `+a.map(([e],t)=>`#attr${t} = :val${t}`).join(`, `),s={},c={};return a.forEach(([e,t],n)=>{s[`#attr${n}`]=e,c[`:val${n}`]=t}),await e.client.send(new t.UpdateCommand({TableName:e.tableName,Key:{PK:n,SK:r},UpdateExpression:o,ConditionExpression:`attribute_exists(PK)`,ExpressionAttributeNames:s,ExpressionAttributeValues:c})),!0}function Y(e){let{PK:t,SK:n,GSI1PK:r,GSI1SK:i,GSI2PK:a,GSI2SK:o,entityType:s,ttl:c,...l}=e;return l}function X(e){let t={...e};for(let e in t)(t[e]===null||t[e]===void 0)&&delete t[e];return t}function ne(t){let{tenant_id:n,...r}=Y(t),i=[];if(t.actions)try{i=JSON.parse(t.actions)}catch{console.error(`Failed to parse actions JSON for flow ${t.id}`)}let a=X({...r,actions:i});return e.flowSchema.parse(a)}function re(e){return{async create(t,n){let r=new Date().toISOString(),i=`af_${o()}`,a={PK:k.pk(t),SK:k.sk(i),entityType:`FLOW`,tenant_id:t,id:i,name:n.name,actions:n.actions?JSON.stringify(n.actions):void 0,created_at:r,updated_at:r};return await W(e,a),ne(a)},async get(t,n){let r=await U(e,k.pk(t),k.sk(n));return r?ne(r):null},async list(t,n={}){let r=await q(e,k.pk(t),n,{skPrefix:`FLOW#`});return{flows:r.items.map(ne),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={updated_at:new Date().toISOString()};return r.name!==void 0&&(i.name=r.name),r.actions!==void 0&&(i.actions=JSON.stringify(r.actions)),await J(e,k.pk(t),k.sk(n),i)?this.get(t,n):null},async remove(t,n){return G(e,k.pk(t),k.sk(n))}}}function ie(t){let n=Y(t);return e.tenantSchema.parse(X(n))}function ae(e){return{async create(t){let n=new Date().toISOString(),r=t.id||o(),i={PK:s.pk(r),SK:s.sk(),GSI1PK:s.gsi1pk(),GSI1SK:s.gsi1sk(r),entityType:`TENANT`,id:r,audience:t.audience,friendly_name:t.friendly_name,sender_name:t.sender_name,sender_email:t.sender_email,session_lifetime:t.session_lifetime,idle_session_lifetime:t.idle_session_lifetime,created_at:n,updated_at:n};return await W(e,i),ie(i)},async get(t){let n=await U(e,s.pk(t),s.sk());return n?ie(n):null},async list(t={}){let{include_totals:n=!1}=t,r=await q(e,s.gsi1pk(),t,{indexName:`GSI1`,skPrefix:`TENANT#`}),i=r.items.map(ie);return n?{tenants:i,totals:{start:r.start,limit:r.limit,length:r.length}}:{tenants:i}},async update(t,n){let r={...n,updated_at:new Date().toISOString()};await J(e,s.pk(t),s.sk(),r)},async remove(t){return G(e,s.pk(t),s.sk())}}}var oe=class extends Error{res;status;constructor(e=500,t){super(t?.message,{cause:t?.cause}),this.res=t?.res,this.status=e}getResponse(){return this.res?new Response(this.res.body,{status:this.status,headers:this.res.headers}):new Response(this.message,{status:this.status})}};function se(t,n=[]){let{tenant_id:r,...i}=Y(t),a=X({...i,app_metadata:JSON.parse(t.app_metadata||`{}`),user_metadata:JSON.parse(t.user_metadata||`{}`),identities:[{connection:t.connection,provider:t.provider,user_id:(0,e.parseUserId)(t.user_id).id,isSocial:t.is_social,...t.email?{email:t.email}:{},...t.email_verified===void 0?{}:{email_verified:!!t.email_verified},...t.phone_number?{phone_number:t.phone_number}:{},...t.phone_verified===void 0?{}:{phone_verified:!!t.phone_verified},...t.username?{username:t.username}:{}},...n.map(t=>({connection:t.connection,provider:t.provider,user_id:(0,e.parseUserId)(t.user_id).id,isSocial:t.is_social,...t.email?{email:t.email}:{},...t.email_verified===void 0?{}:{email_verified:!!t.email_verified},...t.phone_number?{phone_number:t.phone_number}:{},...t.phone_verified===void 0?{}:{phone_verified:!!t.phone_verified},...t.username?{username:t.username}:{}}))]});return e.userSchema.parse(a)}function ce(e){let t=async(t,n)=>{let r=new Date().toISOString(),i=n.user_id||`${n.provider}|${o()}`,a={PK:c.pk(t),SK:c.sk(i),entityType:`USER`,tenant_id:t,user_id:i,email:n.email,username:n.username,phone_number:n.phone_number,given_name:n.given_name,family_name:n.family_name,nickname:n.nickname,name:n.name,picture:n.picture,locale:n.locale,linked_to:n.linked_to,profileData:n.profileData,email_verified:n.email_verified??!1,last_ip:n.last_ip,last_login:n.last_login,provider:n.provider||`auth`,connection:n.connection,is_social:n.is_social??!1,login_count:0,app_metadata:JSON.stringify(n.app_metadata||{}),user_metadata:JSON.stringify(n.user_metadata||{}),middle_name:n.middle_name,preferred_username:n.preferred_username,profile:n.profile,website:n.website,gender:n.gender,birthdate:n.birthdate,zoneinfo:n.zoneinfo,created_at:r,updated_at:r};n.email&&(a.GSI1PK=c.gsi1pk(t,n.email),a.GSI1SK=c.gsi1sk()),a.GSI2PK=c.gsi2pk(t,n.connection),a.GSI2SK=c.gsi2sk(i);try{if(n.password){let s=o(),c={PK:h.pk(t,i),SK:h.sk(s),entityType:`PASSWORD`,id:s,tenant_id:t,user_id:i,password:n.password.hash,algorithm:n.password.algorithm,is_current:!0,created_at:r,updated_at:r};await te(e,[{type:`put`,item:a,conditionExpression:`attribute_not_exists(PK)`},{type:`put`,item:c}])}else await W(e,a,{conditionExpression:`attribute_not_exists(PK)`})}catch(e){throw e.name===`ConditionalCheckFailedException`||e.name===`TransactionCanceledException`&&(e.CancellationReasons||[]).some(e=>e?.Code===`ConditionalCheckFailed`)?new oe(409,{message:`User already exists`}):e}return se(a)};return{create:t,rawCreate:t,async get(t,n){let[r,i]=await Promise.all([U(e,c.pk(t),c.sk(n)),K(e,c.pk(t),{skPrefix:`USER#`}).then(e=>e.items.filter(e=>e.linked_to===n))]);return r?se(r,i):null},async list(t,n={}){let r=await q(e,c.pk(t),n,{skPrefix:`USER#`}),i=r.items.filter(e=>!e.linked_to),a=r.items.filter(e=>e.linked_to);return{users:i.map(e=>se(e,a.filter(t=>t.linked_to===e.user_id))),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return r.app_metadata!==void 0&&(i.app_metadata=JSON.stringify(r.app_metadata)),r.user_metadata!==void 0&&(i.user_metadata=JSON.stringify(r.user_metadata)),delete i.user_id,delete i.identities,J(e,c.pk(t),c.sk(n),i)},async remove(t,n){return G(e,c.pk(t),c.sk(n))},async unlink(t,n,r,i){let a=`${r}|${i}`;return G(e,c.pk(t),c.sk(a))}}}function le(t){let{tenant_id:n,...r}=Y(t),i=X({...r,device:JSON.parse(t.device||`{}`),clients:JSON.parse(t.clients||`[]`)});return e.sessionSchema.parse(i)}function ue(e){return{async create(t,n){let r=new Date().toISOString(),i={PK:l.pk(t),SK:l.sk(n.id),GSI1PK:l.gsi1pk(t,n.user_id),GSI1SK:l.gsi1sk(n.id),entityType:`SESSION`,tenant_id:t,id:n.id,user_id:n.user_id,login_session_id:n.login_session_id,revoked_at:n.revoked_at,used_at:n.used_at,expires_at:n.expires_at,idle_expires_at:n.idle_expires_at,authenticated_at:r,last_interaction_at:r,device:JSON.stringify(n.device||{}),clients:JSON.stringify(n.clients||[]),created_at:r,updated_at:r};return n.expires_at&&(i.ttl=Math.floor(new Date(n.expires_at).getTime()/1e3)),await W(e,i),le(i)},async get(t,n){let r=await U(e,l.pk(t),l.sk(n));return r?le(r):null},async list(t,n={}){let r=await q(e,l.pk(t),n,{skPrefix:`SESSION#`});return{sessions:r.items.map(le),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return r.device!==void 0&&(i.device=JSON.stringify(r.device)),r.clients!==void 0&&(i.clients=JSON.stringify(r.clients)),r.expires_at&&(i.ttl=Math.floor(new Date(r.expires_at).getTime()/1e3)),delete i.id,J(e,l.pk(t),l.sk(n),i)},async remove(t,n){return G(e,l.pk(t),l.sk(n))}}}function de(t){let{tenant_id:n,...r}=Y(t);return e.passwordSchema.parse(X(r))}function fe(e){return{async create(t,n){let r=new Date().toISOString(),i=o(),a=await this.list(t,n.user_id);for(let i of a)i.is_current&&await J(e,h.pk(t,n.user_id),h.sk(i.id),{is_current:!1,updated_at:r});let s={PK:h.pk(t,n.user_id),SK:h.sk(i),entityType:`PASSWORD`,id:i,tenant_id:t,user_id:n.user_id,password:n.password,algorithm:n.algorithm||`bcrypt`,is_current:!0,created_at:r,updated_at:r};return await W(e,s),de(s)},async update(e,t){return await this.create(e,t),!0},async get(t,n){let{items:r}=await K(e,h.pk(t,n),{skPrefix:h.skPrefix()}),i=r.find(e=>e.is_current);return i?de(i):null},async list(t,n,r){let{items:i}=await K(e,h.pk(t,n),{skPrefix:h.skPrefix(),limit:r});return i.map(de)}}}function pe(t){let{tenant_id:n,...r}=Y(t);return e.codeSchema.parse(X(r))}function me(e){return{async create(t,n){let r=new Date().toISOString(),i={PK:m.pk(t),SK:m.sk(n.code_id,n.code_type),entityType:`CODE`,code_id:n.code_id,tenant_id:t,code_type:n.code_type,login_id:n.login_id,connection_id:n.connection_id,code_verifier:n.code_verifier,code_challenge:n.code_challenge,code_challenge_method:n.code_challenge_method,nonce:n.nonce,state:n.state,redirect_uri:n.redirect_uri,user_id:n.user_id,used_at:n.used_at,expires_at:n.expires_at,created_at:r,updated_at:r};return i.ttl=Math.floor(new Date(n.expires_at).getTime()/1e3),await W(e,i),pe(i)},async get(t,n,r){let i=await U(e,m.pk(t),m.sk(n,r));return i?pe(i):null},async list(t,n={}){let r=await q(e,m.pk(t),n,{skPrefix:`CODE#`});return{codes:r.items.map(pe),start:r.start,limit:r.limit,length:r.length}},async used(t,n){let{items:r}=await K(e,m.pk(t),{skPrefix:m.skPrefixByCodeId(n),limit:1}),i=r[0];return i?J(e,m.pk(t),m.sk(n,i.code_type),{used_at:new Date().toISOString()}):!1},async consume(n,r){let{items:i}=await K(e,m.pk(n),{skPrefix:m.skPrefixByCodeId(r),limit:1}),a=i[0];if(!a)return!1;try{return await e.client.send(new t.UpdateCommand({TableName:e.tableName,Key:{PK:m.pk(n),SK:m.sk(r,a.code_type)},UpdateExpression:`SET #used_at = :now`,ConditionExpression:`attribute_not_exists(#used_at) OR #used_at = :null`,ExpressionAttributeNames:{"#used_at":`used_at`},ExpressionAttributeValues:{":now":new Date().toISOString(),":null":null}})),!0}catch(e){if(e.name===`ConditionalCheckFailedException`)return!1;throw e}},async remove(t,n){let{items:r}=await K(e,m.pk(t),{skPrefix:m.skPrefixByCodeId(n),limit:1}),i=r[0];return i?G(e,m.pk(t),m.sk(n,i.code_type)):!1}}}function Z(t){let{tenant_id:n,...r}=Y(t),i=X({...r,callbacks:t.callbacks?JSON.parse(t.callbacks):void 0,allowed_origins:t.allowed_origins?JSON.parse(t.allowed_origins):void 0,web_origins:t.web_origins?JSON.parse(t.web_origins):void 0,client_aliases:t.client_aliases?JSON.parse(t.client_aliases):void 0,allowed_clients:t.allowed_clients?JSON.parse(t.allowed_clients):void 0,connections:t.connections?JSON.parse(t.connections):void 0,allowed_logout_urls:t.allowed_logout_urls?JSON.parse(t.allowed_logout_urls):void 0,session_transfer:t.session_transfer?JSON.parse(t.session_transfer):void 0,oidc_logout:t.oidc_logout?JSON.parse(t.oidc_logout):void 0,grant_types:t.grant_types?JSON.parse(t.grant_types):void 0,jwt_configuration:t.jwt_configuration?JSON.parse(t.jwt_configuration):void 0,signing_keys:t.signing_keys?JSON.parse(t.signing_keys):void 0,encryption_key:t.encryption_key?JSON.parse(t.encryption_key):void 0,addons:t.addons?JSON.parse(t.addons):void 0,client_metadata:t.client_metadata?JSON.parse(t.client_metadata):void 0,mobile:t.mobile?JSON.parse(t.mobile):void 0,native_social_login:t.native_social_login?JSON.parse(t.native_social_login):void 0,refresh_token:t.refresh_token?JSON.parse(t.refresh_token):void 0,default_organization:t.default_organization?JSON.parse(t.default_organization):void 0,client_authentication_methods:t.client_authentication_methods?JSON.parse(t.client_authentication_methods):void 0,signed_request_object:t.signed_request_object?JSON.parse(t.signed_request_object):void 0,token_quota:t.token_quota?JSON.parse(t.token_quota):void 0});return e.clientSchema.parse(i)}function he(e){return{...Z(e),tenant_id:e.tenant_id}}function ge(e){return{async create(t,n){let r=new Date().toISOString(),i=n.client_id??o(),a={PK:d.pk(t),SK:d.sk(i),entityType:`CLIENT`,tenant_id:t,client_id:i,name:n.name,client_secret:n.client_secret,description:n.description,logo_uri:n.logo_uri,app_type:n.app_type,token_endpoint_auth_method:n.token_endpoint_auth_method,initiate_login_uri:n.initiate_login_uri,cross_origin_loc:n.cross_origin_loc,custom_login_page:n.custom_login_page,custom_login_page_preview:n.custom_login_page_preview,form_template:n.form_template,organization_usage:n.organization_usage,organization_require_behavior:n.organization_require_behavior,compliance_level:n.compliance_level,par_request_expiry:n.par_request_expiry,global:n.global??!1,is_first_party:n.is_first_party??!1,oidc_conformant:n.oidc_conformant??!0,auth0_conformant:n.auth0_conformant??!0,sso:n.sso,sso_disabled:n.sso_disabled,cross_origin_authentication:n.cross_origin_authentication,custom_login_page_on:n.custom_login_page_on,require_pushed_authorization_requests:n.require_pushed_authorization_requests,require_proof_of_possession:n.require_proof_of_possession,callbacks:n.callbacks?JSON.stringify(n.callbacks):void 0,allowed_origins:n.allowed_origins?JSON.stringify(n.allowed_origins):void 0,web_origins:n.web_origins?JSON.stringify(n.web_origins):void 0,client_aliases:n.client_aliases?JSON.stringify(n.client_aliases):void 0,allowed_clients:n.allowed_clients?JSON.stringify(n.allowed_clients):void 0,connections:n.connections?JSON.stringify(n.connections):void 0,allowed_logout_urls:n.allowed_logout_urls?JSON.stringify(n.allowed_logout_urls):void 0,session_transfer:n.session_transfer?JSON.stringify(n.session_transfer):void 0,oidc_logout:n.oidc_logout?JSON.stringify(n.oidc_logout):void 0,grant_types:n.grant_types?JSON.stringify(n.grant_types):void 0,jwt_configuration:n.jwt_configuration?JSON.stringify(n.jwt_configuration):void 0,signing_keys:n.signing_keys?JSON.stringify(n.signing_keys):void 0,encryption_key:n.encryption_key?JSON.stringify(n.encryption_key):void 0,addons:n.addons?JSON.stringify(n.addons):void 0,client_metadata:n.client_metadata?JSON.stringify(n.client_metadata):void 0,mobile:n.mobile?JSON.stringify(n.mobile):void 0,native_social_login:n.native_social_login?JSON.stringify(n.native_social_login):void 0,refresh_token:n.refresh_token?JSON.stringify(n.refresh_token):void 0,default_organization:n.default_organization?JSON.stringify(n.default_organization):void 0,client_authentication_methods:n.client_authentication_methods?JSON.stringify(n.client_authentication_methods):void 0,signed_request_object:n.signed_request_object?JSON.stringify(n.signed_request_object):void 0,token_quota:n.token_quota?JSON.stringify(n.token_quota):void 0,created_at:r,updated_at:r};return await W(e,a),Z(a)},async get(t,n){let r=await U(e,d.pk(t),d.sk(n));return r?Z(r):null},async getByClientId(t){let n=await U(e,ee.pk(),ee.sk(t));if(!n?.tenant_id)return null;let r=await U(e,d.pk(n.tenant_id),d.sk(t));return r?he(r):null},async list(t,n={}){let r=await q(e,d.pk(t),n,{skPrefix:`CLIENT#`}),i=r.items.map(Z);return n.include_totals?{clients:i,totals:{start:r.start,limit:r.limit,length:r.length}}:{clients:i}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};for(let e of[`callbacks`,`allowed_origins`,`web_origins`,`client_aliases`,`allowed_clients`,`connections`,`allowed_logout_urls`,`session_transfer`,`oidc_logout`,`grant_types`,`jwt_configuration`,`signing_keys`,`encryption_key`,`addons`,`client_metadata`,`mobile`,`native_social_login`,`refresh_token`,`default_organization`,`client_authentication_methods`,`signed_request_object`,`token_quota`])r[e]!==void 0&&(i[e]=JSON.stringify(r[e]));return delete i.client_id,J(e,d.pk(t),d.sk(n),i)},async remove(t,n){return G(e,d.pk(t),d.sk(n))}}}function _e(t){let{tenant_id:n,...r}=Y(t),i=X({...r,scope:t.scope?JSON.parse(t.scope):void 0,authorization_details_types:t.authorization_details_types?JSON.parse(t.authorization_details_types):void 0});return e.clientGrantSchema.parse(i)}function ve(e){return{async create(t,n){let r=new Date().toISOString(),i=o(),a={PK:f.pk(t),SK:f.sk(i),GSI1PK:f.gsi1pk(t,n.client_id),GSI1SK:f.gsi1sk(n.audience),entityType:`CLIENT_GRANT`,tenant_id:t,id:i,client_id:n.client_id,audience:n.audience,scope:n.scope?JSON.stringify(n.scope):void 0,organization_usage:n.organization_usage,allow_any_organization:n.allow_any_organization,is_system:n.is_system,subject_type:n.subject_type,authorization_details_types:n.authorization_details_types?JSON.stringify(n.authorization_details_types):void 0,created_at:r,updated_at:r};return await W(e,a),_e(a)},async get(t,n){let r=await U(e,f.pk(t),f.sk(n));return r?_e(r):null},async list(t,n={}){let r=await q(e,f.pk(t),n,{skPrefix:`CLIENT_GRANT#`});return{client_grants:r.items.map(_e),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return r.scope!==void 0&&(i.scope=JSON.stringify(r.scope)),r.authorization_details_types!==void 0&&(i.authorization_details_types=JSON.stringify(r.authorization_details_types)),delete i.id,J(e,f.pk(t),f.sk(n),i)},async remove(t,n){return G(e,f.pk(t),f.sk(n))}}}function ye(t){let{tenant_id:n,...r}=Y(t),i=X({...r,options:t.options?JSON.parse(t.options):void 0});return e.connectionSchema.parse(i)}function be(e){return{async listByClient(t,n){let{items:r}=await K(e,z.pk(t,n),{skPrefix:z.skPrefix()});r.sort((e,t)=>e.order-t.order);let i=[];for(let n of r){let r=await U(e,p.pk(t),p.sk(n.connection_id));r&&i.push(ye(r))}return i},async updateByClient(n,r,i){let{items:a}=await K(e,z.pk(n,r),{skPrefix:z.skPrefix()});if(a.length>0){let i=a.map(e=>({DeleteRequest:{Key:{PK:z.pk(n,r),SK:z.sk(e.connection_id,e.order)}}}));for(let n=0;n<i.length;n+=25){let r=i.slice(n,n+25);await e.client.send(new t.BatchWriteCommand({RequestItems:{[e.tableName]:r}}))}}let o=new Date().toISOString();for(let t=0;t<i.length;t++){let a=i[t];await W(e,{PK:z.pk(n,r),SK:z.sk(a,t),GSI1PK:z.gsi1pk(n,a),GSI1SK:z.gsi1sk(r),entityType:`CLIENT_CONNECTION`,tenant_id:n,client_id:r,connection_id:a,order:t,created_at:o,updated_at:o})}return!0},async listByConnection(t,n){let{items:r}=await K(e,z.gsi1pk(t,n),{indexName:`GSI1`,skPrefix:`CLIENT_CONNECTION#`});return r.map(e=>e.client_id)},async addClientToConnection(t,n,r){let{items:i}=await K(e,z.pk(t,r),{skPrefix:z.skPrefix()});if(i.some(e=>e.connection_id===n))return!0;let a=i.length,o=new Date().toISOString();return await W(e,{PK:z.pk(t,r),SK:z.sk(n,a),GSI1PK:z.gsi1pk(t,n),GSI1SK:z.gsi1sk(r),entityType:`CLIENT_CONNECTION`,tenant_id:t,client_id:r,connection_id:n,order:a,created_at:o,updated_at:o}),!0},async removeClientFromConnection(t,n,r){let{items:i}=await K(e,z.pk(t,r),{skPrefix:z.skPrefix()}),a=i.find(e=>e.connection_id===n);return a?G(e,z.pk(t,r),z.sk(n,a.order)):!1}}}function Q(t){let{tenant_id:n,constraints:r,...i}=Y(t),a=X({...i,constraints:r?JSON.parse(r):void 0});return e.clientRegistrationTokenSchema.parse(a)}function xe(e){return{async create(t,n){let r=new Date().toISOString(),i={PK:V.pk(t),SK:V.sk(n.id),GSI1PK:V.gsi1pk(t,n.token_hash),GSI1SK:V.gsi1sk(),entityType:`CLIENT_REGISTRATION_TOKEN`,tenant_id:t,id:n.id,token_hash:n.token_hash,type:n.type,client_id:n.client_id,sub:n.sub,constraints:n.constraints?JSON.stringify(n.constraints):void 0,single_use:n.single_use,expires_at:n.expires_at,created_at:r,updated_at:r};return n.client_id&&(i.GSI2PK=V.gsi2pk(t,n.client_id),i.GSI2SK=V.gsi2sk(n.id)),n.expires_at&&(i.ttl=Math.floor(new Date(n.expires_at).getTime()/1e3)),await W(e,i),Q(i)},async get(t,n){let r=await U(e,V.pk(t),V.sk(n));return r?Q(r):null},async getByHash(t,n){let r=await K(e,V.gsi1pk(t,n),{indexName:`GSI1`,skValue:V.gsi1sk(),limit:1});return r.items[0]?Q(r.items[0]):null},async listByClient(t,n){return(await K(e,V.gsi2pk(t,n),{indexName:`GSI2`,skPrefix:V.skPrefix(),scanIndexForward:!1})).items.map(Q)},async markUsed(n,r,i){try{return await e.client.send(new t.UpdateCommand({TableName:e.tableName,Key:{PK:V.pk(n),SK:V.sk(r)},UpdateExpression:`SET #used_at = :used_at, #updated_at = :updated_at`,ConditionExpression:`attribute_exists(PK) AND attribute_not_exists(#used_at)`,ExpressionAttributeNames:{"#used_at":`used_at`,"#updated_at":`updated_at`},ExpressionAttributeValues:{":used_at":i,":updated_at":new Date().toISOString()}})),!0}catch(e){if(e?.name===`ConditionalCheckFailedException`)return!1;throw e}},async revoke(n,r,i){try{return await e.client.send(new t.UpdateCommand({TableName:e.tableName,Key:{PK:V.pk(n),SK:V.sk(r)},UpdateExpression:`SET #revoked_at = :revoked_at, #updated_at = :updated_at`,ConditionExpression:`attribute_exists(PK)`,ExpressionAttributeNames:{"#revoked_at":`revoked_at`,"#updated_at":`updated_at`},ExpressionAttributeValues:{":revoked_at":i,":updated_at":new Date().toISOString()}})),!0}catch(e){if(e?.name===`ConditionalCheckFailedException`)return!1;throw e}},async revokeByClient(n,r,i){let a=await K(e,V.gsi2pk(n,r),{indexName:`GSI2`,skPrefix:V.skPrefix()}),o=0,s=new Date().toISOString();for(let n of a.items)if(!n.revoked_at)try{await e.client.send(new t.UpdateCommand({TableName:e.tableName,Key:{PK:n.PK,SK:n.SK},UpdateExpression:`SET #revoked_at = :revoked_at, #updated_at = :updated_at`,ConditionExpression:`attribute_exists(PK) AND attribute_not_exists(#revoked_at)`,ExpressionAttributeNames:{"#revoked_at":`revoked_at`,"#updated_at":`updated_at`},ExpressionAttributeValues:{":revoked_at":i,":updated_at":s}})),o++}catch(e){if(e?.name===`ConditionalCheckFailedException`)continue;throw e}return o},async remove(t,n){return G(e,V.pk(t),V.sk(n))}}}function Se(t){let{tenant_id:n,is_system:r,...i}=Y(t),a=X({...i,options:t.options?JSON.parse(t.options):void 0,is_system:r?!0:void 0});return e.connectionSchema.parse(a)}function Ce(e){return{async create(t,n){let r=new Date().toISOString(),i=n.id||o(),a={PK:p.pk(t),SK:p.sk(i),GSI1PK:p.gsi1pk(t,n.name),GSI1SK:p.gsi1sk(),entityType:`CONNECTION`,tenant_id:t,id:i,name:n.name,strategy:n.strategy,options:n.options?JSON.stringify(n.options):void 0,is_system:n.is_system??!1,created_at:r,updated_at:r};return await W(e,a),Se(a)},async get(t,n){let r=await U(e,p.pk(t),p.sk(n));return r?Se(r):null},async list(t,n={}){let r=await q(e,p.pk(t),n,{skPrefix:`CONNECTION#`});return{connections:r.items.map(Se),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return r.options!==void 0&&(i.options=JSON.stringify(r.options)),r.name!==void 0&&(i.GSI1PK=p.gsi1pk(t,r.name),i.GSI1SK=p.gsi1sk()),delete i.id,J(e,p.pk(t),p.sk(n),i)},async remove(t,n){return G(e,p.pk(t),p.sk(n))}}}function we(t){let{tenant_id:n,authParams:r,...i}=Y(t),a=X({...i,authParams:JSON.parse(r)});return e.loginSessionSchema.parse(a)}function Te(t){return{async create(n,r){let i=new Date().toISOString(),a=o(),s={PK:u.pk(n),SK:u.sk(a),entityType:`LOGIN_SESSION`,tenant_id:n,id:a,csrf_token:r.csrf_token,authParams:JSON.stringify(r.authParams),expires_at:r.expires_at,state:r.state??e.LoginSessionState.PENDING,state_data:r.state_data,failure_reason:r.failure_reason,user_id:r.user_id,auth0Client:r.auth0Client,deleted_at:r.deleted_at,ip:r.ip,useragent:r.useragent,session_id:r.session_id,authorization_url:r.authorization_url?.slice(0,1024),created_at:i,updated_at:i};return s.ttl=Math.floor(new Date(r.expires_at).getTime()/1e3),await W(t,s),we(s)},async get(e,n){let r=await U(t,u.pk(e),u.sk(n));return r?we(r):null},async update(e,n,r){let i={...r,updated_at:new Date().toISOString()};return r.authParams!==void 0&&(i.authParams=JSON.stringify(r.authParams)),delete i.id,J(t,u.pk(e),u.sk(n),i)},async remove(e,n){return G(t,u.pk(e),u.sk(n))}}}function Ee(t){let{tenant_id:n,...r}=Y(t),i=X({...r,colors:t.colors?JSON.parse(t.colors):void 0,font:t.font?JSON.parse(t.font):void 0});return e.brandingSchema.parse(i)}function De(e){return{async set(t,n){let r=new Date().toISOString(),i=await U(e,g.pk(t),g.sk());await W(e,{PK:g.pk(t),SK:g.sk(),entityType:`BRANDING`,tenant_id:t,colors:n.colors?JSON.stringify(n.colors):void 0,favicon_url:n.favicon_url,logo_url:n.logo_url,powered_by_logo_url:n.powered_by_logo_url,font:n.font?JSON.stringify(n.font):void 0,created_at:i?.created_at||r,updated_at:r})},async get(t){let n=await U(e,g.pk(t),g.sk());return n?Ee(n):null}}}function Oe(e){return{async get(t){let n=await U(e,_.pk(t),_.sk());return n?{body:n.body}:null},async set(t,n){let r=new Date().toISOString(),i=await U(e,_.pk(t),_.sk());await W(e,{PK:_.pk(t),SK:_.sk(),entityType:`UNIVERSAL_LOGIN_TEMPLATE`,tenant_id:t,body:n.body,created_at:i?.created_at||r,updated_at:r})},async delete(t){await G(e,_.pk(t),_.sk())}}}var $={pk:e=>`TENANT#${e}`,sk:e=>`HOOK_CODE#${e}`};function ke(e){let{tenant_id:t,secrets:n,...r}=Y(e);return{...r,tenant_id:t,secrets:n?JSON.parse(n):void 0}}function Ae(e){return{async create(t,n){let r=new Date().toISOString(),i=`hc_${o()}`,a={PK:$.pk(t),SK:$.sk(i),entityType:`HOOK_CODE`,id:i,tenant_id:t,code:n.code,secrets:n.secrets?JSON.stringify(n.secrets):null,created_at:r,updated_at:r};return await W(e,a),ke(a)},async get(t,n){let r=await U(e,$.pk(t),$.sk(n));return r?ke(r):null},async update(t,n,r){let i=await U(e,$.pk(t),$.sk(n));if(!i)return!1;let a={...i,updated_at:new Date().toISOString()};return r.code!==void 0&&(a.code=r.code),r.secrets!==void 0&&(a.secrets=JSON.stringify(r.secrets)),await W(e,a),!0},async remove(t,n){return await U(e,$.pk(t),$.sk(n))?(await G(e,$.pk(t),$.sk(n)),!0):!1}}}function je(t){let{tenant_id:n,...r}=Y(t);return e.hookSchema.parse(X(r))}function Me(e){return{async create(t,n){let r=new Date().toISOString(),i=n.hook_id||o(),a=`url`in n?n.url:void 0,s=`form_id`in n?n.form_id:void 0,c=`template_id`in n?n.template_id:void 0,l={PK:y.pk(t),SK:y.sk(i),entityType:`HOOK`,tenant_id:t,hook_id:i,trigger_id:n.trigger_id,url:a,form_id:s,template_id:c,enabled:n.enabled??!1,synchronous:n.synchronous??!1,priority:n.priority,created_at:r,updated_at:r};return await W(e,l),je(l)},async get(t,n){let r=await U(e,y.pk(t),y.sk(n));return r?je(r):null},async list(t,n={}){let r=await q(e,y.pk(t),n,{skPrefix:`HOOK#`});return{hooks:r.items.map(je),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return delete i.hook_id,J(e,y.pk(t),y.sk(n),i)},async remove(t,n){return G(e,y.pk(t),y.sk(n))}}}function Ne(t){return e.signingKeySchema.parse(X(Y(t)))}function Pe(e){return{async create(t){let n=new Date().toISOString();await W(e,{PK:b.pk(),SK:b.sk(t.kid),entityType:`KEY`,kid:t.kid,cert:t.cert,fingerprint:t.fingerprint,thumbprint:t.thumbprint,pkcs7:t.pkcs7,current:t.current,next:t.next,previous:t.previous,current_since:t.current_since,current_until:t.current_until,revoked:t.revoked,revoked_at:t.revoked_at,connection:t.connection,type:t.type,created_at:n,updated_at:n})},async list(t={}){let n=await q(e,b.pk(),t,{skPrefix:`KEY#`});return{signingKeys:n.items.map(Ne),start:n.start,limit:n.limit,length:n.length}},async update(t,n){let r={...n,updated_at:new Date().toISOString()};return J(e,b.pk(),b.sk(t),r)}}}function Fe(t){let{tenant_id:n,verification:r,domain_metadata:i,...a}=Y(t),o=X({...a,verification:r?JSON.parse(r):void 0,domain_metadata:i?JSON.parse(i):void 0});return e.customDomainSchema.parse(o)}function Ie(t){let{verification:n,domain_metadata:r,...i}=Y(t),a=X({...i,tenant_id:t.tenant_id,verification:n?JSON.parse(n):void 0,domain_metadata:r?JSON.parse(r):void 0});return e.customDomainWithTenantIdSchema.parse(a)}function Le(e){return{async create(t,n){let r=new Date().toISOString(),i=n.custom_domain_id||o(),a={PK:x.pk(t),SK:x.sk(i),GSI1PK:x.gsi1pk(n.domain),GSI1SK:x.gsi1sk(),entityType:`CUSTOM_DOMAIN`,tenant_id:t,custom_domain_id:i,domain:n.domain,primary:!1,status:`pending_verification`,type:n.type,verification_method:n.verification_method,custom_client_ip_header:n.custom_client_ip_header,tls_policy:n.tls_policy,domain_metadata:n.domain_metadata?JSON.stringify(n.domain_metadata):void 0,created_at:r,updated_at:r};return await W(e,a),Fe(a)},async get(t,n){let r=await U(e,x.pk(t),x.sk(n));return r?Fe(r):null},async getByDomain(t){let{items:n}=await K(e,x.gsi1pk(t),{indexName:`GSI1`,skValue:x.gsi1sk()});return n.length?Ie(n[0]):null},async list(t){let{items:n}=await K(e,x.pk(t),{skPrefix:`CUSTOM_DOMAIN#`});return n.map(Fe)},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return r.verification!==void 0&&(i.verification=JSON.stringify(r.verification)),r.domain_metadata!==void 0&&(i.domain_metadata=JSON.stringify(r.domain_metadata)),delete i.custom_domain_id,J(e,x.pk(t),x.sk(n),i)},async remove(t,n){return G(e,x.pk(t),x.sk(n))}}}function Re(t){let{tenant_id:n,country_code:r,city_name:i,latitude:a,longitude:o,time_zone:s,continent_code:c,...l}=Y(t),u=X({...l,auth0_client:t.auth0_client?JSON.parse(t.auth0_client):void 0,details:t.details?JSON.parse(t.details):void 0,location_info:r?{country_code:r,city_name:i,latitude:a,longitude:o,time_zone:s,continent_code:c}:void 0});return e.logSchema.parse(u)}function ze(e){return{async create(t,n){let r=new Date().toISOString(),i=n.log_id||o(),a=n.date||r,s=a.substring(0,10),c={PK:C.pk(t),SK:C.sk(i),GSI1PK:C.gsi1pk(t,s),GSI1SK:C.gsi1sk(i),entityType:`LOG`,tenant_id:t,log_id:i,type:n.type,description:n.description,ip:n.ip,user_agent:n.user_agent,date:a,user_id:n.user_id,user_name:n.user_name,connection:n.connection,connection_id:n.connection_id,client_id:n.client_id,client_name:n.client_name,audience:n.audience,scope:n.scope,strategy:n.strategy,strategy_type:n.strategy_type,hostname:n.hostname,isMobile:n.isMobile,auth0_client:n.auth0_client?JSON.stringify(n.auth0_client):void 0,details:n.details?JSON.stringify(n.details):void 0,country_code:n.location_info?.country_code,city_name:n.location_info?.city_name,latitude:n.location_info?.latitude,longitude:n.location_info?.longitude,time_zone:n.location_info?.time_zone,continent_code:n.location_info?.continent_code,created_at:r,updated_at:r},l=new Date(a);return l.setDate(l.getDate()+30),c.ttl=Math.floor(l.getTime()/1e3),await W(e,c),Re(c)},async list(t,n={}){let r=await q(e,C.pk(t),n,{skPrefix:`LOG#`,scanIndexForward:!1});return{logs:r.items.map(Re),start:r.start,limit:r.limit,length:r.length}},async get(t,n){let r=await U(e,C.pk(t),C.sk(n));return r?Re(r):null}}}function Be(t){let{tenant_id:n,...r}=Y(t),i=X({...r,borders:t.borders?JSON.parse(t.borders):void 0,colors:t.colors?JSON.parse(t.colors):void 0,fonts:t.fonts?JSON.parse(t.fonts):void 0,page_background:t.page_background?JSON.parse(t.page_background):void 0,widget:t.widget?JSON.parse(t.widget):void 0});return e.themeSchema.parse(i)}function Ve(e){return{async create(t,n,r){let i=new Date().toISOString(),a=r||o(),s={PK:v.pk(t),SK:v.sk(a),entityType:`THEME`,tenant_id:t,themeId:a,displayName:n.displayName,borders:n.borders?JSON.stringify(n.borders):void 0,colors:n.colors?JSON.stringify(n.colors):void 0,fonts:n.fonts?JSON.stringify(n.fonts):void 0,page_background:n.page_background?JSON.stringify(n.page_background):void 0,widget:n.widget?JSON.stringify(n.widget):void 0,created_at:i,updated_at:i};return await W(e,s),Be(s)},async get(t,n){let r=await U(e,v.pk(t),v.sk(n));return r?Be(r):null},async update(t,n,r){let i={updated_at:new Date().toISOString()};return r.displayName!==void 0&&(i.displayName=r.displayName),r.borders!==void 0&&(i.borders=JSON.stringify(r.borders)),r.colors!==void 0&&(i.colors=JSON.stringify(r.colors)),r.fonts!==void 0&&(i.fonts=JSON.stringify(r.fonts)),r.page_background!==void 0&&(i.page_background=JSON.stringify(r.page_background)),r.widget!==void 0&&(i.widget=JSON.stringify(r.widget)),J(e,v.pk(t),v.sk(n),i)},async remove(t,n){return G(e,v.pk(t),v.sk(n))}}}var He={universal_login_experience:`new`,identifier_first:!1,password_first:!1,webauthn_platform_first_factor:!1};function Ue(t){let{tenant_id:n,...r}=Y(t),i=X({universal_login_experience:r.universal_login_experience||`new`,identifier_first:r.identifier_first??!1,password_first:r.password_first??!1,webauthn_platform_first_factor:r.webauthn_platform_first_factor??!1});return e.promptSettingSchema.parse(i)}function We(e){return{async set(t,n){let r=new Date().toISOString(),i=await this.get(t),a=await U(e,E.pk(t),E.sk());await W(e,{PK:E.pk(t),SK:E.sk(),entityType:`PROMPT_SETTING`,tenant_id:t,universal_login_experience:n.universal_login_experience??i.universal_login_experience,identifier_first:n.identifier_first??i.identifier_first,password_first:n.password_first??i.password_first,webauthn_platform_first_factor:n.webauthn_platform_first_factor??i.webauthn_platform_first_factor,created_at:a?.created_at||r,updated_at:r})},async get(t){let n=await U(e,E.pk(t),E.sk());return n?Ue(n):He}}}function Ge(t){let{tenant_id:n,...r}=Y(t),i=X({...r,credentials:t.credentials?JSON.parse(t.credentials):void 0,settings:t.settings?JSON.parse(t.settings):void 0});return e.emailProviderSchema.parse(i)}function Ke(e){return{async create(t,n){let r=new Date().toISOString();await W(e,{PK:w.pk(t),SK:w.sk(),entityType:`EMAIL_PROVIDER`,tenant_id:t,name:n.name,enabled:n.enabled??!0,default_from_address:n.default_from_address,credentials:n.credentials?JSON.stringify(n.credentials):void 0,settings:n.settings?JSON.stringify(n.settings):void 0,created_at:r,updated_at:r})},async get(t){let n=await U(e,w.pk(t),w.sk());return n?Ge(n):null},async update(t,n){let r={...n,updated_at:new Date().toISOString()};n.credentials!==void 0&&(r.credentials=JSON.stringify(n.credentials)),n.settings!==void 0&&(r.settings=JSON.stringify(n.settings)),await J(e,w.pk(t),w.sk(),r)},async remove(t){await G(e,w.pk(t),w.sk())}}}function qe(t){let n=Y(t),r=X({template:n.template,body:n.body,from:n.from,subject:n.subject,syntax:n.syntax,resultUrl:n.result_url,urlLifetimeInSeconds:n.url_lifetime_in_seconds,includeEmailInRedirect:!!n.include_email_in_redirect,enabled:!!n.enabled});return e.emailTemplateSchema.parse(r)}function Je(e){return{async create(t,n){let r=new Date().toISOString();return await W(e,{PK:T.pk(t),SK:T.sk(n.template),entityType:`EMAIL_TEMPLATE`,tenant_id:t,template:n.template,body:n.body,from:n.from,subject:n.subject,syntax:n.syntax,result_url:n.resultUrl,url_lifetime_in_seconds:n.urlLifetimeInSeconds,include_email_in_redirect:n.includeEmailInRedirect,enabled:n.enabled,created_at:r,updated_at:r}),n},async get(t,n){let r=await U(e,T.pk(t),T.sk(n));return r?qe(r):null},async list(t){let{items:n}=await K(e,T.pk(t),{skPrefix:T.skPrefix()});return n.map(qe)},async update(t,n,r){let i={updated_at:new Date().toISOString()};return r.body!==void 0&&(i.body=r.body),r.from!==void 0&&(i.from=r.from),r.subject!==void 0&&(i.subject=r.subject),r.syntax!==void 0&&(i.syntax=r.syntax),r.resultUrl!==void 0&&(i.result_url=r.resultUrl),r.urlLifetimeInSeconds!==void 0&&(i.url_lifetime_in_seconds=r.urlLifetimeInSeconds),r.includeEmailInRedirect!==void 0&&(i.include_email_in_redirect=r.includeEmailInRedirect),r.enabled!==void 0&&(i.enabled=r.enabled),await U(e,T.pk(t),T.sk(n))?(await J(e,T.pk(t),T.sk(n),i),!0):!1},async remove(t,n){return await U(e,T.pk(t),T.sk(n))?(await G(e,T.pk(t),T.sk(n)),!0):!1}}}function Ye(t){let{tenant_id:n,device:r,resource_servers:i,...a}=Y(t),o=X({...a,device:JSON.parse(r),resource_servers:JSON.parse(i)});return e.refreshTokenSchema.parse(o)}function Xe(e){return{async create(t,n){let r=new Date().toISOString(),i={PK:D.pk(t),SK:D.sk(n.id),GSI1PK:D.gsi1pk(t,n.user_id),GSI1SK:D.gsi1sk(n.id),entityType:`REFRESH_TOKEN`,tenant_id:t,id:n.id,user_id:n.user_id,login_id:n.login_id,client_id:n.client_id,expires_at:n.expires_at,idle_expires_at:n.idle_expires_at,last_exchanged_at:n.last_exchanged_at,device:JSON.stringify(n.device),resource_servers:JSON.stringify(n.resource_servers),rotating:n.rotating,token_lookup:n.token_lookup,token_hash:n.token_hash,family_id:n.family_id,rotated_to:n.rotated_to,rotated_at:n.rotated_at,created_at:r,updated_at:r};return n.token_lookup&&(i.GSI2PK=D.gsi2pk(t,n.token_lookup),i.GSI2SK=D.gsi2sk()),n.expires_at&&(i.ttl=Math.floor(new Date(n.expires_at).getTime()/1e3)),await W(e,i),Ye(i)},async get(t,n){let r=await U(e,D.pk(t),D.sk(n));return r?Ye(r):null},async getByLookup(t,n){let r=await K(e,D.gsi2pk(t,n),{indexName:`GSI2`,skValue:D.gsi2sk(),limit:1});return r.items[0]?Ye(r.items[0]):null},async list(t,n={}){let r=await q(e,D.pk(t),n,{skPrefix:`REFRESH_TOKEN#`});return{refresh_tokens:r.items.map(Ye),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r,i){let a={...r,updated_at:new Date().toISOString()};r.device!==void 0&&(a.device=JSON.stringify(r.device)),r.resource_servers!==void 0&&(a.resource_servers=JSON.stringify(r.resource_servers)),delete a.id;let o=await J(e,D.pk(t),D.sk(n),a);if(o&&i?.loginSessionBump)try{await J(e,u.pk(t),u.sk(i.loginSessionBump.login_id),{expires_at:i.loginSessionBump.expires_at,updated_at:new Date().toISOString()})}catch{}return o},async remove(t,n){return G(e,D.pk(t),D.sk(n))},async revokeByLoginSession(n,r,i){let a=0,o=0;for(;;){let s=await q(e,D.pk(n),{page:o,per_page:100},{skPrefix:`REFRESH_TOKEN#`});for(let o of s.items)if(o.login_id===r&&!o.revoked_at)try{await e.client.send(new t.UpdateCommand({TableName:e.tableName,Key:{PK:D.pk(n),SK:D.sk(o.id)},UpdateExpression:`SET #revoked_at = :revoked_at, #updated_at = :updated_at`,ConditionExpression:`attribute_exists(PK) AND attribute_not_exists(#revoked_at)`,ExpressionAttributeNames:{"#revoked_at":`revoked_at`,"#updated_at":`updated_at`},ExpressionAttributeValues:{":revoked_at":i,":updated_at":new Date().toISOString()}})),a++}catch(e){if(e?.name===`ConditionalCheckFailedException`)continue;throw e}if(s.items.length<100)break;o++}return a},async revokeFamily(n,r,i){let a=0,o=0;for(;;){let s=await q(e,D.pk(n),{page:o,per_page:100},{skPrefix:`REFRESH_TOKEN#`});for(let o of s.items)if(o.family_id===r&&!o.revoked_at)try{await e.client.send(new t.UpdateCommand({TableName:e.tableName,Key:{PK:D.pk(n),SK:D.sk(o.id)},UpdateExpression:`SET #revoked_at = :revoked_at, #updated_at = :updated_at`,ConditionExpression:`attribute_exists(PK) AND attribute_not_exists(#revoked_at)`,ExpressionAttributeNames:{"#revoked_at":`revoked_at`,"#updated_at":`updated_at`},ExpressionAttributeValues:{":revoked_at":i,":updated_at":new Date().toISOString()}})),a++}catch(e){if(e?.name===`ConditionalCheckFailedException`)continue;throw e}if(s.items.length<100)break;o++}return a}}}function Ze(t){let{tenant_id:n,...r}=Y(t),i=X({...r,nodes:t.nodes?JSON.parse(t.nodes):void 0,start:t.start?JSON.parse(t.start):void 0,ending:t.ending?JSON.parse(t.ending):void 0,messages:t.messages?JSON.parse(t.messages):void 0,languages:t.languages?JSON.parse(t.languages):void 0,translations:t.translations?JSON.parse(t.translations):void 0,style:t.style?JSON.parse(t.style):void 0});return e.formSchema.parse(i)}function Qe(e){return{async create(t,n){let r=new Date().toISOString(),i=o(),a={PK:O.pk(t),SK:O.sk(i),entityType:`FORM`,tenant_id:t,id:i,name:n.name,nodes:n.nodes?JSON.stringify(n.nodes):void 0,start:n.start?JSON.stringify(n.start):void 0,ending:n.ending?JSON.stringify(n.ending):void 0,messages:n.messages?JSON.stringify(n.messages):void 0,languages:n.languages?JSON.stringify(n.languages):void 0,translations:n.translations?JSON.stringify(n.translations):void 0,style:n.style?JSON.stringify(n.style):void 0,created_at:r,updated_at:r};return await W(e,a),Ze(a)},async get(t,n){let r=await U(e,O.pk(t),O.sk(n));return r?Ze(r):null},async list(t,n={}){let r=await q(e,O.pk(t),n,{skPrefix:`FORM#`});return{forms:r.items.map(Ze),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={updated_at:new Date().toISOString()};return r.name!==void 0&&(i.name=r.name),r.nodes!==void 0&&(i.nodes=JSON.stringify(r.nodes)),r.start!==void 0&&(i.start=JSON.stringify(r.start)),r.ending!==void 0&&(i.ending=JSON.stringify(r.ending)),r.messages!==void 0&&(i.messages=JSON.stringify(r.messages)),r.languages!==void 0&&(i.languages=JSON.stringify(r.languages)),r.translations!==void 0&&(i.translations=JSON.stringify(r.translations)),r.style!==void 0&&(i.style=JSON.stringify(r.style)),J(e,O.pk(t),O.sk(n),i)},async remove(t,n){return G(e,O.pk(t),O.sk(n))}}}function $e(t){let{tenant_id:n,verification_key:r,is_system:i,metadata:a,...o}=Y(t),s=X({...o,verificationKey:r,scopes:t.scopes?JSON.parse(t.scopes):void 0,options:t.options?JSON.parse(t.options):void 0,is_system:i?!0:void 0,metadata:a});return e.resourceServerSchema.parse(s)}function et(e){return{async create(t,n){let r=new Date().toISOString(),i=n.id||o(),a={PK:A.pk(t),SK:A.sk(i),GSI1PK:A.gsi1pk(t,n.identifier),GSI1SK:A.gsi1sk(),entityType:`RESOURCE_SERVER`,tenant_id:t,id:i,identifier:n.identifier,name:n.name,signing_alg:n.signing_alg,signing_secret:n.signing_secret,allow_offline_access:n.allow_offline_access,skip_consent_for_verifiable_first_party_clients:n.skip_consent_for_verifiable_first_party_clients,token_lifetime:n.token_lifetime,token_lifetime_for_web:n.token_lifetime_for_web,enforce_policies:n.options?.enforce_policies,token_dialect:n.options?.token_dialect,scopes:n.scopes?JSON.stringify(n.scopes):void 0,options:n.options?JSON.stringify(n.options):void 0,verification_key:n.verificationKey,is_system:n.is_system??!1,metadata:n.metadata,created_at:r,updated_at:r};return await W(e,a),$e(a)},async get(t,n){let r=await U(e,A.pk(t),A.sk(n));return r?$e(r):null},async list(t,n={}){let r=await q(e,A.pk(t),n,{skPrefix:`RESOURCE_SERVER#`});return{resource_servers:r.items.map($e),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return r.scopes!==void 0&&(i.scopes=JSON.stringify(r.scopes)),r.options!==void 0&&(i.options=JSON.stringify(r.options)),r.verificationKey!==void 0&&(i.verification_key=r.verificationKey,delete i.verificationKey),delete i.id,J(e,A.pk(t),A.sk(n),i)},async remove(t,n){return G(e,A.pk(t),A.sk(n))}}}function tt(t){let{tenant_id:n,is_system:r,metadata:i,...a}=Y(t);return e.roleSchema.parse(X({...a,is_system:r?!0:void 0,metadata:i}))}function nt(e){return{async create(t,n){let r=new Date().toISOString(),i=o(),a={PK:j.pk(t),SK:j.sk(i),entityType:`ROLE`,tenant_id:t,id:i,name:n.name,description:n.description,is_system:n.is_system??!1,metadata:n.metadata,created_at:r,updated_at:r};return await W(e,a),tt(a)},async get(t,n){let r=await U(e,j.pk(t),j.sk(n));return r?tt(r):null},async list(t,n={}){let r=await q(e,j.pk(t),n,{skPrefix:`ROLE#`});return{roles:r.items.map(tt),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return delete i.id,J(e,j.pk(t),j.sk(n),i)},async remove(t,n){return G(e,j.pk(t),j.sk(n))}}}function rt(t){let{tenant_id:n,...r}=Y(t);return e.rolePermissionSchema.parse(X(r))}function it(e){return{async assign(t,n,r){let i=new Date().toISOString();for(let a of r)await W(e,{PK:M.pk(t,n),SK:M.sk(a.resource_server_identifier,a.permission_name),entityType:`ROLE_PERMISSION`,tenant_id:t,role_id:a.role_id,resource_server_identifier:a.resource_server_identifier,permission_name:a.permission_name,created_at:i,updated_at:i});return!0},async remove(t,n,r){for(let i of r)await G(e,M.pk(t,n),M.sk(i.resource_server_identifier,i.permission_name));return!0},async list(t,n,r={}){return(await q(e,M.pk(t,n),r,{skPrefix:M.skPrefix()})).items.map(rt)}}}function at(t){let{tenant_id:n,sources:r,...i}=Y(t),a=X({...i,resource_server_name:t.resource_server_name||t.resource_server_identifier,sources:r?JSON.parse(r):void 0});return e.userPermissionWithDetailsSchema.parse(a)}function ot(e){return{async create(t,n,r,i){let a=new Date().toISOString();return await W(e,{PK:N.pk(t,n,i),SK:N.sk(r.resource_server_identifier,r.permission_name),entityType:`USER_PERMISSION`,tenant_id:t,user_id:n,organization_id:i,resource_server_identifier:r.resource_server_identifier,permission_name:r.permission_name,created_at:a,updated_at:a}),!0},async remove(t,n,r,i){return G(e,N.pk(t,n,i),N.sk(r.resource_server_identifier,r.permission_name))},async list(t,n,r={},i){return(await q(e,N.pk(t,n,i),r,{skPrefix:N.skPrefix()})).items.map(at)}}}function st(t){let{tenant_id:n,...r}=Y(t);return e.roleSchema.parse(X(r))}function ct(e){return{async create(t,n,r,i){let a=new Date().toISOString();return await W(e,{PK:P.pk(t,n,i),SK:P.sk(r),entityType:`USER_ROLE`,tenant_id:t,user_id:n,organization_id:i,role_id:r,created_at:a,updated_at:a}),!0},async remove(t,n,r,i){return G(e,P.pk(t,n,i),P.sk(r))},async list(t,n,r={},i){let{items:a}=await K(e,P.pk(t,n,i),{skPrefix:P.skPrefix()}),o=[];for(let n of a){let r=await U(e,j.pk(t),j.sk(n.role_id));r&&o.push(st(r))}return o}}}function lt(t){let{tenant_id:n,...r}=Y(t),i=X({...r,branding:t.branding?JSON.parse(t.branding):void 0,metadata:t.metadata?JSON.parse(t.metadata):void 0,enabled_connections:t.enabled_connections?JSON.parse(t.enabled_connections):void 0,token_quota:t.token_quota?JSON.parse(t.token_quota):void 0});return e.organizationSchema.parse(i)}function ut(e){return{async create(t,n){let r=new Date().toISOString(),i=n.id||o(),a={PK:F.pk(t),SK:F.sk(i),GSI1PK:F.gsi1pk(t,n.name),GSI1SK:F.gsi1sk(),entityType:`ORGANIZATION`,tenant_id:t,id:i,name:n.name,display_name:n.display_name,branding:n.branding?JSON.stringify(n.branding):void 0,metadata:n.metadata?JSON.stringify(n.metadata):void 0,enabled_connections:n.enabled_connections?JSON.stringify(n.enabled_connections):void 0,token_quota:n.token_quota?JSON.stringify(n.token_quota):void 0,created_at:r,updated_at:r};return await W(e,a),lt(a)},async get(t,n){let r=await U(e,F.pk(t),F.sk(n));return r||=(await q(e,F.gsi1pk(t,n),{page:0,per_page:1},{indexName:`GSI1`,skPrefix:`ORGANIZATION`})).items[0]||null,r?lt(r):null},async list(t,n={}){let r=await q(e,F.pk(t),n,{skPrefix:`ORGANIZATION#`});return{organizations:r.items.map(lt),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return r.branding!==void 0&&(i.branding=JSON.stringify(r.branding)),r.metadata!==void 0&&(i.metadata=JSON.stringify(r.metadata)),r.enabled_connections!==void 0&&(i.enabled_connections=JSON.stringify(r.enabled_connections)),r.token_quota!==void 0&&(i.token_quota=JSON.stringify(r.token_quota)),delete i.id,J(e,F.pk(t),F.sk(n),i)},async remove(t,n){return G(e,F.pk(t),F.sk(n))}}}async function dt(e,t,n){let r=await U(e,p.pk(t),p.sk(n));if(r)return{name:r.name,strategy:r.strategy}}function ft(e,t){return{connection_id:e.connection_id,assign_membership_on_login:e.assign_membership_on_login,show_as_button:e.show_as_button,is_signup_enabled:e.is_signup_enabled,connection:t?{name:t.name,strategy:t.strategy}:void 0,created_at:e.created_at,updated_at:e.updated_at}}function pt(e){return{async create(t,n,r){let i=new Date().toISOString(),a={PK:L.pk(t,n),SK:L.sk(r.connection_id),entityType:`ORGANIZATION_CONNECTION`,tenant_id:t,organization_id:n,connection_id:r.connection_id,assign_membership_on_login:r.assign_membership_on_login??!1,show_as_button:r.show_as_button??!0,is_signup_enabled:r.is_signup_enabled??!0,created_at:i,updated_at:i};return await W(e,a),ft(a,await dt(e,t,r.connection_id))},async list(t,n){let{items:r}=await K(e,L.pk(t,n),{skPrefix:L.skPrefix()}),i=[];for(let n of r){let r=await dt(e,t,n.connection_id);i.push(ft(n,r))}return i},async get(t,n,r){let i=await U(e,L.pk(t,n),L.sk(r));return i?ft(i,await dt(e,t,r)):null},async update(t,n,r,i){if(!await U(e,L.pk(t,n),L.sk(r)))return null;let a={updated_at:new Date().toISOString()};i.assign_membership_on_login!==void 0&&(a.assign_membership_on_login=i.assign_membership_on_login),i.show_as_button!==void 0&&(a.show_as_button=i.show_as_button),i.is_signup_enabled!==void 0&&(a.is_signup_enabled=i.is_signup_enabled),await J(e,L.pk(t,n),L.sk(r),a);let o=await U(e,L.pk(t,n),L.sk(r));return o?ft(o,await dt(e,t,r)):null},async remove(t,n,r){return await U(e,L.pk(t,n),L.sk(r))?G(e,L.pk(t,n),L.sk(r)):!1}}}function mt(t){let{tenant_id:n,...r}=Y(t);return e.userOrganizationSchema.parse(X(r))}function ht(t){let{tenant_id:n,...r}=Y(t),i=X({...r,branding:t.branding?JSON.parse(t.branding):void 0,metadata:t.metadata?JSON.parse(t.metadata):void 0,enabled_connections:t.enabled_connections?JSON.parse(t.enabled_connections):void 0,token_quota:t.token_quota?JSON.parse(t.token_quota):void 0});return e.organizationSchema.parse(i)}function gt(e){return{async create(t,n){let r=new Date().toISOString(),i=o(),a={PK:I.pk(t),SK:I.sk(i),GSI1PK:I.gsi1pk(t,n.user_id),GSI1SK:I.gsi1sk(n.organization_id),GSI2PK:I.gsi2pk(t,n.organization_id),GSI2SK:I.gsi2sk(n.user_id),entityType:`USER_ORGANIZATION`,tenant_id:t,id:i,user_id:n.user_id,organization_id:n.organization_id,created_at:r,updated_at:r};return await W(e,a),mt(a)},async get(t,n){let r=await U(e,I.pk(t),I.sk(n));return r?mt(r):null},async remove(t,n){return G(e,I.pk(t),I.sk(n))},async list(t,n={}){let r=await q(e,I.pk(t),n,{skPrefix:`USER_ORG#`});return{userOrganizations:r.items.map(mt),start:r.start,limit:r.limit,length:r.length}},async listUserOrganizations(t,n,r={}){let i=await q(e,I.gsi1pk(t,n),r,{indexName:`GSI1`,skPrefix:`USER_ORG#`}),a=[];for(let n of i.items){let r=await U(e,F.pk(t),F.sk(n.organization_id));r&&a.push(ht(r))}return{organizations:a,start:i.start,limit:i.limit,length:i.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return J(e,I.pk(t),I.sk(n),i)}}}function _t(t){let{tenant_id:n,...r}=Y(t),i=X({...r,inviter:t.inviter?JSON.parse(t.inviter):{},invitee:t.invitee?JSON.parse(t.invitee):{},app_metadata:t.app_metadata?JSON.parse(t.app_metadata):void 0,user_metadata:t.user_metadata?JSON.parse(t.user_metadata):void 0,roles:t.roles?JSON.parse(t.roles):void 0});return e.inviteSchema.parse(i)}function vt(e){return{async create(t,n){let r=new Date().toISOString(),i=o(),a=n.ttl_sec||604800,s=new Date(Date.now()+a*1e3).toISOString(),c={PK:R.pk(t),SK:R.sk(i),GSI1PK:R.gsi1pk(t,n.organization_id),GSI1SK:R.gsi1sk(i),entityType:`INVITE`,tenant_id:t,id:i,organization_id:n.organization_id,inviter:JSON.stringify(n.inviter||{}),invitee:JSON.stringify(n.invitee||{}),client_id:n.client_id,connection_id:n.connection_id,invitation_url:n.invitation_url,expires_at:s,app_metadata:n.app_metadata?JSON.stringify(n.app_metadata):void 0,user_metadata:n.user_metadata?JSON.stringify(n.user_metadata):void 0,roles:n.roles?JSON.stringify(n.roles):void 0,ttl_sec:a,send_invitation_email:n.send_invitation_email??!0,created_at:r,updated_at:r};return c.ttl=Math.floor(new Date(s).getTime()/1e3),await W(e,c),_t(c)},async get(t,n){let r=await U(e,R.pk(t),R.sk(n));return r?_t(r):null},async list(t,n={}){let r=await q(e,R.pk(t),n,{skPrefix:`INVITE#`});return{invites:r.items.map(_t),start:r.start,limit:r.limit,length:r.length}},async update(t,n,r){let i={...r,updated_at:new Date().toISOString()};return r.inviter!==void 0&&(i.inviter=JSON.stringify(r.inviter)),r.invitee!==void 0&&(i.invitee=JSON.stringify(r.invitee)),r.app_metadata!==void 0&&(i.app_metadata=JSON.stringify(r.app_metadata)),r.user_metadata!==void 0&&(i.user_metadata=JSON.stringify(r.user_metadata)),r.roles!==void 0&&(i.roles=JSON.stringify(r.roles)),delete i.id,J(e,R.pk(t),R.sk(n),i)},async remove(t,n){return G(e,R.pk(t),R.sk(n))}}}function yt(e){return{async get(t,n,r){let i=await U(e,H.pk(t),H.sk(n,r));if(!i)return null;try{return JSON.parse(i.custom_text)}catch{return null}},async set(t,n,r,i){let a=new Date().toISOString(),o=await U(e,H.pk(t),H.sk(n,r));await W(e,{PK:H.pk(t),SK:H.sk(n,r),entityType:`CUSTOM_TEXT`,tenant_id:t,prompt:n,language:r,custom_text:JSON.stringify(i),created_at:o?.created_at||a,updated_at:a})},async delete(t,n,r){await G(e,H.pk(t),H.sk(n,r))},async list(t){return(await K(e,H.pk(t),{skPrefix:H.skPrefix()})).items.map(e=>({prompt:e.prompt,language:e.language}))}}}function bt(t){let{tenant_id:n,...r}=Y(t);return e.authenticationMethodSchema.parse(X(r))}function xt(t){return{async create(e,n){let r=new Date().toISOString(),i=o(),a={PK:B.pk(e),SK:B.sk(i),GSI1PK:B.gsi1pk(e,n.user_id),GSI1SK:B.gsi1sk(i),entityType:`AUTHENTICATION_METHOD`,id:i,tenant_id:e,user_id:n.user_id,type:n.type,phone_number:n.phone_number,totp_secret:n.totp_secret,credential_id:n.credential_id,public_key:n.public_key,sign_count:n.sign_count,credential_backed_up:n.credential_backed_up,transports:n.transports,friendly_name:n.friendly_name,confirmed:n.confirmed??!1,created_at:r,updated_at:r},s=bt(a);return await W(t,a),s},async get(e,n){let r=await U(t,B.pk(e),B.sk(n));return r?bt(r):null},async getByCredentialId(e,n){let r=(await K(t,B.pk(e),{skPrefix:`AUTHENTICATION_METHOD#`})).items.find(e=>e.credential_id===n);return r?bt(r):null},async list(e,n){return(await K(t,B.gsi1pk(e,n),{skPrefix:B.gsi1skPrefix(),indexName:`GSI1`})).items.map(bt)},async update(n,r,i){let a=await this.get(n,r);if(!a)throw Error(`Authentication method ${r} not found`);let o={...a,...i,updated_at:new Date().toISOString()};e.authenticationMethodSchema.parse(o);let s={updated_at:o.updated_at};return i.phone_number!==void 0&&(s.phone_number=i.phone_number),i.totp_secret!==void 0&&(s.totp_secret=i.totp_secret),i.credential_id!==void 0&&(s.credential_id=i.credential_id),i.public_key!==void 0&&(s.public_key=i.public_key),i.sign_count!==void 0&&(s.sign_count=i.sign_count),i.credential_backed_up!==void 0&&(s.credential_backed_up=i.credential_backed_up),i.transports!==void 0&&(s.transports=i.transports),i.friendly_name!==void 0&&(s.friendly_name=i.friendly_name),i.confirmed!==void 0&&(s.confirmed=i.confirmed),await J(t,B.pk(n),B.sk(r),s),e.authenticationMethodSchema.parse(o)},async remove(e,n){return G(t,B.pk(e),B.sk(n))}}}function St(t){if(!t)return{path:`/*`};try{let n=JSON.parse(t),r=e.matchSchema.safeParse(n);if(r.success)return r.data}catch{}return{path:`/*`}}function Ct(t){if(!t)return[];try{let n=JSON.parse(t);if(!Array.isArray(n))return[];let r=[];for(let t of n){let n=e.handlerConfigSchema.safeParse(t);n.success&&r.push(n.data)}return r}catch{return[]}}function wt(e){let{match:t,handlers:n,...r}=Y(e);return X({...r,match:St(t),handlers:Ct(n)})}function Tt(e){return[...e].sort((e,t)=>e.priority===t.priority?e.created_at.localeCompare(t.created_at):e.priority-t.priority)}function Et(e){return{async create(t,n){let r=new Date().toISOString(),i=o(),a={PK:S.pk(t),SK:S.sk(i),GSI1PK:S.gsi1pk(t,n.custom_domain_id),GSI1SK:S.gsi1sk(i),entityType:`PROXY_ROUTE`,tenant_id:t,id:i,custom_domain_id:n.custom_domain_id,priority:n.priority,match:JSON.stringify(n.match),handlers:JSON.stringify(n.handlers),created_at:r,updated_at:r};return await W(e,a),wt(a)},async get(t,n){let r=await U(e,S.pk(t),S.sk(n));return r?wt(r):null},async list(t,n={}){let r=n.page??0,i=n.per_page??50,a;if(n.custom_domain_id){let{items:r}=await K(e,S.gsi1pk(t,n.custom_domain_id),{indexName:`GSI1`});a=r}else{let{items:n}=await K(e,S.pk(t),{skPrefix:`PROXY_ROUTE#`});a=n}let o=Tt(a).slice(r*i,r*i+i);return{proxy_routes:o.map(wt),start:r*i,limit:i,length:o.length}},async update(t,n,r){let i={updated_at:new Date().toISOString()};return r.priority!==void 0&&(i.priority=r.priority),r.match!==void 0&&(i.match=JSON.stringify(r.match)),r.handlers!==void 0&&(i.handlers=JSON.stringify(r.handlers)),await U(e,S.pk(t),S.sk(n))?J(e,S.pk(t),S.sk(n),i):!1},async remove(t,n){return await U(e,S.pk(t),S.sk(n))?G(e,S.pk(t),S.sk(n)):!1}}}function Dt(t){if(!t)return null;let n;try{n=JSON.parse(t)}catch{return null}let r=e.matchSchema.safeParse(n);return r.success?r.data:null}function Ot(t){if(!t)return null;let n;try{n=JSON.parse(t)}catch{return null}if(!Array.isArray(n)||n.length===0)return null;let r=[];for(let t of n){let n=e.handlerConfigSchema.safeParse(t);if(!n.success)return null;r.push(n.data)}return r}function kt(e){let t=Dt(e.match),n=Ot(e.handlers);return t===null||n===null?null:{id:e.id,tenant_id:e.tenant_id,custom_domain_id:e.custom_domain_id,priority:e.priority,match:t,handlers:n,created_at:e.created_at,updated_at:e.updated_at}}async function At(e,t){let n=t.indexOf(`:`),r=n===-1?t:t.slice(0,n),i=(r.endsWith(`.`)?r.slice(0,-1):r).toLowerCase(),{items:a}=await K(e,x.gsi1pk(i),{indexName:`GSI1`,skValue:x.gsi1sk()}),o=a[0];if(!o)return null;let{items:s}=await K(e,S.gsi1pk(o.tenant_id,o.custom_domain_id),{indexName:`GSI1`}),c=s.map(kt).filter(e=>e!==null).sort((e,t)=>e.priority===t.priority?e.created_at.localeCompare(t.created_at):e.priority-t.priority);return{tenant_id:o.tenant_id,custom_domain_id:o.custom_domain_id,domain:o.domain,routes:c}}function jt(e){return{proxyRoutes:Et(e),resolveHost:t=>At(e,t)}}function Mt(e,t){let a={client:e,tableName:t.tableName},o={actions:n(),actionExecutions:r(),actionVersions:i(),branding:De(a),clients:ge(a),clientConnections:be(a),clientGrants:ve(a),clientRegistrationTokens:xe(a),codes:me(a),connections:Ce(a),customDomains:Le(a),emailProviders:Ke(a),emailTemplates:Je(a),flows:re(a),forms:Qe(a),hookCode:Ae(a),hooks:Me(a),invites:vt(a),keys:Pe(a),loginSessions:Te(a),logs:ze(a),authenticationMethods:xt(a),organizations:ut(a),organizationConnections:pt(a),passwords:fe(a),promptSettings:We(a),proxyRoutes:Et(a),refreshTokens:Xe(a),resourceServers:et(a),rolePermissions:it(a),roles:nt(a),sessions:ue(a),tenants:ae(a),themes:Ve(a),universalLoginTemplates:Oe(a),customText:yt(a),userOrganizations:gt(a),userPermissions:ot(a),userRoles:ct(a),users:ce(a),async transaction(e){if(o.outbox)throw Error(`DynamoDB adapter does not support atomic transactions. Cannot guarantee atomicity between entity writes and outbox events. Use a SQL-backed adapter for outbox-enabled tenants.`);return e(o)}};return o}exports.authenticationMethodKeys=B,exports.brandingKeys=g,exports.clientConnectionKeys=z,exports.clientGrantKeys=f,exports.clientKeys=d,exports.clientRegistrationTokenKeys=V,exports.codeKeys=m,exports.connectionKeys=p,exports.createAuthenticationMethodsAdapter=xt,exports.createBrandingAdapter=De,exports.createClientConnectionsAdapter=be,exports.createClientGrantsAdapter=ve,exports.createClientsAdapter=ge,exports.createCodesAdapter=me,exports.createConnectionsAdapter=Ce,exports.createCustomDomainsAdapter=Le,exports.createEmailProvidersAdapter=Ke,exports.createFlowsAdapter=re,exports.createFormsAdapter=Qe,exports.createHooksAdapter=Me,exports.createInvitesAdapter=vt,exports.createKeysAdapter=Pe,exports.createLoginSessionsAdapter=Te,exports.createLogsAdapter=ze,exports.createOrganizationConnectionsAdapter=pt,exports.createOrganizationsAdapter=ut,exports.createPasswordsAdapter=fe,exports.createPromptSettingsAdapter=We,exports.createProxyDataAdapter=jt,exports.createProxyRoutesAdapter=Et,exports.createRefreshTokensAdapter=Xe,exports.createResourceServersAdapter=et,exports.createRolePermissionsAdapter=it,exports.createRolesAdapter=nt,exports.createSessionsAdapter=ue,exports.createTenantsAdapter=ae,exports.createThemesAdapter=Ve,exports.createUserOrganizationsAdapter=gt,exports.createUserPermissionsAdapter=ot,exports.createUserRolesAdapter=ct,exports.createUsersAdapter=ce,exports.customDomainKeys=x,exports.customTextKeys=H,exports.default=Mt,exports.deleteItem=G,exports.emailProviderKeys=w,exports.emailTemplateKeys=T,exports.flowKeys=k,exports.formKeys=O,exports.getItem=U,exports.hookKeys=y,exports.inviteKeys=R,exports.keyKeys=b,exports.legacyClientKeys=ee,exports.logKeys=C,exports.loginSessionKeys=u,exports.organizationConnectionKeys=L,exports.organizationKeys=F,exports.passwordKeys=h,exports.promptSettingsKeys=E,exports.proxyRouteKeys=S,exports.putItem=W,exports.queryItems=K,exports.queryWithPagination=q,exports.refreshTokenKeys=D,exports.removeNullProperties=X,exports.resourceServerKeys=A,exports.roleKeys=j,exports.rolePermissionKeys=M,exports.sessionKeys=l,exports.stripDynamoDBFields=Y,exports.tenantKeys=s,exports.themeKeys=v,exports.transactWriteItems=te,exports.universalLoginTemplateKeys=_,exports.updateItem=J,exports.userKeys=c,exports.userOrganizationKeys=I,exports.userPermissionKeys=N,exports.userRoleKeys=P;
@@ -0,0 +1,393 @@
1
+ import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
2
+ import { ProxyRoutesAdapter, TenantsDataAdapter, UserDataAdapter, SessionsAdapter, PasswordsAdapter, CodesAdapter, ClientsAdapter, ClientGrantsAdapter, ClientConnectionsAdapter, ConnectionsAdapter, LoginSessionsAdapter, BrandingAdapter, HooksAdapter, KeysAdapter, CustomDomainsAdapter, LogsDataAdapter, ThemesAdapter, PromptSettingsAdapter, EmailProvidersAdapter, RefreshTokensAdapter, FormsAdapter, ResourceServersAdapter, RolesAdapter, RolePermissionsAdapter, UserPermissionsAdapter, UserRolesAdapter, OrganizationsAdapter, OrganizationConnectionsAdapter, UserOrganizationsAdapter, InvitesAdapter, FlowsAdapter, AuthenticationMethodsAdapter, ListParams, DataAdapters } from '@authhero/adapter-interfaces';
3
+ import { ProxyDataAdapter } from '@authhero/proxy';
4
+
5
+ interface DynamoDBConfig {
6
+ tableName: string;
7
+ }
8
+ interface DynamoDBContext {
9
+ client: DynamoDBDocumentClient;
10
+ tableName: string;
11
+ }
12
+ /**
13
+ * Entity types for single-table design
14
+ */
15
+ type EntityType = "FLOW" | "TENANT" | "USER" | "SESSION" | "LOGIN_SESSION" | "CLIENT" | "CLIENT_GRANT" | "CONNECTION" | "CODE" | "PASSWORD" | "BRANDING" | "THEME" | "HOOK" | "KEY" | "CUSTOM_DOMAIN" | "LOG" | "EMAIL_PROVIDER" | "EMAIL_TEMPLATE" | "PROMPT_SETTING" | "REFRESH_TOKEN" | "FORM" | "RESOURCE_SERVER" | "ROLE" | "ROLE_PERMISSION" | "USER_PERMISSION" | "USER_ROLE" | "ORGANIZATION" | "ORGANIZATION_CONNECTION" | "USER_ORGANIZATION" | "INVITE" | "LEGACY_CLIENT" | "CLIENT_CONNECTION" | "UNIVERSAL_LOGIN_TEMPLATE" | "CUSTOM_TEXT" | "AUTHENTICATION_METHOD" | "HOOK_CODE" | "CLIENT_REGISTRATION_TOKEN" | "PROXY_ROUTE";
16
+ /**
17
+ * Base DynamoDB item structure for single-table design
18
+ */
19
+ interface DynamoDBBaseItem {
20
+ PK: string;
21
+ SK: string;
22
+ entityType: EntityType;
23
+ GSI1PK?: string;
24
+ GSI1SK?: string;
25
+ GSI2PK?: string;
26
+ GSI2SK?: string;
27
+ created_at: string;
28
+ updated_at: string;
29
+ ttl?: number;
30
+ }
31
+
32
+ declare function createProxyRoutesAdapter(ctx: DynamoDBContext): ProxyRoutesAdapter;
33
+
34
+ declare function createProxyDataAdapter(ctx: DynamoDBContext): ProxyDataAdapter;
35
+
36
+ declare function createTenantsAdapter(ctx: DynamoDBContext): TenantsDataAdapter;
37
+
38
+ declare function createUsersAdapter(ctx: DynamoDBContext): UserDataAdapter;
39
+
40
+ declare function createSessionsAdapter(ctx: DynamoDBContext): SessionsAdapter;
41
+
42
+ declare function createPasswordsAdapter(ctx: DynamoDBContext): PasswordsAdapter;
43
+
44
+ declare function createCodesAdapter(ctx: DynamoDBContext): CodesAdapter;
45
+
46
+ declare function createClientsAdapter(ctx: DynamoDBContext): ClientsAdapter;
47
+
48
+ declare function createClientGrantsAdapter(ctx: DynamoDBContext): ClientGrantsAdapter;
49
+
50
+ declare function createClientConnectionsAdapter(ctx: DynamoDBContext): ClientConnectionsAdapter;
51
+
52
+ declare function createConnectionsAdapter(ctx: DynamoDBContext): ConnectionsAdapter;
53
+
54
+ declare function createLoginSessionsAdapter(ctx: DynamoDBContext): LoginSessionsAdapter;
55
+
56
+ declare function createBrandingAdapter(ctx: DynamoDBContext): BrandingAdapter;
57
+
58
+ declare function createHooksAdapter(ctx: DynamoDBContext): HooksAdapter;
59
+
60
+ declare function createKeysAdapter(ctx: DynamoDBContext): KeysAdapter;
61
+
62
+ declare function createCustomDomainsAdapter(ctx: DynamoDBContext): CustomDomainsAdapter;
63
+
64
+ declare function createLogsAdapter(ctx: DynamoDBContext): LogsDataAdapter;
65
+
66
+ declare function createThemesAdapter(ctx: DynamoDBContext): ThemesAdapter;
67
+
68
+ declare function createPromptSettingsAdapter(ctx: DynamoDBContext): PromptSettingsAdapter;
69
+
70
+ declare function createEmailProvidersAdapter(ctx: DynamoDBContext): EmailProvidersAdapter;
71
+
72
+ declare function createRefreshTokensAdapter(ctx: DynamoDBContext): RefreshTokensAdapter;
73
+
74
+ declare function createFormsAdapter(ctx: DynamoDBContext): FormsAdapter;
75
+
76
+ declare function createResourceServersAdapter(ctx: DynamoDBContext): ResourceServersAdapter;
77
+
78
+ declare function createRolesAdapter(ctx: DynamoDBContext): RolesAdapter;
79
+
80
+ declare function createRolePermissionsAdapter(ctx: DynamoDBContext): RolePermissionsAdapter;
81
+
82
+ declare function createUserPermissionsAdapter(ctx: DynamoDBContext): UserPermissionsAdapter;
83
+
84
+ declare function createUserRolesAdapter(ctx: DynamoDBContext): UserRolesAdapter;
85
+
86
+ declare function createOrganizationsAdapter(ctx: DynamoDBContext): OrganizationsAdapter;
87
+
88
+ declare function createOrganizationConnectionsAdapter(ctx: DynamoDBContext): OrganizationConnectionsAdapter;
89
+
90
+ declare function createUserOrganizationsAdapter(ctx: DynamoDBContext): UserOrganizationsAdapter;
91
+
92
+ declare function createInvitesAdapter(ctx: DynamoDBContext): InvitesAdapter;
93
+
94
+ declare function createFlowsAdapter(ctx: DynamoDBContext): FlowsAdapter;
95
+
96
+ declare function createAuthenticationMethodsAdapter(ctx: DynamoDBContext): AuthenticationMethodsAdapter;
97
+
98
+ /**
99
+ * Key generation utilities for single-table DynamoDB design
100
+ */
101
+ declare const tenantKeys: {
102
+ pk: (tenantId: string) => string;
103
+ sk: () => string;
104
+ gsi1pk: () => string;
105
+ gsi1sk: (tenantId: string) => string;
106
+ };
107
+ declare const userKeys: {
108
+ pk: (tenantId: string) => string;
109
+ sk: (userId: string) => string;
110
+ gsi1pk: (tenantId: string, email: string) => string;
111
+ gsi1sk: () => string;
112
+ gsi2pk: (tenantId: string, connection: string) => string;
113
+ gsi2sk: (userId: string) => string;
114
+ };
115
+ declare const sessionKeys: {
116
+ pk: (tenantId: string) => string;
117
+ sk: (sessionId: string) => string;
118
+ gsi1pk: (tenantId: string, userId: string) => string;
119
+ gsi1sk: (sessionId: string) => string;
120
+ };
121
+ declare const loginSessionKeys: {
122
+ pk: (tenantId: string) => string;
123
+ sk: (loginSessionId: string) => string;
124
+ };
125
+ declare const clientKeys: {
126
+ pk: (tenantId: string) => string;
127
+ sk: (clientId: string) => string;
128
+ };
129
+ declare const clientGrantKeys: {
130
+ pk: (tenantId: string) => string;
131
+ sk: (clientGrantId: string) => string;
132
+ gsi1pk: (tenantId: string, clientId: string) => string;
133
+ gsi1sk: (audience: string) => string;
134
+ };
135
+ declare const connectionKeys: {
136
+ pk: (tenantId: string) => string;
137
+ sk: (connectionId: string) => string;
138
+ gsi1pk: (tenantId: string, connectionName: string) => string;
139
+ gsi1sk: () => string;
140
+ };
141
+ declare const codeKeys: {
142
+ pk: (tenantId: string) => string;
143
+ sk: (codeId: string, codeType: string) => string;
144
+ skPrefixByCodeId: (codeId: string) => string;
145
+ };
146
+ declare const passwordKeys: {
147
+ pk: (tenantId: string, userId: string) => string;
148
+ sk: (passwordId: string) => string;
149
+ skPrefix: () => string;
150
+ };
151
+ declare const brandingKeys: {
152
+ pk: (tenantId: string) => string;
153
+ sk: () => string;
154
+ };
155
+ declare const universalLoginTemplateKeys: {
156
+ pk: (tenantId: string) => string;
157
+ sk: () => string;
158
+ };
159
+ declare const themeKeys: {
160
+ pk: (tenantId: string) => string;
161
+ sk: (themeId: string) => string;
162
+ };
163
+ declare const hookKeys: {
164
+ pk: (tenantId: string) => string;
165
+ sk: (hookId: string) => string;
166
+ };
167
+ declare const keyKeys: {
168
+ pk: () => string;
169
+ sk: (kid: string) => string;
170
+ };
171
+ declare const customDomainKeys: {
172
+ pk: (tenantId: string) => string;
173
+ sk: (customDomainId: string) => string;
174
+ gsi1pk: (domain: string) => string;
175
+ gsi1sk: () => string;
176
+ };
177
+ declare const proxyRouteKeys: {
178
+ pk: (tenantId: string) => string;
179
+ sk: (proxyRouteId: string) => string;
180
+ gsi1pk: (tenantId: string, customDomainId: string) => string;
181
+ gsi1sk: (proxyRouteId: string) => string;
182
+ };
183
+ declare const logKeys: {
184
+ pk: (tenantId: string) => string;
185
+ sk: (logId: string) => string;
186
+ gsi1pk: (tenantId: string, date: string) => string;
187
+ gsi1sk: (logId: string) => string;
188
+ };
189
+ declare const emailProviderKeys: {
190
+ pk: (tenantId: string) => string;
191
+ sk: () => string;
192
+ };
193
+ declare const emailTemplateKeys: {
194
+ pk: (tenantId: string) => string;
195
+ sk: (templateName: string) => string;
196
+ skPrefix: () => string;
197
+ };
198
+ declare const promptSettingsKeys: {
199
+ pk: (tenantId: string) => string;
200
+ sk: () => string;
201
+ };
202
+ declare const refreshTokenKeys: {
203
+ pk: (tenantId: string) => string;
204
+ sk: (tokenId: string) => string;
205
+ gsi1pk: (tenantId: string, userId: string) => string;
206
+ gsi1sk: (tokenId: string) => string;
207
+ gsi2pk: (tenantId: string, tokenLookup: string) => string;
208
+ gsi2sk: () => string;
209
+ };
210
+ declare const formKeys: {
211
+ pk: (tenantId: string) => string;
212
+ sk: (formId: string) => string;
213
+ };
214
+ declare const flowKeys: {
215
+ pk: (tenantId: string) => string;
216
+ sk: (flowId: string) => string;
217
+ };
218
+ declare const resourceServerKeys: {
219
+ pk: (tenantId: string) => string;
220
+ sk: (resourceServerId: string) => string;
221
+ gsi1pk: (tenantId: string, identifier: string) => string;
222
+ gsi1sk: () => string;
223
+ };
224
+ declare const roleKeys: {
225
+ pk: (tenantId: string) => string;
226
+ sk: (roleId: string) => string;
227
+ };
228
+ declare const rolePermissionKeys: {
229
+ pk: (tenantId: string, roleId: string) => string;
230
+ sk: (resourceServerIdentifier: string, permissionName: string) => string;
231
+ skPrefix: () => string;
232
+ };
233
+ declare const userPermissionKeys: {
234
+ pk: (tenantId: string, userId: string, organizationId?: string) => string;
235
+ sk: (resourceServerIdentifier: string, permissionName: string) => string;
236
+ skPrefix: () => string;
237
+ };
238
+ declare const userRoleKeys: {
239
+ pk: (tenantId: string, userId: string, organizationId?: string) => string;
240
+ sk: (roleId: string) => string;
241
+ skPrefix: () => string;
242
+ };
243
+ declare const organizationKeys: {
244
+ pk: (tenantId: string) => string;
245
+ sk: (organizationId: string) => string;
246
+ gsi1pk: (tenantId: string, organizationName: string) => string;
247
+ gsi1sk: () => string;
248
+ };
249
+ declare const userOrganizationKeys: {
250
+ pk: (tenantId: string) => string;
251
+ sk: (userOrganizationId: string) => string;
252
+ gsi1pk: (tenantId: string, userId: string) => string;
253
+ gsi1sk: (organizationId: string) => string;
254
+ gsi2pk: (tenantId: string, organizationId: string) => string;
255
+ gsi2sk: (userId: string) => string;
256
+ };
257
+ declare const organizationConnectionKeys: {
258
+ pk: (tenantId: string, organizationId: string) => string;
259
+ sk: (connectionId: string) => string;
260
+ skPrefix: () => string;
261
+ };
262
+ declare const inviteKeys: {
263
+ pk: (tenantId: string) => string;
264
+ sk: (inviteId: string) => string;
265
+ gsi1pk: (tenantId: string, organizationId: string) => string;
266
+ gsi1sk: (inviteId: string) => string;
267
+ };
268
+ declare const legacyClientKeys: {
269
+ pk: () => string;
270
+ sk: (clientId: string) => string;
271
+ };
272
+ declare const clientConnectionKeys: {
273
+ pk: (tenantId: string, clientId: string) => string;
274
+ sk: (connectionId: string, order: number) => string;
275
+ skPrefix: () => string;
276
+ gsi1pk: (tenantId: string, connectionId: string) => string;
277
+ gsi1sk: (clientId: string) => string;
278
+ };
279
+ declare const authenticationMethodKeys: {
280
+ pk: (tenantId: string) => string;
281
+ sk: (methodId: string) => string;
282
+ gsi1pk: (tenantId: string, userId: string) => string;
283
+ gsi1sk: (methodId: string) => string;
284
+ gsi1skPrefix: () => string;
285
+ };
286
+ declare const clientRegistrationTokenKeys: {
287
+ pk: (tenantId: string) => string;
288
+ sk: (tokenId: string) => string;
289
+ skPrefix: () => string;
290
+ gsi1pk: (tenantId: string, tokenHash: string) => string;
291
+ gsi1sk: () => string;
292
+ gsi2pk: (tenantId: string, clientId: string) => string;
293
+ gsi2sk: (tokenId: string) => string;
294
+ };
295
+ declare const customTextKeys: {
296
+ pk: (tenantId: string) => string;
297
+ sk: (prompt: string, language: string) => string;
298
+ skPrefix: () => string;
299
+ };
300
+
301
+ /**
302
+ * Transactional write operation for DynamoDB
303
+ * Allows multiple put/delete operations to be atomic
304
+ */
305
+ declare function transactWriteItems(ctx: DynamoDBContext, items: Array<{
306
+ type: "put" | "delete";
307
+ item?: DynamoDBBaseItem;
308
+ pk?: string;
309
+ sk?: string;
310
+ conditionExpression?: string;
311
+ }>): Promise<void>;
312
+ /**
313
+ * Generic get operation for DynamoDB
314
+ */
315
+ declare function getItem<T>(ctx: DynamoDBContext, pk: string, sk: string): Promise<T | null>;
316
+ /**
317
+ * Generic put operation for DynamoDB
318
+ * @param dynamoItem - The DynamoDB item with PK, SK, etc.
319
+ * @param options - Optional settings including condition expression
320
+ */
321
+ declare function putItem(ctx: DynamoDBContext, dynamoItem: DynamoDBBaseItem, options?: {
322
+ conditionExpression?: string;
323
+ }): Promise<void>;
324
+ /**
325
+ * Generic delete operation for DynamoDB
326
+ */
327
+ declare function deleteItem(ctx: DynamoDBContext, pk: string, sk: string): Promise<boolean>;
328
+ /**
329
+ * Generic query operation for DynamoDB
330
+ */
331
+ declare function queryItems<T>(ctx: DynamoDBContext, pk: string, options?: {
332
+ skPrefix?: string;
333
+ skValue?: string;
334
+ indexName?: string;
335
+ limit?: number;
336
+ startKey?: Record<string, unknown>;
337
+ scanIndexForward?: boolean;
338
+ }): Promise<{
339
+ items: T[];
340
+ lastKey?: Record<string, unknown>;
341
+ }>;
342
+ /**
343
+ * Query with pagination support
344
+ */
345
+ declare function queryWithPagination<T>(ctx: DynamoDBContext, pk: string, params?: ListParams, options?: {
346
+ skPrefix?: string;
347
+ indexName?: string;
348
+ scanIndexForward?: boolean;
349
+ }): Promise<{
350
+ items: T[];
351
+ start: number;
352
+ limit: number;
353
+ length: number;
354
+ total?: number;
355
+ }>;
356
+ /**
357
+ * Generic update operation for DynamoDB
358
+ */
359
+ declare function updateItem(ctx: DynamoDBContext, pk: string, sk: string, updates: Record<string, unknown>): Promise<boolean>;
360
+ /**
361
+ * Remove DynamoDB metadata fields from an item
362
+ */
363
+ declare function stripDynamoDBFields<T>(item: T): Omit<T, "PK" | "SK" | "GSI1PK" | "GSI1SK" | "GSI2PK" | "GSI2SK" | "entityType" | "ttl">;
364
+ /**
365
+ * Remove null/undefined properties from an object
366
+ */
367
+ declare function removeNullProperties<T>(obj: T): T;
368
+
369
+ /**
370
+ * Create all DynamoDB adapters for AuthHero
371
+ *
372
+ * @param client - DynamoDB Document Client instance
373
+ * @param config - Configuration options including table name
374
+ * @returns DataAdapters object with all adapter implementations
375
+ *
376
+ * @example
377
+ * ```typescript
378
+ * import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
379
+ * import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
380
+ * import createAdapters from "@authhero/aws-adapter";
381
+ *
382
+ * const client = new DynamoDBClient({});
383
+ * const docClient = DynamoDBDocumentClient.from(client);
384
+ *
385
+ * const adapters = createAdapters(docClient, {
386
+ * tableName: "authhero",
387
+ * });
388
+ * ```
389
+ */
390
+ declare function createAdapters(client: DynamoDBDocumentClient, config: DynamoDBConfig): DataAdapters;
391
+
392
+ export { authenticationMethodKeys, brandingKeys, clientConnectionKeys, clientGrantKeys, clientKeys, clientRegistrationTokenKeys, codeKeys, connectionKeys, createAuthenticationMethodsAdapter, createBrandingAdapter, createClientConnectionsAdapter, createClientGrantsAdapter, createClientsAdapter, createCodesAdapter, createConnectionsAdapter, createCustomDomainsAdapter, createEmailProvidersAdapter, createFlowsAdapter, createFormsAdapter, createHooksAdapter, createInvitesAdapter, createKeysAdapter, createLoginSessionsAdapter, createLogsAdapter, createOrganizationConnectionsAdapter, createOrganizationsAdapter, createPasswordsAdapter, createPromptSettingsAdapter, createProxyDataAdapter, createProxyRoutesAdapter, createRefreshTokensAdapter, createResourceServersAdapter, createRolePermissionsAdapter, createRolesAdapter, createSessionsAdapter, createTenantsAdapter, createThemesAdapter, createUserOrganizationsAdapter, createUserPermissionsAdapter, createUserRolesAdapter, createUsersAdapter, customDomainKeys, customTextKeys, createAdapters as default, deleteItem, emailProviderKeys, emailTemplateKeys, flowKeys, formKeys, getItem, hookKeys, inviteKeys, keyKeys, legacyClientKeys, logKeys, loginSessionKeys, organizationConnectionKeys, organizationKeys, passwordKeys, promptSettingsKeys, proxyRouteKeys, putItem, queryItems, queryWithPagination, refreshTokenKeys, removeNullProperties, resourceServerKeys, roleKeys, rolePermissionKeys, sessionKeys, stripDynamoDBFields, tenantKeys, themeKeys, transactWriteItems, universalLoginTemplateKeys, updateItem, userKeys, userOrganizationKeys, userPermissionKeys, userRoleKeys };
393
+ export type { DynamoDBConfig, DynamoDBContext };