Packages
phoenix_kit
1.7.196
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
221 Versions
Jump to
Current section
221 Versions
Compare versions
22
files changed
+191
additions
-13
deletions
unknownCHANGELOG.md
File is too large to be displayed (100 KB limit).
| @@ -1,6 +1,6 @@ | |
| 1 1 | {<<"links">>,[{<<"GitHub">>,<<"https://github.com/BeamLabEU/phoenix_kit">>}]}. |
| 2 2 | {<<"name">>,<<"phoenix_kit">>}. |
| 3 | - {<<"version">>,<<"1.7.194">>}. |
| 3 | + {<<"version">>,<<"1.7.196">>}. |
| 4 4 | {<<"description">>, |
| 5 5 | <<65,32,102,111,117,110,100,97,116,105,111,110,32,102,111,114,32,98,117,105, |
| 6 6 | 108,100,105,110,103,32,69,108,105,120,105,114,32,80,104,111,101,110,105, |
| @@ -593,6 +593,7 @@ | |
| 593 593 | <<"lib/phoenix_kit/migrations/postgres/v97.ex">>, |
| 594 594 | <<"lib/phoenix_kit/migrations/postgres/v60.ex">>, |
| 595 595 | <<"lib/phoenix_kit/migrations/postgres/v120.ex">>, |
| 596 | + <<"lib/phoenix_kit/migrations/postgres/v150.ex">>, |
| 596 597 | <<"lib/phoenix_kit/migrations/postgres/v10.ex">>, |
| 597 598 | <<"lib/phoenix_kit/migrations/postgres/v118.ex">>, |
| 598 599 | <<"lib/phoenix_kit/migrations/postgres/v147.ex">>, |
| @@ -348,7 +348,10 @@ defmodule PhoenixKit.Integrations.Providers do | |
| 348 348 | options: nil |
| 349 349 | } |
| 350 350 | ], |
| 351 | - capabilities: [:ai_completions, :ai_embeddings], |
| 351 | + # `:image_generation` — OpenRouter's catalog includes real image-gen |
| 352 | + # models (Gemini image, GPT-image-1, etc.) at the standard |
| 353 | + # OpenAI-compatible `/images/generations` path. |
| 354 | + capabilities: [:ai_completions, :ai_embeddings, :image_generation], |
| 352 355 | instructions: [ |
| 353 356 | %{ |
| 354 357 | title: gettext("Create an OpenRouter account"), |
| @@ -529,7 +532,12 @@ defmodule PhoenixKit.Integrations.Providers do | |
| 529 532 | # `:realtime_voice` gates the xAI-only streaming TTS panel in |
| 530 533 | # phoenix_kit_ai's Playground (Xai.Realtime, WebSocket-based — not |
| 531 534 | # reachable through the shared REST completions path). |
| 532 | - capabilities: [:ai_completions, :realtime_voice], |
| 535 | + # `:image_generation` — xAI's `POST /v1/images/generations` returns |
| 536 | + # the same `data: [{url | b64_json}]` envelope OpenAI's does, |
| 537 | + # despite `grok-imagine-image[-quality]` being invisible to the |
| 538 | + # shared `/models`-based picker's `:image_gen` filter without the |
| 539 | + # xAI-specific no-modality fallback that filter already has. |
| 540 | + capabilities: [:ai_completions, :realtime_voice, :image_generation], |
| 533 541 | instructions: [ |
| 534 542 | %{ |
| 535 543 | title: gettext("Create an xAI account"), |
| @@ -529,7 +529,13 @@ defmodule PhoenixKit.Migrations.Postgres do | |
| 529 529 | - Replaces unique index with partial index (slug-mode only, WHERE slug IS NOT NULL) |
| 530 530 | - Adds unique index on `(group_uuid, post_date, post_time)` for timestamp-mode posts |
| 531 531 | |
| 532 | - ### V149 - Catalogue item-supplier sourcing info + CRM xref ⚡ LATEST |
| 532 | + ### V150 - Readable device name on session tokens ⚡ LATEST |
| 533 | + - Adds nullable `browser` + `os` to `phoenix_kit_users_tokens`, parsed |
| 534 | + from the User-Agent at login, so the Active Sessions list and admin |
| 535 | + all-sessions view show a device name for every session without the |
| 536 | + known-devices/geo machinery (which stays gated behind new-login alerts). |
| 537 | + |
| 538 | + ### V149 - Catalogue item-supplier sourcing info + CRM xref |
| 533 539 | - Adds `phoenix_kit_cat_item_supplier_info` (per-item, per-supplier SKU / |
| 534 540 | unit cost / currency / lead time / MOQ; `supplier_uuid` soft ref to a |
| 535 541 | CRM party or local `cat_supplier`) and a soft `crm_company_uuid` xref on |
| @@ -1303,7 +1309,7 @@ defmodule PhoenixKit.Migrations.Postgres do | |
| 1303 1309 | alias PhoenixKit.Migrations.Postgres.Helpers |
| 1304 1310 | |
| 1305 1311 | @initial_version 1 |
| 1306 | - @current_version 149 |
| 1312 | + @current_version 150 |
| 1307 1313 | @default_prefix "public" |
| 1308 1314 | |
| 1309 1315 | # First version whose SQL references uuid_generate_v7(). Chains that |
| @@ -0,0 +1,46 @@ | |
| 1 | + defmodule PhoenixKit.Migrations.Postgres.V150 do |
| 2 | + @moduledoc """ |
| 3 | + V150: Readable device name on session tokens. |
| 4 | + |
| 5 | + Adds nullable `browser` and `os` columns to `phoenix_kit_users_tokens`, |
| 6 | + parsed from the User-Agent at login (V43 already stores the hashed UA for |
| 7 | + fingerprint matching — the raw string, and thus the readable name, was |
| 8 | + never kept). Storing the parsed name lets the user's Active Sessions list |
| 9 | + and the admin all-sessions view show "Safari on iOS" for every session, |
| 10 | + independent of the `new_login_alert_enabled` setting (which gates the |
| 11 | + richer, more sensitive geo-location via known-devices). |
| 12 | + |
| 13 | + Existing sessions predate the columns and show as "Unknown device" until |
| 14 | + their next sign-in — the raw UA was never stored, so there's nothing to |
| 15 | + backfill. |
| 16 | + """ |
| 17 | + |
| 18 | + use Ecto.Migration |
| 19 | + |
| 20 | + def up(opts) do |
| 21 | + prefix = Map.get(opts, :prefix, "public") |
| 22 | + p = prefix_str(prefix) |
| 23 | + |
| 24 | + alter table(:phoenix_kit_users_tokens, prefix: prefix) do |
| 25 | + add_if_not_exists(:browser, :string, size: 100) |
| 26 | + add_if_not_exists(:os, :string, size: 100) |
| 27 | + end |
| 28 | + |
| 29 | + execute("COMMENT ON TABLE #{p}phoenix_kit IS '150'") |
| 30 | + end |
| 31 | + |
| 32 | + def down(opts) do |
| 33 | + prefix = Map.get(opts, :prefix, "public") |
| 34 | + p = prefix_str(prefix) |
| 35 | + |
| 36 | + alter table(:phoenix_kit_users_tokens, prefix: prefix) do |
| 37 | + remove_if_exists(:browser, :string) |
| 38 | + remove_if_exists(:os, :string) |
| 39 | + end |
| 40 | + |
| 41 | + execute("COMMENT ON TABLE #{p}phoenix_kit IS '149'") |
| 42 | + end |
| 43 | + |
| 44 | + defp prefix_str("public"), do: "public." |
| 45 | + defp prefix_str(prefix), do: "#{prefix}." |
| 46 | + end |
Loading more files…