@superbuilders/primer-tives 3.5.1 → 3.6.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.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/client/auth/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAKN,KAAK,iBAAiB,EACtB,MAAM,iDAAiD,CAAA;AAMxD,OAAO,EAEN,KAAK,mBAAmB,EACxB,MAAM,sDAAsD,CAAA;AAS7D,KAAK,0BAA0B,GAAG;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC7B,CAAA;AAqCD,iBAAe,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,OAAO,EAAE,yBAAyB,EAAE,CAAA;AACpC,YAAY,EAAE,0BAA0B,EAAE,CAAA"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/client/auth/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAKN,KAAK,iBAAiB,EACtB,MAAM,iDAAiD,CAAA;AAMxD,OAAO,EAEN,KAAK,mBAAmB,EACxB,MAAM,sDAAsD,CAAA;AAU7D,KAAK,0BAA0B,GAAG;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC7B,CAAA;AAED,KAAK,yBAAyB,GAAG;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAA;CACzC,CAAA;AAED,KAAK,gCAAgC,GAAG;IACvC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CAC5B,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACrB,CAAA;AAED,KAAK,yBAAyB,GAC3B,yBAAyB,GACzB,gCAAgC,GAChC,sBAAsB,CAAA;AAEzB,KAAK,iBAAiB,GAAG,yBAAyB,GAAG,gCAAgC,CAAA;AAkGrF,iBAAS,0BAA0B,CAClC,OAAO,EAAE,0BAA0B,GACjC,yBAAyB,CAqB3B;AAED,iBAAe,gBAAgB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqC/F;AAED,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,CAAA;AACvD,YAAY,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,CAAA"}
@@ -2,8 +2,9 @@ declare function accessTokenStorageKey(publishableKey: string): string;
2
2
  declare function authStateStorageKey(publishableKey: string): string;
3
3
  declare function loadStoredAccessToken(storage: Storage, publishableKey: string): string | null;
4
4
  declare function storeAccessToken(storage: Storage, publishableKey: string, accessToken: string): void;
5
+ declare function clearStoredAccessToken(storage: Storage, publishableKey: string): void;
5
6
  declare function loadAuthState(storage: Storage, publishableKey: string): string | null;
6
7
  declare function storeAuthState(storage: Storage, publishableKey: string, state: string): void;
7
8
  declare function clearAuthState(storage: Storage, publishableKey: string): void;
