@stacksjs/auth 0.75.36 → 0.75.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credential-user.js +1 -1
- package/dist/referrals.js +1 -1
- package/package.json +13 -13
package/dist/credential-user.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{db,
|
|
1
|
+
import{db,getDatabaseDialect,sqlHelpers}from"@stacksjs/database/runtime";import{User}from"@stacksjs/orm";export function normalizeAuthEmail(value){return value.trim().toLowerCase()}export async function findAuthUserRowByEmail(value){const email=normalizeAuthEmail(value);if(!email)return;const definition=typeof User.getDefinition==="function"?User.getDefinition():{},table=definition.table||"users";if(!/^[A-Z_][A-Z0-9_]*$/i.test(table))throw TypeError("Auth user table must be a plain SQL identifier.");const sql=sqlHelpers(getDatabaseDialect()),softDelete=definition.traits?.useSoftDeletes?" AND deleted_at IS NULL":"",exact=await db.primary.unsafe(`SELECT * FROM ${table} WHERE email = ${sql.param(1)}${softDelete} LIMIT 1`,[email]);if(exact[0])return exact[0];return(await db.primary.unsafe(`SELECT * FROM ${table} WHERE LOWER(email) = ${sql.param(1)}${softDelete} LIMIT 1`,[email]))[0]}export async function findAuthUserByEmail(value){const row=await findAuthUserRowByEmail(value);return row?await User.make(row):void 0}
|
package/dist/referrals.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{randomBytes}from"node:crypto";export function normalizeReferralCode(value){if(typeof value!=="string")return null;const code=value.trim().toLowerCase();return/^[a-f0-9]{24}$/.test(code)?code:null}function userId(value){if(!Number.isSafeInteger(value)||value<1)throw TypeError("A positive integer user ID is required.")}async function connection(database){return database??(await import("@stacksjs/database/runtime")).db}async function rows(database,sql,bindings){const result=await database.unsafe(sql,bindings).execute();if(Array.isArray(result))return result;if(result&&typeof result==="object"&&"rows"in result&&Array.isArray(result.rows))return result.rows;throw Error("The referral query returned an unsupported result.")}async function duplicate(error){const{isUniqueViolation}=await import("@stacksjs/orm");return isUniqueViolation(error)}export async function createReferralCode(ownerId,database){userId(ownerId);const db=await connection(database);for(let attempt=0;attempt<5;attempt++){const existing=await rows(db
|
|
1
|
+
import{randomBytes}from"node:crypto";export function normalizeReferralCode(value){if(typeof value!=="string")return null;const code=value.trim().toLowerCase();return/^[a-f0-9]{24}$/.test(code)?code:null}function userId(value){if(!Number.isSafeInteger(value)||value<1)throw TypeError("A positive integer user ID is required.")}async function connection(database){return database??(await import("@stacksjs/database/runtime")).db}async function rows(database,sql,bindings){const result=await database.unsafe(sql,bindings).execute();if(Array.isArray(result))return result;if(result&&typeof result==="object"&&"rows"in result&&Array.isArray(result.rows))return result.rows;throw Error("The referral query returned an unsupported result.")}async function duplicate(error){const{isUniqueViolation}=await import("@stacksjs/orm");return isUniqueViolation(error)}async function placeholder(){const{getDatabaseDialect,sqlHelpers}=await import("@stacksjs/database/runtime");return sqlHelpers(getDatabaseDialect()).param}export async function createReferralCode(ownerId,database){userId(ownerId);const db=await connection(database),param=await placeholder();for(let attempt=0;attempt<5;attempt++){const existing=await rows(db,`SELECT code, user_id FROM referral_codes WHERE user_id = ${param(1)}`,[ownerId]);if(existing[0])return existing[0].code;const code=randomBytes(12).toString("hex");try{await db.unsafe(`INSERT INTO referral_codes (user_id, code) VALUES (${param(1)}, ${param(2)})`,[ownerId,code]).execute();return code}catch(error){if(!await duplicate(error))throw error}}throw Error("Could not allocate a referral code. Please retry.")}export async function attributeReferral(newUserId,input,database){userId(newUserId);const code=normalizeReferralCode(input);if(!code)return!1;const db=await connection(database),param=await placeholder(),owner=(await rows(db,`SELECT code, user_id FROM referral_codes WHERE code = ${param(1)}`,[code]))[0];if(!owner||Number(owner.user_id)===newUserId)return!1;try{await db.unsafe(`INSERT INTO referrals (referrer_id, referred_user_id, code, status) VALUES (${param(1)}, ${param(2)}, ${param(3)}, ${param(4)})`,[Number(owner.user_id),newUserId,code,"registered"]).execute();return!0}catch(error){if(await duplicate(error))return!1;throw error}}export async function qualifyReferral(referredUserId,database){userId(referredUserId);const db=await connection(database),param=await placeholder(),now=new Date().toISOString().slice(0,19).replace("T"," ");await db.unsafe(`UPDATE referrals SET status = ${param(1)}, qualified_at = ${param(2)}, updated_at = ${param(3)} WHERE referred_user_id = ${param(4)} AND status = ${param(5)}`,["qualified",now,now,referredUserId,"registered"]).execute()}export async function referralSummary(ownerId,database){userId(ownerId);const db=await connection(database),param=await placeholder(),codes=await rows(db,`SELECT code, user_id FROM referral_codes WHERE user_id = ${param(1)}`,[ownerId]),counts=await rows(db,`SELECT COUNT(*) AS total, SUM(CASE WHEN status = ${param(1)} THEN 1 ELSE 0 END) AS qualified FROM referrals WHERE referrer_id = ${param(2)}`,["qualified",ownerId]);return{code:codes[0]?.code??null,referred:Number(counts[0]?.total??0),qualified:Number(counts[0]?.qualified??0)}}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/auth",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.38",
|
|
6
6
|
"description": "A more simplistic way to authenticate.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -58,18 +58,18 @@
|
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
60
|
"@stacksjs/bun-router": "^0.1.18",
|
|
61
|
-
"@stacksjs/cache": "0.75.
|
|
62
|
-
"@stacksjs/config": "0.75.
|
|
63
|
-
"@stacksjs/database": "0.75.
|
|
64
|
-
"@stacksjs/email": "0.75.
|
|
65
|
-
"@stacksjs/env": "0.75.
|
|
66
|
-
"@stacksjs/error-handling": "0.75.
|
|
67
|
-
"@stacksjs/logging": "0.75.
|
|
68
|
-
"@stacksjs/orm": "0.75.
|
|
69
|
-
"@stacksjs/path": "0.75.
|
|
70
|
-
"@stacksjs/router": "0.75.
|
|
71
|
-
"@stacksjs/security": "0.75.
|
|
72
|
-
"@stacksjs/storage": "0.75.
|
|
61
|
+
"@stacksjs/cache": "0.75.38",
|
|
62
|
+
"@stacksjs/config": "0.75.38",
|
|
63
|
+
"@stacksjs/database": "0.75.38",
|
|
64
|
+
"@stacksjs/email": "0.75.38",
|
|
65
|
+
"@stacksjs/env": "0.75.38",
|
|
66
|
+
"@stacksjs/error-handling": "0.75.38",
|
|
67
|
+
"@stacksjs/logging": "0.75.38",
|
|
68
|
+
"@stacksjs/orm": "0.75.38",
|
|
69
|
+
"@stacksjs/path": "0.75.38",
|
|
70
|
+
"@stacksjs/router": "0.75.38",
|
|
71
|
+
"@stacksjs/security": "0.75.38",
|
|
72
|
+
"@stacksjs/storage": "0.75.38",
|
|
73
73
|
"@stacksjs/ts-auth": "^0.4.4",
|
|
74
74
|
"ts-qr-codes": "^0.1.8"
|
|
75
75
|
},
|