zyphr 0.1.55 → 0.1.57

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 78bb305af68d19bf367f4a1dfd0947fe5a83e2b339f3477abb2d123608ccf627
4
- data.tar.gz: 3ca4b809dfae512150cf30224c490a55499f51c91071af4f4fdbb324e11657e1
3
+ metadata.gz: 5df74a41bd87130c14d2f741651f1617baade8b9ebe23f90d7edc1b112c15bc0
4
+ data.tar.gz: 72b9840799c7b7e72e16db2bcb96f982e5f7b9a2d4f296195d1303be7549d1fe
5
5
  SHA512:
6
- metadata.gz: 497270029ef52c3c6a9b183c22a623b86292d4da19ecb85325173ebaa54f5b655795ca0c119011269e0048bbd7784ceedb7cd711740133ee37db1feec0451f8e
7
- data.tar.gz: 7941e5eaaabb87dda7c572ac928b451484d7756a269fc48795decec7f8888a92f518a9c10222adb559b5da05ff91c23cc5866772c69de44b3341576919fd55bb
6
+ metadata.gz: 7e558a85a1ffcc94bc8e692c4d7338d89632e878daf74229f7689d3b3c2236ae0500e8d375f1ee4d039836f0bd66e33ece72db481e9fb3416916d9d039eabeef
7
+ data.tar.gz: dc84b266eaa34edd83b5000997e8867681378d12564c1b158a492aea6c0adcabaf1d2d28e7b7c5cdc554d5d35bf4905d8f3986745613c10cc4f0030c0530dede
@@ -15,7 +15,7 @@ All URIs are relative to *https://api.zyphr.dev/v1*
15
15
 
16
16
  Request a password reset
17
17
 
18
- Request a password reset email. Creates a reset token and sends an email to the user. Always returns success to prevent email enumeration.
18
+ Request a password reset email. Creates a reset token and sends an email to the user. Always returns success to prevent email enumeration — the response is identical whether or not the address is registered. An identity with **no password set** still receives a link, which sets a first password. This covers users migrated from a provider that cannot export password hashes. The one case where no email is sent (beyond an unknown address) is an identity that has no password but *does* have another way in — a linked OAuth provider and/or a passkey. Those users are not locked out, so no set-password link is sent; the attempt is recorded as a suppressed message visible via `GET /emails`.
19
19
 
20
20
  ### Examples
21
21
 
data/docs/DevicesApi.md CHANGED
@@ -378,7 +378,7 @@ end
378
378
 
379
379
  Register a device
380
380
 
381
- Register a device for push notifications. If the token already exists, updates it.
381
+ Register a device for push notifications. Registration is an upsert keyed on (project, token), so calling it on every app launch is safe and idempotent. Re-registering an existing token under a different `user_id` **reassigns** the device to that user — the previous association does not persist, so a push addressed to the old user will not reach this device. `user_id` is an opaque string you choose. It is stored verbatim with no foreign key, and `POST /v1/push` matches on exactly that value. No Subscriber record is created for you. Requires a secret API key, so call it from your backend and derive `user_id` from the authenticated session rather than the request body.
382
382
 
383
383
  ### Examples
384
384
 
@@ -7,6 +7,7 @@
7
7
  | **user_id** | **String** | | [optional] |
8
8
  | **created** | **Boolean** | True when a new user was provisioned; false when an existing user was reused (idempotent on email). | [optional] |
9
9
  | **link_sent** | **Boolean** | True when a magic-link or password-reset email was successfully dispatched. | [optional] |
10
+ | **link_suppressed_reason** | **String** | Present only when `send_link` was requested and `link_sent` is false — explains why, so a caller can distinguish \"suppressed by design\" from \"delivery failed\". Known values: - `identity_has_other_auth_methods` — the identity has no password but does have a linked OAuth provider and/or a passkey, so it is not locked out and no set-password link is sent. The attempt is recorded as a suppressed message, visible via `GET /emails`. - `user_not_found_in_environment` — the identity could not be resolved in the calling environment (a race; it was created or resolved immediately prior). - `recipient_not_allowlisted` — the application's `test_recipients` allowlist blocked the recipient. - `send_failed` — dispatch was attempted and failed with no more specific code. Not a closed set: a mail-provider error code may be surfaced verbatim, so treat an unrecognised value as a generic failure rather than an error. | [optional] |
10
11
 
11
12
  ## Example
12
13
 
@@ -16,7 +17,8 @@ require 'zyphr'
16
17
  instance = Zyphr::InviteEndUser200ResponseData.new(
17
18
  user_id: null,
18
19
  created: null,
19
- link_sent: null
20
+ link_sent: null,
21
+ link_suppressed_reason: identity_has_other_auth_methods
20
22
  )
