@globalpayments-private/gpds-pattern-web 0.0.0-stage → 0.1.0-pr.7.gdcb74cd

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 (97) hide show
  1. package/README.md +567 -2
  2. package/dist/cjs/control-strategy-DhhYTbse.js +113 -0
  3. package/dist/cjs/gpds-pattern-web.cjs.js +24 -0
  4. package/dist/cjs/index-Dzm6P89U.js +1565 -0
  5. package/dist/cjs/index.cjs.js +180 -0
  6. package/dist/cjs/loader.cjs.js +12 -0
  7. package/dist/cjs/uds-pattern-login-card_2.cjs.entry.js +1662 -0
  8. package/dist/collection/collection-manifest.json +14 -0
  9. package/dist/collection/components/uds-pattern-login-card/slimmers/identity-memory.slimmer.js +63 -0
  10. package/dist/collection/components/uds-pattern-login-card/slimmers/login-workflow.slimmer.js +357 -0
  11. package/dist/collection/components/uds-pattern-login-card/slimmers/renderers/login-card-renderer.js +100 -0
  12. package/dist/collection/components/uds-pattern-login-card/slimmers/renderers/login-field-renderer.js +129 -0
  13. package/dist/collection/components/uds-pattern-login-card/slimmers/renderers/login-step-renderer.js +192 -0
  14. package/dist/collection/components/uds-pattern-login-card/slimmers/resend-throttle.slimmer.js +65 -0
  15. package/dist/collection/components/uds-pattern-login-card/uds-pattern-login-card.css +154 -0
  16. package/dist/collection/components/uds-pattern-login-card/uds-pattern-login-card.js +508 -0
  17. package/dist/collection/components/uds-pattern-login-card/validation/login-validation-rules.js +86 -0
  18. package/dist/collection/components/uds-pattern-login-card/view-model/login-card-handlers.js +1 -0
  19. package/dist/collection/components/uds-pattern-login-card/view-model/login-step.view-model.js +138 -0
  20. package/dist/collection/components/uds-pattern-login-page/uds-pattern-login-page.css +37 -0
  21. package/dist/collection/components/uds-pattern-login-page/uds-pattern-login-page.js +97 -0
  22. package/dist/collection/index.js +5 -0
  23. package/dist/collection/providers/auth-provider.js +28 -0
  24. package/dist/collection/providers/control-strategy.js +21 -0
  25. package/dist/collection/providers/login-config.js +4 -0
  26. package/dist/collection/providers/memory-auth-provider.js +133 -0
  27. package/dist/collection/providers/parse-auth-result.js +135 -0
  28. package/dist/collection/slimmer/common/log.js +14 -0
  29. package/dist/collection/slimmer/common/symbols.js +10 -0
  30. package/dist/collection/slimmer/common/types.js +2 -0
  31. package/dist/collection/slimmer/decorators/inject-slimmer.js +73 -0
  32. package/dist/collection/slimmer/decorators/map-to-component-field.js +41 -0
  33. package/dist/collection/slimmer/decorators/map-to-component-method.js +33 -0
  34. package/dist/collection/slimmer/decorators/slimmer.js +10 -0
  35. package/dist/collection/slimmer/index.js +5 -0
  36. package/dist/collection/utils/labels.js +81 -0
  37. package/dist/collection/utils/types.js +1 -0
  38. package/dist/components/index.d.ts +35 -0
  39. package/dist/components/index.js +1 -0
  40. package/dist/components/p-DOrg55po.js +1 -0
  41. package/dist/components/p-_G8A9gg0.js +1 -0
  42. package/dist/components/uds-pattern-login-card.d.ts +11 -0
  43. package/dist/components/uds-pattern-login-card.js +1 -0
  44. package/dist/components/uds-pattern-login-page.d.ts +11 -0
  45. package/dist/components/uds-pattern-login-page.js +1 -0
  46. package/dist/docs.d.ts +480 -0
  47. package/dist/docs.json +549 -0
  48. package/dist/esm/control-strategy-DOrg55po.js +105 -0
  49. package/dist/esm/gpds-pattern-web.js +20 -0
  50. package/dist/esm/index-DsXlLyGj.js +1537 -0
  51. package/dist/esm/index.js +170 -0
  52. package/dist/esm/loader.js +10 -0
  53. package/dist/esm/uds-pattern-login-card_2.entry.js +1659 -0
  54. package/dist/gpds-pattern-web/gpds-pattern-web.css +1 -0
  55. package/dist/gpds-pattern-web/gpds-pattern-web.esm.js +1 -0
  56. package/dist/gpds-pattern-web/index.esm.js +1 -0
  57. package/dist/gpds-pattern-web/p-2c97d2da.entry.js +1 -0
  58. package/dist/gpds-pattern-web/p-DOrg55po.js +1 -0
  59. package/dist/gpds-pattern-web/p-DsXlLyGj.js +3 -0
  60. package/dist/index.cjs.js +1 -0
  61. package/dist/index.js +1 -0
  62. package/dist/types/components/uds-pattern-login-card/slimmers/identity-memory.slimmer.d.ts +21 -0
  63. package/dist/types/components/uds-pattern-login-card/slimmers/login-workflow.slimmer.d.ts +100 -0
  64. package/dist/types/components/uds-pattern-login-card/slimmers/renderers/login-card-renderer.d.ts +44 -0
  65. package/dist/types/components/uds-pattern-login-card/slimmers/renderers/login-field-renderer.d.ts +91 -0
  66. package/dist/types/components/uds-pattern-login-card/slimmers/renderers/login-step-renderer.d.ts +40 -0
  67. package/dist/types/components/uds-pattern-login-card/slimmers/resend-throttle.slimmer.d.ts +21 -0
  68. package/dist/types/components/uds-pattern-login-card/uds-pattern-login-card.d.ts +134 -0
  69. package/dist/types/components/uds-pattern-login-card/validation/login-validation-rules.d.ts +72 -0
  70. package/dist/types/components/uds-pattern-login-card/view-model/login-card-handlers.d.ts +21 -0
  71. package/dist/types/components/uds-pattern-login-card/view-model/login-step.view-model.d.ts +96 -0
  72. package/dist/types/components/uds-pattern-login-page/uds-pattern-login-page.d.ts +21 -0
  73. package/dist/types/components.d.ts +327 -0
  74. package/dist/types/index.d.ts +10 -0
  75. package/dist/types/providers/auth-provider.d.ts +168 -0
  76. package/dist/types/providers/control-strategy.d.ts +144 -0
  77. package/dist/types/providers/login-config.d.ts +52 -0
  78. package/dist/types/providers/memory-auth-provider.d.ts +37 -0
  79. package/dist/types/providers/parse-auth-result.d.ts +8 -0
  80. package/dist/types/slimmer/common/log.d.ts +8 -0
  81. package/dist/types/slimmer/common/symbols.d.ts +10 -0
  82. package/dist/types/slimmer/common/types.d.ts +30 -0
  83. package/dist/types/slimmer/decorators/inject-slimmer.d.ts +24 -0
  84. package/dist/types/slimmer/decorators/map-to-component-field.d.ts +16 -0
  85. package/dist/types/slimmer/decorators/map-to-component-method.d.ts +11 -0
  86. package/dist/types/slimmer/decorators/slimmer.d.ts +10 -0
  87. package/dist/types/slimmer/index.d.ts +6 -0
  88. package/dist/types/stencil-public-runtime.d.ts +1879 -0
  89. package/dist/types/utils/labels.d.ts +13 -0
  90. package/dist/types/utils/types.d.ts +106 -0
  91. package/dist/types/vega.d.ts +11 -0
  92. package/loader/cdn.js +1 -0
  93. package/loader/index.cjs.js +1 -0
  94. package/loader/index.d.ts +24 -0
  95. package/loader/index.es2017.js +1 -0
  96. package/loader/index.js +2 -0
  97. package/package.json +82 -4