8
- export { accessTokenStorageKey, authStateStorageKey, clearAuthState, loadAuthState, loadStoredAccessToken, storeAccessToken, storeAuthState };
9
+ export { accessTokenStorageKey, authStateStorageKey, clearAuthState, clearStoredAccessToken, loadAuthState, loadStoredAccessToken, storeAccessToken, storeAuthState };
9
10
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/client/auth/storage.ts"],"names":[],"mappings":"AAGA,iBAAS,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,iBAAS,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,iBAAS,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMtF;AAED,iBAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,iBAAS,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9E;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAErF;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,OAAO,EACN,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,CAAA"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/client/auth/storage.ts"],"names":[],"mappings":"AAGA,iBAAS,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,iBAAS,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,iBAAS,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMtF;AAED,iBAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,iBAAS,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAE9E;AAED,iBAAS,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9E;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAErF;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,OAAO,EACN,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,CAAA"}
@@ -1,4 +1,4 @@
1
- export { create } from "./create";
2
- export type { PrimerOptions } from "./create";
3
- export type { ChoiceState, CompletedState, ErroredState, ExtendedTextMultipleState, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, InteractionState, MatchState, NonSerializable, ObservationState, OrderState, PciInteractionState, PciPendingRenderProps, PciRenderProps, PciSubmittedRenderProps, PrimerState, TextEntryState } from "./types";
1
+ export { start } from "./start";
2
+ export type { PrimerOptions } from "./start";
3
+ export type { ChoiceState, CompletedState, ErroredState, ExtendedTextMultipleState, ExtendedTextSingleState, ExtendedTextState, FatalState, FeedbackState, InteractionState, MatchState, NonSerializable, ObservationState, OrderState, PciInteractionState, PciPendingRenderProps, PciRenderProps, PciSubmittedRenderProps, PrimerState, TextEntryState, UnauthenticatedState } from "./types";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AAE9E,YAAY,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,uBAAuB,EACvB,WAAW,EACX,cAAc,EACd,MAAM,0CAA0C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0CAA0C,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAA;AAE7E,YAAY,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,uBAAuB,EACvB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,MAAM,0CAA0C,CAAA"}
@@ -341,7 +341,7 @@ function submissionValidationMessage(result) {
341
341
  import * as errors2 from "@superbuilders/errors";
342
342
 
343
343
  // src/version.ts
344
- var SDK_VERSION = "3.5.1";
344
+ var SDK_VERSION = "3.6.0";
345
345
  var NPM_PACKAGE_URL = "https://www.npmjs.com/package/@superbuilders/primer-tives";
346
346
 
347
347
  // src/client/transport.ts
@@ -1133,6 +1133,9 @@ function makeSession(sc) {
1133
1133
  return { execute };
1134
1134
  }
1135
1135
 
1136
+ // src/client/auth/provider.ts
1137
+ import * as errors13 from "@superbuilders/errors";
1138
+
1136
1139
  // src/client/auth/browser.ts
1137
1140
  import * as errors10 from "@superbuilders/errors";
1138
1141
  function browserStorage(options, logger) {
@@ -1383,6 +1386,9 @@ function loadStoredAccessToken(storage, publishableKey) {
1383
1386
  function storeAccessToken(storage, publishableKey, accessToken) {
1384
1387
  storage.setItem(accessTokenStorageKey(publishableKey), accessToken);
1385
1388
  }
1389
+ function clearStoredAccessToken(storage, publishableKey) {
1390
+ storage.removeItem(accessTokenStorageKey(publishableKey));
1391
+ }
1386
1392
  function loadAuthState(storage, publishableKey) {
1387
1393
  const state = storage.getItem(authStateStorageKey(publishableKey));
1388
1394
  if (state === null || state.length === 0) {
@@ -1398,44 +1404,153 @@ function clearAuthState(storage, publishableKey) {
1398
1404
  }
1399
1405
 
1400
1406
  // src/client/auth/provider.ts
1401
- async function resolveHostedAccessToken(options) {
1407
+ function resolveProvidedAccessToken(token, logger) {
1408
+ const result = errors13.trySync(function resolveProvidedToken() {
1409
+ return resolveAccessToken(token, logger);
1410
+ });
1411
+ if (result.error) {
1412
+ return { kind: "fatal", error: result.error };
1413
+ }
1414
+ return { kind: "resolved", accessToken: result.data };
1415
+ }
1416
+ function resolveManagedAccessToken(token, logger) {
1417
+ const result = errors13.trySync(function resolveManagedToken() {
1418
+ return resolveAccessToken(token, logger);
1419
+ });
1420
+ if (result.error) {
1421
+ return { kind: "unauthenticated", error: result.error };
1422
+ }
1423
+ return { kind: "resolved", accessToken: result.data };
1424
+ }
1425
+ function readBrowserAuthContext(options) {
1426
+ const logger = options.logger;
1427
+ const contextResult = errors13.trySync(function readContext() {
1428
+ const storage = browserStorage(options.hostedAuth, logger);
1429
+ const url = currentUrl(options.hostedAuth, logger);
1430
+ return { storage, url };
1431
+ });
1432
+ if (contextResult.error) {
1433
+ return { kind: "unauthenticated", error: contextResult.error };
1434
+ }
1435
+ return contextResult.data;
1436
+ }
1437
+ function resolveCallbackAccessToken(context, options) {
1402
1438
  const logger = options.logger;
1403
- const storage = browserStorage(options.hostedAuth, logger);
1404
- const url = currentUrl(options.hostedAuth, logger);
1405
- const callback = readAuthCallback(url, logger);
1439
+ const callbackResult = errors13.trySync(function readCallback() {
1440
+ return readAuthCallback(context.url, logger);
1441
+ });
1442
+ if (callbackResult.error) {
1443
+ clearAuthState(context.storage, options.publishableKey);
1444
+ return { kind: "unauthenticated", error: callbackResult.error };
1445
+ }
1446
+ const callback = callbackResult.data;
1447
+ if (callback === null) {
1448
+ return null;
1449
+ }
1450
+ const stateResult = errors13.trySync(function requireState() {
1451
+ requireMatchingCallbackState(callback, loadAuthState(context.storage, options.publishableKey), logger);
1452
+ });
1453
+ if (stateResult.error) {
1454
+ clearAuthState(context.storage, options.publishableKey);
1455
+ return { kind: "unauthenticated", error: stateResult.error };
1456
+ }
1457
+ const resolved = resolveManagedAccessToken(callback.accessToken, logger);
1458
+ if (resolved.kind === "unauthenticated") {
1459
+ clearAuthState(context.storage, options.publishableKey);
1460
+ return resolved;
1461
+ }
1462
+ storeAccessToken(context.storage, options.publishableKey, callback.accessToken);
1463
+ clearAuthState(context.storage, options.publishableKey);
1464
+ clearCallbackHash(options.hostedAuth, context.url);
1465
+ return resolved;
1466
+ }
1467
+ function resolveStoredAccessToken(context, options) {
1468
+ const stored = loadStoredAccessToken(context.storage, options.publishableKey);
1469
+ if (stored === null) {
1470
+ return null;
1471
+ }
1472
+ const resolved = resolveManagedAccessToken(stored, options.logger);
1473
+ if (resolved.kind === "unauthenticated") {
1474
+ clearStoredAccessToken(context.storage, options.publishableKey);
1475
+ }
1476
+ return resolved;
1477
+ }
1478
+ function resolveExistingAccessToken(options) {
1479
+ if (options.accessToken !== undefined) {
1480
+ return resolveProvidedAccessToken(options.accessToken, options.logger);
1481
+ }
1482
+ const context = readBrowserAuthContext(options);
1483
+ if ("kind" in context) {
1484
+ return context;
1485
+ }
1486
+ const callback = resolveCallbackAccessToken(context, options);
1406
1487
  if (callback !== null) {
1407
- requireMatchingCallbackState(callback, loadAuthState(storage, options.publishableKey), logger);
1408
- storeAccessToken(storage, options.publishableKey, callback.accessToken);
1409
- clearAuthState(storage, options.publishableKey);
1410
- clearCallbackHash(options.hostedAuth, url);
1411
- return resolveAccessToken(callback.accessToken, logger);
1488
+ return callback;
1412
1489
  }
1413
- const stored = loadStoredAccessToken(storage, options.publishableKey);
1490
+ const stored = resolveStoredAccessToken(context, options);
1414
1491
  if (stored !== null) {
1415
- return resolveAccessToken(stored, logger);
1492
+ return stored;
1493
+ }
1494
+ return { kind: "unauthenticated", error: null };
1495
+ }
1496
+ async function beginHostedLogin(options) {
1497
+ const logger = options.logger;
1498
+ const context = readBrowserAuthContext(options);
1499
+ if ("kind" in context) {
1500
+ return context;
1501
+ }
1502
+ const clientStateResult = errors13.trySync(function prepareHostedLogin() {
1503
+ const clientState2 = randomClientState(logger);
1504
+ storeAuthState(context.storage, options.publishableKey, clientState2);
1505
+ return clientState2;
1506
+ });
1507
+ if (clientStateResult.error) {
1508
+ return { kind: "unauthenticated", error: clientStateResult.error };
1416
1509
  }
1417
- const clientState = randomClientState(logger);
1418
- storeAuthState(storage, options.publishableKey, clientState);
1419
- const accessToken = await beginHostedPopup({
1510
+ const clientState = clientStateResult.data;
1511
+ const accessTokenResult = await errors13.try(beginHostedPopup({
1420
1512
  origin: options.origin,
1421
1513
  publishableKey: options.publishableKey,
1422
- currentUrl: url,
1514
+ currentUrl: context.url,
1423
1515
  clientState,
1424
1516
  options: options.hostedAuth,
1425
1517
  logger
1426
- });
1427
- storeAccessToken(storage, options.publishableKey, accessToken);
1428
- clearAuthState(storage, options.publishableKey);
1429
- return resolveAccessToken(accessToken, logger);
1518
+ }));
1519
+ if (accessTokenResult.error) {
1520
+ clearAuthState(context.storage, options.publishableKey);
1521
+ return { kind: "unauthenticated", error: accessTokenResult.error };
1522
+ }
1523
+ const resolved = resolveManagedAccessToken(accessTokenResult.data, logger);
1524
+ if (resolved.kind === "unauthenticated") {
1525
+ clearAuthState(context.storage, options.publishableKey);
1526
+ return resolved;
1527
+ }
1528
+ storeAccessToken(context.storage, options.publishableKey, accessTokenResult.data);
1529
+ clearAuthState(context.storage, options.publishableKey);
1530
+ return resolved;
1430
1531
  }
1431
- async function resolveRuntimeAccessToken(options) {
1432
- if (options.accessToken !== undefined) {
1433
- return resolveAccessToken(options.accessToken, options.logger);
1532
+
1533
+ // src/client/unauthenticated-state.ts
1534
+ function unauthenticatedState(config) {
1535
+ let pending;
1536
+ function login() {
1537
+ if (pending) {
1538
+ return pending;
1539
+ }
1540
+ pending = config.login().finally(function clearPending() {
1541
+ pending = undefined;
1542
+ });
1543
+ return pending;
1434
1544
  }
1435
- return resolveHostedAccessToken(options);
1545
+ return {
1546
+ phase: "unauthenticated",
1547
+ error: config.error,
1548
+ login,
1549
+ toJSON: poisonToJSON
1550
+ };
1436
1551
  }
1437
1552
 
1438
- // src/client/create.ts
1553
+ // src/client/start.ts
1439
1554
  function supportedPcisOrEmpty(supportedPcis) {
1440
1555
  if (supportedPcis !== undefined) {
1441
1556
  return supportedPcis;
@@ -1448,35 +1563,76 @@ function runtimeSubject(subject) {
1448
1563
  }
1449
1564
  return subject;
1450
1565
  }
1451
- async function create(options) {
1452
- const logger = options.logger;
1453
- logger.debug("create");
1454
- const subject = runtimeSubject(options.subject);
1455
- const accessToken = await resolveRuntimeAccessToken({
1456
- accessToken: options.accessToken,
1457
- publishableKey: options.publishableKey,
1458
- origin: options.origin,
1459
- logger
1460
- });
1566
+ async function startRuntime(config, accessToken) {
1461
1567
  const transport = createTransport({
1462
1568
  accessToken,
1569
+ publishableKey: config.publishableKey,
1570
+ subject: config.subject,
1571
+ origin: config.origin,
1572
+ fetch: config.fetch,
1573
+ abort: config.abort,
1574
+ logger: config.logger
1575
+ });
1576
+ const session = makeSession({
1577
+ subject: config.subject,
1578
+ supportedPcis: config.supportedPcis,
1579
+ logger: config.logger,
1580
+ transport
1581
+ });
1582
+ return session.execute({ kind: "observation" }, "start");
1583
+ }
1584
+ function makeUnauthenticatedState(config, error) {
1585
+ return unauthenticatedState({
1586
+ error,
1587
+ login: function login() {
1588
+ return loginAndStart(config);
1589
+ }
1590
+ });
1591
+ }
1592
+ async function loginAndStart(config) {
1593
+ const result = await beginHostedLogin({
1594
+ origin: config.origin,
1595
+ publishableKey: config.publishableKey,
1596
+ logger: config.logger
1597
+ });
1598
+ if (result.kind === "unauthenticated") {
1599
+ return makeUnauthenticatedState(config, result.error);
1600
+ }
1601
+ return startRuntime(config, result.accessToken);
1602
+ }
1603
+ async function start(options) {
1604
+ const logger = options.logger;
1605
+ logger.debug("start");
1606
+ const config = {
1463
1607
  publishableKey: options.publishableKey,
1464
- subject,
1465
1608
  origin: options.origin,
1466
1609
  fetch: options.fetch,
1467
1610
  abort: options.abort,
1468
- logger
1469
- });
1470
- const session = makeSession({
1471
- subject,
1472
- supportedPcis: supportedPcisOrEmpty(options.supportedPcis),
1473
1611
  logger,
1474
- transport
1612
+ subject: runtimeSubject(options.subject),
1613
+ supportedPcis: supportedPcisOrEmpty(options.supportedPcis)
1614
+ };
1615
+ const accessToken = resolveExistingAccessToken({
1616
+ accessToken: options.accessToken,
1617
+ publishableKey: options.publishableKey,
1618
+ origin: options.origin,
1619
+ logger
1475
1620
  });
1476
- return session.execute({ kind: "observation" }, "observation");
1621
+ if (accessToken.kind === "fatal") {
1622
+ return {
1623
+ phase: "fatal",
1624
+ error: accessToken.error,
1625
+ retriable: false,
1626
+ toJSON: poisonToJSON
1627
+ };
1628
+ }
1629
+ if (accessToken.kind === "unauthenticated") {
1630
+ return makeUnauthenticatedState(config, accessToken.error);
1631
+ }
1632
+ return startRuntime(config, accessToken.accessToken);
1477
1633
  }
1478
1634
  export {
1479
- create
1635
+ start
1480
1636
  };
1481
1637
 
1482
- //# debugId=DE8A27A355B8A82664756E2164756E21
1638
+ //# debugId=94171F205AFFEEE264756E2164756E21