@digilogiclabs/platform-core 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/auth.mjs CHANGED
@@ -1106,6 +1106,119 @@ function isValidBearerToken(request, secret) {
1106
1106
  return constantTimeEqual(token, secret);
1107
1107
  }
1108
1108
 
1109
+ // src/auth/beta-client.ts
1110
+ var DEFAULT_CONFIG = {
1111
+ baseUrl: "",
1112
+ settingsEndpoint: "/api/beta-settings",
1113
+ validateEndpoint: "/api/validate-beta-code",
1114
+ storageKey: "beta_code",
1115
+ failSafeDefaults: {
1116
+ betaMode: true,
1117
+ requireInviteCode: true,
1118
+ betaMessage: ""
1119
+ }
1120
+ };
1121
+ function createBetaClient(config = {}) {
1122
+ const cfg = {
1123
+ ...DEFAULT_CONFIG,
1124
+ ...config,
1125
+ failSafeDefaults: {
1126
+ ...DEFAULT_CONFIG.failSafeDefaults,
1127
+ ...config.failSafeDefaults
1128
+ }
1129
+ };
1130
+ return {
1131
+ fetchSettings: () => fetchBetaSettings(cfg),
1132
+ validateCode: (code) => validateBetaCode(code, cfg),
1133
+ storeCode: (code) => storeBetaCode(code, cfg),
1134
+ getStoredCode: () => getStoredBetaCode(cfg),
1135
+ clearStoredCode: () => clearStoredBetaCode(cfg)
1136
+ };
1137
+ }
1138
+ async function fetchBetaSettings(config = {}) {
1139
+ const cfg = { ...DEFAULT_CONFIG, ...config };
1140
+ try {
1141
+ const response = await fetch(
1142
+ `${cfg.baseUrl}${cfg.settingsEndpoint}`,
1143
+ {
1144
+ method: "GET",
1145
+ headers: { "Content-Type": "application/json" },
1146
+ cache: "no-store"
1147
+ }
1148
+ );
1149
+ if (!response.ok) {
1150
+ throw new Error(`Failed to fetch beta settings: ${response.status}`);
1151
+ }
1152
+ const data = await response.json();
1153
+ return {
1154
+ betaMode: data.betaMode ?? cfg.failSafeDefaults.betaMode ?? true,
1155
+ requireInviteCode: data.requireInviteCode ?? cfg.failSafeDefaults.requireInviteCode ?? true,
1156
+ betaMessage: data.betaMessage ?? cfg.failSafeDefaults.betaMessage ?? ""
1157
+ };
1158
+ } catch (error) {
1159
+ console.error("Error fetching beta settings:", error);
1160
+ return {
1161
+ betaMode: cfg.failSafeDefaults.betaMode ?? true,
1162
+ requireInviteCode: cfg.failSafeDefaults.requireInviteCode ?? true,
1163
+ betaMessage: cfg.failSafeDefaults.betaMessage ?? ""
1164
+ };
1165
+ }
1166
+ }
1167
+ async function validateBetaCode(code, config = {}) {
1168
+ const cfg = { ...DEFAULT_CONFIG, ...config };
1169
+ if (!code || code.trim().length < 3) {
1170
+ return {
1171
+ valid: false,
1172
+ message: "Please enter a valid invite code."
1173
+ };
1174
+ }
1175
+ try {
1176
+ const response = await fetch(
1177
+ `${cfg.baseUrl}${cfg.validateEndpoint}`,
1178
+ {
1179
+ method: "POST",
1180
+ headers: { "Content-Type": "application/json" },
1181
+ body: JSON.stringify({ code: code.trim().toUpperCase() })
1182
+ }
1183
+ );
1184
+ if (response.status === 429) {
1185
+ return {
1186
+ valid: false,
1187
+ message: "Too many attempts. Please try again later."
1188
+ };
1189
+ }
1190
+ if (!response.ok) {
1191
+ throw new Error(`Validation request failed: ${response.status}`);
1192
+ }
1193
+ return await response.json();
1194
+ } catch (error) {
1195
+ console.error("Error validating invite code:", error);
1196
+ return {
1197
+ valid: false,
1198
+ message: "Unable to validate code. Please try again."
1199
+ };
1200
+ }
1201
+ }
1202
+ function storeBetaCode(code, config = {}) {
1203
+ const key = config.storageKey ?? DEFAULT_CONFIG.storageKey;
1204
+ if (typeof window !== "undefined") {
1205
+ sessionStorage.setItem(key, code.trim().toUpperCase());
1206
+ }
1207
+ }
1208
+ function getStoredBetaCode(config = {}) {
1209
+ const key = config.storageKey ?? DEFAULT_CONFIG.storageKey;
1210
+ if (typeof window !== "undefined") {
1211
+ return sessionStorage.getItem(key);
1212
+ }
1213
+ return null;
1214
+ }
1215
+ function clearStoredBetaCode(config = {}) {
1216
+ const key = config.storageKey ?? DEFAULT_CONFIG.storageKey;
1217
+ if (typeof window !== "undefined") {
1218
+ sessionStorage.removeItem(key);
1219
+ }
1220
+ }
1221
+
1109
1222
  // src/env.ts
1110
1223
  function getRequiredEnv(key) {
1111
1224
  const value = process.env[key];
@@ -1227,11 +1340,13 @@ export {
1227
1340
  checkEnvVars,
1228
1341
  checkRateLimit,
1229
1342
  classifyError,
1343
+ clearStoredBetaCode,
1230
1344
  constantTimeEqual,
1231
1345
  containsHtml,
1232
1346
  containsUrls,
1233
1347
  createAuditActor,
1234
1348
  createAuditLogger,
1349
+ createBetaClient,
1235
1350
  createFeatureFlags,
1236
1351
  createMemoryRateLimitStore,
1237
1352
  createRedisRateLimitStore,
@@ -1245,6 +1360,7 @@ export {
1245
1360
  extractAuditUserAgent,
1246
1361
  extractBearerToken,
1247
1362
  extractClientIp,
1363
+ fetchBetaSettings,
1248
1364
  getBoolEnv,
1249
1365
  getCorrelationId,
1250
1366
  getEndSessionEndpoint,
@@ -1253,6 +1369,7 @@ export {
1253
1369
  getOptionalEnv,
1254
1370
  getRateLimitStatus,
1255
1371
  getRequiredEnv,
1372
+ getStoredBetaCode,
1256
1373
  getTokenEndpoint,
1257
1374
  hasAllRoles,
1258
1375
  hasAnyRole,
@@ -1267,7 +1384,9 @@ export {
1267
1384
  resolveIdentifier,
1268
1385
  resolveRateLimitIdentifier,
1269
1386
  sanitizeApiError,
1387
+ storeBetaCode,
1270
1388
  stripHtml,
1389
+ validateBetaCode,
1271
1390
  validateEnvVars,
1272
1391
  zodErrorResponse
1273
1392
  };