@@ -0,0 +1,170 @@
1
+ export { D as DEFAULT_LOGIN_LABELS, c as createControlStrategy, a as fail, f as formatLabel, g as goTo, s as stay } from './control-strategy-DOrg55po.js';
2
+
3
+ /**
4
+ * Provider contracts for the GP pattern library.
5
+ *
6
+ * A pattern owns the *workflow* — which step comes next, what is in flight,
7
+ * what the user is told when something fails. It owns no SDK code and knows no
8
+ * identity platform. The seam between the two is a Provider contract: the
9
+ * consumer brings their own backend SDK (Okta, Auth0, Cognito, Ping, GCP API
10
+ * Gateway, Azure APIM, …) and writes a thin adapter against the interface
11
+ * below.
12
+ *
13
+ * See `docs/adr/0002-provider-driven-patterns.md` for why the workflow lives
14
+ * inside the pattern rather than in the host application.
15
+ */
16
+ /**
17
+ * Identity helper that gives adapter authors type inference and a single place
18
+ * to add shared behaviour later (telemetry, retry, logging) without changing
19
+ * every call site.
20
+ *
21
+ * ```ts
22
+ * const auth = createAuthProvider({
23
+ * signIn: ({ identifier, password }) => oktaSdk.authn(identifier, password),
24
+ * verifyOtp: ({ code }) => oktaSdk.verifyFactor(code),
25
+ * });
26
+ * ```
27
+ */
28
+ function createAuthProvider(provider) {
29
+ return provider;
30
+ }
31
+
32
+ const DEFAULT_USER = {
33
+ identifier: 'ada@example.com',
34
+ password: 'correct-horse',
35
+ mfaMethods: [
36
+ { id: 'app', label: 'Authenticator app', description: 'Use the code from your authenticator app' },
37
+ { id: 'sms', label: 'Text message', description: 'Ending in ••3312' },
38
+ ],
39
+ otpCode: '555555',
40
+ };
41
+ /**
42
+ * An in-memory reference implementation of {@link UdsAuthProvider}.
43
+ *
44
+ * It exists so the demo harness and the test suite can drive the *real*
45
+ * workflow — identifier → password → MFA choice → OTP → success, plus the
46
+ * recovery, lockout and sign-up branches — without a network or an identity
47
+ * platform. It is also the worked example adapter authors copy from.
48
+ *
49
+ * Not intended for production use: it compares passwords in plain text.
50
+ */
51
+ function createMemoryAuthProvider(options = {}) {
52
+ const users = options.users ?? [DEFAULT_USER];
53
+ const maxAttempts = options.maxAttempts ?? 3;
54
+ const resendAfterMs = options.resendAfterMs ?? 30000;
55
+ const caps = {
56
+ signUp: true,
57
+ requestPasswordReset: true,
58
+ requestUsernameReminder: true,
59
+ resendOtp: true,
60
+ ...options.capabilities,
61
+ };
62
+ // Server-side state of the in-flight attempt.
63
+ let pending;
64
+ let failures = 0;
65
+ let locked = false;
66
+ const find = (identifier) => users.find(u => u.identifier.toLowerCase() === identifier.trim().toLowerCase());
67
+ const afterPassword = (user) => {
68
+ failures = 0;
69
+ if (user.mustResetPassword) {
70
+ return { status: 'password_reset_required' };
71
+ }
72
+ if (user.mfaMethods?.length) {
73
+ return { status: 'mfa_required', methods: user.mfaMethods };
74
+ }
75
+ return { status: 'success', session: { identifier: user.identifier } };
76
+ };
77
+ const provider = {
78
+ async signIn({ identifier, password }) {
79
+ if (locked) {
80
+ return { status: 'locked' };
81
+ }
82
+ const user = find(identifier);
83
+ if (!user) {
84
+ return { status: 'error', code: 'account_not_found' };
85
+ }
86
+ pending = user;
87
+ // Identifier-first: no password supplied yet.
88
+ if (password === undefined) {
89
+ return { status: 'password_required' };
90
+ }
91
+ return provider.verifyPassword({ identifier, password });
92
+ },
93
+ async verifyPassword({ password }) {
94
+ if (locked) {
95
+ return { status: 'locked' };
96
+ }
97
+ if (!pending) {
98
+ return { status: 'error', code: 'unknown' };
99
+ }
100
+ if (password !== pending.password) {
101
+ failures += 1;
102
+ if (failures >= maxAttempts) {
103
+ locked = true;
104
+ return { status: 'locked', unlockAfterMs: 15 * 60000 };
105
+ }
106
+ return { status: 'error', code: 'invalid_credentials' };
107
+ }
108
+ return afterPassword(pending);
109
+ },
110
+ async selectMfaMethod({ methodId }) {
111
+ const method = pending?.mfaMethods?.find(m => m.id === methodId);
112
+ return { status: 'otp_required', method, codeLength: 6, resendAfterMs };
113
+ },
114
+ async verifyOtp({ code }) {
115
+ if (code !== (pending?.otpCode ?? DEFAULT_USER.otpCode)) {
116
+ failures += 1;
117
+ if (failures >= maxAttempts) {
118
+ locked = true;
119
+ return { status: 'locked' };
120
+ }
121
+ return { status: 'error', code: 'invalid_code' };
122
+ }
123
+ failures = 0;
124
+ return { status: 'success', session: { identifier: pending?.identifier } };
125
+ },
126
+ async resetPassword({ password }) {
127
+ if (password.length < 8) {
128
+ return { status: 'error', code: 'password_policy' };
129
+ }
130
+ if (pending) {
131
+ pending.password = password;
132
+ pending.mustResetPassword = false;
133
+ }
134
+ return { status: 'success', session: { identifier: pending?.identifier } };
135
+ },
136
+ };
137
+ if (caps.resendOtp) {
138
+ provider.resendOtp = async () => ({ status: 'otp_required', codeLength: 6, resendAfterMs });
139
+ }
140
+ if (caps.requestPasswordReset) {
141
+ provider.requestPasswordReset = async ({ identifier }) => {
142
+ const user = find(identifier);
143
+ return user
144
+ ? { status: 'reset_link_sent', destination: user.identifier }
145
+ : { status: 'error', code: 'account_not_found' };
146
+ };
147
+ }
148
+ if (caps.requestUsernameReminder) {
149
+ provider.requestUsernameReminder = async ({ email }) => ({ status: 'username_sent', destination: email });
150
+ }
151
+ if (caps.signUp) {
152
+ provider.signUp = async ({ firstName, lastName, identifier }) => {
153
+ if (find(identifier)) {
154
+ return { status: 'error', code: 'account_exists' };
155
+ }
156
+ const user = { identifier, password: '', otpCode: DEFAULT_USER.otpCode };
157
+ users.push(user);
158
+ pending = user;
159
+ return { status: 'success', session: { identifier, firstName, lastName } };
160
+ };
161
+ }
162
+ return createAuthProvider(provider);
163
+ }
164
+
165
+ /** Identity helper giving a config literal its types without an annotation. */
166
+ function createLoginConfig(config) {
167
+ return config;
168
+ }
169
+
170
+ export { createAuthProvider, createLoginConfig, createMemoryAuthProvider };
@@ -0,0 +1,10 @@
1
+ import { g as globalScripts, b as bootstrapLazy } from './index-DsXlLyGj.js';
2
+ export { s as setNonce } from './index-DsXlLyGj.js';
3
+
4
+ const defineCustomElements = async (win, options) => {
5
+ if (typeof window === 'undefined') return undefined;
6
+ await globalScripts();
7
+ return bootstrapLazy([["uds-pattern-login-card_2",[[257,"uds-pattern-login-card",{"config":[1],"initialStep":[1,"initial-step"],"identifier":[1],"otpLength":[2,"otp-length"],"rememberStorageKey":[1,"remember-storage-key"],"showHelpFooter":[4,"show-help-footer"],"step":[32],"busy":[32],"errorText":[32],"methods":[32],"otpMethodLabel":[32],"destination":[32],"unlockMinutes":[32],"resendAt":[32],"nowTick":[32],"values":[32],"reset":[64]}],[257,"uds-pattern-login-page",{"logoSrc":[1,"logo-src"],"logoAlt":[1,"logo-alt"],"logoHref":[1,"logo-href"]}]]]], options);
8
+ };
9
+
10
+ export { defineCustomElements };