@digilogiclabs/platform-core 1.7.0 → 1.9.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,113 @@ 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(`${cfg.baseUrl}${cfg.settingsEndpoint}`, {
1142
+ method: "GET",
1143
+ headers: { "Content-Type": "application/json" },
1144
+ cache: "no-store"
1145
+ });
1146
+ if (!response.ok) {
1147
+ throw new Error(`Failed to fetch beta settings: ${response.status}`);
1148
+ }
1149
+ const data = await response.json();
1150
+ return {
1151
+ betaMode: data.betaMode ?? cfg.failSafeDefaults.betaMode ?? true,
1152
+ requireInviteCode: data.requireInviteCode ?? cfg.failSafeDefaults.requireInviteCode ?? true,
1153
+ betaMessage: data.betaMessage ?? cfg.failSafeDefaults.betaMessage ?? ""
1154
+ };
1155
+ } catch (error) {
1156
+ console.error("Error fetching beta settings:", error);
1157
+ return {
1158
+ betaMode: cfg.failSafeDefaults.betaMode ?? true,
1159
+ requireInviteCode: cfg.failSafeDefaults.requireInviteCode ?? true,
1160
+ betaMessage: cfg.failSafeDefaults.betaMessage ?? ""
1161
+ };
1162
+ }
1163
+ }
1164
+ async function validateBetaCode(code, config = {}) {
1165
+ const cfg = { ...DEFAULT_CONFIG, ...config };
1166
+ if (!code || code.trim().length < 3) {
1167
+ return {
1168
+ valid: false,
1169
+ message: "Please enter a valid invite code."
1170
+ };
1171
+ }
1172
+ try {
1173
+ const response = await fetch(`${cfg.baseUrl}${cfg.validateEndpoint}`, {
1174
+ method: "POST",
1175
+ headers: { "Content-Type": "application/json" },
1176
+ body: JSON.stringify({ code: code.trim().toUpperCase() })
1177
+ });
1178
+ if (response.status === 429) {
1179
+ return {
1180
+ valid: false,
1181
+ message: "Too many attempts. Please try again later."
1182
+ };
1183
+ }
1184
+ if (!response.ok) {
1185
+ throw new Error(`Validation request failed: ${response.status}`);
1186
+ }
1187
+ return await response.json();
1188
+ } catch (error) {
1189
+ console.error("Error validating invite code:", error);
1190
+ return {
1191
+ valid: false,
1192
+ message: "Unable to validate code. Please try again."
1193
+ };
1194
+ }
1195
+ }
1196
+ function storeBetaCode(code, config = {}) {
1197
+ const key = config.storageKey ?? DEFAULT_CONFIG.storageKey;
1198
+ if (typeof window !== "undefined") {
1199
+ sessionStorage.setItem(key, code.trim().toUpperCase());
1200
+ }
1201
+ }
1202
+ function getStoredBetaCode(config = {}) {
1203
+ const key = config.storageKey ?? DEFAULT_CONFIG.storageKey;
1204
+ if (typeof window !== "undefined") {
1205
+ return sessionStorage.getItem(key);
1206
+ }
1207
+ return null;
1208
+ }
1209
+ function clearStoredBetaCode(config = {}) {
1210
+ const key = config.storageKey ?? DEFAULT_CONFIG.storageKey;
1211
+ if (typeof window !== "undefined") {
1212
+ sessionStorage.removeItem(key);
1213
+ }
1214
+ }
1215
+
1109
1216
  // src/env.ts
1110
1217
  function getRequiredEnv(key) {
1111
1218
  const value = process.env[key];
@@ -1227,11 +1334,13 @@ export {
1227
1334
  checkEnvVars,
1228
1335
  checkRateLimit,
1229
1336
  classifyError,
1337
+ clearStoredBetaCode,
1230
1338
  constantTimeEqual,
1231
1339
  containsHtml,
1232
1340
  containsUrls,
1233
1341
  createAuditActor,
1234
1342
  createAuditLogger,
1343
+ createBetaClient,
1235
1344
  createFeatureFlags,
1236
1345
  createMemoryRateLimitStore,
1237
1346
  createRedisRateLimitStore,
@@ -1245,6 +1354,7 @@ export {
1245
1354
  extractAuditUserAgent,
1246
1355
  extractBearerToken,
1247
1356
  extractClientIp,
1357
+ fetchBetaSettings,
1248
1358
  getBoolEnv,
1249
1359
  getCorrelationId,
1250
1360
  getEndSessionEndpoint,
@@ -1253,6 +1363,7 @@ export {
1253
1363
  getOptionalEnv,
1254
1364
  getRateLimitStatus,
1255
1365
  getRequiredEnv,
1366
+ getStoredBetaCode,
1256
1367
  getTokenEndpoint,
1257
1368
  hasAllRoles,
1258
1369
  hasAnyRole,
@@ -1267,7 +1378,9 @@ export {
1267
1378
  resolveIdentifier,
1268
1379
  resolveRateLimitIdentifier,
1269
1380
  sanitizeApiError,
1381
+ storeBetaCode,
1270
1382
  stripHtml,
1383
+ validateBetaCode,
1271
1384
  validateEnvVars,
1272
1385
  zodErrorResponse
1273
1386
  };