21
23
  ```
22
24
 
@@ -20,7 +20,7 @@ module Zyphr
20
20
  @api_client = api_client
21
21
  end
22
22
  # Request a password reset
23
- # Request a password reset email. Creates a reset token and sends an email to the user. Always returns success to prevent email enumeration.
23
+ # Request a password reset email. Creates a reset token and sends an email to the user. Always returns success to prevent email enumeration — the response is identical whether or not the address is registered. An identity with **no password set** still receives a link, which sets a first password. This covers users migrated from a provider that cannot export password hashes. The one case where no email is sent (beyond an unknown address) is an identity that has no password but *does* have another way in — a linked OAuth provider and/or a passkey. Those users are not locked out, so no set-password link is sent; the attempt is recorded as a suppressed message visible via `GET /emails`.
24
24
  # @param forgot_password_request [ForgotPasswordRequest]
25
25
  # @param [Hash] opts the optional parameters
26
26
  # @return [SuccessResult]
@@ -30,7 +30,7 @@ module Zyphr
30
30
  end
31
31
 
32
32
  # Request a password reset
33
- # Request a password reset email. Creates a reset token and sends an email to the user. Always returns success to prevent email enumeration.
33
+ # Request a password reset email. Creates a reset token and sends an email to the user. Always returns success to prevent email enumeration — the response is identical whether or not the address is registered. An identity with **no password set** still receives a link, which sets a first password. This covers users migrated from a provider that cannot export password hashes. The one case where no email is sent (beyond an unknown address) is an identity that has no password but *does* have another way in — a linked OAuth provider and/or a passkey. Those users are not locked out, so no set-password link is sent; the attempt is recorded as a suppressed message visible via `GET /emails`.
34
34
  # @param forgot_password_request [ForgotPasswordRequest]
35
35
  # @param [Hash] opts the optional parameters
36
36
  # @return [Array<(SuccessResult, Integer, Hash)>] SuccessResult data, response status code and response headers
@@ -339,7 +339,7 @@ module Zyphr
339
339
  end
340
340
 
341
341
  # Register a device
342
- # Register a device for push notifications. If the token already exists, updates it.
342
+ # Register a device for push notifications. Registration is an upsert keyed on (project, token), so calling it on every app launch is safe and idempotent. Re-registering an existing token under a different `user_id` **reassigns** the device to that user — the previous association does not persist, so a push addressed to the old user will not reach this device. `user_id` is an opaque string you choose. It is stored verbatim with no foreign key, and `POST /v1/push` matches on exactly that value. No Subscriber record is created for you. Requires a secret API key, so call it from your backend and derive `user_id` from the authenticated session rather than the request body.
343
343
  # @param register_device_request [RegisterDeviceRequest]
344
344
  # @param [Hash] opts the optional parameters
345
345
  # @return [DeviceResponse]
@@ -349,7 +349,7 @@ module Zyphr
349
349
  end
350
350
 
351
351
  # Register a device
352
- # Register a device for push notifications. If the token already exists, updates it.
352
+ # Register a device for push notifications. Registration is an upsert keyed on (project, token), so calling it on every app launch is safe and idempotent. Re-registering an existing token under a different &#x60;user_id&#x60; **reassigns** the device to that user — the previous association does not persist, so a push addressed to the old user will not reach this device. &#x60;user_id&#x60; is an opaque string you choose. It is stored verbatim with no foreign key, and &#x60;POST /v1/push&#x60; matches on exactly that value. No Subscriber record is created for you. Requires a secret API key, so call it from your backend and derive &#x60;user_id&#x60; from the authenticated session rather than the request body.
353
353
  # @param register_device_request [RegisterDeviceRequest]
354
354
  # @param [Hash] opts the optional parameters
355
355
  # @return [Array<(DeviceResponse, Integer, Hash)>] DeviceResponse data, response status code and response headers
@@ -23,12 +23,16 @@ module Zyphr
23
23
  # True when a magic-link or password-reset email was successfully dispatched.
24
24
  attr_accessor :link_sent
25
25
 
26
+ # Present only when `send_link` was requested and `link_sent` is false — explains why, so a caller can distinguish \"suppressed by design\" from \"delivery failed\". Known values: - `identity_has_other_auth_methods` — the identity has no password but does have a linked OAuth provider and/or a passkey, so it is not locked out and no set-password link is sent. The attempt is recorded as a suppressed message, visible via `GET /emails`. - `user_not_found_in_environment` — the identity could not be resolved in the calling environment (a race; it was created or resolved immediately prior). - `recipient_not_allowlisted` — the application's `test_recipients` allowlist blocked the recipient. - `send_failed` — dispatch was attempted and failed with no more specific code. Not a closed set: a mail-provider error code may be surfaced verbatim, so treat an unrecognised value as a generic failure rather than an error.
27
+ attr_accessor :link_suppressed_reason
28
+
26
29
  # Attribute mapping from ruby-style variable name to JSON key.
27
30
  def self.attribute_map
28
31
  {
29
32
  :'user_id' => :'user_id',
30
33
  :'created' => :'created',
31
- :'link_sent' => :'link_sent'
34
+ :'link_sent' => :'link_sent',
35
+ :'link_suppressed_reason' => :'link_suppressed_reason'
32
36
  }
33
37
  end
34
38
 
@@ -47,7 +51,8 @@ module Zyphr
47
51
  {
48
52
  :'user_id' => :'String',
49
53
  :'created' => :'Boolean',
50
- :'link_sent' => :'Boolean'
54
+ :'link_sent' => :'Boolean',
55
+ :'link_suppressed_reason' => :'String'
51
56
  }
52
57
  end
53
58
 
@@ -84,6 +89,10 @@ module Zyphr
84
89
  if attributes.key?(:'link_sent')
85
90
  self.link_sent = attributes[:'link_sent']
86
91
  end
92
+
93
+ if attributes.key?(:'link_suppressed_reason')
94
+ self.link_suppressed_reason = attributes[:'link_suppressed_reason']
95
+ end
87
96
  end
88
97
 
89
98
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -108,7 +117,8 @@ module Zyphr
108
117
  self.class == o.class &&
109
118
  user_id == o.user_id &&
110
119
  created == o.created &&
111
- link_sent == o.link_sent
120
+ link_sent == o.link_sent &&
121
+ link_suppressed_reason == o.link_suppressed_reason
112
122
  end
113
123
 
114
124
  # @see the `==` method
@@ -120,7 +130,7 @@ module Zyphr
120
130
  # Calculates hash code according to all attributes.
121
131
  # @return [Integer] Hash code
122
132
  def hash
123
- [user_id, created, link_sent].hash
133
+ [user_id, created, link_sent, link_suppressed_reason].hash
124
134
  end
125
135
 
126
136
  # Builds the object from hash
@@ -34,7 +34,7 @@ describe 'AuthPasswordResetApi' do
34
34
 
35
35
  # unit tests for forgot_password
36
36
  # Request a password reset
37
- # Request a password reset email. Creates a reset token and sends an email to the user. Always returns success to prevent email enumeration.
37
+ # Request a password reset email. Creates a reset token and sends an email to the user. Always returns success to prevent email enumeration — the response is identical whether or not the address is registered. An identity with **no password set** still receives a link, which sets a first password. This covers users migrated from a provider that cannot export password hashes. The one case where no email is sent (beyond an unknown address) is an identity that has no password but *does* have another way in — a linked OAuth provider and/or a passkey. Those users are not locked out, so no set-password link is sent; the attempt is recorded as a suppressed message visible via &#x60;GET /emails&#x60;.
38
38
  # @param forgot_password_request
39
39
  # @param [Hash] opts the optional parameters
40
40
  # @return [SuccessResult]
@@ -96,7 +96,7 @@ describe 'DevicesApi' do
96
96
 
97
97
  # unit tests for register_device
98
98
  # Register a device
99
- # Register a device for push notifications. If the token already exists, updates it.
99
+ # Register a device for push notifications. Registration is an upsert keyed on (project, token), so calling it on every app launch is safe and idempotent. Re-registering an existing token under a different &#x60;user_id&#x60; **reassigns** the device to that user — the previous association does not persist, so a push addressed to the old user will not reach this device. &#x60;user_id&#x60; is an opaque string you choose. It is stored verbatim with no foreign key, and &#x60;POST /v1/push&#x60; matches on exactly that value. No Subscriber record is created for you. Requires a secret API key, so call it from your backend and derive &#x60;user_id&#x60; from the authenticated session rather than the request body.
100
100
  # @param register_device_request
101
101
  # @param [Hash] opts the optional parameters
102
102
  # @return [DeviceResponse]
@@ -45,4 +45,10 @@ describe Zyphr::InviteEndUser200ResponseData do
45
45
  end
46
46
  end
47
47
 
48
+ describe 'test attribute "link_suppressed_reason"' do
49
+ it 'should work' do
50
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
51
+ end
52
+ end
53
+
48
54
  end
data/zyphr.gemspec CHANGED
@@ -17,7 +17,7 @@ require "zyphr/version"
17
17
 
18
18
  Gem::Specification.new do |s|
19
19
  s.name = "zyphr"
20
- s.version = '0.1.55'
20
+ s.version = '0.1.57'
21
21
  s.platform = Gem::Platform::RUBY
22
22
  s.authors = ["Zyphr"]
23
23
  s.email = ["support@zyphr.dev"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zyphr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.55
4
+ version: 0.1.57
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zyphr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-08-15 00:00:00.000000000 Z
11
+ date: 2026-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday